Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- From 28c4baa00d44c99eb75b5e5b4c6e1cae93546cba Mon Sep 17 00:00:00 2001
- From: stoiet <to.stoiet@gmail.com>
- Date: Sat, 7 Sep 2013 18:06:04 +0200
- Subject: [PATCH] SAI++: SMART_EVENT_GOSSIP_SELECT with Token [unfixed]
- ---
- src/server/game/AI/SmartScripts/SmartScript.cpp | 107 +++++++++++++++------
- src/server/game/AI/SmartScripts/SmartScript.h | 4 +-
- src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 54 +++++++----
- src/server/game/AI/SmartScripts/SmartScriptMgr.h | 8 +-
- .../Database/Implementation/WorldDatabase.cpp | 2 +-
- 5 files changed, 123 insertions(+), 52 deletions(-)
- diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
- index c9d687c..a3f9d00 100644
- --- a/src/server/game/AI/SmartScripts/SmartScript.cpp
- +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
- @@ -1639,7 +1639,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
- }
- case SMART_ACTION_CROSS_CAST:
- {
- - ObjectList* casters = GetTargets(CreateEvent(SMART_EVENT_UPDATE_IC, 0, 0, 0, 0, 0, SMART_ACTION_NONE, 0, 0, 0, 0, 0, 0, (SMARTAI_TARGETS)e.action.cast.targetType, e.action.cast.targetParam1, e.action.cast.targetParam2, e.action.cast.targetParam3, 0), unit);
- + ObjectList* casters = GetTargets(CreateEvent(SMART_EVENT_UPDATE_IC, 0, 0, 0, 0, 0, 0, SMART_ACTION_NONE, 0, 0, 0, 0, 0, 0, (SMARTAI_TARGETS)e.action.cast.targetType, e.action.cast.targetParam1, e.action.cast.targetParam2, e.action.cast.targetParam3, 0), unit);
- if (!casters)
- break;
- @@ -2221,18 +2221,18 @@ void SmartScript::InstallTemplate(SmartScriptHolder const& e)
- {
- case SMARTAI_TEMPLATE_CASTER:
- {
- - AddEvent(SMART_EVENT_UPDATE_IC, 0, 0, 0, e.action.installTtemplate.param2, e.action.installTtemplate.param3, SMART_ACTION_CAST, e.action.installTtemplate.param1, e.target.raw.param1, 0, 0, 0, 0, SMART_TARGET_VICTIM, 0, 0, 0, 1);
- - AddEvent(SMART_EVENT_RANGE, 0, e.action.installTtemplate.param4, 300, 0, 0, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, 1, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
- - AddEvent(SMART_EVENT_RANGE, 0, 0, e.action.installTtemplate.param4>10?e.action.installTtemplate.param4-10:0, 0, 0, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, 0, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
- - AddEvent(SMART_EVENT_MANA_PCT, 0, e.action.installTtemplate.param5-15>100?100:e.action.installTtemplate.param5+15, 100, 1000, 1000, SMART_ACTION_SET_EVENT_PHASE, 1, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
- - AddEvent(SMART_EVENT_MANA_PCT, 0, 0, e.action.installTtemplate.param5, 1000, 1000, SMART_ACTION_SET_EVENT_PHASE, 0, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
- - AddEvent(SMART_EVENT_MANA_PCT, 0, 0, e.action.installTtemplate.param5, 1000, 1000, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, 1, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
- + AddEvent(SMART_EVENT_UPDATE_IC, 0, 0, 0, e.action.installTtemplate.param2, e.action.installTtemplate.param3, 0, SMART_ACTION_CAST, e.action.installTtemplate.param1, e.target.raw.param1, 0, 0, 0, 0, SMART_TARGET_VICTIM, 0, 0, 0, 1);
- + AddEvent(SMART_EVENT_RANGE, 0, e.action.installTtemplate.param4, 300, 0, 0, 0, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, 1, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
- + AddEvent(SMART_EVENT_RANGE, 0, 0, e.action.installTtemplate.param4>10?e.action.installTtemplate.param4-10:0, 0, 0, 0, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, 0, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
- + AddEvent(SMART_EVENT_MANA_PCT, 0, e.action.installTtemplate.param5-15>100?100:e.action.installTtemplate.param5+15, 100, 1000, 1000, 0, SMART_ACTION_SET_EVENT_PHASE, 1, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
- + AddEvent(SMART_EVENT_MANA_PCT, 0, 0, e.action.installTtemplate.param5, 1000, 1000, 0, SMART_ACTION_SET_EVENT_PHASE, 0, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
- + AddEvent(SMART_EVENT_MANA_PCT, 0, 0, e.action.installTtemplate.param5, 1000, 1000, 0, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, 1, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
- break;
- }
- case SMARTAI_TEMPLATE_TURRET:
- {
- - AddEvent(SMART_EVENT_UPDATE_IC, 0, 0, 0, e.action.installTtemplate.param2, e.action.installTtemplate.param3, SMART_ACTION_CAST, e.action.installTtemplate.param1, e.target.raw.param1, 0, 0, 0, 0, SMART_TARGET_VICTIM, 0, 0, 0, 0);
- - AddEvent(SMART_EVENT_JUST_CREATED, 0, 0, 0, 0, 0, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, 0, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
- + AddEvent(SMART_EVENT_UPDATE_IC, 0, 0, 0, e.action.installTtemplate.param2, e.action.installTtemplate.param3, 0, SMART_ACTION_CAST, e.action.installTtemplate.param1, e.target.raw.param1, 0, 0, 0, 0, SMART_TARGET_VICTIM, 0, 0, 0, 0);
- + AddEvent(SMART_EVENT_JUST_CREATED, 0, 0, 0, 0, 0, 0, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, 0, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
- break;
- }
- case SMARTAI_TEMPLATE_CAGED_NPC_PART:
- @@ -2240,22 +2240,22 @@ void SmartScript::InstallTemplate(SmartScriptHolder const& e)
- if (!me)
- return;
- //store cage as id1
- - AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, SMART_ACTION_STORE_TARGET_LIST, 1, 0, 0, 0, 0, 0, SMART_TARGET_CLOSEST_GAMEOBJECT, e.action.installTtemplate.param1, 10, 0, 0);
- + AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, 0, SMART_ACTION_STORE_TARGET_LIST, 1, 0, 0, 0, 0, 0, SMART_TARGET_CLOSEST_GAMEOBJECT, e.action.installTtemplate.param1, 10, 0, 0);
- //reset(close) cage on hostage(me) respawn
- - AddEvent(SMART_EVENT_UPDATE, SMART_EVENT_FLAG_NOT_REPEATABLE, 0, 0, 0, 0, SMART_ACTION_RESET_GOBJECT, 0, 0, 0, 0, 0, 0, SMART_TARGET_GAMEOBJECT_DISTANCE, e.action.installTtemplate.param1, 5, 0, 0);
- + AddEvent(SMART_EVENT_UPDATE, SMART_EVENT_FLAG_NOT_REPEATABLE, 0, 0, 0, 0, 0, SMART_ACTION_RESET_GOBJECT, 0, 0, 0, 0, 0, 0, SMART_TARGET_GAMEOBJECT_DISTANCE, e.action.installTtemplate.param1, 5, 0, 0);
- - AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, SMART_ACTION_SET_RUN, e.action.installTtemplate.param3, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
- - AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, SMART_ACTION_SET_EVENT_PHASE, 1, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
- + AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, 0, SMART_ACTION_SET_RUN, e.action.installTtemplate.param3, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
- + AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, 0, SMART_ACTION_SET_EVENT_PHASE, 1, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
- - AddEvent(SMART_EVENT_UPDATE, SMART_EVENT_FLAG_NOT_REPEATABLE, 1000, 1000, 0, 0, SMART_ACTION_MOVE_FORWARD, e.action.installTtemplate.param4, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
- + AddEvent(SMART_EVENT_UPDATE, SMART_EVENT_FLAG_NOT_REPEATABLE, 1000, 1000, 0, 0, 0, SMART_ACTION_MOVE_FORWARD, e.action.installTtemplate.param4, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
- //phase 1: give quest credit on movepoint reached
- - AddEvent(SMART_EVENT_MOVEMENTINFORM, 0, POINT_MOTION_TYPE, SMART_RANDOM_POINT, 0, 0, SMART_ACTION_SET_DATA, 0, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 1, 0, 0, 1);
- + AddEvent(SMART_EVENT_MOVEMENTINFORM, 0, POINT_MOTION_TYPE, SMART_RANDOM_POINT, 0, 0, 0, SMART_ACTION_SET_DATA, 0, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 1, 0, 0, 1);
- //phase 1: despawn after time on movepoint reached
- - AddEvent(SMART_EVENT_MOVEMENTINFORM, 0, POINT_MOTION_TYPE, SMART_RANDOM_POINT, 0, 0, SMART_ACTION_FORCE_DESPAWN, e.action.installTtemplate.param2, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
- + AddEvent(SMART_EVENT_MOVEMENTINFORM, 0, POINT_MOTION_TYPE, SMART_RANDOM_POINT, 0, 0, 0, SMART_ACTION_FORCE_DESPAWN, e.action.installTtemplate.param2, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
- if (sCreatureTextMgr->TextExist(me->GetEntry(), (uint8)e.action.installTtemplate.param5))
- - AddEvent(SMART_EVENT_MOVEMENTINFORM, 0, POINT_MOTION_TYPE, SMART_RANDOM_POINT, 0, 0, SMART_ACTION_TALK, e.action.installTtemplate.param5, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
- + AddEvent(SMART_EVENT_MOVEMENTINFORM, 0, POINT_MOTION_TYPE, SMART_RANDOM_POINT, 0, 0, 0, SMART_ACTION_TALK, e.action.installTtemplate.param5, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
- break;
- }
- case SMARTAI_TEMPLATE_CAGED_GO_PART:
- @@ -2263,16 +2263,16 @@ void SmartScript::InstallTemplate(SmartScriptHolder const& e)
- if (!go)
- return;
- //store hostage as id1
- - AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, SMART_ACTION_STORE_TARGET_LIST, 1, 0, 0, 0, 0, 0, SMART_TARGET_CLOSEST_CREATURE, e.action.installTtemplate.param1, 10, 0, 0);
- + AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, 0, SMART_ACTION_STORE_TARGET_LIST, 1, 0, 0, 0, 0, 0, SMART_TARGET_CLOSEST_CREATURE, e.action.installTtemplate.param1, 10, 0, 0);
- //store invoker as id2
- - AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, SMART_ACTION_STORE_TARGET_LIST, 2, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
- + AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, 0, SMART_ACTION_STORE_TARGET_LIST, 2, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
- //signal hostage
- - AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, SMART_ACTION_SET_DATA, 0, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 1, 0, 0, 0);
- + AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, 0, SMART_ACTION_SET_DATA, 0, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 1, 0, 0, 0);
- //when hostage raeched end point, give credit to invoker
- if (e.action.installTtemplate.param2)
- - AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, SMART_ACTION_CALL_KILLEDMONSTER, e.action.installTtemplate.param1, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 2, 0, 0, 0);
- + AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, 0, SMART_ACTION_CALL_KILLEDMONSTER, e.action.installTtemplate.param1, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 2, 0, 0, 0);
- else
- - AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, SMART_ACTION_CALL_KILLEDMONSTER, e.action.installTtemplate.param1, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 2, 0, 0, 0);
- + AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, 0, SMART_ACTION_CALL_KILLEDMONSTER, e.action.installTtemplate.param1, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 2, 0, 0, 0);
- break;
- }
- case SMARTAI_TEMPLATE_BASIC:
- @@ -2281,12 +2281,12 @@ void SmartScript::InstallTemplate(SmartScriptHolder const& e)
- }
- }
- -void SmartScript::AddEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 phaseMask)
- +void SmartScript::AddEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, uint32 event_param5, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 phaseMask)
- {
- - mInstallEvents.push_back(CreateEvent(e, event_flags, event_param1, event_param2, event_param3, event_param4, action, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, t, target_param1, target_param2, target_param3, phaseMask));
- + mInstallEvents.push_back(CreateEvent(e, event_flags, event_param1, event_param2, event_param3, event_param4, event_param5, action, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, t, target_param1, target_param2, target_param3, phaseMask));
- }
- -SmartScriptHolder SmartScript::CreateEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 phaseMask)
- +SmartScriptHolder SmartScript::CreateEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, uint32 event_param5, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 phaseMask)
- {
- SmartScriptHolder script;
- script.event.type = e;
- @@ -2294,6 +2294,7 @@ SmartScriptHolder SmartScript::CreateEvent(SMART_EVENT e, uint32 event_flags, ui
- script.event.raw.param2 = event_param2;
- script.event.raw.param3 = event_param3;
- script.event.raw.param4 = event_param4;
- + script.event.raw.param5 = event_param5;
- script.event.event_phase_mask = phaseMask;
- script.event.event_flags = event_flags;
- script.event.event_chance = 100;
- @@ -2982,11 +2983,61 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
- }
- case SMART_EVENT_GOSSIP_SELECT:
- {
- - TC_LOG_DEBUG(LOG_FILTER_DATABASE_AI, "SmartScript: Gossip Select: menu %u action %u", var0, var1);//little help for scripters
- + TC_LOG_DEBUG(LOG_FILTER_DATABASE_AI, "SmartScript: Gossip Select: menu %u action %u", var0, var1); //little help for scripters
- if (e.event.gossip.sender != var0 || e.event.gossip.action != var1)
- return;
- - ProcessAction(e, unit, var0, var1);
- - break;
- +
- + ObjectList* targets = GetTargets(e, unit);
- + Unit* templastInvoker = NULL;
- + Player* player = NULL;
- +
- + if (!targets)
- + break;
- +
- + if(e.event.gossip.tokenID > 0)
- + {
- + for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
- + {
- + if (player = (*itr)->ToPlayer())
- + {
- + if(player->HasItemCount(e.event.gossip.tokenID, e.event.gossip.tokenCount, true))
- + {
- + if(me)
- + {
- + templastInvoker = GetLastInvoker();
- + sCreatureTextMgr->SendChat(me, uint8(e.event.gossip.groupID), IsPlayer(templastInvoker) ? templastInvoker->GetGUID() : 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, (*itr)->ToPlayer());
- + }
- + player->DestroyItemCount(e.event.gossip.tokenID, e.event.gossip.tokenCount, true);
- + ProcessAction(e, unit, var0, var1);
- + }
- + else
- + {
- + if(me)
- + {
- + templastInvoker = GetLastInvoker();
- + sCreatureTextMgr->SendChat(me, uint8(e.event.gossip.groupID + 1), IsPlayer(templastInvoker) ? templastInvoker->GetGUID() : 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, (*itr)->ToPlayer());
- + }
- + player->PlayerTalkClass->SendCloseGossip();
- + }
- + }
- + }
- + delete targets;
- + }
- + else if(e.event.gossip.tokenID == 0)
- + {
- + for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
- + {
- + if(player = (*itr)->ToPlayer())
- + if(me)
- + {
- + templastInvoker = GetLastInvoker();
- + sCreatureTextMgr->SendChat(me, uint8(e.event.gossip.groupID), IsPlayer(templastInvoker) ? templastInvoker->GetGUID() : 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, (*itr)->ToPlayer());
- + }
- + ProcessAction(e, unit, var0, var1);
- + }
- + delete targets;
- + }
- + break;
- }
- case SMART_EVENT_DUMMY_EFFECT:
- {
- diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h
- index b22f2d8..64f40f9 100644
- --- a/src/server/game/AI/SmartScripts/SmartScript.h
- +++ b/src/server/game/AI/SmartScripts/SmartScript.h
- @@ -49,8 +49,8 @@ class SmartScript
- ObjectList* GetTargets(SmartScriptHolder const& e, Unit* invoker = NULL);
- ObjectList* GetWorldObjectsInDist(float dist);
- void InstallTemplate(SmartScriptHolder const& e);
- - SmartScriptHolder CreateEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 phaseMask = 0);
- - void AddEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 phaseMask = 0);
- + SmartScriptHolder CreateEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, uint32 event_param5, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 phaseMask = 0);
- + void AddEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, uint32 event_param5, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 phaseMask = 0);
- void SetPathId(uint32 id) { mPathId = id; }
- uint32 GetPathId() const { return mPathId; }
- WorldObject* GetBaseObject()
- diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
- index 5eb945a..64ed5f9 100644
- --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
- +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
- @@ -121,7 +121,6 @@ void SmartAIMgr::LoadSmartAIFromDB()
- return;
- }
- -
- uint32 count = 0;
- do
- @@ -196,23 +195,24 @@ void SmartAIMgr::LoadSmartAIFromDB()
- temp.event.raw.param2 = fields[9].GetUInt32();
- temp.event.raw.param3 = fields[10].GetUInt32();
- temp.event.raw.param4 = fields[11].GetUInt32();
- -
- - temp.action.type = (SMART_ACTION)fields[12].GetUInt8();
- - temp.action.raw.param1 = fields[13].GetUInt32();
- - temp.action.raw.param2 = fields[14].GetUInt32();
- - temp.action.raw.param3 = fields[15].GetUInt32();
- - temp.action.raw.param4 = fields[16].GetUInt32();
- - temp.action.raw.param5 = fields[17].GetUInt32();
- - temp.action.raw.param6 = fields[18].GetUInt32();
- -
- - temp.target.type = (SMARTAI_TARGETS)fields[19].GetUInt8();
- - temp.target.raw.param1 = fields[20].GetUInt32();
- - temp.target.raw.param2 = fields[21].GetUInt32();
- - temp.target.raw.param3 = fields[22].GetUInt32();
- - temp.target.x = fields[23].GetFloat();
- - temp.target.y = fields[24].GetFloat();
- - temp.target.z = fields[25].GetFloat();
- - temp.target.o = fields[26].GetFloat();
- + temp.event.raw.param5 = fields[12].GetUInt32();
- +
- + temp.action.type = (SMART_ACTION)fields[13].GetUInt8();
- + temp.action.raw.param1 = fields[14].GetUInt32();
- + temp.action.raw.param2 = fields[15].GetUInt32();
- + temp.action.raw.param3 = fields[16].GetUInt32();
- + temp.action.raw.param4 = fields[17].GetUInt32();
- + temp.action.raw.param5 = fields[18].GetUInt32();
- + temp.action.raw.param6 = fields[19].GetUInt32();
- +
- + temp.target.type = (SMARTAI_TARGETS)fields[20].GetUInt8();
- + temp.target.raw.param1 = fields[21].GetUInt32();
- + temp.target.raw.param2 = fields[22].GetUInt32();
- + temp.target.raw.param3 = fields[23].GetUInt32();
- + temp.target.x = fields[24].GetFloat();
- + temp.target.y = fields[25].GetFloat();
- + temp.target.z = fields[26].GetFloat();
- + temp.target.o = fields[27].GetFloat();
- //check target
- if (!IsTargetValid(temp))
- @@ -610,6 +610,20 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
- case SMART_EVENT_WAYPOINT_STOPPED:
- case SMART_EVENT_WAYPOINT_ENDED:
- case SMART_EVENT_GOSSIP_SELECT:
- + {
- + if(e.event.gossip.tokenID)
- + {
- + if (!IsItemValid(e, e.event.gossip.tokenID))
- + e.event.gossip.tokenID = BADGE_OF_JUSTICE;
- +
- + if (!NotNULL(e, e.event.gossip.tokenCount))
- + return false;
- + }
- +
- + if(e.event.gossip.groupID)
- + if(!IsTextValid(e, e.event.gossip.groupID))
- + return false;
- + }
- case SMART_EVENT_GOSSIP_HELLO:
- case SMART_EVENT_JUST_CREATED:
- case SMART_EVENT_FOLLOW_COMPLETED:
- @@ -1063,7 +1077,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
- return true;
- }
- -/*bool SmartAIMgr::IsTextValid(SmartScriptHolder const& e, uint32 id) // unused
- +bool SmartAIMgr::IsTextValid(SmartScriptHolder const& e, uint32 id)
- {
- bool error = false;
- uint32 entry = 0;
- @@ -1088,4 +1102,4 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
- return false;
- }
- return true;
- -}*/
- +}
- diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
- index 4c3d2bb..5ab9b14 100644
- --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
- +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
- @@ -160,6 +160,8 @@ enum SMART_EVENT
- SMART_EVENT_END = 75
- };
- +#define BADGE_OF_JUSTICE 29434 // for gossip
- +
- struct SmartEvent
- {
- SMART_EVENT type;
- @@ -335,6 +337,9 @@ struct SmartEvent
- {
- uint32 sender;
- uint32 action;
- + uint32 groupID;
- + uint32 tokenID;
- + uint32 tokenCount;
- } gossip;
- struct
- @@ -383,6 +388,7 @@ struct SmartEvent
- uint32 param2;
- uint32 param3;
- uint32 param4;
- + uint32 param5; // for gossip
- } raw;
- };
- };
- @@ -1512,7 +1518,7 @@ class SmartAIMgr
- return true;
- }
- - //bool IsTextValid(SmartScriptHolder const& e, uint32 id);
- + bool IsTextValid(SmartScriptHolder const& e, uint32 id);
- };
- #define sSmartScriptMgr ACE_Singleton<SmartAIMgr, ACE_Null_Mutex>::instance()
- diff --git a/src/server/shared/Database/Implementation/WorldDatabase.cpp b/src/server/shared/Database/Implementation/WorldDatabase.cpp
- index 4128047..32bb74f 100644
- --- a/src/server/shared/Database/Implementation/WorldDatabase.cpp
- +++ b/src/server/shared/Database/Implementation/WorldDatabase.cpp
- @@ -26,7 +26,7 @@ void WorldDatabaseConnection::DoPrepareStatements()
- PrepareStatement(WORLD_DEL_CRELINKED_RESPAWN, "DELETE FROM linked_respawn WHERE guid = ?", CONNECTION_ASYNC);
- PrepareStatement(WORLD_REP_CREATURE_LINKED_RESPAWN, "REPLACE INTO linked_respawn (guid, linkedGuid) VALUES (?, ?)", CONNECTION_ASYNC);
- PrepareStatement(WORLD_SEL_CREATURE_TEXT, "SELECT entry, groupid, id, text, type, language, probability, emote, duration, sound FROM creature_text", CONNECTION_SYNCH);
- - PrepareStatement(WORLD_SEL_SMART_SCRIPTS, "SELECT entryorguid, source_type, id, link, event_type, event_phase_mask, event_chance, event_flags, event_param1, event_param2, event_param3, event_param4, action_type, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, target_type, target_param1, target_param2, target_param3, target_x, target_y, target_z, target_o FROM smart_scripts ORDER BY entryorguid, source_type, id, link", CONNECTION_SYNCH);
- + PrepareStatement(WORLD_SEL_SMART_SCRIPTS, "SELECT entryorguid, source_type, id, link, event_type, event_phase_mask, event_chance, event_flags, event_param1, event_param2, event_param3, event_param4, event_param5, action_type, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, target_type, target_param1, target_param2, target_param3, target_x, target_y, target_z, target_o FROM smart_scripts ORDER BY entryorguid, source_type, id, link", CONNECTION_SYNCH);
- PrepareStatement(WORLD_SEL_SMARTAI_WP, "SELECT entry, pointid, position_x, position_y, position_z FROM waypoints ORDER BY entry, pointid", CONNECTION_SYNCH);
- PrepareStatement(WORLD_DEL_GAMEOBJECT, "DELETE FROM gameobject WHERE guid = ?", CONNECTION_ASYNC);
- PrepareStatement(WORLD_DEL_EVENT_GAMEOBJECT, "DELETE FROM game_event_gameobject WHERE guid = ?", CONNECTION_ASYNC);
- --
- 1.8.3.msysgit.0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement