Code:
#include "StdAfx.h"
#include "Setup.h"
#pragma warning(disable:4305) // warning C4305: 'argument' : truncation from 'double' to 'float'
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);
if (Plr->GetTeam() > 0)
{
Menu->AddItem(1, "Horde Cities", 1);
}
else
{
Menu->AddItem(1, "Alliance Cities", 2);
}
Menu->AddItem(2, "Hyjal", 160);
Menu->AddItem(4, "Outland Raids", 64);
Menu->AddItem(5, "Outland Instances", 50);
Menu->AddItem(7, "Shattrath", 20);
Menu->AddItem(8, "Gurubashi Arena", 21);
Menu->AddItem(3, "Buffs", 110);
Menu->AddItem(6, "Bosses", 161);
Menu->AddItem(10, "Shopping Mall", 150);
Menu->AddItem(9, "Remove Resurrection Sickness", 97);
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: // Return to start
GossipHello(pObject, Plr, true);
break;
case 1: // Horde
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(5, "Silvermoon", 4);
Menu->AddItem(5, "Orgrimmar", 5);
Menu->AddItem(5, "Thunderbluff", 6);
Menu->AddItem(5, "UnderCity", 7);
Menu->AddItem(0, "[Back]", 99);
Menu->SendTo(Plr);
}
break;
case 2: // Alliance
{
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]", 99);
Menu->SendTo(Plr);
}
break;
//////////////////
// Horde //
//////////////////
case 4://Silvermoon
{
Plr->EventTeleport(530, 9474.486328, -7278.564453, 14.237911);
}
break;
case 5://Orgrimmar
{
Plr->EventTeleport(1, 1498.915283, -4414.356934, 22.102850);
}
break;
case 6://ThunderBluff
{
Plr->EventTeleport(1, -1279.568237, 127.595329, 131.341003);
}
break;
case 7://UnderCity
{
Plr->EventTeleport(0, 1630.843018, 240.786819, -43.102512);
}
break;
//////////////////
// Alliance //
//////////////////
case 8: //Exodar
{
Plr->EventTeleport(530, -3991.093750, -11854.391602, 0.316920);
}
break;
case 9: //Stormwind
{
Plr->EventTeleport(0, -8913.230469, 554.632996, 93.794403);
}
break;
case 10: //Ironforge
{
Plr->EventTeleport(0, -4926.238281, -948.649475, 501.566559);
}
break;
case 11: //Darnassus
{
Plr->EventTeleport(1, 9946.370117, 2613.149902, 1316.239990);
}
break;
//////////////////
// Outland Menu //
//////////////////
case 12: //Hellfire Peninsula
{
Plr->EventTeleport(530, -218.213058, 2161.548096, 77.876488);
}
break;
case 13: //Zangermarsh
{
Plr->EventTeleport(530, 1477.477417, 8616.113281, 20.983997);
}
break;
case 14: //Nagrand
{
Plr->EventTeleport(530, -946.170532, 8294.811523, 21.214247);
}
break;
case 15: //Blades Edge Mountains
{
Plr->EventTeleport(530, 1624.871216, 6815.035645, 131.101303);
}
break;
case 16: //Netherstorm
{
Plr->EventTeleport(530, 3085.287598, 3584.993652, 144.555328);
}
break;
case 17: //Terokkar Forest
{
Plr->EventTeleport(530, -2662.820313, 5127.227051, 3.006786);
}
break;
case 18: //Shadowmoon Valley
{
Plr->EventTeleport(530, -3074.746826, 2880.938477, 82.180794);
}
break;
case 20: //Shattrath
{
Plr->EventTeleport(530, -1863.65, 5429.87, 9.705427);
}
break;
case 21: // Gurubsahi Arena
{
Plr->EventTeleport(0, -13152.900391, 342.729004, 52.132801);
case 50: // Outland Instances
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(5, "Hellfire Ramparts", 51);
Menu->AddItem(5, "The Blood Furnace", 52);
Menu->AddItem(5, "The Shattered Halls", 53);
Menu->AddItem(5, "The Underbog", 54);
Menu->AddItem(5, "The Slave Pens", 55);
Menu->AddItem(5, "The Steamvault", 56);
Menu->AddItem(5, "Mana-Tombs", 57);
Menu->AddItem(5, "Auchenai Crypts", 58);
Menu->AddItem(5, "Sethekk Halls", 59);
Menu->AddItem(5, "Shadow Labyrinth", 60);
Menu->AddItem(5, "The Mechanar", 61);
Menu->AddItem(5, "The Botanica", 62);
Menu->AddItem(5, "The Arcatraz", 63);
Menu->AddItem(0, "[Back]", 99);
Menu->SendTo(Plr);
}
break;
case 51: // Hellfire Ramparts
{
Plr->EventTeleport(530, -360.670990, 3071.899902, -15.097700);
}break;
case 52: // The Blood Furnace
{
Plr->EventTeleport(530, -303.506012, 3164.820068, 31.742500);
}break;
case 53: // The Shattered Halls
{
Plr->EventTeleport(530, -311.083527, 3083.291748, -3.745923);
}break;
case 54: // The Underbog
{
Plr->EventTeleport(530, 777.088989, 6763.450195, -72.062561);
}break;
case 55: // The Slave Pens
{
Plr->EventTeleport(530, 719.507996, 6999.339844, -73.074303);
}break;
case 56: // The Steamvault
{
Plr->EventTeleport(530, 816.590027, 6934.669922, -80.544601);
}break;
case 57: // Mana-Tombs
{
Plr->EventTeleport(530, -3079.810059, 4943.040039, -101.046997);
}break;
case 58: // Auchenai Crypts
{
Plr->EventTeleport(530, -3361.959961, 5225.770020, -101.047997);
}break;
case 59: // Sethekk Halls
{
Plr->EventTeleport(530, -3362.219971, 4660.410156, -101.049004 );
}break;
case 60: // Shadow Labyrinth
{
Plr->EventTeleport(530, -3645.060059, 4943.620117, -101.047997);
}break;
case 61: // The Mechanar
{
Plr->EventTeleport(530, 2862.409912, 1546.089966, 252.158691);
}break;
case 62: // The Botanica
{
Plr->EventTeleport(530, 3413.649902, 1483.319946, 182.837997);
}break;
case 63: // The Arcatraz
{
Plr->EventTeleport(530, 3311.598145, 1332.745117, 505.557251);
}break;
case 64: // Outland Raids
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(5, "Black Temple", 69);
Menu->AddItem(5, "Magtheridon's Lair", 65);
Menu->AddItem(5, "Serpentshrine Cavern", 66);
Menu->AddItem(5, "Gruul's Lair", 67);
Menu->AddItem(5, "The Eye", 68);
Menu->AddItem(0, "[Back]", 99);
Menu->SendTo(Plr);
}
break;
case 65: // Magtheridon's Lair
{
Plr->EventTeleport(530, -313.678986, 3088.350098, -116.501999);
}break;
case 66: // Serpentshrine Cavern
{
Plr->EventTeleport(530, 830.542908, 6865.445801, -63.785503);
}break;
case 67: // Gruul's Lair
{
Plr->EventTeleport(530, 3549.424072, 5179.854004, -4.430779);
}break;
case 68: // The Eye
{
Plr->EventTeleport(530, 3087.310059, 1373.790039, 184.643005);
}break;
case 69: // Black Temple
{
Plr->EventTeleport(530, -3609.739990, 328.252014, 37.307701);
}break;
case 97: // Remove res sickness
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Plr->addSpell(15007); // learn res sickness
Plr->removeSpell(15007,0,0,0); // unlearn res sickness
sChatHandler.SystemMessage(Plr->GetSession(),"We have removed your rez sickness!");
Menu->AddItem(0, "[Back]", 99);
Menu->SendTo(Plr);
}
break;
case 99: //main menu
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
if (Plr->GetTeam() > 0)
{
Menu->AddItem(1, "Horde Cities", 1);
}
else
{
Menu->AddItem(1, "Alliance Cities", 2);
}
Menu->AddItem(2, "Hyjal", 160);
Menu->AddItem(4, "Outland Raids", 64);
Menu->AddItem(5, "Outland Instances", 50);
Menu->AddItem(7, "Shattrath", 20);
Menu->AddItem(8, "Gurubashi Arena", 21);
Menu->AddItem(3, "Buffs", 110);
Menu->AddItem(6, "Bosses", 161);
Menu->AddItem(10, "Shopping Mall", 150);
Menu->AddItem(9, "Remove Resurrection Sickness", 97);
Menu->SendTo(Plr);
}
break;
case 110: // Custom Buffs
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(5, "Melee Buff", 111);
Menu->AddItem(5, "Spell Buff", 112);
Menu->AddItem(0, "[Back]", 99);
Menu->SendTo(Plr);
}
break;
case 111: // Melee Buff
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Plr->addSpell(35874); // learn buff
Menu->AddItem(0, "[Back]", 99);
Menu->SendTo(Plr);
}
break;
case 112: // Spell Buff
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Plr->addSpell(37197); // learn buff
Menu->AddItem(0, "[Back]", 99);
Menu->SendTo(Plr);
}
break;
case 150: // Shopping Mall
{
Plr->EventTeleport(169, -362.47, -4110.18, 92.0083);
}break;
case 160: // hyjal
{
Plr->EventTeleport(1, 4631.39, -3828.89, 943.297);
}break;
case 161: // bosses
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(0, "Win WoW Level 70 Boss", 162);
Menu->AddItem(0, "Win WoW Level 150 Bosses", 163);
Menu->AddItem(0, "Win WoW World Bosses", 164);
Menu->AddItem(0, "[Back]", 99);
Menu->SendTo(Plr);
}
break;
case 162: // level 70 boss
{
Plr->EventTeleport(0, -10001.7, 48.5975, 34.5705);
}break;
case 163: // level 150 bosses
{
Plr->EventTeleport(0, -4826.68, -980.781, 464.709);
}break;
case 164: // world bosses
{
Plr->EventTeleport(0, 3151.15, -3696.51, 133.346);
}break;
}
}
void Warper::GossipEnd(Object * pObject, Player* Plr)
{
GossipScript::GossipEnd(pObject, Plr);
}
void SetupWarper(ScriptMgr * mgr)
{
GossipScript * gs = (GossipScript*) new Warper();
/* Teleporter List */
mgr->register_gossip_script(112230, gs);