Core/AI: added Gossip* and Quest* virtual functions to UnitAI, will be used in future system (not all functions hooked yet)

--HG--
branch : trunk
This commit is contained in:
Rat
2010-10-25 18:23:45 +02:00
parent 67346f449a
commit a792e3d67c
4 changed files with 21 additions and 0 deletions
+8
View File
@@ -151,6 +151,14 @@ class UnitAI
static AISpellInfoType *AISpellInfo; static AISpellInfoType *AISpellInfo;
static void FillAISpellInfo(); static void FillAISpellInfo();
virtual void sGossipHello(Player* player){ }
virtual void sGossipSelect(Player* player, uint32 sender, uint32 action){ }
virtual void sGossipSelectCode(Player* player, uint32 sender, uint32 action, const char* code){ }
virtual void sQuestAccept(Player* player, Quest const* quest){ }
virtual void sQuestSelect(Player* player, Quest const* quest){ }
virtual void sQuestComplete(Player* player, Quest const* quest){ }
virtual void sQuestReward(Player* player, Quest const* quest, uint32 opt){ }
}; };
class PlayerAI : public UnitAI class PlayerAI : public UnitAI
@@ -140,6 +140,8 @@ void WorldSession::HandleGossipSelectOptionOpcode(WorldPacket & recv_data)
{ {
if (!sScriptMgr.OnGossipSelectCode(_player, unit, _player->PlayerTalkClass->GossipOptionSender(gossipListId), _player->PlayerTalkClass->GossipOptionAction(gossipListId), code.c_str())) if (!sScriptMgr.OnGossipSelectCode(_player, unit, _player->PlayerTalkClass->GossipOptionSender(gossipListId), _player->PlayerTalkClass->GossipOptionAction(gossipListId), code.c_str()))
_player->OnGossipSelect(unit, gossipListId, menuId); _player->OnGossipSelect(unit, gossipListId, menuId);
unit->AI()->sGossipSelectCode(_player, _player->PlayerTalkClass->GossipOptionSender(gossipListId), _player->PlayerTalkClass->GossipOptionAction(gossipListId), code.c_str());
} }
else else
sScriptMgr.OnGossipSelectCode(_player, go, _player->PlayerTalkClass->GossipOptionSender(gossipListId), _player->PlayerTalkClass->GossipOptionAction(gossipListId), code.c_str()); sScriptMgr.OnGossipSelectCode(_player, go, _player->PlayerTalkClass->GossipOptionSender(gossipListId), _player->PlayerTalkClass->GossipOptionAction(gossipListId), code.c_str());
@@ -150,6 +152,8 @@ void WorldSession::HandleGossipSelectOptionOpcode(WorldPacket & recv_data)
{ {
if (!sScriptMgr.OnGossipSelect(_player, unit, _player->PlayerTalkClass->GossipOptionSender(gossipListId), _player->PlayerTalkClass->GossipOptionAction(gossipListId))) if (!sScriptMgr.OnGossipSelect(_player, unit, _player->PlayerTalkClass->GossipOptionSender(gossipListId), _player->PlayerTalkClass->GossipOptionAction(gossipListId)))
_player->OnGossipSelect(unit, gossipListId, menuId); _player->OnGossipSelect(unit, gossipListId, menuId);
unit->AI()->sGossipSelect(_player, _player->PlayerTalkClass->GossipOptionSender(gossipListId), _player->PlayerTalkClass->GossipOptionAction(gossipListId));
} }
else else
sScriptMgr.OnGossipSelect(_player, go, _player->PlayerTalkClass->GossipOptionSender(gossipListId), _player->PlayerTalkClass->GossipOptionAction(gossipListId)); sScriptMgr.OnGossipSelect(_player, go, _player->PlayerTalkClass->GossipOptionSender(gossipListId), _player->PlayerTalkClass->GossipOptionAction(gossipListId));
@@ -34,6 +34,7 @@
#include "BattlegroundMgr.h" #include "BattlegroundMgr.h"
#include "Battleground.h" #include "Battleground.h"
#include "ScriptMgr.h" #include "ScriptMgr.h"
#include "CreatureAI.h"
enum StableResultCode enum StableResultCode
{ {
@@ -343,6 +344,7 @@ void WorldSession::HandleGossipHelloOpcode(WorldPacket & recv_data)
_player->PrepareGossipMenu(unit, unit->GetCreatureInfo()->GossipMenuId, true); _player->PrepareGossipMenu(unit, unit->GetCreatureInfo()->GossipMenuId, true);
_player->SendPreparedGossip(unit); _player->SendPreparedGossip(unit);
} }
unit->AI()->sGossipHello(_player);
} }
/*void WorldSession::HandleGossipSelectOptionOpcode(WorldPacket & recv_data) /*void WorldSession::HandleGossipSelectOptionOpcode(WorldPacket & recv_data)
@@ -32,6 +32,8 @@
#include "BattlegroundAV.h" #include "BattlegroundAV.h"
#include "ScriptMgr.h" #include "ScriptMgr.h"
#include "ConditionMgr.h" #include "ConditionMgr.h"
#include "Creature.h"
#include "CreatureAI.h"
void WorldSession::HandleQuestgiverStatusQueryOpcode(WorldPacket & recv_data) void WorldSession::HandleQuestgiverStatusQueryOpcode(WorldPacket & recv_data)
{ {
@@ -105,6 +107,8 @@ void WorldSession::HandleQuestgiverHelloOpcode(WorldPacket & recv_data)
_player->PrepareGossipMenu(pCreature, pCreature->GetCreatureInfo()->GossipMenuId, true); _player->PrepareGossipMenu(pCreature, pCreature->GetCreatureInfo()->GossipMenuId, true);
_player->SendPreparedGossip(pCreature); _player->SendPreparedGossip(pCreature);
pCreature->AI()->sGossipHello(_player);
} }
void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket & recv_data) void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket & recv_data)
@@ -188,6 +192,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket & recv_data)
{ {
case TYPEID_UNIT: case TYPEID_UNIT:
sScriptMgr.OnQuestAccept(_player, (pObject->ToCreature()), qInfo); sScriptMgr.OnQuestAccept(_player, (pObject->ToCreature()), qInfo);
(pObject->ToCreature())->AI()->sQuestAccept(_player, qInfo);
break; break;
case TYPEID_ITEM: case TYPEID_ITEM:
case TYPEID_CONTAINER: case TYPEID_CONTAINER:
@@ -316,6 +321,8 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket & recv_data)
// Send next quest // Send next quest
if (Quest const* nextquest = _player->GetNextQuest(guid ,pQuest)) if (Quest const* nextquest = _player->GetNextQuest(guid ,pQuest))
_player->PlayerTalkClass->SendQuestGiverQuestDetails(nextquest,guid,true); _player->PlayerTalkClass->SendQuestGiverQuestDetails(nextquest,guid,true);
(pObject->ToCreature())->AI()->sQuestReward(_player, pQuest, reward);
} }
break; break;
case TYPEID_GAMEOBJECT: case TYPEID_GAMEOBJECT: