/giveall should not give more eidolons than needed

This commit is contained in:
Melledy
2023-12-07 01:59:28 -08:00
parent 1951c0e579
commit e1a42a734d
3 changed files with 43 additions and 18 deletions

View File

@@ -102,26 +102,46 @@ public class GiveAllCommand implements CommandHandler {
args.sendMessage("Giving " + target.getName() + " " + items.size() + " relics");
}
case "a", "characters", "avatars" -> {
// Eidolon items
List<GameItem> items = new ArrayList<>();
// All avatars and their eidolons
for (ItemExcel excel : GameData.getItemExcelMap().values()) {
if (excel.getItemMainType() == ItemMainType.AvatarCard) {
// Skip if target already has this avatar
if (target.getAvatars().hasAvatar(excel.getId())) {
continue;
}
for (var excel : GameData.getAvatarExcelMap().values()) {
// Get avatar id
GameAvatar avatar = target.getAvatarById(excel.getAvatarID());
// Add avatar
var avatarExcel = GameData.getAvatarExcelMap().get(excel.getId());
if (avatarExcel != null) {
GameAvatar avatar = new GameAvatar(avatarExcel);
if (avatar == null) {
// Add avatar
avatar = new GameAvatar(excel);
args.setProperties(avatar); // Set avatar properties
target.getAvatars().addAvatar(avatar);
}
} else if (excel.getItemSubType() == ItemSubType.Eidolon) {
// Add eidolons
target.getInventory().addItem(excel, 6);
// Get eidolon excel
ItemExcel itemExcel = GameData.getItemExcelMap().get(excel.getRankUpItemId());
if (itemExcel == null || itemExcel.getItemSubType() != ItemSubType.Eidolon) {
continue;
}
// Calculate how many eidolons we need
int rankCount = avatar.getRank();
GameItem rankItem = target.getInventory().getMaterialByItemId(itemExcel.getId());
if (rankItem != null) {
rankCount += rankItem.getCount();
}
// Add eidolons
int amount = 6 - rankCount;
if (amount > 0) {
items.add(new GameItem(itemExcel, amount));
}
}
// Add to target's inventory
if (items.size() > 0) {
target.getInventory().addItems(items, true);
}
// Send message

View File

@@ -54,6 +54,11 @@ public class AvatarExcel extends GameResource {
return AvatarID;
}
public int getRankUpItemId() {
// Hacky fix so we dont have to fetch data from an excel
return this.AvatarID + 10000;
}
public AvatarPromotionExcel getPromotionData(int i) {
return this.promotionData[i];
}

View File

@@ -194,8 +194,8 @@ public class GachaService extends BaseGameService {
GameAvatar avatar = player.getAvatars().getAvatarById(avatarId);
if (avatar != null) {
int dupeLevel = avatar.getRank();
int dupeItemId = avatarId + 10000; // Hacky fix so we dont have to fetch data from an excel
GameItem dupeItem = player.getInventory().getTabByItemType(ItemMainType.Material).getItemById(dupeItemId);
int dupeItemId = avatar.getExcel().getRankUpItemId();
GameItem dupeItem = player.getInventory().getMaterialByItemId(avatar.getExcel().getRankUpItemId());
if (dupeItem != null) {
dupeLevel += dupeItem.getCount();
}