mirror of
https://github.com/2006-Scape/2006Scape.git
synced 2026-07-03 00:31:51 +00:00
Telekinetic grab and stuff (#508)
* tidy up * Tidy up check for space * Telekinetic base * Don't allow player to pickup statue * Tidy up item pickup * fixup, statue spawn * Update telekinetic grab * 2nd option for guardian statue * handle telegrab on statue * Allow picking up global drops with telekinetic grab * Check if player can see/reach item * Update PickupItem.java * Allow pasting into chatbox * camera stuff * fixup clipboard stuff * Update PlayerAssistant.java * Update Commands.java * Add mazes initial * Tidy up the clipboard pasting * Update mazes * Calculate new position of statue * fixup telegrab * More tidy up, remove constant running of container * more tidy up.. * Handle moving statues * remove the statue from global drops * Update MagicOnFloorItems.java * Show telekinetic interface * Make public accessable * Only show items to player that are on the same height level * Moving statues around, Spawning * Reward exp, points, law runes * Show points, mazes completed * Add comment * Add observable statue (still needs work) * Fixup where camera focuses * Load items when player changes level * Graveyard base * Add a couple more checks * Update Player.java * Update Commands.java * Make sure statue is visible when player appears at maze * [Mage training arena] Graveyard * Update MageTrainingArena.java * Update MageTrainingArena.java * Update ItemHandler.java
This commit is contained in:
@@ -149,7 +149,9 @@ public class MagicData {
|
||||
// alch
|
||||
{ -1, 55, 713, 113, 0, 0, 0, 20, 554, 5, 561, 1, 0, 0, 0, 0, 0 }, // high
|
||||
// alch
|
||||
{ -1, 33, 728, 142, 143, 144, 0, 35, 556, 1, 563, 1, 0, 0, 0, 0, 0 } // telegrab
|
||||
{ -1, 33, 728, 142, 143, 144, 0, 35, 556, 1, 563, 1, 0, 0, 0, 0, 0 }, // telegrab
|
||||
{ -1, 15, 722, 141, 0, 0, 0, 25, 561, 1, 557, 2, 555, 2, 0, 0, 0, 0 }, // bones to bananas
|
||||
{ -1, 60, 722, 311, 0, 0, 0, 35, 561, 2, 557, 4, 555, 4, 0, 0, 0, 0 } // bones to peaches
|
||||
|
||||
};
|
||||
|
||||
|
||||
+11
-12
@@ -40,7 +40,7 @@ public class MagicRequirements {
|
||||
|
||||
public static boolean checkMagicReqs(Player c, int spell, boolean runesRequired) {
|
||||
int[] spellData = MagicData.MAGIC_SPELLS[spell];
|
||||
if (c.usingMagic && runesRequired) { // check for runes
|
||||
if (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])
|
||||
@@ -52,7 +52,7 @@ public class MagicRequirements {
|
||||
}
|
||||
}
|
||||
|
||||
if (c.usingMagic && c.playerIndex > 0) {
|
||||
if (c.playerIndex > 0) {
|
||||
if (PlayerHandler.players[c.playerIndex] != null) {
|
||||
for (int r = 0; r < c.REDUCE_SPELLS.length; r++) { // reducing
|
||||
// spells,
|
||||
@@ -81,7 +81,7 @@ public class MagicRequirements {
|
||||
}
|
||||
|
||||
int staffRequired = getStaffNeeded(c);
|
||||
if (c.usingMagic && staffRequired > 0 && runesRequired) { // staff
|
||||
if (staffRequired > 0 && runesRequired) { // staff
|
||||
// required
|
||||
if (c.playerEquipment[c.playerWeapon] != staffRequired) {
|
||||
c.getPacketSender()
|
||||
@@ -94,16 +94,15 @@ public class MagicRequirements {
|
||||
}
|
||||
}
|
||||
|
||||
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 "
|
||||
+ MagicData.MAGIC_SPELLS[spell][1]
|
||||
+ " to cast this spell.");
|
||||
return false;
|
||||
}
|
||||
// check magic level
|
||||
if (c.playerLevel[GameConstants.MAGIC] < MagicData.MAGIC_SPELLS[spell][1]) {
|
||||
c.getPacketSender().sendMessage(
|
||||
"You need to have a magic level of "
|
||||
+ MagicData.MAGIC_SPELLS[spell][1]
|
||||
+ " to cast this spell.");
|
||||
return false;
|
||||
}
|
||||
if (c.usingMagic && runesRequired) {
|
||||
if (runesRequired) {
|
||||
if (MagicData.MAGIC_SPELLS[spell][8] > 0) { // deleting runes
|
||||
if (!wearingStaff(c, MagicData.MAGIC_SPELLS[spell][8])) {
|
||||
c.getItemAssistant().deleteItem(
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ import com.rs2.world.Boundary;
|
||||
|
||||
public class Alchemy {
|
||||
|
||||
private final Player player;
|
||||
private Player player;
|
||||
|
||||
public Alchemy(Player c) {
|
||||
this.player = c;
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ import com.rs2.world.Boundary;
|
||||
public class Enchanting {
|
||||
// TODO: Add dragonstone drops occasionally, double points when enchanted
|
||||
|
||||
private final Player player;
|
||||
private Player player;
|
||||
private int itemsEnchanted = 0;
|
||||
private int orbsDeposited = 0;
|
||||
|
||||
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
package com.rs2.game.content.minigames.magetrainingarena;
|
||||
|
||||
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;
|
||||
import com.rs2.game.players.PlayerHandler;
|
||||
import com.rs2.world.Boundary;
|
||||
|
||||
public class Graveyard {
|
||||
|
||||
private Player player;
|
||||
private int bonesCollected = 0;
|
||||
private int fruitDeposited = 0;
|
||||
|
||||
public Graveyard(Player c) {
|
||||
this.player = c;
|
||||
}
|
||||
|
||||
public void searchBonePile(int objectID) {
|
||||
int index = (int) Math.floor(bonesCollected / 4);
|
||||
if (player.getItemAssistant().freeSlots(items[index], 1) <= 0) {
|
||||
player.getPacketSender().sendMessage("You don't have enough space in your inventory.");
|
||||
return;
|
||||
}
|
||||
player.getItemAssistant().addItem(items[index], 1);
|
||||
bonesCollected = (bonesCollected + 1) % (items.length * 4);
|
||||
}
|
||||
|
||||
public void bonesToFood(int spellID) {
|
||||
if (!player.getCombatAssistant().checkMagicReqs(spellID)) {
|
||||
return;
|
||||
}
|
||||
player.boneDelay = System.currentTimeMillis();
|
||||
player.startAnimation(MagicData.MAGIC_SPELLS[spellID][2]);
|
||||
player.gfx100(MagicData.MAGIC_SPELLS[spellID][3]);
|
||||
player.getPlayerAssistant().addSkillXP(MagicData.MAGIC_SPELLS[spellID][7], GameConstants.MAGIC);
|
||||
player.getPlayerAssistant().refreshSkill(GameConstants.MAGIC);
|
||||
player.getPacketSender().sendShowTab(6);
|
||||
player.getPacketSender().sendSound(SoundList.BONES_TO_BANNAS, 100, 0);
|
||||
int amount = 0;
|
||||
for (int i = 0; i < items.length; i++) {
|
||||
amount = player.getItemAssistant().getItemAmount(items[i]);
|
||||
if (amount > 0) {
|
||||
player.getItemAssistant().deleteItem(items[i], amount);
|
||||
player.getItemAssistant().addItem(spellID == 52 ? 1963 : 6883, amount * values[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void depositFood() {
|
||||
int amount = player.getItemAssistant().getItemAmount(1963);
|
||||
amount += player.getItemAssistant().getItemAmount(6883);
|
||||
// remove all peaches and bananas
|
||||
player.getItemAssistant().deleteItem(1963, Integer.MAX_VALUE);
|
||||
player.getItemAssistant().deleteItem(6883, Integer.MAX_VALUE);
|
||||
fruitDeposited += amount;
|
||||
while (fruitDeposited >= 16) {
|
||||
int reward = random.nextInt(rewards.length);
|
||||
player.getItemAssistant().addOrDropItem(rewards[reward], 1);
|
||||
player.graveyardPoints++;
|
||||
fruitDeposited -= 16;
|
||||
}
|
||||
}
|
||||
|
||||
public void clearItems() {
|
||||
for (int item: items) {
|
||||
player.getItemAssistant().deleteItem(item, Integer.MAX_VALUE);
|
||||
}
|
||||
player.getItemAssistant().deleteItem(1963, Integer.MAX_VALUE);
|
||||
player.getItemAssistant().deleteItem(6883, Integer.MAX_VALUE);
|
||||
}
|
||||
|
||||
/* ITEMS */
|
||||
// 6904 - Animal Bones
|
||||
// 6905 - Animal Bones
|
||||
// 6906 - Animal Bones
|
||||
// 6907 - Animal Bones
|
||||
public static int[] items = {6904, 6905, 6906, 6907};
|
||||
public static int[] values = {1, 2, 3, 4};
|
||||
public static int[] rewards = {555, 557, 561, 560, 565};
|
||||
|
||||
public static int ticks = 0;
|
||||
private static Random random = new Random();
|
||||
|
||||
/* OBJECTS */
|
||||
// 10735 - Food Chute
|
||||
|
||||
/* INTERFACES */
|
||||
// 15931 - Main interface
|
||||
|
||||
public static void process() {
|
||||
for (Player p : PlayerHandler.players) {
|
||||
if (p == null) {
|
||||
continue;
|
||||
}
|
||||
updateInterface(p);
|
||||
}
|
||||
// Every 12 ticks deal 2 damage to player (50% chance)
|
||||
if (++ticks % 12 == 0) {
|
||||
for (Player p : PlayerHandler.players) {
|
||||
if (p == null) {
|
||||
continue;
|
||||
}
|
||||
if (!Boundary.isIn(p, Boundary.MAGE_TRAINING_ARENA_GRAVEYARD)) {
|
||||
return;
|
||||
}
|
||||
// TODO: Find falling bones animation/gfx ID
|
||||
if (random.nextInt(1) == 0) {
|
||||
p.dealDamage(2);
|
||||
p.handleHitMask(2);
|
||||
}
|
||||
updateInterface(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void updateInterface(Player player) {
|
||||
if (!Boundary.isIn(player, Boundary.MAGE_TRAINING_ARENA_GRAVEYARD)) {
|
||||
return;
|
||||
}
|
||||
player.getPacketSender().sendString("" + player.graveyardPoints, 15935);
|
||||
player.getPacketSender().walkableInterface(15931);
|
||||
}
|
||||
}
|
||||
+11
-3
@@ -15,16 +15,22 @@ public class MageTrainingArena {
|
||||
public static void process() {
|
||||
Alchemy.process();
|
||||
Enchanting.process();
|
||||
Telekinetic.process();
|
||||
Graveyard.process();
|
||||
}
|
||||
|
||||
private final Player player;
|
||||
public final Enchanting enchanting;
|
||||
public final Alchemy alchemy;
|
||||
private Player player;
|
||||
public Enchanting enchanting;
|
||||
public Alchemy alchemy;
|
||||
public Telekinetic telekinetic;
|
||||
public Graveyard graveyard;
|
||||
|
||||
public MageTrainingArena(Player c) {
|
||||
this.player = c;
|
||||
this.enchanting = new Enchanting(c);
|
||||
this.alchemy = new Alchemy(c);
|
||||
this.telekinetic = new Telekinetic(c);
|
||||
this.graveyard = new Graveyard(c);
|
||||
}
|
||||
|
||||
private final int[] shopItems = {
|
||||
@@ -277,6 +283,8 @@ public class MageTrainingArena {
|
||||
} else {
|
||||
player.getItemAssistant().addItem(itemId, 1);
|
||||
}
|
||||
// Update point amounts
|
||||
openShop();
|
||||
}
|
||||
|
||||
public void enchantItem(int itemID, int spellID) {
|
||||
|
||||
+271
@@ -0,0 +1,271 @@
|
||||
package com.rs2.game.content.minigames.magetrainingarena;
|
||||
|
||||
import java.awt.Point;
|
||||
import java.util.Random;
|
||||
|
||||
import com.rs2.GameConstants;
|
||||
import com.rs2.GameEngine;
|
||||
import com.rs2.event.CycleEvent;
|
||||
import com.rs2.event.CycleEventContainer;
|
||||
import com.rs2.event.CycleEventHandler;
|
||||
import com.rs2.game.content.combat.magic.MagicData;
|
||||
import com.rs2.game.items.GroundItem;
|
||||
import com.rs2.game.players.Player;
|
||||
import com.rs2.game.players.PlayerHandler;
|
||||
import com.rs2.world.Boundary;
|
||||
import com.rs2.world.clip.Region;
|
||||
|
||||
public class Telekinetic {
|
||||
|
||||
public static enum Maze {
|
||||
MAZE_0(3338, 9705, 0,
|
||||
3343, 9705,
|
||||
3347, 9714),
|
||||
MAZE_1(3366, 9711, 0,
|
||||
3375, 9715,
|
||||
3367, 9720),
|
||||
MAZE_2(3338, 9675, 0,
|
||||
3343, 9680,
|
||||
3342, 9684),
|
||||
MAZE_3(3369, 9673, 0,
|
||||
3373, 9678,
|
||||
3375, 9682),
|
||||
MAZE_4(3374, 9713, 1,
|
||||
3374, 9713,
|
||||
3383, 9713),
|
||||
MAZE_5(3341, 9708, 1,
|
||||
3350, 9717,
|
||||
3341, 9708),
|
||||
MAZE_6(3346, 9680, 1,
|
||||
3351, 9684,
|
||||
3353, 9680),
|
||||
MAZE_7(3376, 9677, 1,
|
||||
3376, 9686,
|
||||
3385, 9686),
|
||||
MAZE_8(3339, 9674, 2,
|
||||
3348, 9674,
|
||||
3339, 9683),
|
||||
MAZE_9(3343, 9709, 2,
|
||||
3346, 9718,
|
||||
3345, 9718);
|
||||
|
||||
public int minX, maxX, minY, maxY, height, startX, startY, endX, endY;
|
||||
public Boundary mazeArea, mazeUp, mazeRight, mazeDown, mazeLeft;
|
||||
public GroundItem statue;
|
||||
public boolean initialized = false;
|
||||
|
||||
private Maze(int minX, int minY, int height, int startX, int startY, int endX, int endY) {
|
||||
this.minX = minX;
|
||||
this.maxX = minX + 9;
|
||||
this.minY = minY;
|
||||
this.maxY = minY + 9;
|
||||
this.height = height;
|
||||
this.startX = startX;
|
||||
this.startY = startY;
|
||||
this.endX = endX;
|
||||
this.endY = endY;
|
||||
this.mazeArea = new Boundary(minX, maxX, minY, maxY, height);
|
||||
this.mazeUp = new Boundary(minX, maxX, maxY + 1, maxY + 2, height);
|
||||
this.mazeRight = new Boundary(maxX + 1, maxX + 2, minY, maxY, height);
|
||||
this.mazeDown = new Boundary(minX, maxX, minY - 2, minY - 1, height);
|
||||
this.mazeLeft = new Boundary(minX - 2, minX - 1, minY, maxY, height);
|
||||
this.statue = new GroundItem(6888, startX, startY, height, 1, -1, 0, "");
|
||||
}
|
||||
|
||||
public static Maze getMaze(int x, int y, int h) {
|
||||
for (Maze maze : values()){
|
||||
if (Boundary.isIn(x, y, h, maze.mazeArea)) {
|
||||
return maze;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Point calcDirection(Player player) {
|
||||
if (Boundary.isIn(player, mazeUp)) {
|
||||
return new Point(0, 1);
|
||||
}
|
||||
if (Boundary.isIn(player, mazeRight)) {
|
||||
return new Point(1, 0);
|
||||
}
|
||||
if (Boundary.isIn(player, mazeDown)) {
|
||||
return new Point(0, -1);
|
||||
}
|
||||
if (Boundary.isIn(player, mazeLeft)) {
|
||||
return new Point(-1, 0);
|
||||
}
|
||||
return new Point(0, 0);
|
||||
}
|
||||
|
||||
public Point getNewPos(int curX, int curY, int dirX, int dirY) {
|
||||
if (dirX != 0) {
|
||||
while(curX >= minX && curX <= maxX && Region.getClipping(curX + dirX, curY, this.height, dirX, dirY)) {
|
||||
curX += dirX;
|
||||
}
|
||||
}
|
||||
if (dirY != 0) {
|
||||
while(curY >= minY && curY <= maxY && Region.getClipping(curX, curY + dirY, this.height, dirX, dirY)) {
|
||||
curY += dirY;
|
||||
}
|
||||
}
|
||||
return new Point(curX, curY);
|
||||
}
|
||||
}
|
||||
|
||||
private Player player;
|
||||
private Random random = new Random();
|
||||
private boolean observingStatue = false;
|
||||
|
||||
public Telekinetic(Player c) {
|
||||
this.player = c;
|
||||
}
|
||||
|
||||
public void moveStatue(int itemX, int itemY) {
|
||||
// Play animation, Award XP
|
||||
player.walkingToItem = true;
|
||||
int offY = (player.getX() - itemX) * -1;
|
||||
int offX = (player.getY() - itemY) * -1;
|
||||
player.teleGrabX = itemX;
|
||||
player.teleGrabY = itemY;
|
||||
player.turnPlayerTo(itemX, itemY);
|
||||
player.teleGrabDelay = System.currentTimeMillis();
|
||||
player.startAnimation(MagicData.MAGIC_SPELLS[51][2]);
|
||||
player.gfx100(MagicData.MAGIC_SPELLS[51][3]);
|
||||
player.getPlayerAssistant().createPlayersStillGfx(144, itemX, itemY, 0, 72);
|
||||
player.getPlayerAssistant().createPlayersProjectile(player.getX(), player.getY(), offX, offY, 50, 70, MagicData.MAGIC_SPELLS[51][4], 50, 10, 0, 50);
|
||||
player.getPlayerAssistant().addSkillXP(MagicData.MAGIC_SPELLS[51][7], GameConstants.MAGIC);
|
||||
player.getPlayerAssistant().refreshSkill(GameConstants.MAGIC);
|
||||
player.stopMovement();
|
||||
|
||||
Maze maze = Maze.getMaze(itemX, itemY, player.heightLevel);
|
||||
if (maze == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Point direction = maze.calcDirection(player);
|
||||
Point newPosition = maze.getNewPos(itemX, itemY, direction.x, direction.y);
|
||||
|
||||
CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() {
|
||||
@Override
|
||||
public void execute(CycleEventContainer container) {
|
||||
if (!player.walkingToItem) {
|
||||
container.stop();
|
||||
} else if (System.currentTimeMillis() - player.teleGrabDelay > 1550) {
|
||||
if (GameEngine.itemHandler.itemExists(6888, itemX, itemY)) {
|
||||
GameEngine.itemHandler.moveItem(maze.statue, newPosition.x, newPosition.y);
|
||||
|
||||
if (newPosition.x == maze.endX && newPosition.y == maze.endY) {
|
||||
player.telekineticPoints += 2;
|
||||
player.telekineticMazesSolved++;
|
||||
|
||||
// Every 5 solves, give the player 8 extra points, 10 law runes, 1000 magic experience
|
||||
if (player.telekineticMazesSolved % 5 == 0) {
|
||||
player.telekineticPoints += 8;
|
||||
player.getItemAssistant().addOrDropItem(563, 10);
|
||||
player.getPlayerAssistant().addSkillXP(1000, GameConstants.MAGIC);
|
||||
player.getPlayerAssistant().refreshSkill(GameConstants.MAGIC);
|
||||
}
|
||||
|
||||
resetStatue(newPosition.x, newPosition.y);
|
||||
|
||||
if (observingStatue) {
|
||||
observingStatue = false;
|
||||
player.getPlayerAssistant().sendCameraReset();
|
||||
}
|
||||
goToMaze();
|
||||
}
|
||||
}
|
||||
stop();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
player.usingMagic = false;
|
||||
player.walkingToItem = false;
|
||||
}
|
||||
}, 1);
|
||||
}
|
||||
|
||||
public void goToMaze() {
|
||||
int r = random.nextInt(Maze.values().length);
|
||||
Maze maze = Maze.values()[r];
|
||||
player.getPlayerAssistant().startTeleport2(maze.minX - 1, maze.minY - 1, maze.height);
|
||||
|
||||
CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() {
|
||||
@Override
|
||||
public void execute(CycleEventContainer container) {
|
||||
GameEngine.itemHandler.reloadItems(player);
|
||||
container.stop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() {}
|
||||
}, 8);
|
||||
}
|
||||
|
||||
public void observeStatue(int itemX, int itemY) {
|
||||
Maze maze = Maze.getMaze(itemX, itemY, player.heightLevel);
|
||||
if (maze == null) {
|
||||
return;
|
||||
}
|
||||
if (!observingStatue) {
|
||||
observingStatue = true;
|
||||
player.getPlayerAssistant().sendCameraCutscene((maze.minX + 5) - 8 * player.getMapRegionX(), (maze.minY - 1) - 8 * player.getMapRegionY(), 10, 25, 0);
|
||||
player.getPlayerAssistant().sendCameraCutscene2((maze.minX + 5) - 8 * player.getMapRegionX(), (maze.minY + 5) - 8 * player.getMapRegionY() - 8, 2400, 25, 0);
|
||||
player.getPacketSender().sendMessage("You overlook the maze..");
|
||||
player.getPacketSender().sendMessage("Click the statue again to leave this view.");
|
||||
} else {
|
||||
observingStatue = false;
|
||||
player.getPlayerAssistant().sendCameraReset();
|
||||
}
|
||||
// TODO: Figure out how to get this working correctly
|
||||
// not sure exactly where the camera is supposed to be facing etc
|
||||
}
|
||||
|
||||
public void resetStatue(int itemX, int itemY) {
|
||||
Maze maze = Maze.getMaze(itemX, itemY, player.heightLevel);
|
||||
if (maze == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// reset statue to start position
|
||||
GameEngine.itemHandler.moveItem(maze.statue, maze.startX, maze.startY);
|
||||
}
|
||||
|
||||
/* ITEMS */
|
||||
// 6888 - Guardian Statue
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* INTERFACES */
|
||||
// 15962 - Main interface
|
||||
// 15966 - Pizazz points
|
||||
// 15968 - Mazes solved
|
||||
|
||||
public static int ticks = 0;
|
||||
|
||||
public static void process() {
|
||||
for (Maze maze: Maze.values()) {
|
||||
if (!maze.initialized) {
|
||||
maze.initialized = true;
|
||||
GameEngine.itemHandler.createGlobalItem(maze.statue);
|
||||
}
|
||||
}
|
||||
for (Player p : PlayerHandler.players) {
|
||||
if (p == null) {
|
||||
continue;
|
||||
}
|
||||
updateInterface(p);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void updateInterface(Player player) {
|
||||
if (!Boundary.isIn(player, Boundary.MAGE_TRAINING_ARENA_TELEKINETIC)) {
|
||||
return;
|
||||
}
|
||||
player.getPacketSender().sendString("" + player.telekineticPoints, 15966);
|
||||
player.getPacketSender().sendString("" + player.telekineticMazesSolved, 15968);
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@ package com.rs2.game.items;
|
||||
|
||||
public class GroundItem {
|
||||
|
||||
public int itemId, itemX, itemY, itemAmount, itemController, hideTicks, removeTicks;
|
||||
public int itemId, itemX, itemY, itemH, itemAmount, itemController, hideTicks, removeTicks;
|
||||
|
||||
public String ownerName;
|
||||
|
||||
@@ -11,6 +11,7 @@ public class GroundItem {
|
||||
itemId = id;
|
||||
itemX = x;
|
||||
itemY = y;
|
||||
itemH = h;
|
||||
itemAmount = amount;
|
||||
itemController = controller;
|
||||
this.hideTicks = hideTicks;
|
||||
@@ -29,6 +30,10 @@ public class GroundItem {
|
||||
return itemY;
|
||||
}
|
||||
|
||||
public int getItemH() {
|
||||
return itemH;
|
||||
}
|
||||
|
||||
public int getItemAmount() {
|
||||
return itemAmount;
|
||||
}
|
||||
|
||||
@@ -2636,9 +2636,18 @@ public class ObjectsActions {
|
||||
else if (player.absY == 3300)
|
||||
player.getPlayerAssistant().movePlayer(player.absX, player.absY - 2, 0);
|
||||
break;
|
||||
case 10725: // Bone Pile
|
||||
case 10726: // Bone Pile
|
||||
case 10727: // Bone Pile
|
||||
case 10728: // Bone Pile
|
||||
player.getMageTrainingArena().graveyard.searchBonePile(objectType);
|
||||
break;
|
||||
case 10734: // Coin Collector
|
||||
player.getMageTrainingArena().alchemy.collectCoins();
|
||||
break;
|
||||
case 10735: // Food Chute
|
||||
player.getMageTrainingArena().graveyard.depositFood();
|
||||
break;
|
||||
case 10771:
|
||||
player.getPlayerAssistant().movePlayer(3369, 3307, 1);
|
||||
break;
|
||||
@@ -2653,8 +2662,7 @@ public class ObjectsActions {
|
||||
break;
|
||||
case 10778:
|
||||
// TODO: Require Pizazz progress hat equiped
|
||||
player.getDialogueHandler().sendStatement("This area is currently closed.");
|
||||
// player.getPlayerAssistant().startTeleport2(3336, 9718, 0); // Telekinetic floor 0
|
||||
player.getMageTrainingArena().telekinetic.goToMaze();
|
||||
break;
|
||||
case 10779:
|
||||
// TODO: Require Pizazz progress hat equiped
|
||||
@@ -2670,8 +2678,7 @@ public class ObjectsActions {
|
||||
break;
|
||||
case 10781:
|
||||
// TODO: Require Pizazz progress hat equiped
|
||||
player.getDialogueHandler().sendStatement("This area is currently closed.");
|
||||
// player.getPlayerAssistant().startTeleport2(3364, 9639, 1); // Graveyard training
|
||||
player.getPlayerAssistant().startTeleport2(3364, 9639, 1); // Graveyard training
|
||||
break;
|
||||
case 10782: // Leave mage training rooms
|
||||
player.getPlayerAssistant().startTeleport2(3363, 3318, 0);
|
||||
|
||||
@@ -824,6 +824,10 @@ public abstract class Player {
|
||||
getPacketSender().walkableInterface(15892);
|
||||
} else if (Boundary.isIn(this, Boundary.MAGE_TRAINING_ARENA_ENCHANTING)) {
|
||||
getPacketSender().walkableInterface(15917);
|
||||
} else if (Boundary.isIn(this, Boundary.MAGE_TRAINING_ARENA_TELEKINETIC)) {
|
||||
getPacketSender().walkableInterface(15962);
|
||||
} else if (Boundary.isIn(this, Boundary.MAGE_TRAINING_ARENA_GRAVEYARD)) {
|
||||
getPacketSender().walkableInterface(15931);
|
||||
} else {
|
||||
getPacketSender().sendMapState(0);
|
||||
if (!isSnowy) {
|
||||
@@ -1642,7 +1646,7 @@ public abstract class Player {
|
||||
crystalBowArrowCount, playerMagicBook, teleGfx, teleEndAnimation,
|
||||
teleHeight, teleX, teleY, rangeItemUsed, killingNpcIndex,
|
||||
totalDamageDealt, globalDamageDealt, oldNpcIndex, fightMode, attackTimer,
|
||||
bowSpecShot, ectofuntusWorshipped, graveyardPoints, alchemyPoints, enchantmentPoints, telekineticPoints;
|
||||
bowSpecShot, ectofuntusWorshipped, graveyardPoints, alchemyPoints, enchantmentPoints, telekineticPoints, telekineticMazesSolved;
|
||||
public boolean magicFailed, oldMagicFailed;
|
||||
/**
|
||||
* End
|
||||
@@ -2160,14 +2164,21 @@ public abstract class Player {
|
||||
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
|
||||
// remove any enchanting training items
|
||||
getMageTrainingArena().enchanting.clearItems();
|
||||
}
|
||||
if (Boundary.isIn(this, Boundary.MAGE_TRAINING_ARENA_GRAVEYARD) && !Boundary.isIn(teleportToX, teleportToY, teleHeight, Boundary.MAGE_TRAINING_ARENA_GRAVEYARD)) {
|
||||
// remove any enchanting training items
|
||||
getMageTrainingArena().graveyard.clearItems();
|
||||
}
|
||||
currentX = teleportToX - 8 * mapRegionX;
|
||||
currentY = teleportToY - 8 * mapRegionY;
|
||||
absX = teleportToX;
|
||||
absY = teleportToY;
|
||||
heightLevel = teleHeight >= 0 ? teleHeight : heightLevel >= 0 ? heightLevel : 0;
|
||||
int newHeight = teleHeight >= 0 ? teleHeight : heightLevel >= 0 ? heightLevel : 0;
|
||||
if (heightLevel != newHeight)
|
||||
GameEngine.itemHandler.reloadItems(this);
|
||||
heightLevel = newHeight;
|
||||
resetWalkingQueue();
|
||||
|
||||
teleportToX = teleportToY = teleHeight = -1;
|
||||
|
||||
@@ -769,6 +769,9 @@ public class PlayerAssistant {
|
||||
player.npcIndex = 0;
|
||||
player.playerIndex = 0;
|
||||
player.faceUpdate(0);
|
||||
if (player.heightLevel != height) {
|
||||
player.refresh = true;
|
||||
}
|
||||
player.teleHeight = height;
|
||||
player.startAnimation(714);
|
||||
player.teleTimer = 11;
|
||||
@@ -833,6 +836,9 @@ public class PlayerAssistant {
|
||||
player.npcIndex = 0;
|
||||
player.playerIndex = 0;
|
||||
player.faceUpdate(0);
|
||||
if (player.heightLevel != height) {
|
||||
player.refresh = true;
|
||||
}
|
||||
player.teleHeight = height;
|
||||
player.startAnimation(714);
|
||||
player.teleTimer = 11;
|
||||
@@ -2302,8 +2308,25 @@ public class PlayerAssistant {
|
||||
*/
|
||||
public void sendCameraCutscene(int x, int y, int height, int speed, int angle) {
|
||||
player.getOutStream().createFrame(177);
|
||||
player.getOutStream().writeByte(x / 64); //
|
||||
player.getOutStream().writeByte(y / 64); //
|
||||
player.getOutStream().writeByte(x); // divided by 64 apparently allows real world coords
|
||||
player.getOutStream().writeByte(y); // divided by 64 apparently allows real world coords
|
||||
player.getOutStream().writeWord(height); //
|
||||
player.getOutStream().writeByte(speed); //
|
||||
player.getOutStream().writeByte(angle);
|
||||
}
|
||||
|
||||
/**
|
||||
* anchors the camera to a specific view (for cutscenes)
|
||||
* @param x The X Coordinate (Within the player's loaded area)
|
||||
* @param y The Y Coordinate (Within the player's loaded area)
|
||||
* @param height The Height of Camera (not relative to the game world height)
|
||||
* @param speed The Camera Speed (Speed at which the camera turns to where it should point?)
|
||||
* @param angle The Camera Angle
|
||||
*/
|
||||
public void sendCameraCutscene2(int x, int y, int height, int speed, int angle) {
|
||||
player.getOutStream().createFrame(166);
|
||||
player.getOutStream().writeByte(x); //
|
||||
player.getOutStream().writeByte(y); //
|
||||
player.getOutStream().writeWord(height); //
|
||||
player.getOutStream().writeByte(speed); //
|
||||
player.getOutStream().writeByte(angle);
|
||||
|
||||
@@ -399,6 +399,7 @@ public class PlayerHandler {
|
||||
|
||||
if (plr.refresh) {
|
||||
GlobalDropsHandler.reset((Client)plr);
|
||||
GameEngine.itemHandler.reloadItems(plr);
|
||||
plr.refresh = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -425,6 +425,9 @@ public class PlayerSave {
|
||||
case "telekinetic-points":
|
||||
player.telekineticPoints = Integer.parseInt(token2);
|
||||
break;
|
||||
case "telekinetic-mazes-solved":
|
||||
player.telekineticMazesSolved = Integer.parseInt(token2);
|
||||
break;
|
||||
case "unlocked-bones-to-peaches":
|
||||
player.unlockedBonesToPeaches = Boolean.parseBoolean(token2);
|
||||
break;
|
||||
@@ -806,6 +809,8 @@ public class PlayerSave {
|
||||
characterfile.newLine();
|
||||
characterfile.write("telekinetic-points = " + player.telekineticPoints);
|
||||
characterfile.newLine();
|
||||
characterfile.write("telekinetic-mazes-solved = " + player.telekineticMazesSolved);
|
||||
characterfile.newLine();
|
||||
characterfile.write("unlocked-bones-to-peaches = " + player.unlockedBonesToPeaches);
|
||||
characterfile.newLine();
|
||||
String voidStatus = "";
|
||||
|
||||
@@ -35,6 +35,7 @@ import com.rs2.game.players.Player;
|
||||
import com.rs2.game.players.PlayerHandler;
|
||||
import com.rs2.net.packets.PacketType;
|
||||
import com.rs2.util.Misc;
|
||||
import com.rs2.world.Boundary;
|
||||
|
||||
/**
|
||||
* Clicking most buttons
|
||||
@@ -121,6 +122,9 @@ public class ClickingButtons implements PacketType {
|
||||
|
||||
|
||||
case 4135:
|
||||
if (System.currentTimeMillis() - player.boneDelay < 2000) {
|
||||
return;
|
||||
}
|
||||
if (player.inTrade) {
|
||||
player.getPacketSender().sendMessage(
|
||||
"You can't do this in trade!");
|
||||
@@ -133,9 +137,12 @@ public class ClickingButtons implements PacketType {
|
||||
player.getPacketSender().sendChatInterface(356);
|
||||
return;
|
||||
}
|
||||
if (Boundary.isIn(player, Boundary.MAGE_TRAINING_ARENA_GRAVEYARD)) {
|
||||
player.getMageTrainingArena().graveyard.bonesToFood(52);
|
||||
return;
|
||||
}
|
||||
if (!player.getItemAssistant().playerHasItem(526, 1)) {
|
||||
player.getPacketSender().sendMessage(
|
||||
"You don't have any bones!");
|
||||
player.getPacketSender().sendMessage("You don't have any bones!");
|
||||
return;
|
||||
}
|
||||
if (!player.getItemAssistant().playerHasItem(561, 1)
|
||||
@@ -149,22 +156,23 @@ public class ClickingButtons implements PacketType {
|
||||
player.getItemAssistant().deleteItem(561, 1);
|
||||
player.getItemAssistant().deleteItem(557, 2);
|
||||
player.getItemAssistant().deleteItem(555, 2);
|
||||
player.getPlayerAssistant().addSkillXP(40, 6);
|
||||
player.getPlayerAssistant().addSkillXP(25, 6);
|
||||
player.getPlayerAssistant().refreshSkill(GameConstants.MAGIC);
|
||||
player.startAnimation(722);
|
||||
player.gfx100(141);
|
||||
player.getPacketSender().sendShowTab(6);
|
||||
player.getPacketSender().sendSound(
|
||||
SoundList.BONES_TO_BANNAS, 100, 0);
|
||||
player.getPacketSender().sendSound(SoundList.BONES_TO_BANNAS, 100, 0);
|
||||
player.boneDelay = System.currentTimeMillis();
|
||||
do {
|
||||
player.getItemAssistant().deleteItem(526, 1);
|
||||
player.getItemAssistant().addItem(1963, 1);
|
||||
player.getItemAssistant().replaceItem(526, 1963);
|
||||
} while (player.getItemAssistant().playerHasItem(526, 1));
|
||||
}
|
||||
break;
|
||||
|
||||
case 62005:
|
||||
if (System.currentTimeMillis() - player.boneDelay < 2000) {
|
||||
return;
|
||||
}
|
||||
if (player.inTrade) {
|
||||
player.getPacketSender().sendMessage(
|
||||
"You can't do this in trade!");
|
||||
@@ -180,6 +188,10 @@ public class ClickingButtons implements PacketType {
|
||||
player.getPacketSender().sendChatInterface(356);
|
||||
return;
|
||||
}
|
||||
if (Boundary.isIn(player, Boundary.MAGE_TRAINING_ARENA_GRAVEYARD)) {
|
||||
player.getMageTrainingArena().graveyard.bonesToFood(53);
|
||||
return;
|
||||
}
|
||||
if (!player.getItemAssistant().playerHasItem(526, 1)) {
|
||||
player.getPacketSender().sendMessage("You don't have any bones!");
|
||||
return;
|
||||
@@ -197,15 +209,14 @@ public class ClickingButtons implements PacketType {
|
||||
player.getItemAssistant().deleteItem(561, 2);
|
||||
player.getItemAssistant().deleteItem(557, 4);
|
||||
player.getItemAssistant().deleteItem(555, 4);
|
||||
player.getPlayerAssistant().addSkillXP(40, 6);
|
||||
player.getPlayerAssistant().addSkillXP(35.5, 6);
|
||||
player.getPlayerAssistant().refreshSkill(GameConstants.MAGIC);
|
||||
player.startAnimation(722);
|
||||
player.gfx100(311);
|
||||
player.getPacketSender().sendShowTab(6);
|
||||
player.boneDelay = System.currentTimeMillis();
|
||||
do {
|
||||
player.getItemAssistant().deleteItem(526, 1);
|
||||
player.getItemAssistant().addItem(6883, 1);
|
||||
player.getItemAssistant().replaceItem(526, 6883);
|
||||
} while (player.getItemAssistant().playerHasItem(526, 1));
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -118,6 +118,7 @@ public class Commands implements PacketType {
|
||||
case "pos":
|
||||
case "loc":
|
||||
player.getPacketSender().sendMessage("Your coords are [" + player.absX + ", " + player.absY + ", " + player.heightLevel + "]");
|
||||
player.getPacketSender().sendMessage("local coord are [" + player.getLocalX() + ", " + player.getLocalY() + "]");
|
||||
break;
|
||||
case "energy":
|
||||
player.getPacketSender().sendMessage(String.format("Run energy: %d", (int) player.playerEnergy));
|
||||
@@ -685,16 +686,16 @@ public class Commands implements PacketType {
|
||||
player.getPlayerAssistant().movePlayer(Integer.parseInt(arguments[0]), Integer.parseInt(arguments[1]), Integer.parseInt(arguments[2]));
|
||||
break;
|
||||
case "up":
|
||||
player.getPacketSender().sendMessage("You are now on height level " + (player.heightLevel + 1) + ".");
|
||||
player.getPlayerAssistant().movePlayer(player.absX, player.absY, player.heightLevel + 1);
|
||||
player.getPacketSender().sendMessage("You are now on height level " + player.heightLevel + ".");
|
||||
break;
|
||||
case "up2":
|
||||
player.getPlayerAssistant().movePlayer(player.absX, player.absY - 6400, player.heightLevel);
|
||||
player.getPacketSender().sendMessage("You are now on height level " + player.heightLevel + ".");
|
||||
break;
|
||||
case "down":
|
||||
player.getPacketSender().sendMessage("You are now on height level " + (player.heightLevel - 1) + ".");
|
||||
player.getPlayerAssistant().movePlayer(player.absX, player.absY, player.heightLevel - 1);
|
||||
player.getPacketSender().sendMessage("You are now on height level " + player.heightLevel + ".");
|
||||
break;
|
||||
case "down2":
|
||||
player.getPlayerAssistant().movePlayer(player.absX, player.absY + 6400, player.heightLevel);
|
||||
@@ -795,12 +796,24 @@ public class Commands implements PacketType {
|
||||
player.getPacketSender().sendMessage("Sound could not be sent.");
|
||||
}
|
||||
break;
|
||||
case "ccs":
|
||||
case "cameracutscene":
|
||||
player.getPlayerAssistant().sendCameraCutscene(player.getX(), player.getY(), 10, 10, 10); //Test numbers
|
||||
if (arguments.length < 5) {
|
||||
return;
|
||||
}
|
||||
player.getPlayerAssistant().sendCameraCutscene(Integer.parseInt(arguments[0]), Integer.parseInt(arguments[1]), Integer.parseInt(arguments[2]), Integer.parseInt(arguments[3]), Integer.parseInt(arguments[4])); //Test numbers
|
||||
break;
|
||||
case "ccs2":
|
||||
case "cameracutscene2":
|
||||
if (arguments.length < 5) {
|
||||
return;
|
||||
}
|
||||
player.getPlayerAssistant().sendCameraCutscene2(Integer.parseInt(arguments[0]), Integer.parseInt(arguments[1]), Integer.parseInt(arguments[2]), Integer.parseInt(arguments[3]), Integer.parseInt(arguments[4])); //Test numbers
|
||||
break;
|
||||
case "camerashake":
|
||||
player.getPlayerAssistant().sendCameraShake(1, 9, 1, 9); //these are just test numbers
|
||||
break;
|
||||
case "cr":
|
||||
case "camerareset":
|
||||
player.getPlayerAssistant().sendCameraReset(); //Resets the camera to the normal player view
|
||||
break;
|
||||
|
||||
@@ -13,6 +13,11 @@ public class ItemClick2OnGroundItem implements PacketType {
|
||||
final int itemY = player.getInStream().readSignedWordBigEndianA();
|
||||
final int itemId = player.getInStream().readUnsignedWordA();
|
||||
System.out.println("ItemClick2OnGroundItem - " + player.playerName + " - " + itemId + " - " + itemX + " - " + itemY);
|
||||
// Reset position for the telekinetic guardian statue
|
||||
if (itemId == 6888) {
|
||||
player.getMageTrainingArena().telekinetic.resetStatue(itemX, itemY);
|
||||
return;
|
||||
}
|
||||
if (player.absX != itemX || player.absY != itemY) {
|
||||
player.getPacketSender().sendMessage("You can't do that there!");
|
||||
return;
|
||||
|
||||
@@ -6,9 +6,10 @@ import com.rs2.event.CycleEvent;
|
||||
import com.rs2.event.CycleEventContainer;
|
||||
import com.rs2.event.CycleEventHandler;
|
||||
import com.rs2.game.content.combat.magic.MagicData;
|
||||
import com.rs2.game.items.ItemData;
|
||||
import com.rs2.game.players.Player;
|
||||
import com.rs2.net.packets.PacketType;
|
||||
import com.rs2.world.GlobalDropsHandler;
|
||||
import com.rs2.world.clip.PathFinder;
|
||||
|
||||
/**
|
||||
* Magic on floor items
|
||||
@@ -22,95 +23,74 @@ public class MagicOnFloorItems implements PacketType {
|
||||
int itemId = player.getInStream().readUnsignedWord();
|
||||
final int itemX = player.getInStream().readSignedWordBigEndian();
|
||||
player.getInStream().readUnsignedWordA();
|
||||
player.stopMovement();
|
||||
|
||||
if (!GameEngine.itemHandler.itemExists(itemId, itemX, itemY)) {
|
||||
player.stopMovement();
|
||||
player.getPacketSender().sendMessage("This item no longer exist.");
|
||||
return;
|
||||
}
|
||||
player.usingMagic = true;
|
||||
if (System.currentTimeMillis() - player.teleGrabDelay <= 1550) {
|
||||
return;
|
||||
}
|
||||
if (player.getItemAssistant().freeSlots(itemId, 1) <= 0) {
|
||||
player.getPacketSender().sendMessage("You don't have enough space in your inventory.");
|
||||
return;
|
||||
}
|
||||
if (!player.goodDistance(player.getX(), player.getY(), itemX, itemY, 12)) {
|
||||
return;
|
||||
}
|
||||
if (!PathFinder.isProjectilePathClear(player.getX(), player.getY(), player.heightLevel, itemX, itemY)) {
|
||||
player.getPacketSender().sendMessage("You can't see this item.");
|
||||
return;
|
||||
}
|
||||
|
||||
player.endCurrentTask();
|
||||
player.usingMagic = true;
|
||||
if (!player.getCombatAssistant().checkMagicReqs(51)) {
|
||||
player.stopMovement();
|
||||
return;
|
||||
}
|
||||
|
||||
if ((player.getItemAssistant().freeSlots() >= 1 || player.getItemAssistant()
|
||||
.playerHasItem(itemId, 1))
|
||||
&& ItemData.itemStackable[itemId]
|
||||
|| player.getItemAssistant().freeSlots() > 0
|
||||
&& !ItemData.itemStackable[itemId]) {
|
||||
if (player.goodDistance(player.getX(), player.getY(), itemX, itemY, 12)) {
|
||||
player.walkingToItem = true;
|
||||
int offY = (player.getX() - itemX) * -1;
|
||||
int offX = (player.getY() - itemY) * -1;
|
||||
player.teleGrabX = itemX;
|
||||
player.teleGrabY = itemY;
|
||||
player.teleGrabItem = itemId;
|
||||
player.turnPlayerTo(itemX, itemY);
|
||||
player.teleGrabDelay = System.currentTimeMillis();
|
||||
player.startAnimation(MagicData.MAGIC_SPELLS[51][2]);
|
||||
player.gfx100(MagicData.MAGIC_SPELLS[51][3]);
|
||||
player.getPlayerAssistant().createPlayersStillGfx(144, itemX, itemY,
|
||||
0, 72);
|
||||
player.getPlayerAssistant().createPlayersProjectile(player.getX(),
|
||||
player.getY(), offX, offY, 50, 70,
|
||||
MagicData.MAGIC_SPELLS[51][4], 50, 10, 0, 50);
|
||||
player.getPlayerAssistant().addSkillXP(
|
||||
MagicData.MAGIC_SPELLS[51][7], 6);
|
||||
player.getPlayerAssistant().refreshSkill(GameConstants.MAGIC);
|
||||
player.stopMovement();
|
||||
CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() {
|
||||
@Override
|
||||
public void execute(CycleEventContainer container) {
|
||||
if (!player.walkingToItem) {
|
||||
stop();
|
||||
}
|
||||
if (System.currentTimeMillis() - player.teleGrabDelay > 1550
|
||||
&& player.usingMagic) {
|
||||
if (GameEngine.itemHandler.itemExists(player.teleGrabItem,
|
||||
player.teleGrabX, player.teleGrabY)
|
||||
&& player.goodDistance(player.getX(), player.getY(),
|
||||
itemX, itemY, 12)) {
|
||||
GameEngine.itemHandler.removeGroundItem(player,
|
||||
player.teleGrabItem, player.teleGrabX,
|
||||
player.teleGrabY, true);
|
||||
player.usingMagic = false;
|
||||
container.stop();
|
||||
}
|
||||
}
|
||||
if (itemId == 6888 && player.goodDistance(player.getX(), player.getY(), itemX, itemY, 20)) {
|
||||
player.getMageTrainingArena().telekinetic.moveStatue(itemX, itemY);
|
||||
return;
|
||||
}
|
||||
|
||||
player.walkingToItem = true;
|
||||
int offY = (player.getX() - itemX) * -1;
|
||||
int offX = (player.getY() - itemY) * -1;
|
||||
player.teleGrabX = itemX;
|
||||
player.teleGrabY = itemY;
|
||||
player.teleGrabItem = itemId;
|
||||
player.turnPlayerTo(itemX, itemY);
|
||||
player.teleGrabDelay = System.currentTimeMillis();
|
||||
player.startAnimation(MagicData.MAGIC_SPELLS[51][2]);
|
||||
player.gfx100(MagicData.MAGIC_SPELLS[51][3]);
|
||||
player.getPlayerAssistant().createPlayersStillGfx(144, itemX, itemY, 0, 72);
|
||||
player.getPlayerAssistant().createPlayersProjectile(player.getX(),
|
||||
player.getY(), offX, offY, 50, 70,
|
||||
MagicData.MAGIC_SPELLS[51][4], 50, 10, 0, 50);
|
||||
player.getPlayerAssistant().addSkillXP(MagicData.MAGIC_SPELLS[51][7], 6);
|
||||
player.getPlayerAssistant().refreshSkill(GameConstants.MAGIC);
|
||||
player.stopMovement();
|
||||
CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() {
|
||||
@Override
|
||||
public void execute(CycleEventContainer container) {
|
||||
if (!player.walkingToItem) {
|
||||
container.stop();
|
||||
} else if (System.currentTimeMillis() - player.teleGrabDelay > 1550) {
|
||||
if (GameEngine.itemHandler.itemExists(player.teleGrabItem, player.teleGrabX, player.teleGrabY)) {
|
||||
GameEngine.itemHandler.removeGroundItem(player, player.teleGrabItem, player.teleGrabX, player.teleGrabY, true);
|
||||
GlobalDropsHandler.pickup(player, player.teleGrabItem, player.teleGrabX, player.teleGrabY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
player.walkingToItem = false;
|
||||
}
|
||||
}, 1);
|
||||
stop();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
player.getPacketSender().sendMessage(
|
||||
"You don't have enough space in your inventory.");
|
||||
player.stopMovement();
|
||||
}
|
||||
|
||||
if (player.goodDistance(player.getX(), player.getY(), itemX, itemY, 12)) {
|
||||
int offY = (player.getX() - itemX) * -1;
|
||||
int offX = (player.getY() - itemY) * -1;
|
||||
player.teleGrabX = itemX;
|
||||
player.teleGrabY = itemY;
|
||||
player.teleGrabItem = itemId;
|
||||
player.turnPlayerTo(itemX, itemY);
|
||||
player.teleGrabDelay = System.currentTimeMillis();
|
||||
player.startAnimation(MagicData.MAGIC_SPELLS[51][2]);
|
||||
player.gfx100(MagicData.MAGIC_SPELLS[51][3]);
|
||||
player.getPlayerAssistant().createPlayersStillGfx(144, itemX, itemY, 0,
|
||||
72);
|
||||
player.getPlayerAssistant().createPlayersProjectile(player.getX(), player.getY(),
|
||||
offX, offY, 50, 70, MagicData.MAGIC_SPELLS[51][4], 50, 10,
|
||||
0, 50);
|
||||
player.getPlayerAssistant().addSkillXP(MagicData.MAGIC_SPELLS[51][7], 6);
|
||||
player.getPlayerAssistant().refreshSkill(GameConstants.MAGIC);
|
||||
player.stopMovement();
|
||||
}
|
||||
@Override
|
||||
public void stop() {
|
||||
player.usingMagic = false;
|
||||
player.walkingToItem = false;
|
||||
}
|
||||
}, 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -13,7 +13,9 @@ import com.rs2.game.items.impl.RareProtection;
|
||||
import com.rs2.game.players.Player;
|
||||
import com.rs2.net.packets.PacketType;
|
||||
import com.rs2.util.GameLogger;
|
||||
import com.rs2.world.Boundary;
|
||||
import com.rs2.world.GlobalDropsHandler;
|
||||
import com.rs2.world.clip.PathFinder;
|
||||
|
||||
/**
|
||||
* Pickup Item
|
||||
@@ -26,13 +28,19 @@ public class PickupItem implements PacketType {
|
||||
player.pItemY = player.getInStream().readSignedWordBigEndian();
|
||||
player.pItemId = player.getInStream().readUnsignedWord();
|
||||
player.pItemX = player.getInStream().readSignedWordBigEndian();
|
||||
if (player.getItemAssistant().freeSlots() < 1)
|
||||
{
|
||||
if (!(player.getItemAssistant().playerHasItem(player.pItemId) && player.getItemAssistant().isStackable(player.pItemId)))
|
||||
{
|
||||
player.getPacketSender().sendMessage("Not enough space in your inventory.");
|
||||
return;
|
||||
}
|
||||
// Cannot pickup the telekinetic guardian statue, should show overview of current maze
|
||||
if (player.pItemId == 6888) {
|
||||
player.getMageTrainingArena().telekinetic.observeStatue(player.pItemX, player.pItemY);
|
||||
return;
|
||||
}
|
||||
// Disabled for now, doesn't detect open doors etc
|
||||
// if (!PathFinder.getPathFinder().accessible(player.getX(), player.getY(), player.heightLevel, player.pItemX, player.pItemY)) {
|
||||
// player.getPacketSender().sendMessage("You can't reach this item.");
|
||||
// return;
|
||||
// }
|
||||
if (player.getItemAssistant().freeSlots(player.pItemId, 1) <= 0) {
|
||||
player.getPacketSender().sendMessage("Not enough space in your inventory.");
|
||||
return;
|
||||
}
|
||||
if (Math.abs(player.getX() - player.pItemX) > 25 || Math.abs(player.getY() - player.pItemY) > 25) {
|
||||
player.resetWalkingQueue();
|
||||
@@ -53,7 +61,8 @@ public class PickupItem implements PacketType {
|
||||
if (!RareProtection.removeItemOtherActions(player, player.pItemId)) {
|
||||
return;
|
||||
}
|
||||
if (player.pItemY > 9817 && player.pItemY < 9825 && player.pItemX > 3186 && player.pItemX < 3197 || player.pItemX > 3107 && player.pItemX < 3113 && player.pItemY > 3155 && player.pItemY < 3159 && player.heightLevel == 2) {
|
||||
if (Boundary.isIn(player.pItemX, player.pItemY, player.heightLevel, Boundary.VARROCK_BANK_BASEMENT)
|
||||
|| Boundary.isIn(player.pItemX, player.pItemY, player.heightLevel, Boundary.MAGE_TOWER_CAGE)) {
|
||||
player.getPacketSender().sendMessage("You can't pick up these items!");
|
||||
return;
|
||||
}
|
||||
@@ -71,35 +80,30 @@ public class PickupItem implements PacketType {
|
||||
}
|
||||
SkillHandler.resetSkills(player);
|
||||
player.getCombatAssistant().resetPlayerAttack();
|
||||
player.walkingToItem = true;
|
||||
player.soundDone = false;
|
||||
CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() {
|
||||
@Override
|
||||
public void execute(CycleEventContainer container) {
|
||||
if (!player.walkingToItem) {
|
||||
container.stop();
|
||||
}
|
||||
if ((player.getX() == player.pItemX && player.getY() == player.pItemY
|
||||
|| player.getX() - 1 == player.pItemX && player.getY() == player.pItemY
|
||||
|| player.getY() - 1 == player.pItemY && player.getX() == player.pItemX
|
||||
|| player.getX() + 1 == player.pItemX && player.getY() == player.pItemY
|
||||
|| player.getY() + 1 == player.pItemY && player.getX() == player.pItemX
|
||||
||player.getX() == player.pItemX && player.getY() == player.pItemY) && player.walkingToItem) {
|
||||
container.stop();
|
||||
}
|
||||
player.walkingToItem = true;
|
||||
player.soundDone = false;
|
||||
CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() {
|
||||
@Override
|
||||
public void execute(CycleEventContainer container) {
|
||||
if (!player.walkingToItem) {
|
||||
container.stop();
|
||||
}
|
||||
if (player.goodDistance(player.getX(), player.getY(), player.pItemX, player.pItemY, 1) && player.walkingToItem) {
|
||||
container.stop();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
player.walkingToItem = false;
|
||||
GameEngine.itemHandler.removeGroundItem(player, player.pItemId, player.pItemX, player.pItemY, true);
|
||||
GlobalDropsHandler.pickup(player, player.pItemId, player.pItemX, player.pItemY);
|
||||
if (!player.soundDone)
|
||||
{
|
||||
player.soundDone = true;
|
||||
player.getPacketSender().sendSound(SoundList.ITEM_PICKUP, 100, 0);
|
||||
}
|
||||
}
|
||||
}, 1);
|
||||
@Override
|
||||
public void stop() {
|
||||
player.walkingToItem = false;
|
||||
GameEngine.itemHandler.removeGroundItem(player, player.pItemId, player.pItemX, player.pItemY, true);
|
||||
GlobalDropsHandler.pickup(player, player.pItemId, player.pItemX, player.pItemY);
|
||||
if (!player.soundDone)
|
||||
{
|
||||
player.soundDone = true;
|
||||
player.getPacketSender().sendSound(SoundList.ITEM_PICKUP, 100, 0);
|
||||
}
|
||||
}
|
||||
}, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,17 +14,16 @@ import com.rs2.game.players.PlayerHandler;
|
||||
public class Boundary {
|
||||
|
||||
|
||||
int minX, highX, minY, highY;
|
||||
int height;
|
||||
public int minX, highX, minY, highY, height;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param minX
|
||||
* The south-west x coordinate
|
||||
* @param minY
|
||||
* The south-west y coordinate
|
||||
* @param highX
|
||||
* The north-east x coordinate
|
||||
* @param minY
|
||||
* The south-west y coordinate
|
||||
* @param highY
|
||||
* The north-east y coordinate
|
||||
*/
|
||||
@@ -40,10 +39,10 @@ public class Boundary {
|
||||
*
|
||||
* @param minX
|
||||
* The south-west x coordinate
|
||||
* @param minY
|
||||
* The south-west y coordinate
|
||||
* @param highX
|
||||
* The north-east x coordinate
|
||||
* @param minY
|
||||
* The south-west y coordinate
|
||||
* @param highY
|
||||
* The north-east y coordinate
|
||||
* @param height
|
||||
@@ -301,6 +300,8 @@ public class Boundary {
|
||||
new Boundary(3087, 3094, 3251, 3255), new Boundary(3121, 3130, 3240, 3246), new Boundary(3102, 3112, 3162, 3165), new Boundary(3107, 3111, 3166, 3166), new Boundary(3103, 3115, 3157, 3161),
|
||||
new Boundary(3105, 3114, 3156, 3156), new Boundary(3105, 3113, 3155, 3155), new Boundary(3106, 3112, 3154, 3154), new Boundary(3092, 3097, 3240, 3246) };
|
||||
|
||||
public static final Boundary VARROCK_BANK_BASEMENT = new Boundary(3186, 3197, 9817, 9824, 0);
|
||||
public static final Boundary MAGE_TOWER_CAGE = new Boundary(3108, 3112, 3156, 3158, 2);
|
||||
public static final Boundary ARDOUGNE_ZOO = new Boundary(2593, 2639, 3265, 3288);
|
||||
public static final Boundary APE_ATOLL = new Boundary(2694, 2811, 2691, 2805);
|
||||
public static final Boundary BARROWS = new Boundary(3543, 3584, 3265, 3311);
|
||||
@@ -313,7 +314,9 @@ public class Boundary {
|
||||
public static final Boundary PARTY_ROOM = new Boundary(2727, 2746, 3460, 3479);
|
||||
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);
|
||||
public static final Boundary MAGE_TRAINING_ARENA_GRAVEYARD = new Boundary(3340, 3386, 9616, 9662, 1);
|
||||
public static final Boundary MAGE_TRAINING_ARENA_ALCHEMY = new Boundary(3350, 3379, 9616, 9655, 2);
|
||||
public static final Boundary MAGE_TRAINING_ARENA_TELEKINETIC = new Boundary(3329, 3390, 9665, 9726);
|
||||
|
||||
}
|
||||
@@ -146,9 +146,9 @@ public class GlobalDropsHandler {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean itemExists(int a, int b, int c, boolean yes) {
|
||||
public static boolean itemExists(int itemID, int itemX, int itemY, boolean yes) {
|
||||
for (GlobalDrop drop : spawnedDrops) {
|
||||
if (drop.getId() == a && drop.getX() == b && drop.getY() == c) {
|
||||
if (drop.getId() == itemID && drop.getX() == itemX && drop.getY() == itemY) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -159,12 +159,12 @@ public class GlobalDropsHandler {
|
||||
* Pick up an item at the given location
|
||||
*
|
||||
* @param player the Player
|
||||
* @param a item id
|
||||
* @param b cord x
|
||||
* @param c cord y
|
||||
* @param itemID item id
|
||||
* @param itemX cord x
|
||||
* @param itemY cord y
|
||||
*/
|
||||
public static void pickup(Player player, int a, int b, int c) {
|
||||
GlobalDrop drop = itemExists(a, b, c);
|
||||
public static void pickup(Player player, int itemID, int itemX, int itemY) {
|
||||
GlobalDrop drop = itemExists(itemID, itemX, itemY);
|
||||
if (drop == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -58,11 +58,7 @@ public class ItemHandler {
|
||||
|
||||
public int itemAmount(String name, int itemId, int itemX, int itemY) {
|
||||
for (GroundItem i : items) {
|
||||
if (i.hideTicks >= 1 && i.getName().equalsIgnoreCase(name)) {
|
||||
if (i.getItemId() == itemId && i.getItemX() == itemX && i.getItemY() == itemY) {
|
||||
return i.getItemAmount();
|
||||
}
|
||||
} else if (i.hideTicks < 1) {
|
||||
if (i.getName().equalsIgnoreCase(name)) {
|
||||
if (i.getItemId() == itemId && i.getItemX() == itemX && i.getItemY() == itemY) {
|
||||
return i.getItemAmount();
|
||||
}
|
||||
@@ -76,25 +72,42 @@ public class ItemHandler {
|
||||
**/
|
||||
public boolean itemExists(int itemId, int itemX, int itemY) {
|
||||
for (GroundItem i : items) {
|
||||
if (i.getItemId() == itemId && i.getItemX() == itemX
|
||||
&& i.getItemY() == itemY) {
|
||||
if (i.getItemId() == itemId && i.getItemX() == itemX && i.getItemY() == itemY) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (GlobalDropsHandler.itemExists(itemId, itemX, itemY, true)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void moveItem(GroundItem item, int itemX, int itemY) {
|
||||
if (items.remove(item)) {
|
||||
int oldX = item.itemX;
|
||||
int oldY = item.itemY;
|
||||
item.itemX = itemX;
|
||||
item.itemY = itemY;
|
||||
items.add(item);
|
||||
for (Player p: PlayerHandler.players) {
|
||||
if (p == null) continue;
|
||||
p.getPacketSender().removeGroundItem(item.itemId, oldX, oldY, item.itemAmount);
|
||||
reloadItems(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reloads any items if you enter a new region
|
||||
**/
|
||||
public void reloadItems(Player c) {
|
||||
for (GroundItem i : items) {
|
||||
if (c != null) {
|
||||
if (c.getItemAssistant().tradeable(i.getItemId())
|
||||
|| i.getName().equalsIgnoreCase(c.playerName)) {
|
||||
if (c.distanceToPoint(i.getItemX(), i.getItemY()) <= 60) {
|
||||
if (i.hideTicks > 0
|
||||
&& i.getName().equalsIgnoreCase(c.playerName)) {
|
||||
// If it's a players item or tradeable
|
||||
if (c.getItemAssistant().tradeable(i.getItemId()) || i.getName().equalsIgnoreCase(c.playerName)) {
|
||||
// Make sure item on the same height and within 60 blocks
|
||||
if (c.getH() == i.getItemH() && c.distanceToPoint(i.getItemX(), i.getItemY()) <= 60) {
|
||||
if (i.hideTicks > 0 && i.getName().equalsIgnoreCase(c.playerName)) {
|
||||
c.getPacketSender().removeGroundItem(
|
||||
i.getItemId(), i.getItemX(), i.getItemY(),
|
||||
i.getItemAmount());
|
||||
@@ -175,7 +188,6 @@ public class ItemHandler {
|
||||
}
|
||||
if (!com.rs2.game.items.ItemData.itemStackable[itemId] && itemAmount > 0) {
|
||||
for (int j = 0; j < itemAmount; j++) {
|
||||
c.getPacketSender().createGroundItem(itemId, itemX, itemY, 1);
|
||||
GroundItem item = new GroundItem(itemId, itemX, itemY, c.getH(), 1, c.playerId, HIDE_TICKS, PlayerHandler.players[playerId].playerName);
|
||||
addItem(item);
|
||||
String itemName = ItemAssistant.getItemName(itemId).toLowerCase();
|
||||
@@ -186,7 +198,6 @@ public class ItemHandler {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
c.getPacketSender().createGroundItem(itemId, itemX, itemY, itemAmount);
|
||||
GroundItem item = new GroundItem(itemId, itemX, itemY, c.getH(), itemAmount, c.playerId, HIDE_TICKS, PlayerHandler.players[playerId].playerName);
|
||||
addItem(item);
|
||||
String itemName = ItemAssistant.getItemName(itemId).toLowerCase();
|
||||
@@ -196,6 +207,7 @@ public class ItemHandler {
|
||||
}
|
||||
}
|
||||
}
|
||||
reloadItems(c);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,6 +215,9 @@ public class ItemHandler {
|
||||
* Shows items for everyone who is within 60 squares
|
||||
**/
|
||||
public void createGlobalItem(GroundItem i) {
|
||||
if (!itemExists(i.getItemId(), i.getItemX(), i.getItemY())) {
|
||||
addItem(i);
|
||||
}
|
||||
for (Player p : PlayerHandler.players) {
|
||||
if (p != null) {
|
||||
Client person = (Client) p;
|
||||
@@ -212,7 +227,7 @@ public class ItemHandler {
|
||||
&& person.playerId != i.getItemController()) {
|
||||
continue;
|
||||
}
|
||||
if (person.distanceToPoint(i.getItemX(), i.getItemY()) <= 60) {
|
||||
if (person.getH() == i.getItemH() && person.distanceToPoint(i.getItemX(), i.getItemY()) <= 60) {
|
||||
person.getPacketSender().createGroundItem(
|
||||
i.getItemId(), i.getItemX(), i.getItemY(),
|
||||
i.getItemAmount());
|
||||
@@ -293,8 +308,7 @@ public class ItemHandler {
|
||||
Client person = (Client) p;
|
||||
if (person != null) {
|
||||
if (person.distanceToPoint(itemX, itemY) <= 60) {
|
||||
person.getPacketSender().removeGroundItem(itemId,
|
||||
itemX, itemY, itemAmount);
|
||||
person.getPacketSender().removeGroundItem(itemId, itemX, itemY, itemAmount);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -460,6 +474,7 @@ public class ItemHandler {
|
||||
try {
|
||||
FileWriter fileWriter = new FileWriter("item-dump.json");
|
||||
fileWriter.write(array.toString());
|
||||
fileWriter.close();
|
||||
characterfile.close();
|
||||
} catch (IOException e) {
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user