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)
This commit is contained in:
hondacrx
2021-11-29 17:27:43 -05:00
parent 2079cd1094
commit 356bbb8823
3 changed files with 9 additions and 4 deletions
+7 -1
View File
@@ -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))
+1 -1
View File
@@ -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);
}
+1 -2
View File
@@ -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);