Code:
package io.ruin.model.activities.deadman;
import io.ruin.api.utils.NumberUtils;
import io.ruin.model.combat.KillingSpree;
import io.ruin.model.entity.player.GameMode;
import io.ruin.model.entity.player.Player;
import io.ruin.model.inter.Interface;
import io.ruin.model.inter.InterfaceHandler;
import io.ruin.model.inter.InterfaceType;
import io.ruin.model.inter.actions.SimpleAction;
import io.ruin.model.inter.actions.SlotAction;
import io.ruin.model.inter.utils.Config;
import io.ruin.model.item.Item;
import io.ruin.model.item.ItemContainer;
import io.ruin.model.map.object.actions.ObjectAction;
public class DeadmanRaidManager {
public static final int CHEST = 27269;
public static final int BANK_KEY = 13302;
public static final int BANK_KEY_1 = 13302;
public static final int BANK_KEY_2 = 13303;
public static final int BANK_KEY_3 = 13304;
public static final int BANK_KEY_4 = 13305;
public static final int BANK_KEY_5 = 13306;
public static final int BLOOD_MONEY = 13307;
private static final int INTERFACE_TAB_0_CONTAINER_ID = 558;
private static final int INTERFACE_TAB_1_CONTAINER_ID = 559;
private static final int INTERFACE_TAB_2_CONTAINER_ID = 560;
private static final int INTERFACE_TAB_3_CONTAINER_ID = 561;
private static final int INTERFACE_TAB_4_CONTAINER_ID = 562;
private Player player;
private boolean withdrawAsNote;
private ItemContainer[] deadmanBankKeyItemContainer = new ItemContainer[5];
private static int DEADMAN_ACTIVE_KEY_VIEWED; //player varpbit4842 DEADMAN_ACTIVE_KEY_VIEWED
public DeadmanRaidManager(Player player) {
this.player = player;
this.DEADMAN_ACTIVE_KEY_VIEWED = Config.DEADMAN_ACTIVE_KEY_VIEWED.get(player); // Update current Tab based on Config.DEADMAN_ACTIVE_KEY_VIEWED
}
static {
ObjectAction.register(CHEST, "open", (player, obj) -> {
boolean hasKey = false;
for (int i = 0; i < 5; i++) {
if (player.getInventory().contains(BANK_KEY + i)) {
hasKey = true;
}
}
if (!hasKey) {
player.sendMessage("You do not have any bank keys.");
} else {
player.getDeadmanRaidManager().openChest();
}
});
InterfaceHandler.register(Interface.DEADMAN_CHEST, h -> {
//h.actions[22] //TODO: DESTROY
//h.actions[9] //TODO: (NO) CANCEL DESTROY
h.actions[8] = (SlotAction) (p, s) -> { //(YES) CONFIRM DESTROY
p.getDeadmanRaidManager().remove(p.getDeadmanRaidManager().DEADMAN_ACTIVE_KEY_VIEWED);
p.closeInterface(InterfaceType.MAIN);
};
h.actions[14] = (SlotAction) (p, DEADMAN_ACTIVE_KEY_VIEWED) -> { //TODO: What is this for? SWITCH TABS BETWEEN BANK KEYS?
p.getDeadmanRaidManager().openChest();
};
h.actions[26] = (SimpleAction) p -> p.getDeadmanRaidManager().withdrawAsNote = false; //ITEM WITHDRAWAL
h.actions[31] = (SimpleAction) p -> p.getDeadmanRaidManager().withdrawAsNote = true; //NOTE WITHDRAWAL
h.actions[37] = (SlotAction) (p, s) -> { //WITHDRAW ALL TO INVENTORY
if (p.getInventory().contains(BANK_KEY + p.getDeadmanRaidManager().DEADMAN_ACTIVE_KEY_VIEWED)) {
for (Item item : p.getDeadmanRaidManager().get(DEADMAN_ACTIVE_KEY_VIEWED))
if (p.getGameMode() == GameMode.STANDARD) {
p.getInventory().addOrDrop(item);
p.getInventory().remove(new Item(BANK_KEY + p.getDeadmanRaidManager().DEADMAN_ACTIVE_KEY_VIEWED));
}
if (p.getGameMode() != GameMode.STANDARD) {
p.sendMessage("<col=ff0000>As an Ironman you're not able to receive loot from bank keys.");
}
p.getDeadmanRaidManager().remove(p.getDeadmanRaidManager().DEADMAN_ACTIVE_KEY_VIEWED);
}
p.closeInterface(InterfaceType.MAIN);
p.getPacketSender().sendItems(0, 0, 558 + p.getDeadmanRaidManager().DEADMAN_ACTIVE_KEY_VIEWED, new Item[]{});
p.getPacketSender().sendClientScript(29);
};
h.actions[44] = (SlotAction) (p, s) -> { //WITHDRAW ALL TO BANK
if (p.getInventory().contains(BANK_KEY + p.getDeadmanRaidManager().DEADMAN_ACTIVE_KEY_VIEWED)) {
for (Item item : p.getDeadmanRaidManager().get(DEADMAN_ACTIVE_KEY_VIEWED))
if (p.getGameMode() == GameMode.STANDARD) {
p.getBank().deposit(item, 29, true);
p.getInventory().remove(new Item(BANK_KEY + p.getDeadmanRaidManager().DEADMAN_ACTIVE_KEY_VIEWED));
}
if (p.getGameMode() != GameMode.STANDARD) {
p.sendMessage("<col=ff0000>As an Ironman you're not able to receive loot from bank keys.");
}
p.getDeadmanRaidManager().remove(p.getDeadmanRaidManager().DEADMAN_ACTIVE_KEY_VIEWED);
}
p.closeInterface(InterfaceType.MAIN);
p.getPacketSender().sendItems(0, 0, 558 + p.getDeadmanRaidManager().DEADMAN_ACTIVE_KEY_VIEWED, new Item[]{});
p.getPacketSender().sendClientScript(29);
};
});
}
public void openChest() {
// Determine which tab to display first when opening chest
int counts[] = new int[5];
for (int i = 0; i < 5; i++) {
counts[i] = player.getInventory().getAmount(BANK_KEY + i);
if (counts[i] == 0) {
DEADMAN_ACTIVE_KEY_VIEWED = 0; // If no keys are found, default to tab 0
}
if (counts[i] > 0) {
DEADMAN_ACTIVE_KEY_VIEWED = i; // Set current Tab based on the first non-empty tab
break;
}
}
// Open Interface to view contents of Deadman Bank Key
player.openInterface(InterfaceType.MAIN, Interface.DEADMAN_CHEST);
player.getPacketSender().sendClientScript(1166);
player.getPacketSender().sendClientScript(1171);
player.getPacketSender().sendClientScript(1170);
Config.DEADMAN_ACTIVE_KEY_VIEWED.set(player, DEADMAN_ACTIVE_KEY_VIEWED);
player.getPacketSender().sendClientScript(1178, "ii", Interface.DEADMAN_CHEST << 16 | 46, Interface.DEADMAN_CHEST << 16 | 47);
player.getPacketSender().sendClientScript(1163);
if (player.getDeadmanRaidManager().size() == 0) {
return;
}
// Display items in the selected tab
//player.getPacketSender().sendItems(0, 0, 558 + DEADMAN_ACTIVE_KEY_VIEWED, player.getDeadmanRaidManager().get(DEADMAN_ACTIVE_KEY_VIEWED));
player.getPacketSender().sendItems(0, 0, 558, player.getDeadmanRaidManager().get(0));
player.getPacketSender().sendItems(0, 0, 559, player.getDeadmanRaidManager().get(1));
player.getPacketSender().sendItems(0, 0, 560, player.getDeadmanRaidManager().get(2));
player.getPacketSender().sendItems(0, 0, 561, player.getDeadmanRaidManager().get(3));
player.getPacketSender().sendItems(0, 0, 562, player.getDeadmanRaidManager().get(4));
//TODO: Calculate and display the tab value(s)
player.getDeadmanRaidManager().calculateAndDisplayValueOnDeadmanBankKeyTab();
}
private void refreshKey() {
for (int i = 0; i <= 4; i++) {
if (player.getInventory().contains(i + 13302)) {
//player.write(new SetItems(key++, -1, container--, dmminfo.keys[i].lootcontainer));
player.getPacketSender().sendItems(0, 0, 558 + DEADMAN_ACTIVE_KEY_VIEWED, player.getDeadmanRaidManager().get(DEADMAN_ACTIVE_KEY_VIEWED));
}
}
}
private void updateSkull() {
if (player.getCombat().skullDelay > 0) {
player.getAppearance().setSkullIcon(KillingSpree.overheadId(player));
}
}
public boolean add(ItemContainer BankKey) {
for (int i = 0; i < this.deadmanBankKeyItemContainer.length; i++) {
if (this.deadmanBankKeyItemContainer[i] == null || !player.hasItem(new Item(BANK_KEY + i))) {
this.deadmanBankKeyItemContainer[i] = BankKey;
player.getInventory().addOrDrop(new Item(BANK_KEY + i));
updateSkull();
return true;
}
}
return false;
}
public Item[] get(int DEADMAN_ACTIVE_KEY_VIEWED) {
// This method is responsible for retrieving items from the Deadman Bank Key.
System.out.println("Getting items for Deadman Bank Key tab: " + DEADMAN_ACTIVE_KEY_VIEWED);
// Check if the current Deadman Bank Key tab is empty.
if (deadmanBankKeyItemContainer[DEADMAN_ACTIVE_KEY_VIEWED] == null) {
// If it's empty, return an empty array of items.
return new Item[0];
} else {
// If it's not empty, return the items from the Deadman Bank Key tab.
return deadmanBankKeyItemContainer[DEADMAN_ACTIVE_KEY_VIEWED].getItems();
}
//return deadmanBankKeyItemContainer[DEADMAN_ACTIVE_KEY_VIEWED] == null ? new Item[0] : deadmanBankKeyItemContainer[DEADMAN_ACTIVE_KEY_VIEWED].getItems();
}
public void remove(int tab) {
deadmanBankKeyItemContainer[tab] = null;
player.getInventory().remove(new Item(BANK_KEY + tab, 500));
player.getBank().remove(new Item(BANK_KEY + tab, 500));
updateSkull();
}
public int size() {
int count = 0;
for (int i = 0; i < deadmanBankKeyItemContainer.length; i++) {
if (deadmanBankKeyItemContainer[i] != null) count++;
}
return count;
}
public void calculateAndDisplayValueOnDeadmanBankKeyTab() {
// Calculate and display value of items in the selected tab
int amt = 0;
String value = "";
for (Item item : player.getDeadmanRaidManager().get(DEADMAN_ACTIVE_KEY_VIEWED)) {
if (item == null) continue;
amt += item.getDef() == null ? 0 : item.getDef().highAlchValue * item.getAmount();
}
float total = amt;
if (amt > 1000000) {
value = (total / 1000000) + "";
if (value.contains(".")) {
value = value.substring(0, value.indexOf('.') + 2);
}
value += "M";
} else {
if (amt > 100000) {
value = (total / 100000) + "";
if (value.contains(".")) {
value = value.substring(0, value.indexOf('.') + 2);
}
value += "K";
} else {
value = NumberUtils.formatNumber(amt);
}
}
player.getPacketSender().sendClientScript(1169, "si", DEADMAN_ACTIVE_KEY_VIEWED, value);
}
private int countBankKeys() {
int count = 0;
for (int i = BANK_KEY; i <= BANK_KEY_5; i++) {
if (player.hasItem(new Item(i))) count++;
}
return count;
}
public void addBloodMoneyToBankKey(Player killer) {
// Add blood money to each key for testing purposes
ItemContainer DeadmanBankKey = new ItemContainer();
DeadmanBankKey.init(28, true);
int count = 1;
for (int i = BANK_KEY; i <= BANK_KEY_5; i++) {
if (killer.player.hasItem(new Item(i))) {
count++;
}
}
DeadmanBankKey.add(BLOOD_MONEY, count);
System.out.println(DeadmanBankKey.getAmount(BLOOD_MONEY));
}
}