From 38d44f7a71163bf1bdce16ee81095a6330c56d9a Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Tue, 28 Oct 2025 00:41:30 -0700 Subject: [PATCH] Implement dictionaries --- src/main/java/emu/nebula/data/GameData.java | 3 ++ .../data/resources/DictionaryEntryDef.java | 28 +++++++++++++++++++ .../data/resources/DictionaryTabDef.java | 26 +++++++++++++++++ .../java/emu/nebula/game/player/Player.java | 19 ++++++++++++- 4 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/main/java/emu/nebula/data/resources/DictionaryEntryDef.java create mode 100644 src/main/java/emu/nebula/data/resources/DictionaryTabDef.java diff --git a/src/main/java/emu/nebula/data/GameData.java b/src/main/java/emu/nebula/data/GameData.java index 5628303..303b6c2 100644 --- a/src/main/java/emu/nebula/data/GameData.java +++ b/src/main/java/emu/nebula/data/GameData.java @@ -37,6 +37,9 @@ public class GameData { @Getter private static DataTable MallShopDataTable = new DataTable<>(); @Getter private static DataTable MallGemDataTable = new DataTable<>(); + @Getter private static DataTable DictionaryTabDataTable = new DataTable<>(); + @Getter private static DataTable DictionaryEntryDataTable = new DataTable<>(); + @Getter private static DataTable WorldClassDataTable = new DataTable<>(); @Getter private static DataTable GuideGroupDataTable = new DataTable<>(); @Getter private static DataTable StoryDataTable = new DataTable<>(); diff --git a/src/main/java/emu/nebula/data/resources/DictionaryEntryDef.java b/src/main/java/emu/nebula/data/resources/DictionaryEntryDef.java new file mode 100644 index 0000000..deb124b --- /dev/null +++ b/src/main/java/emu/nebula/data/resources/DictionaryEntryDef.java @@ -0,0 +1,28 @@ +package emu.nebula.data.resources; + +import emu.nebula.data.BaseDef; +import emu.nebula.data.GameData; +import emu.nebula.data.ResourceType; +import emu.nebula.data.ResourceType.LoadPriority; +import lombok.Getter; + +@Getter +@ResourceType(name = "DictionaryEntry.json", loadPriority = LoadPriority.LOW) +public class DictionaryEntryDef extends BaseDef { + private int Id; + private int Tab; + private int Index; + + @Override + public int getId() { + return Id; + } + + @Override + public void onLoad() { + var dictionary = GameData.getDictionaryTabDataTable().get(this.getTab()); + if (dictionary != null) { + dictionary.getEntries().add(this); + } + } +} diff --git a/src/main/java/emu/nebula/data/resources/DictionaryTabDef.java b/src/main/java/emu/nebula/data/resources/DictionaryTabDef.java new file mode 100644 index 0000000..e97042a --- /dev/null +++ b/src/main/java/emu/nebula/data/resources/DictionaryTabDef.java @@ -0,0 +1,26 @@ +package emu.nebula.data.resources; + +import java.util.ArrayList; +import java.util.List; + +import emu.nebula.data.BaseDef; +import emu.nebula.data.ResourceType; + +import lombok.Getter; + +@Getter +@ResourceType(name = "DictionaryTab.json") +public class DictionaryTabDef extends BaseDef { + private int Id; + + private List entries; + + public DictionaryTabDef() { + this.entries = new ArrayList<>(); + } + + @Override + public int getId() { + return Id; + } +} diff --git a/src/main/java/emu/nebula/game/player/Player.java b/src/main/java/emu/nebula/game/player/Player.java index 00235f1..e1c834f 100644 --- a/src/main/java/emu/nebula/game/player/Player.java +++ b/src/main/java/emu/nebula/game/player/Player.java @@ -19,6 +19,8 @@ import emu.nebula.game.mail.Mailbox; import emu.nebula.game.story.StoryManager; import emu.nebula.game.tower.StarTowerManager; import emu.nebula.net.GameSession; +import emu.nebula.proto.PlayerData.DictionaryEntry; +import emu.nebula.proto.PlayerData.DictionaryTab; import emu.nebula.proto.PlayerData.PlayerInfo; import emu.nebula.proto.Public.NewbieInfo; import emu.nebula.proto.Public.QuestType; @@ -333,7 +335,6 @@ public class Player implements GameDatabaseObject { .setCreateTime(this.getCreateTime()); proto.getMutableWorldClass() - .setStage(3) .setCur(this.getLevel()) .setLastExp(this.getExp()); @@ -418,6 +419,22 @@ public class Player implements GameDatabaseObject { for (int boardId : this.getBoards()) { proto.addBoard(boardId); } + + // Add dictionary tabs + for (var dictionaryData : GameData.getDictionaryTabDataTable()) { + var dictionaryProto = DictionaryTab.newInstance() + .setTabId(dictionaryData.getId()); + + for (var entry : dictionaryData.getEntries()) { + var entryProto = DictionaryEntry.newInstance() + .setIndex(entry.getIndex()) + .setStatus(2); // 2 = complete + + dictionaryProto.addEntries(entryProto); + } + + proto.addDictionaries(dictionaryProto); + } // Server timestamp proto.setServerTs(Nebula.getCurrentTime());