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:
GanyusLeftHorn
2022-07-24 09:12:07 +02:00
committed by GitHub
parent 89717f3c15
commit d0edd39465
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);
}
}