Example #1
0
        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;
            }
        }
Example #2
0
        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();

            }
        }
Example #3
0
 protected virtual void OnAcceptedQuest(UserQuestInfo userquestinfo, Player player)
 {
     QuestEvent handler = AcceptedQuest;
     if (handler != null) handler(userquestinfo, player);
 }
Example #4
0
 public void AddQuest(UserQuestInfo questInfo)
 {
     QuestInfo.Add(questInfo);
     OnAcceptedQuest(questInfo, this);
 }