diff --git a/2006Scape Server/src/main/java/com/rs2/game/content/combat/magic/Enchanting.java b/2006Scape Server/src/main/java/com/rs2/game/content/combat/magic/Enchanting.java index 73c995a3..3c4f2310 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/content/combat/magic/Enchanting.java +++ b/2006Scape Server/src/main/java/com/rs2/game/content/combat/magic/Enchanting.java @@ -16,42 +16,35 @@ public class Enchanting { public enum Enchant { - SAPPHIRERING(1637, 2550, 7, 18, 719, 114, 1), SAPPHIREAMULET(1694, - 1727, 7, 18, 719, 114, 1), SAPPHIRENECKLACE(1656, 3853, 7, 18, - 719, 114, 1), + SAPPHIRERING(1637, 2550, 1), + SAPPHIREAMULET(1694, 1727, 1), + SAPPHIRENECKLACE(1656, 3853, 1), - EMERALDRING(1639, 2552, 27, 37, 719, 114, 2), EMERALDAMULET(1696, 1729, - 27, 37, 719, 114, 2), EMERALDNECKLACE(1658, 5521, 27, 37, 719, - 114, 2), + EMERALDRING(1639, 2552, 2), + EMERALDAMULET(1696, 1729, 2), + EMERALDNECKLACE(1658, 5521, 2), - RUBYRING(1641, 2568, 47, 59, 720, 115, 3), RUBYAMULET(1698, 1725, 47, - 59, 720, 115, 3), + RUBYRING(1641, 2568, 3), + RUBYAMULET(1698, 1725, 3), // RUBYNECKLACE(1660, 11194, 47, 59, 720, 115, 3), - DIAMONDRING(1643, 2570, 57, 67, 720, 115, 4), DIAMONDAMULET(1700, 1731, - 57, 67, 720, 115, 4), + DIAMONDRING(1643, 2570, 4), + DIAMONDAMULET(1700, 1731, 4), // DIAMONDNECKLACE(1662, 11090, 57, 67, 720, 115, 4), - DRAGONSTONERING(1645, 2572, 68, 78, 721, 116, 5), - DRAGONSTONEAMULET(1702, 1704, 68, 78, 721, 116, 5), + DRAGONSTONERING(1645, 2572, 5), + DRAGONSTONEAMULET(1702, 1704, 5), // DRAGONSTONENECKLACE(1664, 11105, 68, 78, 721, 116, 5), - ONYXRING(6575, 6583, 87, 97, 721, 452, 6), ONYXAMULET(6581, 6585, 87, - 97, 721, 452, 6); - + ONYXRING(6575, 6583, 6), + ONYXAMULET(6581, 6585, 6); // ONYXNECKLACE(6577, 11128, 87, 97, 721, 452, 6) - int unenchanted, enchanted, levelReq, xpGiven, anim, gfx, - reqEnchantmentLevel; + int unenchanted, enchanted, reqEnchantmentLevel; - private Enchant(int unenchanted, int enchanted, int levelReq, - int xpGiven, int anim, int gfx, int reqEnchantmentLevel) { + private Enchant(int unenchanted, int enchanted, int reqEnchantmentLevel) { this.unenchanted = unenchanted; this.enchanted = enchanted; - this.levelReq = levelReq; - this.xpGiven = xpGiven; - this.anim = anim; - this.gfx = gfx; this.reqEnchantmentLevel = reqEnchantmentLevel; } @@ -63,22 +56,6 @@ public class Enchanting { return enchanted; } - public int getLevelReq() { - return levelReq; - } - - public int getXp() { - return xpGiven; - } - - public int getAnim() { - return anim; - } - - public int getGFX() { - return gfx; - } - public int getELevel() { return reqEnchantmentLevel; } @@ -96,20 +73,34 @@ public class Enchanting { } } - private enum EnchantSpell { - SAPPHIRE(1155, 555, 1, 564, 1, -1, 0), - EMERALD(1165, 556, 3, 564, 1, -1, 0), - RUBY(1176, 554, 5, 564, 1, -1, 0), - DIAMOND(1180, 557, 10, 564, 1, -1, 0), - DRAGONSTONE(1187, 555, 15, 557, 15, 564, 1), - ONYX(6003, 557, 20, 554, 20, 564, 1); + public static enum EnchantSpell { + SAPPHIRE(1155, 7, 18, 719, 114, 1, + 555, 1, 564, 1, -1, 0), + EMERALD(1165, 27, 37, 719, 114, 2, + 556, 3, 564, 1, -1, 0), + RUBY(1176, 47, 59, 720, 115, 3, + 554, 5, 564, 1, -1, 0), + DIAMOND(1180, 57, 67, 720, 115, 4, + 557, 10, 564, 1, -1, 0), + DRAGONSTONE(1187, 68, 78, 721, 116, 5, + 555, 15, 557, 15, 564, 1), + ONYX(6003, 87, 97, 721, 452, 6, + 557, 20, 554, 20, 564, 1); - int spell, reqRune1, reqAmtRune1, reqRune2, reqAmtRune2, reqRune3, - reqAmtRune3; + int spell, levelReq, xp, anim, gfx, enchantmentLevel; + int reqRune1, reqAmtRune1, reqRune2, reqAmtRune2, reqRune3, reqAmtRune3; - private EnchantSpell(int spell, int reqRune1, int reqAmtRune1, - int reqRune2, int reqAmtRune2, int reqRune3, int reqAmtRune3) { + private EnchantSpell(int spell, int levelReq, int xp, int anim, int gfx, int enchantmentLevel, + int reqRune1, int reqAmtRune1, + int reqRune2, int reqAmtRune2, + int reqRune3, int reqAmtRune3 + ) { this.spell = spell; + this.levelReq = levelReq; + this.xp = xp; + this.anim = anim; + this.gfx = gfx; + this.enchantmentLevel = enchantmentLevel; this.reqRune1 = reqRune1; this.reqAmtRune1 = reqAmtRune1; this.reqRune2 = reqRune2; @@ -122,6 +113,26 @@ public class Enchanting { return spell; } + public int getLevelReq() { + return levelReq; + } + + public int getXp() { + return xp; + } + + public int getAnim() { + return anim; + } + + public int getGFX() { + return gfx; + } + + public int getELevel() { + return enchantmentLevel; + } + public int getReq1() { return reqRune1; } @@ -177,7 +188,7 @@ public class Enchanting { return 0; } - private int[][] getRequiredRunes(EnchantSpell ens){ + public int[][] getRequiredRunes(EnchantSpell ens){ if (ens.getReq3() > 0) { return new int[][] { {ens.getReq1(),ens.getReqAmt1()}, @@ -198,10 +209,10 @@ public class Enchanting { if (enc == null || ens == null) { return; } - if (c.playerLevel[GameConstants.MAGIC] < enc.getLevelReq()) { + if (c.playerLevel[GameConstants.MAGIC] < ens.getLevelReq()) { c.getPacketSender().sendMessage( "You need a magic level of at least " - + enc.getLevelReq() + " to cast this spell."); + + ens.getLevelReq() + " to cast this spell."); return; } if (!c.getItemAssistant().playerHasItem(enc.getUnenchanted(), 1)) { @@ -219,10 +230,10 @@ public class Enchanting { } // Everything is fine, Enchant the item c.getItemAssistant().replaceItem(enc.getUnenchanted(), enc.getEnchanted()); - c.getPlayerAssistant().addSkillXP(enc.getXp(), GameConstants.MAGIC); + c.getPlayerAssistant().addSkillXP(ens.getXp(), GameConstants.MAGIC); CastRequirements.deleteRunes(c, getRequiredRunes(ens)); - c.startAnimation(enc.getAnim()); - c.gfx100(enc.getGFX()); + c.startAnimation(ens.getAnim()); + c.gfx100(ens.getGFX()); c.getPacketSender().sendShowTab(6); } } diff --git a/2006Scape Server/src/main/java/com/rs2/game/content/combat/magic/MagicRequirements.java b/2006Scape Server/src/main/java/com/rs2/game/content/combat/magic/MagicRequirements.java index efb6845b..854be403 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/content/combat/magic/MagicRequirements.java +++ b/2006Scape Server/src/main/java/com/rs2/game/content/combat/magic/MagicRequirements.java @@ -35,8 +35,12 @@ public class MagicRequirements { } public static boolean checkMagicReqs(Player c, int spell) { + return checkMagicReqs(c, spell, true); + } + + public static boolean checkMagicReqs(Player c, int spell, boolean runesRequired) { int[] spellData = MagicData.MAGIC_SPELLS[spell]; - if (c.usingMagic && MagicTeleports.RUNES_REQUIRED) { // check for runes + if (c.usingMagic && runesRequired) { // check for runes if ( !c.getItemAssistant().playerHasItem(spellData[8], spellData[9]) && !wearingStaff(c, spellData[8]) || !c.getItemAssistant().playerHasItem(spellData[10], spellData[11]) && !wearingStaff(c, spellData[10]) @@ -77,7 +81,7 @@ public class MagicRequirements { } int staffRequired = getStaffNeeded(c); - if (c.usingMagic && staffRequired > 0 && MagicTeleports.RUNES_REQUIRED) { // staff + if (c.usingMagic && staffRequired > 0 && runesRequired) { // staff // required if (c.playerEquipment[c.playerWeapon] != staffRequired) { c.getPacketSender() @@ -90,7 +94,7 @@ public class MagicRequirements { } } - if (c.usingMagic && MagicTeleports.MAGIC_LEVEL_REQUIRED) { // check magic level + if (c.usingMagic) { // check magic level if (c.playerLevel[GameConstants.MAGIC] < MagicData.MAGIC_SPELLS[spell][1]) { c.getPacketSender().sendMessage( "You need to have a magic level of " @@ -99,7 +103,7 @@ public class MagicRequirements { return false; } } - if (c.usingMagic && MagicTeleports.RUNES_REQUIRED) { + if (c.usingMagic && runesRequired) { if (MagicData.MAGIC_SPELLS[spell][8] > 0) { // deleting runes if (!wearingStaff(c, MagicData.MAGIC_SPELLS[spell][8])) { c.getItemAssistant().deleteItem( diff --git a/2006Scape Server/src/main/java/com/rs2/game/content/combat/magic/MagicTeleports.java b/2006Scape Server/src/main/java/com/rs2/game/content/combat/magic/MagicTeleports.java index 106c0725..3976c016 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/content/combat/magic/MagicTeleports.java +++ b/2006Scape Server/src/main/java/com/rs2/game/content/combat/magic/MagicTeleports.java @@ -19,8 +19,6 @@ public class MagicTeleports { player.getPacketSender().sendString("Level 78: Dareeyak Teleport", 13071); } - public static final boolean MAGIC_LEVEL_REQUIRED = true, RUNES_REQUIRED = true; - public static void handleSpellTeleport(Player player, SpellTeleport teleport) { if (player.teleTimer > 0) { return; diff --git a/2006Scape Server/src/main/java/com/rs2/game/content/minigames/magetrainingarena/Alchemy.java b/2006Scape Server/src/main/java/com/rs2/game/content/minigames/magetrainingarena/Alchemy.java index 8d051811..2054ac73 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/content/minigames/magetrainingarena/Alchemy.java +++ b/2006Scape Server/src/main/java/com/rs2/game/content/minigames/magetrainingarena/Alchemy.java @@ -4,6 +4,7 @@ import java.util.Random; import com.rs2.GameConstants; import com.rs2.game.content.combat.magic.MagicData; +import com.rs2.game.content.combat.magic.MagicRequirements; import com.rs2.game.content.music.sound.SoundList; import com.rs2.game.npcs.NpcHandler; import com.rs2.game.players.Player; @@ -43,6 +44,10 @@ public class Alchemy { player.getPacketSender().sendMessage("You cannot alch that item while here."); return; } + // Check player has requirements for this spell + if (!MagicRequirements.checkMagicReqs(player, spellID == 1162 ? 49 : 50, index != freeAlch)) { + return; + } int value = values[(index + valueOffset) % values.length]; player.getItemAssistant().deleteItem(itemID, 1); player.getItemAssistant().addItem(995, value); @@ -55,7 +60,6 @@ public class Alchemy { } else if (spellID == 1178) { player.startAnimation(MagicData.MAGIC_SPELLS[50][2]); player.gfx100(MagicData.MAGIC_SPELLS[50][3]); - player.alchDelay = System.currentTimeMillis(); player.getPlayerAssistant().addSkillXP(65, 6); player.getPacketSender().sendSound(SoundList.HIGH_ALCHEMY, 100, 0); } @@ -72,7 +76,6 @@ public class Alchemy { int points = (int) Math.floor(coins / 100); int bonusExp = coins * 2; int toBank = points * 10; - player.getPacketSender().sendMessage("Coins: " + coins + ", Points: " + points + ", Banked: " + toBank + ", EXP: " + bonusExp); player.getItemAssistant().deleteItem(995, coins); player.alchemyPoints += points; player.getItemAssistant().addItemToBank(995, toBank); @@ -98,6 +101,7 @@ public class Alchemy { public static int ticks = 0; public static int offset = 0; public static int valueOffset = 0; + public static int freeAlch = 0; public static int firstCupboard = 10783; private static Random random = new Random(); @@ -115,22 +119,23 @@ public class Alchemy { } updateInterface(p); } - if (++ticks < 71) { - return; - } - ticks = 0; - offset = random.nextInt(items.length); - valueOffset = random.nextInt(values.length); - for (int i = 0; i < NpcHandler.MAX_NPCS; i ++) { - if (NpcHandler.npcs[i] != null && NpcHandler.npcs[i].npcType == 3099) { - NpcHandler.npcs[i].forceChat("Items are changing!"); + // Every 71 ticks, randomize the order and such + if (++ticks % 71 == 0) { + offset = random.nextInt(items.length); + valueOffset = random.nextInt(values.length); + // 1 in 4 chance of an item being free to alch + freeAlch = random.nextInt(values.length * 4); + for (int i = 0; i < NpcHandler.MAX_NPCS; i ++) { + if (NpcHandler.npcs[i] != null && NpcHandler.npcs[i].npcType == 3099) { + NpcHandler.npcs[i].forceChat("Items are changing!"); + } } - } - for (Player p : PlayerHandler.players) { - if (p == null) { - continue; + for (Player p : PlayerHandler.players) { + if (p == null) { + continue; + } + updateInterface(p); } - updateInterface(p); } } @@ -141,6 +146,8 @@ public class Alchemy { int startInterface = 15902; for (int i = 0; i < values.length; i++) { player.getPacketSender().sendString("" + values[(i + valueOffset) % values.length], startInterface + i); + // Hide the arrow if that item isn't free to alch + player.getPacketSender().sendHideInterfaceLayer(15907 + i, freeAlch != i); } player.getPacketSender().sendString("" + player.alchemyPoints, 15896); player.getPacketSender().walkableInterface(15892); diff --git a/2006Scape Server/src/main/java/com/rs2/game/content/minigames/magetrainingarena/Enchanting.java b/2006Scape Server/src/main/java/com/rs2/game/content/minigames/magetrainingarena/Enchanting.java index 33d84bc6..69d2f321 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/content/minigames/magetrainingarena/Enchanting.java +++ b/2006Scape Server/src/main/java/com/rs2/game/content/minigames/magetrainingarena/Enchanting.java @@ -1,14 +1,94 @@ package com.rs2.game.content.minigames.magetrainingarena; +import java.util.Random; + +import com.rs2.GameConstants; +import com.rs2.game.content.combat.magic.CastRequirements; +import com.rs2.game.content.combat.magic.Enchanting.EnchantSpell; +import com.rs2.game.items.ItemAssistant; +import com.rs2.game.npcs.NpcHandler; import com.rs2.game.players.Player; +import com.rs2.game.players.PlayerHandler; +import com.rs2.world.Boundary; public class Enchanting { + // TODO: Add dragonstone drops occasionally, double points when enchanted + + private final Player player; + private int itemsEnchanted = 0; + private int orbsDeposited = 0; + + public Enchanting(Player c) { + this.player = c; + } + + public void enchantItem(int itemID, int spellID) { + EnchantSpell spell = EnchantSpell.forId(spellID); + if (player.playerLevel[GameConstants.MAGIC] < spell.getLevelReq()) { + player.getPacketSender().sendMessage("You need a magic level of at least " + spell.getLevelReq() + " to cast this spell."); + return; + } + if(!CastRequirements.hasRunes(player, player.getEnchanting().getRequiredRunes(spell))){ + player.getPacketSender().sendMessage("You do not have enough runes to cast this spell."); + return; + } + int index = -1; + for (int i = 0; i < items.length; i++) { + if (items[i] == itemID) { + index = i; + } + } + // Item not found, player trying to enchant a different item + if (index < 0) { + player.getPacketSender().sendMessage("You cannot enchant that item while here."); + return; + } + + int points = spell.getELevel(); + // If it's the 10th item enchanted, double the points + if (++itemsEnchanted % 10 == 0) { + points *= 2; + } + // If it's the bonus item, award 2 extra points + points += index == bonus ? 2 : 0; + + player.enchantmentPoints += points; + player.getItemAssistant().replaceItem(itemID, 6902); + player.getPlayerAssistant().addSkillXP(spell.getXp() * 0.75, GameConstants.MAGIC); + CastRequirements.deleteRunes(player, player.getEnchanting().getRequiredRunes(spell)); + player.startAnimation(spell.getAnim()); + player.gfx100(spell.getGFX()); + } + + public void deposit() { + int orbs = player.getItemAssistant().getItemAmount(6902); + player.getItemAssistant().deleteItem(6902, orbs); + orbsDeposited += orbs; + // reward the player with runes for every 20 orbs deposited + while (orbsDeposited >= 20) { + orbsDeposited -= 20; + int reward = random.nextInt(rewards.length); + player.getItemAssistant().addOrDropItem(rewards[reward], 3); + player.getPacketSender().sendMessage("You are rewarded with 3 " + ItemAssistant.getItemName(rewards[reward]) + "s."); + } + player.getPacketSender().sendMessage((20 - orbsDeposited) + " more Orbs until your next reward."); + } + + public void clearItems() { + for (int item: items) { + player.getItemAssistant().deleteItem(item, Integer.MAX_VALUE); + } + player.getItemAssistant().deleteItem(6902, Integer.MAX_VALUE); + player.getItemAssistant().deleteItem(6903, Integer.MAX_VALUE); + } + /* ITEMS */ // 6898 - Green Cylinder // 6899 - Yellow Cube // 6900 - Blue Icosahedron // 6901 - Red Pentamid // 6902 - Orb + // 6903 - Dragonstone /* OBJECTS */ // 10799 - Yellow Cube Pile @@ -19,18 +99,50 @@ public class Enchanting { /* INTERFACES */ // 15917 - Enchantment training arena interface - // 15930 - Bonus text // 15921 - How many enchantment points they have // 15922 -> 15925 - Bonus object frame (not sure how to get it to show) // 15926 -> 15929 - Bonus object (not sure how to get it to show) - private final Player player; + public static int ticks = 0; + public static int[] items = {6899, 6898, 6901, 6900}; + public static int bonus = 0; + public static int[] rewards = {560, 564, 565}; + private static Random random = new Random(); - public Enchanting(Player c) { - this.player = c; + public static void process() { + for (Player p : PlayerHandler.players) { + if (p == null) { + continue; + } + updateInterface(p); + } + // Every 71 ticks, randomize the order and such + if (++ticks % 71 == 0) { + bonus = random.nextInt(items.length); + for (int i = 0; i < NpcHandler.MAX_NPCS; i ++) { + if (NpcHandler.npcs[i] != null && NpcHandler.npcs[i].npcType == 3099) { + NpcHandler.npcs[i].forceChat("Items are changing!"); + } + } + for (Player p : PlayerHandler.players) { + if (p == null) { + continue; + } + updateInterface(p); + } + } } - - public void enchantItem(int itemID, int spellID) { - } + public static void updateInterface(Player player) { + if (!Boundary.isIn(player, Boundary.MAGE_TRAINING_ARENA_ENCHANTING)) { + return; + } + int startInterface = 15922; + for (int i = 0; i < items.length; i++) { + // Show the bonus item + player.getPacketSender().sendHideInterfaceLayer(startInterface + i, bonus != i); + } + player.getPacketSender().sendString("" + player.enchantmentPoints, 15921); + player.getPacketSender().walkableInterface(15917); + } } diff --git a/2006Scape Server/src/main/java/com/rs2/game/content/minigames/magetrainingarena/MageTrainingArena.java b/2006Scape Server/src/main/java/com/rs2/game/content/minigames/magetrainingarena/MageTrainingArena.java index fa236a40..fd10e020 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/content/minigames/magetrainingarena/MageTrainingArena.java +++ b/2006Scape Server/src/main/java/com/rs2/game/content/minigames/magetrainingarena/MageTrainingArena.java @@ -14,6 +14,7 @@ import com.rs2.game.players.Player; public class MageTrainingArena { public static void process() { Alchemy.process(); + Enchanting.process(); } private final Player player; diff --git a/2006Scape Server/src/main/java/com/rs2/game/content/skills/fletching/ArrowMaking.java b/2006Scape Server/src/main/java/com/rs2/game/content/skills/fletching/ArrowMaking.java index 5e4a45c8..1c6a3a05 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/content/skills/fletching/ArrowMaking.java +++ b/2006Scape Server/src/main/java/com/rs2/game/content/skills/fletching/ArrowMaking.java @@ -14,23 +14,33 @@ import com.rs2.game.players.Player; public class ArrowMaking { public enum Data { - - ARROW_SHAFT(314, 52, 53, 1, 0.4), BRONZE_ARROW(39, 53, 882, 1, 1.3), IRON_ARROW( - 40, 53, 884, 15, 2.5), STEEL_ARROW(41, 53, 886, 30, 5), MITHRIL_ARROW( - 42, 53, 888, 45, 7.5), ADAMANT_ARROW(43, 53, 890, 60, 10), RUNE_ARROW( - 44, 53, 892, 75, 12.5), - - BRONZE_DART(819, 314, 806, 1, 1.8), IRON_DART(820, 314, 807, 22, 3.8), STEEL_DART( - 821, 314, 808, 37, 7.5), MITHRIL_DART(822, 314, 809, 52, 11.2), ADAMANT_DART( - 823, 314, 810, 67, 15), RUNE_DART(824, 314, 811, 81, 18.8), - - BRONZE_BRUTAL_ARROW(4819, 53, 4773, 7, 1.4), IRON_BRUTAL_ARROW(4820, - 53, 4778, 18, 2.6), STEEL_BRUTAL_ARROW(1539, 53, 4783, 33, 5.1), BLACK_BRUTAL_ARROW( - 4821, 53, 4788, 38, 6.4), MITHRIL_BRUTAL_ARROW(4822, 53, 4793, - 49, 7.5), ADAMANT_BRUTAL_ARROW(4823, 53, 4798, 62, 10.1), RUNE_BRUTAL_ARROW( - 4824, 53, 4803, 77, 12.5), - - PEARL_BOLT(46, 877, 880, 41, 3.2); + // Arrows + ARROW_SHAFT(314, 52, 53, 1, 0.4), + BRONZE_ARROW(39, 53, 882, 1, 1.3), + IRON_ARROW(40, 53, 884, 15, 2.5), + STEEL_ARROW(41, 53, 886, 30, 5), + MITHRIL_ARROW(42, 53, 888, 45, 7.5), + ADAMANT_ARROW(43, 53, 890, 60, 10), + RUNE_ARROW(44, 53, 892, 75, 12.5), + // Darts + BRONZE_DART(819, 314, 806, 1, 1.8), + IRON_DART(820, 314, 807, 22, 3.8), + STEEL_DART(821, 314, 808, 37, 7.5), + MITHRIL_DART(822, 314, 809, 52, 11.2), + ADAMANT_DART(823, 314, 810, 67, 15), + RUNE_DART(824, 314, 811, 81, 18.8), + // Brutal Arrows + BRONZE_BRUTAL_ARROW(4819, 53, 4773, 7, 1.4), + IRON_BRUTAL_ARROW(4820, 53, 4778, 18, 2.6), + STEEL_BRUTAL_ARROW(1539, 53, 4783, 33, 5.1), + BLACK_BRUTAL_ARROW(4821, 53, 4788, 38, 6.4), + MITHRIL_BRUTAL_ARROW(4822, 53, 4793, 49, 7.5), + ADAMANT_BRUTAL_ARROW(4823, 53, 4798, 62, 10.1), + RUNE_BRUTAL_ARROW(4824, 53, 4803, 77, 12.5), + // Bolts + OPAL_BOLT(45, 877, 879, 11, 1.6), + PEARL_BOLT(46, 877, 880, 41, 3.2), + BARBED_BOLT(47, 877, 881, 51, 4.5); public int item1, item2, product, level; public double xp; diff --git a/2006Scape Server/src/main/java/com/rs2/game/content/skills/fletching/TipMaking.java b/2006Scape Server/src/main/java/com/rs2/game/content/skills/fletching/TipMaking.java new file mode 100644 index 00000000..a00032da --- /dev/null +++ b/2006Scape Server/src/main/java/com/rs2/game/content/skills/fletching/TipMaking.java @@ -0,0 +1,128 @@ +package com.rs2.game.content.skills.fletching; + +import com.rs2.GameConstants; +import com.rs2.event.CycleEvent; +import com.rs2.event.CycleEventContainer; +import com.rs2.event.CycleEventHandler; +import com.rs2.game.content.music.sound.SoundList; +import com.rs2.game.items.ItemAssistant; +import com.rs2.game.players.Player; + +/** + * @author Tom + */ + +public class TipMaking { + + public enum Data { + OPAL_BOLT_TIPS(1755, 1609, 45, 12, 11, 1.5), + PEARL_BOLT_TIPS1(1755, 411, 46, 6, 41, 3.2), + PEARL_BOLT_TIPS2(1755, 413, 46, 24, 41, 3.2); + + public int item1, item2, product, quantity, level; + public double xp; + + public static Data forId(int itemUsed, int usedWith) { + for (Data itemData : Data.values()) { + if (itemData.item1 == itemUsed && itemData.item2 == usedWith + || itemData.item2 == itemUsed && itemData.item1 == usedWith) { + return itemData; + } + } + return null; + } + + private Data(int item1, int item2, int product, int quantity, int level, double xp) { + this.item1 = item1; + this.item2 = item2; + this.product = product; + this.quantity = quantity; + this.level = level; + this.xp = xp; + } + + public int getItem1() { + return item1; + } + + public int getItem2() { + return item2; + } + + public int getProduct() { + return product; + } + + public int getQuantity() { + return quantity; + } + + public int getLevel() { + return level; + } + + public double getXp() { + return xp; + } + } + + public static boolean makeTips(final Player player, int itemUsed, int usedWith) { + final Data itemData = Data.forId(itemUsed, usedWith); + if (itemData == null) { + return false; + } + if (player.playerLevel[GameConstants.FLETCHING] < itemData.getLevel()) { + player.getDialogueHandler().sendStatement( + "You need a fletching level of " + itemData.getLevel() + + " to do this"); + player.nextChat = 0; + return false; + } + if (!player.getItemAssistant().playerHasItem(itemData.getItem1()) + || !player.getItemAssistant().playerHasItem(itemData.getItem2())) { + player.getDialogueHandler().sendStatement( + "You need " + + ItemAssistant.getItemName(itemData.getItem1()) + + " and " + + ItemAssistant.getItemName(itemData.getItem2()) + + " to make this."); + player.nextChat = 0; + return false; + } + if (player.getItemAssistant().freeSlots(itemData.getProduct(), itemData.getQuantity()) < 1) { + player.getPacketSender().sendMessage("Not enough space in your inventory."); + return false; + } + if (!player.playerIsFletching) { + player.playerIsFletching = true; + CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { + @Override + public void execute(CycleEventContainer container) { + if (!player.getItemAssistant().playerHasItem(itemData.getItem1()) || !player.getItemAssistant().playerHasItem(itemData.getItem2()) + || player.isWoodcutting || player.isCrafting || player.isMoving || player.isMining || player.isBusy || player.isShopping || player.isSmithing || player.isFiremaking || player.isSpinning || player.isPotionMaking || player.playerIsFishing || player.isBanking || player.isSmelting || player.isTeleporting || player.isHarvesting || player.playerIsCooking || player.isPotCrafting) { + container.stop(); + return; + } + player.getPacketSender().sendSound(SoundList.CUT_GEM, 100, 0); + player.getItemAssistant().deleteItem(itemData.getItem2(), 1); + player.getItemAssistant().addItem(itemData.getProduct(), itemData.getQuantity()); + player.getPacketSender().sendMessage( + "You cut the " + + ItemAssistant.getItemName(itemData.getItem2()) + + " in to " + + itemData.getQuantity() + + " " + + ItemAssistant.getItemName(itemData.getProduct()) + "."); + player.getPlayerAssistant().addSkillXP(itemData.getQuantity() * itemData.getXp(), GameConstants.FLETCHING); + } + + @Override + public void stop() { + player.playerIsFletching = false; + } + }, 1); + } + return true; + } + +} diff --git a/2006Scape Server/src/main/java/com/rs2/game/items/ItemAssistant.java b/2006Scape Server/src/main/java/com/rs2/game/items/ItemAssistant.java index 3225132c..cdc0601d 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/items/ItemAssistant.java +++ b/2006Scape Server/src/main/java/com/rs2/game/items/ItemAssistant.java @@ -1103,39 +1103,39 @@ public class ItemAssistant { switch (weapon) { case 4151: // whip - player.getPacketSender().sendFrame171(0, 12323); + player.getPacketSender().sendHideInterfaceLayer(12323, false); specialAmount(weapon, player.specAmount, 12335); break; case 859: // magic bows case 861: case 11235: - player.getPacketSender().sendFrame171(0, 7549); + player.getPacketSender().sendHideInterfaceLayer(7549, false); specialAmount(weapon, player.specAmount, 7561); break; case 4587: // dscimmy - player.getPacketSender().sendFrame171(0, 7599); + player.getPacketSender().sendHideInterfaceLayer(7599, false); specialAmount(weapon, player.specAmount, 7611); break; case 3204: // d hally - player.getPacketSender().sendFrame171(0, 8493); + player.getPacketSender().sendHideInterfaceLayer(8493, false); specialAmount(weapon, player.specAmount, 8505); break; case 1377: // d battleaxe - player.getPacketSender().sendFrame171(0, 7499); + player.getPacketSender().sendHideInterfaceLayer(7499, false); specialAmount(weapon, player.specAmount, 7511); break; case 4153: // gmaul - player.getPacketSender().sendFrame171(0, 7474); + player.getPacketSender().sendHideInterfaceLayer(7474, false); specialAmount(weapon, player.specAmount, 7486); break; case 1249: // dspear - player.getPacketSender().sendFrame171(0, 7674); + player.getPacketSender().sendHideInterfaceLayer(7674, false); specialAmount(weapon, player.specAmount, 7686); break; @@ -1149,29 +1149,29 @@ public class ItemAssistant { case 11700: case 11730: case 11696: - player.getPacketSender().sendFrame171(0, 7574); + player.getPacketSender().sendHideInterfaceLayer(7574, false); specialAmount(weapon, player.specAmount, 7586); break; case 1434: // dragon mace - player.getPacketSender().sendFrame171(0, 7624); + player.getPacketSender().sendHideInterfaceLayer(7624, false); specialAmount(weapon, player.specAmount, 7636); break; default: - player.getPacketSender().sendFrame171(1, 7624); // mace + player.getPacketSender().sendHideInterfaceLayer(7624, true); // mace // interface - player.getPacketSender().sendFrame171(1, 7474); // hammer, gmaul - player.getPacketSender().sendFrame171(1, 7499); // axe - player.getPacketSender().sendFrame171(1, 7549); // bow interface - player.getPacketSender().sendFrame171(1, 7574); // sword + player.getPacketSender().sendHideInterfaceLayer(7474, true); // hammer, gmaul + player.getPacketSender().sendHideInterfaceLayer(7499, true); // axe + player.getPacketSender().sendHideInterfaceLayer(7549, true); // bow interface + player.getPacketSender().sendHideInterfaceLayer(7574, true); // sword // interface - player.getPacketSender().sendFrame171(1, 7599); // scimmy sword + player.getPacketSender().sendHideInterfaceLayer(7599, true); // scimmy sword // interface, // for most // swords - player.getPacketSender().sendFrame171(1, 8493); - player.getPacketSender().sendFrame171(1, 12323); // whip + player.getPacketSender().sendHideInterfaceLayer(8493, true); + player.getPacketSender().sendHideInterfaceLayer(12323, true); // whip // interface break; } diff --git a/2006Scape Server/src/main/java/com/rs2/game/items/UseItem.java b/2006Scape Server/src/main/java/com/rs2/game/items/UseItem.java index af32896e..f575154e 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/items/UseItem.java +++ b/2006Scape Server/src/main/java/com/rs2/game/items/UseItem.java @@ -13,6 +13,7 @@ import com.rs2.game.content.skills.fletching.ArrowMaking; import com.rs2.game.content.skills.fletching.LogCutting; import com.rs2.game.content.skills.fletching.LogCuttingInterface; import com.rs2.game.content.skills.fletching.Stringing; +import com.rs2.game.content.skills.fletching.TipMaking; import com.rs2.game.content.skills.herblore.GrindingAction; import com.rs2.game.content.skills.herblore.Herblore; import com.rs2.game.content.skills.prayer.Ectofuntus; @@ -123,6 +124,7 @@ public class UseItem { LogCuttingInterface.handleItemOnItem(player, itemUsed, useWith); ArrowMaking.makeArrow(player, itemUsed, useWith); Stringing.StringBow(player, itemUsed, useWith); + TipMaking.makeTips(player, itemUsed, useWith); WeaponPoison.execute(player, itemUsed, useWith); player.getGlassBlowing().ItemOnItem(itemUsed, useWith); //CapeDye.execute(c, itemUsed, useWith); @@ -381,14 +383,8 @@ public class UseItem { } } - switch (itemUsed) { - - default: - if (player.playerRights == 3) { - Misc.println("Player used Item id: " + itemUsed - + " with Item id: " + useWith); - } - break; + if (player.playerRights == 3) { + Misc.println("Player used Item id: " + itemUsed + " with Item id: " + useWith); } } diff --git a/2006Scape Server/src/main/java/com/rs2/game/objects/ObjectsActions.java b/2006Scape Server/src/main/java/com/rs2/game/objects/ObjectsActions.java index 4079d87a..e3fb2609 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/objects/ObjectsActions.java +++ b/2006Scape Server/src/main/java/com/rs2/game/objects/ObjectsActions.java @@ -2658,8 +2658,7 @@ public class ObjectsActions { break; case 10779: // TODO: Require Pizazz progress hat equiped - player.getDialogueHandler().sendStatement("This area is currently closed."); - // player.getPlayerAssistant().startTeleport2(3363, 9639, 0); // Enchantment training + player.getPlayerAssistant().startTeleport2(3363, 9639, 0); // Enchantment training break; case 10780: // TODO: Require Pizazz progress hat equiped @@ -2677,6 +2676,21 @@ public class ObjectsActions { case 10782: // Leave mage training rooms player.getPlayerAssistant().startTeleport2(3363, 3318, 0); break; + case 10799: // Mage training arena - Enchantment room objects + player.getItemAssistant().addItem(6899, 1); + break; + case 10800: // Mage training arena - Enchantment room objects + player.getItemAssistant().addItem(6898, 1); + break; + case 10801: // Mage training arena - Enchantment room objects + player.getItemAssistant().addItem(6900, 1); + break; + case 10802: // Mage training arena - Enchantment room objects + player.getItemAssistant().addItem(6901, 1); + break; + case 10803: // Mage training arena - Enchantment room deposit hole + player.getMageTrainingArena().enchanting.deposit(); + break; case 2873: if (player.getItemAssistant().hasFreeSlots(1)) player.getItemAssistant().addItem(2412, 1); diff --git a/2006Scape Server/src/main/java/com/rs2/game/objects/impl/Climbing.java b/2006Scape Server/src/main/java/com/rs2/game/objects/impl/Climbing.java index 8d0e3e45..9f527c7f 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/objects/impl/Climbing.java +++ b/2006Scape Server/src/main/java/com/rs2/game/objects/impl/Climbing.java @@ -452,6 +452,9 @@ public class Climbing { } else if (client.objectX == 2895 && client.objectY == 3513) { client.getPlayerAssistant().movePlayer(2897, 3513, 1); client.resetWalkingQueue(); + } else if (client.objectX == 3501 && client.objectY == 3475) { + client.getPlayerAssistant().movePlayer(3500, 3476, 1); + client.resetWalkingQueue(); } break; case 3443: diff --git a/2006Scape Server/src/main/java/com/rs2/game/players/Player.java b/2006Scape Server/src/main/java/com/rs2/game/players/Player.java index 3378908f..f23d419f 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/players/Player.java +++ b/2006Scape Server/src/main/java/com/rs2/game/players/Player.java @@ -822,6 +822,8 @@ public abstract class Player { getPacketSender().showOption(3, 0, "Attack", 1); } else if (Boundary.isIn(this, Boundary.MAGE_TRAINING_ARENA_ALCHEMY)) { getPacketSender().walkableInterface(15892); + } else if (Boundary.isIn(this, Boundary.MAGE_TRAINING_ARENA_ENCHANTING)) { + getPacketSender().walkableInterface(15917); } else { getPacketSender().sendMapState(0); if (!isSnowy) { @@ -2157,6 +2159,10 @@ public abstract class Player { // remove any alchemy training items getMageTrainingArena().alchemy.clearItems(); } + if (Boundary.isIn(this, Boundary.MAGE_TRAINING_ARENA_ENCHANTING) && !Boundary.isIn(teleportToX, teleportToY, teleHeight, Boundary.MAGE_TRAINING_ARENA_ENCHANTING)) { + // remove any alchemy training items + getMageTrainingArena().enchanting.clearItems(); + } currentX = teleportToX - 8 * mapRegionX; currentY = teleportToY - 8 * mapRegionY; absX = teleportToX; diff --git a/2006Scape Server/src/main/java/com/rs2/game/players/PlayerAssistant.java b/2006Scape Server/src/main/java/com/rs2/game/players/PlayerAssistant.java index 544d45d9..61344e7d 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/players/PlayerAssistant.java +++ b/2006Scape Server/src/main/java/com/rs2/game/players/PlayerAssistant.java @@ -1175,13 +1175,13 @@ public class PlayerAssistant { if (System.currentTimeMillis() - player.alchDelay <= 1000) { return; } - if (!player.getCombatAssistant().checkMagicReqs(49)) { - return; - } if (Boundary.isIn(player, Boundary.MAGE_TRAINING_ARENA)) { player.getMageTrainingArena().alchItem(itemId, spellId); return; } + if (!player.getCombatAssistant().checkMagicReqs(49)) { + return; + } canAlch = true; for (int i : ItemConstants.ITEM_UNALCHABLE) { if (itemId == i) { @@ -1233,6 +1233,7 @@ public class PlayerAssistant { case 1180: // Lvl-4 enchant diamond case 1187: // Lvl-5 enchant dragonstone case 6003: // Lvl-6 enchant onyx + player.getPacketSender().sendShowTab(6); if (Boundary.isIn(player, Boundary.MAGE_TRAINING_ARENA)) { player.getMageTrainingArena().enchantItem(itemId, spellId); } else { @@ -1249,13 +1250,13 @@ public class PlayerAssistant { if (System.currentTimeMillis() - player.alchDelay <= 1000) { return; } - if (!player.getCombatAssistant().checkMagicReqs(50)) { - break; - } if (Boundary.isIn(player, Boundary.MAGE_TRAINING_ARENA)) { player.getMageTrainingArena().alchItem(itemId, spellId); return; } + if (!player.getCombatAssistant().checkMagicReqs(50)) { + break; + } canAlch = true; for (int i : ItemConstants.ITEM_UNALCHABLE) { if (itemId == i) { diff --git a/2006Scape Server/src/main/java/com/rs2/net/PacketSender.java b/2006Scape Server/src/main/java/com/rs2/net/PacketSender.java index 2a7da085..8d3e1821 100644 --- a/2006Scape Server/src/main/java/com/rs2/net/PacketSender.java +++ b/2006Scape Server/src/main/java/com/rs2/net/PacketSender.java @@ -393,12 +393,12 @@ public class PacketSender { return this; } - public PacketSender sendFrame171(int MainFrame, int SubFrame) { //Special attack bar? + public PacketSender sendHideInterfaceLayer(int MainFrame, boolean hidden) { //Special attack bar? // synchronized(c) { if (player.getOutStream() != null && player != null) { player.getOutStream().createFrame(171); - player.getOutStream().writeByte(MainFrame); - player.getOutStream().writeWord(SubFrame); + player.getOutStream().writeByte(hidden ? 1 : 0); + player.getOutStream().writeWord(MainFrame); player.flushOutStream(); } return this; diff --git a/2006Scape Server/src/main/java/com/rs2/world/Boundary.java b/2006Scape Server/src/main/java/com/rs2/world/Boundary.java index 91e12da1..a8a4215f 100644 --- a/2006Scape Server/src/main/java/com/rs2/world/Boundary.java +++ b/2006Scape Server/src/main/java/com/rs2/world/Boundary.java @@ -314,5 +314,6 @@ public class Boundary { public static final Boundary PARTY_ROOM_TABLE = new Boundary(2735, 2740, 3467, 3468); public static final Boundary MAGE_TRAINING_ARENA = new Boundary(3330, 3388, 9614, 9727); public static final Boundary MAGE_TRAINING_ARENA_ALCHEMY = new Boundary(3350, 3379, 9616, 9655, 2); + public static final Boundary MAGE_TRAINING_ARENA_ENCHANTING = new Boundary(3341, 3386, 9618, 9662, 0); } \ No newline at end of file