Code:
WarpNPC.cpp
////Advanced WarpNPC designed by HeRMeS////
#include "StdAfx.h"
#include "Setup.h"
#ifdef WIN32
#pragma warning(disable:4305)
#endif
class SCRIPT_DECL WarpNPC : 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 WarpNPC::GossipHello(Object * pObject, Player* Plr, bool AutoSend)
{
GossipMenu *Menu;
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
if (Plr->GetTeam() == 1)
{
Menu->AddItem(5, "Main Horde Zones", 1); //horde
}
else
{
Menu->AddItem(5, "Main Alliance Zones", 2); //alliance
}
Menu->AddItem(5, "Remove Ressurrection Sickness", 8);
Menu->SendTo(Plr);
}
void WarpNPC::GossipSelectOption(Object * pObject, Player* Plr, uint32 Id, uint32 IntId, const char * Code)
{
Creature * pCreature = (pObject->GetTypeId()==TYPEID_UNIT)?((Creature*)pObject):NULL;
if(pCreature==NULL)
return;
GossipMenu * Menu;
switch(IntId)
{
case 0:
GossipHello(pObject, Plr, true);
break;
case 100: //main menu return
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
if (Plr->GetTeam() == 1)
{
Menu->AddItem(5, "Main Horde Zones", 1);
}
else
{
Menu->AddItem(5, "Main Alliance Zones", 2);
}
Menu->AddItem(5, "Remove Ressurrection Sickness", 8);
Menu->SendTo(Plr);
}
break;
case 1: // Horde City's d'oh
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(5, "Orgrimmar", 9);
if(Plr->getLevel()>=58){Menu->AddItem(0, "Shattrath", 10);}
Menu->AddItem(5, "Undercity", 11);
Menu->AddItem(5, "Thunder Bluff", 12);
Menu->AddItem(5, "Silvermoon", 13);
Menu->AddItem(5, "Gadgetzan", 14);
Menu->AddItem(5, "Booty Bay", 15);
if(Plr->getLevel()>=68){Menu->AddItem(0, "Dalaran", 16);}
Menu->AddItem(0, "[Main Menu]", 100);
Menu->SendTo(Plr);
}
break;
case 2: // Alliance City's d'oh
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(5, "Stormwind", 18);
if(Plr->getLevel()>=58){Menu->AddItem(0, "Shattrath", 19);}
Menu->AddItem(5, "Ironforge", 20);
Menu->AddItem(5, "Darnassus", 21);
Menu->AddItem(5, "The Exodar", 22);
Menu->AddItem(5, "Gadgetzan", 23);
Menu->AddItem(5, "Booty Bay", 24);
if(Plr->getLevel()>=68){Menu->AddItem(0, "Dalaran", 25);}
Menu->AddItem(0, "[Main Menu]", 100);
Menu->SendTo(Plr);
}
break;
case 8:
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Plr->addSpell(15007);
Plr->removeSpell(15007,0,0,0);
pCreature->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "Sickness Removed,enjoy Corpse Camping!" );
Menu->AddItem(0, "[Main Menu]", 100);
Menu->SendTo(Plr);
}
break;
case 13: //SMC
{
Plr->EventTeleport(530, 9414.18, -7278.97, 15.2031);
}
break;
case 10: //Shatt Horde
{
Plr->EventTeleport(530, 1722.58, 5382.7, 2.47504);
}
break;
case 19: //Shatt Ally
{
Plr->EventTeleport(530, 1722.58, 5382.7, 2.47504);
}
break;
case 9: //Orgrimmar
{
Plr->EventTeleport(1, 1502.71, -4415.42, 22.5512);
}
break;
case 12: //Beef Jerky
{
Plr->EventTeleport(1, -1285.42, 176.523, 130.994);
}
break;
case 11: //Undercity
{
Plr->EventTeleport(0, 1831.26, 238.53, 61.52);
}
break;
case 22: //Exodar
{
Plr->EventTeleport(530, -4014.08, -11895.8, -0.99324);
}
break;
case 18: //Stormwind
{
Plr->EventTeleport(0, -8913.23, 554.633, 94.7944);
}
break;
case 20: //Midgetland
{
Plr->EventTeleport(0, -4981.25, -881.542, 502.66);
}
break;
case 21: //Darnassus
{
Plr->EventTeleport(1, 8795.8, 969.427, 31.1955);
}
break;
case 14: //Gadgetzan HORDE
{
Plr->EventTeleport(1, -7154.86, -3817.94, 9.39779);
}
break;
case 23: //Gadgetzan ALLIANCE
{
Plr->EventTeleport(1, -7154.86, -3817.94, 9.39779);
}
break;
case 15: //Booty Bay HORDE
{
Plr->EventTeleport(0, -14406.6, 419.353, 23.3907);
}
break;
case 24: //Booty Bay ALLIANCE
{
Plr->EventTeleport(0, -14406.6, 419.353, 23.3907);
}
break;
case 16: //Dalaran H
{
Plr->EventTeleport(571, 5784.95, 667.995, 755.711);
}
break;
case 25: //Dalaran A
{
Plr->EventTeleport(571, 5784.95, 667.995, 755.711);
}
break;
}
}
void WarpNPC::GossipEnd(Object * pObject, Player* Plr)
{
GossipScript::GossipEnd(pObject, Plr);
}
void SetupWarpNPC(ScriptMgr * mgr)
{
GossipScript * gs = (GossipScript*) new WarpNPC();
mgr->register_gossip_script(<ID HERE>, gs);
}