Core/Movement: Allow using run when moving randomly

Port From (https://github.com/TrinityCore/TrinityCore/commit/a57ca5cea2d13bc5d5ddee11e7b8100c7afd68e1)
This commit is contained in:
hondacrx
2021-11-29 14:21:33 -05:00
parent f218b72620
commit 8fbecac008
6 changed files with 59 additions and 22 deletions
@@ -353,6 +353,7 @@ namespace Game.Entities
public bool Swim;
public bool Rooted;
public CreatureChaseMovementType Chase;
public CreatureRandomMovementType Random;
public CreatureMovementData()
{
@@ -368,10 +369,11 @@ namespace Game.Entities
public bool IsRooted() { return Rooted; }
public CreatureChaseMovementType GetChase() { return Chase; }
public CreatureRandomMovementType GetRandom() { return Random; }
public override string ToString()
{
return $"Ground: {Ground}, Swim: {Swim}, Flight: {Flight} {(Rooted ? ", Rooted" : "")}, Chase: {Chase}";
return $"Ground: {Ground}, Swim: {Swim}, Flight: {Flight} {(Rooted ? ", Rooted" : "")}, Chase: {Chase}, Random: {Random}";
}
}
+29 -19
View File
@@ -1832,24 +1832,27 @@ namespace Game
if (!fields.IsNull(64))
creature.Movement.Chase = (CreatureChaseMovementType)fields.Read<byte>(64);
creature.HoverHeight = fields.Read<float>(65);
creature.ModHealth = fields.Read<float>(66);
creature.ModHealthExtra = fields.Read<float>(67);
creature.ModMana = fields.Read<float>(68);
creature.ModManaExtra = fields.Read<float>(69);
creature.ModArmor = fields.Read<float>(70);
creature.ModDamage = fields.Read<float>(71);
creature.ModExperience = fields.Read<float>(72);
creature.RacialLeader = fields.Read<bool>(73);
creature.MovementId = fields.Read<uint>(74);
creature.CreatureDifficultyID = fields.Read<int>(75);
creature.WidgetSetID = fields.Read<int>(76);
creature.WidgetSetUnitConditionID = fields.Read<int>(77);
creature.RegenHealth = fields.Read<bool>(78);
creature.MechanicImmuneMask = fields.Read<uint>(79);
creature.SpellSchoolImmuneMask = fields.Read<uint>(80);
creature.FlagsExtra = (CreatureFlagsExtra)fields.Read<uint>(81);
creature.ScriptID = GetScriptId(fields.Read<string>(82));
if (!fields.IsNull(65))
creature.Movement.Random = (CreatureRandomMovementType)fields.Read<byte>(65);
creature.HoverHeight = fields.Read<float>(66);
creature.ModHealth = fields.Read<float>(67);
creature.ModHealthExtra = fields.Read<float>(68);
creature.ModMana = fields.Read<float>(69);
creature.ModManaExtra = fields.Read<float>(70);
creature.ModArmor = fields.Read<float>(71);
creature.ModDamage = fields.Read<float>(72);
creature.ModExperience = fields.Read<float>(73);
creature.RacialLeader = fields.Read<bool>(74);
creature.MovementId = fields.Read<uint>(75);
creature.CreatureDifficultyID = fields.Read<int>(76);
creature.WidgetSetID = fields.Read<int>(77);
creature.WidgetSetUnitConditionID = fields.Read<int>(78);
creature.RegenHealth = fields.Read<bool>(79);
creature.MechanicImmuneMask = fields.Read<uint>(80);
creature.SpellSchoolImmuneMask = fields.Read<uint>(81);
creature.FlagsExtra = (CreatureFlagsExtra)fields.Read<uint>(82);
creature.ScriptID = GetScriptId(fields.Read<string>(83));
creatureTemplateStorage[entry] = creature;
}
@@ -2252,7 +2255,7 @@ namespace Game
creatureMovementOverrides.Clear();
SQLResult result = DB.World.Query("SELECT SpawnId, Ground, Swim, Flight, Rooted, Chase from creature_movement_override");
SQLResult result = DB.World.Query("SELECT SpawnId, Ground, Swim, Flight, Rooted, Chase, Random from creature_movement_override");
if (result.IsEmpty())
{
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 creature movement overrides. DB table `creature_movement_override` is empty!");
@@ -2274,6 +2277,7 @@ namespace Game
movement.Flight = (CreatureFlightMovementType)result.Read<byte>(3);
movement.Rooted = result.Read<bool>(4);
movement.Chase = (CreatureChaseMovementType)result.Read<byte>(5);
movement.Random = (CreatureRandomMovementType)result.Read<byte>(6);
CheckCreatureMovement("creature_movement_override", spawnId, movement);
@@ -2750,6 +2754,12 @@ namespace Game
Log.outError(LogFilter.Sql, $"`{table}`.`Chase` wrong value ({creatureMovement.Chase}) for Id {id}, setting to Run.");
creatureMovement.Chase = CreatureChaseMovementType.Run;
}
if (creatureMovement.Random >= CreatureRandomMovementType.Max)
{
Log.outError(LogFilter.Sql, $"`{table}`.`Random` wrong value ({creatureMovement.Random}) for Id {id}, setting to Walk.");
creatureMovement.Random = CreatureRandomMovementType.Walk;
}
}
public void LoadLinkedRespawn()
{
@@ -138,9 +138,22 @@ namespace Game.Movement
owner.AddUnitState(UnitState.RoamingMove);
bool walk = true;
switch (owner.GetMovementTemplate().GetRandom())
{
case CreatureRandomMovementType.CanRun:
walk = owner.IsWalking();
break;
case CreatureRandomMovementType.AlwaysRun:
walk = false;
break;
default:
break;
}
MoveSplineInit init = new(owner);
init.MovebyPath(_path.GetPath());
init.SetWalk(true);
init.SetWalk(walk);
int traveltime = init.Launch();
_timer.Reset(traveltime + resetTimer);