Пример #1
0
        protected override void ExecuteTask()
        {
            //TODO Сделать проверку, чтобы нельзя было атаковать через стены, аналогично команде на открытие/атаку.
            if (!Target.CanBeDamaged())
            {
                throw new InvalidOperationException("Попытка атаковать цель, которой нельзя нанести урон.");
            }

            if (Actor.Person.TacticalActCarrier != null)
            {
                var actCarrier = Actor.Person.TacticalActCarrier;
                var act        = actCarrier.Acts.FirstOrDefault();
                if (act == null)
                {
                    throw new InvalidOperationException("Не найдено действий.");
                }

                Actor.UseAct(Target, act);
                _actService.UseOn(Actor, Target, act);
            }
            else
            {
                throw new NotImplementedException("Не неализована возможность атаковать без навыков.");
            }
        }
Пример #2
0
        protected override void ExecuteTask()
        {
            if (Actor.Person.GetModuleSafe <ICombatActModule>() is null)
            {
                throw new NotImplementedException("Не неализована возможность атаковать без навыков.");
            }

            if (!TargetObject.CanBeDamaged())
            {
                // Эта ситуация может произойти, когда:
                // 1. Текущий актёр начал выполнять задачу.
                // 2. Цель убили/умерла сама.
                // 3. Наступил момент, когда задача текущего актёра должна выполниться.

                // Эту првоерку нужно проводить выше, когда пользователю сообщаяется возможность
                // выполнить эту задачу до её начала.
                return;
            }

            var availableSlotAct = GetSecondaryUsedActs();

            var primary   = new[] { TacticalAct };
            var secondary = availableSlotAct.Where(x => x != TacticalAct).Skip(1).ToArray();

            var usedActs = new UsedTacticalActs(primary, secondary);

            var actTargetInfo = new ActTargetInfo(TargetObject, TargetNode);

            _actService.UseOn(Actor, actTargetInfo, usedActs, Context.Sector);
        }
Пример #3
0
        protected override void ExecuteTask()
        {
            if (!Target.CanBeDamaged())
            {
                throw new InvalidOperationException("Попытка атаковать цель, которой нельзя нанести урон.");
            }

            if (Actor.Person.TacticalActCarrier == null)
            {
                throw new NotImplementedException("Не неализована возможность атаковать без навыков.");
            }

            var availableSlotAct = GetUsedActs();
            var usedActs         = new UsedTacticalActs(availableSlotAct.Take(1), availableSlotAct.Skip(1));

            _actService.UseOn(Actor, Target, usedActs);
        }