From 582d50fee540165f43316a18d1f2111c9fe5e611 Mon Sep 17 00:00:00 2001 From: Taelon Date: Thu, 5 Sep 2024 00:15:09 -0400 Subject: [PATCH 1/4] Capital Module Rework Fixes: Bulwark and Repair Field now don't loop to provide extra healing, They also fixed Visual Timers. Changed: All Capital Ship Modules lie in their own category in the Engineering Bench. Targeting Array - No longer gives Damage Boost (see Weapons Computer) instead of evasion decrease it is now damage. Advanced Thrusters - No Value Changes here, just a description edit. Reinforced Plating - No longer gives evasion decrease, but does decrease shields instead. Quad Lasers: Adjusted oversized Fire Range and increase capacitor costs. Turbolasers: Increased Damage from Module Bonus. Laser Cannon Battery: Adjusted Range and Damage. (Slight increase on NPC Damages. Beam Cannon/Laser Cannon: Adjusted Ranges and Cap Costs. Bulwark/Repair Field - Both now heal larger amounts to cover for single use fire mechanics opposed to original design. Missile Weapons - Adjusted the "minimum shield value" to 10. Capital Ship Configuration Changes - Scaling for Hull/Shields Increased Overall. Warship - No Longer gains Damage Bonus. Slight increase in Armor values and health boost. But Gains Accuracy Increase. Logistics - Small Shield Increase and Armor Increase. Skirmisher - Lost Accuracy Increase, Gained Damage Increase and larger shield Pool. Added: Weapons Computer - Increased Damage for Lower Accuracy Power Diverter - Lower Cap for Faster shield recharge E-War Module - Generates Enmity https://docs.google.com/spreadsheets/d/1g0DB4i-zY4bQQzifilb1OrbiFn28FHK5Zg_29RxK4Yo/edit?usp=sharing --- Module/uti/cap_ewar.uti.json | 83 +++++ Module/uti/cap_pwdiv.uti.json | 83 +++++ Module/uti/cap_wcomp1.uti.json | 83 +++++ Module/uti/recipe_diverter.uti.json | 135 ++++++++ Module/uti/recipe_ewar.uti.json | 135 ++++++++ Module/uti/recipe_wcomp.uti.json | 135 ++++++++ .../SpaceLootTableDefinition.cs | 5 +- .../_17_StatsUpdateCapitals.cs | 16 + .../CapitalModuleRecipes.cs | 295 ++++++++++++++++++ .../ModuleRecipes.cs | 247 --------------- .../AdvancedThrustersModuleDefinition.cs | 6 +- ...ssaultConcussionMissileModuleDefinition.cs | 4 +- .../BeamCannonModuleDefinition.cs | 12 +- .../BulwarkShieldGeneratorModuleDefinition.cs | 19 +- .../CapitalEwarModuleDefinition.cs | 76 +++++ .../CapitalPowerDeiverterModuleDefinition.cs | 44 +++ .../CombatLaserModuleDefinition.cs | 10 +- .../LaserCannonBatteryModuleDefinition.cs | 8 +- .../MissileLauncherModuleDefinition.cs | 4 +- .../QuadLaserCannonModuleDefinition.cs | 4 +- .../ReinforcedPlatingModuleDefinition.cs | 6 +- .../RepairFieldGeneratorModuleDefinition.cs | 13 +- .../ShipConfigurationModuleDefinition.cs | 56 ++-- .../TargetingArrayModuleDefinition.cs | 16 +- .../TurbolaserModuleDefinition.cs | 2 +- .../WeaponsComputerModuleDefinition.cs | 48 +++ .../CraftService/RecipeCategoryType.cs | 2 + .../Service/CraftService/RecipeType.cs | 5 + .../Service/SpaceService/ShipModuleType.cs | 1 + 29 files changed, 1225 insertions(+), 328 deletions(-) create mode 100644 Module/uti/cap_ewar.uti.json create mode 100644 Module/uti/cap_pwdiv.uti.json create mode 100644 Module/uti/cap_wcomp1.uti.json create mode 100644 Module/uti/recipe_diverter.uti.json create mode 100644 Module/uti/recipe_ewar.uti.json create mode 100644 Module/uti/recipe_wcomp.uti.json create mode 100644 SWLOR.Game.Server/Feature/MigrationDefinition/ServerMigration/_17_StatsUpdateCapitals.cs create mode 100644 SWLOR.Game.Server/Feature/RecipeDefinition/EngineeringRecipeDefinition/CapitalModuleRecipes.cs create mode 100644 SWLOR.Game.Server/Feature/ShipModuleDefinition/CapitalEwarModuleDefinition.cs create mode 100644 SWLOR.Game.Server/Feature/ShipModuleDefinition/CapitalPowerDeiverterModuleDefinition.cs create mode 100644 SWLOR.Game.Server/Feature/ShipModuleDefinition/WeaponsComputerModuleDefinition.cs diff --git a/Module/uti/cap_ewar.uti.json b/Module/uti/cap_ewar.uti.json new file mode 100644 index 0000000000..e094f074fe --- /dev/null +++ b/Module/uti/cap_ewar.uti.json @@ -0,0 +1,83 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 20000 + }, + "BaseItem": { + "type": "int", + "value": 513 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 20000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Capital E-War Module" + } + }, + "ModelPart1": { + "type": "byte", + "value": 253 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "cap_ewar" + }, + "TemplateResRef": { + "type": "resref", + "value": "cap_ewar" + }, + "xModelPart1": { + "type": "word", + "value": 253 + } +} diff --git a/Module/uti/cap_pwdiv.uti.json b/Module/uti/cap_pwdiv.uti.json new file mode 100644 index 0000000000..a7b0e1543d --- /dev/null +++ b/Module/uti/cap_pwdiv.uti.json @@ -0,0 +1,83 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 20000 + }, + "BaseItem": { + "type": "int", + "value": 513 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 20000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Capital Power Diverter" + } + }, + "ModelPart1": { + "type": "byte", + "value": 38 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "cap_pwdiv" + }, + "TemplateResRef": { + "type": "resref", + "value": "cap_pwdiv" + }, + "xModelPart1": { + "type": "word", + "value": 38 + } +} diff --git a/Module/uti/cap_wcomp1.uti.json b/Module/uti/cap_wcomp1.uti.json new file mode 100644 index 0000000000..b7bfcc1e7f --- /dev/null +++ b/Module/uti/cap_wcomp1.uti.json @@ -0,0 +1,83 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 20000 + }, + "BaseItem": { + "type": "int", + "value": 513 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 20000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dedicated Weapons System Computer" + } + }, + "ModelPart1": { + "type": "byte", + "value": 252 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "cap_wcomp1" + }, + "TemplateResRef": { + "type": "resref", + "value": "cap_wcomp1" + }, + "xModelPart1": { + "type": "word", + "value": 252 + } +} diff --git a/Module/uti/recipe_diverter.uti.json b/Module/uti/recipe_diverter.uti.json new file mode 100644 index 0000000000..975c61a1d3 --- /dev/null +++ b/Module/uti/recipe_diverter.uti.json @@ -0,0 +1,135 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 30000 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 30000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Blueprint: Capital Power Diverter" + } + }, + "ModelPart1": { + "type": "byte", + "value": 52 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "RECIPE" + }, + "TemplateResRef": { + "type": "resref", + "value": "recipe_diverter" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RECIPES" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "4797" + } + } + ] + }, + "xModelPart1": { + "type": "word", + "value": 52 + } +} diff --git a/Module/uti/recipe_ewar.uti.json b/Module/uti/recipe_ewar.uti.json new file mode 100644 index 0000000000..b83ea5b373 --- /dev/null +++ b/Module/uti/recipe_ewar.uti.json @@ -0,0 +1,135 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 30000 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 30000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Blueprint: Capital E-War Module" + } + }, + "ModelPart1": { + "type": "byte", + "value": 52 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "RECIPE" + }, + "TemplateResRef": { + "type": "resref", + "value": "recipe_ewar" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RECIPES" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "4796" + } + } + ] + }, + "xModelPart1": { + "type": "word", + "value": 52 + } +} diff --git a/Module/uti/recipe_wcomp.uti.json b/Module/uti/recipe_wcomp.uti.json new file mode 100644 index 0000000000..3dc99afb1d --- /dev/null +++ b/Module/uti/recipe_wcomp.uti.json @@ -0,0 +1,135 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 30000 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 30000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Blueprint: Weapons Computer" + } + }, + "ModelPart1": { + "type": "byte", + "value": 52 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "RECIPE" + }, + "TemplateResRef": { + "type": "resref", + "value": "recipe_wcomp" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RECIPES" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "4795" + } + } + ] + }, + "xModelPart1": { + "type": "word", + "value": 52 + } +} diff --git a/SWLOR.Game.Server/Feature/LootTableDefinition/SpaceLootTableDefinition.cs b/SWLOR.Game.Server/Feature/LootTableDefinition/SpaceLootTableDefinition.cs index f32b90cea4..a9a80126bc 100644 --- a/SWLOR.Game.Server/Feature/LootTableDefinition/SpaceLootTableDefinition.cs +++ b/SWLOR.Game.Server/Feature/LootTableDefinition/SpaceLootTableDefinition.cs @@ -236,7 +236,10 @@ private void Tier5() .AddItem("recipe_modtarget", 1) .AddItem("recipe_modturbo", 1) .AddItem("recipe_conwar", 1) - .AddItem("recipe_modsmin", 1); + .AddItem("recipe_modsmin", 1) + .AddItem("recipe_wcomp", 1) + .AddItem("recipe_diverter", 1) + .AddItem("recipe_ewar", 1); _builder.Create("THORILIDE") .AddItem("thor_crys", 1); diff --git a/SWLOR.Game.Server/Feature/MigrationDefinition/ServerMigration/_17_StatsUpdateCapitals.cs b/SWLOR.Game.Server/Feature/MigrationDefinition/ServerMigration/_17_StatsUpdateCapitals.cs new file mode 100644 index 0000000000..f6bdcd707e --- /dev/null +++ b/SWLOR.Game.Server/Feature/MigrationDefinition/ServerMigration/_17_StatsUpdateCapitals.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using SWLOR.Game.Server.Service.MigrationService; +using SWLOR.Game.Server.Service.PerkService; + +namespace SWLOR.Game.Server.Feature.MigrationDefinition.ServerMigration +{ + public class _17_StatsUpdateCapitals : ServerMigrationBase, IServerMigration + { + public int Version => 17; + public MigrationExecutionType ExecutionType => MigrationExecutionType.PostCacheLoad; + public void Migrate() + { + RecalculateAllShipStats(); + } + } +} diff --git a/SWLOR.Game.Server/Feature/RecipeDefinition/EngineeringRecipeDefinition/CapitalModuleRecipes.cs b/SWLOR.Game.Server/Feature/RecipeDefinition/EngineeringRecipeDefinition/CapitalModuleRecipes.cs new file mode 100644 index 0000000000..e6069220a9 --- /dev/null +++ b/SWLOR.Game.Server/Feature/RecipeDefinition/EngineeringRecipeDefinition/CapitalModuleRecipes.cs @@ -0,0 +1,295 @@ +using System.Collections.Generic; +using SWLOR.Game.Server.Service.CraftService; +using SWLOR.Game.Server.Service.PerkService; +using SWLOR.Game.Server.Service.SkillService; + +namespace SWLOR.Game.Server.Feature.RecipeDefinition.EngineeringRecipeDefinition +{ + public class CapitalModuleRecipes : IRecipeListDefinition + { + private readonly RecipeBuilder _builder = new(); + + public Dictionary BuildRecipes() + { + Tier5(); + + return _builder.Build(); + } + + private void Tier5() + { + // Advanced Thrusters + _builder.Create(RecipeType.AdvancedThrusters, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("cap_thrust1") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Bulwark Shield Generator + _builder.Create(RecipeType.BulwarkShieldGenerator, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("bulwarkgen") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Dedicated Targeting Sensor Array + _builder.Create(RecipeType.TargetingArray, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("cap_target1") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Heavy Turbolaser Cannon + _builder.Create(RecipeType.Turbolaser1, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("turbolas1") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Dual Turbolaser Cannon + _builder.Create(RecipeType.Turbolaser2, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("turbolas2") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Quad Turbolaser Cannon + _builder.Create(RecipeType.Turbolaser3, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("turbolas3") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Laser Cannon Battery I + _builder.Create(RecipeType.LaserCannonBattery1, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("lasbattery1") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Quad Laser Cannons + _builder.Create(RecipeType.QuadLaserCannon1, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("cap_quadlas1") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Quad Laser Cannon Array + _builder.Create(RecipeType.QuadLaserCannon2, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("cap_quadlas2") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Quad Laser Cannon Battery + _builder.Create(RecipeType.QuadLaserCannon3, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("cap_quadlas3") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Redundant Shield Generator + _builder.Create(RecipeType.RedundantShieldGenerator, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("cap_shields1") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Reinforced Plating + _builder.Create(RecipeType.ReinforcedPlating, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("cap_armor1") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Repair Field Generator + _builder.Create(RecipeType.RepairFieldGenerator, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("repairfield") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Storm Cannon + _builder.Create(RecipeType.StormCannon, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("storm_cann") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Logistics Nexus Configuration + _builder.Create(RecipeType.LogisticsNexusConfig, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("cap_indus") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Skirmisher Configuration + _builder.Create(RecipeType.SkirmisherConfig, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("cap_skirm") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Warship Configuration + _builder.Create(RecipeType.WarshipConfig1, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("cap_warship") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Strip Miner Configuration + _builder.Create(RecipeType.StripMiner, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("cap_minlas") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Weapons Computer + _builder.Create(RecipeType.WeaponsComputer, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("cap_wcomp1") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Capital E-War Module + _builder.Create(RecipeType.CapitalEWar, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("cap_ewar") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + + // Capital E-War Module + _builder.Create(RecipeType.CapitalPowerDiverter, SkillType.Engineering) + .Category(RecipeCategoryType.CapitalShipModule) + .Resref("cap_pwdiv") + .Level(52) + .Quantity(1) + .RequirementUnlocked() + .RequirementPerk(PerkType.StarshipBlueprints, 5) + .EnhancementSlots(RecipeEnhancementType.Module, 2) + .Component("capc_techcom", 1) + .Component("capc_modcomp", 1) + .Component("capc_power", 3); + } + } +} \ No newline at end of file diff --git a/SWLOR.Game.Server/Feature/RecipeDefinition/EngineeringRecipeDefinition/ModuleRecipes.cs b/SWLOR.Game.Server/Feature/RecipeDefinition/EngineeringRecipeDefinition/ModuleRecipes.cs index 2833a9b92f..9579425202 100644 --- a/SWLOR.Game.Server/Feature/RecipeDefinition/EngineeringRecipeDefinition/ModuleRecipes.cs +++ b/SWLOR.Game.Server/Feature/RecipeDefinition/EngineeringRecipeDefinition/ModuleRecipes.cs @@ -1368,253 +1368,6 @@ private void Tier5() .EnhancementSlots(RecipeEnhancementType.Module, 2) .Component("ref_gostian", 3) .Component("elec_high", 2); - - // Assault Concussion Missile Launcher I - _builder.Create(RecipeType.AssaultConcMissileLauncher, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("acm_launch_1") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Advanced Thrusters - _builder.Create(RecipeType.AdvancedThrusters, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("cap_thrust1") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Bulwark Shield Generator - _builder.Create(RecipeType.BulwarkShieldGenerator, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("bulwarkgen") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Dedicated Targeting Sensor Array - _builder.Create(RecipeType.TargetingArray, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("cap_target1") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Heavy Turbolaser Cannon - _builder.Create(RecipeType.Turbolaser1, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("turbolas1") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Dual Turbolaser Cannon - _builder.Create(RecipeType.Turbolaser2, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("turbolas2") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Quad Turbolaser Cannon - _builder.Create(RecipeType.Turbolaser3, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("turbolas3") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Laser Cannon Battery I - _builder.Create(RecipeType.LaserCannonBattery1, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("lasbattery1") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Quad Laser Cannons - _builder.Create(RecipeType.QuadLaserCannon1, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("cap_quadlas1") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Quad Laser Cannon Array - _builder.Create(RecipeType.QuadLaserCannon2, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("cap_quadlas2") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Quad Laser Cannon Battery - _builder.Create(RecipeType.QuadLaserCannon3, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("cap_quadlas3") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Redundant Shield Generator - _builder.Create(RecipeType.RedundantShieldGenerator, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("cap_shields1") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Reinforced Plating - _builder.Create(RecipeType.ReinforcedPlating, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("cap_armor1") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Repair Field Generator - _builder.Create(RecipeType.RepairFieldGenerator, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("repairfield") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Storm Cannon - _builder.Create(RecipeType.StormCannon, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("storm_cann") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Logistics Nexus Configuration - _builder.Create(RecipeType.LogisticsNexusConfig, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("cap_indus") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Skirmisher Configuration - _builder.Create(RecipeType.SkirmisherConfig, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("cap_skirm") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Warship Configuration - _builder.Create(RecipeType.WarshipConfig1, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("cap_warship") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); - - // Strip Miner Configuration - _builder.Create(RecipeType.StripMiner, SkillType.Engineering) - .Category(RecipeCategoryType.ShipModule) - .Resref("cap_minlas") - .Level(52) - .Quantity(1) - .RequirementUnlocked() - .RequirementPerk(PerkType.StarshipBlueprints, 5) - .EnhancementSlots(RecipeEnhancementType.Module, 2) - .Component("capc_techcom", 1) - .Component("capc_modcomp", 1) - .Component("capc_power", 3); } } } diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/AdvancedThrustersModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/AdvancedThrustersModuleDefinition.cs index f91ba561ce..3584a54a1e 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/AdvancedThrustersModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/AdvancedThrustersModuleDefinition.cs @@ -24,19 +24,19 @@ private void AdvancedThrusters(string itemTag, .Name(name) .ShortName(shortName) .Texture("iit_ess_098") - .Description($"Improves a ship's evasion by {boostAmount} at the cost of {boostAmount * 3} max capacitor.") + .Description($"Improves a ship's evasion by {boostAmount} at the cost of 30 max capacitor.") .PowerType(ShipModulePowerType.Low) .RequirePerk(PerkType.DefensiveModules, 5) .CapitalClassModule() .EquippedAction((shipStatus, moduleBonus) => { shipStatus.Evasion += boostAmount + moduleBonus; - shipStatus.MaxCapacitor -= boostAmount; + shipStatus.MaxCapacitor -= 30; }) .UnequippedAction((shipStatus, moduleBonus) => { shipStatus.Evasion -= boostAmount + moduleBonus; - shipStatus.MaxCapacitor += boostAmount; + shipStatus.MaxCapacitor += 30; }); } diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/AssaultConcussionMissileModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/AssaultConcussionMissileModuleDefinition.cs index 01503a66f0..e0c10ab830 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/AssaultConcussionMissileModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/AssaultConcussionMissileModuleDefinition.cs @@ -96,8 +96,8 @@ private void AssaultConcussionMissile( }) .ActivatedAction((activator, activatorShipStatus, target, targetShipStatus, moduleBonus) => { - // Missiles do 25% more damage to unshielded targets. Due to shield recharge starting instantly, allow for up to 4 shield points to be considered "unshielded". - if (targetShipStatus.Shield <= 4) + // Missiles do 25% more damage to unshielded targets. Due to shield recharge starting instantly, allow for up to 10 shield points to be considered "unshielded". + if (targetShipStatus.Shield <= 10) { dmg += dmg / 4; } diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/BeamCannonModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/BeamCannonModuleDefinition.cs index 7f700acfe1..f52bd93edf 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/BeamCannonModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/BeamCannonModuleDefinition.cs @@ -16,11 +16,11 @@ public class BeamCannonModuleDefinition : IShipModuleListDefinition public Dictionary BuildShipModules() { - BeamCannon("beamcannon1", "Basic Beam Cannon", "Basic Beam C.", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 3 thermal DMG on a hit.", 3, 6, 1); - BeamCannon("beamcannon2", "Beam Cannon I", "Beam Cann. 1", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 6 thermal DMG on a hit.", 6, 7, 2); - BeamCannon("beamcannon3", "Beam Cannon II", "Beam Cann. 2", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 9 thermal DMG on a hit.", 9, 8, 3); - BeamCannon("beamcannon4", "Beam Cannon III", "Beam Cann. 3", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 12 thermal DMG on a hit.", 12, 9, 4); - BeamCannon("beamcannon5", "Beam Cannon IV", "Beam Cann. 4", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 15 thermal DMG on a hit.", 15, 10, 5); + BeamCannon("beamcannon1", "Basic Beam Cannon", "Basic Beam C.", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 3 thermal DMG on a hit.", 3, 6, 2); + BeamCannon("beamcannon2", "Beam Cannon I", "Beam Cann. 1", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 6 thermal DMG on a hit.", 6, 7, 4); + BeamCannon("beamcannon3", "Beam Cannon II", "Beam Cann. 2", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 9 thermal DMG on a hit.", 9, 8, 6); + BeamCannon("beamcannon4", "Beam Cannon III", "Beam Cann. 3", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 12 thermal DMG on a hit.", 12, 9, 8); + BeamCannon("beamcannon5", "Beam Cannon IV", "Beam Cann. 4", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 15 thermal DMG on a hit.", 15, 10, 10); return _builder.Build(); } @@ -40,7 +40,7 @@ private void BeamCannon( .Type(ShipModuleType.BeamLaser) .Texture("iit_ess_017") .Description(description) - .MaxDistance(60f) + .MaxDistance(20f) .ValidTargetType(ObjectType.Creature) .PowerType(ShipModulePowerType.High) .RequirePerk(PerkType.OffensiveModules, requiredLevel) diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/BulwarkShieldGeneratorModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/BulwarkShieldGeneratorModuleDefinition.cs index a6d8d2273d..5af28487ad 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/BulwarkShieldGeneratorModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/BulwarkShieldGeneratorModuleDefinition.cs @@ -14,7 +14,7 @@ public class BulwarkShieldGeneratorModuleDefinition : IShipModuleListDefinition public Dictionary BuildShipModules() { - BulwarkShieldGenerator("bulwarkgen", "Bulwark Shield Generator", "Bulwark Gen", "An advanced suite of shield generators project at a wide range, protecting allied ships and reinforcing their defenses, and forcing most nearby foes to target the user. Lasts 12 seconds.", 10); + BulwarkShieldGenerator("bulwarkgen", "Bulwark Shield Generator", "Bulwark Gen", "An advanced suite of shield generators project at a wide range, protecting allied ships and reinforcing their shields.", 10); return _builder.Build(); } @@ -29,7 +29,7 @@ private void BulwarkShieldGenerator( _builder.Create(itemTag) .Name(name) .ShortName(shortName) - .Type(ShipModuleType.RepairFieldGenerator) + .Type(ShipModuleType.BulwarkShieldGenerator) .Texture("iit_ess_075") .Description(description) .PowerType(ShipModulePowerType.High) @@ -39,11 +39,11 @@ private void BulwarkShieldGenerator( .CanTargetSelf() .ActivatedAction((activator, activatorShipStatus, _, _, moduleBonus) => { - repairAmount += (activatorShipStatus.Industrial + moduleBonus) / 2; + repairAmount += (activatorShipStatus.Industrial * moduleBonus); - ApplyEffectToObject(DurationType.Temporary, EffectVisualEffect(VisualEffect.Vfx_Dur_Aura_Pulse_Blue_White), activator, 2.0f); + ApplyEffectToObject(DurationType.Temporary, EffectVisualEffect(VisualEffect.Vfx_Dur_Aura_Pulse_Blue_White), activator, 12.0f); - const float Distance = 8f; + const float Distance = 20f; var nearby = GetFirstObjectInShape(Shape.Sphere, Distance, GetLocation(activator), true, ObjectType.Creature); var count = 1; @@ -58,7 +58,7 @@ private void BulwarkShieldGenerator( ApplyEffectToObject(DurationType.Temporary, EffectBeam(VisualEffect.Vfx_Beam_Cold, activator, BodyNode.Chest), nearby, 2.0f); ApplyEffectToObject(DurationType.Temporary, EffectVisualEffect(VisualEffect.Vfx_Dur_Aura_Pulse_Blue_White), nearby, 2.0f); - ApplyEffectToObject(DurationType.Temporary, EffectAbilityIncrease(AbilityType.Vitality, 4), nearby, 2.0f); + ApplyEffectToObject(DurationType.Temporary, EffectAbilityIncrease(AbilityType.Vitality, 4), nearby, 10.0f); Space.RestoreShield(nearby, nearbyStatus, repairAmount); @@ -76,14 +76,15 @@ private void BulwarkShieldGenerator( ExecuteScript("pc_target_upd", nearby); } } + + count++; } nearby = GetNextObjectInShape(Shape.Sphere, Distance, GetLocation(activator), true, ObjectType.Creature); - count++; } - Enmity.ModifyEnmityOnAll(activator, 250 + (repairAmount * count)); - Messaging.SendMessageNearbyToPlayers(activator, $"{GetName(activator)} begins restoring {repairAmount * count} shield HP to nearby ships, and reinforces their shield integrity."); + Enmity.ModifyEnmityOnAll(activator, 100 + repairAmount); + Messaging.SendMessageNearbyToPlayers(activator, $"{GetName(activator)} begins restoring {repairAmount} shield HP to nearby ships reinforcing their shield integrity."); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.Piloting); }); } diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/CapitalEwarModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/CapitalEwarModuleDefinition.cs new file mode 100644 index 0000000000..11e4a718e1 --- /dev/null +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/CapitalEwarModuleDefinition.cs @@ -0,0 +1,76 @@ +using System.Collections.Generic; +using SWLOR.Game.Server.Core.NWScript.Enum; +using SWLOR.Game.Server.Core.NWScript.Enum.VisualEffect; +using SWLOR.Game.Server.Entity; +using SWLOR.Game.Server.Service; +using SWLOR.Game.Server.Service.SkillService; +using SWLOR.Game.Server.Service.SpaceService; + +namespace SWLOR.Game.Server.Feature.ShipModuleDefinition +{ + public class CapitalEwarModuleDefinition : IShipModuleListDefinition + { + private readonly ShipModuleBuilder _builder = new(); + + public Dictionary BuildShipModules() + { + CapitalEWarModule("cap_ewar", "Capital E-War Module", "Cap Ewarmod", "Sends out a pulse scrambling enemy fire systems, forcing them towards yourself.", 100); + + return _builder.Build(); + } + + private void CapitalEWarModule( + string itemTag, + string name, + string shortName, + string description, + int enmityAmount) + { + _builder.Create(itemTag) + .Name(name) + .ShortName(shortName) + .Type(ShipModuleType.CapitalEwar) + .Texture("iit_ess_253") + .Description(description) + .PowerType(ShipModulePowerType.High) + .Capacitor(25) + .Recast(12f) + .CapitalClassModule() + .CanTargetSelf() + .ActivatedAction((activator, activatorShipStatus, _, _, moduleBonus) => + { + enmityAmount += moduleBonus * 25; + + ApplyEffectToObject(DurationType.Temporary, EffectVisualEffect(VisualEffect.Vfx_Dur_Aura_Pulse_Blue_White), activator, 12.0f); + ApplyEffectToObject(DurationType.Temporary, EffectAbilityIncrease(AbilityType.Vitality, 4),activator, 12.0f); + + const float Distance = 20f; + var nearby = GetFirstObjectInShape(Shape.Sphere, Distance, GetLocation(activator), true, ObjectType.Creature); + var count = 1; + + while (GetIsObjectValid(nearby) && count <= 10) + { + if (GetIsEnemy(nearby, activator) && + !GetIsDead(activator) && + Space.GetShipStatus(nearby) != null && + nearby != activator) + { + var nearbyStatus = Space.GetShipStatus(nearby); + + ApplyEffectToObject(DurationType.Temporary, EffectBeam(VisualEffect.Vfx_Beam_Cold, activator, BodyNode.Chest), nearby, 2.0f); + ApplyEffectToObject(DurationType.Temporary, EffectVisualEffect(VisualEffect.Vfx_Dur_Aura_Pulse_Blue_White), nearby, 2.0f); + Enmity.ModifyEnmity(activator, nearby, enmityAmount); + + count++; + } + + nearby = GetNextObjectInShape(Shape.Sphere, Distance, GetLocation(activator), true, ObjectType.Creature); + + } + + CombatPoint.AddCombatPointToAllTagged(activator, SkillType.Piloting); + Messaging.SendMessageNearbyToPlayers(activator, $"{GetName(activator)} activates their E-War device and begins to draw fire."); + }); + } + } +} \ No newline at end of file diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/CapitalPowerDeiverterModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/CapitalPowerDeiverterModuleDefinition.cs new file mode 100644 index 0000000000..d8adfeb4e9 --- /dev/null +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/CapitalPowerDeiverterModuleDefinition.cs @@ -0,0 +1,44 @@ +using System.Collections.Generic; +using SWLOR.Game.Server.Service.PerkService; +using SWLOR.Game.Server.Service.SpaceService; + +namespace SWLOR.Game.Server.Feature.ShipModuleDefinition +{ + public class CapitalPowerDiverterModuleDefinition : IShipModuleListDefinition + { + private readonly ShipModuleBuilder _builder = new(); + + public Dictionary BuildShipModules() + { + CapitalPowerDiverter("cap_pwdiv", "Capital Power Diverter", "Pwr Diverter", 6); + + return _builder.Build(); + } + + private void CapitalPowerDiverter(string itemTag, + string name, + string shortName, + int boostAmount) + { + _builder.Create(itemTag) + .Name(name) + .ShortName(shortName) + .Texture("iit_ess_038") + .Description($"Improves a ship's shield recharge by {boostAmount} at the cost of 40 max capacitor.") + .PowerType(ShipModulePowerType.Low) + .RequirePerk(PerkType.DefensiveModules, 5) + .CapitalClassModule() + .EquippedAction((shipStatus, moduleBonus) => + { + shipStatus.ShieldRechargeRate -= boostAmount + (moduleBonus / 6); + shipStatus.MaxCapacitor -= 60; + }) + .UnequippedAction((shipStatus, moduleBonus) => + { + shipStatus.ShieldRechargeRate += boostAmount + (moduleBonus / 6); + shipStatus.MaxCapacitor += 60; + }); + } + + } +} diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/CombatLaserModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/CombatLaserModuleDefinition.cs index 529bc798d5..16668cf070 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/CombatLaserModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/CombatLaserModuleDefinition.cs @@ -16,11 +16,11 @@ public class CombatLaserModuleDefinition : IShipModuleListDefinition public Dictionary BuildShipModules() { - CombatLaser("com_laser_b", "Basic Combat Laser", "B. Cmbt Laser", "Deals 12 thermal DMG to your target.", 1, 12, 0); - CombatLaser("com_laser_1", "Combat Laser I", "Cmbt Laser I", "Deals 18 thermal DMG to your target.", 2, 18, 1); - CombatLaser("com_laser_2", "Combat Laser II", "Cmbt Laser II", "Deals 24 thermal DMG to your target.", 3, 24, 2); - CombatLaser("com_laser_3", "Combat Laser III", "Cmbt Laser III", "Deals 30 thermal DMG to your target.", 4, 30, 3); - CombatLaser("com_laser_4", "Combat Laser IV", "Cmbt Laser IV", "Deals 36 thermal DMG to your target.", 5, 36, 4); + CombatLaser("com_laser_b", "Basic Combat Laser", "B. Cmbt Laser", "Deals 12 thermal DMG to your target.", 1, 12, 2); + CombatLaser("com_laser_1", "Combat Laser I", "Cmbt Laser I", "Deals 18 thermal DMG to your target.", 2, 18, 3); + CombatLaser("com_laser_2", "Combat Laser II", "Cmbt Laser II", "Deals 24 thermal DMG to your target.", 3, 24, 4); + CombatLaser("com_laser_3", "Combat Laser III", "Cmbt Laser III", "Deals 30 thermal DMG to your target.", 4, 30, 5); + CombatLaser("com_laser_4", "Combat Laser IV", "Cmbt Laser IV", "Deals 36 thermal DMG to your target.", 5, 36, 6); return _builder.Build(); } diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/LaserCannonBatteryModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/LaserCannonBatteryModuleDefinition.cs index cdc7f4b6bd..1467888d77 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/LaserCannonBatteryModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/LaserCannonBatteryModuleDefinition.cs @@ -18,9 +18,9 @@ public Dictionary BuildShipModules() { LaserCannonBattery("lasbattery1", "Laser Cannon Battery I", "Las Cann Bat 1", "Fires at 75% of nearby targets for 30 DMG. Fires once every 2 seconds for 18 seconds.", 30); - LaserCannonBattery("npcautolas1", "NPC Laser Cannon Battery 1", "npcautolas1", "Fires at 75% of nearby targets. Fires once every 2 seconds for 18 seconds.", 10); - LaserCannonBattery("npcautolas2", "NPC Laser Cannon Battery 2", "npcautolas2", "Fires at 75% of nearby targets. Fires once every 2 seconds for 18 seconds.", 15); - LaserCannonBattery("npcautolas3", "NPC Laser Cannon Battery 3", "npcautolas3", "Fires at 75% of nearby targets. Fires once every 2 seconds for 18 seconds.", 20); + LaserCannonBattery("npcautolas1", "NPC Laser Cannon Battery 1", "npcautolas1", "Fires at 75% of nearby targets. Fires once every 2 seconds for 18 seconds.", 12); + LaserCannonBattery("npcautolas2", "NPC Laser Cannon Battery 2", "npcautolas2", "Fires at 75% of nearby targets. Fires once every 2 seconds for 18 seconds.", 17); + LaserCannonBattery("npcautolas3", "NPC Laser Cannon Battery 3", "npcautolas3", "Fires at 75% of nearby targets. Fires once every 2 seconds for 18 seconds.", 22); LaserCannonBattery("npcautolas4", "NPC Laser Cannon Battery 4", "npcautolas4", "Fires at 75% of nearby targets. Fires once every 2 seconds for 18 seconds.", 25); LaserCannonBattery("npcautolas5", "NPC Laser Cannon Battery 5", "npcautolas5", "Fires at 75% of nearby targets. Fires once every 2 seconds for 18 seconds.", 30); LaserCannonBattery("npcautolas6", "NPC Laser Cannon Battery 6", "npcautolas6", "Fires at 75% of nearby targets. Fires once every 2 seconds for 18 seconds.", 33); @@ -61,7 +61,7 @@ private void LaserCannonBattery( var attackerStat = Space.GetAttackStat(activator); var attack = Space.GetShipAttack(activator, attackBonus); - var moduleDMG = dmg + moduleBonus / 2; + var moduleDMG = dmg + moduleBonus; var missile = EffectVisualEffect(VisualEffect.Mirv_StarWars_Bolt2); for (var i = 0; i < 9; i++) diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/MissileLauncherModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/MissileLauncherModuleDefinition.cs index d06fbf1780..76e9d3bf6d 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/MissileLauncherModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/MissileLauncherModuleDefinition.cs @@ -96,8 +96,8 @@ private void MissileLauncher( .ActivatedAction((activator, activatorShipStatus, target, targetShipStatus, moduleBonus) => { var moduleDamage = dmg + moduleBonus; - // Missiles do 25% more damage to unshielded targets. Due to shield recharge starting instantly, allow for up to 4 shield points to be considered "unshielded". - if (targetShipStatus.Shield <= 4) + // Missiles do 25% more damage to unshielded targets. Due to shield recharge starting instantly, allow for up to 10 shield points to be considered "unshielded". + if (targetShipStatus.Shield <= 10) { moduleDamage += moduleDamage / 4; } diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/QuadLaserCannonModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/QuadLaserCannonModuleDefinition.cs index aa9bc3b376..322289b3c5 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/QuadLaserCannonModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/QuadLaserCannonModuleDefinition.cs @@ -50,12 +50,12 @@ private void QuadLaserCannon( .Type(ShipModuleType.QuadLaser) .Texture("iit_ess2_035") .Description(description) - .MaxDistance(60f) + .MaxDistance(20f) .ValidTargetType(ObjectType.Creature) .PowerType(ShipModulePowerType.High) .RequirePerk(PerkType.OffensiveModules, 5) .Recast(8f) - .Capacitor(totalAttacks * 2) + .Capacitor(totalAttacks * 3) .CapitalClassModule() .ActivatedAction((activator, activatorShipStatus, target, targetShipStatus, moduleBonus) => { diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/ReinforcedPlatingModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/ReinforcedPlatingModuleDefinition.cs index 31fd91ae49..5ca5d28840 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/ReinforcedPlatingModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/ReinforcedPlatingModuleDefinition.cs @@ -24,7 +24,7 @@ private void ReinforcedPlating(string itemTag, .Name(name) .ShortName(shortName) .Texture("iit_ess2_114") - .Description($"Improves a ship's defenses to Thermal, EM and Explosive by {boostAmount * 3} at the cost of {boostAmount} evasion.") + .Description($"Improves a ship's defenses to Thermal, EM and Explosive by {boostAmount * 3} at the cost of 50 shields.") .PowerType(ShipModulePowerType.Low) .RequirePerk(PerkType.DefensiveModules, 5) .CapitalClassModule() @@ -33,14 +33,14 @@ private void ReinforcedPlating(string itemTag, shipStatus.ThermalDefense += 3 * (boostAmount + moduleBonus); shipStatus.EMDefense += 3 * (boostAmount + moduleBonus); shipStatus.ExplosiveDefense += 3 * (boostAmount + moduleBonus); - shipStatus.Evasion -= boostAmount; + shipStatus.Shield -= 50; }) .UnequippedAction((shipStatus, moduleBonus) => { shipStatus.ThermalDefense -= 3 * (boostAmount + moduleBonus); shipStatus.EMDefense -= 3 * (boostAmount + moduleBonus); shipStatus.ExplosiveDefense -= 3 * (boostAmount + moduleBonus); - shipStatus.Evasion += boostAmount; + shipStatus.Shield += 50; }); } diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/RepairFieldGeneratorModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/RepairFieldGeneratorModuleDefinition.cs index feb65308d8..66c2277b93 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/RepairFieldGeneratorModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/RepairFieldGeneratorModuleDefinition.cs @@ -14,7 +14,7 @@ public class RepairFieldGeneratorModuleDefinition : IShipModuleListDefinition public Dictionary BuildShipModules() { - RepairFieldGenerator("repairfield", "Repair Field Generator", "Rep Field Gen", "A suite of welding lasers and other advanced devices serves to repair 60 hull HP over the course of 6 seconds. Affects all nearby targets", 10); + RepairFieldGenerator("repairfield", "Repair Field Generator", "Rep Field Gen", "A suite of welding lasers and other advanced devices serves to repair 60 hull HP.", 10); return _builder.Build(); } @@ -39,9 +39,9 @@ private void RepairFieldGenerator( .CanTargetSelf() .ActivatedAction((activator, activatorShipStatus, _, _, moduleBonus) => { - repairAmount += (activatorShipStatus.Industrial + moduleBonus) / 2; + repairAmount += activatorShipStatus.Industrial * moduleBonus; - const float Distance = 8f; + const float Distance = 20f; var nearby = GetFirstObjectInShape(Shape.Sphere, Distance, GetLocation(activator), true, ObjectType.Creature); var count = 1; @@ -69,14 +69,15 @@ private void RepairFieldGenerator( ExecuteScript("pc_target_upd", nearby); } } + + count++; } nearby = GetNextObjectInShape(Shape.Sphere, Distance, GetLocation(activator), true, ObjectType.Creature); - count++; } - Enmity.ModifyEnmityOnAll(activator, 100 + (repairAmount * count)); - Messaging.SendMessageNearbyToPlayers(activator, $"{GetName(activator)} begins restoring {repairAmount * count} armor HP to nearby ships."); + Enmity.ModifyEnmityOnAll(activator, 100 + repairAmount); + Messaging.SendMessageNearbyToPlayers(activator, $"{GetName(activator)} begins restoring {repairAmount} armor HP to nearby ships."); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.Piloting); }); } diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/ShipConfigurationModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/ShipConfigurationModuleDefinition.cs index 48af932742..3bd773a9dd 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/ShipConfigurationModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/ShipConfigurationModuleDefinition.cs @@ -60,9 +60,9 @@ public Dictionary BuildShipModules() ShipConfig("con_hvy5", "NPC Hvy Conf 5", "NPC HVY5", "iit_ess8_121", 1, 0, 0, 0, 85, 0, 85, 0, 65, 30, 30, 0); ShipConfig("con_hvy6", "NPC Hvy Conf 6", "NPC HVY6", "iit_ess8_121", 1, 0, 0, 0, 100, 0, 100, 0, 80, 30, 30, 0); - CapShipConfig("cap_indus", "Logistics Nexus Configuration", "iit_ess8_124", 5, 500, 0, 0, 100, 0, 100, 0, 100, 0, 0, 6, 0); - CapShipConfig("cap_skirm", "Skirmisher Configuration", "iit_ess8_121", 5, 100, 250, 0, 75, 0, 75, 0, 75, 40, 40, 0, -10); - CapShipConfig("cap_warship", "Warship Configuration", "iit_ess8_123", 5, 300, 300, 50, 200, 50, 200, 50, 200, 0, 0, 0, 0); + CapShipConfig("cap_indus", "Logistics Nexus Configuration", "iit_ess8_124", 5, 500, 100, 0, 150, 0, 150, 0, 150, 0, 0, 6, 0); + CapShipConfig("cap_skirm", "Skirmisher Configuration", "iit_ess8_121", 5, 0, 400, 50, 75, 50, 75, 50, 75, 0, 40, 0, -10); + CapShipConfig("cap_warship", "Warship Configuration", "iit_ess8_123", 5, 350, 350, 0, 220, 0, 220, 0, 220, 40, 0, 0, 0); CapShipConfig("npc_cap1", "Boss Conf 1", "iit_ess8_121", 1, 0, 0, 0, 20, 0, 15, 10, 10, 5, 5, 0, 0); CapShipConfig("npc_cap2", "Boss Conf 2", "iit_ess8_121", 1, 0, 0, 10, 50, 10, 37, 20, 5, 10, 0, 0, 0); @@ -103,17 +103,17 @@ private void ShipConfig(string itemTag, .ShortName(shortName) .Texture(texture) .Description($"Provides several base stats to a ship to allow it to fulfill a role and operate at full capacity: \n" + - $"Armor: +{armor} + Module Bonus x 4 \n" + - $"Shield: +{shield} + Module Bonus * 4 \n" + - $"Thermal Attack: +{thermalAttack} + Module Bonus x 2 + \n" + - $"Thermal Defense: +{thermalDefense} + Module Bonus x 2 \n" + - $"EM Attack: +{ionAttack} + Module Bonus x 2 \n" + - $"EM Defense: +{ionDefense} + Module Bonus x 2 \n" + - $"Explosive Attack: +{explosiveAttack} + Module Bonus x 2 \n" + - $"Explosive Defense: +{explosiveDefense} + Module Bonus x 2 \n" + - $"Accuracy: +{accuracy} + Module Bonus x 2 \n" + - $"Evasion: +{evasion} + Module Bonus x 2 \n" + - $"Industrial Level: +{industrial} + Module Bonus x 2 (Industrial frames only)") + $"Armor: + {armor} + Module Bonus x 4 \n" + + $"Shield: + {shield} + Module Bonus x 4 \n" + + $"Thermal Attack: + {thermalAttack} + Module Bonus x 2 + \n" + + $"Thermal Defense: + {thermalDefense} + Module Bonus x 2 \n" + + $"EM Attack: + {ionAttack} + Module Bonus x 2 \n" + + $"EM Defense: + {ionDefense} + Module Bonus x 2 \n" + + $"Explosive Attack: + {explosiveAttack} + Module Bonus x 2 \n" + + $"Explosive Defense: + {explosiveDefense} + Module Bonus x 2 \n" + + $"Accuracy: + {accuracy} + Module Bonus x 2 \n" + + $"Evasion: + {evasion} + Module Bonus x 2 \n" + + $"Industrial Level: + {industrial} + Module Bonus x 2 (Industrial frames only)") .PowerType(ShipModulePowerType.Config) .RequirePerk(PerkType.Starships, requiredLevel) .EquippedAction((shipStatus, moduleBonus) => @@ -180,25 +180,25 @@ private void CapShipConfig(string itemTag, .ShortName(name) .Texture(texture) .Description($"Provides several base stats to a ship to allow it to fulfill a role and operate at full capacity: \n" + - $"Armor: +{armor} + Module Bonus x 4 \n" + - $"Shield: +{shield} + Module Bonus * 4 \n" + - $"Thermal Attack: +{thermalAttack} + Module Bonus x 2 + \n" + - $"Thermal Defense: +{thermalDefense} + Module Bonus x 2 \n" + - $"EM Attack: +{ionAttack} + Module Bonus x 2 \n" + - $"EM Defense: +{ionDefense} + Module Bonus x 2 \n" + - $"Explosive Attack: +{explosiveAttack} + Module Bonus x 2 \n" + - $"Explosive Defense: +{explosiveDefense} + Module Bonus x 2 \n" + - $"Accuracy: +{accuracy} + Module Bonus x 2 \n" + - $"Evasion: +{evasion} + Module Bonus x 2 \n" + - $"Industrial Level: +{industrial} + Module Bonus x 2 (Industrial frames only) \n" + - $"Shield Recharge Rate Adjustment: -{shieldRecharge} - Module Bonus / 2 seconds per point adjustment.") + $"Armor: + {armor} + Module Bonus x 10 \n" + + $"Shield: + {shield} + Module Bonus x 10 \n" + + $"Thermal Attack: + {thermalAttack} + Module Bonus x 2 + \n" + + $"Thermal Defense: + {thermalDefense} + Module Bonus x 2 \n" + + $"EM Attack: + {ionAttack} + Module Bonus x 2 \n" + + $"EM Defense: + {ionDefense} + Module Bonus x 2 \n" + + $"Explosive Attack: + {explosiveAttack} + Module Bonus x 2 \n" + + $"Explosive Defense: + {explosiveDefense} + Module Bonus x 2 \n" + + $"Accuracy: + {accuracy} + Module Bonus x 2 \n" + + $"Evasion: + {evasion} + Module Bonus x 2 \n" + + $"Industrial Level: + {industrial} + Module Bonus x 2 (Industrial frames only) \n" + + $"Shield Recharge Rate Adjustment: - {shieldRecharge} - Module Bonus / 2 seconds per point adjustment.") .PowerType(ShipModulePowerType.Config) .RequirePerk(PerkType.Starships, requiredLevel) .CapitalClassModule() .EquippedAction((shipStatus, moduleBonus) => { - shipStatus.MaxHull += armor + moduleBonus * 4; - shipStatus.MaxShield += shield + moduleBonus * 4; + shipStatus.MaxHull += armor + moduleBonus * 10; + shipStatus.MaxShield += shield + moduleBonus * 10; shipStatus.ThermalDamage += thermalAttack + moduleBonus * 2; shipStatus.ThermalDefense += thermalDefense + moduleBonus * 2; shipStatus.EMDamage += ionAttack + moduleBonus * 2; diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/TargetingArrayModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/TargetingArrayModuleDefinition.cs index 495a589217..c87e419e12 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/TargetingArrayModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/TargetingArrayModuleDefinition.cs @@ -24,25 +24,23 @@ private void TargetingArray(string itemTag, .Name(name) .ShortName(shortName) .Texture("iit_ess_247") - .Description($"A suite of dedicated active sensors for your ship's weapons systems. They improve your accuracy by {boostAmount} and attack by {boostAmount * 2}, but active sensor tech leaves you more visible to enemies, reducing evasion by {boostAmount}.") + .Description($"A suite of dedicated passive sensors for your ship's weapons systems. They improve your accuracy by {boostAmount}, but passive sensor tech reduces your damage by five.") .PowerType(ShipModulePowerType.Low) .RequirePerk(PerkType.DefensiveModules, 5) .CapitalClassModule() .EquippedAction((shipStatus, moduleBonus) => { shipStatus.Accuracy += boostAmount + moduleBonus; - shipStatus.ThermalDamage += 2 * (boostAmount + moduleBonus); - shipStatus.EMDamage += 2 * (boostAmount + moduleBonus); - shipStatus.ExplosiveDamage += 2 * (boostAmount + moduleBonus); - shipStatus.Evasion -= boostAmount; + shipStatus.ThermalDamage -= 5; + shipStatus.EMDamage -= 5; + shipStatus.ExplosiveDamage -= 5; }) .UnequippedAction((shipStatus, moduleBonus) => { shipStatus.Accuracy -= boostAmount + moduleBonus; - shipStatus.ThermalDamage -= 2 * (boostAmount + moduleBonus); - shipStatus.EMDamage -= 2 * (boostAmount + moduleBonus); - shipStatus.ExplosiveDamage -= 2 * (boostAmount + moduleBonus); - shipStatus.Evasion += boostAmount; + shipStatus.ThermalDamage += 5; + shipStatus.EMDamage += 5; + shipStatus.ExplosiveDamage += 5; }); } } diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/TurbolaserModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/TurbolaserModuleDefinition.cs index b0cd117f37..2f92ed4230 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/TurbolaserModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/TurbolaserModuleDefinition.cs @@ -52,7 +52,7 @@ private void Turbolaser( var attackerStat = Space.GetAttackStat(activator); var attack = Space.GetShipAttack(activator, attackBonus); - var moduleDamage = dmg + moduleBonus * 2; + var moduleDamage = dmg + moduleBonus * 3; var defenseBonus = targetShipStatus.ThermalDefense * 2; var defense = Space.GetShipDefense(target, defenseBonus); var defenderStat = GetAbilityScore(target, AbilityType.Vitality); diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/WeaponsComputerModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/WeaponsComputerModuleDefinition.cs new file mode 100644 index 0000000000..1398ca66fc --- /dev/null +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/WeaponsComputerModuleDefinition.cs @@ -0,0 +1,48 @@ +using System.Collections.Generic; +using SWLOR.Game.Server.Service.PerkService; +using SWLOR.Game.Server.Service.SpaceService; + +namespace SWLOR.Game.Server.Feature.ShipModuleDefinition +{ + public class WeaponsComputerModuleDefinition : IShipModuleListDefinition + { + private readonly ShipModuleBuilder _builder = new(); + + public Dictionary BuildShipModules() + { + WeaponsComputer("cap_wcomp1", "Dedicated Weapons System Computer", "Weapons Computer", 20); + + return _builder.Build(); + } + + private void WeaponsComputer(string itemTag, + string name, + string shortName, + int boostAmount) + { + _builder.Create(itemTag) + .Name(name) + .ShortName(shortName) + .Texture("iit_ess_252") + .Description("This weapons computer increases all Damage by 20 but reduce Accuracy by 10.") + .PowerType(ShipModulePowerType.Low) + .RequirePerk(PerkType.DefensiveModules, 5) + .CapitalClassModule() + .EquippedAction((shipStatus, moduleBonus) => + { + shipStatus.ThermalDamage += boostAmount + moduleBonus; + shipStatus.EMDamage += boostAmount + moduleBonus; + shipStatus.ExplosiveDamage += boostAmount + moduleBonus; + shipStatus.Accuracy -= 10; + }) + .UnequippedAction((shipStatus, moduleBonus) => + { + + shipStatus.ThermalDamage -= boostAmount + moduleBonus; + shipStatus.EMDamage -= boostAmount + moduleBonus; + shipStatus.ExplosiveDamage -= boostAmount + moduleBonus; + shipStatus.Accuracy += 10; + }); + } + } +} diff --git a/SWLOR.Game.Server/Service/CraftService/RecipeCategoryType.cs b/SWLOR.Game.Server/Service/CraftService/RecipeCategoryType.cs index 9df0b45ae9..eafed16831 100644 --- a/SWLOR.Game.Server/Service/CraftService/RecipeCategoryType.cs +++ b/SWLOR.Game.Server/Service/CraftService/RecipeCategoryType.cs @@ -130,6 +130,8 @@ public enum RecipeCategoryType SpecialSubmissionItems = 60, [RecipeCategory("Starship Ammo", true)] StarshipAmmo = 61, + [RecipeCategory("Capital Module Recipes", true)] + CapitalShipModule =62, } public class RecipeCategoryAttribute : Attribute diff --git a/SWLOR.Game.Server/Service/CraftService/RecipeType.cs b/SWLOR.Game.Server/Service/CraftService/RecipeType.cs index b49d61f33b..0e2aaaca9f 100644 --- a/SWLOR.Game.Server/Service/CraftService/RecipeType.cs +++ b/SWLOR.Game.Server/Service/CraftService/RecipeType.cs @@ -2500,6 +2500,11 @@ public enum RecipeType Missile35 = 4793, + WeaponsComputer = 4795, + CapitalEWar = 4796, + CapitalPowerDiverter = 4797, + + #endregion } diff --git a/SWLOR.Game.Server/Service/SpaceService/ShipModuleType.cs b/SWLOR.Game.Server/Service/SpaceService/ShipModuleType.cs index ebbf0147b8..928b06b4cd 100644 --- a/SWLOR.Game.Server/Service/SpaceService/ShipModuleType.cs +++ b/SWLOR.Game.Server/Service/SpaceService/ShipModuleType.cs @@ -21,5 +21,6 @@ public enum ShipModuleType BeamLaser = 16, ProtonBomb = 17, StripMiner = 18, + CapitalEwar = 19, } } From 51aeccc0a936147c5182c5f9a3b99a38caf16900 Mon Sep 17 00:00:00 2001 From: Taelon Date: Thu, 5 Sep 2024 11:15:49 -0400 Subject: [PATCH 2/4] Updated Weapons Computer Desc Changed from Damage to Attack to align with rest of modules. --- .../ShipModuleDefinition/WeaponsComputerModuleDefinition.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/WeaponsComputerModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/WeaponsComputerModuleDefinition.cs index 1398ca66fc..27cb0eca45 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/WeaponsComputerModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/WeaponsComputerModuleDefinition.cs @@ -24,7 +24,7 @@ private void WeaponsComputer(string itemTag, .Name(name) .ShortName(shortName) .Texture("iit_ess_252") - .Description("This weapons computer increases all Damage by 20 but reduce Accuracy by 10.") + .Description("This weapons computer increases all Attack by 20 but reduce Accuracy by 10.") .PowerType(ShipModulePowerType.Low) .RequirePerk(PerkType.DefensiveModules, 5) .CapitalClassModule() From 5ac6bad45975b70f2943138f8928072e1554bc47 Mon Sep 17 00:00:00 2001 From: Taelon Date: Thu, 5 Sep 2024 11:18:31 -0400 Subject: [PATCH 3/4] Updated Targeting Array Desc Changed Desc for uniformity. --- .../ShipModuleDefinition/TargetingArrayModuleDefinition.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/TargetingArrayModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/TargetingArrayModuleDefinition.cs index c87e419e12..69493f24f5 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/TargetingArrayModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/TargetingArrayModuleDefinition.cs @@ -24,7 +24,7 @@ private void TargetingArray(string itemTag, .Name(name) .ShortName(shortName) .Texture("iit_ess_247") - .Description($"A suite of dedicated passive sensors for your ship's weapons systems. They improve your accuracy by {boostAmount}, but passive sensor tech reduces your damage by five.") + .Description($"A suite of dedicated passive sensors for your ship's weapons systems. They improve your accuracy by {boostAmount}, but passive sensor tech reduces your Attack by five.") .PowerType(ShipModulePowerType.Low) .RequirePerk(PerkType.DefensiveModules, 5) .CapitalClassModule() From d3f21f32afc7a2abf953ac71883edd15279d47d3 Mon Sep 17 00:00:00 2001 From: Taelon Date: Wed, 11 Sep 2024 14:08:59 -0400 Subject: [PATCH 4/4] Fixing my mistakes Whoopsie --- .../ShipModuleDefinition/BeamCannonModuleDefinition.cs | 10 +++++----- .../ShipModuleDefinition/IonCannonModuleDefinition.cs | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/BeamCannonModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/BeamCannonModuleDefinition.cs index f52bd93edf..9f1cda6814 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/BeamCannonModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/BeamCannonModuleDefinition.cs @@ -16,11 +16,11 @@ public class BeamCannonModuleDefinition : IShipModuleListDefinition public Dictionary BuildShipModules() { - BeamCannon("beamcannon1", "Basic Beam Cannon", "Basic Beam C.", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 3 thermal DMG on a hit.", 3, 6, 2); - BeamCannon("beamcannon2", "Beam Cannon I", "Beam Cann. 1", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 6 thermal DMG on a hit.", 6, 7, 4); - BeamCannon("beamcannon3", "Beam Cannon II", "Beam Cann. 2", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 9 thermal DMG on a hit.", 9, 8, 6); - BeamCannon("beamcannon4", "Beam Cannon III", "Beam Cann. 3", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 12 thermal DMG on a hit.", 12, 9, 8); - BeamCannon("beamcannon5", "Beam Cannon IV", "Beam Cann. 4", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 15 thermal DMG on a hit.", 15, 10, 10); + BeamCannon("beamcannon1", "Basic Beam Cannon", "Basic Beam C.", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 3 thermal DMG on a hit.", 3, 8, 1); + BeamCannon("beamcannon2", "Beam Cannon I", "Beam Cann. 1", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 6 thermal DMG on a hit.", 6, 10, 2); + BeamCannon("beamcannon3", "Beam Cannon II", "Beam Cann. 2", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 9 thermal DMG on a hit.", 9, 12, 3); + BeamCannon("beamcannon4", "Beam Cannon III", "Beam Cann. 3", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 12 thermal DMG on a hit.", 12, 14, 4); + BeamCannon("beamcannon5", "Beam Cannon IV", "Beam Cann. 4", "A stream of high energy particles deals damage over time, three attacks are made over the course of one second, each tick doing 15 thermal DMG on a hit.", 15, 16, 5); return _builder.Build(); } diff --git a/SWLOR.Game.Server/Feature/ShipModuleDefinition/IonCannonModuleDefinition.cs b/SWLOR.Game.Server/Feature/ShipModuleDefinition/IonCannonModuleDefinition.cs index af0aad0613..62a72ddbfe 100644 --- a/SWLOR.Game.Server/Feature/ShipModuleDefinition/IonCannonModuleDefinition.cs +++ b/SWLOR.Game.Server/Feature/ShipModuleDefinition/IonCannonModuleDefinition.cs @@ -16,11 +16,11 @@ public class IonCannonModuleDefinition : IShipModuleListDefinition public Dictionary BuildShipModules() { - IonCannon("ion_cann_b", "Basic Ion Cannon", "B. Ion Cann.", "Deals 15 EM DMG to your target. Deals reduced damage to unshielded targets, but imposes debuffs.", 1, 4, 15); + IonCannon("ion_cann_b", "Basic Ion Cannon", "B. Ion Cann.", "Deals 15 EM DMG to your target. Deals reduced damage to unshielded targets, but imposes debuffs.", 1, 6, 15); IonCannon("ion_cann_1", "Ion Cannon I", "Ion Cann. I", "Deals 30 EM DMG to your target. Deals reduced damage to unshielded targets, but imposes debuffs.", 2, 8, 30); - IonCannon("ion_cann_2", "Ion Cannon II", "Ion Cann. II", "Deals 45 EM DMG to your target. Deals reduced damage to unshielded targets, but imposes debuffs.", 3, 12, 45); - IonCannon("ion_cann_3", "Ion Cannon III", "Ion Cann. III", "Deals 60 EM DMG to your target. Deals reduced damage to unshielded targets, but imposes debuffs.", 4, 16, 60); - IonCannon("ion_cann_4", "Ion Cannon IV", "Ion Cann. IV", "Deals 75 EM DMG to your target. Deals reduced damage to unshielded targets, but imposes debuffs.", 5, 20, 75); + IonCannon("ion_cann_2", "Ion Cannon II", "Ion Cann. II", "Deals 45 EM DMG to your target. Deals reduced damage to unshielded targets, but imposes debuffs.", 3, 10, 45); + IonCannon("ion_cann_3", "Ion Cannon III", "Ion Cann. III", "Deals 60 EM DMG to your target. Deals reduced damage to unshielded targets, but imposes debuffs.", 4, 12, 60); + IonCannon("ion_cann_4", "Ion Cannon IV", "Ion Cann. IV", "Deals 75 EM DMG to your target. Deals reduced damage to unshielded targets, but imposes debuffs.", 5, 14, 75); return _builder.Build(); }