Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Maple2.Database/Storage/Metadata/MapEntityStorage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class MapEntityStorage(MetadataContext context) : MetadataStorage<string,
var liftableTargetBoxes = new Dictionary<Vector3B, LiftableTargetBox>();
var objectWeapons = new Dictionary<Vector3B, ObjectWeapon>();
var portals = new Dictionary<int, Portal>();
var playerSpawns = new Dictionary<int, SpawnPointPC>();
var playerSpawns = new List<SpawnPointPC>();
var npcSpawns = new List<SpawnPointNPC>();
var regionSpawns = new Dictionary<int, Ms2RegionSpawn>();
var regionSkills = new List<Ms2RegionSkill>();
Expand Down Expand Up @@ -72,7 +72,7 @@ public class MapEntityStorage(MetadataContext context) : MetadataStorage<string,
regionSkills.Add(regionSkill);
break;
case SpawnPointPC playerSpawn:
playerSpawns[playerSpawn.SpawnPointId] = playerSpawn;
playerSpawns.Add(playerSpawn);
break;
case SpawnPointNPC npcSpawn:
if (npcSpawn is EventSpawnPointNPC eventNpcSpawn) {
Expand Down
2 changes: 1 addition & 1 deletion Maple2.Model/Metadata/MapEntityMetadata.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class MapEntityMetadata {
public required IReadOnlyDictionary<Vector3B, LiftableTargetBox> LiftableTargetBoxes { get; init; }
public required IReadOnlyDictionary<Vector3B, ObjectWeapon> ObjectWeapons { get; init; }
public required IReadOnlyDictionary<int, Portal> Portals { get; init; }
public required IReadOnlyDictionary<int, SpawnPointPC> PlayerSpawns { get; init; }
public required IReadOnlyList<SpawnPointPC> PlayerSpawns { get; init; }
public required IReadOnlyList<SpawnPointNPC> NpcSpawns { get; init; }
public required IReadOnlyDictionary<int, Ms2RegionSpawn> RegionSpawns { get; init; }
public required IReadOnlyList<Ms2RegionSkill> RegionSkills { get; init; }
Expand Down
8 changes: 3 additions & 5 deletions Maple2.Server.Game/Commands/FieldCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,9 @@ private void Handle(InvocationContext ctx) {
ctx.Console.Out.WriteLine($"No xblock data found for map: {session.Field.MapId}");
return;
}

foreach ((int id, SpawnPointPC spawnPoint) in mapEntityMetadata.PlayerSpawns) {
if (session.Field.TryGetPlayerSpawn(id, out FieldPlayerSpawnPoint? fieldPlayerSpawnPoint)) {
ctx.Console.Out.WriteLine($"Id: {id}, Position: {spawnPoint.Position}. Enabled: {fieldPlayerSpawnPoint.Enable}");
}
List<FieldPlayerSpawnPoint> playerSpawns = session.Field.GetPlayerSpawns();
foreach (FieldPlayerSpawnPoint playerSpawn in playerSpawns) {
ctx.Console.Out.WriteLine($"Id: {playerSpawn.Id}, Position: {playerSpawn.Position}. Enabled: {playerSpawn.Enable}");
}
}
}
Expand Down
13 changes: 11 additions & 2 deletions Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -174,8 +174,13 @@ public virtual void Init() {
AddSpawnPointNpc(spawnPointNpc);
}

foreach ((int id, SpawnPointPC spawnPoint) in Entities.PlayerSpawns) {
fieldPlayerSpawnPoints[id] = new FieldPlayerSpawnPoint(this, NextLocalId(), spawnPoint);
foreach (SpawnPointPC spawnPoint in Entities.PlayerSpawns) {
int fieldId = spawnPoint.SpawnPointId;
if (fieldPlayerSpawnPoints.ContainsKey(fieldId)) {
// Duplicate spawn point id (ex. unassigned ID), use next local id
fieldId = NextLocalId();
}
fieldPlayerSpawnPoints[fieldId] = new FieldPlayerSpawnPoint(this, NextLocalId(), spawnPoint, fieldId);
}

foreach (TriggerModel trigger in Entities.TriggerModels.Values) {
Expand Down Expand Up @@ -468,6 +473,10 @@ public bool TryGetPlayerSpawn(int id, [NotNullWhen(true)] out FieldPlayerSpawnPo
return fieldPlayerSpawnPoints.TryGetValue(id, out playerSpawnPoint);
}

public List<FieldPlayerSpawnPoint> GetPlayerSpawns() {
return fieldPlayerSpawnPoints.Values.ToList();
}

public bool TryGetItem(int objectId, [NotNullWhen(true)] out FieldItem? fieldItem) {
return fieldItems.TryGetValue(objectId, out fieldItem);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@ namespace Maple2.Server.Game.Model;

public class FieldPlayerSpawnPoint : FieldEntity<SpawnPointPC> {
public bool Enable;
public int Id { get; init; }

public FieldPlayerSpawnPoint(FieldManager field, int objectId, SpawnPointPC metadata) : base(field, objectId, metadata) {
public FieldPlayerSpawnPoint(FieldManager field, int objectId, SpawnPointPC metadata, int id) : base(field, objectId, metadata) {
Enable = metadata.Enable;
Position = metadata.Position;
Rotation = metadata.Rotation;
Id = id;
}
}
Loading