mirror of
https://github.com/2006-Scape/2006Scape.git
synced 2026-07-03 00:31:51 +00:00
a9d45373e0
Added proper object size calculations. Removed old objectDistance code. Added current task support, allows easy creation of player tasks that cannot duplicate.
115 lines
3.7 KiB
Java
115 lines
3.7 KiB
Java
package redone.net.packets.impl;
|
|
|
|
import redone.Server;
|
|
import redone.event.CycleEvent;
|
|
import redone.event.CycleEventContainer;
|
|
import redone.event.CycleEventHandler;
|
|
import redone.game.content.combat.magic.MagicData;
|
|
import redone.game.items.Item;
|
|
import redone.game.players.Client;
|
|
import redone.net.packets.PacketType;
|
|
|
|
/**
|
|
* Magic on floor items
|
|
**/
|
|
public class MagicOnFloorItems implements PacketType {
|
|
|
|
@Override
|
|
public void processPacket(final Client c, int packetType, int packetSize) {
|
|
final int itemY = c.getInStream().readSignedWordBigEndian();
|
|
int itemId = c.getInStream().readUnsignedWord();
|
|
final int itemX = c.getInStream().readSignedWordBigEndian();
|
|
c.getInStream().readUnsignedWordA();
|
|
|
|
if (!Server.itemHandler.itemExists(itemId, itemX, itemY)) {
|
|
c.stopMovement();
|
|
return;
|
|
}
|
|
c.usingMagic = true;
|
|
c.endCurrentTask();
|
|
if (!c.getCombatAssistant().checkMagicReqs(51)) {
|
|
c.stopMovement();
|
|
return;
|
|
}
|
|
|
|
if ((c.getItemAssistant().freeSlots() >= 1 || c.getItemAssistant()
|
|
.playerHasItem(itemId, 1))
|
|
&& Item.itemStackable[itemId]
|
|
|| c.getItemAssistant().freeSlots() > 0
|
|
&& !Item.itemStackable[itemId]) {
|
|
if (c.goodDistance(c.getX(), c.getY(), itemX, itemY, 12)) {
|
|
c.walkingToItem = true;
|
|
int offY = (c.getX() - itemX) * -1;
|
|
int offX = (c.getY() - itemY) * -1;
|
|
c.teleGrabX = itemX;
|
|
c.teleGrabY = itemY;
|
|
c.teleGrabItem = itemId;
|
|
c.turnPlayerTo(itemX, itemY);
|
|
c.teleGrabDelay = System.currentTimeMillis();
|
|
c.startAnimation(MagicData.MAGIC_SPELLS[51][2]);
|
|
c.gfx100(MagicData.MAGIC_SPELLS[51][3]);
|
|
c.getPlayerAssistant().createPlayersStillGfx(144, itemX, itemY,
|
|
0, 72);
|
|
c.getPlayerAssistant().createPlayersProjectile(c.getX(),
|
|
c.getY(), offX, offY, 50, 70,
|
|
MagicData.MAGIC_SPELLS[51][4], 50, 10, 0, 50);
|
|
c.getPlayerAssistant().addSkillXP(
|
|
MagicData.MAGIC_SPELLS[51][7], 6);
|
|
c.getPlayerAssistant().refreshSkill(6);
|
|
c.stopMovement();
|
|
CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
|
|
@Override
|
|
public void execute(CycleEventContainer container) {
|
|
if (!c.walkingToItem) {
|
|
stop();
|
|
}
|
|
if (System.currentTimeMillis() - c.teleGrabDelay > 1550
|
|
&& c.usingMagic) {
|
|
if (Server.itemHandler.itemExists(c.teleGrabItem,
|
|
c.teleGrabX, c.teleGrabY)
|
|
&& c.goodDistance(c.getX(), c.getY(),
|
|
itemX, itemY, 12)) {
|
|
Server.itemHandler.removeGroundItem(c,
|
|
c.teleGrabItem, c.teleGrabX,
|
|
c.teleGrabY, true);
|
|
c.usingMagic = false;
|
|
container.stop();
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void stop() {
|
|
c.walkingToItem = false;
|
|
}
|
|
}, 1);
|
|
}
|
|
} else {
|
|
c.getActionSender().sendMessage(
|
|
"You don't have enough space in your inventory.");
|
|
c.stopMovement();
|
|
}
|
|
|
|
if (c.goodDistance(c.getX(), c.getY(), itemX, itemY, 12)) {
|
|
int offY = (c.getX() - itemX) * -1;
|
|
int offX = (c.getY() - itemY) * -1;
|
|
c.teleGrabX = itemX;
|
|
c.teleGrabY = itemY;
|
|
c.teleGrabItem = itemId;
|
|
c.turnPlayerTo(itemX, itemY);
|
|
c.teleGrabDelay = System.currentTimeMillis();
|
|
c.startAnimation(MagicData.MAGIC_SPELLS[51][2]);
|
|
c.gfx100(MagicData.MAGIC_SPELLS[51][3]);
|
|
c.getPlayerAssistant().createPlayersStillGfx(144, itemX, itemY, 0,
|
|
72);
|
|
c.getPlayerAssistant().createPlayersProjectile(c.getX(), c.getY(),
|
|
offX, offY, 50, 70, MagicData.MAGIC_SPELLS[51][4], 50, 10,
|
|
0, 50);
|
|
c.getPlayerAssistant().addSkillXP(MagicData.MAGIC_SPELLS[51][7], 6);
|
|
c.getPlayerAssistant().refreshSkill(6);
|
|
c.stopMovement();
|
|
}
|
|
}
|
|
|
|
}
|