Refactor inventory system

This commit is contained in:
Melledy
2025-11-02 04:44:03 -08:00
parent bc7d5cfd73
commit 88f3b246c8
10 changed files with 185 additions and 39 deletions

View File

@@ -289,6 +289,51 @@ public class Character implements GameDatabaseObject {
return changes.setSuccess(true);
}
public boolean setSkin(int skinId) {
// Sanity check
if (this.skin == skinId) {
return false;
}
//
var skinData = GameData.getCharacterSkinDataTable().get(skinId);
if (skinData == null) {
return false;
}
// Make sure we have the skin
if (skinData.getCharId() != this.getCharId()) {
return false;
}
switch (skinData.getType()) {
case 1:
// Default skin, always allow
break;
case 2:
// Ascension skin, only allow if the character has the right ascension level
if (this.getAdvance() < this.getData().getAdvanceSkinUnlockLevel()) {
return false;
}
break;
default:
// Extra skin, only allow if we have the skin unlocked
if (!getPlayer().getInventory().getExtraSkins().contains(skinId)) {
return false;
}
break;
}
// Set skin
this.skin = skinId;
// Save
this.save();
// Success
return true;
}
// Proto
public Char toProto() {

View File

@@ -73,9 +73,9 @@ public class CharacterStorage extends PlayerManager {
public HandbookInfo getCharacterHandbook() {
var bitset = new Bitset();
for (var character : this.getCharacterCollection()) {
// Get handbook
var data = GameData.getHandbookDataTable().get(400000 + character.getSkin());
for (var skinId : getPlayer().getInventory().getAllSkinIds()) {
// Get handbook data
var data = GameData.getHandbookDataTable().get(400000 + skinId);
if (data == null) continue;
// Set flag