mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-17 09:25:06 +01:00
fix: albedo elevator doesn't work (#1845)
* Packet preparation * elevator creation * Make elevator work, scene time, entity removed event. * Avoid referencing certain character name.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.game.entity.EntitySolarIsotomaClientGadget;
|
||||
import emu.grasscutter.game.entity.EntityClientGadget;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
@@ -9,19 +10,29 @@ import emu.grasscutter.server.game.GameSession;
|
||||
|
||||
@Opcodes(PacketOpcodes.EvtCreateGadgetNotify)
|
||||
public class HandlerEvtCreateGadgetNotify extends PacketHandler {
|
||||
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
EvtCreateGadgetNotify notify = EvtCreateGadgetNotify.parseFrom(payload);
|
||||
|
||||
|
||||
// Sanity check - dont add duplicate entities
|
||||
if (session.getPlayer().getScene().getEntityById(notify.getEntityId()) != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Create entity and summon in world
|
||||
EntityClientGadget gadget = new EntityClientGadget(session.getPlayer().getScene(), session.getPlayer(), notify);
|
||||
session.getPlayer().getScene().onPlayerCreateGadget(gadget);
|
||||
var gadgetId = notify.getConfigId();
|
||||
EntityClientGadget gadget = switch (gadgetId) {
|
||||
//Solar Isotoma.
|
||||
case EntitySolarIsotomaClientGadget.GADGET_ID ->
|
||||
new EntitySolarIsotomaClientGadget(session.getPlayer().getScene(), session.getPlayer(), notify);
|
||||
|
||||
//Default.
|
||||
default ->
|
||||
new EntityClientGadget(session.getPlayer().getScene(), session.getPlayer(), notify);
|
||||
};
|
||||
|
||||
session.getPlayer().getScene().onPlayerCreateGadget(gadget);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.game.entity.platform.EntityPlatform;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.PacketHeadOuterClass;
|
||||
import emu.grasscutter.net.proto.UpdateAbilityCreatedMovingPlatformNotifyOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketPlatformStartRouteNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketPlatformStopRouteNotify;
|
||||
|
||||
@Opcodes(PacketOpcodes.UpdateAbilityCreatedMovingPlatformNotify)
|
||||
public class HandlerUpdateAbilityCreatedMovingPlatformNotify extends PacketHandler {
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
var sequence = PacketHeadOuterClass.PacketHead.parseFrom(header).getClientSequenceId();
|
||||
var notify = UpdateAbilityCreatedMovingPlatformNotifyOuterClass.UpdateAbilityCreatedMovingPlatformNotify.parseFrom(payload);
|
||||
var entity = session.getPlayer().getScene().getEntityById(notify.getEntityId());
|
||||
|
||||
if (!(entity instanceof EntityPlatform)) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (notify.getOpType()) {
|
||||
case OP_TYPE_ACTIVATE -> session.send(new PacketPlatformStartRouteNotify(sequence, (EntityPlatform) entity, session.getPlayer().getScene()));
|
||||
case OP_TYPE_DEACTIVATE -> session.send(new PacketPlatformStopRouteNotify(sequence, (EntityPlatform) entity, session.getPlayer().getScene()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.game.entity.platform.EntityPlatform;
|
||||
import emu.grasscutter.game.world.Scene;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.PlatformStartRouteNotifyOuterClass;
|
||||
|
||||
public class PacketPlatformStartRouteNotify extends BasePacket {
|
||||
public PacketPlatformStartRouteNotify(int clientSequence, EntityPlatform entity, Scene scene) {
|
||||
super(PacketOpcodes.PlatformStartRouteNotify, clientSequence);
|
||||
|
||||
var notify = PlatformStartRouteNotifyOuterClass.PlatformStartRouteNotify.newBuilder()
|
||||
.setEntityId(entity.getId())
|
||||
.setSceneTime(scene.getSceneTime())
|
||||
.setPlatform(entity.onStartRoute())
|
||||
.build();
|
||||
|
||||
this.setData(notify);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.game.entity.platform.EntityPlatform;
|
||||
import emu.grasscutter.game.world.Scene;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.PlatformStopRouteNotifyOuterClass;
|
||||
|
||||
public class PacketPlatformStopRouteNotify extends BasePacket {
|
||||
public PacketPlatformStopRouteNotify(int clientSequence, EntityPlatform entity, Scene scene) {
|
||||
super(PacketOpcodes.PlatformStopRouteNotify, clientSequence);
|
||||
|
||||
var notify = PlatformStopRouteNotifyOuterClass.PlatformStopRouteNotify.newBuilder()
|
||||
.setPlatform(entity.onStopRoute())
|
||||
.setSceneTime(scene.getSceneTime())
|
||||
.setEntityId(entity.getId())
|
||||
.build();
|
||||
|
||||
this.setData(notify);
|
||||
}
|
||||
}
|
||||
@@ -6,15 +6,15 @@ import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.SceneTimeNotifyOuterClass.SceneTimeNotify;
|
||||
|
||||
public class PacketSceneTimeNotify extends BasePacket {
|
||||
|
||||
|
||||
public PacketSceneTimeNotify(Player player) {
|
||||
super(PacketOpcodes.SceneTimeNotify);
|
||||
|
||||
SceneTimeNotify proto = SceneTimeNotify.newBuilder()
|
||||
.setSceneId(player.getSceneId())
|
||||
.setSceneTime(0)
|
||||
.setSceneTime(player.getScene().getSceneTime())
|
||||
.build();
|
||||
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user