/// <summary> /// Creates an instance of <see cref="MonsterAttackViewModel"/> /// </summary> public MonsterAttackViewModel(MonsterAttackModel monsterAttackModel) { _name = monsterAttackModel.Name; _toHit = monsterAttackModel.ToHit.Contains("+") ? monsterAttackModel.ToHit : "+" + monsterAttackModel.ToHit; _roll = monsterAttackModel.Roll; _toHitVisible = !String.IsNullOrWhiteSpace(monsterAttackModel.ToHit); _rollVisible = !String.IsNullOrWhiteSpace(monsterAttackModel.Roll); }
public MonsterAttackModel AttackMonster(int roomid, int mobid) { var tempId = roomid; if (roomid < 0) { tempId = roomid * -1; } var ssPlayerModel = HttpContext.Session.GetObject <PlayerModel>("ssPlayerModel"); var Attacker = _db.PlayerModel.FirstOrDefault(u => u.Id == ssPlayerModel.Id); var room = _db.Room.FirstOrDefault(r => r.Id == tempId); var monsterListString = room.MonsterList; var monsterIdList = monsterListString.Split('/').ToList(); List <Monster> monsterList = new List <Monster>(); foreach (var item in monsterIdList) { if (Int32.Parse(item) != 0) { monsterList.Add(_db.Monster.FirstOrDefault(m => m.Id == Int32.Parse(item))); } } MonsterAttackModel monsterAttackModel = new MonsterAttackModel(); List <int> PlayerAttacks = new List <int>(); List <int> MonsterAttacks = new List <int>(); List <int> PlayerHpLog = new List <int>(); List <int> MonsterHpLog = new List <int>(); PlayerHpLog.Add(Attacker.TotalHp); //SINGLE ATTACK if (roomid > 0) { //Const`s: //var Mob = monsterList[mobid]; var Mob = _db.Monster.FirstOrDefault(m => m.Id == mobid); MonsterHpLog.Add(Mob.Hp); int PlayerCurrentAtt = 1; int MobCurrentAtt = 1; int PlayerCurrentHp = Attacker.TotalHp; int PlayerCrit = Attacker.TotalCrit; int PlayerEvasion = Attacker.TotalEvasion; int PlayerBlock = Attacker.TotalBlock; int MobCurrentHp = Mob.Hp; int MobMaxAtt = Mob.MaxAttack; int MobMinAtt = Mob.MinAttack; int MobBlock = Mob.Block; //Logic while (PlayerCurrentHp > 0 && MobCurrentHp > 0) { //Step1 Random rnd = new Random(); int AttackVariationAttacker = rnd.Next(1, 12); PlayerCurrentAtt = Attacker.TotalAttack + (int)Math.Ceiling((double)Attacker.TotalAttack * ((double)AttackVariationAttacker / 100)); int RandomIntforBlock = rnd.Next(1, 100); if (RandomIntforBlock < MobBlock + 25) { PlayerCurrentAtt = 0; } int RandomIntforCrit = rnd.Next(1, 100); if (RandomIntforCrit < PlayerCrit + 50) { PlayerCurrentAtt -= (PlayerCurrentAtt * 3); } // if (PlayerCurrentAtt == -1) { MobCurrentHp = MobCurrentHp + 0; } else { if (PlayerCurrentAtt < 0) { MobCurrentHp += PlayerCurrentAtt; } else { MobCurrentHp -= PlayerCurrentAtt; } } //logs PlayerAttacks.Add(PlayerCurrentAtt); MonsterHpLog.Add(MobCurrentHp); //Step2 Random rnd1 = new Random(); int DeffenderVariationAttacker = rnd1.Next(1, 12); MobCurrentAtt = Mob.MaxAttack + (int)Math.Ceiling((double)Mob.MaxAttack * ((double)DeffenderVariationAttacker / 100)); int RandomIntforBlock1 = rnd1.Next(1, 100); if (RandomIntforBlock1 < PlayerBlock + 25) { MobCurrentAtt = 0; } int RandomIntforEva1 = rnd.Next(1, 100); if (RandomIntforEva1 < PlayerEvasion + 25) { MobCurrentAtt = -1; } else { // if (MobCurrentAtt == -1) { PlayerCurrentHp = PlayerCurrentHp + 0; } else { if (MobCurrentAtt < 0) { PlayerCurrentHp += MobCurrentAtt; } else { PlayerCurrentHp -= MobCurrentAtt; } } } //logs MonsterAttacks.Add(MobCurrentAtt); PlayerHpLog.Add(PlayerCurrentHp); } monsterAttackModel.MonsterAttacks = MonsterAttacks; monsterAttackModel.PlayerAttacks = PlayerAttacks; monsterAttackModel.MonsterCurrentHpLog = MonsterHpLog; monsterAttackModel.PlayerCurrentHpLog = PlayerHpLog; return(monsterAttackModel); } //AOE ATTACK else { return(monsterAttackModel); } }