//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); } }