From fe5012282039e3526b67527fdbb9bbaaa0e7a66a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kami=C5=84ski?= Date: Sat, 22 Jun 2024 23:12:35 +0200 Subject: [PATCH 1/2] Update Operand enums, RegistryOp method --- UdpHosts/GameServer/Enums/Operand.cs | 17 ++++++---- .../Systems/Aptitude/AbilitySystem.cs | 32 ++++++++++++------- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/UdpHosts/GameServer/Enums/Operand.cs b/UdpHosts/GameServer/Enums/Operand.cs index cea33546..357ee67e 100644 --- a/UdpHosts/GameServer/Enums/Operand.cs +++ b/UdpHosts/GameServer/Enums/Operand.cs @@ -2,13 +2,18 @@ namespace GameServer.Enums; -[SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1602:EnumerationItemsMustBeDocumented", Justification = "TODO")] +[SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1602:EnumerationItemsMustBeDocumented", Justification = "Based on FUN_00bc1130")] public enum Operand : byte { ASSIGN = 0, - ADDITIVE = 1, - MULTIPLICATIVE = 2, - PERK_DAMAGE_SCALAR = 3, // Uncertain - DIVIDE_FIRST_BY_SECOND = 4, // Uncertain - DIVIDE_SECOND_BY_FIRST = 5, // Uncertain + ADD = 1, + MULTIPLY = 2, + EXPONENTIATE = 3, + SUBTRACT = 4, + DIVIDE = 5, + // Add and multiply appear twice in a switch inside client + ADD_ALT = 6, + MULTIPLY_ALT = 7, + MINIMUM = 8, + MAXIMUM = 9, } diff --git a/UdpHosts/GameServer/Systems/Aptitude/AbilitySystem.cs b/UdpHosts/GameServer/Systems/Aptitude/AbilitySystem.cs index 18799a84..4270ece6 100644 --- a/UdpHosts/GameServer/Systems/Aptitude/AbilitySystem.cs +++ b/UdpHosts/GameServer/Systems/Aptitude/AbilitySystem.cs @@ -33,19 +33,27 @@ public static float RegistryOp(float first, float second, Operand op) { case Operand.ASSIGN: return second; - case Operand.ADDITIVE: - return first + second; - case Operand.MULTIPLICATIVE: - return first * second; - case Operand.PERK_DAMAGE_SCALAR: - Console.WriteLine($"Uncertain RegistryOp {op}"); - return first * second; // TODO: Uncertain - case Operand.DIVIDE_FIRST_BY_SECOND: - Console.WriteLine($"Uncertain RegistryOp {op}"); - return first / second; - case Operand.DIVIDE_SECOND_BY_FIRST: - Console.WriteLine($"Uncertain RegistryOp {op}"); + case Operand.ADD: + case Operand.ADD_ALT: + return second + first; + case Operand.MULTIPLY: + case Operand.MULTIPLY_ALT: + return second * first; + case Operand.EXPONENTIATE: + Console.WriteLine($"Uncertain RegistryOp {op}. {second} ^ {first} = {(float)Math.Pow(second, first)}"); + return (float)Math.Pow(second, first); + case Operand.SUBTRACT: + Console.WriteLine($"Uncertain RegistryOp {op}. {second} - {first} = {second - first}"); + return second - first; + case Operand.DIVIDE: + Console.WriteLine($"Uncertain RegistryOp {op}. {second} / {first} = {second / first}"); return second / first; + case Operand.MINIMUM: + Console.WriteLine($"Uncertain RegistryOp {op}. Min({second}, {first}) = {((first <= second) ? first : second)}"); + return (first <= second) ? first : second; + case Operand.MAXIMUM: + Console.WriteLine($"Uncertain RegistryOp {op}. Max({second}, {first}) = {((first >= second) ? first : second)}"); + return (first >= second) ? first : second; default: Console.WriteLine($"Unknown RegistryOp {op}"); return second; From 30ba21b62557f4d5d479686591e10adfe92896af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kami=C5=84ski?= Date: Tue, 25 Jun 2024 22:58:58 +0200 Subject: [PATCH 2/2] Fix CI warnings --- UdpHosts/GameServer/Data/CharacterInventory.cs | 2 +- UdpHosts/GameServer/Enums/Operand.cs | 2 +- UdpHosts/GameServer/StaticDB/Loaders/StaticDBLoader.cs | 6 ++++++ UdpHosts/GameServer/StaticDB/SDBInterface.cs | 1 + 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/UdpHosts/GameServer/Data/CharacterInventory.cs b/UdpHosts/GameServer/Data/CharacterInventory.cs index d39dbc4e..063c507c 100644 --- a/UdpHosts/GameServer/Data/CharacterInventory.cs +++ b/UdpHosts/GameServer/Data/CharacterInventory.cs @@ -417,7 +417,7 @@ public void EquipVisualBySdbId(uint loadoutId, LoadoutVisualType visual, Loadout if (sdb_id != 0) { // Update Visuals - _loadouts[(uint)loadoutId].LoadoutConfigs[0].Visuals = _loadouts[(uint)loadoutId].LoadoutConfigs[0].Visuals.Append(new LoadoutConfig_Visual() { ItemSdbId = sdb_id, VisualType = visual, Data1 = 0, Data2 = 0, Transform = []}).ToArray(); + _loadouts[(uint)loadoutId].LoadoutConfigs[0].Visuals = _loadouts[(uint)loadoutId].LoadoutConfigs[0].Visuals.Append(new LoadoutConfig_Visual() { ItemSdbId = sdb_id, VisualType = visual, Data1 = 0, Data2 = 0, Transform = Array.Empty() }).ToArray(); var item = _items.First(e => e.Value.SdbId == sdb_id).Value; } diff --git a/UdpHosts/GameServer/Enums/Operand.cs b/UdpHosts/GameServer/Enums/Operand.cs index 357ee67e..80e22824 100644 --- a/UdpHosts/GameServer/Enums/Operand.cs +++ b/UdpHosts/GameServer/Enums/Operand.cs @@ -5,13 +5,13 @@ namespace GameServer.Enums; [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1602:EnumerationItemsMustBeDocumented", Justification = "Based on FUN_00bc1130")] public enum Operand : byte { + // Add and multiply appear twice in a switch inside client ASSIGN = 0, ADD = 1, MULTIPLY = 2, EXPONENTIATE = 3, SUBTRACT = 4, DIVIDE = 5, - // Add and multiply appear twice in a switch inside client ADD_ALT = 6, MULTIPLY_ALT = 7, MINIMUM = 8, diff --git a/UdpHosts/GameServer/StaticDB/Loaders/StaticDBLoader.cs b/UdpHosts/GameServer/StaticDB/Loaders/StaticDBLoader.cs index 3e8024e4..affb3315 100644 --- a/UdpHosts/GameServer/StaticDB/Loaders/StaticDBLoader.cs +++ b/UdpHosts/GameServer/StaticDB/Loaders/StaticDBLoader.cs @@ -128,6 +128,12 @@ public Dictionary LoadImpactApplyEffectComman .ToDictionary(row => row.Id); } + public Dictionary LoadImpactToggleEffectCommandDef() + { + return LoadStaticDB("apt::ImpactToggleEffectCommandDef") + .ToDictionary(row => row.Id); + } + public Dictionary LoadConditionalBranchCommandDef() { return LoadStaticDB("apt::ConditionalBranchCommandDef") diff --git a/UdpHosts/GameServer/StaticDB/SDBInterface.cs b/UdpHosts/GameServer/StaticDB/SDBInterface.cs index 2c9bc35a..d7ec80d7 100644 --- a/UdpHosts/GameServer/StaticDB/SDBInterface.cs +++ b/UdpHosts/GameServer/StaticDB/SDBInterface.cs @@ -259,6 +259,7 @@ public static void Init(StaticDB instance) CommandType = loader.LoadCommandType(); AbilityData = loader.LoadAbilityData(); ImpactApplyEffectCommandDef = loader.LoadImpactApplyEffectCommandDef(); + ImpactToggleEffectCommandDef = loader.LoadImpactToggleEffectCommandDef(); WhileLoopCommandDef = loader.LoadWhileLoopCommandDef(); LogicNegateCommandDef = loader.LoadLogicNegateCommandDef(); LogicOrCommandDef = loader.LoadLogicOrCommandDef();