diff --git a/src/main/java/emu/lunarcore/command/commands/GenderCommand.java b/src/main/java/emu/lunarcore/command/commands/GenderCommand.java index b6df94c..4f01e55 100644 --- a/src/main/java/emu/lunarcore/command/commands/GenderCommand.java +++ b/src/main/java/emu/lunarcore/command/commands/GenderCommand.java @@ -3,6 +3,7 @@ package emu.lunarcore.command.commands; import emu.lunarcore.command.Command; import emu.lunarcore.command.CommandArgs; import emu.lunarcore.command.CommandHandler; +import emu.lunarcore.data.GameData; import emu.lunarcore.game.player.Player; import emu.lunarcore.game.player.PlayerGender; import emu.lunarcore.server.packet.send.PacketGetHeroBasicTypeInfoScRsp; @@ -19,9 +20,10 @@ public class GenderCommand implements CommandHandler { } // Set world level - String gender = args.get(0).toLowerCase(); + Player target = args.getTarget(); PlayerGender playerGender = null; + String gender = args.get(0).toLowerCase(); switch (gender) { case "m", "male", "boy", "man" -> { playerGender = PlayerGender.GENDER_MAN; @@ -32,11 +34,21 @@ public class GenderCommand implements CommandHandler { } // Change gender - if (playerGender != null && playerGender != args.getTarget().getGender()) { - args.getTarget().setGender(playerGender); - args.getTarget().sendPacket(new PacketGetHeroBasicTypeInfoScRsp(args.getTarget())); + if (playerGender != null && playerGender != target.getGender()) { + // Set gender first + target.setGender(playerGender); + target.save(); + + // Get first hero excel that matches our new player gender + var heroExcel = GameData.getHeroExcelMap().values().stream().filter(path -> path.getGender() == target.getGender()).findFirst().orElse(null); + if (heroExcel != null) { + // Set hero basic type + target.setHeroBasicType(heroExcel.getId()); + } - this.sendMessage(sender, "Gender for " + args.getTarget().getName() + " set successfully"); + // Send packet and response message + target.sendPacket(new PacketGetHeroBasicTypeInfoScRsp(target)); + this.sendMessage(sender, "Gender for " + target.getName() + " set successfully"); } else { this.sendMessage(sender, "Error: Invalid input"); } diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerGetAvatarDataCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerGetAvatarDataCsReq.java index 3eb4b56..ba96cc0 100644 --- a/src/main/java/emu/lunarcore/server/packet/recv/HandlerGetAvatarDataCsReq.java +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerGetAvatarDataCsReq.java @@ -11,7 +11,7 @@ public class HandlerGetAvatarDataCsReq extends PacketHandler { @Override public void handle(GameSession session, byte[] header, byte[] data) throws Exception { - session.send(new PacketGetAvatarDataScRsp(session)); + session.send(new PacketGetAvatarDataScRsp(session.getPlayer())); } } diff --git a/src/main/java/emu/lunarcore/server/packet/send/PacketGetAvatarDataScRsp.java b/src/main/java/emu/lunarcore/server/packet/send/PacketGetAvatarDataScRsp.java index 9494f2f..a3859cf 100644 --- a/src/main/java/emu/lunarcore/server/packet/send/PacketGetAvatarDataScRsp.java +++ b/src/main/java/emu/lunarcore/server/packet/send/PacketGetAvatarDataScRsp.java @@ -1,23 +1,24 @@ package emu.lunarcore.server.packet.send; import emu.lunarcore.game.avatar.GameAvatar; +import emu.lunarcore.game.player.Player; import emu.lunarcore.proto.GetAvatarDataScRspOuterClass.GetAvatarDataScRsp; -import emu.lunarcore.server.game.GameSession; import emu.lunarcore.server.packet.BasePacket; import emu.lunarcore.server.packet.CmdId; public class PacketGetAvatarDataScRsp extends BasePacket { - - public PacketGetAvatarDataScRsp(GameSession session) { + + public PacketGetAvatarDataScRsp(Player player) { super(CmdId.GetAvatarDataScRsp); var data = GetAvatarDataScRsp.newInstance() .setIsGetAll(true); - for (GameAvatar avatar : session.getPlayer().getAvatars()) { + for (GameAvatar avatar : player.getAvatars()) { data.addAvatarList(avatar.toProto()); } this.setData(data); } -} + +} \ No newline at end of file