public QuestLogEntry(Quest quest, UserQuestInfo questInfo) { _quest = quest; _questInfo = questInfo; if (_questInfo.State == QuestState.InProgress) { // Add an entry for each current requirement for (int i = 0; i < CurrentStep.Requirements.Count; i++) _requirementProgress.Add(0); // Copy over the new values of our quest tracking for (int i = 0; i < _questInfo.RequirementProgress.Count; i++) _requirementProgress[i] = _questInfo.RequirementProgress[i].Progress; } }
private static void PersistPlayer(Player player) { using (var context = new GameDatabaseContext()) { var hero = context.Characters.First(x => x.UserHeroId == player.UserId); // Load quest info context.Entry(hero).Collection(x => x.QuestInfo).Load(); foreach (var x in hero.QuestInfo) { context.Entry(x).Collection(a => a.RequirementProgress).Load(); var l = x.RequirementProgress.ToList(); foreach (var n in l) context.Entry(n).State = EntityState.Deleted; } context.Entry(hero).Collection(x => x.Inventory).Load(); context.Entry(hero).Collection(x => x.Equipment).Load(); context.Entry(hero).Collection(x => x.Flags).Load(); hero.Name = player.Name; hero.PositionX = (int)player.Position.X; hero.PositionY = (int)player.Position.Y; hero.ZoneId = player.Zone.Id; // Persist stats hero.Hitpoints = (int)player.CharacterStats[(int)StatTypes.Hitpoints].CurrentValue; hero.Strength = (int)player.CharacterStats[(int)StatTypes.Strength].CurrentValue; hero.Intelligence = (int)player.CharacterStats[(int)StatTypes.Intelligence].CurrentValue; hero.Dexterity = (int)player.CharacterStats[(int)StatTypes.Dexterity].CurrentValue; hero.Luck = (int)player.CharacterStats[(int)StatTypes.Luck].CurrentValue; hero.Vitality = (int)player.CharacterStats[(int)StatTypes.Vitality].CurrentValue; hero.MaximumHitpoints = (int)player.CharacterStats[(int)StatTypes.Hitpoints].MaximumValue; hero.Mind = (int)player.CharacterStats[StatTypes.Mind].CurrentValue; hero.SkillResource = (int)player.CharacterStats[StatTypes.SkillResource].CurrentValue; hero.MaximumSkillResource = (int)player.CharacterStats[StatTypes.SkillResource].MaximumValue; hero.Experience = player.Experience; hero.Level = player.Level; hero.Flags = player.Flags; //TODO: Need better tracking code here, incrementing the row needlessly here // For now though, we don't care... hero.QuestInfo.ToList().ForEach(r => context.UserQuestInfo.Remove(r)); context.SaveChanges(); //context.SaveChanges(); foreach (var entry in player.QuestLog) { var temp = new List<UserQuestRequirements>(); for (int index = 0; index < entry.Progress.Count; index++) { var x = entry.Progress[index]; var questRequirementProgress = new UserQuestRequirements() { Progress = x }; if (entry.QuestInfo.RequirementProgress.Count - 1 >= index) questRequirementProgress.UserQuestRequirementId = entry.QuestInfo.RequirementProgress[index].QuestInfo.UserQuestInfoId; temp.Add(questRequirementProgress); } var quest = new UserQuestInfo() { QuestId = entry.QuestInfo.QuestId, State = entry.State, UserQuestInfoId = entry.QuestInfo.UserQuestInfoId, UserHero = hero, RequirementProgress = temp, QuestProgress = entry.QuestInfo.QuestProgress }; hero.QuestInfo.Add(quest); } hero.Inventory.ToList().ForEach(r => context.UserItems.Remove(r)); foreach (var inventorySlot in player.Backpack.Storage) { var x = new UserItem(inventorySlot.Value.Item.Id, inventorySlot.Value.Amount, inventorySlot.Key); hero.Inventory.Add(x); } hero.Equipment.ToList().ForEach(r => context.UserEquipments.Remove(r)); foreach (var equipmentPiece in player.Equipment) { if (equipmentPiece == null) continue; var x = new UserEquipment() { ItemId = equipmentPiece.Id, Slot = equipmentPiece.Slot, UserEquipmentId = 0 }; hero.Equipment.Add(x); } context.Entry(hero).State = EntityState.Modified; // Flush context.SaveChanges(); } }
protected virtual void OnAcceptedQuest(UserQuestInfo userquestinfo, Player player) { QuestEvent handler = AcceptedQuest; if (handler != null) handler(userquestinfo, player); }
public void AddQuest(UserQuestInfo questInfo) { QuestInfo.Add(questInfo); OnAcceptedQuest(questInfo, this); }