Scripts/World: update guard scripts
Port From (https://github.com/TrinityCore/TrinityCore/commit/92026abee10325beedede84b07d5154a5a995b52)
This commit is contained in:
@@ -58,9 +58,7 @@ namespace Game.AI
|
|||||||
me.GetThreatManager().ClearAllThreat();
|
me.GetThreatManager().ClearAllThreat();
|
||||||
me.CombatStop(true);
|
me.CombatStop(true);
|
||||||
|
|
||||||
// Remove ChaseMovementGenerator from MotionMaster stack list, and add HomeMovementGenerator instead
|
me.GetMotionMaster().MoveTargetedHome();
|
||||||
if (me.GetMotionMaster().GetCurrentMovementGeneratorType() == MovementGeneratorType.Chase)
|
|
||||||
me.GetMotionMaster().MoveTargetedHome();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void JustDied(Unit killer)
|
public override void JustDied(Unit killer)
|
||||||
|
|||||||
@@ -1941,104 +1941,6 @@ namespace Game.Entities
|
|||||||
return Convert.ToBoolean(GetCreatureTemplate().TypeFlags & CreatureTypeFlags.BossMob);
|
return Convert.ToBoolean(GetCreatureTemplate().TypeFlags & CreatureTypeFlags.BossMob);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SpellInfo ReachWithSpellAttack(Unit victim)
|
|
||||||
{
|
|
||||||
if (victim == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
for (uint i = 0; i < SharedConst.MaxCreatureSpells; ++i)
|
|
||||||
{
|
|
||||||
if (m_spells[i] == 0)
|
|
||||||
continue;
|
|
||||||
SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(m_spells[i], GetMap().GetDifficultyID());
|
|
||||||
if (spellInfo == null)
|
|
||||||
{
|
|
||||||
Log.outError(LogFilter.Unit, "WORLD: unknown spell id {0}", m_spells[i]);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool bcontinue = true;
|
|
||||||
foreach (SpellEffectInfo effect in spellInfo.GetEffects())
|
|
||||||
{
|
|
||||||
if (effect != null && ((effect.Effect == SpellEffectName.SchoolDamage) || (effect.Effect == SpellEffectName.Instakill)
|
|
||||||
|| (effect.Effect == SpellEffectName.EnvironmentalDamage) || (effect.Effect == SpellEffectName.HealthLeech)))
|
|
||||||
{
|
|
||||||
bcontinue = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (bcontinue)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
var costs = spellInfo.CalcPowerCost(this, spellInfo.SchoolMask);
|
|
||||||
var m = costs.Find(cost => cost.Power == PowerType.Mana);
|
|
||||||
if (m != null)
|
|
||||||
if (m.Amount > GetPower(PowerType.Mana))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
float range = spellInfo.GetMaxRange(false);
|
|
||||||
float minrange = spellInfo.GetMinRange(false);
|
|
||||||
float dist = GetDistance(victim);
|
|
||||||
if (dist > range || dist < minrange)
|
|
||||||
continue;
|
|
||||||
if (spellInfo.PreventionType.HasAnyFlag(SpellPreventionType.Silence) && HasUnitFlag(UnitFlags.Silenced))
|
|
||||||
continue;
|
|
||||||
if (spellInfo.PreventionType.HasAnyFlag(SpellPreventionType.Pacify) && HasUnitFlag(UnitFlags.Pacified))
|
|
||||||
continue;
|
|
||||||
return spellInfo;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
SpellInfo ReachWithSpellCure(Unit victim)
|
|
||||||
{
|
|
||||||
if (victim == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
for (uint i = 0; i < SharedConst.MaxCreatureSpells; ++i)
|
|
||||||
{
|
|
||||||
if (m_spells[i] == 0)
|
|
||||||
continue;
|
|
||||||
SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(m_spells[i], GetMap().GetDifficultyID());
|
|
||||||
if (spellInfo == null)
|
|
||||||
{
|
|
||||||
Log.outError(LogFilter.Unit, "WORLD: unknown spell id {0}", m_spells[i]);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool bcontinue = true;
|
|
||||||
foreach (SpellEffectInfo effect in spellInfo.GetEffects())
|
|
||||||
{
|
|
||||||
if (effect != null && effect.Effect == SpellEffectName.Heal)
|
|
||||||
{
|
|
||||||
bcontinue = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (bcontinue)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
var costs = spellInfo.CalcPowerCost(this, spellInfo.SchoolMask);
|
|
||||||
var m = costs.Find(cost => cost.Power == PowerType.Mana);
|
|
||||||
if (m != null)
|
|
||||||
if (m.Amount > GetPower(PowerType.Mana))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
float range = spellInfo.GetMaxRange(true);
|
|
||||||
float minrange = spellInfo.GetMinRange(true);
|
|
||||||
float dist = GetDistance(victim);
|
|
||||||
|
|
||||||
if (dist > range || dist < minrange)
|
|
||||||
continue;
|
|
||||||
if (spellInfo.PreventionType.HasAnyFlag(SpellPreventionType.Silence) && HasUnitFlag(UnitFlags.Silenced))
|
|
||||||
continue;
|
|
||||||
if (spellInfo.PreventionType.HasAnyFlag(SpellPreventionType.Pacify) && HasUnitFlag(UnitFlags.Pacified))
|
|
||||||
continue;
|
|
||||||
return spellInfo;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// select nearest hostile unit within the given distance (regardless of threat list).
|
// select nearest hostile unit within the given distance (regardless of threat list).
|
||||||
public Unit SelectNearestTarget(float dist = 0)
|
public Unit SelectNearestTarget(float dist = 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
UPDATE `creature_template` SET `ScriptName` = 'npc_guard_generic' WHERE `ScriptName` = 'guard_generic';
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'npc_guard_shattrath_faction' WHERE `ScriptName` IN ('guard_shattrath_scryer', 'guard_shattrath_aldor');
|
||||||
Reference in New Issue
Block a user