[BREAKING] Item Usage Overhaul

-De-hardcode elemental orb values
-De-hardcode exp items
-Change ShopChest format (temporary, drop system overhaul will replace it entirely)
-Food healing actually uses Ability data for real HP amounts
This commit is contained in:
AnimeGitB
2022-10-14 00:00:40 +10:30
parent 5bb43ac074
commit d1d39db56c
66 changed files with 1533 additions and 786 deletions

View File

@@ -4,6 +4,7 @@ import dev.morphia.annotations.Entity;
import dev.morphia.annotations.Id;
import dev.morphia.annotations.IndexOptions;
import dev.morphia.annotations.Indexed;
import dev.morphia.annotations.Transient;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.HomeWorldLevelData;
@@ -25,12 +26,12 @@ import java.util.concurrent.ConcurrentHashMap;
@FieldDefaults(level = AccessLevel.PRIVATE)
@Builder(builderMethodName = "of")
public class GameHome {
@Id
String id;
@Indexed(options = @IndexOptions(unique = true))
long ownerUid;
@Transient Player player;
int level;
int exp;
@@ -70,6 +71,8 @@ public class GameHome {
}
public void onOwnerLogin(Player player) {
if (this.player == null)
this.player = player;
player.getSession().send(new PacketHomeBasicInfoNotify(player, false));
player.getSession().send(new PacketPlayerHomeCompInfoNotify(player));
player.getSession().send(new PacketHomeComfortInfoNotify(player));
@@ -78,30 +81,40 @@ public class GameHome {
player.getSession().send(new PacketUnlockedHomeBgmNotify(player));
}
public Player getPlayer() {
if (this.player == null)
this.player = Grasscutter.getGameServer().getPlayerByUid((int) this.ownerUid, true);
return this.player;
}
public HomeWorldLevelData getLevelData(){
return GameData.getHomeWorldLevelDataMap().get(level);
}
public void addUnlockedHomeBgm(int homeBgmId) {
getUnlockedHomeBgmList().add(homeBgmId);
public boolean addUnlockedHomeBgm(int homeBgmId) {
if (getUnlockedHomeBgmList().add(homeBgmId)) return false;
var player = this.getPlayer();
player.sendPacket(new PacketUnlockHomeBgmNotify(homeBgmId));
player.sendPacket(new PacketUnlockedHomeBgmNotify(player));
save();
return true;
}
public Set<Integer> getUnlockedHomeBgmListInfo() {
var list = getUnlockedHomeBgmList();
if (list == null) {
list = new HashSet<>();
addAllDefaultUnlockedBgmIds(list);
setUnlockedHomeBgmList(list);
if (this.unlockedHomeBgmList == null) {
this.unlockedHomeBgmList = new HashSet<>();
addAllDefaultUnlockedBgmIds(this.unlockedHomeBgmList);
save();
}
return list;
return this.unlockedHomeBgmList;
}
private void addAllDefaultUnlockedBgmIds(Set<Integer> list) {
GameData.getHomeWorldBgmDataMap().int2ObjectEntrySet().stream()
.filter(entry -> entry.getValue().isDefaultUnlock())
.forEach(entry -> list.add(entry.getIntKey()));
GameData.getHomeWorldBgmDataMap().forEach((id, data) -> {
if (data.isDefaultUnlock())
list.add(id);
});
}
}