mirror of
https://github.com/2006-Scape/2006Scape.git
synced 2026-07-03 08:39:04 +00:00
[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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+8
-4
@@ -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;
|
||||
|
||||
+23
-16
@@ -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);
|
||||
|
||||
+119
-7
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+1
@@ -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;
|
||||
|
||||
+27
-17
@@ -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);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user