Implement dorm

This commit is contained in:
Melledy committed 2026-10-20 03:05:50 -07:00
1 parent c585417b85
commit bd4aabd464
47 files changed
+2364 -7

No files matched your search

@@ -146,6 +146,21 @@ public class GameData {
@Getter private static DataTable<TraceHuntLevelDef> TraceHuntLevelDataTable = new DataTable<>();
@Getter private static DataTable<TraceHuntSelfHuntExtraCostDef> TraceHuntSelfHuntExtraCostDataTable = new DataTable<>();
// ===== Dorm =====
@Getter private static DataTable<DormRoomDef> DormRoomDataTable = new DataTable<>();
@Getter private static DataTable<DormFurnitureDef> DormFurnitureDataTable = new DataTable<>();
@Getter private static DataTable<DormLayoutRewardDef> DormLayoutRewardDataTable = new DataTable<>();
@Getter private static DataTable<DormRoomLayoutDef> DormRoomLayoutDataTable = new DataTable<>();
@Getter private static DataTable<DormRewardDef> DormRewardDataTable = new DataTable<>();
@Getter private static DataTable<DormAchievementDef> DormAchievementDataTable = new DataTable<>();
@Getter private static DataTable<DormHonorTitleDef> DormHonorTitleDataTable = new DataTable<>();
@Getter private static DataTable<DormRoleDef> DormRoleDataTable = new DataTable<>();
@Getter private static DataTable<DormRoleSkinDef> DormRoleSkinDataTable = new DataTable<>();
@Getter private static DataTable<DormInteractiveDef> DormInteractiveDataTable = new DataTable<>();
@Getter private static DataTable<DormQuestDef> DormQuestDataTable = new DataTable<>();
@Getter private static DataTable<DormQuestGroupDef> DormQuestGroupDataTable = new DataTable<>();
@Getter private static DataTable<DormRoomSceneDef> DormRoomSceneDataTable = new DataTable<>();
// ===== Misc =====
@Getter private static DataTable<WorldClassDef> WorldClassDataTable = new DataTable<>();
@Getter private static DataTable<GuideGroupDef> GuideGroupDataTable = new DataTable<>();
@@ -0,0 +1,24 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import lombok.Getter;
@Getter
@ResourceType(name = "DormAchievement.json")
public class DormAchievementDef extends BaseDef {
private int Id;
private int CompleteCond;
private int[] CompleteParams;
private int Tid1;
private int Qty1;
private int Tid2;
private int Qty2;
private int Tid3;
private int Qty3;
@Override
public int getId() {
return Id;
}
}
@@ -0,0 +1,17 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import lombok.Getter;
@Getter
@ResourceType(name = "DormFurniture.json")
public class DormFurnitureDef extends BaseDef {
private int Id;
private int CollectionValue;
@Override
public int getId() {
return Id;
}
}
@@ -0,0 +1,17 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import lombok.Getter;
@Getter
@ResourceType(name = "DormHonorTitle.json")
public class DormHonorTitleDef extends BaseDef {
private int Id;
private int NeedExp;
@Override
public int getId() {
return Id;
}
}
@@ -0,0 +1,20 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import lombok.Getter;
@Getter
@ResourceType(name = "DormInteractive.json")
public class DormInteractiveDef extends BaseDef {
private int Id;
private int CharId;
private int FurniturnId;
private int DormInterType;
private String AnimationConfig;
@Override
public int getId() {
return Id;
}
}
@@ -0,0 +1,20 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import lombok.Getter;
@Getter
@ResourceType(name = "DormLayoutReward.json")
public class DormLayoutRewardDef extends BaseDef {
private int Id;
private int RoomType;
private int FurnitureCount;
private int RewardId1;
private int Qty1;
@Override
public int getId() {
return Id;
}
}
@@ -0,0 +1,22 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import lombok.Getter;
@Getter
@ResourceType(name = "DormQuest.json")
public class DormQuestDef extends BaseDef {
private int Id;
private int DormQuestGroup;
private String Title;
private int Reward1;
private int RewardQty1;
private int Reward2;
private int RewardQty2;
@Override
public int getId() {
return Id;
}
}
@@ -0,0 +1,24 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import lombok.Getter;
@Getter
@ResourceType(name = "DormQuestGroup.json")
public class DormQuestGroupDef extends BaseDef {
private int Id;
private int PreGroup;
private String Title;
private int Item1;
private int Qty1;
private int Item2;
private int Qty2;
private int Item3;
private int Qty3;
@Override
public int getId() {
return Id;
}
}
@@ -0,0 +1,56 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import emu.nebula.util.JsonUtils;
import it.unimi.dsi.fastutil.ints.IntSet;
import lombok.Getter;
@Getter
@ResourceType(name = "DormReward.json")
public class DormRewardDef extends BaseDef {
private int Id;
private int DropId;
private String Conditions;
private transient int[][] parsedConditions;
@Override
public int getId() {
return Id;
}
@Override
public void onLoad() {
this.parsedConditions = JsonUtils.decode(this.Conditions, int[][].class);
}
/**
* Checks the requirements for this dorm reward.
* Condition type 1 = the player needs to have the room unlocked.
*/
public boolean isUnlocked(IntSet unlockedRoomIds) {
if (this.parsedConditions == null) {
return false;
}
for (int[] condition : this.parsedConditions) {
if (condition.length < 2) {
return false;
}
switch (condition[0]) {
case 1 -> {
if (!unlockedRoomIds.contains(condition[1])) {
return false;
}
}
default -> {
return false;
}
}
}
return true;
}
}
@@ -0,0 +1,18 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import lombok.Getter;
@Getter
@ResourceType(name = "DormRole.json")
public class DormRoleDef extends BaseDef {
private int Id;
private int RoleType;
private int[] Exclusions;
@Override
public int getId() {
return Id;
}
}
@@ -0,0 +1,19 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import lombok.Getter;
@Getter
@ResourceType(name = "DormRoleSkin.json")
public class DormRoleSkinDef extends BaseDef {
private int Id;
private int TrId;
private int TrQty;
private int UnlockChar;
@Override
public int getId() {
return Id;
}
}
@@ -0,0 +1,24 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import lombok.Getter;
@Getter
@ResourceType(name = "DormRoom.json")
public class DormRoomDef extends BaseDef {
private int Id;
private int RoomType;
private int RoomSizeType;
private int SceneRes;
private String DefaultName;
private int DefaultLayoutId;
private boolean DefaultCanUse;
private int RoleNum;
private int FloorRatio;
@Override
public int getId() {
return Id;
}
}
@@ -0,0 +1,21 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import lombok.Getter;
@Getter
@ResourceType(name = "DormRoomLayout.json")
public class DormRoomLayoutDef extends BaseDef {
private int Id;
private int RoomLayoutId;
private int FurnitureId;
private int[] Pos;
private int Rot;
private int ApplyRoomType;
@Override
public int getId() {
return Id;
}
}
@@ -0,0 +1,16 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import lombok.Getter;
@Getter
@ResourceType(name = "DormRoomScene.json")
public class DormRoomSceneDef extends BaseDef {
private int Id;
@Override
public int getId() {
return Id;
}
}