Files
2006Scape/2006Redone Server/src/redone/net/packets/impl/MagicOnFloorItems.java
T
Michael Sasse a9d45373e0 This update resolves dginovker/2006rebotted#166
Added proper object size calculations.
Removed old objectDistance code.
Added current task support, allows easy creation of player tasks that cannot duplicate.
2019-10-26 19:43:19 -05:00

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();
}
}
}