aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLopfest <lopfest@gmail.com>2018-01-30 11:31:52 +0100
committerjackpoz <giacomopoz@gmail.com>2020-01-01 19:56:05 +0100
commit443a425c4c35c1a3ee4594598208032e953dc287 (patch)
tree6354484bf7ef652251ecd11049ea5be720a6733d /src
parent9f057d708267935053d94bdded9ea9efc10d1dd3 (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.cpp12
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp16
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h9
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