Implement a new item drops system (#2112)

* 1

* Delete .gitattributes

* implement

* Update PacketDropHintNotify.java

* Update PacketWorldChestOpenNotify.java

* Update FileUtils.java

* Update PacketDropHintNotify.java

* Update WorldDataSystem.java

---------

Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com>
This commit is contained in:
dragon
2023-04-14 10:28:54 +08:00
committed by GitHub
parent eda5e8c5e0
commit f71b29c00a
21 changed files with 590 additions and 131 deletions

View File

@@ -1,8 +1,5 @@
package emu.grasscutter.server.game;
import static emu.grasscutter.config.Configuration.GAME_INFO;
import static emu.grasscutter.utils.Language.translate;
import emu.grasscutter.GameConstants;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.database.DatabaseHelper;
@@ -12,6 +9,7 @@ import emu.grasscutter.game.chat.ChatSystem;
import emu.grasscutter.game.chat.ChatSystemHandler;
import emu.grasscutter.game.combine.CombineManger;
import emu.grasscutter.game.drop.DropSystem;
import emu.grasscutter.game.drop.DropSystemLegacy;
import emu.grasscutter.game.dungeons.DungeonSystem;
import emu.grasscutter.game.expedition.ExpeditionSystem;
import emu.grasscutter.game.gacha.GachaSystem;
@@ -36,14 +34,18 @@ import emu.grasscutter.server.event.internal.ServerStopEvent;
import emu.grasscutter.server.event.types.ServerEvent;
import emu.grasscutter.server.scheduler.ServerTaskScheduler;
import emu.grasscutter.task.TaskMap;
import kcp.highway.ChannelConfig;
import kcp.highway.KcpServer;
import lombok.Getter;
import java.net.InetSocketAddress;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import kcp.highway.ChannelConfig;
import kcp.highway.KcpServer;
import lombok.Getter;
import static emu.grasscutter.config.Configuration.GAME_INFO;
import static emu.grasscutter.utils.Language.translate;
@Getter
public final class GameServer extends KcpServer {
@@ -61,6 +63,7 @@ public final class GameServer extends KcpServer {
private final DungeonSystem dungeonSystem;
private final ExpeditionSystem expeditionSystem;
private final DropSystem dropSystem;
private final DropSystemLegacy dropSystemLegacy;
private final WorldDataSystem worldDataSystem;
private final BattlePassSystem battlePassSystem;
private final CombineManger combineSystem;
@@ -113,6 +116,7 @@ public final class GameServer extends KcpServer {
this.multiplayerSystem = new MultiplayerSystem(this);
this.dungeonSystem = new DungeonSystem(this);
this.dropSystem = new DropSystem(this);
this.dropSystemLegacy = new DropSystemLegacy(this);
this.expeditionSystem = new ExpeditionSystem(this);
this.combineSystem = new CombineManger(this);
this.towerSystem = new TowerSystem(this);

View File

@@ -0,0 +1,27 @@
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.DropHintNotifyOuterClass.DropHintNotify;
import emu.grasscutter.net.proto.VectorOuterClass.Vector;
public class PacketDropHintNotify extends BasePacket {
public PacketDropHintNotify(int itemId, Vector position) {
super(PacketOpcodes.DropHintNotify);
var proto = DropHintNotify.newBuilder()
.addItemIdList(itemId)
.setPosition(position);
this.setData(proto.build());
}
public PacketDropHintNotify(Iterable<GameItem> items, Vector position) {
super(PacketOpcodes.DropHintNotify);
var proto = DropHintNotify.newBuilder();
items.forEach(i -> proto.addItemIdList(i.getItemId()));
proto.setPosition(position);
this.setData(proto.build());
}
}

View File

@@ -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.WorldChestOpenNotifyOuterClass.WorldChestOpenNotify;
public class PacketWorldChestOpenNotify extends BasePacket {
public PacketWorldChestOpenNotify(int groupId,int sceneId,int configId){
super(PacketOpcodes.WorldChestOpenNotify);
this.setData(WorldChestOpenNotify.newBuilder()
.setGroupId(groupId)
.setSceneId(sceneId)
.setConfigId(configId)
.build());
}
}