diff --git a/2006Redone Server/src/redone/game/content/skills/core/Mining.java b/2006Redone Server/src/redone/game/content/skills/core/Mining.java index 2634f377..9833001f 100644 --- a/2006Redone Server/src/redone/game/content/skills/core/Mining.java +++ b/2006Redone Server/src/redone/game/content/skills/core/Mining.java @@ -17,66 +17,126 @@ public class Mining { {1271, 31, 5, 629}, //Addy {1273, 21, 4, 628}, //Mithril {1275, 41, 6, 624}, //Rune + }; - }; - - public final int[][] Rock_Settings = { - {2091, 1, 18, 3, 436}, //Copper - {2095, 1, 18, 3, 438}, //Tin - {2093, 15, 35, 7, 440}, //Iron - {2097, 30, 50, 38, 453}, //Coal - {2103, 55, 80, 155, 447}, //Mithril - {2105, 70, 95, 315, 449}, //Addy - {2107, 85, 125, 970, 451}, //Rune - {2090, 1, 18, 3, 436}, //Copper - {2094, 1, 18, 3, 438}, //Tin - {2092, 15, 35, 7, 440}, //Iron - {2096, 30, 50, 38, 453}, //Coal - {2102, 55, 80, 155, 447}, //Mithril - {2104, 70, 95, 315, 449}, //Addy - {2106, 85, 125, 970, 451}, //Rune - {2100, 20, 40, 78, 442}, //Silver - {2101, 20, 40, 78, 442}, //Silver - {2098, 40, 65, 78, 444}, //Gold - {2099, 40, 65, 78, 444}, //Gold - {3042, 1, 18, 3, 436}, //Copper - {3043, 1, 18, 3, 438}, //Tin - {2109, 1, 18, 3, 434}, //Clay - {2108, 1, 18, 3, 434}, //Clay - {2491, 1, 5, 0, 1436}, // Rune Essence - {2491, 30, 5, 0, 7936}, // Pure Rune Essence - }; - - public int getRandomAdd() { - int random = 0; - for (int i = 0; i < Rock_Settings.length; i++) { - if (Rock_Settings[i][3] == 3) { - random = Misc.random(3); - } else if (Rock_Settings[i][3] == 7) { - random = Misc.random(7); - } else if (Rock_Settings[i][3] == 38) { - random = Misc.random(38); - } else if (Rock_Settings[i][3] == 78) { - random = Misc.random(78); - } else if (Rock_Settings[i][3] == 155) { - random = Misc.random(155); - } else if (Rock_Settings[i][3] == 315) { - random = Misc.random(315); - } else if (Rock_Settings[i][3] == 970) { - random = Misc.random(970); - } + public static enum gems { + OPAL(1625, 60), + JADE(1627, 30), + RED_TOPAZ(1629, 15), + SAPHIRE(1623, 9), + EMERALD(1621, 5), + RUBY(1619, 5), + DIAMOND(1617, 4); + + public final int itemID; + public final int chance; + + gems(int itemID, int chance){ + this.itemID = itemID; + this.chance = chance; + } + + + public static int getRandom(){ + final int maxChance = 128; + int random = (int) Math.floor(Math.random() * maxChance); + int index = 0; + for (gems gem: gems.values()){ + index += gem.chance; + if (index >= random) + return gem.itemID; + } + return gems.OPAL.itemID; + } + } + + public static enum rockData { + ESSENCE(new int[] { 2491 }, 1, 5, 2, 0, new int[] { 1436, 7936 }), + CLAY(new int[] { 2108, 2109, 11189, 11190, 11191, 9713, 9711, 14905, 14904 }, 1, 5, 1, 2, new int[] { 434 }), + COPPER(new int[] { 3042, 2091, 2090, 9708, 9709, 9710, 11960, 14906, 14907 }, 1, 18, 1, 4, new int[] { 436 }), + TIN(new int[] { 2094, 2095, 3043, 9716, 9714, 11958, 11957, 11959, 11933, 11934, 11935, 14903, 14902 }, 1, 18, 1, 4, new int[] { 438 }), + BLURITE(new int[] { 10574, 10583, 2110 }, 10, 20, 1, 42, new int[] { 668 }), + IRON(new int[] { 2093, 2092, 9717, 9718, 9719, 11962, 11956, 11954, 14856, 14857, 14858, 14914, 14913 }, 15, 35, 2, 9, new int[] { 440 }), + SILVER(new int[] { 2101, 11186, 11187, 11188, 2100 }, 20, 40, 3, 100, new int[] { 442 }), + COAL(new int[] { 2096, 2097, 11963, 11964, 14850, 14851, 14852, 11930, 11931 }, 30, 50, 4, 50, new int[] { 453 }), + GOLD(new int[] { 2099, 2098, 11183, 11184, 11185, 9720, 9722 }, 40, 65, 6, 100, new int[] { 444 }), + MITHRIL(new int[] { 2103, 2102, 14853, 14854, 14855 }, 55, 80, 8, 200, new int[] { 447 }), + ADAMANT(new int[] { 2104, 2105, 14862, 14863, 14864 }, 70, 95, 10, 400, new int[] { 449 }), + RUNE(new int[] { 14859, 14860, 2106, 2107 }, 85, 125, 20, 1200, new int[] { 451 }), + GRANITE(new int[] { 10947 }, 45, 75, 10, 8, new int[] { 6979, 6981, 6983 }), + SANDSTONE(new int[] { 10946 }, 35, 60, 5, 8, new int[] { 6971, 6973, 6975, 6977 }), + GEM(new int[] {2111}, 40, 65, 6, 175, new int[] {}); + + private final int levelReq, mineTimer, respawnTimer, xp; + private final int[] oreIds; + private final int[] objectId; + + private rockData(final int[] objectId, final int levelReq, final int xp, final int mineTimer, final int respawnTimer, final int... oreIds) { + this.objectId = objectId; + this.levelReq = levelReq; + this.xp = xp; + this.mineTimer = mineTimer; + this.respawnTimer = respawnTimer; + this.oreIds = oreIds; + } + + public int getObject(final int object) { + for (int element : objectId) { + if (object == element) { + return element; + } + } + return -1; + } + + public static rockData getRock(final int object) { + for (final rockData rock : rockData.values()) { + if (object == rock.getObject(object)) { + return rock; + } + } + return null; + } + + public int getRequiredLevel() { + return levelReq; + } + + public int getXp() { + return xp; + } + + public int getTimer() { + return mineTimer; + } + + public int getRespawnTimer() { + return respawnTimer; + } + + public int[] getOreIds() { + return oreIds; + } + + public int getOre(int playerLevel){ + if (this == this.ESSENCE) + return playerLevel < 30 ? oreIds[0] : oreIds[1]; + if (this == this.GEM) + return gems.getRandom(); + + // return a random ore from the possibilities + return oreIds[(int) Math.floor(Math.random() * oreIds.length)]; } - return random; } - int a = -1; + int pickaxe = -1; public void repeatAnimation(final Client c) { CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { @Override public void execute(CycleEventContainer container) { if (c.isMining) { - c.startAnimation(Pick_Settings[a][3]); + c.startAnimation(Pick_Settings[pickaxe][3]); } else { container.stop(); } @@ -90,26 +150,27 @@ public class Mining { }, 3); } - public void startMining(final Client player, final int objectNumber, final int objectX, final int objectY, final int type) { - if (player.isMining) - return; - if (player.miningRock) - return; + public void startMining(final Client player, final int objectID, final int objectX, final int objectY, final int type) { + if (player.isMining || player.miningRock) return; + int miningLevel = player.playerLevel[player.playerMining]; - a = -1; + rockData rock = rockData.getRock(objectID); + pickaxe = -1; player.turnPlayerTo(objectX, objectY); - if (Rock_Settings[objectNumber][1] > miningLevel) { - player.getActionSender().sendMessage("You need a Mining level of " + Rock_Settings[objectNumber][1] + " to mine this rock."); + // check if the player has required level for this rock + if (rock.getRequiredLevel() > miningLevel) { + player.getActionSender().sendMessage("You need a Mining level of " + rock.getRequiredLevel() + " to mine this rock."); return; } + // check id the player has a pickaxe they can use on them for (int i = 0; i < Pick_Settings.length; i++) { if (player.getItemAssistant().playerHasItem(Pick_Settings[i][0]) || player.playerEquipment[player.playerWeapon] == Pick_Settings[i][0]) { if (Pick_Settings[i][1] <= miningLevel) { - a = i; + pickaxe = i; } } } - if (a == -1) { + if (pickaxe == -1) { player.getActionSender().sendMessage("You need a pickaxe to mine this rock."); return; } @@ -117,12 +178,15 @@ public class Mining { player.getActionSender().sendMessage("You do not have enough inventory slots to do that."); return; } - player.startAnimation(Pick_Settings[a][3]); + + player.startAnimation(Pick_Settings[pickaxe][3]); player.isMining = true; repeatAnimation(player); player.rockX = objectX; player.rockY = objectY; player.miningRock = true; + + // Tutorial only stuff if (player.tutorialProgress == 17 || player.tutorialProgress == 18) { player.getActionSender().chatbox(6180); player.getDialogueHandler().chatboxText(player, "", "Your character is now attempting to mine the rock.", "This should only take a few seconds.", "", "Please wait"); @@ -130,21 +194,23 @@ public class Mining { } else { player.getActionSender().sendMessage("You swing your pick at the rock."); } + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { @Override public void execute(CycleEventContainer container) { + int oreID = rock.getOre(miningLevel); if (!player.isMining) { container.stop(); player.startAnimation(65535); return; } if (player.isMining) { - player.getItemAssistant().addItem(Rock_Settings[objectNumber][4], 1); - player.getPlayerAssistant().addSkillXP(Rock_Settings[objectNumber][2], player.playerMining); - player.getActionSender().sendMessage("You manage to mine some " + ItemAssistant.getItemName(Rock_Settings[objectNumber][4]).toLowerCase() + "."); + player.getItemAssistant().addItem(oreID, 1); + player.getPlayerAssistant().addSkillXP(rock.getXp(), player.playerMining); + player.getActionSender().sendMessage("You manage to mine some " + ItemAssistant.getItemName(oreID).toLowerCase() + "."); } if (player.tutorialProgress == 17) { - if (objectNumber == 18) { + if (rock != rockData.TIN) { player.getDialogueHandler().sendStatement("You should mine tin first."); resetMining(player); return; @@ -155,7 +221,7 @@ public class Mining { player.tutorialProgress = 18; } } else if (player.tutorialProgress == 18) { - if (objectNumber == 19) { + if (rock != rockData.COPPER) { player.getDialogueHandler().sendStatement("You have already mined this type of ore, now try the other."); resetMining(player); return; @@ -169,10 +235,10 @@ public class Mining { player.getActionSender().sendMessage("You have ran out of inventory slots."); container.stop(); } - mineRock(Rock_Settings[objectNumber][3] + getRandomAdd(), objectX, objectY, type, Rock_Settings[objectNumber][0]); + mineRock(rock.getRespawnTimer(), objectX, objectY, type, objectID); container.stop(); - if (objectNumber == 22 || objectNumber == 23) - startMining(player, objectNumber, objectX, objectY, type); + if (rock == rockData.ESSENCE) + startMining(player, objectID, objectX, objectY, type); } @Override public void stop() { @@ -184,7 +250,7 @@ public class Mining { player.miningRock = false; return; } - }, getTimer(objectNumber, a, miningLevel)); + }, getTimer(rock, pickaxe, miningLevel)); } public static void resetMining(Client c) { @@ -196,8 +262,8 @@ public class Mining { c.miningRock = false; } - public int getTimer(int b, int c, int level) { - double timer = (int)((Rock_Settings[b][1] * 2) + 20 + Misc.random(20))-((Pick_Settings[c][2] * (Pick_Settings[c][2] * 0.75)) + level); + public int getTimer(rockData rock, int pick, int level) { + double timer = (int)((rock.getRequiredLevel() * 2) + 20 + Misc.random(20))-((Pick_Settings[pick][2] * (Pick_Settings[pick][2] * 0.75)) + level); if (timer < 2.0) { return 2; } else { @@ -316,74 +382,13 @@ public class Mining { }, 2); } - public static enum rockData { - ESSENCE(new int[] { 2491 }, 1, 5, 3, 1, new int[] { 1436 }), - CLAY(new int[] { 2108, 2109, 11189, 11190, 11191, 9713, 9711, 14905, 14904 }, 1, 5, 1, 5, new int[] { 434 }), - COPPER(new int[] { 3042, 2091, 2090, 9708, 9709, 9710, 11960, 14906, 14907 }, 1, 18, 1, 8, new int[] { 436 }), - TIN(new int[] { 2094, 2095, 3043, 9716, 9714, 11958, 11957, 11959, 11933, 11934, 11935, 14903, 14902 }, 1, 18, 1, 8, new int[] { 438 }), - BLURITE(new int[] { 10574, 10583, 2110 }, 10, 20, 1, 8, new int[] { 668 }), - IRON(new int[] { 2093, 2092, 9717, 9718, 9719, 11962, 11956, 11954, 14856, 14857, 14858, 14914, 14913 }, 15, 35, 2, 5, new int[] { 440 }), - SILVER(new int[] { 2101, 11186, 11187, 11188, 2100 }, 20, 40, 3, 20, new int[] { 442 }), - COAL(new int[] { 2096, 2097, 11963, 11964, 14850, 14851, 14852, 11930, 11931 }, 30, 50, 4, 25, new int[] { 453 }), - GOLD(new int[] { 2099, 2098, 11183, 11184, 11185, 9720, 9722 }, 40, 65, 6, 33, new int[] { 444 }), - MITHRIL(new int[] { 2103, 2102, 14853, 14854, 14855 }, 55, 80, 8, 50, new int[] { 447 }), - ADAMANT(new int[] { 2104, 2105, 14862, 14863, 14864 }, 70, 95, 10, 83, new int[] { 449 }), - RUNE(new int[] { 14859, 14860, 2106, 2107 }, 85, 125, 20, 166, new int[] { 451 }), - GRANITE(new int[] { 10947 }, 45, 75, 10, 10, new int[] { 6979, 6981, 6983 }), - SANDSTONE(new int[] { 10946 }, 35, 60, 5, 5, new int[] { 6971, 6973, 6975, 6977 }), - GEM(new int[] {2111}, 40, 65, 6, 120, new int[] {1}); - - private final int levelReq, mineTimer, respawnTimer, xp; - private final int[] oreIds; - private final int[] objectId; - - private rockData(final int[] objectId, final int levelReq, final int xp, final int mineTimer, final int respawnTimer, final int... oreIds) { - this.objectId = objectId; - this.levelReq = levelReq; - this.xp = xp; - this.mineTimer = mineTimer; - this.respawnTimer = respawnTimer; - this.oreIds = oreIds; - } - - public int getObject(final int object) { - for (int element : objectId) { - if (object == element) { - return element; - } - } - return -1; - } - - public int getLevel() { - return levelReq; - } - - public int getXp() { - return xp; - } - - public int getTimer() { - return mineTimer; - } - - public int getResapwn() { - return respawnTimer; - } - - public int[] getOreIds() { - return oreIds; - } - } - - public static boolean rockExists(Client c, int rockExist) { - boolean rockExists = false; - for (final rockData a : rockData.values()) { - if (rockExist == a.getObject(rockExist)) { - rockExists = true; + public static boolean rockExists(int rockID) { + for (final rockData rock : rockData.values()) { + if (rockID == rock.getObject(rockID)) { + return true; } } - return rockExists; + return false; } } diff --git a/2006Redone Server/src/redone/game/objects/ObjectsActions.java b/2006Redone Server/src/redone/game/objects/ObjectsActions.java index 7326a055..5cbd1ddb 100644 --- a/2006Redone Server/src/redone/game/objects/ObjectsActions.java +++ b/2006Redone Server/src/redone/game/objects/ObjectsActions.java @@ -117,84 +117,13 @@ public class ObjectsActions { SingleGates.useSingleGate(player, objectType); DoubleGates.useDoubleGate(player, objectType); PassDoor.processDoor(player, objectType); + // if its a rock we can mine, mine it + if (Mining.rockExists(objectType)) + player.getMining().startMining(player, objectType, player.objectX, player.objectY, player.clickObjectType); switch (objectType) { case 6: player.getCannon().clickCannon(objectX, objectY); break; - case 2091: - player.getMining().startMining(player, 0, player.objectX, player.objectY, player.clickObjectType); - break; - case 2095: - player.getMining().startMining(player, 1, player.objectX, player.objectY, player.clickObjectType); - break; - case 2093: - player.getMining().startMining(player, 2, player.objectX, player.objectY, player.clickObjectType); - break; - case 2097: - player.getMining().startMining(player, 3, player.objectX, player.objectY, player.clickObjectType); - break; - case 2103: - player.getMining().startMining(player, 4, player.objectX, player.objectY, player.clickObjectType); - break; - case 2105: - player.getMining().startMining(player, 5, player.objectX, player.objectY, player.clickObjectType); - break; - case 2107: - player.getMining().startMining(player, 6, player.objectX, player.objectY, player.clickObjectType); - break; - case 2090: - player.getMining().startMining(player, 7, player.objectX, player.objectY, player.clickObjectType); - break; - case 2094: - player.getMining().startMining(player, 8, player.objectX, player.objectY, player.clickObjectType); - break; - case 2092: - player.getMining().startMining(player, 9, player.objectX, player.objectY, player.clickObjectType); - break; - case 2096: - player.getMining().startMining(player, 10, player.objectX, player.objectY, player.clickObjectType); - break; - case 2102: - player.getMining().startMining(player, 11, player.objectX, player.objectY, player.clickObjectType); - break; - case 2104: - player.getMining().startMining(player, 12, player.objectX, player.objectY, player.clickObjectType); - break; - case 2106: - player.getMining().startMining(player, 13, player.objectX, player.objectY, player.clickObjectType); - break; - case 2100: - player.getMining().startMining(player, 14, player.objectX, player.objectY, player.clickObjectType); - break; - case 2101: - player.getMining().startMining(player, 15, player.objectX, player.objectY, player.clickObjectType); - break; - case 2109: - case 2108: - if (objectType == 2109) - player.getMining().startMining(player, 20, player.objectX, player.objectY, player.clickObjectType); - if (objectType == 2108) - player.getMining().startMining(player, 21, player.objectX, player.objectY, player.clickObjectType); - break; - case 2098: - player.getMining().startMining(player, 16, player.objectX, player.objectY, player.clickObjectType); - break; - case 2099: - player.getMining().startMining(player, 17, player.objectX, player.objectY, player.clickObjectType); - break; - case 3042: - player.getMining().startMining(player, 18, player.objectX, player.objectY, player.clickObjectType); - break; - case 3043: - player.getMining().startMining(player, 19, player.objectX, player.objectY, player.clickObjectType); - break; - case 2491: - if (player.playerLevel[player.playerMining] < 30) - player.getMining().startMining(player, 22, player.objectX, player.objectY, player.clickObjectType); - else - player.getMining().startMining(player, 23, player.objectX, player.objectY, player.clickObjectType); - break; - case 6702: case 6703: case 6704: diff --git a/2006Redone Server/src/redone/net/packets/impl/ClickObject.java b/2006Redone Server/src/redone/net/packets/impl/ClickObject.java index afd8e75e..e2524241 100644 --- a/2006Redone Server/src/redone/net/packets/impl/ClickObject.java +++ b/2006Redone Server/src/redone/net/packets/impl/ClickObject.java @@ -62,7 +62,7 @@ public class ClickObject implements PacketType { player.resetWalkingQueue(); break; } - if (Mining.rockExists(player, player.objectId)) { + if (Mining.rockExists(player.objectId)) { player.objectDistance = 5; } if (Woodcutting.playerTrees(player, player.objectId)) { diff --git a/2006Redone Server/src/redone/world/ObjectHandler.java b/2006Redone Server/src/redone/world/ObjectHandler.java index 18d6e284..51195e47 100644 --- a/2006Redone Server/src/redone/world/ObjectHandler.java +++ b/2006Redone Server/src/redone/world/ObjectHandler.java @@ -121,11 +121,11 @@ public class ObjectHandler { for (Objects o : globalObjects) { if (c != null) { if (c.heightLevel == 0 && o.objectTicks == 0 && c.distanceToPoint(o.getObjectX(), o.getObjectY()) <= 60) { - if (Woodcutting.playerTrees(c, o.getObjectId()) || Mining.rockExists(c, o.getObjectId())) { + if (Woodcutting.playerTrees(c, o.getObjectId()) || Mining.rockExists(o.getObjectId())) { c.getActionSender().object(o.getObjectId(), o.getObjectX(), o.getObjectY(), 0, o.getObjectFace(), o.getObjectType()); } } - if (c.heightLevel == o.getObjectHeight() && !Woodcutting.playerTrees(c, o.getObjectId()) && !Mining.rockExists(c, o.getObjectId()) && o.objectTicks == 0 && c.distanceToPoint(o.getObjectX(), o.getObjectY()) <= 60) { + if (c.heightLevel == o.getObjectHeight() && !Woodcutting.playerTrees(c, o.getObjectId()) && !Mining.rockExists(o.getObjectId()) && o.objectTicks == 0 && c.distanceToPoint(o.getObjectX(), o.getObjectY()) <= 60) { c.getActionSender().object(o.getObjectId(), o.getObjectX(), o.getObjectY(), c.heightLevel, o.getObjectFace(), o.getObjectType()); } }