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("Не неализована возможность атаковать без навыков."); } }
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); }
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); }