public MapReference(WzImage img) { var name = img.Name.Remove(9); if (!int.TryParse(name, out var id)) { return; } MapleId = id; var info = img["info"]; foreach (var node in info.WzProperties) { switch (node.Name) { case "mapMark": case "cloud": case "snow": case "rain": case "fs": case "bgm": case "version": case "mapDesc": case "mapName": case "help": case "streetName": case "moveLimit": case "hideMinimap": break; case "town": IsTown = node.GetInt() > 0; break; case "mobRate": SpawnRate = node.GetDouble(); break; case "returnMap": ReturnMapId = node.GetInt(); break; case "forcedReturn": ForcedReturnMapId = node.GetInt(); break; case "fieldLimit": FieldLimit = (FieldLimitFlags)node.GetInt(); break; case "bUnableToChangeChannel": IsUnableToChangeChannel = node.GetInt() > 0; break; case "bUnableToShop": IsUnableToShop = node.GetInt() > 0; break; case "everlast": IsEverlastDrops = node.GetInt() > 0; break; case "personalShop": IsPersonalShop = node.GetInt() > 0; break; case "recovery": RecoveryHp = (byte)node.GetInt(); break; case "decHP": DecreaseHp = (byte)node.GetInt(); break; case "scrollDisable": IsScrollDisable = node.GetInt() > 0; break; case "timeLimit": TimeLimit = node.GetInt(); break; case "VRTop": VrTop = node.GetInt(); break; case "VRLeft": VrLeft = node.GetInt(); break; case "VRBottom": VrBottom = node.GetInt(); break; case "VRRight": VrRight = node.GetInt(); break; case "fieldType": FieldType = (MapFieldType)node.GetInt(); break; default: _log.Warning( $"Unknown map node Skill={MapleId} Name={node.Name} Value={node.WzValue}"); break; } } HasClock = img["clock"] != null; HasShip = img["shipObj"] != null; img["portal"]?.WzProperties?.ForEach(x => Portals.Add(new PortalReference(x))); img["seat"]?.WzProperties?.ForEach(x => Seats.Add(new SeatReference(x))); img["foothold"]?.WzProperties.SelectMany(x => x.WzProperties).SelectMany(x => x.WzProperties).ToList() .ForEach(x => Footholds.Add(new FootholdReference(x))); img["seat"]?.WzProperties?.ForEach(x => Seats.Add(new SeatReference(x))); img["life"]?.WzProperties?.ForEach(life => { var type = life["type"].GetString(); switch (type) { case "n": Npcs.Add(new MapNpcReference(life)); break; case "m": SpawnPoints.Add(new SpawnPointReference(life, LifeObjectType.Mob)); break; } }); }
public void AddFoothold(Foothold FH) { Footholds.Add(FH); }