Core/Maps: Made instance_template no longer required to create and enter instance maps

Port From (https://github.com/TrinityCore/TrinityCore/commit/b8e52fd90bdab6e720d13e44c64483945e139fa2)
This commit is contained in:
hondacrx
2022-07-18 21:41:50 -04:00
parent cef479fd69
commit cee989c731
7 changed files with 13 additions and 44 deletions
+6 -11
View File
@@ -5294,7 +5294,7 @@ namespace Game
{
uint mapID = result.Read<uint>(0);
if (!Global.MapMgr.IsValidMAP(mapID, true))
if (!Global.MapMgr.IsValidMAP(mapID))
{
Log.outError(LogFilter.Sql, "ObjectMgr.LoadInstanceTemplate: bad mapid {0} for template!", mapID);
continue;
@@ -10549,8 +10549,7 @@ namespace Game
}
public AreaTriggerStruct GetGoBackTrigger(uint Map)
{
bool useParentDbValue = false;
uint parentId = 0;
uint? parentId = null;
MapRecord mapEntry = CliDB.MapStorage.LookupByKey(Map);
if (mapEntry == null || mapEntry.CorpseMapID < 0)
return null;
@@ -10558,18 +10557,14 @@ namespace Game
if (mapEntry.IsDungeon())
{
InstanceTemplate iTemplate = GetInstanceTemplate(Map);
if (iTemplate == null)
return null;
parentId = iTemplate.Parent;
useParentDbValue = true;
if (iTemplate != null)
parentId = iTemplate.Parent;
}
uint entrance_map = (uint)mapEntry.CorpseMapID;
uint entrance_map = parentId.GetValueOrDefault((uint)mapEntry.CorpseMapID);
foreach (var pair in _areaTriggerStorage)
{
if ((!useParentDbValue && pair.Value.target_mapId == entrance_map) || (useParentDbValue && pair.Value.target_mapId == parentId))
if (pair.Value.target_mapId == entrance_map)
{
AreaTriggerRecord atEntry = CliDB.AreaTriggerStorage.LookupByKey(pair.Key);
if (atEntry != null && atEntry.ContinentID == Map)
+2 -3
View File
@@ -248,10 +248,9 @@ namespace Game
// get the destination map entry, not the current one, this will fix homebind and reset greeting
MapRecord mapEntry = CliDB.MapStorage.LookupByKey(loc.GetMapId());
InstanceTemplate mInstance = Global.ObjectMgr.GetInstanceTemplate(loc.GetMapId());
// reset instance validity, except if going to an instance inside an instance
if (!player.m_InstanceValid && mInstance == null)
if (!player.m_InstanceValid && !mapEntry.IsDungeon())
player.m_InstanceValid = true;
Map oldMap = player.GetMap();
@@ -375,7 +374,7 @@ namespace Game
}
}
if (mInstance != null)
if (mapEntry.IsDungeon())
{
// check if this instance has a reset time and send it to player if so
Difficulty diff = newMap.GetDifficultyID();
+3 -3
View File
@@ -45,17 +45,17 @@ namespace Game.Maps
public static bool IsValidMapCoord(uint mapid, float x, float y)
{
return Global.MapMgr.IsValidMAP(mapid, false) && IsValidMapCoord(x, y);
return Global.MapMgr.IsValidMAP(mapid) && IsValidMapCoord(x, y);
}
public static bool IsValidMapCoord(uint mapid, float x, float y, float z)
{
return Global.MapMgr.IsValidMAP(mapid, false) && IsValidMapCoord(x, y, z);
return Global.MapMgr.IsValidMAP(mapid) && IsValidMapCoord(x, y, z);
}
public static bool IsValidMapCoord(uint mapid, float x, float y, float z, float o)
{
return Global.MapMgr.IsValidMAP(mapid, false) && IsValidMapCoord(x, y, z, o);
return Global.MapMgr.IsValidMAP(mapid) && IsValidMapCoord(x, y, z, o);
}
public static bool IsValidMapCoord(uint mapid, Position pos)
@@ -696,11 +696,6 @@ namespace Game.Maps
return GetResetTime();
}
InstanceTemplate GetTemplate()
{
return Global.ObjectMgr.GetInstanceTemplate(m_mapid);
}
MapRecord GetMapEntry()
{
return CliDB.MapStorage.LookupByKey(m_mapid);
@@ -184,12 +184,6 @@ namespace Game.Maps
Log.outError(LogFilter.Maps, "CreateInstance: no record for map {0}", GetId());
Cypher.Assert(false);
}
InstanceTemplate iTemplate = Global.ObjectMgr.GetInstanceTemplate(GetId());
if (iTemplate == null)
{
Log.outError(LogFilter.Maps, "CreateInstance: no instance template for map {0}", GetId());
Cypher.Assert(false);
}
// some instances only have one difficulty
Global.DB2Mgr.GetDownscaledMapDifficultyData(GetId(), ref difficulty);
+2 -13
View File
@@ -140,10 +140,6 @@ namespace Game.Entities
if (!entry.IsDungeon())
return EnterState.CanEnter;
InstanceTemplate instance = Global.ObjectMgr.GetInstanceTemplate(mapid);
if (instance == null)
return EnterState.CannotEnterUninstancedDungeon;
Difficulty targetDifficulty = player.GetDifficultyID(entry);
// Get the highest available difficulty if current setting is higher than the instance allows
MapDifficultyRecord mapDiff = Global.DB2Mgr.GetDownscaledMapDifficultyData(entry.Id, ref targetDifficulty);
@@ -254,16 +250,9 @@ namespace Game.Entities
return Map.ExistMap(mapid, gx, gy) && Map.ExistVMap(mapid, gx, gy);
}
public bool IsValidMAP(uint mapid, bool startUp)
public bool IsValidMAP(uint mapId)
{
MapRecord mEntry = CliDB.MapStorage.LookupByKey(mapid);
if (startUp)
return mEntry != null;
else
return mEntry != null && (!mEntry.IsDungeon() || Global.ObjectMgr.GetInstanceTemplate(mapid) != null);
// TODO: add check for Battlegroundtemplate
return CliDB.MapStorage.ContainsKey(mapId);
}
public void UnloadAll()
-3
View File
@@ -5435,9 +5435,6 @@ namespace Game.Spells
return SpellCastResult.TargetLockedToRaidInstance;
}
}
InstanceTemplate instance = Global.ObjectMgr.GetInstanceTemplate(mapId);
if (instance == null)
return SpellCastResult.TargetNotInInstance;
if (!target.Satisfy(Global.ObjectMgr.GetAccessRequirement(mapId, difficulty), mapId))
return SpellCastResult.BadTargets;
}