Пример #1
0
        //Person - тот кто атакует
        //метод использует ссылки на структуры CurrentPoint
        //чтобы сохранить значения структур в методе
        //затем изменить их на время действия метода
        //и, после, вернуть им изначальные значения
        public bool Do(Attacker creature, ref CurrentPoint CharacterPoint, ref CurrentPoint EnemyPoint)
        {
            Random rand = new Random();

            if (creature == Attacker.Enemy)
            {
                temp = new Characteristic(Attacker.Enemy, ref CharacterPoint, ref EnemyPoint);

                EnemyPoint.attack  = EnemyPoint.attack * (uint)current.BuffAttack / 100;
                EnemyPoint.defence = EnemyPoint.defence * (uint)current.BuffDefence / 100;
                EnemyPoint.speed   = EnemyPoint.speed * (uint)current.BuffSpeed / 100;

                CharacterPoint.attack  = CharacterPoint.attack * (uint)current.DebuffAttack / 100;
                CharacterPoint.defence = CharacterPoint.defence * (uint)current.DebuffDefence / 100;
                CharacterPoint.speed   = CharacterPoint.speed * (uint)current.DebuffSpeed / 100;

                if (GetAttackProbability(creature) == 100 || rand.Next(100) <= GetAttackProbability(creature))
                {
                    if (CharacterPoint.defence < EnemyPoint.attack)
                    {
                        if (CharacterPoint.HP <= -CharacterPoint.defence + EnemyPoint.attack)
                        {
                            CharacterPoint.HP = 0;
                        }
                        else
                        {
                            CharacterPoint.HP += CharacterPoint.defence - EnemyPoint.attack;
                        }
                    }
                    temp.Back(Attacker.Enemy, ref CharacterPoint, ref EnemyPoint);
                    return(true);
                }
                temp.Back(Attacker.Enemy, ref CharacterPoint, ref EnemyPoint);
                return(false);
            }
            else
            {
                temp = new Characteristic(Attacker.Player, ref CharacterPoint, ref EnemyPoint);

                CharacterPoint.attack  = CharacterPoint.attack * current.BuffAttack / 100;
                CharacterPoint.defence = CharacterPoint.defence * current.BuffDefence / 100;
                CharacterPoint.speed   = CharacterPoint.speed * current.BuffSpeed / 100;

                EnemyPoint.attack  = EnemyPoint.attack * current.DebuffAttack / 100;
                EnemyPoint.defence = EnemyPoint.defence * current.DebuffDefence / 100;
                EnemyPoint.speed   = EnemyPoint.speed * current.DebuffSpeed / 100;

                if (GetAttackProbability(creature) == 100 || rand.Next(100) <= GetAttackProbability(creature))
                {
                    if (EnemyPoint.defence < CharacterPoint.attack)
                    {
                        if (EnemyPoint.HP <= -EnemyPoint.defence + CharacterPoint.attack)
                        {
                            EnemyPoint.HP = 0;
                        }
                        else
                        {
                            EnemyPoint.HP += EnemyPoint.defence - CharacterPoint.attack;
                        }
                    }
                    temp.Back(Attacker.Player, ref CharacterPoint, ref EnemyPoint);
                    return(true);
                }
                temp.Back(Attacker.Player, ref CharacterPoint, ref EnemyPoint);
                return(false);
            }
        }