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); }
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); }
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); }