mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-17 09:25:06 +01:00
Read Open States from Excels (#1557)
* Make sure we never access PlayerOpenStateManager::map directly. * Read OpenStates from excels. * Add defaultState * Replace hardcoded open states with the ones read from excels. * Don't send change notify when unlocking on login. * Add open state blacklist for default unlocks. * Add a way to temporarily set open states for dev * Remove old OpenState.java * Fix UnlockAllCommand * Change condType to an enum.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user