예제 #1
0
 private void OnSelectedSkill(Model.CharacterRelated.SkillRelated.Skill sk)
 {
     if (SelectedSkillEvent != null)
     {
         Selected = sk;
         SelectedSkillEvent(this, EventArgs.Empty);
     }
 }
예제 #2
0
        private bool LearnSkill(Model.CharacterRelated.SkillRelated.Skill sk)
        {
            Int32 ind = Skills.SkillTree.FindIndex(x => x == sk);

            if (!Skills.SkillTree[ind].IsUnlocked &&
                Skills.SkillTree[ind].LevelRequired <= _level &&
                Skills.UnSpentPoints > 0)
            {
                Skills.SkillTree[ind].IsUnlocked = true;
                --Skills.UnSpentPoints;

                return(true);
            }

            return(false);
        }
예제 #3
0
        private void EnemyTurn(Int32 t)
        {
            EndOfTurnMaintainEnemy();

            Model.CharacterRelated.SkillRelated.Skill sk =
                _map.Current.Special.Enemies[t].ChooseSkill(_player);

            if (_map.Current.Special.Distances[t] > sk.Range)
            {
                Battle_Content += _map.Current.Special.Enemies[t].Name +
                                  " comes closer to you." + Environment.NewLine;
                OnPropertyChanged("Battle_Content");
                _map.Current.Special.Distances[t] -=
                    _map.Current.Special.Enemies[t].TotalStats.Speed;
                if (_map.Current.Special.Distances[t] < 0)
                {
                    _map.Current.Special.Distances[t] = 0;
                }
                OnPropertyChanged("Battle_EnemyDistance");
                return;
            }

            _map.Current.Special.Enemies[t].BaseStats.Mana.Consume(sk.ManaCost);
            _map.Current.Special.Enemies[t].Skills.SkillTree.Find(skill => skill == sk).IsOnCooldown =
                _map.Current.Special.Enemies[t].Skills.SkillTree.Find(skill => skill == sk).Cooldown;
            _map.Current.Special.Enemies[t].ActiveEffects.Add(sk);

            //Add skill stats

            _map.Current.Special.Enemies[t].BaseStats.Attack  += sk.AdditionalAttack;
            _map.Current.Special.Enemies[t].BaseStats.Defense += sk.AdditionalDefense;
            _map.Current.Special.Enemies[t].BaseStats.Health.Increase(sk.AdditionalHealth);
            _map.Current.Special.Enemies[t].BaseStats.Health.Heal(sk.Heal);
            _map.Current.Special.Enemies[t].BaseStats.Mana.Increase(sk.AdditionalMana);
            _map.Current.Special.Enemies[t].BaseStats.Mana.Regen(sk.Recover);
            _map.Current.Special.Enemies[t].BaseStats.Speed += sk.AdditionalSpeed;
            Battle_Content += "Enemy: " + sk.UseMessage + Environment.NewLine;
            OnPropertyChanged("Battle_Content");

            //DO damage
            HitPlayer(t);
        }
예제 #4
0
        private Boolean SwapSkills(int mod)
        {
            Model.CharacterRelated.ProfessionManager.ProfessionInfo ri =
                Model.CharacterRelated.ProfessionManager.Professions[(String)ProfessionListBox.SelectedItem];

            if (SkillListBox.SelectedIndex >= 0 &&
                SkillListBox.SelectedIndex + mod >= 0 &&
                SkillListBox.SelectedIndex < ri.SkillTree.Count &&
                SkillListBox.SelectedIndex + mod < ri.SkillTree.Count)
            {
                int i = SkillListBox.SelectedIndex;

                Model.CharacterRelated.SkillRelated.Skill temp = ri.SkillTree[i + mod];
                ri.SkillTree[i + mod] = ri.SkillTree[i];
                ri.SkillTree[i]       = temp;

                return(true);
            }

            return(false);
        }
예제 #5
0
 public SkillEventArgs(Model.CharacterRelated.SkillRelated.Skill sk) : base()
 {
     Skill = sk;
 }
예제 #6
0
        public void SelectSkill(Model.CharacterRelated.SkillRelated.Skill sk)
        {
            if (_target == -1)
            {
                String text = "Select a target!";
                Battle_Content += text + Environment.NewLine;
                OnPropertyChanged("Battle_Content");
                OnShowMessage(text);
                return;
            }

            if (_player.TotalStats.Mana.Current < sk.ManaCost)
            {
                String text = "You need more mana to cast that!";
                Battle_Content += text + Environment.NewLine;
                OnPropertyChanged("Battle_Content");
                OnShowMessage(text);
                return;
            }

            if (_map.Current.Special.Distances[_target] > sk.Range)
            {
                Battle_Content += "You run closer to your target and your enemies." + Environment.NewLine;
                OnPropertyChanged("Battle_Content");
                for (Int32 i = 0; i < _map.Current.Special.Distances.Count; ++i)
                {
                    if (_map.Current.Special.Enemies[i].TotalStats.Health.Current <= 0)
                    {
                        continue;
                    }

                    if (i == _target)
                    {
                        if (_map.Current.Special.Distances[i] == 0)
                        {
                            continue;
                        }

                        _map.Current.Special.Distances[i] -= _player.TotalStats.Speed;
                    }
                    else
                    {
                        if (_map.Current.Special.Distances[i] == 0)
                        {
                            continue;
                        }

                        _map.Current.Special.Distances[i] -= _player.TotalStats.Speed / 2;
                    }
                }
                OnPropertyChanged("Battle_EnemyDistance");
                return;
            }

            _player.BaseStats.Mana.Consume(sk.ManaCost);
            _player.Skills.SkillTree.Find(skill => skill == sk).IsOnCooldown =
                _player.Skills.SkillTree.Find(skill => skill == sk).Cooldown;
            _player.ActiveEffects.Add(sk);

            //Add skill stats

            _player.BaseStats.Attack  += sk.AdditionalAttack;
            _player.BaseStats.Defense += sk.AdditionalDefense;
            _player.BaseStats.Health.Increase(sk.AdditionalHealth);
            _player.BaseStats.Health.Heal(sk.Heal);
            _player.BaseStats.Mana.Increase(sk.AdditionalMana);
            _player.BaseStats.Mana.Regen(sk.Recover);
            _player.BaseStats.Speed += sk.AdditionalSpeed;
            Battle_Content          += sk.UseMessage + Environment.NewLine;
            OnPropertyChanged("Battle_Content");

            //DO damage
            HitEnemy();

            //enemy turn
            for (Int32 i = 0; i < _map.Current.Special.Enemies.Count; ++i)
            {
                if (_map.Current.Special.Enemies[i].TotalStats.Health.Current <= 0)
                {
                    continue;
                }

                EnemyTurn(i);
            }

            //remove effects
            EndOfTurnMaintainPlayer();

            //if end
            if (_map.Current.Special.Enemies.All(enemy => enemy.TotalStats.Health.Current <= 0))
            {
                while (_player.ActiveEffects.Count > 0)
                {
                    EndOfTurnMaintainPlayer();
                }

                OnBattleEnd();
            }
        }