Code:
#include "StdAfx.h"
#include "Setup.h"
class SCRIPT_DECL Warper : 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 Warper::GossipHello(Object * pObject, Player* Plr, bool AutoSend)
{
GossipMenu *Menu;
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(0, "[Main Cities]", 1);
Menu->AddItem(0, "[Instances]", 12);
Menu->AddItem(0, "[Outland Locations]", 42);
Menu->AddItem(5, "Shopping Mall", 50);
Menu->AddItem(5, "Remove Ressurection Sickness", 51);
Menu->AddItem(0, "Who is the creator of this?", 52);
if(AutoSend)
Menu->SendTo(Plr);
}
void Warper::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: // Back
GossipHello(pObject, Plr, true);
break;
case 1: // Main Cities
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(0, "[Horde Cities]", 2);
Menu->AddItem(0, "[Alliance Cities]", 7);
Menu->AddItem(0, "[Back]", 0);
Menu->SendTo(Plr);
}
break;
case 2: // Horde Cities
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(5, "Silvermoon", 3);
Menu->AddItem(5, "Orgrimmar", 4);
Menu->AddItem(5, "Thunder Bluff", 5);
Menu->AddItem(5, "Undercity", 6);
Menu->AddItem(0, "[Back]", 0);
Menu->SendTo(Plr);
}
break;
case 3: //Silvermoon
{
Plr->EventTeleport(530, 9400.486328, -7278.376953, 14.206780);
}
break;
case 4: //Orgrimmar
{
Plr->EventTeleport(1, 1371.068970, -4370.801758, 26.052483);
}
break;
case 5: //TB
{
Plr->EventTeleport(1, -1304.569946, 205.285004, 68.681396);
}
break;
case 6: //UC
{
Plr->EventTeleport(0, 2050.203125, 285.650604, 56.994549);
}
break;
case 7: //Alliance Cities
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(5, "The Exodar", 8);
Menu->AddItem(5, "Stormwind", 9);
Menu->AddItem(5, "Ironforge", 10);
Menu->AddItem(5, "Darnassus", 11);
Menu->AddItem(0, "[Back]", 0);
Menu->SendTo(Plr);
}
break;
case 8: //Exodar
{
Plr->EventTeleport(530, -4072.202393, -12014.337891, -1.277277);
}
break;
case 9: //Stormwind
{
Plr->EventTeleport(0, -9100.480469, 406.950745, 92.594185);
}
break;
case 10: //Ironforge
{
Plr->EventTeleport(0, -5028.265137, -825.976563, 495.301575);
}
break;
case 11: //Darnassus
{
Plr->EventTeleport(1, 9985.907227, 1971.155640, 1326.815674);
}
break;
case 12: //Instances
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(0, "[Azeroth Instances]", 13);
Menu->AddItem(0, "[Outland Instances]", 14);
Menu->SendTo(Plr);
}
break;
case 13: // Azeroth Instances
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(5, "Shadowfang Keep", 15);
Menu->AddItem(5, "Scarlet Monastery", 16);
Menu->AddItem(5, "Zul'Farrak", 17);
Menu->AddItem(5, "Stratholme", 18);
Menu->AddItem(5, "Scholomance", 19);
Menu->AddItem(5, "Blackrock Spire", 20);
Menu->AddItem(5, "Onyxia's Lair", 21);
Menu->AddItem(5, "Molten Core", 22);
Menu->AddItem(5, "Zul'Gurub", 23);
Menu->AddItem(5, "Karazhan", 24);
Menu->AddItem(5, "Ahn'Qirai 20", 25);
Menu->AddItem(5, "Ahn'Qirai 40", 26);
Menu->AddItem(5, "Naxxramas", 27);
Menu->AddItem(5, "Caverns of Time", 28);
Menu->AddItem(0, "[Back]", 0);
Menu->SendTo(Plr);
}
break;
case 14: //Outland Instances
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(5, "Hellfire Ramparts", 29);
Menu->AddItem(5, "The Blood Furnace", 30);
Menu->AddItem(5, "The Shattered Halls", 31);
Menu->AddItem(5, "The Underbog", 32);
Menu->AddItem(5, "The Slave Pens", 33);
Menu->AddItem(5, "The Steamvault", 34);
Menu->AddItem(5, "Mana-Tombs", 35);
Menu->AddItem(5, "Auchenai Crypts", 36);
Menu->AddItem(5, "Sethekk Halls", 37);
Menu->AddItem(5, "Shadow Labyrinth", 38);
Menu->AddItem(5, "The Mechanar", 39);
Menu->AddItem(5, "The Botanica", 40);
Menu->AddItem(5, "The Arcatraz", 41);
Menu->AddItem(0, "[Back]", 0);
Menu->SendTo(Plr);
}
break;
case 15: // Shadowfang Keep
{
Plr->EventTeleport(0, -234.495087, 1561.946411, 76.892143);
}
break;
case 16: // Scarlet Monastery
{
Plr->EventTeleport(0, 2870.442627, -819.985229, 160.331085);
}
break;
case 17: // Zul'Farrak
{
Plr->EventTeleport(1, -6797.278809, -2903.917969, 9.953360);
}
break;
case 18: // Zul'Gurub
{
Plr->EventTeleport(0, -11919.073242, -1202.459374, 92.298744);
}
break;
case 19: // Ahn'Qirai 20
{
Plr->EventTeleport(1, -8394.730469, 1485.658447, 21.038563);
}
break;
case 20: // Ahn'Qirai 40
{
Plr->EventTeleport(1, -8247.316406, 1970.156860, 129.071472);
}
break;
case 21: // Molten Core
{
Plr->EventTeleport(409, 1089.6, -470.19, -106.41);
}
break;
case 22: // Onyxia
{
Plr->EventTeleport(249, 30.0, -64.0, -5.0);
}
break;
case 23: // Naxxramas
{
Plr->EventTeleport(533, 3006.06, -3436.72, 293.891);
}
break;
case 24: //Scholomance
{
Plr->EventTeleport(0, 1267.468628, -2556.651367, 94.127983);
}
break;
case 25: //Stratholme
{
Plr->EventTeleport(0, 3359.111572, -3380.8444238, 144.781860);
}break;
case 26: // Black Rock Spire
{
Plr->EventTeleport(0, -7527.129883, -1224.997437, 285.733002);
}break;
case 27: // Kharazan
{
Plr->EventTeleport(532, -11087.3, -1977.47, 49.6135);
}break;
case 28: // Caverns of Time
{
Plr->EventTeleport(1, -8519.718750, -4297.542480, -208.441376);
}break;
case 29: // Hellfire Ramparts
{
Plr->EventTeleport(530, -360.670990, 3071.899902, -15.097700);
}break;
case 30: // The Blood Furnace
{
Plr->EventTeleport(530, -303.506012, 3164.820068, 31.742500);
}break;
case 31: // The Shattered Halls
{
Plr->EventTeleport(530, -311.083527, 3083.291748, -3.745923);
}break;
case 32: // The Underbog
{
Plr->EventTeleport(530, 777.088989, 6763.450195, -72.062561);
}break;
case 33: // The Slave Pens
{
Plr->EventTeleport(530, 719.507996, 6999.339844, -73.074303);
}break;
case 34: // The Steamvault
{
Plr->EventTeleport(530, 816.590027, 6934.669922, -80.544601);
}break;
case 35: // Mana-Tombs
{
Plr->EventTeleport(530, -3079.810059, 4943.040039, -101.046997);
}break;
case 36: // Auchenai Crypts
{
Plr->EventTeleport(530, -3361.959961, 5225.770020, -101.047997);
}break;
case 37: // Sethekk Halls
{
Plr->EventTeleport(530, -3362.219971, 4660.410156, -101.049004 );
}break;
case 38: // Shadow Labyrinth
{
Plr->EventTeleport(530, -3645.060059, 4943.620117, -101.047997);
}break;
case 39: // The Mechanar
{
Plr->EventTeleport(530, 2862.409912, 1546.089966, 252.158691);
}break;
case 40: // The Botanica
{
Plr->EventTeleport(530, 3413.649902, 1483.319946, 182.837997);
}break;
case 41: // The Arcatraz
{
Plr->EventTeleport(530, 3311.598145, 1332.745117, 505.557251);
}break;
case 42: // Outland Locations
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(5, "Hellfire Peninsula", 43);
Menu->AddItem(5, "Zangarmarsh", 44);
Menu->AddItem(5, "Nagrand", 45);
Menu->AddItem(5, "Blades Edge Mountains", 46);
Menu->AddItem(5, "Netherstorm", 47);
Menu->AddItem(5, "Terokkar Forest", 48);
Menu->AddItem(5, "Shadowmoon Valley", 49);
Menu->AddItem(0, "[Back]", 0);
Menu->SendTo(Plr);
}
break;
case 43: //Hellfire Peninsula
{
Plr->EventTeleport(530, -248.160004, 922.348999, 84.379799);
}
break;
case 44: //Zangermarsh
{
Plr->EventTeleport(530, -225.863632, 5405.927246, 22.346397);
}
break;
case 45: //Nagrand
{
Plr->EventTeleport(530, -468.232330, 8418.666016, 28.031298);
}
break;
case 46: //Blades Edge Mountains
{
Plr->EventTeleport(530, 1471.672852, 6828.047852, 107.759239);
}
break;
case 47: //Netherstorm
{
Plr->EventTeleport(530, 3396.123779, 4182.208008, 137.097992);
}
break;
case 48: //Terokkar Forest
{
Plr->EventTeleport(530, -1202.426636, 5313.692871, 33.774723);
}
break;
case 49: //Shadowmoon Valley
{
Plr->EventTeleport(530, -2859.522461, 3182.34773, 10.008426);
}
break;
case 50: //Mall
{
Plr->EventTeleport(1, 16222.6, 16265.9, 15);
}
break;
case 51: //Res Sickness
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Plr->addSpell(15007); // learn res sickness
Plr->removeSpell(15007,0,0,0); // un learn res sickness
pCreature->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "I removed your Resurrection Sickness. Next time don't die." );
Menu->AddItem(0, "[Back]", 0);
Menu->SendTo(Plr);
}
break;
case 52: //ME :P
{
pCreature->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "Le Froid of mmowned made this, of course!" );
}
break;
}
}
void Warper::GossipEnd(Object * pObject, Player* Plr)
{
GossipScript::GossipEnd(pObject, Plr);
}
void SetupWarper(ScriptMgr * mgr)
{
GossipScript * gs = (GossipScript*) new Warper();
mgr->register_gossip_script(65002, gs); // WarpNPC's ID
}