Esempio n. 1
0
        public Battle CreateBattle(War war, int regionID, WarSideEnum attackingSide)
        {
            using (var transaction = transactionScopeProvider.CreateTransactionScope())
            {
                var    region             = regionRepository.GetById(regionID);
                double startingWallHealth = CalculateWallHealth(region);

                var battle = new Battle()
                {
                    RegionID   = regionID,
                    WallHealth = (decimal)startingWallHealth,
                    War        = war,
                    Active     = true,
                    StartTime  = DateTime.Now,
                    StartDay   = GameHelper.CurrentDay,
                    AttackerInitiatedBattle = attackingSide == WarSideEnum.Attacker
                };

                var gold = warService.GetGoldNeededToStartBattle(war, region);
                MakeBattleStartTransaction(war, war.GetMainCountry(attackingSide), gold);

                SendMessageAboutAttack(war, attackingSide, region);

                war.AttackerOfferedSurrender = null;

                battleRepository.Add(battle);
                ConditionalSaveChanges(battleRepository);
                battleEventService.AddEvent(battle, BattleStatusEnum.Started);
                transaction?.Complete();
                return(battle);
            }
        }
Esempio n. 2
0
        public JsonResult Fight(int battleID, int weaponQuality, bool isAttacker)
        {
            try
            {
                var citizen = SessionHelper.CurrentEntity.Citizen;
                var battle  = battleRepository.GetById(battleID);

                if (battle == null)
                {
                    return(JsonError("Battle does not exist!"));
                }

                if (citizen == null)
                {
                    return(JsonError("You are not a citizen!"));
                }

                if (citizen.HitPoints < 30)
                {
                    return(JsonError("You must have more than 30 HP to fight!"));
                }



                if (weaponQuality > 0)
                {
                    if (citizen.Entity.GetEquipmentItem(ProductTypeEnum.Weapon, weaponQuality, productRepository).Amount == 0)
                    {
                        return(JsonError("You do not have such weapon in inventory!"));
                    }
                }

                if (battle.War.IsTrainingWar == false && battle.GetTimeLeft(GameHelper.CurrentDay).TotalSeconds < 0)
                {
                    return(JsonError("You cannot take part in the fight!"));
                }

                WarSideEnum warSide = WarSideEnum.Attacker;
                if (isAttacker == false)
                {
                    warSide = WarSideEnum.Defender;
                }

                if (warService.CanFightAs(battle, battle.War, citizen, warSide) == false)
                {
                    return(JsonError("You cannot fight in that battle!"));
                }

                var damage = battleService.CalculateDamage(citizen, battle, weaponQuality, isAttacker);
                battleService.ParticipateInBattle(citizen, battle, isAttacker, weaponQuality);

                return(Json(new JsonFightModel(damage, citizen.HitPoints)));
            }
            catch (Exception e)
            {
                return(JsonDebugError(e));
            }
        }
Esempio n. 3
0
        public static Country GetMainCountry(this War war, WarSideEnum warSide)
        {
            if (warSide == WarSideEnum.None)
            {
                return(null);
            }

            return(GetMainCountry(war, warSide == WarSideEnum.Attacker));
        }
Esempio n. 4
0
        public virtual void SendMessageAboutAttack(War war, WarSideEnum attackingSide, Region region)
        {
            var attacker     = attackingSide == WarSideEnum.Attacker ? war.Attacker.Entity : war.Defender.Entity;
            var attackerLink = EntityLinkCreator.Create(attacker).ToHtmlString();
            var regionLink   = RegionLinkCreator.Create(region).ToHtmlString();
            var warLink      = WarLinkCreator.Create(war).ToHtmlString();

            string message = $"{attackerLink} attacked {regionLink} in {warLink}!";

            warService.SendMessageToEveryoneInWar(war, message, attacker.EntityID);
        }
Esempio n. 5
0
        public bool CanFightAs(Battle battle, War war, Citizen citizen, WarSideEnum warSide)
        {
            if (citizen == null)
            {
                return(false);
            }
            if (war == null)
            {
                return(false);
            }

            if (war.IsTrainingWar)
            {
                return(true);
            }

            var fightingSide = GetFightingSide(war, citizen);

            if (battle.AttackerInitiatedBattle == false)
            {
                if (warSide == WarSideEnum.Attacker)
                {
                    warSide = WarSideEnum.Defender;
                }
                else
                {
                    warSide = WarSideEnum.Attacker;
                }
            }

            if (fightingSide == warSide || fightingSide == WarSideEnum.Both)
            {
                return(true);
            }

            return(false);
        }