Core/Entities: unit states cleanup

Port From (https://github.com/TrinityCore/TrinityCore/commit/70c26d53cb94f0e78a57ecc2279c960370891aa4)
This commit is contained in:
hondacrx
2021-08-08 23:44:54 -04:00
parent 26a2eced6e
commit b039353f1a
5 changed files with 51 additions and 39 deletions
+25 -24
View File
@@ -1142,21 +1142,26 @@ namespace Game.Entities
return;
}
// Unit States might have been already cleared but auras still present. I need to check with HasAuraType
if (HasAuraType(AuraType.ModStun))
SetStunned(true);
if (HasAuraType(AuraType.ModRoot) || HasAuraType(AuraType.ModRoot2))
SetRooted(true);
if (HasAuraType(AuraType.ModConfuse))
SetConfused(true);
if (HasAuraType(AuraType.ModFear))
SetFeared(true);
ApplyControlStatesIfNeeded();
}
}
void ApplyControlStatesIfNeeded()
{
// Unit States might have been already cleared but auras still present. I need to check with HasAuraType
if (HasUnitState(UnitState.Stunned) || HasAuraType(AuraType.ModStun))
SetStunned(true);
if (HasUnitState(UnitState.Root) || HasAuraType(AuraType.ModRoot) || HasAuraType(AuraType.ModRoot2))
SetRooted(true);
if (HasUnitState(UnitState.Confused) || HasAuraType(AuraType.ModConfuse))
SetConfused(true);
if (HasUnitState(UnitState.Fleeing) || HasAuraType(AuraType.ModFear))
SetFeared(true);
}
void SetStunned(bool apply)
{
if (apply)
@@ -1250,13 +1255,11 @@ namespace Game.Entities
}
}
Player player = ToPlayer();
if (player)
// block / allow control to real player in control (eg charmer)
if (IsPlayer())
{
if (apply)
player.SetClientControl(this, false);
else if (!HasUnitState(UnitState.LostControl))
player.SetClientControl(this, true);
if (m_playerMovingMe)
m_playerMovingMe.SetClientControl(this, !apply);
}
}
@@ -1278,13 +1281,11 @@ namespace Game.Entities
}
}
Player player = ToPlayer();
if (player)
// block / allow control to real player in control (eg charmer)
if (IsPlayer())
{
if (apply)
player.SetClientControl(this, false);
else if (!HasUnitState(UnitState.LostControl))
player.SetClientControl(this, true);
if (m_playerMovingMe)
m_playerMovingMe.SetClientControl(this, !apply);
}
}
+7 -2
View File
@@ -441,6 +441,8 @@ namespace Game.Entities
break;
}
}
AddUnitState(UnitState.Charmed);
return true;
}
@@ -542,8 +544,7 @@ namespace Game.Entities
IsAIEnabled = false;
}
if (!HasUnitState(UnitState.LostControl))
player.SetClientControl(this, true);
player.SetClientControl(this, true);
}
EngageWithTarget(charmer);
@@ -553,6 +554,10 @@ namespace Game.Entities
playerCharmer.SendRemoveControlBar();
else if (IsTypeId(TypeId.Player) || (IsTypeId(TypeId.Unit) && !IsGuardian()))
DeleteCharmInfo();
// reset confused movement for example
ApplyControlStatesIfNeeded();
ClearUnitState(UnitState.Charmed);
}
public void GetAllMinionsByEntry(List<TempSummon> Minions, uint entry)