From bd59da88531721421bda16a923a1d1db1b35855c Mon Sep 17 00:00:00 2001 From: KingRainbow44 Date: Sun, 27 Aug 2023 13:36:39 -0400 Subject: [PATCH] Broadcast global value changes --- .../actions/ActionCopyGlobalValue.java | 6 ++++ .../ability/actions/ActionSetGlobalValue.java | 29 +++++++++++++++++++ .../ActionSetGlobalValueToOverrideMap.java | 8 +++-- .../PacketServerGlobalValueChangeNotify.java | 4 +-- 4 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 src/main/java/emu/grasscutter/game/ability/actions/ActionSetGlobalValue.java diff --git a/src/main/java/emu/grasscutter/game/ability/actions/ActionCopyGlobalValue.java b/src/main/java/emu/grasscutter/game/ability/actions/ActionCopyGlobalValue.java index 432086f21..92889d6d1 100644 --- a/src/main/java/emu/grasscutter/game/ability/actions/ActionCopyGlobalValue.java +++ b/src/main/java/emu/grasscutter/game/ability/actions/ActionCopyGlobalValue.java @@ -5,6 +5,7 @@ import emu.grasscutter.Grasscutter; import emu.grasscutter.data.binout.AbilityModifier.AbilityModifierAction; import emu.grasscutter.game.ability.Ability; import emu.grasscutter.game.entity.GameEntity; +import emu.grasscutter.server.packet.send.PacketServerGlobalValueChangeNotify; @AbilityAction(AbilityModifierAction.Type.CopyGlobalValue) public final class ActionCopyGlobalValue extends AbilityActionHandler { @@ -30,6 +31,11 @@ public final class ActionCopyGlobalValue extends AbilityActionHandler { // Apply the new global value. destination.getGlobalAbilityValues().put(action.dstKey, value); destination.onAbilityValueUpdate(); + + // Send a value update packet. + entity.getScene().getHost().sendPacket( + new PacketServerGlobalValueChangeNotify(entity, action.dstKey, value)); + return true; } } diff --git a/src/main/java/emu/grasscutter/game/ability/actions/ActionSetGlobalValue.java b/src/main/java/emu/grasscutter/game/ability/actions/ActionSetGlobalValue.java new file mode 100644 index 000000000..f9bd2b007 --- /dev/null +++ b/src/main/java/emu/grasscutter/game/ability/actions/ActionSetGlobalValue.java @@ -0,0 +1,29 @@ +package emu.grasscutter.game.ability.actions; + +import com.google.protobuf.ByteString; +import emu.grasscutter.data.binout.AbilityModifier.AbilityModifierAction; +import emu.grasscutter.game.ability.Ability; +import emu.grasscutter.game.entity.GameEntity; +import emu.grasscutter.server.packet.send.PacketServerGlobalValueChangeNotify; + +@AbilityAction(AbilityModifierAction.Type.SetGlobalValue) +public final class ActionSetGlobalValue extends AbilityActionHandler { + @Override + public boolean execute( + Ability ability, AbilityModifierAction action, ByteString abilityData, GameEntity target) { + // Get the key & value. + var valueKey = action.key; + var value = action.ratio; + + // Set the global value. + target.getGlobalAbilityValues().put(valueKey, value.get(ability)); + // Update the target. + target.onAbilityValueUpdate(); + + // Send a value update packet. + target.getScene().getHost().sendPacket( + new PacketServerGlobalValueChangeNotify(target, valueKey, value.get(ability))); + + return false; + } +} diff --git a/src/main/java/emu/grasscutter/game/ability/actions/ActionSetGlobalValueToOverrideMap.java b/src/main/java/emu/grasscutter/game/ability/actions/ActionSetGlobalValueToOverrideMap.java index 9656b8bda..4cc33a628 100644 --- a/src/main/java/emu/grasscutter/game/ability/actions/ActionSetGlobalValueToOverrideMap.java +++ b/src/main/java/emu/grasscutter/game/ability/actions/ActionSetGlobalValueToOverrideMap.java @@ -5,9 +5,10 @@ import emu.grasscutter.Grasscutter; import emu.grasscutter.data.binout.AbilityModifier.AbilityModifierAction; import emu.grasscutter.game.ability.Ability; import emu.grasscutter.game.entity.*; +import emu.grasscutter.server.packet.send.PacketServerGlobalValueChangeNotify; @AbilityAction(AbilityModifierAction.Type.SetGlobalValueToOverrideMap) -public class ActionSetGlobalValueToOverrideMap extends AbilityActionHandler { +public final class ActionSetGlobalValueToOverrideMap extends AbilityActionHandler { @Override public boolean execute( Ability ability, AbilityModifierAction action, ByteString abilityData, GameEntity target) { @@ -36,8 +37,11 @@ public class ActionSetGlobalValueToOverrideMap extends AbilityActionHandler { ability .getAbilitySpecials() .put(action.overrideMapKey, globalValue.floatValue()); // Override our own. + entity.onAbilityValueUpdate(); - // TODO: ChangeServerGlobalValueNotify + // Send a value update packet. + entity.getScene().getHost().sendPacket( + new PacketServerGlobalValueChangeNotify(entity, globalValueKey, globalValue)); return true; } diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketServerGlobalValueChangeNotify.java b/src/main/java/emu/grasscutter/server/packet/send/PacketServerGlobalValueChangeNotify.java index b270a15f0..5ad32969c 100644 --- a/src/main/java/emu/grasscutter/server/packet/send/PacketServerGlobalValueChangeNotify.java +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketServerGlobalValueChangeNotify.java @@ -7,7 +7,7 @@ import emu.grasscutter.net.proto.ServerGlobalValueChangeNotifyOuterClass.ServerG import emu.grasscutter.utils.Utils; public final class PacketServerGlobalValueChangeNotify extends BasePacket { - public PacketServerGlobalValueChangeNotify(GameEntity entity, String abilityHash, int value) { + public PacketServerGlobalValueChangeNotify(GameEntity entity, String abilityHash, float value) { super(PacketOpcodes.ServerGlobalValueChangeNotify); this.setData( @@ -17,7 +17,7 @@ public final class PacketServerGlobalValueChangeNotify extends BasePacket { .setKeyHash(Utils.abilityHash(abilityHash))); } - public PacketServerGlobalValueChangeNotify(int entityId, String abilityHash, int value) { + public PacketServerGlobalValueChangeNotify(int entityId, String abilityHash, float value) { super(PacketOpcodes.ServerGlobalValueChangeNotify); this.setData(