Skip to content

Commit

Permalink
Fix quest chests not having drop data
Browse files Browse the repository at this point in the history
  • Loading branch information
KingRainbow44 committed Jun 2, 2023
1 parent 43f3494 commit cef8b53
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ public boolean onInteract(Player player, GadgetInteractReq req) {
} else if (chest.chest_drop_id != 0) {
status = dropSystem.handleChestDrop(chest.chest_drop_id, chest.drop_count, getGadget());
}

if (status) {
getGadget().updateState(ScriptGadgetState.ChestOpened);
player.sendPacket(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package emu.grasscutter.server.packet.recv;

import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.GadgetData;
import emu.grasscutter.data.excels.ItemData;
import emu.grasscutter.data.excels.monster.MonsterData;
import emu.grasscutter.game.entity.*;
import emu.grasscutter.game.world.Position;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.packet.*;
import emu.grasscutter.net.proto.QuestCreateEntityReqOuterClass.QuestCreateEntityReq;
import emu.grasscutter.scripts.data.SceneGadget;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketQuestCreateEntityRsp;
import lombok.val;
Expand All @@ -30,12 +28,29 @@ public void handle(GameSession session, byte[] header, byte[] payload) throws Ex
case GADGET_ID -> {
val gadgetId = entity.getGadgetId();
val gadgetInfo = entity.getGadget();
GadgetData gadgetData = GameData.getGadgetDataMap().get(gadgetId);
var gadgetData = GameData.getGadgetDataMap().get(gadgetId);
gameEntity =
switch (gadgetData.getType()) {
case Vehicle -> new EntityVehicle(scene, session.getPlayer(), gadgetId, 0, pos, rot);
case Chest -> {
var chest = gadgetInfo.getChest();
var gadget = new EntityGadget(scene, gadgetId, pos, rot);
// Create the gadget data for the chest.
var metaGadget = new SceneGadget();
metaGadget.drop_count = 1; // TODO: Check if more items should be dropped.
metaGadget.chest_drop_id = chest.getChestDropId();
metaGadget.setShowcutscene(chest.getIsShowCutscene());
// Apply the gadget data to the chest.
gadget.setMetaGadget(metaGadget);

yield gadget;
}
default -> new EntityGadget(scene, gadgetId, pos, rot);
};

if (gameEntity instanceof EntityGadget gadget) {
gadget.buildContent();
}
}
case ITEM_ID -> {
val itemId = entity.getItemId();
Expand Down

0 comments on commit cef8b53

Please sign in to comment.