[Mage Training Arena] Enchanting, and some other stuff (#507)

* Handle some more stairs...

* Remove message sent to player

* Bolts/Tips making

* Tidy up

* Free alchs occasionally within training arena

* [Mage Training Arena] Enchanting

* Remove enchanting room specific items when leaving area
This commit is contained in:
Danial
2021-10-03 06:38:45 +13:00
committed by GitHub
parent 865ef4ed29
commit c526aa5f4d
16 changed files with 430 additions and 138 deletions
@@ -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);
}
}
@@ -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(
@@ -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;
@@ -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);
@@ -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);
}
}
@@ -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;
@@ -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;
@@ -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;
}
}
@@ -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;
}
@@ -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);
}
}
@@ -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);
@@ -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:
@@ -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;
@@ -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) {
@@ -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;
@@ -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);
}