public void Load(string id) { MongoUtils.MongoData.ConnectToDatabase(); MongoDatabase characterDB = MongoUtils.MongoData.GetDatabase("Characters"); MongoCollection characterCollection = characterDB.GetCollection <BsonDocument>("NPCCharacters"); IMongoQuery query = Query.EQ("_id", ObjectId.Parse(id)); BsonDocument found = characterCollection.FindOneAs <BsonDocument>(query); ID = found["_id"].AsObjectId.ToString(); FirstName = found["FirstName"].AsString.CamelCaseWord(); LastName = found["LastName"].AsString.CamelCaseWord(); _class = (CharacterClass)Enum.Parse(typeof(CharacterClass), found["Class"].AsString.CamelCaseWord()); _race = (CharacterRace)Enum.Parse(typeof(CharacterRace), found["Race"].AsString.CamelCaseWord()); _gender = (Genders)Enum.Parse(typeof(Genders), found["Gender"].AsString.CamelCaseWord()); _skinType = (SkinType)Enum.Parse(typeof(SkinType), found["SkinType"].AsString.CamelCaseWord()); _skinColor = (SkinColors)Enum.Parse(typeof(SkinColors), found["SkinColor"].AsString.CamelCaseWord()); _skinType = (SkinType)Enum.Parse(typeof(SkinType), found["SkinType"].AsString.CamelCaseWord()); _hairColor = (HairColors)Enum.Parse(typeof(HairColors), found["HairColor"].AsString.CamelCaseWord()); _eyeColor = (EyeColors)Enum.Parse(typeof(EyeColors), found["EyeColor"].AsString.CamelCaseWord()); _stanceState = (CharacterStanceState)Enum.Parse(typeof(CharacterStanceState), found["StanceState"].AsString.CamelCaseWord()); _actionState = (CharacterActionState)Enum.Parse(typeof(CharacterActionState), found["ActionState"].AsString.CamelCaseWord()); Description = found["Description"].AsString; Location = found["Location"].AsString; Height = found["Height"].AsDouble; Weight = found["Weight"].AsDouble; IsNPC = found["IsNPC"].AsBoolean; MobTypeID = found["MobTypeID"].AsInt32; NextAiAction = found["NextAiAction"].ToUniversalTime(); InCombat = found["InCombat"].AsBoolean; LastCombatTime = found["LastCombatTime"].ToUniversalTime(); CurrentTarget = found["CurrentTarget"].AsString != "" ? found["CurrentTarget"].AsString : null; LastTarget = found["LastTarget"].AsString != "" ? found["LastTarget"].AsString : null; Fsm.state = Fsm.GetStateFromName(found["AiState"].AsString); Fsm.previousState = Fsm.GetStateFromName(found["previousAiState"].AsString); Fsm.globalState = Fsm.GetStateFromName(found["AiGlobalState"].AsString); Experience = found["Experience"].AsInt64; Level = found["Level"].AsInt32; Title = found.Contains("Title") ? found["Title"].AsString : ""; KillerID = found.Contains("KillerID") ? found["KillerID"].AsString : ""; //if you just use var instead of casting it like this you will be in a world of pain and suffering when dealing with subdocuments. BsonArray playerAttributes = found["Attributes"].AsBsonArray; BsonArray xpTracker = found["XpTracker"].AsBsonArray; BsonDocument triggers = found["Triggers"].AsBsonDocument; BsonArray bonusesList = null; if (found.Contains("Bonuses")) { bonusesList = found["Bonuses"].AsBsonArray; } if (playerAttributes != null) { foreach (BsonDocument attrib in playerAttributes) { if (!this.Attributes.ContainsKey(attrib["Name"].ToString())) { Attribute tempAttrib = new Attribute(); tempAttrib.Name = attrib["Name"].ToString(); tempAttrib.Value = attrib["Value"].AsDouble; tempAttrib.Max = attrib["Max"].AsDouble; tempAttrib.RegenRate = attrib["RegenRate"].AsDouble; this.Attributes.Add(tempAttrib.Name, tempAttrib); } else { this.Attributes[attrib["Name"].ToString()].Max = attrib["Max"].AsDouble; this.Attributes[attrib["Name"].ToString()].Value = attrib["Value"].AsDouble; this.Attributes[attrib["Name"].ToString()].RegenRate = attrib["RegenRate"].AsDouble; } } } if (xpTracker != null && xpTracker.Count > 0) { foreach (BsonDocument track in xpTracker) { //we just newed this up so it should always have to be refilled damageTracker.Add(track["ID"].AsString, track["Value"].AsDouble); } } ITrigger trigger = new GeneralTrigger(triggers, "NPC"); Triggers.Add(trigger); if (bonusesList != null && bonusesList.Count > 0) { Bonuses.LoadFromBson(bonusesList); } }
public void Load(string id) { MongoUtils.MongoData.ConnectToDatabase(); MongoDatabase characterDB = MongoUtils.MongoData.GetDatabase("Characters"); MongoCollection characterCollection = characterDB.GetCollection <BsonDocument>("PlayerCharacter"); IMongoQuery query = Query.EQ("_id", ObjectId.Parse(id)); BsonDocument found = characterCollection.FindOneAs <BsonDocument>(query); ID = found["_id"].AsObjectId.ToString(); FirstName = found["FirstName"].AsString.CamelCaseWord(); LastName = found["LastName"].AsString.CamelCaseWord(); _class = (CharacterClass)Enum.Parse(typeof(CharacterClass), found["Class"].AsString.CamelCaseWord()); _race = (CharacterRace)Enum.Parse(typeof(CharacterRace), found["Race"].AsString.CamelCaseWord()); _gender = (Genders)Enum.Parse(typeof(Genders), found["Gender"].AsString.CamelCaseWord()); _skinType = (SkinType)Enum.Parse(typeof(SkinType), found["SkinType"].AsString.CamelCaseWord()); _skinColor = (SkinColors)Enum.Parse(typeof(SkinColors), found["SkinColor"].AsString.CamelCaseWord()); _skinType = (SkinType)Enum.Parse(typeof(SkinType), found["SkinType"].AsString.CamelCaseWord()); _hairColor = (HairColors)Enum.Parse(typeof(HairColors), found["HairColor"].AsString.CamelCaseWord()); _eyeColor = (EyeColors)Enum.Parse(typeof(EyeColors), found["EyeColor"].AsString.CamelCaseWord()); Height = found["Height"].AsDouble; Weight = found["Weight"].AsDouble; _stanceState = (CharacterStanceState)Enum.Parse(typeof(CharacterStanceState), found["StanceState"].AsString.CamelCaseWord()); _actionState = (CharacterActionState)Enum.Parse(typeof(CharacterActionState), found["ActionState"].AsString.CamelCaseWord()); Description = found["Description"].AsString; Location = found["Location"].AsString; Password = found["Password"].AsString; IsNPC = found["IsNPC"].AsBoolean; Experience = found["Experience"].AsInt64; NextLevelExperience = found["NextLevelExperience"].AsInt64; Level = found["Level"].AsInt32; Leveled = found["Leveled"].AsBoolean; PointsToSpend = found["PointsToSpend"].AsInt32; MainHand = found["MainHand"].AsString != "" ? found["MainHand"].AsString : null; Title = found.Contains("Title") ? found["Title"].AsString : ""; KillerID = found.Contains("KillerID") ? found["KillerID"].AsString : ""; BsonArray playerAttributes = found["Attributes"].AsBsonArray; BsonArray inventoryList = found["Inventory"].AsBsonArray; BsonArray equipmentList = found["Equipment"].AsBsonArray; BsonArray bonusesList = found["Bonuses"].AsBsonArray; if (playerAttributes != null) { foreach (BsonDocument attrib in playerAttributes) { if (!this.Attributes.ContainsKey(attrib["Name"].ToString())) { Attribute tempAttrib = new Attribute(); tempAttrib.Name = attrib["Name"].ToString(); tempAttrib.Value = attrib["Value"].AsDouble; tempAttrib.Max = attrib["Max"].AsDouble; tempAttrib.RegenRate = attrib["RegenRate"].AsDouble; tempAttrib.Rank = attrib["Rank"].AsInt32; this.Attributes.Add(tempAttrib.Name, tempAttrib); } else { this.Attributes[attrib["Name"].ToString()].Max = attrib["Max"].AsDouble; this.Attributes[attrib["Name"].ToString()].Value = attrib["Value"].AsDouble; this.Attributes[attrib["Name"].ToString()].RegenRate = attrib["RegenRate"].AsDouble; this.Attributes[attrib["Name"].ToString()].Rank = attrib["Rank"].AsInt32; } } } if (inventoryList.Count > 0) { foreach (BsonDocument item in inventoryList) { Items.Iitem fullItem = Items.Items.GetByID(item["_id"].AsObjectId.ToString()); if (!Inventory.inventory.Contains(fullItem)) { Inventory.AddItemToInventory(fullItem); } } } if (equipmentList.Count > 0) { foreach (BsonDocument item in equipmentList) { Items.Iitem fullItem = Items.Items.GetByID(item["_id"].AsObjectId.ToString()); if (!Equipment.equipped.ContainsKey(fullItem.WornOn)) { Equipment.EquipItem(fullItem, this.Inventory); } } } if (bonusesList.Count > 0) { Bonuses.LoadFromBson(bonusesList); } }