Skip to content

Instantly share code, notes, and snippets.

@Langerz82
Last active July 23, 2018 01:38
Show Gist options
  • Save Langerz82/14e10a876866c3daf26b3bbf98aba83d to your computer and use it in GitHub Desktop.
Save Langerz82/14e10a876866c3daf26b3bbf98aba83d to your computer and use it in GitHub Desktop.
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index 0fb99e63d9..9ae272d017 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -787,7 +787,7 @@ void SmartAI::SetCombatMove(bool on)
}
else if (MovementGenerator* movement = me->GetMotionMaster()->GetMovementGenerator([](MovementGenerator const* a) -> bool
{
- return a->GetMovementGeneratorType() == CHASE_MOTION_TYPE && a->Mode == MOTION_MODE_DEFAULT && a->Priority == MOTION_PRIORITY_NORMAL;
+ return a->GetMovementGeneratorType() == CHASE_MOTION_TYPE && a->Mode == MOTION_MODE_OVERRIDE && a->Priority == MOTION_PRIORITY_NORMAL;
}))
me->GetMotionMaster()->Remove(movement);
}
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 2e8d2f7256..975e1cc88e 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -525,7 +525,11 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
case SMART_ACTION_CAST:
{
if (targets.empty())
+ {
+ e.event.minMaxRepeat.repeatMin = e.event.raw.param5 ? e.event.raw.param5 : 1000;
+ e.event.minMaxRepeat.repeatMax = e.event.raw.param5 ? e.event.raw.param5 : 1000;
break;
+ }
if (e.action.cast.targetsLimit > 0 && targets.size() > e.action.cast.targetsLimit)
Trinity::Containers::RandomResize(targets, e.action.cast.targetsLimit);
@@ -2275,16 +2279,20 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
}
}
-void SmartScript::ProcessTimedAction(SmartScriptHolder& e, uint32 const& min, uint32 const& max, Unit* unit, uint32 var0, uint32 var1, bool bvar, SpellInfo const* spell, GameObject* gob)
+void SmartScript::ProcessTimedAction(SmartScriptHolder& e, uint32 & min, uint32 & max, Unit* unit, uint32 var0, uint32 var1, bool bvar, SpellInfo const* spell, GameObject* gob)
{
// We may want to execute action rarely and because of this if condition is not fulfilled the action will be rechecked in a long time
if (sConditionMgr->IsObjectMeetingSmartEventConditions(e.entryOrGuid, e.event_id, e.source_type, unit, GetBaseObject()))
{
- RecalcTimer(e, min, max);
ProcessAction(e, unit, var0, var1, bvar, spell, gob);
+ uint32 recheckDelay = e.event.raw.param5 ? e.event.raw.param5 : 1000;
+ RecalcTimer(e, min + recheckDelay, max + recheckDelay);
}
else
- RecalcTimer(e, std::min<uint32>(min, 5000), std::min<uint32>(min, 5000));
+ {
+ uint32 recheckDelay = e.event.raw.param5 ? e.event.raw.param5 : 1000;
+ RecalcTimer(e, recheckDelay, recheckDelay);
+ }
}
void SmartScript::InstallTemplate(SmartScriptHolder const& e)
@@ -2779,9 +2787,8 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax);
break;
case SMART_EVENT_UPDATE_IC:
- if (!me || !me->IsEngaged())
- return;
- ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax);
+ if (me && me->IsEngaged())
+ ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax);
break;
case SMART_EVENT_HEALT_PCT:
{
diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h
index 8ec08f413b..0159105490 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.h
+++ b/src/server/game/AI/SmartScripts/SmartScript.h
@@ -46,7 +46,7 @@ class TC_GAME_API SmartScript
void UpdateTimer(SmartScriptHolder& e, uint32 const diff);
static void InitTimer(SmartScriptHolder& e);
void ProcessAction(SmartScriptHolder& e, Unit* unit = nullptr, uint32 var0 = 0, uint32 var1 = 0, bool bvar = false, SpellInfo const* spell = nullptr, GameObject* gob = nullptr);
- 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);
+ void ProcessTimedAction(SmartScriptHolder& e, uint32 & min, uint32 & max, Unit* unit = nullptr, uint32 var0 = 0, uint32 var1 = 0, bool bvar = false, SpellInfo const* spell = nullptr, GameObject* gob = nullptr);
void GetTargets(ObjectVector& targets, SmartScriptHolder const& e, Unit* invoker = nullptr) const;
void GetWorldObjectsInDist(ObjectVector& objects, float dist) const;
void InstallTemplate(SmartScriptHolder const& e);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment