diff options
author | ariel- <ariel-@users.noreply.github.com> | 2017-05-01 18:19:36 -0300 |
---|---|---|
committer | ariel- <ariel-@users.noreply.github.com> | 2017-05-01 18:19:36 -0300 |
commit | f913f3bb8977c127d200d5d4a608ab434b21bbcd (patch) | |
tree | bb2d18ad5c0c23667271ca98bd6754cc745256a8 /src/server/game/Handlers | |
parent | e4481c016a86fe7db0b83a434ea08eb7ba50174f (diff) |
Core/Scripts: unified scripted gossip/quest api
- Changed self-accessor on GameObjectAI to "me", like UnitAI
- Moved all related functions to AI, now Unit and GameObject have the same function names with identical behaviour
- Remove "OnUpdate" from CreatureScript/GameObjectScript, was never used and we already have AI Update method
- Quest methods no longer return a bool, the return value was used to call the AI version if the ScriptMgr one returned false
- Implemented GameObjectAI::Destroyed hook (was never called), implemented Damaged method
- Rename OnStateChanged to OnLootStateChanged to reflect when it's really called, and created a new hook OnStateChanged that only gets called on GOState change
- Since the functions are now only getting called from AI, made GetAI methods full virtual. (CanSpawn method is anyways going to be used on creatures with AI)
Diffstat (limited to 'src/server/game/Handlers')
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Handlers/NPCHandler.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 13 |
3 files changed, 12 insertions, 17 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index e360493cd89..2e18f843a8d 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -146,14 +146,12 @@ void WorldSession::HandleGossipSelectOptionOpcode(WorldPacket& recvData) { if (unit) { - unit->AI()->sGossipSelectCode(_player, menuId, gossipListId, code.c_str()); - if (!sScriptMgr->OnGossipSelectCode(_player, unit, _player->PlayerTalkClass->GetGossipOptionSender(gossipListId), _player->PlayerTalkClass->GetGossipOptionAction(gossipListId), code.c_str())) + if (!unit->AI()->GossipSelectCode(_player, menuId, gossipListId, code.c_str())) _player->OnGossipSelect(unit, gossipListId, menuId); } else { - go->AI()->GossipSelectCode(_player, menuId, gossipListId, code.c_str()); - if (!sScriptMgr->OnGossipSelectCode(_player, go, _player->PlayerTalkClass->GetGossipOptionSender(gossipListId), _player->PlayerTalkClass->GetGossipOptionAction(gossipListId), code.c_str())) + if (!go->AI()->GossipSelectCode(_player, menuId, gossipListId, code.c_str())) _player->OnGossipSelect(go, gossipListId, menuId); } } @@ -161,14 +159,12 @@ void WorldSession::HandleGossipSelectOptionOpcode(WorldPacket& recvData) { if (unit) { - unit->AI()->sGossipSelect(_player, menuId, gossipListId); - if (!sScriptMgr->OnGossipSelect(_player, unit, _player->PlayerTalkClass->GetGossipOptionSender(gossipListId), _player->PlayerTalkClass->GetGossipOptionAction(gossipListId))) + if (!unit->AI()->GossipSelect(_player, menuId, gossipListId)) _player->OnGossipSelect(unit, gossipListId, menuId); } else { - go->AI()->GossipSelect(_player, menuId, gossipListId); - if (!sScriptMgr->OnGossipSelect(_player, go, _player->PlayerTalkClass->GetGossipOptionSender(gossipListId), _player->PlayerTalkClass->GetGossipOptionAction(gossipListId))) + if (!go->AI()->GossipSelect(_player, menuId, gossipListId)) _player->OnGossipSelect(go, gossipListId, menuId); } } diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp index d5e8f8c1e7c..beca093a6a9 100644 --- a/src/server/game/Handlers/NPCHandler.cpp +++ b/src/server/game/Handlers/NPCHandler.cpp @@ -337,13 +337,13 @@ void WorldSession::HandleGossipHelloOpcode(WorldPacket& recvData) } } - if (!sScriptMgr->OnGossipHello(_player, unit)) + _player->PlayerTalkClass->ClearMenus(); + if (!unit->AI()->GossipHello(_player)) { // _player->TalkedToCreature(unit->GetEntry(), unit->GetGUID()); _player->PrepareGossipMenu(unit, unit->GetCreatureTemplate()->GossipMenuId, true); _player->SendPreparedGossip(unit); } - unit->AI()->sGossipHello(_player); } void WorldSession::HandleSpiritHealerActivateOpcode(WorldPacket& recvData) diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 85254d068b7..24f2a442998 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -91,13 +91,12 @@ void WorldSession::HandleQuestgiverHelloOpcode(WorldPacket& recvData) // Stop the npc if moving creature->StopMoving(); - if (sScriptMgr->OnGossipHello(_player, creature)) + _player->PlayerTalkClass->ClearMenus(); + if (creature->AI()->GossipHello(_player)) return; _player->PrepareGossipMenu(creature, creature->GetCreatureTemplate()->GossipMenuId, true); _player->SendPreparedGossip(creature); - - creature->AI()->sGossipHello(_player); } void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) @@ -316,8 +315,8 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket& recvData) } } - if (!sScriptMgr->OnQuestReward(_player, questgiver, quest, reward)) - questgiver->AI()->sQuestReward(_player, quest, reward); + _player->PlayerTalkClass->ClearMenus(); + questgiver->AI()->QuestReward(_player, quest, reward); break; } case TYPEID_GAMEOBJECT: @@ -336,8 +335,8 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket& recvData) } } - if (!sScriptMgr->OnQuestReward(_player, questGiver, quest, reward)) - questGiver->AI()->QuestReward(_player, quest, reward); + _player->PlayerTalkClass->ClearMenus(); + questGiver->AI()->QuestReward(_player, quest, reward); break; } default: |