From 0f655d09ca34831e384bf0cb68f9ebca5a050470 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Thu, 23 Jun 2022 15:55:45 -0400 Subject: [PATCH] Core/VMaps: Fixes getting no area/zone info, which caused you to be dismounted. --- Source/Framework/Util/Extensions.cs | 2 +- Source/Framework/Util/MathFunctions.cs | 4 ++-- .../Collision/BoundingIntervalHierarchyWrap.cs | 2 +- Source/Game/Collision/Callbacks.cs | 3 +-- Source/Game/Collision/Management/VMapManager.cs | 14 +++++++------- Source/Game/Globals/ObjectManager.cs | 4 ++-- Source/Game/Maps/GridMap.cs | 4 ++-- 7 files changed, 16 insertions(+), 17 deletions(-) diff --git a/Source/Framework/Util/Extensions.cs b/Source/Framework/Util/Extensions.cs index 614ec3f12..6be005f92 100644 --- a/Source/Framework/Util/Extensions.cs +++ b/Source/Framework/Util/Extensions.cs @@ -292,7 +292,7 @@ namespace System public static Matrix4x4 fromEulerAnglesZYX(float fYAngle, float fPAngle, float fRAngle) { - return Matrix4x4.CreateFromYawPitchRoll(fPAngle, fRAngle, fYAngle); + return Matrix4x4.CreateFromYawPitchRoll(fYAngle, fPAngle, fRAngle); } #region Strings diff --git a/Source/Framework/Util/MathFunctions.cs b/Source/Framework/Util/MathFunctions.cs index d6e10d8c4..bd3191da6 100644 --- a/Source/Framework/Util/MathFunctions.cs +++ b/Source/Framework/Util/MathFunctions.cs @@ -85,9 +85,9 @@ public static class MathFunctions { float aa = Math.Abs(a) + 1.0f; if (float.IsPositiveInfinity(aa)) - return 0.00001f; + return 0.0000005f; - return 0.00001f * aa; + return 0.0000005f * aa; } public static float lerp(float a, float b, float f) diff --git a/Source/Game/Collision/BoundingIntervalHierarchyWrap.cs b/Source/Game/Collision/BoundingIntervalHierarchyWrap.cs index 55f7a8ae9..3418a3ac6 100644 --- a/Source/Game/Collision/BoundingIntervalHierarchyWrap.cs +++ b/Source/Game/Collision/BoundingIntervalHierarchyWrap.cs @@ -104,7 +104,7 @@ namespace Game.Collision T obj = objects[idx]; if (obj != null) - _callback.Invoke(p, obj); + _callback.Invoke(p, obj as GameObjectModel); } } } diff --git a/Source/Game/Collision/Callbacks.cs b/Source/Game/Collision/Callbacks.cs index e2c060967..f84929f23 100644 --- a/Source/Game/Collision/Callbacks.cs +++ b/Source/Game/Collision/Callbacks.cs @@ -26,7 +26,6 @@ namespace Game.Collision public class WorkerCallback { public virtual void Invoke(Vector3 point, uint entry) { } - public virtual void Invoke(Vector3 point, IModel entry) { } public virtual void Invoke(Vector3 point, GameObjectModel obj) { } public virtual bool Invoke(Ray ray, uint entry, ref float distance, bool pStopAtFirstHit) { return false; } public virtual bool Invoke(Ray r, IModel obj, ref float distance) { return false; } @@ -255,7 +254,7 @@ namespace Game.Collision _areaInfo = new AreaInfo(); } - public override void Invoke(Vector3 p, IModel obj) + public override void Invoke(Vector3 p, GameObjectModel obj) { obj.IntersectPoint(p, _areaInfo, _phaseShift); } diff --git a/Source/Game/Collision/Management/VMapManager.cs b/Source/Game/Collision/Management/VMapManager.cs index 08a077849..4fe1e6edc 100644 --- a/Source/Game/Collision/Management/VMapManager.cs +++ b/Source/Game/Collision/Management/VMapManager.cs @@ -143,7 +143,7 @@ namespace Game.Collision public bool IsInLineOfSight(uint mapId, float x1, float y1, float z1, float x2, float y2, float z2, ModelIgnoreFlags ignoreFlags) { - if (!IsLineOfSightCalcEnabled() || Global.DisableMgr.IsDisabledFor(DisableType.VMAP, mapId, null, (byte)DisableFlags.VmapLOS)) + if (!IsLineOfSightCalcEnabled() || Global.DisableMgr.IsVMAPDisabledFor(mapId, (byte)DisableFlags.VmapLOS)) return true; var instanceTree = iInstanceMapTrees.LookupByKey(mapId); @@ -160,7 +160,7 @@ namespace Game.Collision public bool GetObjectHitPos(uint mapId, float x1, float y1, float z1, float x2, float y2, float z2, out float rx, out float ry, out float rz, float modifyDist) { - if (IsLineOfSightCalcEnabled() && !Global.DisableMgr.IsDisabledFor(DisableType.VMAP, mapId, null, (byte)DisableFlags.VmapLOS)) + if (IsLineOfSightCalcEnabled() && !Global.DisableMgr.IsVMAPDisabledFor(mapId, (byte)DisableFlags.VmapLOS)) { var instanceTree = iInstanceMapTrees.LookupByKey(mapId); if (instanceTree != null) @@ -186,7 +186,7 @@ namespace Game.Collision public float GetHeight(uint mapId, float x, float y, float z, float maxSearchDist) { - if (IsHeightCalcEnabled() && !Global.DisableMgr.IsDisabledFor(DisableType.VMAP, mapId, null, (byte)DisableFlags.VmapHeight)) + if (IsHeightCalcEnabled() && !Global.DisableMgr.IsVMAPDisabledFor(mapId, (byte)DisableFlags.VmapHeight)) { var instanceTree = iInstanceMapTrees.LookupByKey(mapId); if (instanceTree != null) @@ -209,7 +209,7 @@ namespace Game.Collision adtId = 0; rootId = 0; groupId = 0; - if (!Global.DisableMgr.IsDisabledFor(DisableType.VMAP, mapId, null, (byte)DisableFlags.VmapAreaFlag)) + if (!Global.DisableMgr.IsVMAPDisabledFor(mapId, (byte)DisableFlags.VmapAreaFlag)) { var instanceTree = iInstanceMapTrees.LookupByKey(mapId); if (instanceTree != null) @@ -227,7 +227,7 @@ namespace Game.Collision public bool GetLiquidLevel(uint mapId, float x, float y, float z, uint reqLiquidType, ref float level, ref float floor, ref uint type, ref uint mogpFlags) { - if (!Global.DisableMgr.IsDisabledFor(DisableType.VMAP, mapId, null, (byte)DisableFlags.VmapLiquidStatus)) + if (!Global.DisableMgr.IsVMAPDisabledFor(mapId, (byte)DisableFlags.VmapLiquidStatus)) { var instanceTree = iInstanceMapTrees.LookupByKey(mapId); if (instanceTree != null) @@ -254,7 +254,7 @@ namespace Game.Collision { var data = new AreaAndLiquidData(); - if (!Global.DisableMgr.IsDisabledFor(DisableType.VMAP, mapId, null, (byte)DisableFlags.VmapLiquidStatus)) + if (Global.DisableMgr.IsVMAPDisabledFor(mapId, (byte)DisableFlags.VmapLiquidStatus)) { data.floorZ = z; int adtId, rootId, groupId; @@ -277,7 +277,7 @@ namespace Game.Collision if (info.hitInstance.GetLiquidLevel(pos, info, ref liquidLevel)) data.liquidInfo = new(liquidType, liquidLevel); - if (!Global.DisableMgr.IsDisabledFor(DisableType.VMAP, mapId, null, (byte)DisableFlags.VmapLiquidStatus)) + if (!Global.DisableMgr.IsVMAPDisabledFor(mapId, (byte)DisableFlags.VmapLiquidStatus)) data.areaInfo = new(info.hitInstance.adtId, info.rootId, (int)info.hitModel.GetWmoID(), info.hitModel.GetMogpFlags()); } } diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs index 0908f2e9f..fa80bbcdd 100644 --- a/Source/Game/Globals/ObjectManager.cs +++ b/Source/Game/Globals/ObjectManager.cs @@ -8333,7 +8333,7 @@ namespace Game TerrainSwapInfo terrainSwapInfo = _terrainSwapInfoById[terrainSwap]; terrainSwapInfo.Id = terrainSwap; - _terrainSwapInfoByMap[mapId].Add(terrainSwapInfo); + _terrainSwapInfoByMap.Add(mapId, terrainSwapInfo); ++count; } while (result.NextRow()); @@ -8379,7 +8379,7 @@ namespace Game PhaseInfoStruct phase = getOrCreatePhaseIfMissing(phaseId); phase.Areas.Add(area); - _phaseInfoByArea[area].Add(new PhaseAreaInfo(phase)); + _phaseInfoByArea.Add(area, new PhaseAreaInfo(phase)); ++count; } while (result.NextRow()); diff --git a/Source/Game/Maps/GridMap.cs b/Source/Game/Maps/GridMap.cs index 7952ff7f6..8ae3712ca 100644 --- a/Source/Game/Maps/GridMap.cs +++ b/Source/Game/Maps/GridMap.cs @@ -391,8 +391,8 @@ namespace Game.Maps if (m_uint16_V8 == null || m_uint16_V9 == null) return _gridHeight; - x = MapConst.MapResolution * (32 - x / MapConst.SizeofGrids); - y = MapConst.MapResolution * (32 - y / MapConst.SizeofGrids); + x = MapConst.MapResolution * (MapConst.CenterGridId - x / MapConst.SizeofGrids); + y = MapConst.MapResolution * (MapConst.CenterGridId - y / MapConst.SizeofGrids); int x_int = (int)x; int y_int = (int)y;