mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2026-05-30 22:12:52 +08:00
feat: implement teapot suite (#2344)
* feat: implement teapot suite * fix: home animals, check respawn, etc * fix: NPE and cancel summon events * fix: forgot to send eventId also
This commit is contained in:
committed by
GitHub
Unverified
parent
83602f78ae
commit
fc42f665a7
+30
@@ -0,0 +1,30 @@
|
||||
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.HomeAvatarRewardEventGetReqOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketHomeAvatarAllFinishRewardNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketHomeAvatarRewardEventGetRsp;
|
||||
import emu.grasscutter.server.packet.send.PacketHomeAvatarRewardEventNotify;
|
||||
|
||||
@Opcodes(PacketOpcodes.HomeAvatarRewardEventGetReq)
|
||||
public class HandlerHomeAvatarRewardEventGetReq extends PacketHandler {
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
var req = HomeAvatarRewardEventGetReqOuterClass.HomeAvatarRewardEventGetReq.parseFrom(payload);
|
||||
|
||||
var player = session.getPlayer();
|
||||
var rewardsOrError = player.getCurHomeWorld().getModuleManager().claimAvatarRewards(req.getEventId());
|
||||
session.send(new PacketHomeAvatarRewardEventNotify(player));
|
||||
session.send(new PacketHomeAvatarAllFinishRewardNotify(player));
|
||||
|
||||
session.send(
|
||||
rewardsOrError.map(
|
||||
gameItems -> new PacketHomeAvatarRewardEventGetRsp(req.getEventId(), gameItems),
|
||||
integer -> new PacketHomeAvatarRewardEventGetRsp(req.getEventId(), integer)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
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.HomeAvatarSummonEventReqOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketHomeAvatarSummonEventRsp;
|
||||
|
||||
@Opcodes(PacketOpcodes.HomeAvatarSummonEventReq)
|
||||
public class HandlerHomeAvatarSummonEventReq extends PacketHandler {
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
var req = HomeAvatarSummonEventReqOuterClass.HomeAvatarSummonEventReq.parseFrom(payload);
|
||||
var moduleManager = session.getPlayer().getCurHomeWorld().getModuleManager();
|
||||
var eventOrError = moduleManager.fireAvatarSummonEvent(session.getPlayer(), req.getAvatarId(), req.getGuid(), req.getSuitId());
|
||||
session.send(eventOrError.map(PacketHomeAvatarSummonEventRsp::new, PacketHomeAvatarSummonEventRsp::new));
|
||||
}
|
||||
}
|
||||
+21
@@ -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.HomeAvatarSummonFinishReqOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketHomeAvatarSummonAllEventNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketHomeAvatarSummonFinishRsp;
|
||||
|
||||
@Opcodes(PacketOpcodes.HomeAvatarSummonFinishReq)
|
||||
public class HandlerHomeAvatarSummonFinishReq extends PacketHandler {
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
var req = HomeAvatarSummonFinishReqOuterClass.HomeAvatarSummonFinishReq.parseFrom(payload);
|
||||
var player = session.getPlayer();
|
||||
player.getCurHomeWorld().getModuleManager().onFinishSummonEvent(req.getEventId());
|
||||
session.send(new PacketHomeAvatarSummonAllEventNotify(session.getPlayer()));
|
||||
session.send(new PacketHomeAvatarSummonFinishRsp(req.getEventId()));
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.game.home.HomeScene;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
@@ -31,14 +32,8 @@ public class HandlerHomeChangeEditModeReq extends PacketHandler {
|
||||
session.send(new PacketHomeComfortInfoNotify(session.getPlayer()));
|
||||
|
||||
if (!req.getIsEnterEditMode()) {
|
||||
var scene = session.getPlayer().getScene();
|
||||
scene.addEntities(
|
||||
session
|
||||
.getPlayer()
|
||||
.getCurHomeWorld()
|
||||
.getHome()
|
||||
.getHomeSceneItem(scene.getId())
|
||||
.getAnimals(scene));
|
||||
var scene = (HomeScene) session.getPlayer().getScene();
|
||||
scene.onLeaveEditMode();
|
||||
}
|
||||
|
||||
session.send(new PacketHomeChangeEditModeRsp(req.getIsEnterEditMode()));
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.game.world.Position;
|
||||
import emu.grasscutter.game.world.Scene;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
@@ -19,9 +17,10 @@ public class HandlerHomeChangeModuleReq extends PacketHandler {
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
HomeChangeModuleReqOuterClass.HomeChangeModuleReq req =
|
||||
HomeChangeModuleReqOuterClass.HomeChangeModuleReq.parseFrom(payload);
|
||||
HomeChangeModuleReqOuterClass.HomeChangeModuleReq.parseFrom(payload);
|
||||
|
||||
if (!session.getPlayer().getCurHomeWorld().getGuests().isEmpty()) {
|
||||
var homeWorld = session.getPlayer().getCurHomeWorld();
|
||||
if (!homeWorld.getGuests().isEmpty()) {
|
||||
session.send(new PacketHomeChangeModuleRsp());
|
||||
return;
|
||||
}
|
||||
@@ -33,13 +32,10 @@ public class HandlerHomeChangeModuleReq extends PacketHandler {
|
||||
session.send(new PacketHomeComfortInfoNotify(session.getPlayer()));
|
||||
|
||||
int realmId = 2000 + req.getTargetModuleId();
|
||||
var scene = homeWorld.getSceneById(realmId);
|
||||
var pos = scene.getScriptManager().getConfig().born_pos;
|
||||
|
||||
Scene scene = session.getPlayer().getWorld().getSceneById(realmId);
|
||||
Position pos = scene.getScriptManager().getConfig().born_pos;
|
||||
|
||||
session
|
||||
.getPlayer()
|
||||
.getWorld()
|
||||
.transferPlayerToScene(session.getPlayer(), realmId, TeleportType.WAYPOINT, pos);
|
||||
homeWorld.transferPlayerToScene(session.getPlayer(), realmId, TeleportType.WAYPOINT, pos);
|
||||
homeWorld.refreshModuleManager();
|
||||
}
|
||||
}
|
||||
|
||||
+3
-8
@@ -1,10 +1,9 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.game.entity.EntityHomeAnimal;
|
||||
import emu.grasscutter.game.home.HomeScene;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.VisionTypeOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketHomeEnterEditModeFinishRsp;
|
||||
|
||||
@@ -17,12 +16,8 @@ public class HandlerHomeEnterEditModeFinishReq extends PacketHandler {
|
||||
* This packet is about the edit mode
|
||||
*/
|
||||
|
||||
var scene = session.getPlayer().getScene();
|
||||
scene.removeEntities(
|
||||
scene.getEntities().values().stream()
|
||||
.filter(gameEntity -> gameEntity instanceof EntityHomeAnimal)
|
||||
.toList(),
|
||||
VisionTypeOuterClass.VisionType.VISION_TYPE_REMOVE);
|
||||
var scene = (HomeScene) session.getPlayer().getScene();
|
||||
scene.onEnterEditModeFinish();
|
||||
|
||||
session.send(new PacketHomeEnterEditModeFinishRsp());
|
||||
}
|
||||
|
||||
+13
-7
@@ -1,6 +1,8 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.net.packet.*;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.OtherPlayerEnterHomeNotifyOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.*;
|
||||
@@ -16,16 +18,20 @@ public class HandlerHomeSceneInitFinishReq extends PacketHandler {
|
||||
session.getPlayer().setHasSentInitPacketInHome(true);
|
||||
|
||||
if (curHomeWorld.getHost().isOnline()
|
||||
&& !curHomeWorld.getHost().equals(session.getPlayer())) {
|
||||
&& !curHomeWorld.getHost().equals(session.getPlayer())) {
|
||||
curHomeWorld
|
||||
.getHost()
|
||||
.sendPacket(
|
||||
new PacketOtherPlayerEnterOrLeaveHomeNotify(
|
||||
session.getPlayer(),
|
||||
OtherPlayerEnterHomeNotifyOuterClass.OtherPlayerEnterHomeNotify.Reason.ENTER));
|
||||
.getHost()
|
||||
.sendPacket(
|
||||
new PacketOtherPlayerEnterOrLeaveHomeNotify(
|
||||
session.getPlayer(),
|
||||
OtherPlayerEnterHomeNotifyOuterClass.OtherPlayerEnterHomeNotify.Reason.ENTER));
|
||||
}
|
||||
}
|
||||
|
||||
curHomeWorld.ifHost(session.getPlayer(), player -> {
|
||||
player.sendPacket(new PacketHomeAvatarRewardEventNotify(player));
|
||||
player.sendPacket(new PacketHomeAvatarSummonAllEventNotify(player));
|
||||
});
|
||||
session.send(new PacketHomeMarkPointNotify(session.getPlayer()));
|
||||
|
||||
session.send(new PacketHomeSceneInitFinishRsp());
|
||||
|
||||
+5
-5
@@ -5,10 +5,7 @@ import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.HomeUpdateArrangementInfoReqOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketHomeAvatarTalkFinishInfoNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketHomeBasicInfoNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketHomeMarkPointNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketHomeUpdateArrangementInfoRsp;
|
||||
import emu.grasscutter.server.packet.send.*;
|
||||
|
||||
@Opcodes(PacketOpcodes.HomeUpdateArrangementInfoReq)
|
||||
public class HandlerHomeUpdateArrangementInfoReq extends PacketHandler {
|
||||
@@ -22,14 +19,17 @@ public class HandlerHomeUpdateArrangementInfoReq extends PacketHandler {
|
||||
session.getPlayer().getHome().getHomeSceneItem(session.getPlayer().getSceneId());
|
||||
|
||||
var roomSceneId = homeScene.getRoomSceneId();
|
||||
homeScene.update(req.getSceneArrangementInfo());
|
||||
homeScene.update(req.getSceneArrangementInfo(), session.getPlayer());
|
||||
if (roomSceneId != homeScene.getRoomSceneId()) {
|
||||
session.getPlayer().getHome().onMainHouseChanged();
|
||||
}
|
||||
|
||||
session.getPlayer().getCurHomeWorld().getModuleManager().onUpdateArrangement();
|
||||
session.send(new PacketHomeAvatarRewardEventNotify(session.getPlayer()));
|
||||
session.send(
|
||||
new PacketHomeBasicInfoNotify(session.getPlayer(), session.getPlayer().isInEditMode()));
|
||||
session.send(new PacketHomeAvatarTalkFinishInfoNotify(session.getPlayer()));
|
||||
session.send(new PacketHomeAvatarSummonAllEventNotify(session.getPlayer()));
|
||||
session.send(new PacketHomeMarkPointNotify(session.getPlayer()));
|
||||
|
||||
session.getPlayer().getHome().save();
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.HomeAvatarAllFinishRewardNotifyOuterClass;
|
||||
|
||||
public class PacketHomeAvatarAllFinishRewardNotify extends BasePacket {
|
||||
public PacketHomeAvatarAllFinishRewardNotify(Player player) {
|
||||
super(PacketOpcodes.HomeAvatarAllFinishRewardNotify);
|
||||
|
||||
var list = player.getHome().getFinishedRewardEventIdSet();
|
||||
if (list != null) {
|
||||
this.setData(HomeAvatarAllFinishRewardNotifyOuterClass.HomeAvatarAllFinishRewardNotify.newBuilder()
|
||||
.addAllEventIdList(player.getHome().getFinishedRewardEventIdSet()));
|
||||
}
|
||||
}
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.game.inventory.GameItem;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.HomeAvatarRewardEventGetRspOuterClass;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class PacketHomeAvatarRewardEventGetRsp extends BasePacket {
|
||||
public PacketHomeAvatarRewardEventGetRsp(int eventId, List<GameItem> rewards) {
|
||||
super(PacketOpcodes.HomeAvatarRewardEventGetRsp);
|
||||
|
||||
this.setData(HomeAvatarRewardEventGetRspOuterClass.HomeAvatarRewardEventGetRsp.newBuilder()
|
||||
.setEventId(eventId)
|
||||
.addAllItemList(rewards.stream().map(GameItem::toItemParam).toList()));
|
||||
}
|
||||
|
||||
public PacketHomeAvatarRewardEventGetRsp(int eventId, int retcode) {
|
||||
super(PacketOpcodes.HomeAvatarRewardEventGetRsp);
|
||||
|
||||
this.setData(HomeAvatarRewardEventGetRspOuterClass.HomeAvatarRewardEventGetRsp.newBuilder()
|
||||
.setEventId(eventId)
|
||||
.setRetcode(retcode));
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
|
||||
public class PacketHomeAvatarRewardEventNotify extends BasePacket {
|
||||
public PacketHomeAvatarRewardEventNotify(Player homeOwner) {
|
||||
super(PacketOpcodes.HomeAvatarRewardEventNotify);
|
||||
this.setData(homeOwner.getCurHomeWorld().getModuleManager().toRewardEventProto());
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
|
||||
public class PacketHomeAvatarSummonAllEventNotify extends BasePacket {
|
||||
public PacketHomeAvatarSummonAllEventNotify(Player homeOwner) {
|
||||
super(PacketOpcodes.HomeAvatarSummonAllEventNotify);
|
||||
this.setData(homeOwner.getCurHomeWorld().getModuleManager().toSummonEventProto());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.game.home.suite.event.HomeAvatarSummonEvent;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.HomeAvatarSummonEventRspOuterClass;
|
||||
|
||||
public class PacketHomeAvatarSummonEventRsp extends BasePacket {
|
||||
public PacketHomeAvatarSummonEventRsp(HomeAvatarSummonEvent event) {
|
||||
super(PacketOpcodes.HomeAvatarSummonEventRsp);
|
||||
|
||||
this.setData(HomeAvatarSummonEventRspOuterClass.HomeAvatarSummonEventRsp.newBuilder()
|
||||
.setEventId(event.getEventId()));
|
||||
}
|
||||
|
||||
public PacketHomeAvatarSummonEventRsp(int retcode) {
|
||||
super(PacketOpcodes.HomeAvatarSummonEventRsp);
|
||||
|
||||
this.setData(HomeAvatarSummonEventRspOuterClass.HomeAvatarSummonEventRsp.newBuilder()
|
||||
.setRetcode(retcode));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.HomeAvatarSummonFinishRspOuterClass;
|
||||
|
||||
public class PacketHomeAvatarSummonFinishRsp extends BasePacket {
|
||||
public PacketHomeAvatarSummonFinishRsp(int eventId) {
|
||||
super(PacketOpcodes.HomeAvatarSummonFinishRsp);
|
||||
|
||||
this.setData(HomeAvatarSummonFinishRspOuterClass.HomeAvatarSummonFinishRsp.newBuilder()
|
||||
.setEventId(eventId));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.PlayerQuitFromHomeNotifyOuterClass;
|
||||
|
||||
public class PacketPlayerQuitFromHomeNotify extends BasePacket {
|
||||
public PacketPlayerQuitFromHomeNotify(PlayerQuitFromHomeNotifyOuterClass.PlayerQuitFromHomeNotify.QuitReason reason) {
|
||||
super(PacketOpcodes.PlayerQuitFromHomeNotify);
|
||||
|
||||
this.setData(PlayerQuitFromHomeNotifyOuterClass.PlayerQuitFromHomeNotify.newBuilder()
|
||||
.setReason(reason));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user