mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-19 10:24:47 +01:00
Merge branch 'development' of github.com:Grasscutters/Grasscutter into development
This commit is contained in:
@@ -157,6 +157,12 @@ public class GameSession extends KcpChannel {
|
||||
Grasscutter.getLogger().warn("Tried to send packet with missing cmd id!");
|
||||
return;
|
||||
}
|
||||
|
||||
// DO NOT REMOVE (unless we find a way to validate code before sending to client which I don't think we can)
|
||||
// Stop WindSeedClientNotify from being sent for security purposes.
|
||||
if(PacketOpcodes.BANNED_PACKETS.contains(packet.getOpcode())) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Header
|
||||
if (packet.shouldBuildHeader()) {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.game.managers.SotSManager.SotSManager;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.game.props.FightProperty;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
@@ -18,26 +20,12 @@ import java.util.List;
|
||||
public class HandlerEnterTransPointRegionNotify extends PacketHandler {
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception{
|
||||
session.getPlayer().getTeamManager().getActiveTeam().forEach(entity -> {
|
||||
boolean isAlive = entity.isAlive();
|
||||
if(entity.getFightProperty(FightProperty.FIGHT_PROP_CUR_HP) != entity.getFightProperty(FightProperty.FIGHT_PROP_MAX_HP)){
|
||||
Float hp = entity.getFightProperty(FightProperty.FIGHT_PROP_MAX_HP)-entity.getFightProperty(FightProperty.FIGHT_PROP_CUR_HP);
|
||||
|
||||
session.send(new PacketEntityFightPropUpdateNotify(entity,FightProperty.FIGHT_PROP_MAX_HP));
|
||||
Player player = session.getPlayer();
|
||||
SotSManager sotsManager = player.getSotSManager();
|
||||
|
||||
session.send(new PacketEntityFightPropChangeReasonNotify(
|
||||
entity, FightProperty.FIGHT_PROP_CUR_HP, hp, List.of(3),
|
||||
PropChangeReason.PROP_CHANGE_STATUE_RECOVER, ChangeHpReason.ChangeHpAddStatue));
|
||||
|
||||
entity.setFightProperty(
|
||||
FightProperty.FIGHT_PROP_CUR_HP,
|
||||
entity.getFightProperty(FightProperty.FIGHT_PROP_MAX_HP)
|
||||
);
|
||||
session.send(new PacketAvatarFightPropUpdateNotify(entity.getAvatar(), FightProperty.FIGHT_PROP_CUR_HP));
|
||||
if (!isAlive) {
|
||||
entity.getWorld().broadcastPacket(new PacketAvatarLifeStateChangeNotify(entity.getAvatar()));
|
||||
}
|
||||
}
|
||||
});
|
||||
sotsManager.refillSpringVolume();
|
||||
sotsManager.autoRevive(session);
|
||||
sotsManager.scheduleAutoRecover(session);
|
||||
// TODO: allow interaction with the SotS?
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.TowerEnterLevelReqOuterClass.TowerEnterLevelReq;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
|
||||
@Opcodes(PacketOpcodes.TowerEnterLevelReq)
|
||||
public class HandlerTowerEnterLevelReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
TowerEnterLevelReq req = TowerEnterLevelReq.parseFrom(payload);
|
||||
|
||||
//session.send(new PacketTowerCurLevelRecordChangeNotify());
|
||||
session.getPlayer().getTowerManager().enterLevel(req.getEnterPointId());
|
||||
|
||||
//session.send(new PacketTowerLevelStarCondNotify());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.TowerTeamOuterClass;
|
||||
import emu.grasscutter.net.proto.TowerTeamSelectReqOuterClass.TowerTeamSelectReq;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketTowerTeamSelectRsp;
|
||||
|
||||
@Opcodes(PacketOpcodes.TowerTeamSelectReq)
|
||||
public class HandlerTowerTeamSelectReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
TowerTeamSelectReq req = TowerTeamSelectReq.parseFrom(payload);
|
||||
|
||||
var towerTeams = req.getTowerTeamListList().stream()
|
||||
.map(TowerTeamOuterClass.TowerTeam::getAvatarGuidListList)
|
||||
.toList();
|
||||
|
||||
session.getPlayer().getTowerManager().teamSelect(req.getFloorId(), towerTeams);
|
||||
|
||||
session.send(new PacketTowerTeamSelectRsp());
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,7 @@ public class PacketTakeAchievementRewardReq extends BasePacket {
|
||||
public PacketTakeAchievementRewardReq(GameSession session) {
|
||||
super(PacketOpcodes.TakeAchievementRewardReq);
|
||||
|
||||
List<AchievementInfo> a_list = new ArrayList<>();
|
||||
a_list.add(AchievementInfo.newBuilder().setId(82044).setStatusValue(2).setCurrent(0).setGoal(1).build());
|
||||
a_list.add(AchievementInfo.newBuilder().setId(81205).setStatusValue(2).setCurrent(0).setGoal(1).build());
|
||||
|
||||
|
||||
TakeAchievementRewardReq proto = TakeAchievementRewardReq.newBuilder()
|
||||
.addAllAList(a_list)
|
||||
.build();
|
||||
TakeAchievementRewardReq proto = TakeAchievementRewardReq.newBuilder().build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
|
||||
@@ -1,19 +1,28 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.def.TowerFloorData;
|
||||
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 java.util.stream.Collectors;
|
||||
|
||||
public class PacketTowerAllDataRsp extends BasePacket {
|
||||
|
||||
public PacketTowerAllDataRsp() {
|
||||
super(PacketOpcodes.TowerAllDataRsp);
|
||||
|
||||
|
||||
var list = GameData.getTowerFloorDataMap().values().stream()
|
||||
.map(TowerFloorData::getFloorId)
|
||||
.map(id -> TowerFloorRecord.newBuilder().setFloorId(id).build())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
TowerAllDataRsp proto = TowerAllDataRsp.newBuilder()
|
||||
.setTowerScheduleId(29)
|
||||
.addTowerFloorRecordList(TowerFloorRecord.newBuilder().setFloorId(1001))
|
||||
.addAllTowerFloorRecordList(list)
|
||||
.setCurLevelRecord(TowerCurLevelRecord.newBuilder().setIsEmpty(true))
|
||||
.setNextScheduleChangeTime(Integer.MAX_VALUE)
|
||||
.putFloorOpenTimeMap(1024, 1630486800)
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.TowerEnterLevelRspOuterClass.TowerEnterLevelRsp;
|
||||
|
||||
public class PacketTowerEnterLevelRsp extends BasePacket {
|
||||
|
||||
public PacketTowerEnterLevelRsp(int floorId, int levelIndex) {
|
||||
super(PacketOpcodes.TowerEnterLevelRsp);
|
||||
|
||||
TowerEnterLevelRsp proto = TowerEnterLevelRsp.newBuilder()
|
||||
.setFloorId(floorId)
|
||||
.setLevelIndex(levelIndex)
|
||||
.addTowerBuffIdList(4)
|
||||
.addTowerBuffIdList(28)
|
||||
.addTowerBuffIdList(18)
|
||||
.build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.TowerTeamSelectRspOuterClass.TowerTeamSelectRsp;
|
||||
|
||||
public class PacketTowerTeamSelectRsp extends BasePacket {
|
||||
|
||||
public PacketTowerTeamSelectRsp() {
|
||||
super(PacketOpcodes.TowerTeamSelectRsp);
|
||||
|
||||
TowerTeamSelectRsp proto = TowerTeamSelectRsp.newBuilder()
|
||||
.build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user