Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/Perpetuum.Bootstrapper/Modules/EntitiesModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@ protected override void Load(ContainerBuilder builder)
RegisterModule<IndustrialRemoteControllerModule>(builder);
RegisterModule<SupportRemoteControllerModule>(builder);
RegisterModule<HunterRemoteControllerModule>(builder);
RegisterModule<EngineeringRemoteControllerModule>(builder);
RegisterModule<TerraformMultiModule>(builder);
RegisterModule<WallBuilderModule>(builder);
RegisterModule<ConstructionModule>(builder);
Expand Down Expand Up @@ -400,6 +401,7 @@ void ByNamePatternAndFlag<T>(string substr, CategoryFlags cf, params Parameter[]
ByCategoryFlags<RemoteControlledUnit>(CategoryFlags.cf_industrial_drones_units);
ByCategoryFlags<RemoteControlledUnit>(CategoryFlags.cf_support_drones_units);
ByCategoryFlags<RemoteControlledUnit>(CategoryFlags.cf_hunter_drones_units);
ByCategoryFlags<RemoteControlledUnit>(CategoryFlags.cf_sentry_turret_units);
ByCategoryFlags<RemoteCommand>(CategoryFlags.cf_remote_commands);
ByCategoryFlags<TileScannerAmmo>(CategoryFlags.cf_mining_probe_ammo_tile);
ByCategoryFlags<OneTileScannerAmmo>(CategoryFlags.cf_mining_probe_ammo_one_tile);
Expand Down Expand Up @@ -501,6 +503,7 @@ void ByNamePatternAndFlag<T>(string substr, CategoryFlags cf, params Parameter[]
ByCategoryFlags<IndustrialRemoteControllerModule>(CategoryFlags.cf_industrial_remote_controllers, new NamedParameter("ammoCategoryFlags", CategoryFlags.cf_industrial_drones_units));
ByCategoryFlags<SupportRemoteControllerModule>(CategoryFlags.cf_support_remote_controllers, new NamedParameter("ammoCategoryFlags", CategoryFlags.cf_support_drones_units));
ByCategoryFlags<HunterRemoteControllerModule>(CategoryFlags.cf_hunter_remote_controllers, new NamedParameter("ammoCategoryFlags", CategoryFlags.cf_hunter_drones_units));
ByCategoryFlags<EngineeringRemoteControllerModule>(CategoryFlags.cf_engineering_remote_controllers, new NamedParameter("ammoCategoryFlags", CategoryFlags.cf_sentry_turret_units));
ByCategoryFlags<WebberModule>(CategoryFlags.cf_webber);
ByCategoryFlags<SensorDampenerModule>(CategoryFlags.cf_sensor_dampeners);
ByCategoryFlags<RemoteSensorBoosterModule>(CategoryFlags.cf_remote_sensor_boosters);
Expand Down
18 changes: 18 additions & 0 deletions src/Perpetuum.ExportedTypes/AggregateField.cs
Original file line number Diff line number Diff line change
Expand Up @@ -522,5 +522,23 @@ public enum AggregateField
self_destruct_config_damage_explosive = 762,
self_destruct_config_damage_kinetic = 763,
self_destruct_config_damage_thermal = 764,
turret_amplification_damage_modifier = 765,
turret_amplification_damage_modifier_modifier = 766,
turret_amplification_locking_time_modifier = 767,
turret_amplification_locking_time_modifier_modifier = 768,
turret_amplification_cycle_time_modifier = 769,
turret_amplification_cycle_time_modifier_modifier = 770,
turret_amplification_armor_max_modifier = 771,
turret_amplification_armor_max_modifier_modifier = 772,
turret_amplification_core_max_modifier = 773,
turret_amplification_core_max_modifier_modifier = 774,
turret_amplification_core_recharge_time_modifier = 775,
turret_amplification_core_recharge_time_modifier_modifier = 776,
turret_amplification_long_range_modifier = 777,
turret_amplification_long_range_modifier_modifier = 778,
turret_amplification_accuracy_modifier = 779,
turret_amplification_accuracy_modifier_modifier = 780,
turret_amplification_reactor_radiation_modifier = 781,
turret_amplification_reactor_radiation_modifier_modifier = 782
}
}
3 changes: 2 additions & 1 deletion src/Perpetuum.ExportedTypes/CategoryFlags.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ public enum CategoryFlags : long
cf_support_drones = 0x0000000000031101,
cf_attack_drones = 0x0000000000041101,
cf_hunter_drones = 0x0000000000051101,
cf_sentry_turrets = 0x0000000000061101,

cf_ammo = 0x000000000000000A,
cf_railgun_ammo = 0x000000000000010A,
Expand Down Expand Up @@ -223,6 +224,7 @@ public enum CategoryFlags : long

cf_remote_command_translators = 0x00000000050C040F,
cf_hunter_remote_controllers = 0x00000000060C040F,
cf_engineering_remote_controllers = 0x00000000070C040F,

cf_electronic_warfare_equipment = 0x000000000000050F,
cf_webber = 0x000000000001050F,
Expand Down Expand Up @@ -618,7 +620,6 @@ public enum CategoryFlags : long
cf_gate = 0x0000000000000A92,
cf_rifts = 0x0000000000000B92,
cf_portals = 0x0000000000000C92,
cf_sentry_turrets = 0x0000000000000D92,
cf_mining_turrets = 0x0000000000000E92,
cf_harvesting_turrets = 0x0000000000000F92,
cf_combat_drones = 0x0000000000001092,
Expand Down
2 changes: 2 additions & 0 deletions src/Perpetuum/Modules/ActiveModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,7 @@ protected override void OnUpdateProperty(AggregateField field)
case AggregateField.effect_weapon_cycle_time_modifier:
case AggregateField.effect_gathering_cycle_time_modifier:
case AggregateField.drone_amplification_cycle_time_modifier:
case AggregateField.turret_amplification_cycle_time_modifier:
case AggregateField.drone_amplification_remote_repair_cycle_time_modifier:
{
cycleTime.Update();
Expand All @@ -281,6 +282,7 @@ protected override void OnUpdateProperty(AggregateField field)
case AggregateField.module_missile_range_modifier:
case AggregateField.effect_missile_range_modifier:
case AggregateField.drone_amplification_long_range_modifier:
case AggregateField.turret_amplification_long_range_modifier:
case AggregateField.effect_dreadnought_optimal_range_modifier:
{
optimalRange.Update();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public OptimalRangeProperty(ActiveModule module) : base(module, AggregateField.o
_module = module;
AddEffectModifier(AggregateField.effect_optimal_range_modifier);
AddEffectModifier(AggregateField.drone_amplification_long_range_modifier);
AddEffectModifier(AggregateField.turret_amplification_long_range_modifier);
AddEffectModifier(AggregateField.effect_dreadnought_optimal_range_modifier);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ public class AssaultRemoteControllerModule : RemoteControllerModule
private readonly ModuleProperty droneLongRange;
private readonly ModuleProperty droneAccuracy;

private readonly ModuleProperty droneLockingTime;
private readonly ModuleProperty droneArmorMax;
private readonly ModuleProperty droneCoreMax;
private readonly ModuleProperty droneCoreRechargeTime;
private readonly ModuleProperty droneSpeedMax;
private readonly ModuleProperty droneReactorRadiation;

public AssaultRemoteControllerModule(CategoryFlags ammoCategoryFlags) : base(ammoCategoryFlags)
{
droneDamage = new ModuleProperty(this, AggregateField.drone_amplification_damage_modifier);
Expand All @@ -27,6 +34,24 @@ public AssaultRemoteControllerModule(CategoryFlags ammoCategoryFlags) : base(amm
AddProperty(droneLongRange);
droneAccuracy = new ModuleProperty(this, AggregateField.drone_amplification_accuracy_modifier);
AddProperty(droneAccuracy);

droneLockingTime = new ModuleProperty(this, AggregateField.drone_amplification_locking_time_modifier);
AddProperty(droneLockingTime);

droneArmorMax = new ModuleProperty(this, AggregateField.drone_amplification_armor_max_modifier);
AddProperty(droneArmorMax);

droneCoreMax = new ModuleProperty(this, AggregateField.drone_amplification_core_max_modifier);
AddProperty(droneCoreMax);

droneCoreRechargeTime = new ModuleProperty(this, AggregateField.drone_amplification_core_recharge_time_modifier);
AddProperty(droneCoreRechargeTime);

droneSpeedMax = new ModuleProperty(this, AggregateField.drone_amplification_speed_max_modifier);
AddProperty(droneSpeedMax);

droneReactorRadiation = new ModuleProperty(this, AggregateField.drone_amplification_reactor_radiation_modifier);
AddProperty(droneReactorRadiation);
}

public override RemoteControlledCreature CreateAndConfigureRcu(RemoteControlledUnit ammo)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
using Perpetuum.EntityFramework;
using Perpetuum.ExportedTypes;
using Perpetuum.Items;
using Perpetuum.Modules.ModuleProperties;
using Perpetuum.Zones.Effects;
using Perpetuum.Zones.NpcSystem.AI.Behaviors;
using Perpetuum.Zones.RemoteControl;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Perpetuum.Modules.RemoteControl
{
public class EngineeringRemoteControllerModule : RemoteControllerModule
{
private readonly ModuleProperty turretDamage;
private readonly ModuleProperty turretCycleTime;
private readonly ModuleProperty turretLongRange;
private readonly ModuleProperty turretAccuracy;

private readonly ModuleProperty turretLockingTime;
private readonly ModuleProperty turretArmorMax;
private readonly ModuleProperty turretCoreMax;
private readonly ModuleProperty turretCoreRechargeTime;
private readonly ModuleProperty turretReactorRadiation;

public EngineeringRemoteControllerModule(CategoryFlags ammoCategoryFlags) : base(ammoCategoryFlags)
{
turretDamage = new ModuleProperty(this, AggregateField.turret_amplification_damage_modifier);
AddProperty(turretDamage);

turretCycleTime = new ModuleProperty(this, AggregateField.turret_amplification_cycle_time_modifier);
AddProperty(turretCycleTime);

turretLongRange = new ModuleProperty(this, AggregateField.turret_amplification_long_range_modifier);
AddProperty(turretLongRange);
turretAccuracy = new ModuleProperty(this, AggregateField.turret_amplification_accuracy_modifier);
AddProperty(turretAccuracy);

turretLockingTime = new ModuleProperty(this, AggregateField.turret_amplification_locking_time_modifier);
AddProperty(turretLockingTime);

turretArmorMax = new ModuleProperty(this, AggregateField.turret_amplification_armor_max_modifier);
AddProperty(turretArmorMax);

turretCoreMax = new ModuleProperty(this, AggregateField.turret_amplification_core_max_modifier);
AddProperty(turretCoreMax);

turretCoreRechargeTime = new ModuleProperty(this, AggregateField.turret_amplification_core_recharge_time_modifier);
AddProperty(turretCoreRechargeTime);

turretReactorRadiation = new ModuleProperty(this, AggregateField.turret_amplification_reactor_radiation_modifier);
AddProperty(turretReactorRadiation);
}

public override RemoteControlledCreature CreateAndConfigureRcu(RemoteControlledUnit ammo)
{
RemoteControlledCreature remoteControlledCreature = null;
if (ammo.ED.Options.TurretType == TurretType.Sentry)
{
remoteControlledCreature = (SentryTurret)Factory.CreateWithRandomEID(ammo.ED.Options.TurretId);
remoteControlledCreature.Behavior = Behavior.Create(BehaviorType.RemoteControlledTurret);
remoteControlledCreature.GuardRange = 5;
}
else
{
_ = PerpetuumException.Create(ErrorCodes.InvalidAmmoDefinition);
}

return remoteControlledCreature;
}

protected override void SetupEffect(EffectBuilder effectBuilder)
{
double damageModifier = GetPropertyModifier(AggregateField.turret_amplification_damage_modifier).Value;
double lockingTimeModifier = GetPropertyModifier(AggregateField.turret_amplification_locking_time_modifier).Value;
double cycleTimeModifier = GetPropertyModifier(AggregateField.turret_amplification_cycle_time_modifier).Value;
double armorMaxModifier = GetPropertyModifier(AggregateField.turret_amplification_armor_max_modifier).Value;
double coreMaxModifier = GetPropertyModifier(AggregateField.turret_amplification_core_max_modifier).Value;
double coreRechargeTimeModifier = GetPropertyModifier(AggregateField.turret_amplification_core_recharge_time_modifier).Value;
double longRangeModifier = GetPropertyModifier(AggregateField.turret_amplification_long_range_modifier).Value;
double accuracyModifier = GetPropertyModifier(AggregateField.turret_amplification_accuracy_modifier).Value;
double reactorRadiationModifier = GetPropertyModifier(AggregateField.turret_amplification_reactor_radiation_modifier).Value;

_ = effectBuilder
.SetType(EffectType.drone_amplification)
.WithPropertyModifier(new ItemPropertyModifier(AggregateField.turret_amplification_damage_modifier, AggregateFormula.Modifier, damageModifier))
.WithPropertyModifier(new ItemPropertyModifier(AggregateField.turret_amplification_locking_time_modifier, AggregateFormula.Inverse, lockingTimeModifier))
.WithPropertyModifier(new ItemPropertyModifier(AggregateField.turret_amplification_cycle_time_modifier, AggregateFormula.Inverse, cycleTimeModifier))
.WithPropertyModifier(new ItemPropertyModifier(AggregateField.turret_amplification_armor_max_modifier, AggregateFormula.Modifier, armorMaxModifier))
.WithPropertyModifier(new ItemPropertyModifier(AggregateField.turret_amplification_core_max_modifier, AggregateFormula.Modifier, coreMaxModifier))
.WithPropertyModifier(new ItemPropertyModifier(AggregateField.turret_amplification_core_recharge_time_modifier, AggregateFormula.Inverse, coreRechargeTimeModifier))
.WithPropertyModifier(new ItemPropertyModifier(AggregateField.turret_amplification_long_range_modifier, AggregateFormula.Modifier, longRangeModifier))
.WithPropertyModifier(new ItemPropertyModifier(AggregateField.turret_amplification_accuracy_modifier, AggregateFormula.Inverse, accuracyModifier))
.WithPropertyModifier(new ItemPropertyModifier(AggregateField.turret_amplification_reactor_radiation_modifier, AggregateFormula.Inverse, reactorRadiationModifier));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,35 @@ public class HunterRemoteControllerModule : RemoteControllerModule
{
private readonly ModuleProperty detectionRange;

private readonly ModuleProperty droneLockingTime;
private readonly ModuleProperty droneArmorMax;
private readonly ModuleProperty droneCoreMax;
private readonly ModuleProperty droneCoreRechargeTime;
private readonly ModuleProperty droneSpeedMax;
private readonly ModuleProperty droneReactorRadiation;

public HunterRemoteControllerModule(CategoryFlags ammoCategoryFlags) : base(ammoCategoryFlags)
{
detectionRange = new ModuleProperty(this, AggregateField.detection_range);
AddProperty(detectionRange);

droneLockingTime = new ModuleProperty(this, AggregateField.drone_amplification_locking_time_modifier);
AddProperty(droneLockingTime);

droneArmorMax = new ModuleProperty(this, AggregateField.drone_amplification_armor_max_modifier);
AddProperty(droneArmorMax);

droneCoreMax = new ModuleProperty(this, AggregateField.drone_amplification_core_max_modifier);
AddProperty(droneCoreMax);

droneCoreRechargeTime = new ModuleProperty(this, AggregateField.drone_amplification_core_recharge_time_modifier);
AddProperty(droneCoreRechargeTime);

droneSpeedMax = new ModuleProperty(this, AggregateField.drone_amplification_speed_max_modifier);
AddProperty(droneSpeedMax);

droneReactorRadiation = new ModuleProperty(this, AggregateField.drone_amplification_reactor_radiation_modifier);
AddProperty(droneReactorRadiation);
}

protected override void SetupEffect(EffectBuilder effectBuilder)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,38 @@ public class IndustrialRemoteControllerModule : RemoteControllerModule
private readonly ModuleProperty droneMiningAmount;
private readonly ModuleProperty droneHarvestingAmount;

private readonly ModuleProperty droneLockingTime;
private readonly ModuleProperty droneArmorMax;
private readonly ModuleProperty droneCoreMax;
private readonly ModuleProperty droneCoreRechargeTime;
private readonly ModuleProperty droneSpeedMax;
private readonly ModuleProperty droneReactorRadiation;

public IndustrialRemoteControllerModule(CategoryFlags ammoCategoryFlags) : base(ammoCategoryFlags)
{
droneMiningAmount = new ModuleProperty(this, AggregateField.drone_amplification_mining_amount_modifier);
AddProperty(droneMiningAmount);

droneHarvestingAmount = new ModuleProperty(this, AggregateField.drone_amplification_harvesting_amount_modifier);
AddProperty(droneHarvestingAmount);

droneLockingTime = new ModuleProperty(this, AggregateField.drone_amplification_locking_time_modifier);
AddProperty(droneLockingTime);

droneArmorMax = new ModuleProperty(this, AggregateField.drone_amplification_armor_max_modifier);
AddProperty(droneArmorMax);

droneCoreMax = new ModuleProperty(this, AggregateField.drone_amplification_core_max_modifier);
AddProperty(droneCoreMax);

droneCoreRechargeTime = new ModuleProperty(this, AggregateField.drone_amplification_core_recharge_time_modifier);
AddProperty(droneCoreRechargeTime);

droneSpeedMax = new ModuleProperty(this, AggregateField.drone_amplification_speed_max_modifier);
AddProperty(droneSpeedMax);

droneReactorRadiation = new ModuleProperty(this, AggregateField.drone_amplification_reactor_radiation_modifier);
AddProperty(droneReactorRadiation);
}

public override RemoteControlledCreature CreateAndConfigureRcu(RemoteControlledUnit ammo)
Expand Down
Loading
Loading