eluna-scripts-ornfelt/lua/WowEmulationScriptPack/C++/General/npc_trainer.cpp

501 lines
13 KiB
C++
Raw Permalink Normal View History

2023-08-16 00:50:59 +02:00
#include "ScriptPCH.h"
uint32 Spells[12][227]=
{
{}, // 0 - ---------
// 1 - Warrior //
{7384,47436,47450,11578,47465,47502,34428,1715,2687,71,7386,355,72,47437,57823,694,2565,676,47520,20230,12678,47471,1161,871,2458,20252,47475,18499,1680,6552,47488,1719,23920,47440,3411,64382,55694,57755,42459,750,5246,3127,34093,33392,54197,750,196,197,198,199,200,201,202,264,5011,266,2567},
// 2 - Paladin - //
{3127,19746,19752,750,48942,48782,48932,20271,498,10308,1152,10278,48788,53408,48950,48936,31789,62124,54043,25780,1044,20217,48819,48801,48785,5502,20164,10326,1038,53407,48943,20165,48945,642,48947,20166,4987,48806,6940,48817,48934,48938,25898,32223,31884,54428,61411,53601,33388,33391,34093,33392,54197,750,196,197,198,199,200,201,202},
// 3 - Hunter - //
{3043,3127,3045,3034,8737,1494,13163,48996,49001,49045,53338,5116,27044,883,2641,6991,982,1515,19883,20736,48990,2974,6197,1002,14327,5118,49056,53339,49048,19884,34074,781,14311,1462,19885,19880,13809,13161,5384,1543,19878,49067,3034,13159,19882,58434,49071,49052,19879,19263,19801,34026,34600,34477,61006,61847,53271,60192,62757,34093,33392,54197,15590,8737,196,197,200,201,202,264,266,5011,42459},
// 4 - Rogue - //
{3127,42459,48668,48638,1784,48657,921,1776,26669,51724,6774,11305,1766,48676,48659,1804,8647,48691,51722,48672,1725,26889,2836,1833,1842,8643,2094,1860,57993,48674,31224,5938,57934,51723,34093,33392,54197,196,198,201,1180,2567,264,5011,15590},
// 5 - Priest - //
{528,2053,48161,48126,48125,48066,586,48068,48127,48171,48168,10890,6064,988,48300,6346,48071,48135,48078,453,10955,10909,8129,48073,605,48072,48169,552,1706,48063,48162,48170,48074,48158,48120,34433,48113,32375,64843,64901,53023,34093,33392,54197},
// 6 - Death Knight - //
{3127,50842,49941,49930,47476,45529,3714,56222,48743,48263,49909,47528,45524,48792,57623,56815,47568,49895,50977,49576,49921,46584,49938,48707,48265,61999,42650,53428,53331,54447,53342,54446,53323,53344,70164,62158,33391,48778,51425,49924,34093,33392,54197,750,196,197,198,199,200,201,202},
// 7 - Shaman - //
{8737,49273,49238,10399,49231,58753,2484,49281,58582,49233,58790,58704,58643,49277,61657,8012,526,2645,57994,8143,49236,58796,58757,49276,57960,131,58745,6196,58734,58774,58739,58656,546,556,66842,51994,8177,58749,20608,36936,58804,4927,8512,6495,8170,66843,55459,66844,3738,2894,60043,51514,34093,33392,54197,8737,196,197,198,199,227,15590,49271},
// 8 - Mage - //
{42921,42842,42995,42833,27090,33717,42873,42846,12826,28271,61780,61721,28272,42917,43015,130,42926,43017,475,1953,42940,12051,43010,43020,43012,42859,2139,42931,42985,43008,45438,43024,43002,43046,42897,42914,66,58659,30449,42956,47610,61316,61024,55342,53142,7301,34093,33392,54197,201,196,227,1180},
// 9 - Warlock - //
{696,47811,47809,688,47813,50511,57946,47864,6215,47878,47855,697,47856,47857,5697,47884,47815,47889,47820,698,712,126,5138,5500,11719,132,60220,18647,61191,47823,691,47865,47891,47888,17928,47860,47825,1122,47867,18540,47893,47838,29858,58887,47836,61290,48018,48020,33388,33391,23161,34093,33392,54197,196,227,1180},
// 10 - ---------
{},
// 11 - Druid - //
{48378,48469,48461,48463,48441,53307,53308,5487,48560,6795,48480,53312,18960,5229,48443,50763,8983,8946,1066,48562,783,770,16857,18658,768,1082,16979,49376,5215,48477,49800,48465,48572,26995,48574,2782,50213,2893,33357,5209,48575,48447,48577,48579,5225,22842,49803,9634,20719,48467,29166,62600,22812,48470,48565,48566,33943,49802,48451,48568,33786,40120,62078,52610,50464,48570,34093,33392,54197,198,199,200,227},
};
void TeachSpells(Creature* creature, Player * plr, uint32 Class)
{
for (int i = 0; i < 227; i++)
{
if (Spells[Class][i] == 0)
break;
plr->learnSpell(Spells[Class][i],false);
}
switch(Class)
{
case 1:
{
if(plr->HasSpell(12294))
{
plr->learnSpell(47486, false);
}
if(plr->HasSpell(20243))
{
plr->learnSpell(47498, false);
}
plr->UpdateSkillsToMaxSkillsForLevel();
plr->SaveToDB();
}break;
case 2:
{
if(plr->HasSpell(20925))
{
plr->learnSpell(48952, false);
}
if(plr->HasSpell(12294))
{
plr->learnSpell(48827, false);
}
if(plr->HasSpell(20911))
{
plr->learnSpell(25899, false);
}
if(plr->HasSpell(20473))
{
plr->learnSpell(48825, false);
}
if(plr->GetTeam() == ALLIANCE)
{
plr->learnSpell(31801, false);
plr->learnSpell(13819, false);
plr->learnSpell(23214, false);
}
else
{
plr->learnSpell(53736, false);
plr->learnSpell(34769, false);
plr->learnSpell(34767, false);
}
plr->UpdateSkillsToMaxSkillsForLevel();
plr->SaveToDB();
}break;
case 3:
{
if(plr->HasSpell(19386))
{
plr->learnSpell(49012, false);
}
if(plr->HasSpell(53301))
{
plr->learnSpell(60053, false);
}
if(plr->HasSpell(19306))
{
plr->learnSpell(48999, false);
}
if(plr->HasSpell(19434))
{
plr->learnSpell(49050, false);
}
plr->UpdateSkillsToMaxSkillsForLevel();
plr->SaveToDB();
}break;
case 4:
{
if(plr->HasSpell(16511))
{
plr->learnSpell(48660, false);
}
if(plr->HasSpell(1329))
{
plr->learnSpell(48666, false);
}
plr->UpdateSkillsToMaxSkillsForLevel();
plr->SaveToDB();
}break;
case 5:
{
if(plr->HasSpell(34914))
{
plr->learnSpell(48160, false);
}
if(plr->HasSpell(47540))
{
plr->learnSpell(53007, false);
}
if(plr->HasSpell(724))
{
plr->learnSpell(48087, false);
}
if(plr->HasSpell(19236))
{
plr->learnSpell(48173, false);
}
if(plr->HasSpell(34861))
{
plr->learnSpell(48089, false);
}
if(plr->HasSpell(15407))
{
plr->learnSpell(48156, false);
}
plr->UpdateSkillsToMaxSkillsForLevel();
plr->SaveToDB();
}break;
case 6:
{
if(plr->HasSpell(55050))
{
plr->learnSpell(55262, false);
}
if(plr->HasSpell(49143))
{
plr->learnSpell(55268, false);
}
if(plr->HasSpell(49184))
{
plr->learnSpell(51411, false);
}
if(plr->HasSpell(55090))
{
plr->learnSpell(55271, false);
}
if(plr->HasSpell(49158))
{
plr->learnSpell(51328, false);
}
plr->UpdateSkillsToMaxSkillsForLevel();
plr->SaveToDB();
}break;
case 7:
{
if(plr->GetTeam() == ALLIANCE)
{
plr->learnSpell(32182, false);
}
else
{
plr->learnSpell(2825, false);
}
if(plr->HasSpell(61295))
{
plr->learnSpell(61301, false);
}
if(plr->HasSpell(974))
{
plr->learnSpell(49284, false);
}
if(plr->HasSpell(30706))
{
plr->learnSpell(57722, false);
}
if(plr->HasSpell(51490))
{
plr->learnSpell(59159, false);
}
plr->UpdateSkillsToMaxSkillsForLevel();
plr->SaveToDB();
}break;
case 8:
{
if(plr->GetTeam() == ALLIANCE)
{
plr->learnSpell(32271, false);
plr->learnSpell(49359, false);
plr->learnSpell(3565, false);
plr->learnSpell(33690, false);
plr->learnSpell(3562, false);
plr->learnSpell(3561, false);
plr->learnSpell(11419, false);
plr->learnSpell(32266, false);
plr->learnSpell(11416, false);
plr->learnSpell(33691, false);
plr->learnSpell(49360, false);
}
else
{
plr->learnSpell(3567, false);
plr->learnSpell(35715, false);
plr->learnSpell(3566, false);
plr->learnSpell(49358, false);
plr->learnSpell(32272, false);
plr->learnSpell(3563, false);
plr->learnSpell(11417, false);
plr->learnSpell(35717, false);
plr->learnSpell(32267, false);
plr->learnSpell(49361, false);
plr->learnSpell(11420, false);
plr->learnSpell(11418, false);
}
if(plr->HasSpell(11366))
{
plr->learnSpell(42891, false);
}
if(plr->HasSpell(11426))
{
plr->learnSpell(43039, false);
}
if(plr->HasSpell(44457))
{
plr->learnSpell(55360, false);
}
if(plr->HasSpell(31661))
{
plr->learnSpell(42950, false);
}
if(plr->HasSpell(11113))
{
plr->learnSpell(42945, false);
}
if(plr->HasSpell(44425))
{
plr->learnSpell(44781, false);
}
plr->UpdateSkillsToMaxSkillsForLevel();
plr->SaveToDB();
}break;
case 9:
{
if(plr->HasSpell(17877))
{
plr->learnSpell(47827, false);
}
if(plr->HasSpell(30283))
{
plr->learnSpell(47847, false);
}
if(plr->HasSpell(30108))
{
plr->learnSpell(47843, false);
}
if(plr->HasSpell(50796))
{
plr->learnSpell(59172, false);
}
if(plr->HasSpell(48181))
{
plr->learnSpell(59164, false);
}
if(plr->HasSpell(18220))
{
plr->learnSpell(59092, false);
}
plr->UpdateSkillsToMaxSkillsForLevel();
plr->SaveToDB();
}break;
case 11:
{
if(plr->HasSpell(50516))
{
plr->learnSpell(61384, false);
}
if(plr->HasSpell(48505))
{
plr->learnSpell(53201, false);
}
if(plr->HasSpell(48438))
{
plr->learnSpell(53251, false);
}
if(plr->HasSpell(5570))
{
plr->learnSpell(48468, false);
}
plr->UpdateSkillsToMaxSkillsForLevel();
plr->SaveToDB();
}break;
}
creature->MonsterWhisper("I tought you all your spells", plr->GetGUID(), true);
plr->CastSpell(plr,63680,true,NULL,NULL,plr->GetGUID());
plr->CastSpell(plr,63624,true,NULL,NULL,plr->GetGUID());
plr->SaveToDB();
}
void GlyphVendor(Creature * creature, Player * player, uint32 Class)
{
WorldSession * m_session = player->GetSession();
switch (player->getClass())
{
case CLASS_WARRIOR:
{
player->vendorLoader = 2500001;
m_session->SendListCustomInventory(creature->GetGUID(),2500001);
player->PlayerTalkClass->SendCloseGossip();
}break;
case CLASS_PALADIN:
{
player->vendorLoader = 2500002;
m_session->SendListCustomInventory(creature->GetGUID(),2500002);
player->PlayerTalkClass->SendCloseGossip();
}break;
case CLASS_HUNTER:
{
player->vendorLoader = 2500003;
m_session->SendListCustomInventory(creature->GetGUID(),2500003);
player->PlayerTalkClass->SendCloseGossip();
}break;
case CLASS_ROGUE:
{
player->vendorLoader = 2500004;
m_session->SendListCustomInventory(creature->GetGUID(),2500004);
player->PlayerTalkClass->SendCloseGossip();
}break;
case CLASS_PRIEST:
{
player->vendorLoader = 2500005;
m_session->SendListCustomInventory(creature->GetGUID(),2500005);
player->PlayerTalkClass->SendCloseGossip();
}break;
case CLASS_DEATH_KNIGHT:
{
player->vendorLoader = 2500006;
m_session->SendListCustomInventory(creature->GetGUID(),2500006);
player->PlayerTalkClass->SendCloseGossip();
}break;
case CLASS_SHAMAN:
{
player->vendorLoader = 2500007;
m_session->SendListCustomInventory(creature->GetGUID(),2500007);
player->PlayerTalkClass->SendCloseGossip();
}break;
case CLASS_MAGE:
{
player->vendorLoader = 2500008;
m_session->SendListCustomInventory(creature->GetGUID(),2500008);
player->PlayerTalkClass->SendCloseGossip();
}break;
case CLASS_WARLOCK:
{
player->vendorLoader = 2500009;
m_session->SendListCustomInventory(creature->GetGUID(),2500009);
player->PlayerTalkClass->SendCloseGossip();
}break;
case CLASS_DRUID:
{
player->vendorLoader = 2500010;
m_session->SendListCustomInventory(creature->GetGUID(),2500010);
player->PlayerTalkClass->SendCloseGossip();
}break;
}
};
class npc_trainer : public CreatureScript
{
public:
npc_trainer() : CreatureScript("npc_trainer") { }
bool OnGossipHello(Player* player, Creature* creature)
{
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, "|cff00ff00|TInterface\\icons\\Spell_Arcane_Arcane04:24|t|r I want to Learn my class spells", GOSSIP_SENDER_MAIN, 100);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "|cff00ff00|TInterface\\icons\\INV_Glyph_MajorMage:24|t|r I want to buy glyphs", GOSSIP_SENDER_MAIN, 101);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "|cff00ff00|TInterface\\icons\\ABILITY_MAGE_WINTERSGRASP:24|t|r I want to reset my talents", GOSSIP_SENDER_MAIN, 102);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Goodbye", GOSSIP_SENDER_MAIN, 2222);
player->SEND_GOSSIP_MENU(1, creature->GetGUID());
return true;
}
bool OnGossipSelect(Player * player, Creature * creature, uint32 uiSender, uint32 uiAction)
{
player->PlayerTalkClass->ClearMenus();
switch(uiAction)
{
// Close gossips
case 2222:
{
player->PlayerTalkClass->SendCloseGossip();
}break;
// Training
case 100:
{
TeachSpells(creature,player,player->getClass());
player->PlayerTalkClass->SendCloseGossip();
}break;
// GlyphVendor
case 101:
{
GlyphVendor(creature,player,player->getClass());
player->PlayerTalkClass->SendCloseGossip();
}break;
// Reset Talents
case 102:
{
player->CLOSE_GOSSIP_MENU();
player->SendTalentWipeConfirm(creature->GetGUID());
}break;
}
return true;
}
};
void AddSC_npc_trainer()
{
new npc_trainer();
}