private CMob MobBattle(CCultivator cult) { cult.Event = new CCultivator.LastEvent(); Random rnd = new Random(); CMob enemy = GMobsList.MobsList[rnd.Next(0, GMobsList.MobsList.Count)]; enemy.CalcStats(cult); int cultHp = (int)(3 + (cult.RealStats().MainStats.Endurance + rnd.Next(3, 18)) / 5); int enemyHp = (int)(3 + (enemy.Endurance + rnd.Next(3, 18)) / 5); int cultStr = (int)cult.RealStats().MainStats.Strength; int cultAgility = (int)cult.RealStats().MainStats.Agility; int cultInt = (int)cult.RealStats().MainStats.Intelligence; while (!IsDead(cultHp, enemyHp)) { // Agility damage + crit var agilityDamage = cultAgility > enemy.Agility ? (int)(Difference(cultAgility, enemy.Agility) * rnd.Next(3, 18) - rnd.Next(3, 18)) : (int)(rnd.Next(3, 18) - Difference(cultAgility, enemy.Agility) * rnd.Next(3, 18)); bool crit = rnd.Next(1, 20) > 18; if (agilityDamage >= 0) { enemyHp -= agilityDamage + agilityDamage * (crit ? 1 : 0); cult.Event.Crits += crit ? 1 : 0; } else { cultHp -= agilityDamage + agilityDamage * (crit ? 1 : 0); } if (IsDead(cultHp, enemyHp)) { break; } // Str scope var strengthDamage = cultStr > enemy.Strength ? (int)(Difference(cultStr, enemy.Strength) * rnd.Next(3, 18) - rnd.Next(3, 18)) : (int)(rnd.Next(3, 18) - Difference(cultStr, enemy.Strength) * rnd.Next(3, 18)); bool overTry = rnd.Next(1, 20) > 18; if (strengthDamage >= 0) { enemyHp -= strengthDamage * (overTry ? 0 : 1); cult.Event.TriesHard += overTry ? 1 : 0; } else { cultHp -= strengthDamage * (overTry ? 0 : 1); } if (IsDead(cultHp, enemyHp)) { break; } //Int scope var intDamage = cultInt > enemy.Intelligence ? (int)(Difference(cultInt, enemy.Intelligence) * rnd.Next(3, 18) - rnd.Next(3, 18)) : (int)(rnd.Next(3, 18) - Difference(cultInt, enemy.Intelligence) * rnd.Next(3, 18)); bool heal = rnd.Next(1, 20) > 18; if (intDamage >= 0) { if (heal) { cultHp += intDamage; cult.Event.Heals++; } else { enemyHp -= intDamage; } } else { if (heal) { enemyHp += intDamage; } else { cultHp -= intDamage; } } } if (cultHp <= 0) { cult.Gold = Math.Max(cult.Gold - enemy.Gold, 0); cult.Event.LastEventStory = "Вы проиграли злодею, известному как" + enemy.Name + "и он благородно ограбил вас на " + enemy.Gold + " золота. Не плачьте!\n"; cult.Points = Math.Max(0, cult.Points - 1); } else { cult.Gold += enemy.Gold; cult.Points += enemy.Difficulty; cult.Event.LastEventStory = "Ну и зачем ты избил малыша" + enemy.Name + "\n еще и деньги забрали: " + enemy.Gold + " золота.\nНе злорадствуй, пока не побили!\n"; } return(enemy); }
private void PvPBattle(CCultivator cult1) { cult1.Event = new CCultivator.LastEvent(); if (PlayersGathering.Count <= 1) { cult1.Event.LastEventStory = "Никого нет, увы."; } else { Random rnd = new Random(); CCultivator cult2 = PlayersGathering.Peek(); while (cult1 == cult2) { cult2 = PlayersGathering.Peek(); } cult2.Event = new CCultivator.LastEvent(); int cult1Hp = (int)(3 + (cult1.RealStats().MainStats.Endurance + rnd.Next(3, 18)) / 5); int cult1Str = (int)cult1.RealStats().MainStats.Strength; int cult1Agility = (int)cult1.RealStats().MainStats.Agility; int cult1Int = (int)cult1.RealStats().MainStats.Intelligence; int cult2Hp = (int)(3 + (cult2.RealStats().MainStats.Endurance + rnd.Next(3, 18)) / 5); int cult2Str = (int)cult1.RealStats().MainStats.Strength; int cult2Agility = (int)cult1.RealStats().MainStats.Agility; int cult2Int = (int)cult1.RealStats().MainStats.Intelligence; while (IsNotDead(cult1Hp, cult2Hp)) { // Agility damage + crit var agilityDamage = cult1Agility > cult2Agility ? (int)(Difference(cult1Agility, cult2Agility) * rnd.Next(3, 18) + rnd.Next(3, 18) - rnd.Next(3, 18)) : (int)(rnd.Next(3, 18) - Difference(cult1Agility, cult2Agility) * rnd.Next(3, 18) - rnd.Next(3, 18)); bool crit = rnd.Next(1, 20) > 18; if (agilityDamage >= 0) { cult2Hp -= agilityDamage + agilityDamage * (crit ? 1 : 0); cult1.Event.Crits += crit ? 1 : 0; } else { cult1Hp -= Math.Abs(agilityDamage) + Math.Abs(agilityDamage * (crit ? 1 : 0)); cult2.Event.Crits += crit ? 1 : 0; } if (!IsNotDead(cult1Hp, cult2Hp)) { break; } // Str scope var strengthDamage = cult1Str > cult2Str ? (int)(Difference(cult1Str, cult2Str) * rnd.Next(3, 18) + rnd.Next(3, 18) - rnd.Next(3, 18)) : (int)(rnd.Next(3, 18) - Difference(cult1Str, cult2Str) * rnd.Next(3, 18) - rnd.Next(3, 18)); bool overTry = rnd.Next(1, 20) > 18; if (strengthDamage >= 0) { cult2Hp -= strengthDamage * (overTry ? 0 : 1); cult1.Event.TriesHard += overTry ? 1 : 0; } else { cult1Hp -= Math.Abs(strengthDamage * (overTry ? 0 : 1)); cult2.Event.TriesHard += overTry ? 1 : 0; } if (!IsNotDead(cult1Hp, cult2Hp)) { break; } //Int scope var intDamage = cult1Int > cult2Int ? (int)(Difference(cult1Int, cult2Int) * rnd.Next(3, 18) + rnd.Next(3, 18) - rnd.Next(3, 18)) : (int)(rnd.Next(3, 18) - Difference(cult1Int, cult2Int) * rnd.Next(3, 18) - rnd.Next(3, 18)); bool heal = rnd.Next(1, 20) > 18; if (intDamage >= 0) { if (heal) { cult1Hp += intDamage; cult1.Event.Heals++; } else { cult2Hp -= intDamage; } } else { if (heal) { cult2Hp += Math.Abs(intDamage); cult2.Event.Heals++; } else { cult1Hp -= Math.Abs(intDamage); } } } if (cult1Hp <= 0) { int goldToLose = (int)(cult1.Gold * 0.2); cult2.Gold += goldToLose; cult1.Gold -= goldToLose; cult1.Event.LastEventStory = "Вы проиграли злодею, известному как" + cult2.Name + " и он благородно ограбил вас на " + goldToLose + " золота. Не плачьте!\n Хотя бы не бот!"; cult2.Event.LastEventStory = "Ну и зачем ты избил малыша " + cult1.Name + "\n еще и деньги забрали: " + goldToLose + " золота.\nНе злорадствуй, пока не побили!\n"; cult1.Points = Math.Max(0, cult1.Points - 1); cult2.Points += 5; } else { int goldToLose = (int)(cult2.Gold * 0.2); cult1.Gold += goldToLose; cult2.Gold -= goldToLose; cult2.Event.LastEventStory = "Вы проиграли злодею, известному как" + cult1.Name + " и он благородно ограбил вас на " + goldToLose + " золота. Не плачьте!\n Хотя бы не бот!"; cult1.Event.LastEventStory = "Ну и зачем ты избил малыша " + cult2.Name + "\n еще и деньги забрали: " + goldToLose + " золота.\nНе злорадствуй, пока не побили!\n"; cult2.Points = Math.Max(0, cult2.Points - 1); cult1.Points += 5; } } }