Hey Guys i am currently trying to get Third and Fourth Click object actions to work on ruse.
They Show up fine in the client but when i try to use them i get this error
Code:
java.lang.NullPointerException
at com.ruseps.net.packet.impl.ObjectActionPacketListener.thirdClick(ObjectActionPacketListener.java:1059)
at com.ruseps.net.packet.impl.ObjectActionPacketListener.handleMessage(ObjectActionPacketListener.java:1196)
at com.ruseps.net.PlayerSession.handleInputMessage(PlayerSession.java:111)
at com.ruseps.net.PlayerSession.handleQueuedMessages(PlayerSession.java:84)
at com.ruseps.world.entity.updating.PlayerUpdateSequence.executePreUpdate(PlayerUpdateSequence.java:34)
at com.ruseps.world.entity.updating.PlayerUpdateSequence.executePreUpdate(PlayerUpdateSequence.java:1)
at com.ruseps.world.entity.impl.CharacterList.forEach(CharacterList.java:148)
at com.ruseps.world.World.sequence(World.java:146)
at com.ruseps.engine.GameEngine.run(GameEngine.java:39)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Here's an example of one of the things iv'e tried
Code:
private static void thirdClick(final Player player, Packet packet) {
final int id = packet.readShort();
final int y = packet.readUnsignedByte();
final int x = packet.readUnsignedShortA();
final Position position = new Position(x, y, player.getPosition().getZ());
final GameObject gameObject = new GameObject(id, position);
if(id > 0 && id != 6 && !RegionClipping.objectExists(gameObject)) {
// player.getPacketSender().sendMessage("An error occured. Error code: "+id).sendMessage("Please report the error to a staff member.");
return;
}
int distanceX = (player.getPosition().getX() - position.getX());
int distanceY = (player.getPosition().getY() - position.getY());
if (distanceX < 0)
distanceX = -(distanceX);
if (distanceY < 0)
distanceY = -(distanceY);
int size = distanceX > distanceY ? GameObjectDefinition.forId(id).getSizeX() : GameObjectDefinition.forId(id).getSizeY();
if (size <= 0)
size = 1;
gameObject.setSize(size);
if(player.getMovementQueue().isLockMovement())
return;
if(player.getRights() == PlayerRights.DEVELOPER)
player.getPacketSender().sendMessage("Third click object id; [id, position] : [" + id + ", " + position.toString() + "]");
player.setInteractingObject(gameObject).setWalkToTask(new WalkToTask(player, position, gameObject.getSize(), new FinalizedMovementTask() {
@Override
public void execute() {
switch(id) {
case 6552:
player.setSpellbook(player.getSpellbook() == MagicSpellbook.ANCIENT ? MagicSpellbook.NORMAL : MagicSpellbook.ANCIENT);
player.getPacketSender().sendTabInterface(GameSettings.MAGIC_TAB, player.getSpellbook().getInterfaceId()).sendMessage("Your magic spellbook is changed..");
Autocasting.resetAutocast(player, true);
break;
}
}
}));
}
I'm pretty sure it has something to do with me not knowing how to determine what packets to use.
SORRY if this a really stupid problem i'm new to learning java .-.