Add skins to the giveall command

Example usage: `!giveall skins`

Description: Gives all non-basic/non-ascension skins for trekkers owned by the target player. Requires handbook generation to be enabled.
This commit is contained in:
Melledy
2026-02-02 22:32:32 -08:00
parent d3ac668313
commit f3330e2a6d
3 changed files with 49 additions and 2 deletions
@@ -13,6 +13,7 @@ import emu.nebula.game.inventory.ItemSubType;
import emu.nebula.game.player.Player;
import emu.nebula.game.player.PlayerChangeInfo;
import emu.nebula.net.NetMsgId;
import emu.nebula.proto.Public.Item;
@Command(
label = "giveall",
@@ -67,7 +68,7 @@ public class GiveAllCommand implements CommandHandler {
// Send message
message.append("Giving " + target.getName() + " " + items.size() + " items.\n");
}
case "d", "discs" -> {
case "d", "disc", "discs" -> {
// Get all discs
for (var data : GameData.getDiscDataTable()) {
// Skip unavailable discs
@@ -97,7 +98,7 @@ public class GiveAllCommand implements CommandHandler {
// Send message
message.append("Giving " + target.getName() + " all discs.\n");
}
case "c", "characters", "trekkers", "t" -> {
case "c", "char", "characters", "trekkers", "t" -> {
// Get all characters
for (var data : GameData.getCharacterDataTable()) {
// Skip unavailable characters
@@ -127,6 +128,40 @@ public class GiveAllCommand implements CommandHandler {
// Send message
message.append("Giving " + target.getName() + " all characters.\n");
}
case "skin", "skins" -> {
// Skins count
int count = 0;
// Get all paid skins
for (var data : GameData.getCharacterSkinDataTable()) {
// Skip basic/ascension skins
if (data.getType() != 3) {
continue;
}
// Make sure player has the character the skin is for
if (!target.getCharacters().hasCharacter(data.getCharId())) {
continue;
}
// Make sure skin is released
if (!data.isReleased()) {
continue;
}
// Add skin for player, will return true if we successfully added the skin
if (target.getInventory().addSkin(data.getId())) {
// Increment counter
count++;
// Add change info
change.add(Item.newInstance().setId(data.getId()).setQty(1));
}
}
// Send message
message.append("Giving " + count + " skins.\n");
}
default -> {
// Ignored
}
@@ -3,6 +3,7 @@ package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import lombok.Getter;
import lombok.Setter;
@Getter
@ResourceType(name = "CharacterSkin.json")
@@ -11,6 +12,9 @@ public class CharacterSkinDef extends BaseDef {
private int CharId;
private int Type;
@Setter
private transient boolean released;
@Override
public int getId() {
return Id;
@@ -77,6 +77,14 @@ public class Handbook {
}
}
// Hacky way of checking if a skin is released or not
if (data.getItemType() == ItemType.CharacterSkin) {
var skinData = GameData.getCharacterSkinDataTable().get(id);
if (skinData != null) {
skinData.setReleased(itemLanguageKey.containsKey(data.getTitle()));
}
}
writer.println("");
}