This commit is contained in:
Yehonal
2017-08-21 11:51:27 +02:00
5 changed files with 68 additions and 42 deletions

View File

@@ -0,0 +1,6 @@
INSERT INTO version_db_world (`sql_rev`) VALUES ('1503198096265931900');
-- make Franclorn Forgewright visible only for dead players
UPDATE `creature_template` SET `npcflag`=32771, `AIName`='' WHERE `entry`=8888;
DELETE FROM `smart_scripts` WHERE `entryorguid` = 8888 AND `source_type` = 0;
UPDATE `creature_template_addon` SET `auras`=10848 WHERE `entry` IN (8888);

View File

@@ -0,0 +1,15 @@
INSERT INTO version_db_world (`sql_rev`) VALUES ('1503204010790637500');
-- Pet Trainer
UPDATE `creature_template` SET `gossip_menu_id`= 4783 WHERE `entry` IN (543, 3306, 3545, 3698, 4320, 16675, 40405);
UPDATE `creature_template` SET `exp`= 0, `npcflag`= 17, `trainer_type`= 3, `flags_extra`= 2, `ScriptName`= 'npc_pet_trainer' WHERE `entry`= 40405;
UPDATE `gossip_menu_option` SET `option_icon`= 0 WHERE `menu_id`= 6520 AND `id`= 0;
-- gossip menu conditions
DELETE FROM `conditions` WHERE `SourceGroup`= 4783;
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
(14,4783,5838,0,0,15,0,4,0,0,0,0,0,'','Show gossip menu 4783 text id 5838 if player is a Hunter.'),
(14,4783,5839,0,0,15,0,4,0,0,1,0,0,'','Show gossip menu 4783 text id 5839 if player is not a Hunter.'),
(15,4783, 0,0,0,15,0,4,0,0,0,0,0,'','Show gossip menu 4783 option id 0 if player is a Hunter.'),
(15,4783, 1,0,0,15,0,4,0,0,0,0,0,'','Show gossip menu 4783 option id 1 if player is a Hunter.');

View File

@@ -0,0 +1,20 @@
/*
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license: http://github.com/azerothcore/azerothcore-wotlk/LICENSE-GPL2
* Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*/
#include "ScriptedGossip.h"
#include "Player.h"
#include "Creature.h"
void ClearGossipMenuFor(Player* player) { player->PlayerTalkClass->ClearMenus(); }
// Using provided text, not from DB
void AddGossipItemFor(Player* player, uint32 icon, const char* text, uint32 sender, uint32 action) { player->PlayerTalkClass->GetGossipMenu().AddMenuItem(-1, icon, text, sender, action, "", 0); }
// Using provided texts, not from DB
void AddGossipItemFor(Player* player, uint32 icon, const char* text, uint32 sender, uint32 action, const char* popupText, uint32 popupMoney, bool coded) { player->PlayerTalkClass->GetGossipMenu().AddMenuItem(-1, icon, text, sender, action, popupText, popupMoney, coded); }
// Uses gossip item info from DB
void AddGossipItemFor(Player* player, uint32 gossipMenuID, uint32 gossipMenuItemID, uint32 sender, uint32 action) { player->PlayerTalkClass->GetGossipMenu().AddMenuItem(gossipMenuID, gossipMenuItemID, sender, action); }
void SendGossipMenuFor(Player* player, uint32 npcTextID, uint64 const& guid) { player->PlayerTalkClass->SendGossipMenu(npcTextID, guid); }
void SendGossipMenuFor(Player* player, uint32 npcTextID, Creature const* creature) { if (creature) SendGossipMenuFor(player, npcTextID, creature->GetGUID()); }
void CloseGossipMenuFor(Player* player) { player->PlayerTalkClass->SendCloseGossip(); }

View File

@@ -68,6 +68,18 @@ enum eTradeskill
GOSSIP_SENDER_SEC_STABLEMASTER = 10
};
class Creature;
void ClearGossipMenuFor(Player* player);
// Using provided text, not from DB
void AddGossipItemFor(Player* player, uint32 icon, const char* text, uint32 sender, uint32 action);
// Using provided texts, not from DB
void AddGossipItemFor(Player* player, uint32 icon, const char* text, uint32 sender, uint32 action, const char* popupText, uint32 popupMoney, bool coded);
// Uses gossip item info from DB
void AddGossipItemFor(Player* player, uint32 gossipMenuID, uint32 gossipMenuItemID, uint32 sender, uint32 action);
void SendGossipMenuFor(Player* player, uint32 npcTextID, uint64 const& guid);
void SendGossipMenuFor(Player* player, uint32 npcTextID, Creature const* creature);
void CloseGossipMenuFor(Player* player);
// Defined fuctions to use with player.
// This fuction add's a menu item,

View File

@@ -1824,61 +1824,34 @@ class npc_wormhole : public CreatureScript
enum PetTrainer
{
TEXT_ISHUNTER = 5838,
TEXT_NOTHUNTER = 5839,
TEXT_PETINFO = 13474,
TEXT_CONFIRM = 7722
PET_UNLEARN = 6520,
YES_PLEASE_DO = 0
};
#define GOSSIP_PET1 "How do I train my pet?"
#define GOSSIP_PET2 "I wish to untrain my pet."
#define GOSSIP_PET_CONFIRM "Yes, please do."
class npc_pet_trainer : public CreatureScript
{
public:
npc_pet_trainer() : CreatureScript("npc_pet_trainer") { }
bool OnGossipHello(Player* player, Creature* creature)
struct npc_pet_trainerAI : public ScriptedAI
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
npc_pet_trainerAI(Creature* creature) : ScriptedAI(creature) { }
if (player->getClass() == CLASS_HUNTER)
void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_PET1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
if (player->GetPet() && player->GetPet()->getPetType() == HUNTER_PET)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_PET2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
player->PlayerTalkClass->SendGossipMenu(TEXT_ISHUNTER, creature->GetGUID());
return true;
if (menuId == PET_UNLEARN && gossipListId == YES_PLEASE_DO)
{
player->ResetPetTalents();
player->PlayerTalkClass->SendCloseGossip();
}
}
player->PlayerTalkClass->SendGossipMenu(TEXT_NOTHUNTER, creature->GetGUID());
return true;
}
};
bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action)
CreatureAI* GetAI(Creature* creature) const override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
{
case GOSSIP_ACTION_INFO_DEF + 1:
player->PlayerTalkClass->SendGossipMenu(TEXT_PETINFO, creature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF + 2:
{
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_PET_CONFIRM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
player->PlayerTalkClass->SendGossipMenu(TEXT_CONFIRM, creature->GetGUID());
}
break;
case GOSSIP_ACTION_INFO_DEF + 3:
{
player->ResetPetTalents();
player->CLOSE_GOSSIP_MENU();
}
break;
}
return true;
return new npc_pet_trainerAI(creature);
}
};