public static QuestRewards Parse(int id, WZProperty data, QuestState state) { if (data == null) { return(null); } QuestRewards result = new QuestRewards(); result.Id = id; result.State = state; result.Message = data.ResolveForOrNull <string>("message"); result.Exp = data.ResolveFor <int>("exp"); result.BuffItemId = data.ResolveFor <int>("buffItemId"); result.charmExp = data.ResolveFor <int>("charmEXP"); result.SenseEXP = data.ResolveFor <int>("senseEXP"); result.Fame = data.ResolveFor <int>("pop"); result.PetSkill = data.ResolveFor <int>("petskill"); result.Items = data.Resolve("item")?.Children.Select(c => ItemReward.Parse(c)); result.Skills = data.Resolve("skill")?.Children.Select(c => SkillReward.Parse(c)); result.Meso = data.ResolveFor <int>("money"); result.MoveToMap = (uint?)data.ResolveFor <int>("transferField"); return(result); }
public static SkillTemplate Parse(int templateId, WZProperty p) { var entry = p.Resolve("common"); var levelData = new Dictionary<int, SkillLevelTemplate>(); if (entry != null) { var maxLevel = entry.ResolveFor<int>("maxLevel"); for (var i = 1; i <= maxLevel; i++) levelData.Add(i, SkillLevelTemplate.Parse(templateId, i, entry)); } else { entry = p.Resolve("level"); levelData = entry.Children .ToDictionary( c => Convert.ToInt32(c.Name), c => SkillLevelTemplate.Parse(templateId, Convert.ToInt32(c.Name), c) ); } return new SkillTemplate { TemplateID = templateId, MaxLevel = (short) levelData.Count, ReqSkill = p.Resolve("req")?.Children .ToDictionary( c => Convert.ToInt32(c.Name), c => c.ResolveFor<int>() ?? 0 ) ?? new Dictionary<int, int>(), LevelData = levelData }; }
public static Quest GetQuest(WZProperty questWz, int questId) { QuestRewards[] rewards = QuestRewards.Parse(questWz.Resolve($"Act/{questId}")) ?? new QuestRewards[0]; QuestRequirements[] requirements = QuestRequirements.Parse(questWz.Resolve($"Check/{questId}")) ?? new QuestRequirements[0]; Quest quest = Quest.Parse(questWz.Resolve($"QuestInfo/{questId}")); if (quest == null) { return(null); } quest.RequirementToComplete = requirements?.Where(b => b != null && b.State == QuestState.Complete).FirstOrDefault(); quest.RequirementToStart = requirements?.Where(b => b != null && b.State == QuestState.Start).FirstOrDefault(); quest.RewardOnStart = rewards?.Where(b => b != null && b.State == QuestState.Start).FirstOrDefault(); quest.RewardOnComplete = rewards?.Where(b => b != null && b.State == QuestState.Complete).FirstOrDefault(); if (questWz.FileContainer.Collection is MSPackageCollection) { MSPackageCollection collection = (MSPackageCollection)questWz.FileContainer.Collection; if (collection.AvailableOnCompleteTable.ContainsKey(quest.Id)) { quest.QuestsAvailableOnComplete = collection.AvailableOnCompleteTable[quest.Id]; } } return(quest); }
public static IEnumerable <Quest> GetQuests(WZProperty questWz) { Dictionary <int, QuestRewards[]> rewards = questWz.Resolve("Act").Children .AsParallel() .Select(QuestRewards.Parse) .Select(c => c.Where(b => b != null).ToArray()) .Where(c => c.Length > 0) .ToDictionary(c => c.First().Id, c => c); Dictionary <int, QuestRequirements[]> requirements = questWz.Resolve("Check").Children .AsParallel() .Select(QuestRequirements.Parse) .Select(c => c.Where(b => b != null).ToArray()) .Where(c => c.Length > 0) .ToDictionary(c => c.First().Id, c => c); return(questWz.Resolve("QuestInfo").Children .AsParallel() .Select(Quest.Parse) .Select(c => { QuestRewards[] questRewards = rewards.ContainsKey(c.Id) ? rewards[c.Id] : null; QuestRequirements[] questRequirements = requirements.ContainsKey(c.Id) ? requirements[c.Id] : null; c.RequirementToComplete = questRequirements?.Where(b => b.State == QuestState.Complete).FirstOrDefault(); c.RequirementToStart = questRequirements?.Where(b => b.State == QuestState.Start).FirstOrDefault(); c.RewardOnStart = questRewards?.Where(b => b.State == QuestState.Start).FirstOrDefault(); c.RewardOnComplete = questRewards?.Where(b => b.State == QuestState.Complete).FirstOrDefault(); return c; })); }
public static Map Parse(WZProperty mapEntry, Map result) { if (mapEntry == null) { return(null); } WZProperty mapInfo = mapEntry.Resolve("info"); Task loadLadders = Task.Run(() => { List <LadderRope> ladderRopes = new List <LadderRope>(); foreach (WZProperty entry in mapEntry.Resolve("ladderRope").Children) { ladderRopes.Add(LadderRope.Parse(entry)); } result.LadderRopes = ladderRopes; }); ParseInfo(result, mapEntry, mapInfo); ParseFootholds(result, mapEntry); ParseLife(result, mapEntry); Task.WaitAll(loadLadders); return(result); }
public static Android Parse(WZProperty data, int id) { Android result = new Android(); result.Id = id; result.ActionMessages = data.Resolve("action").Children.ToDictionary(c => c.NameWithoutExtension, c => c.Children.Select(b => AndroidMessage.Parse(b)).ToArray()); result.DefaultEquips = data.Resolve("basic").Children.Select(c => ((WZPropertyVal <int>)c).Value).Where(c => c != 0).ToArray(); if (data.Children.Any(c => c.NameWithoutExtension.Equals("costume"))) { WZProperty costume = data.Resolve("costume"); result.PossibleFaces = costume.Resolve("face").Children.Select(c => ((WZPropertyVal <int>)c).Value).Where(c => c != 0).ToArray(); result.PossibleHairs = costume.Resolve("hair").Children.Select(c => ((WZPropertyVal <int>)c).Value).Where(c => c != 0).ToArray(); result.PossibleSkins = costume.Resolve("skin").Children.Select(c => ((WZPropertyVal <int>)c).Value).Where(c => c != 0).ToArray(); } if (data.Children.Any(c => c.NameWithoutExtension.Equals("info"))) { WZProperty info = data.Resolve("info"); result.ChatBalloonStyle = info.ResolveFor <int>("chatBalloon"); result.Gender = info.ResolveFor <int>("gender"); result.NameTagStyle = info.ResolveFor <int>("nameTag"); } return(result); }
public static GraphicsSet Parse(WZProperty data, int index, int frame) { GraphicsSet result = new GraphicsSet(); result.Index = index; result.TileSet = data.ResolveForOrNull <string>("info/tS"); result.Objects = data.Resolve("obj")?.Children.Select(c => MapObject.Parse(c, frame)).Where(c => c != null); result.Tiles = data.Resolve("tile")?.Children.Select(c => MapTile.Parse(c, result.TileSet, frame)).Where(c => c != null); return(result); }
public static QuestRewards[] Parse(WZProperty data) { if (data == null) { return(null); } int id = int.Parse(data.NameWithoutExtension); QuestRewards onStart = QuestRewards.Parse(id, data.Resolve("0"), QuestState.Start); QuestRewards onComplete = QuestRewards.Parse(id, data.Resolve("1"), QuestState.Complete); return(new QuestRewards[] { onStart, onComplete }); }
public static SetItemInfoTemplate Parse(int templateId, WZProperty p) { return(new SetItemInfoTemplate { TemplateID = templateId, SetCompleteCount = p.ResolveFor <int>("completeCount") ?? 0, ItemTemplateID = p.Resolve("itemID").Children .Select(c => c.ResolveFor <int>() ?? 0) .ToList(), Effect = p.Resolve("Effect").Children .ToDictionary( c => Convert.ToInt32(c.Name), SetItemEffectTemplate.Parse ) }); }
public static SMap Parse(WZProperty BaseWz) => new SMap() { Ordering = BaseWz.Resolve("smap").Children .Where(c => c.Type == PropertyType.String) .Select(c => new Tuple <string, string>(c.NameWithoutExtension, ((IWZPropertyVal)c).GetValue().ToString())).ToArray() };
public static NPCTemplate Parse(int templateId, WZProperty p) { return(new NPCTemplate { TemplateID = templateId, TrunkPut = p.ResolveFor <int>("info/trunkPut") ?? 0, TrunkGet = p.ResolveFor <int>("info/trunkGet") ?? 0, StoreBank = p.ResolveFor <bool>("info/storeBank") ?? false, Parcel = p.ResolveFor <bool>("info/parcel") ?? false, Scripts = p.Resolve("info/script")?.Children .Select(NPCScriptTemplate.Parse) .ToList() ?? new List <NPCScriptTemplate>(), Move = p.Resolve("move") != null }); }
public static DirectMaps Parse(WZProperty prop) { if (prop == null) { return(null); } DirectMaps result = new DirectMaps(); result.Spot = prop.ResolveFor <Point>("spot"); if (result.Spot == null) { string[] childrenNames = prop.Children.Select(c => c.NameWithoutExtension).ToArray(); if (childrenNames.Contains("x") && childrenNames.Contains("y")) { result.Spot = new Point(prop.ResolveFor <int>("x").Value, prop.ResolveFor <int>("y").Value); } } result.Type = prop.ResolveFor <int>("type"); result.Title = prop.ResolveForOrNull <string>("desc"); result.Description = prop.ResolveForOrNull <string>("title"); result.NoTooltip = prop.ResolveFor <bool>("noToolTip"); result.MapNumbers = prop.Resolve("mapNo").Children.Select(c => c.ResolveFor <int>()).Where(c => c.HasValue).Select(c => c.Value).ToArray(); return(result); }
public override void Parse(int templateId, WZProperty p) { base.Parse(templateId, p); IncSTR = p.ResolveFor <short>("info/incSTR") ?? 0; IncDEX = p.ResolveFor <short>("info/incDEX") ?? 0; IncINT = p.ResolveFor <short>("info/incINT") ?? 0; IncLUK = p.ResolveFor <short>("info/incLUK") ?? 0; IncMaxHP = p.ResolveFor <int>("info/incMHP") ?? 0; IncMaxMP = p.ResolveFor <int>("info/incMMP") ?? 0; IncPAD = p.ResolveFor <short>("info/incPAD") ?? 0; IncMAD = p.ResolveFor <short>("info/incMAD") ?? 0; IncPDD = p.ResolveFor <short>("info/incPDD") ?? 0; IncMDD = p.ResolveFor <short>("info/incMDD") ?? 0; IncACC = p.ResolveFor <short>("info/incACC") ?? 0; IncEVA = p.ResolveFor <short>("info/incEVA") ?? 0; IncCraft = p.ResolveFor <short>("info/incCraft") ?? 0; IncSpeed = p.ResolveFor <short>("info/incSpeed") ?? 0; IncJump = p.ResolveFor <short>("info/incJump") ?? 0; PreventSlip = p.ResolveFor <bool>("info/preventslip") ?? false; WarmSupport = p.ResolveFor <bool>("info/warmsupport") ?? false; Success = p.ResolveFor <int>("info/success") ?? 0; Cursed = p.ResolveFor <int>("info/cursed") ?? 0; RandomStat = p.ResolveFor <bool>("info/randstat") ?? false; ReqItem = p.Resolve("req")?.Children .Select(c => c.ResolveFor <int>() ?? 0) .ToList() ?? new List <int>(); }
public static Tuple <ItemPotential, IEnumerable <ItemPotentialLevel> > Parse(WZProperty potentialEntry) { ItemPotential potential = new ItemPotential(); if (!int.TryParse(potentialEntry.NameWithoutExtension, out potential.id)) { return(null); } WZProperty info = potentialEntry.Resolve("info"); if (info.Children.Any(c => c.NameWithoutExtension.Equals("string"))) { potential.Message = info.ResolveForOrNull <string>("string"); } else { return(null); } potential.OptionType = info.ResolveFor <int>("optionType") ?? 0; potential.RequiredLevel = info.ResolveFor <int>("reqLevel") ?? 0; return(new Tuple <ItemPotential, IEnumerable <ItemPotentialLevel> >(potential, ItemPotentialLevel.Parse(potential.id, potentialEntry.Resolve("level")))); }
public static ZMap Parse(WZProperty BaseWz) => new ZMap() { Ordering = BaseWz.Resolve("zmap").Children .Select(c => c.NameWithoutExtension) .ToArray() .Reverse() };
public static Quest Parse(WZProperty data) { if (data == null) { return(null); } Quest result = new Quest(); result.Id = int.Parse(data.NameWithoutExtension); result.AutoPreComplete = data.ResolveFor <bool>("autoPreComplete"); result.AutoStart = data.ResolveFor <bool>("autoStart"); result.AutoCancel = data.ResolveFor <bool>("autoCancel"); result.AutoComplete = data.ResolveFor <bool>("autoComplete"); result.AutoAccept = data.ResolveFor <bool>("autoAccept"); result.Name = data.ResolveForOrNull <string>("name"); result.Area = data.ResolveFor <int>("area"); if (result.Area.HasValue && data.FileContainer.Collection is MSPackageCollection) { ((MSPackageCollection)(data.FileContainer.Collection)).QuestAreaNames.TryGetValue(result.Area.Value, out result.AreaName); } result.DemandSummary = data.ResolveForOrNull <string>("demandSummary"); result.RewardSummary = data.ResolveForOrNull <string>("rewardSummary"); result.PlaceSummary = data.ResolveForOrNull <string>("placeSummary"); result.Summary = data.ResolveForOrNull <string>("summary"); result.DisableAtCompleteTab = data.ResolveFor <bool>("disableAtCompleteTab"); result.DisableAtNPC = data.ResolveFor <bool>("disableAtNPC"); result.DisableAtPerformTab = data.ResolveFor <bool>("disableAtPerformTab"); result.DisableAtStartTab = data.ResolveFor <bool>("disableAtStartTab"); result.Blocked = data.ResolveFor <bool>("blocked"); result.ResignBlocked = data.ResolveFor <bool>("resignBlocked"); result.Type = data.ResolveForOrNull <string>("type"); result.MedalCategory = data.ResolveFor <int>("medalCategory"); result.MedalId = data.ResolveFor <int>("viewMedalItem"); result.StartNavigation = data.ResolveFor <bool>("startNavi"); result.TargetMapId = data.ResolveFor <int>("targetMapId"); result.TimeLimit = data.ResolveFor <int>("timeLimit"); result.TimerUI = data.ResolveForOrNull <string>("timerUI"); result.HasSelectedMob = data.ResolveFor <bool>("selectedMob"); result.StraightStart = data.ResolveFor <bool>("straightStart"); result.ValidMaps = data.Resolve("validField")?.Children.Select(c => ((WZPropertyVal <int>)c).Value); result.ShowEffect = data.ResolveFor <bool>("showEffect"); result.Messages = data.Children.Where(c => int.TryParse(c.NameWithoutExtension, out int bogus)).Select(c => ((IWZPropertyVal)c).GetValue().ToString()).Where(c => !string.IsNullOrEmpty(c)); result.DeleteItems = data.Resolve("deleteItem")?.Children.Select(c => ((WZPropertyVal <int>)c).Value); return(result); }
public static WorldMap Parse(WZProperty worldMapNode) { if (worldMapNode == null) { return(null); } WorldMap result = new WorldMap(); result.BaseImage = worldMapNode.Resolve("BaseImg").Children.Select(c => Frame.Parse(c)).ToArray(); result.WorldMapName = worldMapNode.ResolveForOrNull <string>("info/WorldMap"); result.ParentWorld = worldMapNode.ResolveForOrNull <string>("info/parentMap"); result.Links = worldMapNode.Resolve("MapLink")?.Children.Select(c => WorldMapLink.Parse(c)).Where(c => c != null).ToArray(); result.Maps = worldMapNode.Resolve("MapList")?.Children.Select(c => DirectMaps.Parse(c)).Where(c => c != null).ToArray(); return(result); }
public override void Parse(int templateId, WZProperty p) { base.Parse(templateId, p); Type = p.ResolveFor <int>("info/type") ?? 0; Mobs = p.Resolve("mob")?.Children .Select(MobSummonEntry.Parse) .ToList() ?? new List <MobSummonEntry>(); }
public override void Parse(int templateId, WZProperty p) { base.Parse(templateId, p); MasterLevel = p.ResolveFor <int>("info/masterLevel") ?? 0; ReqLevel = p.ResolveFor <int>("info/reqSkillLevel") ?? 0; Skill = p.Resolve("info/skill")?.Children .Select(c => c.ResolveFor <int>() ?? 0) .ToList() ?? new List <int>(); Success = p.ResolveFor <int>("info/success") ?? 0; }
public static MapObject Parse(WZProperty data, int frame) { MapObject result = new MapObject(); result.pathToImage = string.Join("/", (new [] { data.ResolveForOrNull <string>("oS"), data.ResolveForOrNull <string>("l0"), data.ResolveForOrNull <string>("l1"), data.ResolveForOrNull <string>("l2"), }).Where(c => c != null)); result.FrontMost = data.ResolveFor <bool>("front") ?? false; result.Position = new Vector3( data.ResolveFor <float>("x") ?? 0, data.ResolveFor <float>("y") ?? 0, result.FrontMost ? 100000000 : data.ResolveFor <float>("z") ?? 0 ); result.SecondZ = data.ResolveFor <float>("zM") ?? 0; result.Quests = data.Resolve("quest")?.Children? .Where(c => int.TryParse(c.NameWithoutExtension, out int blah)) .Select(c => int.Parse(c.NameWithoutExtension)) .ToArray(); result.Tags = data.ResolveForOrNull <string>("tags"); result.Rotation = data.ResolveFor <float>("r"); WZProperty objCanvas = data.ResolveOutlink($"Map/Obj/{result.pathToImage}") ?? data.ResolveOutlink($"Map2/Obj/{result.pathToImage}"); if (objCanvas == null) { return(null); } int frameCount = objCanvas.Resolve().Children.Select(c => int.TryParse(c.NameWithoutExtension, out int frameNum) ? (int?)frameNum : null).Where(c => c.HasValue).Select(c => c.Value).Max(); result.Canvas = Frame.Parse(objCanvas.Resolve((frame % (frameCount + 1)).ToString()) ?? objCanvas); result.Flip = data.ResolveFor <bool>("f") ?? false; if (result.Flip && result.Canvas != null && result.Canvas.Image != null) { result.Canvas.Image = result.Canvas.Image.Clone(c => c.Flip(FlipMode.Horizontal)); } return(result); }
public static QuestRequirements Parse(int id, WZProperty data, QuestState state) { QuestRequirements result = new QuestRequirements(); result.Id = id; result.State = state; result.Jobs = data.Resolve("job")?.Children.Select(c => Convert.ToInt32(((IWZPropertyVal)c).GetValue())); // job result.RequiredFieldsEntered = data.Resolve("fieldEnter")?.Children.Select(c => Convert.ToInt32(((IWZPropertyVal)c).GetValue())); // fieldEnter result.StartTime = (DateTime?)ResolveDateTimeString(data.ResolveForOrNull <string>("start")); result.EndTime = (DateTime?)ResolveDateTimeString(data.ResolveForOrNull <string>("end")); result.LevelMinimum = data.ResolveFor <byte>("lvmin"); result.LevelMaximum = data.ResolveFor <byte>("lvmax"); result.Mobs = data.Resolve("mob")?.Children.Select(c => Requirement.Parse(c)); result.Items = data.Resolve("item")?.Children.Select(c => Requirement.Parse(c)); result.Quests = data.Resolve("quest")?.Children.Select(c => Requirement.Parse(c)); result.NPCId = data.ResolveFor <int>("npc"); string dayOfWeek = data.ResolveForOrNull <string>("dayOfWeek"); result.OnDayOfWeek = ResolveDayOfWeek(dayOfWeek != null ? new string[] { dayOfWeek } : data.Resolve("dayOfWeek")?.Children?.Select(c => c.NameWithoutExtension).ToArray()); // dayOfWeek result.AnyPet = data.ResolveFor <bool>("allPet"); result.Pet = data.Resolve("pet")?.Children.Select(c => Requirement.Parse(c)); result.PetTamenessMin = data.ResolveFor <int>("pettamenessmin"); result.DayByDay = data.ResolveFor <bool>("dayByDay"); result.NormalAutoStart = data.ResolveFor <bool>("normalAutoStart"); result.MinimumMonsterBookCards = data.ResolveFor <int>("mbmin"); result.RepeatInterval = data.ResolveFor <int>("interval"); return(result); }
public static FieldTemplate Parse(int templateId, WZProperty p) { var res = new FieldTemplate { TemplateID = templateId, Footholds = p.Resolve("foothold").Children .SelectMany(c => c.Children) .SelectMany(c => c.Children) .Select(FieldFootholdTemplate.Parse) .DistinctBy(x => x.ID) // 211040101 has duplicate footholds .ToDictionary(x => x.ID, x => x), Portals = p.Resolve("portal").Children .Select(FieldPortalTemplate.Parse) .DistinctBy(x => x.ID) .ToDictionary(x => x.ID, x => x), Life = p.Resolve("life").Children .Select(FieldLifeTemplate.Parse) .ToList() }; return(res); }
private static void ParseLife(Map result, WZProperty mapEntry) { Stopwatch watch = Stopwatch.StartNew(); ConcurrentDictionary <int, Tuple <string, Frame> > lifeTemplateCache = new ConcurrentDictionary <int, Tuple <string, Frame> >(); result.Life = mapEntry.Resolve("life")?.Children .GroupBy(c => c.ResolveFor <int>("id")) .Select(grouping => grouping.Select(c => MapLife.Parse(c, result.Footholds, lifeTemplateCache)).ToArray()) .SelectMany(c => c).ToArray(); result.Npcs = result.Life?.Where(c => c.Type == LifeType.NPC).ToArray(); result.Mobs = result.Life?.Where(c => c.Type == LifeType.Monster).ToArray(); watch.Stop(); Package.Logging($"Map ParseLife took {watch.ElapsedMilliseconds}"); }
public static IEnumerable <Tips> GetTips(WZProperty etcWz) { return(etcWz.Resolve("Tips").Children .Select(c => new Tuple <WorldType, WZProperty>((WorldType)Enum.Parse(typeof(WorldType), c.NameWithoutExtension, true), c)) .Select(c => { string[] allMessages = c.Item2.Resolve("all").Children.Select(b => ((IWZPropertyVal)b).GetValue().ToString()).ToArray(); return c.Item2.Resolve("info").Children.Select(b => { WZProperty messageContainer = c.Item2.Resolve(b.ResolveForOrNull <string>("tip") ?? "all"); return Parse(messageContainer, b, c.Item1, allMessages); }); }) .SelectMany(c => c)); }
public static ItemOptionTemplate Parse(int templateId, WZProperty p) { return(new ItemOptionTemplate { TemplateID = templateId, ReqLevel = p.ResolveFor <short>("info/reqLevel") ?? 0, OptionType = p.ResolveFor <short>("info/optionType") ?? 0, LevelData = p.Resolve("level").Children .ToDictionary( c => Convert.ToInt32(c.Name), ItemOptionLevelTemplate.Parse ) }); }
public static WorldMapLink Parse(WZProperty prop) { if (prop == null) { return(null); } WorldMapLink result = new WorldMapLink(); result.ToolTip = prop.ResolveForOrNull <string>("toolTip"); result.LinkImage = Frame.Parse(prop.Resolve("link/linkImg")); result.LinksTo = prop.ResolveForOrNull <string>("link/linkMap"); return(result); }
public int SkillLevel; // skillLevel public static SkillReward Parse(WZProperty data) { if (data == null) { return(null); } SkillReward result = new SkillReward(); result.Id = data.ResolveFor <int>("id") ?? -1; result.RequiredJobs = data.Resolve("job")?.Children.Select(c => Convert.ToInt32(((IWZPropertyVal)c).GetValue())); result.MasterLevel = data.ResolveFor <int>("masterLevel") ?? -1; result.SkillLevel = data.ResolveFor <int>("skillLevel") ?? -1; return(result); }
public static EquipFrameBook Parse(WZProperty container) { EquipFrameBook effect = new EquipFrameBook(); // If we are a UOL, resolve, otherwise it'll return itself container = container.Resolve(); if (container == null) { return(null); } bool isSingle = container.Children.Any(c => c.Type == PropertyType.Canvas); if (!isSingle) { effect.frames = container.Children .Where(c => { int frameNumber = -1; return(int.TryParse(c.NameWithoutExtension, out frameNumber)); }) .OrderBy(c => { int frameNumber = -1; if (int.TryParse(c.NameWithoutExtension, out frameNumber)) { return(frameNumber); } return(1); }) .Select(frame => { try { return(EquipFrame.Parse(frame)); } catch (Exception ex) { ErrorCallback($"{ex.Message}{Environment.NewLine}{ex.StackTrace}"); return(null); } }); } else { effect.frames = new EquipFrame[] { EquipFrame.Parse(container) }; } return(effect); }
public static SkillBook Parse(WZProperty skillBook, int id, Job relatedJob, Func <int, SkillDescription> skillDescriptions) { SkillBook book = new SkillBook(); if (skillBook.Children.Any(c => c.NameWithoutExtension.Equals("info"))) { book.Icon = skillBook.ResolveForOrNull <Image <Rgba32> >("info/icon"); } book.id = id; book.Description = skillDescriptions(id); //skillDescriptions.FirstOrDefault(c => c.Id == id && !string.IsNullOrEmpty(c.bookName)); book.Skills = skillBook.Resolve("skill").Children.Select(c => Skill.Parse(c, skillDescriptions)); book.Job = relatedJob; return(book); }
public static IEnumerable <MapName> GetMapNames(WZProperty stringWz) { IEnumerable <MapName> names = null; if (stringWz.FileContainer.Collection.VersionCache.TryGetValue("mapNames", out object mapNamesCached)) { names = (IEnumerable <MapName>)mapNamesCached; } else { names = stringWz.Resolve("Map").Children.SelectMany(c => c.Children).Select(c => MapName.Parse(c)); stringWz.FileContainer.Collection.VersionCache.AddOrUpdate("mapNames", names, (a, b) => b); } return(names); }