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:
Danial
2021-10-05 16:01:16 +13:00
committed by GitHub
parent c526aa5f4d
commit 2d8ae82086
22 changed files with 719 additions and 193 deletions
@@ -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);
}
}