From 356bbb882386eefc5fae2e8940f29622d2af8f49 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Mon, 29 Nov 2021 17:27:43 -0500 Subject: [PATCH] Core/Objects: use the actual collision height of players and creatures to get more accurate liquid status results Port From (https://github.com/TrinityCore/TrinityCore/commit/d5daa2ad49a5a5d23ec4fae7508998ff9b1b6ad1) --- Source/Game/Entities/Creature/Creature.cs | 8 +++++++- Source/Game/Entities/Object/WorldObject.cs | 2 +- Source/Game/Entities/Player/Player.cs | 3 +-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index 14c98a4eb..4a830345b 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -823,7 +823,13 @@ namespace Game.Entities Log.outError(LogFilter.Unit, $"Creature.Create: given coordinates for creature (guidlow {guidlow}, entry {entry}) are not valid ({pos})"); return false; } - UpdatePositionData(); + + { + // area/zone id is needed immediately for ZoneScript::GetCreatureEntry hook before it is known which creature template to load (no model/scale available yet) + PositionFullTerrainStatus positionData = new(); + GetMap().GetFullTerrainStatusForPosition(GetPhaseShift(), GetPositionX(), GetPositionY(), GetPositionZ(), positionData, LiquidHeaderTypeFlags.AllLiquids, MapConst.DefaultCollesionHeight); + ProcessPositionDataChanged(positionData); + } // Allow players to see those units while dead, do it here (mayby altered by addon auras) if (cinfo.TypeFlags.HasAnyFlag(CreatureTypeFlags.GhostVisible)) diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs index 7880404de..42a9bafe0 100644 --- a/Source/Game/Entities/Object/WorldObject.cs +++ b/Source/Game/Entities/Object/WorldObject.cs @@ -115,7 +115,7 @@ namespace Game.Entities public void UpdatePositionData() { PositionFullTerrainStatus data = new(); - GetMap().GetFullTerrainStatusForPosition(_phaseShift, GetPositionX(), GetPositionY(), GetPositionZ(), data, LiquidHeaderTypeFlags.AllLiquids); + GetMap().GetFullTerrainStatusForPosition(_phaseShift, GetPositionX(), GetPositionY(), GetPositionZ(), data, LiquidHeaderTypeFlags.AllLiquids, GetCollisionHeight()); ProcessPositionDataChanged(data); } diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 926507c51..15a181466 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -213,8 +213,6 @@ namespace Game.Entities } } - UpdatePositionData(); - // set initial homebind position SetHomebind(this, GetAreaId()); @@ -236,6 +234,7 @@ namespace Game.Entities SetGender(createInfo.Sex); SetPowerType(powertype); InitDisplayIds(); + UpdatePositionData(); if ((RealmType)WorldConfig.GetIntValue(WorldCfg.GameType) == RealmType.PVP || (RealmType)WorldConfig.GetIntValue(WorldCfg.GameType) == RealmType.RPPVP) { AddPvpFlag(UnitPVPStateFlags.PvP);