diff --git a/2006Redone Server/src/redone/game/content/IronMan.java b/2006Redone Server/src/redone/game/content/IronMan.java new file mode 100644 index 000000000..68b89483b --- /dev/null +++ b/2006Redone Server/src/redone/game/content/IronMan.java @@ -0,0 +1,72 @@ +package redone.game.content; + +import redone.game.players.Client; + +/** + * + * Holds Ironman configs and assisting methods + * @author Fritz (TheRedArmy - http://www.rune-server.ee/members/theredarmy/) + * @Dark98 + * + */ +public class IronMan { + + /** + * Mode ids and names + */ + public final static int IRONMAN_MODE = 1; + public final static int HC_IRONMAN_MODE = 2; + public final static int ULTIMATE_IRONMAN = 3; + public final static String[] MODE_NAMES = { "IronMan", "Hardcore IronMan", "Ultimate IronMan" }; + + /** + * Gets the player's current game type + * @param player - Player whose game type is being fetched + * @return - Player's game type + */ + public static int getMode(Client player) { + return player.ironMan; + } + + /** + * Sets the players game type + * @param player - Player whose game type is being set + * @param mode - Game type player is being set to + */ + public static void setMode(Client player, int mode) { + player.ironMan = (mode); + } + + /** + * Gets the player's game type name + * @param player - Player whose game type name is being fetched + * @return - Player's game type name + */ + public static String getModeName(Client player) { + return MODE_NAMES[getMode(player) - 1]; + } + + /** + * Exchanges items for notes and notes for items when items are used on a bank booth + * @param player - Player using item on bank booth + * @param item - Item being used on the bank booth + * @param objectID - Object item is being used on + */ + /*public static void exchangeNotes(Client player, Item item, int objectID) { + if (objectID != 26972 || !player.getItems().playerHasItem(item, 1)) + return; + int amount = player.getItems().getItemAmount(item); + int freeSlots = player.getItems().freeSlots(); + if (item.isNote()) { + amount = amount > freeSlots && amount != freeSlots + 1 ? freeSlots : amount; + player.getItems().deleteItem(item, amount); + player.getItems().addItem(ItemContainer.getItem(item.getId() - 1), amount); + player.sendMessage("You exchange your notes for items"); + } else if (ItemContainer.getItem(item.getId() + 1).isNote()) { + player.getItems().deleteItem(item, amount); + player.getItems().addItem(ItemContainer.getItem(item.getId() + 1), amount); + player.sendMessage("You exchange your items for notes"); + } else + player.sendMessage("This cannot be noted"); + }*/ +} \ No newline at end of file diff --git a/2006Redone Server/src/redone/game/content/minigames/Dueling.java b/2006Redone Server/src/redone/game/content/minigames/Dueling.java index 9dc94d01a..05b425b00 100644 --- a/2006Redone Server/src/redone/game/content/minigames/Dueling.java +++ b/2006Redone Server/src/redone/game/content/minigames/Dueling.java @@ -4,6 +4,7 @@ import redone.Constants; import redone.Server; +import redone.game.content.IronMan; import redone.game.content.combat.prayer.PrayerDrain; import redone.game.content.minigames.castlewars.CastleWars; import redone.game.items.GameItem; @@ -29,6 +30,7 @@ public Dueling(Client Client) { public void requestDuel(int id) { try { + Client o = (Client) PlayerHandler.players[id]; if (id == player.playerId) { return; } @@ -39,6 +41,16 @@ public void requestDuel(int id) { player.getActionSender().sendMessage("You can not stake currently."); return; } + if (IronMan.getMode(player) >= IronMan.IRONMAN_MODE) { + player.getActionSender().sendMessage("You cannot duel as a " + IronMan.getModeName(player) + "."); + resetDuel(); + return; + } + if (IronMan.getMode(o) >= IronMan.IRONMAN_MODE) { + player.getActionSender().sendMessage(o.playerName + " is a " + IronMan.getModeName(o) + " and cannot duel."); + resetDuel(); + return; + } if (!player.inDuelArena()) { player.getActionSender().sendMessage("You must be in the duel arena to do that."); return; @@ -46,7 +58,6 @@ public void requestDuel(int id) { resetDuel(); resetDuelItems(); player.duelingWith = id; - Client o = (Client) PlayerHandler.players[id]; if (o == null) { return; } diff --git a/2006Redone Server/src/redone/game/dialogues/DialogueHandler.java b/2006Redone Server/src/redone/game/dialogues/DialogueHandler.java index e94474900..6ea967f6e 100644 --- a/2006Redone Server/src/redone/game/dialogues/DialogueHandler.java +++ b/2006Redone Server/src/redone/game/dialogues/DialogueHandler.java @@ -5755,7 +5755,7 @@ public void sendDialogues(int dialogue, int npcId) { "Lumbridge Guide or one of the Tutors - these can be found by", "looking for the question mark icon on your mini-map. If you find", "you are lost at any time, look for a signpost."); - player.nextChat = 3116; + player.nextChat = 3514; player.canWalkTutorial = true; break; @@ -6595,10 +6595,39 @@ public void sendDialogues(int dialogue, int npcId) { QuestRewards.blackKnightReward(player); player.nextChat = 0; break; - + case 3514: + sendStatement("Please Choose Your GameMode"); + player.nextChat = 3515; + player.dialogueAction = 3515; + break; + case 3515: + sendOption4("Regular", "IronMan", "Hardcore IronMan", "Ultimate IronMan"); + break; + case 3516: + sendStatement3("You have Chosen Regular Mode.", "Are you sure this is the game mode you want?", "You won't be able to change this later on!"); + player.nextChat = 3520; + player.dialogueAction = 3520; + break; + case 3517: + sendStatement3("You have Chosen IronMan Mode.", "Are you sure this is the game mode you want?", "You won't be able to change this later on!"); + player.nextChat = 3520; + player.dialogueAction = 3520; + break; + case 3518: + sendStatement3("You have Chosen Hardcore IronMan Mode.", "Are you sure this is the game mode you want?", "You won't be able to change this later on!"); + player.nextChat = 3520; + player.dialogueAction = 3520; + break; + case 3519: + sendStatement3("You have Chosen Ultimate IronMan Mode.", "Are you sure this is the game mode you want?", "You won't be able to change this later on!"); + player.nextChat = 3520; + player.dialogueAction = 3520; + break; + case 3520: + sendOption2("Yes", "No, Go back."); + break; } - - } +} public void chatboxText(Client c, String text, String text1, String text2, String text3, String title) { @@ -6723,7 +6752,7 @@ public void sendStatement2(String s, String s1) { public void sendStatement3(String s, String s1, String s2) { player.getPlayerAssistant().sendFrame126(s, 364); player.getPlayerAssistant().sendFrame126(s1, 365); - player.getPlayerAssistant().sendFrame126(s1, 366); + player.getPlayerAssistant().sendFrame126(s2, 366); player.getPlayerAssistant().sendFrame126("Click here to continue", 367); player.getPlayerAssistant().sendChatInterface(363); } diff --git a/2006Redone Server/src/redone/game/items/ItemAssistant.java b/2006Redone Server/src/redone/game/items/ItemAssistant.java index 197059278..afdd5b2cd 100644 --- a/2006Redone Server/src/redone/game/items/ItemAssistant.java +++ b/2006Redone Server/src/redone/game/items/ItemAssistant.java @@ -2,6 +2,7 @@ import redone.Constants; import redone.Server; +import redone.game.content.IronMan; import redone.game.content.minigames.castlewars.CastleWars; import redone.game.items.impl.Weight; import redone.game.npcs.NpcHandler; @@ -2068,6 +2069,10 @@ public boolean bankItem(int itemID, int fromSlot, int amount) { c.otherBank = false; return false; } + if (IronMan.getMode(c) == IronMan.ULTIMATE_IRONMAN) { + c.getActionSender().sendMessage("You cannot bank as a " + IronMan.getModeName(c) + "."); + return false; + } if (c.playerItemsN[fromSlot] <= 0) { return false; } diff --git a/2006Redone Server/src/redone/game/players/Player.java b/2006Redone Server/src/redone/game/players/Player.java index 89ed991bf..e6effefcc 100644 --- a/2006Redone Server/src/redone/game/players/Player.java +++ b/2006Redone Server/src/redone/game/players/Player.java @@ -42,8 +42,7 @@ public abstract class Player { doorDelay, doubleDoorDelay, buySlayerTimer, lastIncrease, boneDelay, botAttempts, leverDelay = 0, farmTime, searchObjectDelay = 0; - - private Npc specialTarget = null; + private Npc specialTarget = null; public void setSpecialTarget(Npc target) { this.specialTarget = target; } @@ -116,7 +115,7 @@ public Npc getSpecialTarget() { teleOtherSlot = -1, tutorialProgress, Cookstage1 = 1, woodcuttingTree, smeltAmount, knightS, otherDirection, brightness = 3, recoilHits, droppedItem = -1, - spawnedHealers, cannonX = 0, cannonY = 0; + spawnedHealers, cannonX = 0, cannonY = 0, ironMan = 0; public Pets getSummon() { return pets; diff --git a/2006Redone Server/src/redone/game/players/PlayerAssistant.java b/2006Redone Server/src/redone/game/players/PlayerAssistant.java index 6fae3cb6e..09c64ea41 100644 --- a/2006Redone Server/src/redone/game/players/PlayerAssistant.java +++ b/2006Redone Server/src/redone/game/players/PlayerAssistant.java @@ -8,6 +8,7 @@ import redone.event.CycleEvent; import redone.event.CycleEventContainer; import redone.event.CycleEventHandler; +import redone.game.content.IronMan; import redone.game.content.combat.magic.MagicData; import redone.game.content.combat.prayer.PrayerDrain; import redone.game.content.combat.range.RangeData; @@ -1432,6 +1433,10 @@ public void openUpBank() { player.isBanking = false; return; } + if (IronMan.getMode(player) == IronMan.ULTIMATE_IRONMAN) { + player.getActionSender().sendMessage("You cannot bank as an " + IronMan.getModeName(player) + "."); + return; + } if (player.inWild()) { player.getActionSender().sendMessage( "You can't open up a bank in the wilderness!"); @@ -1921,6 +1926,17 @@ public void applyDead() { } else if(player.clickedTree == true) { player.clickedTree = false; } + if (IronMan.getMode(player) == IronMan.HC_IRONMAN_MODE) { + IronMan.setMode(player, IronMan.IRONMAN_MODE); + PlayerSave.saveGame(player); + player.getActionSender().sendMessage("You have fallen as a Hardcore IronMan, your Hardcore status has been revoked."); + } + if(IronMan.getMode(player) == IronMan.ULTIMATE_IRONMAN) { + player.getItemAssistant().dropAllItems(); + player.getItemAssistant().deleteAllItems(); + PlayerSave.saveGame(player); + player.getActionSender().sendMessage("You have fallen as a Ultimate IronMan, all your items have been dropped."); + } resetDamageDone(); player.specAmount = 10; player.getItemAssistant().addSpecialBar( diff --git a/2006Redone Server/src/redone/game/players/PlayerSave.java b/2006Redone Server/src/redone/game/players/PlayerSave.java index 8dd778afa..91c4cc6a3 100644 --- a/2006Redone Server/src/redone/game/players/PlayerSave.java +++ b/2006Redone Server/src/redone/game/players/PlayerSave.java @@ -6,6 +6,7 @@ import java.security.NoSuchAlgorithmException; import java.util.Base64; +import redone.game.content.IronMan; import redone.util.Misc; public class PlayerSave { @@ -91,6 +92,9 @@ public static int loadPlayerInfo(Client player, String playerName, String player case "character-rights": player.playerRights = Integer.parseInt(token2); break; + case "ironman": + player.ironMan = Integer.parseInt(token2); + break; case "blackMarks": player.blackMarks = Integer.parseInt(token2); break; @@ -572,6 +576,8 @@ public static boolean saveGame(Client player) { characterfile.write("character-rights = ", 0, 19); characterfile.write(Integer.toString(player.playerRights), 0,Integer.toString(player.playerRights).length()); characterfile.newLine(); + characterfile.write("ironman = " + IronMan.getMode(player)); + characterfile.newLine(); characterfile.write("hasStarter = ", 0, 13); characterfile.write(Boolean.toString(player.hasStarter), 0, Boolean .toString(player.hasStarter).length()); diff --git a/2006Redone Server/src/redone/game/players/Trading.java b/2006Redone Server/src/redone/game/players/Trading.java index 3031ba52f..cb9e72da3 100644 --- a/2006Redone Server/src/redone/game/players/Trading.java +++ b/2006Redone Server/src/redone/game/players/Trading.java @@ -6,6 +6,7 @@ import redone.event.CycleEvent; import redone.event.CycleEventContainer; import redone.event.CycleEventHandler; +import redone.game.content.IronMan; import redone.game.content.minigames.castlewars.CastleWars; import redone.game.items.GameItem; import redone.game.items.Item; @@ -40,6 +41,14 @@ public void requestTrade(int id) { player.getActionSender().sendMessage("If you need to you can type ::amibotting, to see if your botting."); return; } + if (IronMan.getMode(player) >= IronMan.IRONMAN_MODE) { + player.getActionSender().sendMessage("You cannot trade as a " + IronMan.getModeName(player) + "."); + return; + } + if (IronMan.getMode(o) >= IronMan.IRONMAN_MODE) { + player.getActionSender().sendMessage(o.playerName + " is a " + IronMan.getModeName(o) + " they stand alone."); + return; + } /*if (c.connectedFrom.equals(o.connectedFrom)) { c.getActionSender().sendMessage("You cannot trade your own IP."); return; diff --git a/2006Redone Server/src/redone/game/shops/ShopAssistant.java b/2006Redone Server/src/redone/game/shops/ShopAssistant.java index 60f9f0739..dd9b3ead2 100644 --- a/2006Redone Server/src/redone/game/shops/ShopAssistant.java +++ b/2006Redone Server/src/redone/game/shops/ShopAssistant.java @@ -1,6 +1,7 @@ package redone.game.shops; import redone.Constants; +import redone.game.content.IronMan; import redone.game.items.Item; import redone.game.items.ItemAssistant; import redone.game.items.ItemDefinitions; @@ -425,6 +426,11 @@ public boolean addShopItem(int itemID, int amount) { private static final int FISHING_ITEMS[] = {383, 371, 377, 359, 321, 341, 353, 345, 327, 317}; public boolean buyItem(int itemID, int fromSlot, int amount) { + if (IronMan.getMode(player) >= IronMan.IRONMAN_MODE + && ShopHandler.ShopSModifier[player.myShopId] == 1) { + player.getActionSender().sendMessage("You cannot buy from shops players can sell to as a " + IronMan.getModeName(player) + "."); + return false; + } if (amount > 0) { if (amount > ShopHandler.ShopItemsN[player.myShopId][fromSlot]) { amount = ShopHandler.ShopItemsN[player.myShopId][fromSlot]; diff --git a/2006Redone Server/src/redone/net/packets/impl/ClickingButtons.java b/2006Redone Server/src/redone/net/packets/impl/ClickingButtons.java index 15fbd6064..c0a8b6899 100644 --- a/2006Redone Server/src/redone/net/packets/impl/ClickingButtons.java +++ b/2006Redone Server/src/redone/net/packets/impl/ClickingButtons.java @@ -2,6 +2,7 @@ import redone.Constants; import redone.Server; +import redone.game.content.IronMan; import redone.game.content.combat.Specials; import redone.game.content.combat.magic.CastOnOther; import redone.game.content.combat.magic.MagicData; @@ -1508,11 +1509,19 @@ public void processPacket(final Client player, int packetType, int packetSize) { Teles.necklaces(player); return; } + if(player.dialogueAction == 3520) { + player.getDialogueHandler().sendDialogues(3116, player.npcType); + return; + } player.dialogueAction = 0; player.getPlayerAssistant().removeAllWindows(); break; case 9158: + if(player.dialogueAction == 3520) { + player.getDialogueHandler().sendDialogues(3514, player.npcType); + return; + } if (player.dialogueAction == 8) { player.getPlayerAssistant().fixAllBarrows(); } else if (player.dialogueAction == 29) { @@ -1711,6 +1720,10 @@ public void processPacket(final Client player, int packetType, int packetSize) { break; case 9178: + if (player.dialogueAction == 3515) { + IronMan.setMode(player, 0); + player.getDialogueHandler().sendDialogues(3516, player.npcType); + } if (player.dialogueAction == 2) { player.getPlayerAssistant().startTeleport(3428, 3538, 0, "modern"); } @@ -1784,6 +1797,10 @@ public void processPacket(final Client player, int packetType, int packetSize) { break; case 9179: + if (player.dialogueAction == 3515) { + IronMan.setMode(player, IronMan.IRONMAN_MODE); + player.getDialogueHandler().sendDialogues(3517, player.npcType); + } if (player.dialogueAction == 2) { player.getPlayerAssistant().startTeleport(2884, 3395, 0, "modern"); @@ -1854,6 +1871,10 @@ public void processPacket(final Client player, int packetType, int packetSize) { break; case 9180: + if (player.dialogueAction == 3515) { + IronMan.setMode(player, IronMan.HC_IRONMAN_MODE); + player.getDialogueHandler().sendDialogues(3518, player.npcType); + } if (player.dialogueAction == 2) { player.getPlayerAssistant().startTeleport(2471, 10137, 0, "modern"); @@ -1927,6 +1948,10 @@ public void processPacket(final Client player, int packetType, int packetSize) { break; case 9181: + if (player.dialogueAction == 3515) { + IronMan.setMode(player, IronMan.ULTIMATE_IRONMAN); + player.getDialogueHandler().sendDialogues(3519, player.npcType); + } if (player.dialogueAction == 2) { player.getPlayerAssistant().startTeleport(2669, 3714, 0, "modern"); } diff --git a/2006Redone Server/src/redone/world/ItemHandler.java b/2006Redone Server/src/redone/world/ItemHandler.java index 233ad624d..16d843498 100644 --- a/2006Redone Server/src/redone/world/ItemHandler.java +++ b/2006Redone Server/src/redone/world/ItemHandler.java @@ -10,6 +10,7 @@ import java.util.Scanner; import redone.Constants; +import redone.game.content.IronMan; import redone.game.items.GroundItem; import redone.game.items.ItemAssistant; import redone.game.items.ItemList; @@ -228,6 +229,11 @@ public void removeGroundItem(Client c, int itemId, int itemX, int itemY, boolean for (GroundItem i : items) { if (i.getItemId() == itemId && i.getItemX() == itemX && i.getItemY() == itemY) { + if (IronMan.getMode(c) >= IronMan.IRONMAN_MODE + && !i.getName().equalsIgnoreCase(c.playerName)) { + c.getActionSender().sendMessage("You can only pick up your own drops and items as a " + IronMan.getModeName(c) + "."); + return; + } if (i.hideTicks > 0 && i.getName().equalsIgnoreCase(c.playerName)) { if (add) {