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 .-.