Merge branch 'development' into more-events

This commit is contained in:
KingRainbow44
2022-07-24 12:05:35 -04:00
10 changed files with 260 additions and 154 deletions

View File

@@ -1,26 +1,19 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.game.props.OpenState;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.SetOpenStateReqOuterClass.SetOpenStateReq;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketSetOpenStateRsp;
@Opcodes(PacketOpcodes.SetOpenStateReq)
public class HandlerSetOpenStateReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req = SetOpenStateReq.parseFrom(payload);
int openState = req.getKey();
int value = req.getValue();
session.getPlayer().getOpenStateManager().setOpenState(OpenState.getTypeByValue(openState), value);
//Client Automatically Updates its OpenStateMap, no need to send OpenStateUpdateNotify
session.send(new PacketSetOpenStateRsp(openState,value));
session.getPlayer().getOpenStateManager().setOpenStateFromClient(openState, value);
}
}

View File

@@ -1,7 +1,8 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.OpenStateData;
import emu.grasscutter.game.player.PlayerOpenStateManager;
import emu.grasscutter.game.props.OpenState;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.OpenStateUpdateNotifyOuterClass.OpenStateUpdateNotify;
@@ -17,16 +18,17 @@ public class PacketOpenStateUpdateNotify extends BasePacket {
OpenStateUpdateNotify.Builder proto = OpenStateUpdateNotify.newBuilder();
for (OpenState state : OpenState.values()) {
for (OpenStateData state : GameData.getOpenStateList()) {
// If the player has an open state stored in their map, then it would always override any default value
if (manager.getOpenStateMap().containsKey(state.getValue())) {
proto.putOpenStateMap(state.getValue(), manager.getOpenState(state));
} else if (PlayerOpenStateManager.DEV_OPEN_STATES.contains(state)) {
// Add default value here. TODO properly put default values somewhere
proto.putOpenStateMap(state.getValue(), 1);
if (manager.getOpenStateMap().containsKey(state.getId())) {
proto.putOpenStateMap(state.getId(), manager.getOpenState(state.getId()));
}
// Otherwise, add the state if it is contained in the set of default open states.
else if (PlayerOpenStateManager.DEFAULT_OPEN_STATES.contains(state.getId())) {
proto.putOpenStateMap(state.getId(), 1);
}
}
this.setData(proto);
}
}

View File

@@ -2,10 +2,10 @@ package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode;
import emu.grasscutter.net.proto.SetOpenStateRspOuterClass.SetOpenStateRsp;
public class PacketSetOpenStateRsp extends BasePacket {
public PacketSetOpenStateRsp(int openState, int value) {
super(PacketOpcodes.SetOpenStateRsp);
@@ -15,4 +15,12 @@ public class PacketSetOpenStateRsp extends BasePacket {
this.setData(proto);
}
public PacketSetOpenStateRsp(Retcode retcode) {
super(PacketOpcodes.SetOpenStateRsp);
SetOpenStateRsp proto = SetOpenStateRsp.newBuilder()
.setRetcode(retcode.getNumber()).build();
this.setData(proto);
}
}