public ActionResult RandomDuel() { var ctx = new ProjectStrawberryEntities(); string currentUserId = currentUserId = User.Identity.GetUserId(); if (ctx.Arenas.Any(a => a.Character.Level == ctx.Characters.FirstOrDefault(c => c.AccountId == currentUserId && c.Alive).Level&& a.CharacterId != ctx.Characters.FirstOrDefault(c => c.AccountId == currentUserId).Id)) { //Battle(); } else { if (!ctx.Arenas.Any(a => a.Character.AccountId == currentUserId && a.Character.Alive)) { ctx.Arenas.Add(new Arena { CharacterId = ctx.Characters.FirstOrDefault(c => c.AccountId == currentUserId && c.Alive).Id, Forfeit = 25, Queued = DateTime.Now }); ctx.SaveChanges(); } else { return(PartialView("RandomDuel", true)); } } return(PartialView("RandomDuel", false)); }
public ActionResult Update() { string currentUserId = currentUserId = User.Identity.GetUserId(); var ctx = new ProjectStrawberryEntities(); //var combatlog = ctx.CombatLogs.FirstOrDefault(c => c.Character.AccountId == currentUserId && c.Character1.AccountId == currentUserId); //if (combatlog != null) //{ // List<Round> list = new List<Round>(); // using (MemoryStream ms = new MemoryStream(combatlog.Log)) // { // BinaryFormatter bf = new BinaryFormatter(); // list = (List<Round>)bf.Deserialize(ms); // } // return PartialView("CombatLog", list); //} var arenaModel = ctx.Arenas.FirstOrDefault(a => a.Character.AccountId == currentUserId); DateTime currentDateTime = DateTime.Now; DateTime queuedDateTime = arenaModel.Queued; // if any combatlog.date > queueddatetime show dat if (queuedDateTime.AddSeconds(2) <= currentDateTime) { var combatLog = BattleNPC(arenaModel.CharacterId, arenaModel.Forfeit, null, null); ctx.SaveChanges(); return(PartialView("CombatLog", combatLog)); } return(PartialView("")); }
public ActionResult EquipWeapon(int id, int hand, int weaponId) { string currentUserId = User.Identity.GetUserId(); var ctx = new ProjectStrawberryEntities(); int characterId = ctx.Characters.FirstOrDefault(c => c.AccountId == currentUserId && c.Alive).Id; bool doesUserOwnWeapon = ctx.EquipmentCharacters.Any(wc => wc.Id == id && wc.CharacterId == characterId && wc.WeaponId == weaponId); bool isMainHandAlreadyEquipped = ctx.EquipmentCharacters.Any(wc => wc.Id == id && wc.CharacterId == characterId && wc.MainHandEquipped == true); bool isOffHandAlredyEquipped = ctx.EquipmentCharacters.Any(wc => wc.Id == id && wc.CharacterId == characterId && wc.OffHandEquipped == true); if (!isMainHandAlreadyEquipped && hand == 1 && doesUserOwnWeapon) { ctx.EquipmentCharacters .FirstOrDefault(wc => wc.Id == id && wc.OffHandEquipped == false) .MainHandEquipped = true; ctx.SaveChanges(); } else if (!isOffHandAlredyEquipped && hand == 2 && doesUserOwnWeapon) { ctx.EquipmentCharacters .FirstOrDefault(wc => wc.Id == id && wc.MainHandEquipped == false) .OffHandEquipped = true; ctx.SaveChanges(); } return(RedirectToAction("GetEquipment")); }
public string BuyArmor(string id) { int armorId = -1; int.TryParse(id, out armorId); if (armorId > 0) { var ctx = new ProjectStrawberryEntities(); var currentUser = User.Identity.GetUserId(); var armor = ctx.Armors.FirstOrDefault(s => s.Id == armorId); var character = ctx.Characters.FirstOrDefault(c => c.AccountId == currentUser && c.Alive); if (armor != null && character != null && character.Gold - armor.Price >= 0) { ctx.EquipmentCharacters.Add(new EquipmentCharacter { Armor = armor, Character = character }); character.Gold -= armor.Price; ctx.SaveChanges(); return("You pay the storeowner " + armor.Price + " glods and recieve " + armor.Name); } else { return("The storeowner looks at you with an eyebrow raised"); } } else { return("The storeowner looks at you with an eyebrow raised"); } }
public ActionResult GetCharacter(int id) { var ctx = new ProjectStrawberryEntities(); //var character = ctx.Characters.Select().FirstOrDefault(c => c.Id == id); return(View()); }
public ActionResult Arena() { var ctx = new ProjectStrawberryEntities(); string currentUserId = currentUserId = User.Identity.GetUserId(); if (ctx.Arenas.Any(a => a.Character.AccountId == currentUserId && a.Character.Alive)) { return(PartialView("RandomDuel", true)); } return(PartialView("Arena")); }
// GET: Leaderboard public ActionResult Index() { var ctx = new ProjectStrawberryEntities(); List <LeaderboardModel> list = new List <LeaderboardModel>(); list = ctx.Characters.Select(c => new LeaderboardModel { Id = c.Id, Level = c.Level, Name = c.Name, Alive = c.Alive }).OrderByDescending(c => c.Level).Take(10).Where(c => c.Alive).ToList(); return(PartialView("index", list)); }
public ActionResult Delete() { string currentUserId = User.Identity.GetUserId(); var ctx = new ProjectStrawberryEntities(); Character character = ctx.Characters.FirstOrDefault(c => c.AccountId == currentUserId && c.Alive); character.Alive = false; ctx.SaveChanges(); return(RedirectToAction("Index")); }
// update character to DB public void UpdateCharacter(CharacterCombatModel model) { var ctx = new ProjectStrawberryEntities(); var character = ctx.Characters.FirstOrDefault(c => c.Id == model.Id); character.Alive = model.Alive; character.Gold = model.Gold; character.Health = model.Health; character.Level = model.Level; ctx.SaveChanges(); }
public ActionResult UnequipWeapon(int id, int hand) // Måste säkra denna metod så inte andra spelare ändrar status på vapen andras karaktärer { var ctx = new ProjectStrawberryEntities(); if (hand == 1) { ctx.EquipmentCharacters.FirstOrDefault(wc => wc.Id == id).MainHandEquipped = false; } else if (hand == 2) { ctx.EquipmentCharacters.FirstOrDefault(wc => wc.Id == id).OffHandEquipped = false; } ctx.SaveChanges(); return(RedirectToAction("GetEquipment")); }
public ActionResult UnequipArmor(int id) { string currentUserId = User.Identity.GetUserId(); var ctx = new ProjectStrawberryEntities(); int characterId = ctx.Characters.FirstOrDefault(c => c.AccountId == currentUserId && c.Alive).Id; bool doesUserOwnEqiupment = ctx.EquipmentCharacters.Any(ec => ec.CharacterId == characterId && ec.Id == id && ec.Equipped); if (doesUserOwnEqiupment) { ctx.EquipmentCharacters.FirstOrDefault(ec => ec.Id == id && ec.CharacterId == characterId).Equipped = false; ctx.SaveChanges(); } return(RedirectToAction("GetEquipment")); }
private static void SaveCombatLogToDatabase(ProjectStrawberryEntities ctx, List <Round> fullFight, CharacterCombatModel character, string spoiler) { byte[] log; using (MemoryStream ms = new MemoryStream()) { BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(ms, fullFight); log = ms.ToArray(); ctx.CombatLogs.Add(new CombatLog() { Player = character.Id, Log = log, GameDate = DateTime.Now, Spoiler = spoiler }); ctx.SaveChanges(); } }
//public ActionResult GetBoughtWeapons() //{ // var weaponEquipment = new List<Models.EquipmentModel>(); // var ctx = new ProjectStrawberryEntities(); // string currentUserId = User.Identity.GetUserId(); // foreach (var charEquipment in ctx.WeaponCharacters.Where(wc => wc.Character.AccountId == currentUserId)) // { // weaponEquipment.Add(new Models.EquipmentModel { Id = charEquipment.Id, MainHandEquipped = charEquipment.MainHandEquipped, OffHandEquipped = charEquipment.OffHandEquipped, WeaponId = charEquipment.WeaponId, WeaponName = ctx.Weapons.FirstOrDefault(w => w.Id == charEquipment.WeaponId).Name }); // } // return PartialView("_BoughtWeapons", weaponEquipment); //} public ActionResult GetEquipment() { var equipment = new List <EquipmentModelTest>(); var ctx = new ProjectStrawberryEntities(); string currentUserId = User.Identity.GetUserId(); foreach (var item in ctx.EquipmentCharacters.Where(ec => ec.Character.AccountId == currentUserId && ec.Character.Alive)) { if (item.ArmorId != null) { equipment.Add(new EquipmentModelTest { Id = item.Id, ModelArmor = new ArmorModel { Id = item.Armor.Id, Name = item.Armor.Name, ModelArmorType = new ArmorTypeModel { Id = item.Armor.ArmorType.Id, Name = item.Armor.ArmorType.Name } }, Equipped = item.Equipped }); } else if (item.ShieldId != null) { equipment.Add(new EquipmentModelTest { Id = item.Id, ModelShield = ctx.Shields.Select(s => new ShieldModel { Id = s.Id, Name = s.Name, Weight = s.Weight, BlockValue = s.BlockValue }).FirstOrDefault(s => s.Id == item.ShieldId), OffHandEquipped = item.OffHandEquipped }); } else if (item.WeaponId != null) { equipment.Add(new EquipmentModelTest { Id = item.Id, MainHandEquipped = item.MainHandEquipped, OffHandEquipped = item.OffHandEquipped, ModelWeapon = new WeaponModel { Id = item.Weapon.Id, Name = item.Weapon.Name, WeaponType = new WeaponTypeModel { Id = item.Weapon.WeaponType.Id, Name = item.Weapon.WeaponType.Name } } }); } } return(PartialView("_BoughtEquipment", equipment)); }
public ActionResult GetEquipment() { var ctx = new ProjectStrawberryEntities(); List <MarketEquipment> equipment = new List <MarketEquipment>(); foreach (var armor in ctx.Armors) { if (armor.TourmanemntReward == false) { equipment.Add(new MarketEquipment { ArmorId = armor.Id, Name = armor.Name, Price = armor.Price, AbsorbValue = armor.ArmorValue, Weight = armor.Weight, EquipmentType = armor.ArmorType.Name }); } } foreach (var weapon in ctx.Weapons) { if (weapon.TournamentReward == false) { equipment.Add(new MarketEquipment { WeaponId = weapon.Id, Name = weapon.Name, Price = (int)weapon.Price, MinimumDamage = weapon.MinimumDamage, MaximumDamage = weapon.MaximumDamage, Weight = weapon.Weight, EquipmentType = weapon.WeaponType.Name }); } } foreach (var shield in ctx.Shields) { if (shield.TourmanemntReward == false) { equipment.Add(new MarketEquipment { ShieldId = shield.Id, Name = shield.Name, Price = shield.Price, AbsorbValue = shield.BlockValue, Weight = shield.Weight, EquipmentType = "Shield" }); } } return(PartialView("_BuyEquipment", equipment)); }
public CharacterCombatModel GenerateMirrorNpc() { ctx = new ProjectStrawberryEntities(); npcLevel = model.Level; npcAttribute = 60 + (npcLevel - 1) * 15; var mainHandWeaponType = model.MainHand.WeaponType.Name.ToLower(); if (model.MainHand != null) { npcAttribute -= model.MainHand.ReqWeaponMastery; } if (model.OffHand.shld != null) { vitality = Math.Round(npcAttribute * 0.50); strength = Math.Round(npcAttribute * 0.25); block = Math.Round(npcAttribute * 0.25); } else if (mainHandWeaponType == "axe") { vitality = Math.Round(npcAttribute * 0.55); strength = Math.Round(npcAttribute * 0.25); quickness = Math.Round(npcAttribute * 0.10); evasion = Math.Round(npcAttribute * 0.05); parry = Math.Round(npcAttribute * 0.05); axe = model.Axe; } else if (mainHandWeaponType == "dagger") { vitality = Math.Round(npcAttribute * 0.50); strength = Math.Round(npcAttribute * 0.25); evasion = Math.Round(npcAttribute * 0.25); dagger = model.Dagger; } else if (mainHandWeaponType == "mace") { vitality = Math.Round(npcAttribute * 0.40); strength = Math.Round(npcAttribute * 0.40); parry = Math.Round(npcAttribute * 0.20); mace = model.Mace; } else if (mainHandWeaponType == "polearm") { vitality = Math.Round(npcAttribute * 0.50); strength = Math.Round(npcAttribute * 0.35); evasion = Math.Round(npcAttribute * 0.15); polearm = model.Polearm; } else if (mainHandWeaponType == "spear") { vitality = Math.Round(npcAttribute * 0.50); strength = Math.Round(npcAttribute * 0.30); quickness = Math.Round(npcAttribute * 0.20); spear = model.Spear; } else if (mainHandWeaponType == "sword") { vitality = Math.Round(npcAttribute * 0.45); strength = Math.Round(npcAttribute * 0.30); parry = Math.Round(npcAttribute * 0.25); sword = model.Sword; } else { vitality = Math.Round(npcAttribute * 0.65); strength = Math.Round(npcAttribute * 0.35); } var npc = new CharacterCombatModel() { Name = firstName + " " + lastName, Vitality = (int)vitality, Axe = (int)axe, Block = (int)block, Dagger = (int)dagger, Evasion = (int)evasion, Health = (int)vitality, Level = npcLevel, Mace = (int)mace, Parry = (int)parry, Polearm = (int)polearm, Quickness = (int)quickness, Spear = (int)spear, Stamina = (int)stamina, Strength = (int)strength, Sword = (int)sword, }; var fist = new WeaponModel() { MinimumDamage = 0, MaximumDamage = 0, Name = "fist", TwoHanded = false, WeaponType = new WeaponTypeModel() { Name = "else" }, }; var skin = new ArmorModel() { ArmorValue = 0, Name = "skin", }; if (model.MainHand != null) { npc.MainHand = model.MainHand; } else { npc.MainHand = fist; } if (model.OffHand != null && !model.MainHand.TwoHanded) { npc.OffHand = model.OffHand; } npc.Equipment = model.Equipment; return(npc); }
public List <Round> BattleNPC(int player1Id, int player1Forfeit, int?player2Id, int?player2Forfeit) { var ctx = new ProjectStrawberryEntities(); var random = new Random(); var generate = new CombatTextGenerator(); var ccm = new CharacterModelGenerator(); // Generate Player1 model and properties var player1 = new CharacterCombatModel(); player1 = ccm.ModelizeCharacter(player1Id); double player1HitChanceMainHand = PlayerHitChance(player1); double player1HitChanceOffHand = PlayerHitChance(player1); double player1ParryChance = diminishing_returns(player1.Parry, 7.5); double player1DodgeChance = diminishing_returns(player1.Evasion, 7.5); double player1BlockChance = diminishing_returns(player1.Block, 7.5); bool player1HasShield = player1.OffHand.shld != null; bool player1HasWeapon = player1.MainHand != null && player1.OffHand.wep != null; // Generate Player2 model and properties var player2 = new CharacterCombatModel(); if (player2Id != null) { player2 = ccm.ModelizeCharacter((int)player2Id); } else { var gen = new NpcGenerator(player1, random.Next(0, 47), random.Next(0, 71)); player2 = gen.GenerateMirrorNpc(); player2Forfeit = 20; } double player2HitChanceMainHand = PlayerHitChance(player2); double player2HitChanceOffHand = PlayerHitChance(player2); double player2ParryChance = diminishing_returns(player2.Parry, 7.5); double player2DodgeChance = diminishing_returns(player2.Evasion, 7.5); double player2BlockChance = diminishing_returns(player2.Block, 7.5); bool player2HasShield = player2.OffHand.shld != null; bool player2HasWeapon = player2.MainHand != null && player2.OffHand.wep != null; // Combatlog properties List <Round> fullFight = new List <Round>(); int roundNr = 0; string roundLog = ""; string spoiler = ""; bool keepFighting = true; bool player1HasHighestQuickness = player1.Quickness >= player2.Quickness; bool player1Won = false; bool player2Won = false; while (keepFighting) { int combatflavorindex = 2; int damage = 0; int bonusDamage = 0; int minDamage = 0; int maxDamage = 0; roundNr++; // Player1 # of attacks + Avoidance chance bool player1AttackWithMainHand = false; bool player1AttackWithOffHand = false; AttacksPlayerCanDoThisRound(player1, ref player1AttackWithMainHand, ref player1AttackWithOffHand); // Player2 # of attacks. bool player2AttackWithMainHand = false; bool player2AttackWithOffHand = false; AttacksPlayerCanDoThisRound(player2, ref player2AttackWithMainHand, ref player2AttackWithOffHand); if (player1HasHighestQuickness) { if (keepFighting && player1AttackWithMainHand) { bonusDamage = player1.Strength / 10; minDamage = player1.MainHand.MinimumDamage + bonusDamage; maxDamage = player1.MainHand.MaximumDamage + bonusDamage; var bodyPartId = DiceForBodyPart(random.Next(1, 97), player1.MainHand.WeaponType.Name); var bodyPart = player2.Equipment.FirstOrDefault(e => e.ArmorTypeId == bodyPartId); if (bodyPart == null) { bodyPart = new ArmorModel() { ArmorValue = 0, Name = "skin" }; } if (minDamage - bodyPart.ArmorValue < 0) { minDamage = 0; } else { minDamage -= bodyPart.ArmorValue; } if (maxDamage - bodyPart.ArmorValue < 0) { maxDamage = 0; } else { maxDamage -= bodyPart.ArmorValue; } string action = WhatHappenedThatHit(player1HitChanceMainHand, player2DodgeChance, player2ParryChance, player2BlockChance, player2HasShield, player2HasWeapon, random); if (action == "h") { damage = random.Next(minDamage, maxDamage + 1); roundLog += generate.CombatTextMaleAttacker(player1.Name, player2.Name, damage, bodyPart.Name, random.Next(0, combatflavorindex)); player2.Health -= damage; } else if (action == "b") { roundLog += generate.CombatTextBlock(player1.Name, player2.Name, player1.MainHand.Name.ToLower(), player2.OffHand.shld.Name, random.Next(0, 1)); } else if (action == "p") { roundLog += generate.CombatTextParry(player1.Name, player2.Name, random.Next(0, 1)); } else if (action == "d") { roundLog += generate.CombatTextDodge(player1.Name, player1.MainHand.Name, player2.Name, random.Next(0, 1)); } player1AttackWithMainHand = false; } else if (keepFighting && player1AttackWithOffHand) { bonusDamage = player1.Strength / 10; minDamage = player1.OffHand.wep.MinimumDamage + bonusDamage; maxDamage = player1.OffHand.wep.MaximumDamage + bonusDamage; var bodyPartId = DiceForBodyPart(random.Next(1, 97), player1.OffHand.wep.Name); var bodyPart = player2.Equipment.FirstOrDefault(e => e.ArmorTypeId == bodyPartId); if (minDamage - bodyPart.ArmorValue < 0) { minDamage = 0; } else { minDamage -= bodyPart.ArmorValue; } if (maxDamage - bodyPart.ArmorValue < 0) { maxDamage = 0; } else { maxDamage -= bodyPart.ArmorValue; } string action = WhatHappenedThatHit(player1HitChanceMainHand, player2DodgeChance, player2ParryChance, player2BlockChance, player2HasShield, player2HasWeapon, random); if (action == "h") { damage = random.Next(minDamage, maxDamage + 1); roundLog += generate.CombatTextMaleAttacker(player1.Name, player2.Name, damage, bodyPart.Name, random.Next(0, combatflavorindex)); player2.Health -= damage; } else if (action == "b") { roundLog += generate.CombatTextBlock(player1.Name, player2.Name, player1.MainHand.Name.ToLower(), player2.OffHand.shld.Name, random.Next(0, 1)); } else if (action == "p") { roundLog += generate.CombatTextParry(player1.Name, player2.Name, random.Next(0, 1)); } else if (action == "d") { roundLog += generate.CombatTextDodge(player1.Name, player1.MainHand.Name, player2.Name, random.Next(0, 1)); } player1AttackWithOffHand = false; } // Check if Player2 forfeits if (player2.Health <= player2.Vitality * (player2Forfeit / 100)) { keepFighting = false; player1Won = true; } if (keepFighting && player2AttackWithMainHand) { bonusDamage = player2.Strength / 10; minDamage = player2.MainHand.MinimumDamage + bonusDamage; maxDamage = player2.MainHand.MaximumDamage + bonusDamage; var bodyPartId = DiceForBodyPart(random.Next(1, 97), player2.MainHand.Name); var bodyPart = player1.Equipment.FirstOrDefault(ec => ec.ArmorTypeId == bodyPartId); if (minDamage - bodyPart.ArmorValue < 0) { minDamage = 0; } else { minDamage -= bodyPart.ArmorValue; } if (maxDamage - bodyPart.ArmorValue < 0) { maxDamage = 0; } else { maxDamage -= bodyPart.ArmorValue; } string action = WhatHappenedThatHit(player2HitChanceMainHand, player1DodgeChance, player1ParryChance, player1BlockChance, player1HasShield, player1HasWeapon, random); if (action == "h") { damage = random.Next(minDamage, maxDamage + 1); roundLog += generate.CombatTextMaleAttacker(player2.Name, player1.Name, damage, bodyPart.Name, random.Next(0, combatflavorindex)); player1.Health -= damage; } else if (action == "b") { roundLog += generate.CombatTextBlock(player2.Name, player1.Name, player2.MainHand.Name.ToLower(), player1.OffHand.shld.Name, random.Next(0, 1)); } else if (action == "p") { roundLog += generate.CombatTextParry(player2.Name, player1.Name, random.Next(0, 1)); } else if (action == "d") { roundLog += generate.CombatTextDodge(player2.Name, player2.MainHand.Name, player1.Name, random.Next(0, 1)); } player2AttackWithMainHand = false; } else if (keepFighting && player2AttackWithOffHand) { bonusDamage = player2.Strength / 10; minDamage = player2.OffHand.wep.MinimumDamage + bonusDamage; maxDamage = player2.OffHand.wep.MaximumDamage + bonusDamage; var bodyPartId = DiceForBodyPart(random.Next(1, 97), player2.OffHand.wep.Name); var bodyPart = player1.Equipment.FirstOrDefault(ec => ec.ArmorTypeId == bodyPartId); if (minDamage - bodyPart.ArmorValue < 0) { minDamage = 0; } else { minDamage -= bodyPart.ArmorValue; } if (maxDamage - bodyPart.ArmorValue < 0) { maxDamage = 0; } else { maxDamage -= bodyPart.ArmorValue; } string action = WhatHappenedThatHit(player2HitChanceMainHand, player1DodgeChance, player1ParryChance, player1BlockChance, player1HasShield, player1HasWeapon, random); if (action == "h") { damage = random.Next(minDamage, maxDamage + 1); roundLog += generate.CombatTextMaleAttacker(player2.Name, player1.Name, damage, bodyPart.Name, random.Next(0, combatflavorindex)); player1.Health -= damage; } else if (action == "b") { roundLog += generate.CombatTextBlock(player2.Name, player1.Name, player2.MainHand.Name.ToLower(), player1.OffHand.shld.Name, random.Next(0, 1)); } else if (action == "p") { roundLog += generate.CombatTextParry(player2.Name, player1.Name, random.Next(0, 1)); } else if (action == "d") { roundLog += generate.CombatTextDodge(player2.Name, player2.MainHand.Name, player1.Name, random.Next(0, 1)); } player2AttackWithOffHand = false; } // Check if player1 forfeits if (player1.Health <= player1.Vitality * (player1Forfeit / 100)) { keepFighting = false; player2Won = true; } } else { if (keepFighting && player2AttackWithMainHand) { bonusDamage = player2.Strength / 10; minDamage = player2.MainHand.MinimumDamage + bonusDamage; maxDamage = player2.MainHand.MaximumDamage + bonusDamage; var bodyPartId = DiceForBodyPart(random.Next(1, 97), player2.MainHand.Name); var bodyPart = player1.Equipment.FirstOrDefault(ec => ec.ArmorTypeId == bodyPartId); if (minDamage - bodyPart.ArmorValue < 0) { minDamage = 0; } else { minDamage -= bodyPart.ArmorValue; } if (maxDamage - bodyPart.ArmorValue < 0) { maxDamage = 0; } else { maxDamage -= bodyPart.ArmorValue; } string action = WhatHappenedThatHit(player2HitChanceMainHand, player1DodgeChance, player1ParryChance, player1BlockChance, player1HasShield, player1HasWeapon, random); if (action == "h") { damage = random.Next(minDamage, maxDamage + 1); roundLog += generate.CombatTextMaleAttacker(player2.Name, player1.Name, damage, bodyPart.Name, random.Next(0, combatflavorindex)); player1.Health -= damage; } else if (action == "b") { roundLog += generate.CombatTextBlock(player2.Name, player1.Name, player2.MainHand.Name.ToLower(), player1.OffHand.shld.Name, random.Next(0, 1)); } else if (action == "p") { roundLog += generate.CombatTextParry(player2.Name, player1.Name, random.Next(0, 1)); } else if (action == "d") { roundLog += generate.CombatTextDodge(player2.Name, player2.MainHand.Name, player1.Name, random.Next(0, 1)); } player2AttackWithMainHand = false; } else if (keepFighting && player2AttackWithOffHand) { bonusDamage = player2.Strength / 10; minDamage = player2.OffHand.wep.MinimumDamage + bonusDamage; maxDamage = player2.OffHand.wep.MaximumDamage + bonusDamage; var bodyPartId = DiceForBodyPart(random.Next(1, 97), player2.OffHand.wep.Name); var bodyPart = player1.Equipment.FirstOrDefault(ec => ec.ArmorTypeId == bodyPartId); if (minDamage - bodyPart.ArmorValue < 0) { minDamage = 0; } else { minDamage -= bodyPart.ArmorValue; } if (maxDamage - bodyPart.ArmorValue < 0) { maxDamage = 0; } else { maxDamage -= bodyPart.ArmorValue; } string action = WhatHappenedThatHit(player2HitChanceMainHand, player1DodgeChance, player1ParryChance, player1BlockChance, player1HasShield, player1HasWeapon, random); if (action == "h") { damage = random.Next(minDamage, maxDamage + 1); roundLog += generate.CombatTextMaleAttacker(player2.Name, player1.Name, damage, bodyPart.Name, random.Next(0, combatflavorindex)); player1.Health -= damage; } else if (action == "b") { roundLog += generate.CombatTextBlock(player2.Name, player1.Name, player2.MainHand.Name.ToLower(), player1.OffHand.shld.Name, random.Next(0, 1)); } else if (action == "p") { roundLog += generate.CombatTextParry(player2.Name, player1.Name, random.Next(0, 1)); } else if (action == "d") { roundLog += generate.CombatTextDodge(player2.Name, player2.MainHand.Name, player1.Name, random.Next(0, 1)); } player2AttackWithOffHand = false; } // Check if player 1 forfeits if (player1.Health <= player1.Vitality * (player1Forfeit / 100)) { keepFighting = false; player2Won = true; } if (keepFighting && player1AttackWithMainHand) { bonusDamage = player1.Strength / 10; minDamage = player1.MainHand.MinimumDamage + bonusDamage; maxDamage = player1.MainHand.MaximumDamage + bonusDamage; var bodyPartId = DiceForBodyPart(random.Next(1, 97), player1.MainHand.Name); var bodyPart = player2.Equipment.FirstOrDefault(al => al.ArmorTypeId == bodyPartId); if (minDamage - bodyPart.ArmorValue < 0) { minDamage = 0; } else { minDamage -= bodyPart.ArmorValue; } if (maxDamage - bodyPart.ArmorValue < 0) { maxDamage = 0; } else { maxDamage -= bodyPart.ArmorValue; } string action = WhatHappenedThatHit(player1HitChanceMainHand, player2DodgeChance, player2ParryChance, player2BlockChance, player2HasShield, player2HasWeapon, random); if (action == "h") { damage = random.Next(minDamage, maxDamage + 1); roundLog += generate.CombatTextMaleAttacker(player1.Name, player2.Name, damage, bodyPart.Name, random.Next(0, combatflavorindex)); player2.Health -= damage; } else if (action == "b") { roundLog += generate.CombatTextBlock(player1.Name, player2.Name, player1.MainHand.Name.ToLower(), player2.OffHand.shld.Name, random.Next(0, 1)); } else if (action == "p") { roundLog += generate.CombatTextParry(player1.Name, player2.Name, random.Next(0, 1)); } else if (action == "d") { roundLog += generate.CombatTextDodge(player1.Name, player1.MainHand.Name, player2.Name, random.Next(0, 1)); } player1AttackWithMainHand = false; } else if (keepFighting && player1AttackWithOffHand) { bonusDamage = player1.Strength / 10; minDamage = player2.OffHand.wep.MinimumDamage + bonusDamage; maxDamage = player2.OffHand.wep.MaximumDamage + bonusDamage; var bodyPartId = DiceForBodyPart(random.Next(1, 97), player2.OffHand.wep.Name); var bodyPart = player2.Equipment.FirstOrDefault(al => al.ArmorTypeId == bodyPartId); if (minDamage - bodyPart.ArmorValue < 0) { minDamage = 0; } else { minDamage -= bodyPart.ArmorValue; } if (maxDamage - bodyPart.ArmorValue < 0) { maxDamage = 0; } else { maxDamage -= bodyPart.ArmorValue; } string action = WhatHappenedThatHit(player1HitChanceMainHand, player2DodgeChance, player2ParryChance, player2BlockChance, player2HasShield, player2HasWeapon, random); if (action == "h") { damage = random.Next(minDamage, maxDamage + 1); roundLog += generate.CombatTextMaleAttacker(player1.Name, player2.Name, damage, bodyPart.Name, random.Next(0, combatflavorindex)); player2.Health -= damage; } else if (action == "b") { roundLog += generate.CombatTextBlock(player1.Name, player2.Name, player1.MainHand.Name.ToLower(), player2.OffHand.shld.Name, random.Next(0, 1)); } else if (action == "p") { roundLog += generate.CombatTextParry(player1.Name, player2.Name, random.Next(0, 1)); } else if (action == "d") { roundLog += generate.CombatTextDodge(player1.Name, player1.MainHand.Name, player2.Name, random.Next(0, 1)); } player1AttackWithOffHand = false; } // check if player2 forfeits if (player2.Health <= player2.Vitality * (player2Forfeit / 100)) { keepFighting = false; player1Won = true; } } if (!keepFighting) { if (player1Won) { roundLog += player2.Name + " choose to yield, " + player1.Name + " wins the duel."; spoiler = player1.Name + " defeated " + player2.Name + " in a random duel."; } if (player2Won) { roundLog += player1.Name + " choose to yield, " + player2.Name + " wins the duel."; spoiler = player2.Name + " defeated " + player1.Name + " in a random duel."; } } var round = new Round() { RoundNr = roundNr, Log = roundLog, }; fullFight.Add(round); roundLog = string.Empty; } if (player1.Health < 0) { int survivalDice = random.Next(1, 6); bool characterDied = FateOfCharacter(survivalDice, player1); if (characterDied) { player1.Alive = false; roundNr++; var round = new Round() { RoundNr = roundNr, Log = player1.Name + " dies from the wounds ", }; } } else if (player2.Health < 0) { int survivalDice = random.Next(1, 6); bool characterDied = FateOfCharacter(survivalDice, player2); if (characterDied) { player2.Alive = false; roundNr++; var round = new Round() { RoundNr = roundNr, Log = player2.Name + " dies from the wounds ", }; } } SaveCombatLogToDatabase(ctx, fullFight, player1, spoiler); if (player2Id != null) { SaveCombatLogToDatabase(ctx, fullFight, player2, spoiler); } ctx.Arenas.Remove(ctx.Arenas.FirstOrDefault(a => a.CharacterId == player1.Id)); if (ctx.Arenas.Any(a => a.CharacterId == player2Id)) { ctx.Arenas.Remove(ctx.Arenas.FirstOrDefault(a => a.CharacterId == player2.Id)); } if (player1Won) { UpdateCharacterStats(player1); } else { if (player2Id != null) { UpdateCharacterStats(player2); } } ctx.SaveChanges(); return(fullFight); }
// generate model then return public CharacterCombatModel ModelizeCharacter(int id) { var ctx = new ProjectStrawberryEntities(); var character = ctx.Characters.FirstOrDefault(c => c.Id == id); var modelCharacter = new CharacterCombatModel(); modelCharacter.Alive = character.Alive; modelCharacter.Axe = character.Axe; modelCharacter.Block = character.Block; modelCharacter.Dagger = character.Dagger; modelCharacter.Evasion = character.Evasion; modelCharacter.Experience = character.Experience; modelCharacter.Gold = character.Gold; modelCharacter.Health = character.Health; modelCharacter.Id = character.Id; modelCharacter.Mace = character.Mace; modelCharacter.Name = character.Name; modelCharacter.Parry = character.Parry; modelCharacter.Polearm = character.Polearm; modelCharacter.Quickness = character.Quickness; modelCharacter.Spear = character.Spear; modelCharacter.Stamina = character.Stamina; modelCharacter.Strength = character.Strength; modelCharacter.Sword = character.Sword; modelCharacter.Vitality = character.Vitality; modelCharacter.OffHand = new OffHandModel() { shld = null, wep = null }; List <ArmorModel> equipment = new List <ArmorModel>(); foreach (var e in character.EquipmentCharacters) { if (e.Armor != null) { if (e.Equipped) { equipment.Add(new ArmorModel { Name = e.Armor.Name, ArmorValue = e.Armor.ArmorValue, ArmorTypeId = e.Armor.ArmorTypeId, ModelArmorType = new ArmorTypeModel() { Name = e.Armor.ArmorType.Name }, }); } } else if (e.Shield != null) { if (e.OffHandEquipped) { modelCharacter.OffHand.shld = new ShieldModel { BlockValue = e.Shield.BlockValue, Name = e.Shield.Name, ReqShieldMastery = e.Shield.ReqShieldMastery, }; } } else if (e.Weapon != null) { if (e.MainHandEquipped) { modelCharacter.MainHand = new WeaponModel { MinimumDamage = e.Weapon.MinimumDamage, MaximumDamage = e.Weapon.MaximumDamage, Name = e.Weapon.Name, WeaponType = new WeaponTypeModel { Id = e.Weapon.WeaponType.Id, Name = e.Weapon.WeaponType.Name }, ReqWeaponMastery = e.Weapon.ReqWeaponMastery, TwoHanded = e.Weapon.TwoHanded, }; } else if (e.OffHandEquipped) { modelCharacter.OffHand.wep = new WeaponModel { MinimumDamage = e.Weapon.MinimumDamage, MaximumDamage = e.Weapon.MaximumDamage, Name = e.Weapon.Name, WeaponType = new WeaponTypeModel { Id = e.Weapon.WeaponType.Id, Name = e.Weapon.WeaponType.Name }, ReqWeaponMastery = e.Weapon.ReqWeaponMastery, TwoHanded = e.Weapon.TwoHanded, }; } } } modelCharacter.Equipment = equipment; return(modelCharacter); }