Refactored how zones work. Cleaned out a lot of duplciations and smoothed out how Zones/PrivateAreas work.

This commit is contained in:
Filip Maj
2022-02-05 14:05:32 -05:00
parent 56ba641e2a
commit 563118372a
32 changed files with 247 additions and 417 deletions

View File

@@ -34,8 +34,9 @@ namespace Meteor.Map.Actors
{
class Area : Actor
{
public string zoneName;
public ushort regionId;
public string ZoneName { get; private set; }
public uint ZoneId { get; private set; }
public ushort RegionId { get; private set; }
public bool isIsolated, canStealth, isInn, canRideChocobo, isInstanceRaid;
public ushort weatherNormal, weatherCommon, weatherRare;
public ushort bgmDay, bgmNight, bgmBattle;
@@ -62,9 +63,10 @@ namespace Meteor.Map.Actors
public Area(uint zoneId, string zoneName, ushort regionId, string classPath, ushort bgmDay, ushort bgmNight, ushort bgmBattle, bool isIsolated, bool isInn, bool canRideChocobo, bool canStealth, bool isInstanceRaid)
: base((4 << 28 | zoneId << 19 | ((uint)1)))
{
ZoneName = zoneName;
ZoneId = zoneId;
RegionId = regionId;
this.zoneName = zoneName;
this.regionId = regionId;
this.canStealth = canStealth;
this.isIsolated = isIsolated;
this.isInn = isInn;
@@ -81,7 +83,6 @@ namespace Meteor.Map.Actors
this.classPath = classPath;
this.className = classPath.Substring(classPath.LastIndexOf("/") + 1);
this.zoneId = zoneId;
numXBlocks = (maxX - minX) / boundingGridSize;
numYBlocks = (maxY - minY) / boundingGridSize;
@@ -98,10 +99,20 @@ namespace Meteor.Map.Actors
}
}
public virtual string GetPrivateAreaName()
{
return "";
}
public virtual int GetPrivateAreaType()
{
return 0;
}
public override SubPacket CreateScriptBindPacket()
{
List<LuaParam> lParams;
lParams = LuaUtils.CreateLuaParamList(classPath, false, true, zoneName, "/Area/Zone/ZoneDefault", -1, (byte)1, true, false, false, false, false, false, false, false);
lParams = LuaUtils.CreateLuaParamList(classPath, false, true, ZoneName, "/Area/Zone/ZoneDefault", -1, (byte)1, true, false, false, false, false, false, false, false);
return ActorInstantiatePacket.BuildPacket(actorId, actorName, "ZoneDefault", lParams);
}

View File

@@ -30,32 +30,31 @@ namespace Meteor.Map.actors.area
{
class PrivateArea : Area
{
private Zone parentZone;
private string privateAreaName;
private new uint privateAreaType;
private readonly Zone ParentZone;
private readonly string PrivateAreaName;
private readonly int PrivateAreaType;
public PrivateArea(Zone parent, string classPath, string privateAreaName, uint privateAreaType, ushort bgmDay, ushort bgmNight, ushort bgmBattle)
: base(parent.zoneId, parent.zoneName, parent.regionId, classPath, bgmDay, bgmNight, bgmBattle, parent.isIsolated, parent.isInn, parent.canRideChocobo, parent.canStealth, true)
public PrivateArea(Zone parent, string classPath, string privateAreaName, int privateAreaType, ushort bgmDay, ushort bgmNight, ushort bgmBattle)
: base(parent.ZoneId, parent.ZoneName, parent.RegionId, classPath, bgmDay, bgmNight, bgmBattle, parent.isIsolated, parent.isInn, parent.canRideChocobo, parent.canStealth, true)
{
this.parentZone = parent;
this.zoneName = parent.zoneName;
this.privateAreaName = privateAreaName;
this.privateAreaType = privateAreaType;
this.ParentZone = parent;
this.PrivateAreaName = privateAreaName;
this.PrivateAreaType = privateAreaType;
}
public string GetPrivateAreaName()
public override string GetPrivateAreaName()
{
return privateAreaName;
return PrivateAreaName;
}
public uint GetPrivateAreaType()
public override int GetPrivateAreaType()
{
return privateAreaType;
return PrivateAreaType;
}
public Zone GetParentZone()
{
return parentZone;
return ParentZone;
}
public override SubPacket CreateScriptBindPacket()
@@ -66,7 +65,7 @@ namespace Meteor.Map.actors.area
string realClassName = className.Substring(className.LastIndexOf("/") + 1);
lParams = LuaUtils.CreateLuaParamList(classPath, false, true, zoneName, privateAreaName, privateAreaType, canRideChocobo ? (byte)1 : (byte)0, canStealth, isInn, false, false, false, false, false, false);
lParams = LuaUtils.CreateLuaParamList(classPath, false, true, ZoneName, PrivateAreaName, PrivateAreaType, canRideChocobo ? (byte)1 : (byte)0, canStealth, isInn, false, false, false, false, false, false);
ActorInstantiatePacket.BuildPacket(actorId, actorName, realClassName, lParams).DebugPrintSubPacket();
return ActorInstantiatePacket.BuildPacket(actorId, actorName, realClassName, lParams);
}

View File

@@ -37,7 +37,7 @@ namespace Meteor.Map.actors.area
return null;
}
public PrivateAreaContent(Zone parent, string classPath, string privateAreaName, uint privateAreaType, Director director, Player contentStarter) //TODO: Make it a list
public PrivateAreaContent(Zone parent, string classPath, string privateAreaName, int privateAreaType, Director director, Player contentStarter) //TODO: Make it a list
: base(parent, classPath, privateAreaName, privateAreaType, 0, 0, 0)
{
currentDirector = director;

View File

@@ -27,7 +27,7 @@ namespace Meteor.Map.actors.area
public string uniqueId;
public uint zoneId;
public string privAreaName;
public uint privAreaLevel;
public int privAreaLevel;
public float x;
public float y;
public float z;
@@ -35,7 +35,7 @@ namespace Meteor.Map.actors.area
public ushort state;
public uint animId;
public SpawnLocation(uint classId, string uniqueId, uint zoneId, string privAreaName, uint privAreaLevel, float x, float y, float z, float rot, ushort state, uint animId)
public SpawnLocation(uint classId, string uniqueId, uint zoneId, string privAreaName, int privAreaLevel, float x, float y, float z, float rot, ushort state, uint animId)
{
this.classId = classId;
this.uniqueId = uniqueId;

View File

@@ -31,7 +31,7 @@ namespace Meteor.Map.actors.area
{
class Zone : Area
{
Dictionary<string, Dictionary<uint, PrivateArea>> privateAreas = new Dictionary<string, Dictionary<uint, PrivateArea>>();
Dictionary<string, Dictionary<int, PrivateArea>> privateAreas = new Dictionary<string, Dictionary<int, PrivateArea>>();
Dictionary<string, List<PrivateAreaContent>> contentAreas = new Dictionary<string, List<PrivateAreaContent>>();
Object contentAreasLock = new Object();
@@ -68,18 +68,20 @@ namespace Meteor.Map.actors.area
privateAreas[pa.GetPrivateAreaName()][pa.GetPrivateAreaType()] = pa;
else
{
privateAreas[pa.GetPrivateAreaName()] = new Dictionary<uint, PrivateArea>();
privateAreas[pa.GetPrivateAreaName()][pa.GetPrivateAreaType()] = pa;
privateAreas[pa.GetPrivateAreaName()] = new Dictionary<int, PrivateArea>
{
[pa.GetPrivateAreaType()] = pa
};
}
}
public PrivateArea GetPrivateArea(string type, uint number)
public PrivateArea GetPrivateArea(string name, int type)
{
if (privateAreas.ContainsKey(type))
if (privateAreas.ContainsKey(name))
{
Dictionary<uint, PrivateArea> instances = privateAreas[type];
if (instances.ContainsKey(number))
return instances[number];
Dictionary<int, PrivateArea> instances = privateAreas[name];
if (instances.ContainsKey(type))
return instances[type];
else
return null;
}
@@ -92,7 +94,7 @@ namespace Meteor.Map.actors.area
bool isEntranceDesion = false;
List<LuaParam> lParams;
lParams = LuaUtils.CreateLuaParamList(classPath, false, true, zoneName, "", -1, canRideChocobo ? (byte)1 : (byte)0, canStealth, isInn, false, false, false, true, isInstanceRaid, isEntranceDesion);
lParams = LuaUtils.CreateLuaParamList(classPath, false, true, ZoneName, "", -1, canRideChocobo ? (byte)1 : (byte)0, canStealth, isInn, false, false, false, true, isInstanceRaid, isEntranceDesion);
return ActorInstantiatePacket.BuildPacket(actorId, actorName, className, lParams);
}
@@ -103,14 +105,14 @@ namespace Meteor.Map.actors.area
{
if (privateAreas.ContainsKey(spawn.privAreaName))
{
Dictionary<uint, PrivateArea> levels = privateAreas[spawn.privAreaName];
Dictionary<int, PrivateArea> levels = privateAreas[spawn.privAreaName];
if (levels.ContainsKey(spawn.privAreaLevel))
levels[spawn.privAreaLevel].AddSpawnLocation(spawn);
else
Program.Log.Error("Tried to add a spawn location to non-existing private area level \"{0}\" in area {1} in zone {2}", spawn.privAreaName, spawn.privAreaLevel, zoneName);
Program.Log.Error("Tried to add a spawn location to non-existing private area level \"{0}\" in area {1} in zone {2}", spawn.privAreaName, spawn.privAreaLevel, ZoneName);
}
else
Program.Log.Error("Tried to add a spawn location to non-existing private area \"{0}\" in zone {1}", spawn.privAreaName, zoneName);
Program.Log.Error("Tried to add a spawn location to non-existing private area \"{0}\" in zone {1}", spawn.privAreaName, ZoneName);
}
else
mSpawnLocations.Add(spawn);
@@ -123,7 +125,7 @@ namespace Meteor.Map.actors.area
if (doPrivAreas)
{
foreach (Dictionary<uint, PrivateArea> areas in privateAreas.Values)
foreach (var areas in privateAreas.Values)
{
foreach (PrivateArea pa in areas.Values)
pa.SpawnAllActors();
@@ -137,7 +139,7 @@ namespace Meteor.Map.actors.area
{
if (!mActorList.ContainsKey(id))
{
foreach (Dictionary<uint, PrivateArea> paList in privateAreas.Values)
foreach (var paList in privateAreas.Values)
{
foreach (PrivateArea pa in paList.Values)
{