Code:
//Title of Script: Portable Teleporter
//Description of Script: Teleports people to major citys with a item teleporter.
//Author: Aldaus
//Credits: To Mesmer for helping me fix the combat check.
#include "StdAfx.h"
#include "Setup.h"
#ifdef WIN32
#pragma warning(disable:4305) // warning C4305: 'argument' : truncation from 'double' to 'float'
#endif
//Defining Pwarper
class SCRIPT_DECL Pwarper : 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);
void Destroy()
{
delete this;
}
};
void Pwarper::GossipHello(Object* pObject, Player * Plr, bool AutoSend)
{
if(Plr->CombatStatus.IsInCombat())
{
Plr->BroadcastMessage("You are in combat!");
}
if(!Plr->CombatStatus.IsInCombat())
{
GossipMenu *Menu;
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 2593, Plr);
Menu->AddItem(0, "Stormwind", 50);
Menu->AddItem(0, "Ironforge", 51);
Menu->AddItem(0, "Exodar", 52);
Menu->AddItem(0, "Darnassus", 53);
Menu->AddItem(0, "Orgrimar", 54);
Menu->AddItem(0, "Thunder Bluff", 55);
Menu->AddItem(0, "Silvermoon City", 56);
Menu->AddItem(0, "Undercity", 57);
Menu->AddItem(0, "Shattrath", 58);
if(AutoSend)
Menu->SendTo(Plr);
}
};
//Defining Cases
void Pwarper::GossipSelectOption(Object* pObject, Player* Plr, uint32 Id, uint32 IntId, const char * Code)
{
GossipMenu * Menu;
switch(IntId)
{
case 50:
{ //Stormwind
if(Plr->getRace()== 10||Plr->getRace()== 2||Plr->getRace()== 6||Plr->getRace()== 8||Plr->getRace()== 5)
{
Plr->BroadcastMessage("You are horde, you cannot go there stupid!");
}
else
{
Plr->SafeTeleport(0, 0, -8831.61, 622.666, 93.7787, 0);
Plr->Gossip_Complete();
}
}break;
case 51:
{ //Ironforge
if(Plr->getRace()== 10||Plr->getRace()== 2||Plr->getRace()== 6||Plr->getRace()== 8||Plr->getRace()== 5)
{
Plr->BroadcastMessage("You are horde, you cannot go there stupid!");
}
else
{
Plr->SafeTeleport(0, 0, -4804.45, -1101.14, 498.807, 0);
Plr->Gossip_Complete();
}
}break;
case 52:
{ //Exodar
if(Plr->getRace()== 10||Plr->getRace()== 2||Plr->getRace()== 6||Plr->getRace()== 8||Plr->getRace()== 5)
{
Plr->BroadcastMessage("You are horde, you cannot go there stupid!");
}
else
{
Plr->SafeTeleport(530, 0, -3796.24, -11710.9, -105.45, 0);
Plr->Gossip_Complete();
}
}break;
case 53:
{ //Darnassus
if(Plr->getRace()== 10||Plr->getRace()== 2||Plr->getRace()== 6||Plr->getRace()== 8||Plr->getRace()== 5)
{
Plr->BroadcastMessage("You are on the Horde, you cannot go there stupid!");
}
else
{
Plr->SafeTeleport(1, 0, 9952.07, 2278.46, 1341.39, 0);
Plr->Gossip_Complete();
}
}break;
case 54:
{ //Orgrimmar
if(Plr->getRace()== 10||Plr->getRace()== 2||Plr->getRace()== 6||Plr->getRace()== 8||Plr->getRace()== 5)
{
Plr->SafeTeleport(1, 0, 1499.55, -4406.91, 23.1642, 0);
Plr->Gossip_Complete();
}
else
{
Plr->BroadcastMessage("You are on the Alliance, you cannot go there stupid!");
}
}break;
case 55:
{ //Thunder Bluff
if(Plr->getRace()== 10||Plr->getRace()== 2||Plr->getRace()== 6||Plr->getRace()== 8||Plr->getRace()== 5)
{
Plr->SafeTeleport(1, 0, -1195.88, -56.5582, 160.034, 0);
Plr->Gossip_Complete();
}
else
{
Plr->BroadcastMessage("You are on the Alliance, you cannot go there stupid!");
}
}break;
case 56:
{ //Silvermoon City
if(Plr->getRace()== 10||Plr->getRace()== 2||Plr->getRace()== 6||Plr->getRace()== 8||Plr->getRace()== 5)
{
Plr->SafeTeleport(530, 0, 9492.45, -7279.12, 14.3036, 0);
Plr->Gossip_Complete();
}
else
{
Plr->BroadcastMessage("You are on the Alliance, you cannot go there stupid!");
}
}break;
case 57:
{ //Undercity
if(Plr->getRace()== 10||Plr->getRace()== 2||Plr->getRace()== 6||Plr->getRace()== 8||Plr->getRace()== 5)
{
Plr->SafeTeleport(0, 0, 1615.1, 239.786, -62.0774, 0);
Plr->Gossip_Complete();
}
else
{
Plr->BroadcastMessage("You are on the Alliance, you cannot go there stupid!");
}
}break;
case 58:
{ //Shattrath
Plr->SafeTeleport(530, 0, -1852, 5432, -11, 0);
Plr->Gossip_Complete();
}break;
}
};
void Pwarper::GossipEnd(Object * pObject, Player* Plr)
{
GossipScript::GossipEnd(pObject, Plr);
}
void SetupPwarper(ScriptMgr * mgr)
{
GossipScript * gs = (GossipScript*) new Pwarper();
mgr->register_item_gossip_script(40010,gs);
}