mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-19 10:24:47 +01:00
Persist Tower Data && Set The Tower Schedule
This commit is contained in:
@@ -15,6 +15,7 @@ import emu.grasscutter.game.managers.InventoryManager;
|
||||
import emu.grasscutter.game.managers.MultiplayerManager;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.game.shop.ShopManager;
|
||||
import emu.grasscutter.game.tower.TowerScheduleManager;
|
||||
import emu.grasscutter.game.world.World;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
|
||||
@@ -54,6 +55,7 @@ public final class GameServer extends KcpServer {
|
||||
private final DropManager dropManager;
|
||||
|
||||
private final CombineManger combineManger;
|
||||
private final TowerScheduleManager towerScheduleManager;
|
||||
|
||||
public GameServer() {
|
||||
this(new InetSocketAddress(
|
||||
@@ -82,7 +84,7 @@ public final class GameServer extends KcpServer {
|
||||
this.dropManager = new DropManager(this);
|
||||
this.expeditionManager = new ExpeditionManager(this);
|
||||
this.combineManger = new CombineManger(this);
|
||||
|
||||
this.towerScheduleManager = new TowerScheduleManager(this);
|
||||
// Hook into shutdown event.
|
||||
Runtime.getRuntime().addShutdownHook(new Thread(this::onServerShutdown));
|
||||
}
|
||||
@@ -139,6 +141,10 @@ public final class GameServer extends KcpServer {
|
||||
return this.combineManger;
|
||||
}
|
||||
|
||||
public TowerScheduleManager getTowerScheduleManager() {
|
||||
return towerScheduleManager;
|
||||
}
|
||||
|
||||
public TaskMap getTaskMap() {
|
||||
return this.taskMap;
|
||||
}
|
||||
|
||||
@@ -11,7 +11,10 @@ public class HandlerTowerAllDataReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
session.send(new PacketTowerAllDataRsp());
|
||||
session.send(new PacketTowerAllDataRsp(
|
||||
session.getServer().getTowerScheduleManager(),
|
||||
session.getPlayer().getTowerManager()
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ public class PacketDungeonSettleNotify extends BasePacket {
|
||||
.setCount(1000)
|
||||
.build())
|
||||
;
|
||||
if(nextFloorId > 0){
|
||||
if(nextFloorId > 0 && canJump){
|
||||
towerLevelEndNotify.setNextFloorId(nextFloorId);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,37 +1,64 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.def.TowerFloorData;
|
||||
import emu.grasscutter.game.tower.TowerManager;
|
||||
import emu.grasscutter.game.tower.TowerScheduleManager;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.TowerAllDataRspOuterClass.TowerAllDataRsp;
|
||||
import emu.grasscutter.net.proto.TowerCurLevelRecordOuterClass.TowerCurLevelRecord;
|
||||
import emu.grasscutter.net.proto.TowerFloorRecordOuterClass.TowerFloorRecord;
|
||||
import emu.grasscutter.net.proto.TowerLevelRecordOuterClass;
|
||||
import emu.grasscutter.utils.DateHelper;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
public class PacketTowerAllDataRsp extends BasePacket {
|
||||
|
||||
public PacketTowerAllDataRsp() {
|
||||
public PacketTowerAllDataRsp(TowerScheduleManager towerScheduleManager, TowerManager towerManager) {
|
||||
super(PacketOpcodes.TowerAllDataRsp);
|
||||
|
||||
var list = GameData.getTowerFloorDataMap().values().stream()
|
||||
.map(TowerFloorData::getFloorId)
|
||||
.map(id -> TowerFloorRecord.newBuilder().setFloorId(id).build())
|
||||
.collect(Collectors.toList());
|
||||
var recordList = towerManager.getRecordMap().values().stream()
|
||||
.map(rec -> TowerFloorRecord.newBuilder()
|
||||
.setFloorId(rec.getFloorId())
|
||||
.setFloorStarRewardProgress(rec.getFloorStarRewardProgress())
|
||||
.putAllPassedLevelMap(rec.getPassedLevelMap())
|
||||
.addAllPassedLevelRecordList(buildFromPassedLevelMap(rec.getPassedLevelMap()))
|
||||
.build()
|
||||
)
|
||||
.toList();
|
||||
|
||||
var openTimeMap = towerScheduleManager.getScheduleFloors().stream()
|
||||
.collect(Collectors.toMap(x -> x,
|
||||
y -> DateHelper.getUnixTime(towerScheduleManager.getTowerScheduleConfig()
|
||||
.getScheduleStartTime()))
|
||||
);
|
||||
|
||||
TowerAllDataRsp proto = TowerAllDataRsp.newBuilder()
|
||||
.setTowerScheduleId(29)
|
||||
.addAllTowerFloorRecordList(list)
|
||||
.setTowerScheduleId(towerScheduleManager.getCurrentTowerScheduleData().getScheduleId())
|
||||
.addAllTowerFloorRecordList(recordList)
|
||||
.setCurLevelRecord(TowerCurLevelRecord.newBuilder().setIsEmpty(true))
|
||||
.setNextScheduleChangeTime(Integer.MAX_VALUE)
|
||||
.putFloorOpenTimeMap(1024, 1630486800)
|
||||
.putFloorOpenTimeMap(1025, 1630486800)
|
||||
.putFloorOpenTimeMap(1026, 1630486800)
|
||||
.putFloorOpenTimeMap(1027, 1630486800)
|
||||
.setScheduleStartTime(1630486800)
|
||||
.setScheduleStartTime(DateHelper.getUnixTime(towerScheduleManager.getTowerScheduleConfig()
|
||||
.getScheduleStartTime()))
|
||||
.setNextScheduleChangeTime(DateHelper.getUnixTime(towerScheduleManager.getTowerScheduleConfig()
|
||||
.getNextScheduleChangeTime()))
|
||||
.putAllFloorOpenTimeMap(openTimeMap)
|
||||
.setIsFinishedEntranceFloor(towerManager.canEnterScheduleFloor())
|
||||
.build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
|
||||
private List<TowerLevelRecordOuterClass.TowerLevelRecord> buildFromPassedLevelMap(Map<Integer, Integer> map){
|
||||
return map.entrySet().stream()
|
||||
.map(item -> TowerLevelRecordOuterClass.TowerLevelRecord.newBuilder()
|
||||
.setLevelId(item.getKey())
|
||||
.addAllSatisfiedCondList(IntStream.range(1, item.getValue() + 1).boxed().toList())
|
||||
.build())
|
||||
.toList();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,13 +8,13 @@ import emu.grasscutter.net.proto.TowerLevelRecordOuterClass.TowerLevelRecord;
|
||||
|
||||
public class PacketTowerFloorRecordChangeNotify extends BasePacket {
|
||||
|
||||
public PacketTowerFloorRecordChangeNotify(int floorId) {
|
||||
public PacketTowerFloorRecordChangeNotify(int floorId, int stars, boolean canEnterScheduleFloor) {
|
||||
super(PacketOpcodes.TowerFloorRecordChangeNotify);
|
||||
|
||||
TowerFloorRecordChangeNotify proto = TowerFloorRecordChangeNotify.newBuilder()
|
||||
.addTowerFloorRecordList(TowerFloorRecord.newBuilder()
|
||||
.setFloorId(floorId)
|
||||
.setFloorStarRewardProgress(3)
|
||||
.setFloorStarRewardProgress(stars)
|
||||
.addPassedLevelRecordList(TowerLevelRecord.newBuilder()
|
||||
.setLevelId(1)
|
||||
.addSatisfiedCondList(1)
|
||||
@@ -22,7 +22,7 @@ public class PacketTowerFloorRecordChangeNotify extends BasePacket {
|
||||
.addSatisfiedCondList(3)
|
||||
.build())
|
||||
.build())
|
||||
.setIsFinishedEntranceFloor(true)
|
||||
.setIsFinishedEntranceFloor(canEnterScheduleFloor)
|
||||
.build();
|
||||
|
||||
this.setData(proto);
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.TowerLevelStarCondDataOuterClass.TowerLevelStarCondData;
|
||||
import emu.grasscutter.net.proto.TowerLevelStarCondNotifyOuterClass.TowerLevelStarCondNotify;
|
||||
|
||||
public class PacketTowerLevelStarCondNotify extends BasePacket {
|
||||
|
||||
public PacketTowerLevelStarCondNotify(int floorId, int levelIndex) {
|
||||
super(PacketOpcodes.TowerLevelStarCondNotify);
|
||||
|
||||
TowerLevelStarCondNotify proto = TowerLevelStarCondNotify.newBuilder()
|
||||
.setFloorId(floorId)
|
||||
.setLevelIndex(levelIndex)
|
||||
.addCondDataList(TowerLevelStarCondData.newBuilder()
|
||||
.setCondValue(1)
|
||||
.build()
|
||||
)
|
||||
.addCondDataList(TowerLevelStarCondData.newBuilder()
|
||||
.setCondValue(2)
|
||||
.build()
|
||||
)
|
||||
.addCondDataList(TowerLevelStarCondData.newBuilder()
|
||||
.setCondValue(3)
|
||||
.build()
|
||||
)
|
||||
.build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user