From 71a8ca2a8adb3b5502688f7b692e5d7c275e951b Mon Sep 17 00:00:00 2001 From: KingRainbow44 Date: Tue, 11 Apr 2023 21:07:29 -0400 Subject: [PATCH] Implement scripting: `SetEntityServerGlobalValueByConfigId` w/ help from: Moistcrafter#9172 --- .../java/emu/grasscutter/scripts/ScriptLib.java | 10 ++++++++-- .../PacketServerGlobalValueChangeNotify.java | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 src/main/java/emu/grasscutter/server/packet/send/PacketServerGlobalValueChangeNotify.java diff --git a/src/main/java/emu/grasscutter/scripts/ScriptLib.java b/src/main/java/emu/grasscutter/scripts/ScriptLib.java index 2f0ad750e..2877f5eb5 100644 --- a/src/main/java/emu/grasscutter/scripts/ScriptLib.java +++ b/src/main/java/emu/grasscutter/scripts/ScriptLib.java @@ -512,8 +512,14 @@ public class ScriptLib { } public int SetEntityServerGlobalValueByConfigId(int cfgId, String sgvName, int value){ - logger.warn("[LUA] Call unimplemented SetEntityServerGlobalValueByConfigId with {} {} {}", cfgId, sgvName, value); - //TODO implement + var scriptManager = this.getSceneScriptManager(); + if (scriptManager == null) return 1; + + var entity = scriptManager.getScene().getEntityByConfigId(cfgId); + if (entity == null) return 2; + + scriptManager.getScene().getWorld().broadcastPacket( + new PacketServerGlobalValueChangeNotify(entity, sgvName, value)); return 0; } diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketServerGlobalValueChangeNotify.java b/src/main/java/emu/grasscutter/server/packet/send/PacketServerGlobalValueChangeNotify.java new file mode 100644 index 000000000..b4b604cb9 --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketServerGlobalValueChangeNotify.java @@ -0,0 +1,17 @@ +package emu.grasscutter.server.packet.send; + +import emu.grasscutter.game.entity.GameEntity; +import emu.grasscutter.net.packet.BasePacket; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.proto.ServerGlobalValueChangeNotifyOuterClass.ServerGlobalValueChangeNotify; +import emu.grasscutter.utils.Utils; + +public final class PacketServerGlobalValueChangeNotify extends BasePacket { + public PacketServerGlobalValueChangeNotify(GameEntity entity, String abilityHash, int value) { + super(PacketOpcodes.ServerGlobalValueChangeNotify); + + this.setData(ServerGlobalValueChangeNotify.newBuilder() + .setEntityId(entity.getId()).setValue(value) + .setKeyHash(Utils.abilityHash(abilityHash))); + } +}