Core/Creatures: backported trainer update and skill initialization

This commit is contained in:
Ovahlord
2020-01-12 17:27:00 +01:00
parent 0e60ed1682
commit 7760d95962
34 changed files with 1390 additions and 869 deletions

View File

@@ -122,7 +122,6 @@ public:
{ "mail_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMailCommand, "" },
{ "milling_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MILLING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMillingCommand, "" },
{ "npc_spellclick_spells", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_SPELLCLICK_SPELLS, true, &HandleReloadSpellClickSpellsCommand, "" },
{ "npc_trainer", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_TRAINER, true, &HandleReloadNpcTrainerCommand, "" },
{ "npc_vendor", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_VENDOR, true, &HandleReloadNpcVendorCommand, "" },
{ "page_text", rbac::RBAC_PERM_COMMAND_RELOAD_PAGE_TEXT, true, &HandleReloadPageTextsCommand, "" },
{ "pickpocketing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PICKPOCKETING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesPickpocketingCommand, "" },
@@ -156,6 +155,7 @@ public:
{ "spell_threats", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_THREATS, true, &HandleReloadSpellThreatsCommand, "" },
{ "spell_group_stack_rules", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP_STACK_RULES, true, &HandleReloadSpellGroupStackRulesCommand, "" },
{ "trinity_string", rbac::RBAC_PERM_COMMAND_RELOAD_TRINITY_STRING, true, &HandleReloadTrinityStringCommand, "" },
{ "trainer", rbac::RBAC_PERM_COMMAND_RELOAD_TRAINER, true, &HandleReloadTrainerCommand, "" },
{ "warden_action", rbac::RBAC_PERM_COMMAND_RELOAD_WARDEN_ACTION, true, &HandleReloadWardenactionCommand, "" },
{ "waypoint_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_SCRIPTS, true, &HandleReloadWpScriptsCommand, "" },
{ "waypoint_data", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_DATA, true, &HandleReloadWpCommand, "" },
@@ -237,7 +237,7 @@ public:
static bool HandleReloadAllNpcCommand(ChatHandler* handler, char const* args)
{
if (*args != 'a') // will be reloaded from all_gossips
HandleReloadNpcTrainerCommand(handler, "a");
HandleReloadTrainerCommand(handler, "a");
HandleReloadNpcVendorCommand(handler, "a");
HandleReloadPointsOfInterestCommand(handler, "a");
HandleReloadSpellClickSpellsCommand(handler, "a");
@@ -704,11 +704,15 @@ public:
return true;
}
static bool HandleReloadNpcTrainerCommand(ChatHandler* handler, char const* /*args*/)
static bool HandleReloadTrainerCommand(ChatHandler* handler, char const* /*args*/)
{
TC_LOG_INFO("misc", "Re-Loading `npc_trainer` Table!");
sObjectMgr->LoadTrainerSpell();
handler->SendGlobalGMSysMessage("DB table `npc_trainer` reloaded.");
TC_LOG_INFO("misc", "Re-Loading `trainer` Table!");
sObjectMgr->LoadTrainers();
sObjectMgr->LoadCreatureDefaultTrainers();
handler->SendGlobalGMSysMessage("DB table `trainer` reloaded.");
handler->SendGlobalGMSysMessage("DB table `trainer_locale` reloaded.");
handler->SendGlobalGMSysMessage("DB table `trainer_spell` reloaded.");
handler->SendGlobalGMSysMessage("DB table `creature_default_trainer` reloaded.");
return true;
}

View File

@@ -118,7 +118,8 @@ class npc_injured_goblin : public CreatureScript
enum RoxiRamrocket
{
SPELL_MECHANO_HOG = 60866,
SPELL_MEKGINEERS_CHOPPER = 60867
SPELL_MEKGINEERS_CHOPPER = 60867,
TRAINER_ID_ROXI_RAMROCKET = 102
};
class npc_roxi_ramrocket : public CreatureScript
@@ -156,7 +157,7 @@ class npc_roxi_ramrocket : public CreatureScript
switch (action)
{
case GOSSIP_ACTION_TRAIN:
player->GetSession()->SendTrainerList(me->GetGUID());
player->GetSession()->SendTrainerList(me, TRAINER_ID_ROXI_RAMROCKET);
break;
case GOSSIP_ACTION_TRADE:
player->GetSession()->SendListInventory(me->GetGUID());

View File

@@ -169,6 +169,7 @@ enum SpecializationTrainers
N_TRAINER_HAMMER = 11191, // Lilith the Lithe
N_TRAINER_AXE = 11192, // Kilram
N_TRAINER_SWORD = 11193, // Seril Scourgebane
TRAINER_ID_BLACKSMITHING = 80,
/* Leatherworking */
N_TRAINER_DRAGON1 = 7866, // Peter Galen
@@ -177,11 +178,13 @@ enum SpecializationTrainers
N_TRAINER_ELEMENTAL2 = 7869, // Brumn Winterhoof
N_TRAINER_TRIBAL1 = 7870, // Caryssia Moonhunter
N_TRAINER_TRIBAL2 = 7871, // Se'Jib
TRAINER_ID_LEATHERWORKING = 103,
/* Tailoring */
N_TRAINER_SPELLFIRE = 22213, // Gidge Spellweaver
N_TRAINER_MOONCLOTH = 22208, // Nasmara Moonsong
N_TRAINER_SHADOWEAVE = 22212, // Andrion Darkspinner
TRAINER_ID_TAILORING = 117,
};
/*###
@@ -552,7 +555,7 @@ public:
player->GetSession()->SendListInventory(me->GetGUID());
break;
case GOSSIP_ACTION_TRAIN:
player->GetSession()->SendTrainerList(me->GetGUID());
player->GetSession()->SendTrainerList(me, TRAINER_ID_BLACKSMITHING);
break;
//Learn Armor/Weapon
case GOSSIP_ACTION_INFO_DEF + 1:
@@ -826,7 +829,7 @@ class npc_prof_leather : public CreatureScript
player->GetSession()->SendListInventory(creature->GetGUID());
break;
case GOSSIP_ACTION_TRAIN:
player->GetSession()->SendTrainerList(creature->GetGUID());
player->GetSession()->SendTrainerList(me, TRAINER_ID_LEATHERWORKING);
break;
//Unlearn Leather
case GOSSIP_ACTION_INFO_DEF + 1:
@@ -973,7 +976,7 @@ class npc_prof_tailor : public CreatureScript
player->GetSession()->SendListInventory(me->GetGUID());
break;
case GOSSIP_ACTION_TRAIN:
player->GetSession()->SendTrainerList(me->GetGUID());
player->GetSession()->SendTrainerList(me, TRAINER_ID_TAILORING);
break;
//Learn Tailor
case GOSSIP_ACTION_INFO_DEF + 1:
@@ -1083,100 +1086,10 @@ enum MultiProfessionTrainer
GOSSIP_MENU_TAILORING = 12199
};
/*###
# start menu multi profession trainer
###*/
class npc_multi_profession_trainer : public CreatureScript
{
public:
npc_multi_profession_trainer() : CreatureScript("npc_multi_profession_trainer") { }
struct npc_multi_profession_trainerAI : public ScriptedAI
{
npc_multi_profession_trainerAI(Creature* creature) : ScriptedAI(creature) { }
bool GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
switch (gossipListId)
{
case GOSSIP_OPTION_ALCHEMY:
case GOSSIP_OPTION_BLACKSMITHING:
case GOSSIP_OPTION_ENCHANTING:
case GOSSIP_OPTION_ENGINEERING:
case GOSSIP_OPTION_HERBALISM:
case GOSSIP_OPTION_INSCRIPTION:
case GOSSIP_OPTION_JEWELCRAFTING:
case GOSSIP_OPTION_LEATHERWORKING:
case GOSSIP_OPTION_MINING:
case GOSSIP_OPTION_SKINNING:
case GOSSIP_OPTION_TAILORING:
SendTrainerList(player, gossipListId);
break;
case GOSSIP_OPTION_MULTI:
{
switch (menuId)
{
case GOSSIP_MENU_HERBALISM:
SendTrainerList(player, GOSSIP_OPTION_HERBALISM);
break;
case GOSSIP_MENU_MINING:
SendTrainerList(player, GOSSIP_OPTION_MINING);
break;
case GOSSIP_MENU_SKINNING:
SendTrainerList(player, GOSSIP_OPTION_SKINNING);
break;
case GOSSIP_MENU_ALCHEMY:
SendTrainerList(player, GOSSIP_OPTION_ALCHEMY);
break;
case GOSSIP_MENU_BLACKSMITHING:
SendTrainerList(player, GOSSIP_OPTION_BLACKSMITHING);
break;
case GOSSIP_MENU_ENCHANTING:
SendTrainerList(player, GOSSIP_OPTION_ENCHANTING);
break;
case GOSSIP_MENU_ENGINEERING:
SendTrainerList(player, GOSSIP_OPTION_ENGINEERING);
break;
case GOSSIP_MENU_INSCRIPTION:
SendTrainerList(player, GOSSIP_OPTION_INSCRIPTION);
break;
case GOSSIP_MENU_JEWELCRAFTING:
SendTrainerList(player, GOSSIP_OPTION_JEWELCRAFTING);
break;
case GOSSIP_MENU_LEATHERWORKING:
SendTrainerList(player, GOSSIP_OPTION_LEATHERWORKING);
break;
case GOSSIP_MENU_TAILORING:
SendTrainerList(player, GOSSIP_OPTION_TAILORING);
break;
default:
break;
}
}
default:
break;
}
return false;
}
void SendTrainerList(Player* player, uint32 Index)
{
player->GetSession()->SendTrainerList(me->GetGUID(), Index + 1);
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_multi_profession_trainerAI(creature);
}
};
void AddSC_npc_professions()
{
new npc_prof_blacksmith();
new npc_engineering_tele_trinket();
new npc_prof_leather();
new npc_prof_tailor();
new npc_multi_profession_trainer();
}