diff options
author | Lopfest <lopfest@gmail.com> | 2018-01-30 11:31:52 +0100 |
---|---|---|
committer | jackpoz <giacomopoz@gmail.com> | 2020-01-01 19:56:05 +0100 |
commit | 443a425c4c35c1a3ee4594598208032e953dc287 (patch) | |
tree | 6354484bf7ef652251ecd11049ea5be720a6733d /src | |
parent | 9f057d708267935053d94bdded9ea9efc10d1dd3 (diff) |
Core/SAI: Implement new action to set movement speed
(cherry picked from commit 5dd6d31c01dcc48f3d286196808ca0f6de9eaf04)
# Conflicts:
# src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
# src/server/game/AI/SmartScripts/SmartScriptMgr.h
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 12 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 16 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 9 |
3 files changed, 36 insertions, 1 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index a2cc849865f..751abd33c09 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2304,6 +2304,18 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } break; } + case SMART_ACTION_SET_MOVEMENT_SPEED: + { + uint32 speedInteger = e.action.movementSpeed.speedInteger; + uint32 speedFraction = e.action.movementSpeed.speedFraction; + float speed = float(speedInteger) + float(speedFraction) / std::pow(10, std::floor(std::log10(float(speedFraction ? speedFraction : 1)) + 1)); + + for (WorldObject* target : targets) + if (IsCreature(target)) + me->SetSpeed(UnitMoveType(e.action.movementSpeed.movementType), speed); + + break; + } default: TC_LOG_ERROR("sql.sql", "SmartScript::ProcessAction: Entry %d SourceType %u, Event %u, Unhandled Action type %u", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType()); break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 7735991ca45..119dce548cf 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -1503,6 +1503,22 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) TC_LOG_ERROR("sql.sql", "Entry %u SourceType %u Event %u Action %u does not specify duration", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType()); return false; } + case SMART_ACTION_SET_MOVEMENT_SPEED: + { + if (e.action.movementSpeed.movementType >= MAX_MOVE_TYPE) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry %u SourceType %u Event %u Action %u uses invalid movementType %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.movementSpeed.movementType); + return false; + } + + if (!e.action.movementSpeed.speedInteger && !e.action.movementSpeed.speedFraction) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry %u SourceType %u Event %u Action %u uses speed 0, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType()); + return false; + } + + break; + } case SMART_ACTION_FOLLOW: case SMART_ACTION_SET_ORIENTATION: case SMART_ACTION_STORE_TARGET_LIST: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index c2ab701cb51..a9f819750b7 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -585,7 +585,7 @@ enum SMART_ACTION SMART_ACTION_RESPAWN_BY_SPAWNID = 133, // spawnType, spawnId SMART_ACTION_INVOKER_CAST = 134, // spellID, castFlags SMART_ACTION_PLAY_CINEMATIC = 135, // entry, cinematic - SMART_ACTION_SET_MOVEMENT_SPEED = 136, // movementType, speedInteger, speedFraction (RESERVED, PENDING CHERRYPICK) + SMART_ACTION_SET_MOVEMENT_SPEED = 136, // movementType, speedInteger, speedFraction SMART_ACTION_PLAY_SPELL_VISUAL_KIT = 137, // spellVisualKitId (RESERVED, PENDING CHERRYPICK) SMART_ACTION_END = 138 @@ -1145,6 +1145,13 @@ struct SmartAction uint32 entry; } cinematic; + struct + { + uint32 movementType; + uint32 speedInteger; + uint32 speedFraction; + } movementSpeed; + //! Note for any new future actions //! All parameters must have type uint32 |