Thread: [Kronos] Deadman Bank Key Raiding System

Results 1 to 5 of 5
  1. #1 [Kronos] Deadman Bank Key Raiding System 
    Registered Member
    Join Date
    Feb 2021
    Posts
    115
    Thanks given
    31
    Thanks received
    8
    Rep Power
    62



    Monomode DMM RSPS: Ironman-Restricted Deadman Tournament.


    Please note, the code snippet, and forum thread, are a work in progress and that users should be aware of bugs and issues that may need to be addressed.

    v2:
    Github - Monomode/DeadmanRaidManager

    v1:
    GitHub - Monomode/Deadman-Mode
    GitHub - Monomode/Kronos-199


    Your interest in this release is appreciated.

    Donate to Monomoy

    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));
        }
    
    }
    Last edited by Monomoy; 01-29-2024 at 01:38 PM.
    Reply With Quote  
     

  2. #2  
    Throne Scape - Founder/Developer
    Mokhtar's Avatar
    Join Date
    Mar 2018
    Posts
    803
    Thanks given
    43
    Thanks received
    171
    Rep Power
    299
    GoodJob thanks for sharing
    Reply With Quote  
     

  3. #3  
    Inferno Founder

    Jin_'s Avatar
    Join Date
    May 2017
    Posts
    1,852
    Thanks given
    16
    Thanks received
    333
    Rep Power
    400
    Nice share, thanks
    Reply With Quote  
     

  4. #4  
    Registered Member
    Join Date
    Feb 2021
    Posts
    115
    Thanks given
    31
    Thanks received
    8
    Rep Power
    62
    Hello, I've added some fixes to the code and refactored for better readability.

    Enjoy v2! Github - Monomode/DeadmanRaidManager

    Reply With Quote  
     

  5. #5  
    Registered Member
    Join Date
    Mar 2024
    Posts
    10
    Thanks given
    0
    Thanks received
    1
    Rep Power
    27
    will look into this
    Reply With Quote  
     


Thread Information
Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)


User Tag List

Similar Threads

  1. Replies: 4
    Last Post: 06-29-2017, 03:05 PM
  2. Replies: 55
    Last Post: 08-10-2016, 08:27 PM
  3. Deadman Mode Bank Keys
    By RSPSSam in forum Snippets
    Replies: 21
    Last Post: 05-08-2016, 10:09 AM
  4. [PI] Deadman mode Bank Key/Bank Raid System
    By 2nubs1cup in forum Buying
    Replies: 5
    Last Post: 02-07-2016, 01:54 AM
  5. Deadman mode bank raid interface
    By Pandemia in forum Graphics
    Replies: 7
    Last Post: 02-02-2016, 12:33 PM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •