diff options
author | Aqua Deus <95978183+aquadeus@users.noreply.github.com> | 2022-12-30 16:32:37 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-30 16:32:37 +0100 |
commit | 09591fbdb0a81f8565c6a16f844953752f597f18 (patch) | |
tree | ea0a58c4623805ca085388af4b76b5910234c99b | |
parent | bde93b25d2b899c4623467a094c71333b2b54e8d (diff) |
Core/SAI: Add action param 7 (#28519)
Co-authored-by: Shauren <shauren.trinity@gmail.com>
6 files changed, 19 insertions, 15 deletions
diff --git a/sql/updates/world/master/2022_12_30_01_world.sql b/sql/updates/world/master/2022_12_30_01_world.sql new file mode 100644 index 00000000000..7717e90b7a3 --- /dev/null +++ b/sql/updates/world/master/2022_12_30_01_world.sql @@ -0,0 +1 @@ +ALTER TABLE smart_scripts ADD COLUMN `action_param7` int(10) unsigned NOT NULL DEFAULT '0' AFTER `action_param6`; diff --git a/src/server/database/Database/Implementation/WorldDatabase.cpp b/src/server/database/Database/Implementation/WorldDatabase.cpp index 02ae0ecee8a..c206ecd9927 100644 --- a/src/server/database/Database/Implementation/WorldDatabase.cpp +++ b/src/server/database/Database/Implementation/WorldDatabase.cpp @@ -27,7 +27,7 @@ void WorldDatabaseConnection::DoPrepareStatements() PrepareStatement(WORLD_DEL_LINKED_RESPAWN_MASTER, "DELETE FROM linked_respawn WHERE linkedGuid = ? AND linkType = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_REP_LINKED_RESPAWN, "REPLACE INTO linked_respawn (guid, linkedGuid, linkType) VALUES (?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(WORLD_SEL_CREATURE_TEXT, "SELECT CreatureID, GroupID, ID, Text, Type, Language, Probability, Emote, Duration, Sound, SoundPlayType, BroadcastTextId, TextRange 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, event_param5, event_param_string, action_type, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, target_type, target_param1, target_param2, target_param3, target_param4, 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, event_param_string, action_type, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, action_param7, target_type, target_param1, target_param2, target_param3, target_param4, 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, orientation, delay 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); diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 73913c3b89c..a3f20b9856b 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1672,7 +1672,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u break; ObjectVector casters; - GetTargets(casters, CreateSmartEvent(SMART_EVENT_UPDATE_IC, 0, 0, 0, 0, 0, 0, SMART_ACTION_NONE, 0, 0, 0, 0, 0, 0, (SMARTAI_TARGETS)e.action.crossCast.targetType, e.action.crossCast.targetParam1, e.action.crossCast.targetParam2, e.action.crossCast.targetParam3, 0, 0), unit); + GetTargets(casters, CreateSmartEvent(SMART_EVENT_UPDATE_IC, 0, 0, 0, 0, 0, 0, SMART_ACTION_NONE, 0, 0, 0, 0, 0, 0, 0, (SMARTAI_TARGETS)e.action.crossCast.targetType, e.action.crossCast.targetParam1, e.action.crossCast.targetParam2, e.action.crossCast.targetParam3, 0, 0), unit); for (WorldObject* caster : casters) { @@ -2533,7 +2533,7 @@ void SmartScript::ProcessTimedAction(SmartScriptHolder& e, uint32 const& min, ui RecalcTimer(e, std::min<uint32>(min, 5000), std::min<uint32>(min, 5000)); } -SmartScriptHolder SmartScript::CreateSmartEvent(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 target_param4, uint32 phaseMask) +SmartScriptHolder SmartScript::CreateSmartEvent(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, uint32 action_param7, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 target_param4, uint32 phaseMask) { SmartScriptHolder script; script.event.type = e; @@ -2553,6 +2553,7 @@ SmartScriptHolder SmartScript::CreateSmartEvent(SMART_EVENT e, uint32 event_flag script.action.raw.param4 = action_param4; script.action.raw.param5 = action_param5; script.action.raw.param6 = action_param6; + script.action.raw.param7 = action_param7; script.target.type = t; script.target.raw.param1 = target_param1; diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index 822813e32f3..d0d660b7a29 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -52,7 +52,7 @@ class TC_GAME_API SmartScript void ProcessTimedAction(SmartScriptHolder& e, uint32 const& min, uint32 const& max, Unit* unit = nullptr, uint32 var0 = 0, uint32 var1 = 0, bool bvar = false, SpellInfo const* spell = nullptr, GameObject* gob = nullptr, std::string const& varString = ""); void GetTargets(ObjectVector& targets, SmartScriptHolder const& e, WorldObject* invoker = nullptr) const; void GetWorldObjectsInDist(ObjectVector& objects, float dist) const; - static SmartScriptHolder CreateSmartEvent(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 target_param4, uint32 phaseMask); + static SmartScriptHolder CreateSmartEvent(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, uint32 action_param7, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 target_param4, uint32 phaseMask); void SetPathId(uint32 id) { mPathId = id; } uint32 GetPathId() const { return mPathId; } WorldObject* GetBaseObject() const; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index ecfe2faaf05..2db99410223 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -329,16 +329,17 @@ void SmartAIMgr::LoadSmartAIFromDB() temp.action.raw.param4 = fields[18].GetUInt32(); temp.action.raw.param5 = fields[19].GetUInt32(); temp.action.raw.param6 = fields[20].GetUInt32(); - - temp.target.type = (SMARTAI_TARGETS)fields[21].GetUInt8(); - temp.target.raw.param1 = fields[22].GetUInt32(); - temp.target.raw.param2 = fields[23].GetUInt32(); - temp.target.raw.param3 = fields[24].GetUInt32(); - temp.target.raw.param4 = fields[25].GetUInt32(); - temp.target.x = fields[26].GetFloat(); - temp.target.y = fields[27].GetFloat(); - temp.target.z = fields[28].GetFloat(); - temp.target.o = fields[29].GetFloat(); + temp.action.raw.param7 = fields[21].GetUInt32(); + + temp.target.type = (SMARTAI_TARGETS)fields[22].GetUInt8(); + temp.target.raw.param1 = fields[23].GetUInt32(); + temp.target.raw.param2 = fields[24].GetUInt32(); + temp.target.raw.param3 = fields[25].GetUInt32(); + temp.target.raw.param4 = fields[26].GetUInt32(); + temp.target.x = fields[27].GetFloat(); + temp.target.y = fields[28].GetFloat(); + temp.target.z = fields[29].GetFloat(); + temp.target.o = fields[30].GetFloat(); //check target if (!IsTargetValid(temp)) diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index aaae5c0bfb3..858b3043c77 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -33,7 +33,7 @@ typedef uint32 SAIBool; enum eSmartAI { SMART_EVENT_PARAM_COUNT = 4, - SMART_ACTION_PARAM_COUNT = 6, + SMART_ACTION_PARAM_COUNT = 7, SMART_SUMMON_COUNTER = 0xFFFFFF, SMART_ESCORT_LAST_OOC_POINT = 0xFFFFFF, SMART_RANDOM_POINT = 0xFFFFFE, @@ -1247,6 +1247,7 @@ struct SmartAction uint32 param4; uint32 param5; uint32 param6; + uint32 param7; } raw; }; }; |