Imp Hearthstone
A pretty simple, but imo useful script. It simply records your coordinates when you click "Go Home" and teleports you to your hearthstone location. Then, when your done selling all of your items/doing whatever (maybe you wanted to do a battleground for a bit) you can click the item again and click "Go Back" which will teleport you right back to where you first used the item. Right back into the action.
I made it pretty much because when I was right in the middle of a quest or something and I needed to either repair or sell my shit, i didn't want to hearth back to town and then have to walk all the way back to what I was doing.
I'm not including the SQL because i'm sure all of you smrt people on this forum can figure out how to make an item 
Tested on ArcEmu, but it would be easily modified for any Ascent based emulator.
Step 1:


Step 2:

Step 3:

Step 4:

Step 5:

Script:
Code:
#include "StdAfx.h"
#include "Setup.h"
const char* menuText = "Go Home";
int menuId = 1;
float playerX;
float playerY;
float playerZ;
float playerO;
int instanceId;
uint32 mapId;
class SCRIPT_DECL ImpHearthstone : public GossipScript
{
public:
void GossipHello(Object * pObject, Player * Plr, bool AutoSend);
void GossipSelectOption(Object * pObject, Player * Plr, uint32 Id, uint32 IntId, const char * Code);
void GossipEnd(Object * pObject, Player * Plr){GossipScript::GossipEnd(pObject, Plr);}
void Destroy(){delete this;}
};
void ImpHearthstone::GossipHello(Object * pObject, Player * Plr, bool AutoSend)
{
GossipMenu *Menu;
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(0, menuText, menuId);
Menu->AddItem(0, "Reset", 3);
if(AutoSend)
Menu->SendTo(Plr);
}
void ImpHearthstone::GossipSelectOption(Object * pObject, Player * Plr, uint32 Id, uint32 IntId, const char * Code)
{
switch(IntId)
{
case 1:
{
Player * pTarget = Plr->GetMapMgr()->GetPlayer(Plr->GetGUID());
mapId = Plr->GetMapId();
playerX = Plr->GetPositionX();
playerY = Plr->GetPositionY();
playerZ = Plr->GetPositionZ();
playerO = Plr->GetOrientation();
instanceId =Plr->GetInstanceID();
Plr->CastSpell(pTarget, 8690, true);
menuText = "Go Back";
menuId = 2;
Plr->Gossip_Complete();
}
break;
case 2:
{
Plr->SafeTeleport(mapId, instanceId, playerX, playerY, playerZ, playerO);
menuText = "Go Home";
menuId = 1;
Plr->Gossip_Complete();
}
break;
case 3:
{
menuText = "Go Home";
menuId = 1;
Plr->Gossip_Complete();
}
}
}
void SetupImpHearthstone(ScriptMgr * mgr)
{
GossipScript * itr = (GossipScript*) new ImpHearthstone();
mgr->register_item_gossip_script(ITEMID, itr);
}
Change ITEMID to the Id of your item.
Please report any bugs/additions you would like to see to this script in this thread. Don't PM me you bums.
I will be adding a few more things within the next few days, but I don't have time atm to be on the computer.
Updated 1.0:
-Reset button
-Closes on select option