예제 #1
0
        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);
        }
예제 #2
0
        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
            };
        }
예제 #3
0
        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);
        }
예제 #4
0
        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;
            }));
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }
예제 #7
0
        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);
        }
예제 #8
0
        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
             )
     });
 }
예제 #10
0
 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()
 };
예제 #11
0
 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
     });
 }
예제 #12
0
            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);
            }
예제 #13
0
        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>();
        }
예제 #14
0
        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"))));
        }
예제 #15
0
 public static ZMap Parse(WZProperty BaseWz)
 => new ZMap()
 {
     Ordering = BaseWz.Resolve("zmap").Children
                .Select(c => c.NameWithoutExtension)
                .ToArray()
                .Reverse()
 };
예제 #16
0
        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);
        }
예제 #17
0
        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);
        }
예제 #18
0
        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;
        }
예제 #20
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);
        }
예제 #21
0
        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);
        }
예제 #22
0
        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);
        }
예제 #23
0
        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}");
        }
예제 #24
0
 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));
 }
예제 #25
0
 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
             )
     });
 }
예제 #26
0
            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);
            }
예제 #27
0
        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);
        }
예제 #28
0
        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);
        }
예제 #29
0
        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);
        }
예제 #30
0
        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);
        }