From 3ca181e76ddc64b40d124671cf1e383f17a5199a Mon Sep 17 00:00:00 2001 From: yarik0chka Date: Fri, 22 Apr 2022 23:24:51 +0500 Subject: [PATCH 01/12] Implemented sitting --- .../grasscutter/net/packet/PacketOpcodes.java | 3 ++- .../recv/HandleEvtAvatarSitDownNotify.java | 21 ++++++++++++++++ .../server/packet/recv/HandleSitReq.java | 24 +++++++++++++++++++ .../send/PacketEvtAvatarSitDownNotify.java | 20 ++++++++++++++++ .../server/packet/send/PacketSitRsp.java | 21 ++++++++++++++++ 5 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 src/main/java/emu/grasscutter/server/packet/recv/HandleEvtAvatarSitDownNotify.java create mode 100644 src/main/java/emu/grasscutter/server/packet/recv/HandleSitReq.java create mode 100644 src/main/java/emu/grasscutter/server/packet/send/PacketEvtAvatarSitDownNotify.java create mode 100644 src/main/java/emu/grasscutter/server/packet/send/PacketSitRsp.java diff --git a/src/main/java/emu/grasscutter/net/packet/PacketOpcodes.java b/src/main/java/emu/grasscutter/net/packet/PacketOpcodes.java index 418f16a4b..365055e26 100644 --- a/src/main/java/emu/grasscutter/net/packet/PacketOpcodes.java +++ b/src/main/java/emu/grasscutter/net/packet/PacketOpcodes.java @@ -1034,6 +1034,8 @@ public class PacketOpcodes { public static final int ShowTemplateReminderNotify = 3164; public static final int SignInInfoReq = 2510; public static final int SignInInfoRsp = 2515; + public static final int SitReq = 354; + public static final int SitRsp = 335; public static final int SocialDataNotify = 4063; public static final int SpringUseReq = 1720; public static final int SpringUseRsp = 1727; @@ -1208,5 +1210,4 @@ public class PacketOpcodes { public static final int WorldRoutineChangeNotify = 3548; public static final int WorldRoutineTypeCloseNotify = 3513; public static final int WorldRoutineTypeRefreshNotify = 3545; - } \ No newline at end of file diff --git a/src/main/java/emu/grasscutter/server/packet/recv/HandleEvtAvatarSitDownNotify.java b/src/main/java/emu/grasscutter/server/packet/recv/HandleEvtAvatarSitDownNotify.java new file mode 100644 index 000000000..8f653dde9 --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/recv/HandleEvtAvatarSitDownNotify.java @@ -0,0 +1,21 @@ +package emu.grasscutter.server.packet.recv; + +import emu.grasscutter.net.packet.Opcodes; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.proto.EvtAvatarSitDownNotifyOuterClass.EvtAvatarSitDownNotify; +import emu.grasscutter.net.packet.PacketHandler; +import emu.grasscutter.server.game.GameSession; +import emu.grasscutter.server.packet.send.PacketEvtAvatarSitDownNotify; + +@Opcodes(PacketOpcodes.EvtAvatarSitDownNotify) +public class HandleEvtAvatarSitDownNotify extends PacketHandler { + + @Override + public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { + EvtAvatarSitDownNotify notify = EvtAvatarSitDownNotify.parseFrom(payload); + + session.send(new PacketEvtAvatarSitDownNotify(notify)); + } + +} + diff --git a/src/main/java/emu/grasscutter/server/packet/recv/HandleSitReq.java b/src/main/java/emu/grasscutter/server/packet/recv/HandleSitReq.java new file mode 100644 index 000000000..418d99eef --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/recv/HandleSitReq.java @@ -0,0 +1,24 @@ +package emu.grasscutter.server.packet.recv; + +import emu.grasscutter.net.packet.Opcodes; +import emu.grasscutter.net.packet.PacketHandler; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.proto.SitReqOuterClass; +import emu.grasscutter.server.game.GameSession; +import emu.grasscutter.server.packet.send.PacketSitRsp; +import emu.grasscutter.utils.Position; + +@Opcodes(PacketOpcodes.SitReq) +public class HandleSitReq extends PacketHandler { + @Override + public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { + SitReqOuterClass.SitReq req = SitReqOuterClass.SitReq.parseFrom(payload); + + float x = req.getPosition().getX(); + float y = req.getPosition().getY(); + float z = req.getPosition().getZ(); + + session.send(new PacketSitRsp(req.getChairId(), new Position(x, y, z), session.getPlayer().getTeamManager().getCurrentAvatarEntity().getId())); + } + +} \ No newline at end of file diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketEvtAvatarSitDownNotify.java b/src/main/java/emu/grasscutter/server/packet/send/PacketEvtAvatarSitDownNotify.java new file mode 100644 index 000000000..6a051024a --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketEvtAvatarSitDownNotify.java @@ -0,0 +1,20 @@ +package emu.grasscutter.server.packet.send; + +import emu.grasscutter.net.packet.GenshinPacket; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.proto.EvtAvatarSitDownNotifyOuterClass.EvtAvatarSitDownNotify; + +public class PacketEvtAvatarSitDownNotify extends GenshinPacket { + + public PacketEvtAvatarSitDownNotify(EvtAvatarSitDownNotify notify) { + super(PacketOpcodes.EvtAvatarSitDownNotify); + + EvtAvatarSitDownNotify proto = EvtAvatarSitDownNotify.newBuilder() + .setEntityId(notify.getEntityId()) + .setPosition(notify.getPosition()) + .setChairId(notify.getChairId()) + .build(); + + this.setData(proto); + } +} diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketSitRsp.java b/src/main/java/emu/grasscutter/server/packet/send/PacketSitRsp.java new file mode 100644 index 000000000..70893965b --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketSitRsp.java @@ -0,0 +1,21 @@ +package emu.grasscutter.server.packet.send; + +import emu.grasscutter.net.packet.GenshinPacket; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.proto.SitRspOuterClass.SitRsp; +import emu.grasscutter.utils.Position; + +public class PacketSitRsp extends GenshinPacket { + + public PacketSitRsp(long chairId, Position pos, int EntityId) { + super(PacketOpcodes.SitRsp); + + SitRsp proto = SitRsp.newBuilder() + .setEntityId(EntityId) + .setPosition(pos.toProto()) + .setChairId(chairId) + .build(); + + this.setData(proto); + } +} From cdf6c697f1f1f2da1b5747bb7c52427c44e5813b Mon Sep 17 00:00:00 2001 From: Raeliana <55598870+Raeliana@users.noreply.github.com> Date: Sat, 23 Apr 2022 02:48:04 +0300 Subject: [PATCH 02/12] Create ClearWeaponsCommand.java A command to clear unlocked and unequipped artifacts --- .../command/commands/ClearWeaponsCommand.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/emu/grasscutter/command/commands/ClearWeaponsCommand.java diff --git a/src/main/java/emu/grasscutter/command/commands/ClearWeaponsCommand.java b/src/main/java/emu/grasscutter/command/commands/ClearWeaponsCommand.java new file mode 100644 index 000000000..8fab1768b --- /dev/null +++ b/src/main/java/emu/grasscutter/command/commands/ClearWeaponsCommand.java @@ -0,0 +1,29 @@ +package emu.grasscutter.command.commands; + +import emu.grasscutter.command.Command; +import emu.grasscutter.command.CommandHandler; +import emu.grasscutter.game.GenshinPlayer; +import emu.grasscutter.game.inventory.Inventory; +import emu.grasscutter.game.inventory.ItemType; + +import java.util.List; + +@Command(label = "clearweapons", usage = "clearweapons", + description = "Deletes all unequipped and unlocked weapons, including yellow rarity ones from your inventory", + aliases = {"clearwpns"}, permission = "player.clearweapons") +public final class ClearWeaponsCommand implements CommandHandler { + + @Override + public void execute(GenshinPlayer sender, List args) { + if (sender == null) { + CommandHandler.sendMessage(null, "Run this command in-game."); + return; // TODO: clear player's weapons from console or other players + } + + Inventory playerInventory = sender.getInventory(); + playerInventory.getItems().values().stream() + .filter(item -> item.getItemType() == ItemType.ITEM_WEAPON) + .filter(item -> !item.isLocked() && !item.isEquipped()) + .forEach(item -> playerInventory.removeItem(item, item.getCount())); + } +} From 7fd0b371d004831ba8b222cc4ee50050707b1ee8 Mon Sep 17 00:00:00 2001 From: Miyucchi Date: Sat, 23 Apr 2022 03:22:32 +0200 Subject: [PATCH 03/12] Profile set birthday feature --- .../emu/grasscutter/game/GenshinPlayer.java | 16 ++++- .../game/player/PlayerBirthday.java | 68 +++++++++++++++++++ .../recv/HandlerSetPlayerBirthdayReq.java | 38 +++++++++++ .../send/PacketSetPlayerBirthdayRsp.java | 22 ++++++ 4 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 src/main/java/emu/grasscutter/game/player/PlayerBirthday.java create mode 100644 src/main/java/emu/grasscutter/server/packet/recv/HandlerSetPlayerBirthdayReq.java create mode 100644 src/main/java/emu/grasscutter/server/packet/send/PacketSetPlayerBirthdayRsp.java diff --git a/src/main/java/emu/grasscutter/game/GenshinPlayer.java b/src/main/java/emu/grasscutter/game/GenshinPlayer.java index 44f960198..5a8b96748 100644 --- a/src/main/java/emu/grasscutter/game/GenshinPlayer.java +++ b/src/main/java/emu/grasscutter/game/GenshinPlayer.java @@ -18,6 +18,7 @@ import emu.grasscutter.game.friends.PlayerProfile; import emu.grasscutter.game.gacha.PlayerGachaInfo; import emu.grasscutter.game.inventory.GenshinItem; import emu.grasscutter.game.inventory.Inventory; +import emu.grasscutter.game.player.PlayerBirthday; import emu.grasscutter.game.props.ActionReason; import emu.grasscutter.game.props.PlayerProperty; import emu.grasscutter.net.packet.GenshinPacket; @@ -73,6 +74,7 @@ public class GenshinPlayer { private int nameCardId = 210001; private Position pos; private Position rotation; + private PlayerBirthday birthday; private Map properties; private Set nameCardList; @@ -139,6 +141,8 @@ public class GenshinPlayer { this.combatInvokeHandler = new InvokeHandler(PacketCombatInvocationsNotify.class); this.abilityInvokeHandler = new InvokeHandler(PacketAbilityInvocationsNotify.class); this.clientAbilityInitFinishHandler = new InvokeHandler(PacketClientAbilityInitFinishNotify.class); + + this.birthday = new PlayerBirthday(); } // On player creation @@ -150,6 +154,7 @@ public class GenshinPlayer { this.nickname = "Traveler"; this.signature = ""; this.teamManager = new TeamManager(this); + this.birthday = new PlayerBirthday(); this.setProperty(PlayerProperty.PROP_PLAYER_LEVEL, 1); this.setProperty(PlayerProperty.PROP_IS_SPRING_AUTO_USE, 1); this.setProperty(PlayerProperty.PROP_SPRING_AUTO_USE_PERCENT, 50); @@ -642,6 +647,15 @@ public class GenshinPlayer { return onlineInfo.build(); } + public PlayerBirthday getBirthday(){ + return this.birthday; + } + + public void setBirthday(int d, int m) { + this.birthday = new PlayerBirthday(d, m); + this.updateProfile(); + } + public SocialDetail.Builder getSocialDetail() { SocialDetail.Builder social = SocialDetail.newBuilder() .setUid(this.getUid()) @@ -649,7 +663,7 @@ public class GenshinPlayer { .setNickname(this.getNickname()) .setSignature(this.getSignature()) .setLevel(this.getLevel()) - .setBirthday(Birthday.newBuilder()) + .setBirthday(this.getBirthday().getFilledProtoWhenNotEmpty()) .setWorldLevel(this.getWorldLevel()) .setUnk1(1) .setUnk3(1) diff --git a/src/main/java/emu/grasscutter/game/player/PlayerBirthday.java b/src/main/java/emu/grasscutter/game/player/PlayerBirthday.java new file mode 100644 index 000000000..733f58ee5 --- /dev/null +++ b/src/main/java/emu/grasscutter/game/player/PlayerBirthday.java @@ -0,0 +1,68 @@ +package emu.grasscutter.game.player; + +import emu.grasscutter.net.proto.BirthdayOuterClass.Birthday; + +public class PlayerBirthday { + private int day; + private int month; + + public PlayerBirthday(){ + this.day = 0; + this.month = 0; + } + + public PlayerBirthday(int day, int month){ + this.day = day; + this.month = month; + } + + public PlayerBirthday set(PlayerBirthday birth){ + this.day = birth.day; + this.month = birth.month; + + return this; + } + + public PlayerBirthday set(int d, int m){ + this.day = d; + this.month = m; + + return this; + } + + public PlayerBirthday setDay(int value){ + this.day = value; + return this; + } + + public PlayerBirthday setMonth(int value){ + this.month = value; + return this; + } + + public int getDay(){ + return this.day; + } + + public int getMonth(){ + return this.month; + } + + public Birthday toProto(){ + return Birthday.newBuilder() + .setDay(this.getDay()) + .setMonth(this.getMonth()) + .build(); + } + + public Birthday.Builder getFilledProtoWhenNotEmpty(){ + if(this.getDay() > 0) + { + return Birthday.newBuilder() + .setDay(this.getDay()) + .setMonth(this.getMonth()); + } + + return Birthday.newBuilder(); + } +} \ No newline at end of file diff --git a/src/main/java/emu/grasscutter/server/packet/recv/HandlerSetPlayerBirthdayReq.java b/src/main/java/emu/grasscutter/server/packet/recv/HandlerSetPlayerBirthdayReq.java new file mode 100644 index 000000000..0edb08f73 --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/recv/HandlerSetPlayerBirthdayReq.java @@ -0,0 +1,38 @@ +package emu.grasscutter.server.packet.recv; + +import emu.grasscutter.server.game.GameSession; +import emu.grasscutter.server.packet.send.PacketGetPlayerSocialDetailRsp; +import emu.grasscutter.server.packet.send.PacketSetPlayerBirthdayRsp; + +import emu.grasscutter.net.packet.Opcodes; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.packet.PacketHandler; + +import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail; +import emu.grasscutter.net.proto.SetPlayerBirthdayReqOuterClass.SetPlayerBirthdayReq; + +import com.google.gson.Gson; + +@Opcodes(PacketOpcodes.SetPlayerBirthdayReq) +public class HandlerSetPlayerBirthdayReq extends PacketHandler { + @Override + public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { + SetPlayerBirthdayReq req = SetPlayerBirthdayReq.parseFrom(payload); + + if(req.getBirth() != null && req.getBirth().getDay() > 0 && req.getBirth().getMonth() > 0) + { + int day = req.getBirth().getDay(); + int month = req.getBirth().getMonth(); + + // Update birthday value + session.getPlayer().setBirthday(day, month); + + // Save birthday month and day + session.getPlayer().save(); + SocialDetail.Builder detail = session.getPlayer().getSocialDetail(); + + session.send(new PacketSetPlayerBirthdayRsp(session.getPlayer())); + session.send(new PacketGetPlayerSocialDetailRsp(detail)); + } + } +} diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketSetPlayerBirthdayRsp.java b/src/main/java/emu/grasscutter/server/packet/send/PacketSetPlayerBirthdayRsp.java new file mode 100644 index 000000000..acca25068 --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketSetPlayerBirthdayRsp.java @@ -0,0 +1,22 @@ +package emu.grasscutter.server.packet.send; + +import emu.grasscutter.Grasscutter; +import emu.grasscutter.game.GenshinPlayer; +import emu.grasscutter.net.packet.GenshinPacket; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.proto.SetPlayerBirthdayRspOuterClass.SetPlayerBirthdayRsp; +import emu.grasscutter.net.proto.BirthdayOuterClass.Birthday; + +public class PacketSetPlayerBirthdayRsp extends GenshinPacket { + public PacketSetPlayerBirthdayRsp(GenshinPlayer player) { + super(PacketOpcodes.SetPlayerBirthdayRsp); + + SetPlayerBirthdayRsp proto = SetPlayerBirthdayRsp.newBuilder() + .setBirth(player.getBirthday().toProto()) + .build(); + + this.setData(proto); + + if(Grasscutter.getConfig().DebugMode == true) Grasscutter.getLogger().info("Sending packet"); + } +} From 539970fd504d3cd10c81d8dc6edc24e8d8a284ae Mon Sep 17 00:00:00 2001 From: Miyucchi Date: Sat, 23 Apr 2022 03:29:08 +0200 Subject: [PATCH 04/12] Feature: SetBirthdayDate --- .../server/packet/send/PacketSetPlayerBirthdayRsp.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketSetPlayerBirthdayRsp.java b/src/main/java/emu/grasscutter/server/packet/send/PacketSetPlayerBirthdayRsp.java index acca25068..9b73b6b13 100644 --- a/src/main/java/emu/grasscutter/server/packet/send/PacketSetPlayerBirthdayRsp.java +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketSetPlayerBirthdayRsp.java @@ -16,7 +16,5 @@ public class PacketSetPlayerBirthdayRsp extends GenshinPacket { .build(); this.setData(proto); - - if(Grasscutter.getConfig().DebugMode == true) Grasscutter.getLogger().info("Sending packet"); } } From 0992fc11b4093229e70803a61767010358b99b86 Mon Sep 17 00:00:00 2001 From: Magix Date: Fri, 22 Apr 2022 23:53:37 -0400 Subject: [PATCH 05/12] Add keystore password --- src/main/java/emu/grasscutter/Config.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/emu/grasscutter/Config.java b/src/main/java/emu/grasscutter/Config.java index 4a6f71680..980102957 100644 --- a/src/main/java/emu/grasscutter/Config.java +++ b/src/main/java/emu/grasscutter/Config.java @@ -29,7 +29,7 @@ public final class Config { public int Port = 443; public int PublicPort = 0; public String KeystorePath = "./keystore.p12"; - public String KeystorePassword = ""; + public String KeystorePassword = "123456"; public Boolean UseSSL = true; public Boolean FrontHTTPS = true; From 8afcc0b89a7fb45f29af3c03c6ba71c6c8aa46dc Mon Sep 17 00:00:00 2001 From: KingRainbow44 Date: Sat, 23 Apr 2022 02:20:18 -0400 Subject: [PATCH 06/12] Add message for bind failure (HTTP) --- .../grasscutter/netty/MihoyoKcpServer.java | 5 ++-- .../server/dispatch/DispatchServer.java | 24 +++++++++++++++---- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/main/java/emu/grasscutter/netty/MihoyoKcpServer.java b/src/main/java/emu/grasscutter/netty/MihoyoKcpServer.java index c3a9297b2..41e8ad412 100644 --- a/src/main/java/emu/grasscutter/netty/MihoyoKcpServer.java +++ b/src/main/java/emu/grasscutter/netty/MihoyoKcpServer.java @@ -64,9 +64,8 @@ public class MihoyoKcpServer extends Thread { // Wait until the server socket is closed. f.channel().closeFuture().sync(); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); + } catch (Exception exception) { + Grasscutter.getLogger().error("Unable to start game server.", exception); } finally { // Close finish(); diff --git a/src/main/java/emu/grasscutter/server/dispatch/DispatchServer.java b/src/main/java/emu/grasscutter/server/dispatch/DispatchServer.java index 7c7915675..ea7c1166e 100644 --- a/src/main/java/emu/grasscutter/server/dispatch/DispatchServer.java +++ b/src/main/java/emu/grasscutter/server/dispatch/DispatchServer.java @@ -24,6 +24,7 @@ import emu.grasscutter.utils.Utils; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import java.io.*; +import java.net.BindException; import java.net.InetSocketAddress; import java.net.URI; import java.net.URLDecoder; @@ -158,12 +159,21 @@ public final class DispatchServer { Grasscutter.getLogger().error("[Dispatch] Error while initializing region info!", e); } } + + private HttpServer safelyCreateServer(InetSocketAddress address) { + try { + return HttpServer.create(address, 0); + } catch (BindException ignored) { + Grasscutter.getLogger().error("Unable to bind to port: " + getAddress().getPort() + " (HTTP)"); + } catch (Exception exception) { + Grasscutter.getLogger().error("Unable to start HTTP server.", exception); + } return null; + } public void start() throws Exception { HttpServer server; if (Grasscutter.getConfig().getDispatchOptions().UseSSL) { - HttpsServer httpsServer; - httpsServer = HttpsServer.create(getAddress(), 0); + HttpsServer httpsServer = HttpsServer.create(getAddress(), 0); SSLContext sslContext = SSLContext.getInstance("TLS"); try (FileInputStream fis = new FileInputStream(Grasscutter.getConfig().getDispatchOptions().KeystorePath)) { char[] keystorePassword = Grasscutter.getConfig().getDispatchOptions().KeystorePassword.toCharArray(); @@ -176,14 +186,20 @@ public final class DispatchServer { httpsServer.setHttpsConfigurator(new HttpsConfigurator(sslContext)); server = httpsServer; + } catch (BindException ignored) { + Grasscutter.getLogger().error("Unable to bind to port: " + getAddress().getPort() + " (HTTPS)"); + server = this.safelyCreateServer(this.getAddress()); } catch (Exception e) { Grasscutter.getLogger().warn("[Dispatch] No SSL cert found! Falling back to HTTP server."); Grasscutter.getConfig().getDispatchOptions().UseSSL = false; - server = HttpServer.create(getAddress(), 0); + server = this.safelyCreateServer(this.getAddress()); } } else { - server = HttpServer.create(getAddress(), 0); + server = this.safelyCreateServer(this.getAddress()); } + + if(server == null) + throw new NullPointerException("An HTTP server was not created."); server.createContext("/", t -> responseHTML(t, "Hello")); From 1c3df04f4505a5adc26e719b48a13fe8d89d603a Mon Sep 17 00:00:00 2001 From: Jaida Wu Date: Sat, 23 Apr 2022 15:33:10 +0800 Subject: [PATCH 07/12] Fix proxy daemon can't find script Signed-off-by: Jaida Wu --- start.cmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/start.cmd b/start.cmd index 8c525dfc8..8d682a213 100644 --- a/start.cmd +++ b/start.cmd @@ -75,9 +75,9 @@ for /f "tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVe @rem TODO: External proxy when ORIG_PROXY_ENABLE == 0x1 echo set ws = createobject("wscript.shell") > "%temp%\proxy.vbs" if not "%MITMDUMP_PATH%" == "" ( -echo ws.currentdirectory = "%MITMDUMP_PATH%" >> "%temp%\proxy.vbs" + echo ws.currentdirectory = "%MITMDUMP_PATH%" >> "%temp%\proxy.vbs" ) -echo ws.run "cmd /c mitmdump.exe -s "^&chr(34)^&"%PROXY_SCRIPT_NAME%"^&chr(34)^&" -k",0 >> "%temp%\proxy.vbs" +echo ws.run "cmd /c mitmdump.exe -s "^&chr(34)^&"%CUR_PATH%%PROXY_SCRIPT_NAME%"^&chr(34)^&" -k",0 >> "%temp%\proxy.vbs" "%temp%\proxy.vbs" del /f /q "%temp%\proxy.vbs" >nul 2>nul From cd08c52b359ed1a8c3e7019d806d1c6eb3542a2c Mon Sep 17 00:00:00 2001 From: Jaida Wu Date: Sat, 23 Apr 2022 15:39:56 +0800 Subject: [PATCH 08/12] Fix PlayerBirthday exception Signed-off-by: Jaida Wu --- src/main/java/emu/grasscutter/game/player/PlayerBirthday.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/emu/grasscutter/game/player/PlayerBirthday.java b/src/main/java/emu/grasscutter/game/player/PlayerBirthday.java index 733f58ee5..13a8e7c58 100644 --- a/src/main/java/emu/grasscutter/game/player/PlayerBirthday.java +++ b/src/main/java/emu/grasscutter/game/player/PlayerBirthday.java @@ -1,7 +1,9 @@ package emu.grasscutter.game.player; +import dev.morphia.annotations.Entity; import emu.grasscutter.net.proto.BirthdayOuterClass.Birthday; +@Entity public class PlayerBirthday { private int day; private int month; From 3eabd4034520906cd91774787fc0ef3c944b8e17 Mon Sep 17 00:00:00 2001 From: Jaida Wu Date: Sat, 23 Apr 2022 16:47:13 +0800 Subject: [PATCH 09/12] Make some control panel happy Signed-off-by: Jaida Wu --- src/main/java/emu/grasscutter/Grasscutter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/emu/grasscutter/Grasscutter.java b/src/main/java/emu/grasscutter/Grasscutter.java index ad1107e8e..5335a2254 100644 --- a/src/main/java/emu/grasscutter/Grasscutter.java +++ b/src/main/java/emu/grasscutter/Grasscutter.java @@ -118,6 +118,7 @@ public final class Grasscutter { public static void startConsole() { String input; + getLogger().info("Done! For help, type \"help\""); try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { while ((input = br.readLine()) != null) { try { From 91894380cbf8710052d19ebf297c632d4320f02d Mon Sep 17 00:00:00 2001 From: TheLostTree <65834918+TheLostTree@users.noreply.github.com> Date: Sat, 23 Apr 2022 03:19:33 -0700 Subject: [PATCH 10/12] drowning added --- .../recv/HandlerSceneEntityDrownReq.java | 43 +++++++++++++++++++ .../send/PacketSceneEntityDrownRsp.java | 4 ++ 2 files changed, 47 insertions(+) create mode 100644 src/main/java/emu/grasscutter/server/packet/recv/HandlerSceneEntityDrownReq.java create mode 100644 src/main/java/emu/grasscutter/server/packet/send/PacketSceneEntityDrownRsp.java diff --git a/src/main/java/emu/grasscutter/server/packet/recv/HandlerSceneEntityDrownReq.java b/src/main/java/emu/grasscutter/server/packet/recv/HandlerSceneEntityDrownReq.java new file mode 100644 index 000000000..91f27c65b --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/recv/HandlerSceneEntityDrownReq.java @@ -0,0 +1,43 @@ +package emu.grasscutter.server.packet.recv; + +import emu.grasscutter.game.entity.GenshinEntity; +import emu.grasscutter.game.props.LifeState; +import emu.grasscutter.net.packet.Opcodes; +import emu.grasscutter.net.packet.PacketHandler; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.proto.SceneEntityDrownReqOuterClass.SceneEntityDrownReq; +import emu.grasscutter.net.proto.VisionTypeOuterClass; +import emu.grasscutter.server.game.GameSession; +import emu.grasscutter.server.packet.send.PacketAvatarChangeCostumeRsp; +import emu.grasscutter.server.packet.send.PacketLifeStateChangeNotify; +import emu.grasscutter.server.packet.send.PacketSceneEntityDisappearNotify; +import emu.grasscutter.server.packet.send.PacketSceneEntityDrownRsp; + +@Opcodes(PacketOpcodes.SceneEntityDrownReq) +public class HandlerSceneEntityDrownReq extends PacketHandler { + + @Override + public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { + SceneEntityDrownReq req = SceneEntityDrownReq.parseFrom(payload); + + + GenshinEntity entity = session.getPlayer().getScene().getEntityById(req.getEntityId()); + + + PacketLifeStateChangeNotify lifeStateChangeNotify = new PacketLifeStateChangeNotify(entity, entity, LifeState.LIFE_DEAD); + PacketSceneEntityDrownRsp drownRsp = new PacketSceneEntityDrownRsp(req.getEntityId()); + + + + //kill entity + broadcast it + + session.getPlayer().getScene().broadcastPacket(lifeStateChangeNotify); + session.getPlayer().getScene().broadcastPacket(drownRsp); + + //TODO: make a list somewhere of all entities to remove per tick rather than one by one + + session.getPlayer().getScene().removeEntity(entity, VisionTypeOuterClass.VisionType.VisionDie); + + } + +} diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketSceneEntityDrownRsp.java b/src/main/java/emu/grasscutter/server/packet/send/PacketSceneEntityDrownRsp.java new file mode 100644 index 000000000..2918c2f66 --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketSceneEntityDrownRsp.java @@ -0,0 +1,4 @@ +package emu.grasscutter.server.packet.send; + +public class PacketSceneEntityDrownReq { +} From 3d9b71dc4d4f376a175b36d53b5734b900fc5a2e Mon Sep 17 00:00:00 2001 From: TheLostTree <65834918+TheLostTree@users.noreply.github.com> Date: Sat, 23 Apr 2022 03:32:08 -0700 Subject: [PATCH 11/12] git doesnt like me --- .../recv/HandlerSceneEntityDrownReq.java | 2 -- .../packet/send/PacketSceneEntityDrownRsp.java | 18 +++++++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/java/emu/grasscutter/server/packet/recv/HandlerSceneEntityDrownReq.java b/src/main/java/emu/grasscutter/server/packet/recv/HandlerSceneEntityDrownReq.java index 91f27c65b..005141958 100644 --- a/src/main/java/emu/grasscutter/server/packet/recv/HandlerSceneEntityDrownReq.java +++ b/src/main/java/emu/grasscutter/server/packet/recv/HandlerSceneEntityDrownReq.java @@ -8,9 +8,7 @@ import emu.grasscutter.net.packet.PacketOpcodes; import emu.grasscutter.net.proto.SceneEntityDrownReqOuterClass.SceneEntityDrownReq; import emu.grasscutter.net.proto.VisionTypeOuterClass; import emu.grasscutter.server.game.GameSession; -import emu.grasscutter.server.packet.send.PacketAvatarChangeCostumeRsp; import emu.grasscutter.server.packet.send.PacketLifeStateChangeNotify; -import emu.grasscutter.server.packet.send.PacketSceneEntityDisappearNotify; import emu.grasscutter.server.packet.send.PacketSceneEntityDrownRsp; @Opcodes(PacketOpcodes.SceneEntityDrownReq) diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketSceneEntityDrownRsp.java b/src/main/java/emu/grasscutter/server/packet/send/PacketSceneEntityDrownRsp.java index 2918c2f66..4d3a2b232 100644 --- a/src/main/java/emu/grasscutter/server/packet/send/PacketSceneEntityDrownRsp.java +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketSceneEntityDrownRsp.java @@ -1,4 +1,20 @@ package emu.grasscutter.server.packet.send; -public class PacketSceneEntityDrownReq { +import emu.grasscutter.game.entity.GenshinEntity; +import emu.grasscutter.net.packet.GenshinPacket; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.proto.SceneEntityDrownRspOuterClass.SceneEntityDrownRsp; +import emu.grasscutter.net.proto.VisionTypeOuterClass.VisionType; + +public class PacketSceneEntityDrownRsp extends GenshinPacket { + + public PacketSceneEntityDrownRsp(int entityId) { + super(PacketOpcodes.SceneEntityDrownRsp); + + SceneEntityDrownRsp proto = new SceneEntityDrownRsp().toBuilder().setEntityId(entityId).build(); + + this.setData(proto); + } } + + From 31f617e7f0a0c034c6b64f53318257fbba1477f0 Mon Sep 17 00:00:00 2001 From: TheLostTree <65834918+TheLostTree@users.noreply.github.com> Date: Sat, 23 Apr 2022 03:32:18 -0700 Subject: [PATCH 12/12] Update Grasscutter-Protos --- Grasscutter-Protos | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Grasscutter-Protos b/Grasscutter-Protos index 0537e9cc4..dd17415b7 160000 --- a/Grasscutter-Protos +++ b/Grasscutter-Protos @@ -1 +1 @@ -Subproject commit 0537e9cc4c7856a7c6f88bbbaa908a80c4ee677e +Subproject commit dd17415b71dfcff049e72dbe8a76173611f4b0ae