예제 #1
0
        protected override void OnAction()
        {
            var unitLock = GetLock().ThrowIfNotType <UnitLock>(ErrorCodes.InvalidLockType);

            if (!LOSCheckAndCreateBeam(unitLock.Target))
            {
                OnError(ErrorCodes.LOSFailed);
                return;
            }

            var coreNeutralized     = _energyNeutralizedAmount.Value;
            var coreNeutralizedDone = 0.0;

            ModifyValueByReactorRadiation(unitLock.Target, ref coreNeutralized);
            coreNeutralized = ModifyValueByOptimalRange(unitLock.Target, coreNeutralized);

            if (coreNeutralized > 0.0)
            {
                var core = unitLock.Target.Core;
                unitLock.Target.Core -= coreNeutralized;
                coreNeutralizedDone   = Math.Abs(core - unitLock.Target.Core);

                unitLock.Target.OnCombatEvent(ParentRobot, new EnergyDispersionEventArgs(coreNeutralizedDone));
                unitLock.Target.AddThreat(ParentRobot, new Threat(ThreatType.Undefined, coreNeutralizedDone / 2));
            }

            var packet = new CombatLogPacket(CombatLogType.EnergyNeutralize, unitLock.Target, ParentRobot, this);

            packet.AppendDouble(coreNeutralized);
            packet.AppendDouble(coreNeutralizedDone);
            packet.Send(unitLock.Target, ParentRobot);
        }
        protected void OnRepair(Unit target, double amount)
        {
            if (amount <= 0.0)
            {
                return;
            }

            var armor = target.Armor;

            target.Armor += amount;
            var total = Math.Abs(armor - target.Armor);

            var packet = new CombatLogPacket(CombatLogType.ArmorRepair, target, ParentRobot, this);

            packet.AppendDouble(amount);
            packet.AppendDouble(total);
            packet.Send(target, ParentRobot);
        }
        protected override void OnAction()
        {
            var unitLock = GetLock().ThrowIfNotType <UnitLock>(ErrorCodes.InvalidLockType);

            if (!LOSCheckAndCreateBeam(unitLock.Target))
            {
                OnError(ErrorCodes.LOSFailed);
                return;
            }

            // ennyit szedunk le a targettol
            var coreAmount = _energyVampiredAmount.Value;

            ModifyValueByReactorRadiation(unitLock.Target, ref coreAmount);
            // optimalrange-el modositjuk
            coreAmount = ModifyValueByOptimalRange(unitLock.Target, coreAmount);

            var coreNeutralized = 0.0;
            var coreTransfered  = 0.0;

            if (coreAmount > 0.0)
            {
                var targetCore = unitLock.Target.Core;
                unitLock.Target.Core -= coreAmount;
                coreNeutralized       = Math.Abs(targetCore - unitLock.Target.Core);

                unitLock.Target.OnCombatEvent(ParentRobot, new EnergyDispersionEventArgs(coreNeutralized));

                // amit sikerult leszedni azt hozzaadjuk a robothoz
                var core = ParentRobot.Core;
                ParentRobot.Core += coreNeutralized;
                coreTransfered    = Math.Abs(core - ParentRobot.Core);

                unitLock.Target.AddThreat(ParentRobot, new Threat(ThreatType.Undefined, coreTransfered));
            }

            var packet = new CombatLogPacket(CombatLogType.EnergyVampire, unitLock.Target, ParentRobot, this);

            packet.AppendDouble(coreAmount);
            packet.AppendDouble(coreNeutralized);
            packet.AppendDouble(coreTransfered);
            packet.Send(unitLock.Target, ParentRobot);
        }
        protected override void OnAction()
        {
            var unitLock = GetLock().ThrowIfNotType <UnitLock>(ErrorCodes.InvalidLockType);

            (ParentIsPlayer() && unitLock.Target is Npc).ThrowIfTrue(ErrorCodes.ThisModuleIsNotSupportedOnNPCs);

            if (!LOSCheckAndCreateBeam(unitLock.Target))
            {
                OnError(ErrorCodes.LOSFailed);
                return;
            }

            var coreAmount = _energyTransferAmount.Value;

            coreAmount = ModifyValueByOptimalRange(unitLock.Target, coreAmount);

            var coreNeutralized = 0.0;
            var coreTransfered  = 0.0;

            if (coreAmount > 0.0)
            {
                var core = ParentRobot.Core;
                ParentRobot.Core -= coreAmount;
                coreNeutralized   = Math.Abs(core - ParentRobot.Core);

                var targetCore = unitLock.Target.Core;
                unitLock.Target.Core += coreNeutralized;
                coreTransfered        = Math.Abs(targetCore - unitLock.Target.Core);

                unitLock.Target.SpreadAssistThreatToNpcs(ParentRobot, new Threat(ThreatType.Support, coreAmount * 2));
            }

            var packet = new CombatLogPacket(CombatLogType.EnergyTransfer, unitLock.Target, ParentRobot, this);

            packet.AppendDouble(coreAmount);
            packet.AppendDouble(coreNeutralized);
            packet.AppendDouble(coreTransfered);
            packet.Send(unitLock.Target, ParentRobot);
        }
        protected override void OnAction()
        {
            var unitLock = GetLock().ThrowIfNotType <UnitLock>(ErrorCodes.InvalidLockType);
            var robot    = unitLock.Target.ThrowIfNotType <Robot>(ErrorCodes.InvalidTarget);

            var targetSensorStrength = robot.SensorStrength * FastRandom.NextDouble();

            targetSensorStrength = ModifyValueByOptimalRange(robot, targetSensorStrength);

            var success = targetSensorStrength < _ecmStrength.Value;

            if (success)
            {
                robot.ResetLocks();
                robot.AddThreat(ParentRobot, new Threat(ThreatType.Undefined, THREAT_SENSOR_JAMMER));
            }

            var packet = new CombatLogPacket(CombatLogType.Jammer, robot, ParentRobot, this);

            packet.AppendByte(success.ToByte());
            packet.Send(ParentRobot, robot);

            robot.OnCombatEvent(ParentRobot, new SensorJammerEventArgs(success));
        }
        protected override void OnAction()
        {
            var ammo = GetAmmo();

            if (ammo == null)
            {
                return;
            }

            var coreAdded = ammo.GetPropertyModifier(AggregateField.core_added);

            var core = ParentRobot.Core;

            ParentRobot.Core += coreAdded.Value;
            var coreBoosted = Math.Abs(core - ParentRobot.Core);

            var packet = new CombatLogPacket(CombatLogType.CoreBooster, ParentRobot);

            packet.AppendDouble(coreAdded.Value);
            packet.AppendDouble(coreBoosted);
            packet.Send(ParentRobot);

            ConsumeAmmo();
        }