public IEnumerable <ItemEffect> LoadEffects() { var dto = Deserialize <ItemEffectDto>("xml/item_effect.x7"); var stringTable = Deserialize <StringTableDto>("language/xml/item_effect_string_table.x7"); foreach (var itemEffectDto in dto.item.Where(itemEffect => itemEffect.id != 0)) { var itemEffect = new ItemEffect { Id = itemEffectDto.id }; foreach (var attributeDto in itemEffectDto.attribute) { itemEffect.Attributes.Add(new ItemEffectAttribute { Attribute = (Attribute)Enum.Parse(typeof(Attribute), attributeDto.effect.Replace("_", ""), true), Value = attributeDto.value, Rate = float.Parse(attributeDto.rate, CultureInfo.InvariantCulture) }); } var name = [email protected](s => s.key.Equals(itemEffectDto.text_key, StringComparison.InvariantCultureIgnoreCase)); if (name == null) { name = new StringTableStringDto(); } if (string.IsNullOrWhiteSpace(name.eng)) { name.eng = itemEffectDto.NAME; } itemEffect.Name = name.eng; yield return(itemEffect); } }
public IEnumerable <MapInfo> LoadMaps() { var stringTable = Deserialize <StringTableDto>("language/xml/gameinfo_string_table.xml"); var dto = Deserialize <MapInfoDto>("xml/map.x7"); //Logger.Information($"LoadMaps() called ({dto.map.Length})"); var MapList = new List <int>(); foreach (var mapDto in dto.map) { if (MapList.Contains(mapDto.id) || mapDto.id > 255) { //Logger.Warning("Map {mapid} couldnt be loaded!", mapDto.id); } else { MapList.Add(mapDto.id); //Logger.Information($"Loading map {mapDto.id}, {mapDto.resource.bginfo_path}"); mapDto.resource.bginfo_path = mapDto.resource.bginfo_path.ToLower(); var mapPath = mapDto.resource.bginfo_path; var map = new MapInfo { Id = (byte)mapDto.id, MinLevel = 0, ServerId = 0, ChannelId = 0, RespawnType = 0 }; var data = GetBytes(mapPath); if (data == null) { continue; } using (var ms = new MemoryStream(data)) { map.Config = IniFile.Load(ms); } foreach (var enabledMode in map.Config["MAPINFO"] .Where(pair => pair.Key.StartsWith("enableMode", StringComparison.InvariantCultureIgnoreCase)) .Select(pair => pair.Value)) { switch (enabledMode.Value.ToLower()) { case "sl": if (!map.GameRules.Contains(GameRule.Chaser)) { map.GameRules.Add(GameRule.Chaser); } break; case "t": if (!map.GameRules.Contains(GameRule.Touchdown)) { map.GameRules.Add(GameRule.Touchdown); } if (!map.GameRules.Contains(GameRule.PassTouchdown)) { map.GameRules.Add(GameRule.PassTouchdown); } if (!map.GameRules.Contains(GameRule.Captain)) { map.GameRules.Add(GameRule.Captain); } break; case "c": if (!map.GameRules.Contains(GameRule.Captain)) { map.GameRules.Add(GameRule.Captain); } break; case "f": if (!map.GameRules.Contains(GameRule.Deathmatch)) { map.GameRules.Add(GameRule.Deathmatch); } if (!map.GameRules.Contains(GameRule.SnowballFight)) { map.GameRules.Add(GameRule.SnowballFight); } if (!map.GameRules.Contains(GameRule.BattleRoyal)) { map.GameRules.Add(GameRule.BattleRoyal); } if (!map.GameRules.Contains(GameRule.Captain)) { map.GameRules.Add(GameRule.Captain); } break; case "d": if (!map.GameRules.Contains(GameRule.SnowballFight)) { map.GameRules.Add(GameRule.SnowballFight); } if (!map.GameRules.Contains(GameRule.BattleRoyal)) { map.GameRules.Add(GameRule.BattleRoyal); } if (!map.GameRules.Contains(GameRule.Deathmatch)) { map.GameRules.Add(GameRule.Deathmatch); } if (!map.GameRules.Contains(GameRule.Chaser)) { map.GameRules.Add(GameRule.Chaser); } if (!map.GameRules.Contains(GameRule.Captain)) { map.GameRules.Add(GameRule.Captain); } break; case "s": map.GameRules.Add(GameRule.Survival); break; case "n": map.GameRules.Add(GameRule.Practice); break; case "a": map.GameRules.Add(GameRule.Arcade); break; case "sz": map.GameRules.Add(GameRule.Siege); break; case "std": // wtf is this? break; case "m": // wtf is this? break; default: throw new Exception("Invalid game rule " + enabledMode); } } var name_ = new StringTableStringDto(); try { name_ = [email protected](s => s.key.Equals(mapDto.Base.map_name_key, StringComparison.InvariantCultureIgnoreCase)); } catch (Exception ex) { name_.eng = "unknown"; } var name = name_; if (string.IsNullOrWhiteSpace(name.eng)) { name.eng = mapDto.Base.map_name_key; } map.Name = name.eng; yield return(map); } } }