Example #1
0
        public static Models.Npc Load(Models.Npc npc, GomObject obj)
        {
            if (obj == null)
            {
                return(npc);
            }
            if (npc == null)
            {
                return(null);
            }

            ulong baseNpcId = obj.Data.ValueOrDefault <ulong>("npcParentSpecId", 0);
            Npc   baseNpc;

            if (baseNpcId > 0)
            {
                baseNpc = Load(baseNpcId);
            }
            else
            {
                baseNpc = new Npc();
            }

            npc.Fqn    = obj.Name;
            npc.NodeId = obj.Id;

            var           textLookup     = obj.Data.ValueOrDefault <Dictionary <object, object> >("locTextRetrieverMap", null);
            GomObjectData nameLookupData = (GomObjectData)textLookup[NameLookupKey];
            var           nameId         = nameLookupData.ValueOrDefault <long>("strLocalizedTextRetrieverStringID", 0);

            npc.Name = StringTable.TryGetString(npc.Fqn, nameLookupData);

            if (textLookup.ContainsKey(TitleLookupKey))
            {
                var titleLookupData = (GomObjectData)textLookup[TitleLookupKey];
                npc.Title = StringTable.TryGetString(npc.Fqn, titleLookupData);
            }

            npc.Id = (ulong)(nameId >> 32);

            //if (objIdMap.ContainsKey(npc.Id))
            //{
            //    Npc otherNpc = objIdMap[npc.Id];
            //    if (!String.Equals(otherNpc.Fqn, npc.Fqn))
            //    {
            //        throw new InvalidOperationException(String.Format("Duplicate NPC Ids: {0} and {1}", otherNpc.Fqn, npc.Fqn));
            //    }
            //}
            //else
            //{
            //    objIdMap[npc.Id] = npc;
            //}

            npc.MinLevel = (int)obj.Data.ValueOrDefault <long>("field_4000000027BDA14B", (long)baseNpc.MinLevel);
            npc.MaxLevel = (int)obj.Data.ValueOrDefault <long>("field_4000000027BDA14C", (long)baseNpc.MaxLevel);

            // Load Toughness
            var toughnessEnum = (ScriptEnum)obj.Data.ValueOrDefault <ScriptEnum>("field_40000005618EC27C", null);

            if (toughnessEnum == null)
            {
                npc.Toughness = baseNpc.Toughness;
            }
            else
            {
                npc.Toughness = ToughnessExtensions.ToToughness(toughnessEnum);
            }

            // Load Faction
            long factionId = obj.Data.ValueOrDefault <long>("npcFaction", 0);

            if (factionId == 0)
            {
                npc.Faction = baseNpc.Faction;
            }
            else
            {
                npc.Faction = FactionExtensions.ToFaction(factionId);
            }

            npc.DifficultyFlags = (int)obj.Data.ValueOrDefault <long>("spnDifficultyLevelFlags", baseNpc.DifficultyFlags);

            npc.LootTableId = obj.Data.ValueOrDefault <long>("field_40000009AF9F1222", baseNpc.LootTableId);

            ulong npcClass = obj.Data.ValueOrDefault <ulong>("npcClassPackage", 0);

            if (npcClass == 0)
            {
                npc.ClassSpec = baseNpc.ClassSpec;
            }
            else
            {
                npc.ClassSpec = ClassSpecLoader.Load(npcClass);
            }

            ulong cdxNodeId = obj.Data.ValueOrDefault <ulong>("npcCodexSpec", 0);

            if (cdxNodeId > 0)
            {
                npc.Codex = CodexLoader.Load(cdxNodeId);
            }
            else
            {
                npc.Codex = baseNpc.Codex;
            }

            var profTrained = (ScriptEnum)obj.Data.ValueOrDefault <ScriptEnum>("prfTrainerProfession", null);

            if (profTrained == null)
            {
                npc.ProfessionTrained = baseNpc.ProfessionTrained;
            }
            else
            {
                npc.ProfessionTrained = ProfessionExtensions.ToProfession(profTrained);
            }

            List <object> trainedPackages = obj.Data.ValueOrDefault <List <object> >("field_4000000A1D72EA38", null);

            if (trainedPackages == null)
            {
                npc.IsClassTrainer = baseNpc.IsClassTrainer;
            }
            else
            {
                npc.IsClassTrainer = trainedPackages.Count > 0;
            }

            npc.ConversationFqn = obj.Data.ValueOrDefault <string>("cnvConversationName", baseNpc.ConversationFqn);

            List <object> vendorPackages = obj.Data.ValueOrDefault <List <object> >("field_400000037C4DE713", null);

            if (vendorPackages != null)
            {
                foreach (string pkg in vendorPackages)
                {
                    npc.VendorPackages.Add(pkg.ToLower());
                }
            }
            else
            {
                npc.VendorPackages = baseNpc.VendorPackages;
            }

            return(npc);
        }
Example #2
0
        public static Models.Placeable Load(Models.Placeable plc, GomObject obj)
        {
            if (obj == null)
            {
                return(null);
            }
            if (plc == null)
            {
                return(null);
            }

            plc.Fqn    = obj.Name;
            plc.NodeId = obj.Id;

            var  textLookup     = obj.Data.Get <Dictionary <object, object> >("locTextRetrieverMap");
            var  nameLookupData = (GomObjectData)textLookup[NameLookupKey];
            long nameId         = nameLookupData.Get <long>("strLocalizedTextRetrieverStringID");

            plc.Id   = (ulong)(nameId >> 32);
            plc.Name = StringTable.TryGetString(plc.Fqn, nameLookupData);

            //public Conversation Conversation { get; set; }
            string cnvFqn = obj.Data.ValueOrDefault <string>("plcConvo", null);
            // if (cnvFqn != null) { plc.Conversation = ConversationLoader.Load(cnvFqn); }

            //public Codex Codex { get; set; }
            ulong cdxNodeId = obj.Data.ValueOrDefault <ulong>("plcCodexSpec", 0);

            if (cdxNodeId > 0)
            {
                plc.Codex = CodexLoader.Load(cdxNodeId);
            }

            //public Profession RequiredProfession { get; set; }
            plc.RequiredProfession = ProfessionExtensions.ToProfession((ScriptEnum)obj.Data.ValueOrDefault <ScriptEnum>("prfProfessionRequired", null));

            //public int RequiredProfessionLevel { get; set; }
            plc.RequiredProfessionLevel = (int)obj.Data.ValueOrDefault <long>("prfProfessionLevelRequired", 0);

            //public bool IsBank { get; set; }
            plc.IsBank = obj.Data.ValueOrDefault <bool>("field_400000070210234D", false);

            //public bool IsMailbox { get; set; }
            plc.IsMailbox = obj.Data.ValueOrDefault <bool>("plcIsMailbox", false);

            //public AuctionHouseNetwork AuctionNetwork { get; set; }
            plc.AuctionNetwork = AuctionHouseNetworkExtensions.ToAuctionHouseNetwork((ScriptEnum)obj.Data.ValueOrDefault <ScriptEnum>("field_40000008D92E8668", null));

            //public bool IsAuctionHouse { get; set; }
            plc.IsAuctionHouse = plc.AuctionNetwork != AuctionHouseNetwork.None;

            //public bool IsEnhancementStation { get; set; }
            plc.IsEnhancementStation = EnhancementStationType.None != EnhancementStationTypeExtensions.ToEnhancementStationType((ScriptEnum)obj.Data.ValueOrDefault <ScriptEnum>("itmEnhancementStationType", null));

            //public Faction Faction { get; set; }
            plc.Faction = FactionExtensions.ToFaction(obj.Data.ValueOrDefault <long>("plcFaction", 0));

            //public int LootLevel { get; set; }
            plc.LootLevel = (int)obj.Data.ValueOrDefault <long>("plcdynLootLevel", 0);

            //public long LootPackageId { get; set; }
            plc.LootPackageId = obj.Data.ValueOrDefault <long>("plcdynLootPackage", 0);

            //public long WonkaPackageId { get; set; }
            plc.WonkaPackageId = obj.Data.ValueOrDefault <long>("wnkPackageID", 0);

            //public DifficultyLevel Difficulty { get; set; }
            plc.DifficultyFlags = (int)obj.Data.ValueOrDefault <long>("spnDifficultyLevelFlags", 0);

            //public HydraScript HydraScript { get; set; }
            ulong hydNodeId = obj.Data.ValueOrDefault <ulong>("field_4000000A4FA14A25", 0);

            if (hydNodeId > 0)
            {
                //plc.HydraScript = HydraScriptLoader.Load(hydNodeId);
            }

            Categorize(plc, obj);

            return(plc);
        }
Example #3
0
        public static Models.Codex Load(Models.Codex cdx, GomObject obj)
        {
            if (obj == null)
            {
                return(null);
            }
            if (cdx == null)
            {
                return(null);
            }

            cdx.Fqn    = obj.Name;
            cdx.NodeId = obj.Id;

            cdx.Image = obj.Data.ValueOrDefault <string>("cdxImage", null);

            TorLib.Icons.AddCodex(cdx.Image);

            var    textLookup  = obj.Data.ValueOrDefault <Dictionary <object, object> >("locTextRetrieverMap", null);
            var    descLookup  = (GomObjectData)textLookup[DescriptionLookupKey];
            var    titleLookup = (GomObjectData)textLookup[NameLookupKey];
            object categoryLookup;

            if (textLookup.TryGetValue(CategoryLookupKey, out categoryLookup))
            {
                cdx.CategoryId = ((GomObjectData)categoryLookup).ValueOrDefault <long>("strLocalizedTextRetrieverStringID", 0);
            }

            var titleId = titleLookup.ValueOrDefault <long>("strLocalizedTextRetrieverStringID", 0);

            cdx.Id = (ulong)(titleId >> 32);

            cdx.Title = TryGetString(cdx.Fqn, titleLookup);
            cdx.Text  = TryGetString(cdx.Fqn, descLookup);
            cdx.Level = (int)obj.Data.ValueOrDefault <long>("cdxLevel", 0);
            if (String.IsNullOrEmpty(cdx.Title))
            {
                cdx.IsHidden = true;
            }

            cdx.Faction  = FactionExtensions.ToFaction((long)obj.Data.ValueOrDefault <long>("cdxFaction", 0));
            cdx.IsPlanet = obj.Data.ValueOrDefault <bool>("cdxIsPlanetCodex", false);

            Dictionary <object, object> classLookup = obj.Data.ValueOrDefault <Dictionary <object, object> >("cdxClassesLookupList", null);

            if (classLookup == null)
            {
                cdx.ClassRestricted = false;
            }
            else
            {
                cdx.ClassRestricted = true;
                cdx.Classes         = new List <ClassSpec>();
                foreach (var kvp in classLookup)
                {
                    if ((bool)kvp.Value)
                    {
                        cdx.Classes.Add(ClassSpecLoader.Load((ulong)kvp.Key));
                    }
                }
            }

            List <object> cdxPlanets = obj.Data.ValueOrDefault <List <object> >("cdxPlanets", null);

            if (cdxPlanets != null)
            {
                cdx.HasPlanets = true;
                cdx.Planets    = new List <Codex>();
                foreach (var planetId in cdxPlanets)
                {
                    cdx.Planets.Add(CodexLoader.Load((ulong)planetId));
                }
            }

            return(cdx);
        }