I added a few more things to this server, there probably isn't much interest in it but it's there for who wants it.
What I've added:
Code:
- RegionClipping (Should be perfect, I've tested a fair few places seems good)
- Object clicking with validation (Where you see Reached: true or false in the image is whether the player can reach the object)
- Equipping but the definitions loaded are terrible and the item_definitions.json I found needs a bit of updating, lots of the shield are set to two handed
- Pretty much full banking with tabs and everything, use ::openbank to open it and ::closebank to reset your inventory after because I don't have the CloseInterfaceEvent packet
- Some other AccessMasks for some interfaces like quick prayer, quest interface, etc.
- A lot of button handling
- Item click handling
- Still no NPCs sorry, I'm still new at working with these servers and finding packets for myself
Make sure you set the PACKET_LENGTHS[44] to 14
https://mega.nz/#!htYh3DyT!TvVXcN497...xXLPKWVECmOjT4
Make sure you put the full #83 cache in the jagexcache -> oldschool folder called LIVE83
Use this guide to add NPCs: https://www.rune-server.org/runescap...onization.html
Thanks to Whis for that
EDIT: I found a bug! Simple one though, replace ObjectActionEventHandler.java with this:
Code:
package org.apollo.game.event.handler.impl;
import org.apollo.game.event.handler.EventHandler;
import org.apollo.game.event.handler.EventHandlerContext;
import org.apollo.game.model.Player;
import org.apollo.game.model.World;
import org.apollo.game.model.Position;
import org.apollo.game.model.PathFinder;
import org.apollo.game.model.obj.StaticObject;
import org.apollo.game.event.impl.ObjectActionEvent;
import org.apollo.game.event.impl.MinimapFlagEvent;
/**
* An event handler which broadcasts public chat messages.
*
* @author Graham
*/
public final class ObjectActionEventHandler extends EventHandler<ObjectActionEvent> {
@Override
public void handle(EventHandlerContext ctx, Player player, ObjectActionEvent event) {
StaticObject obj = World.getWorld().getObject(event.getId(), new Position(event.getPosition().getX(), event.getPosition().getY(), player.getPosition().getHeight()));
if(obj == null){
player.sendMessage("Invalid object!");
return;
}
int offX = player.getLastKnownRegion().getTopLeftSectorX() * 8;
int offY = player.getLastKnownRegion().getTopLeftSectorY() * 8;
boolean reached = PathFinder.findRoute(player, event.getPosition().getX(), event.getPosition().getY(), true, 1, obj);
if (player.getWalkingQueue().size() > 0) player.send(new MinimapFlagEvent(player.getDestination().getX() - offX, player.getDestination().getY() - offY)); else player.send(new MinimapFlagEvent(player.getPosition().getX() - offX, player.getPosition().getY() - offY));
player.sendMessage("Object Option " + event.getOption() + " for ID: " + event.getId() + ", [" + event.getPosition().getX() + ", " + event.getPosition().getY() + ", " + player.getPosition().getHeight() + "], Reached: " + reached);
}
}
And replace ItemOnObjectHandler.java with this:
Code:
package org.apollo.game.event.handler.impl;
import org.apollo.game.event.handler.EventHandler;
import org.apollo.game.event.handler.EventHandlerContext;
import org.apollo.game.event.impl.ItemOnObjectEvent;
import org.apollo.game.model.World;
import org.apollo.game.model.Position;
import org.apollo.game.model.PathFinder;
import org.apollo.game.model.obj.StaticObject;
import org.apollo.game.event.impl.MinimapFlagEvent;
import org.apollo.game.model.Player;
public final class ItemOnObjectHandler extends EventHandler<ItemOnObjectEvent> {
@Override
public void handle(EventHandlerContext ctx, Player player, ItemOnObjectEvent event) {
StaticObject obj = World.getWorld().getObject(event.getObjectId(), new Position(event.getPosition().getX(), event.getPosition().getY(), player.getPosition().getHeight()));
if(obj == null){
player.sendMessage("Invalid object!");
return;
}
int offX = player.getLastKnownRegion().getTopLeftSectorX() * 8;
int offY = player.getLastKnownRegion().getTopLeftSectorY() * 8;
boolean reached = PathFinder.findRoute(player, event.getPosition().getX(), event.getPosition().getY(), true, 1, obj);
if (player.getWalkingQueue().size() > 0) player.send(new MinimapFlagEvent(player.getDestination().getX() - offX, player.getDestination().getY() - offY)); else player.send(new MinimapFlagEvent(player.getPosition().getX() - offX, player.getPosition().getY() - offY));
player.sendMessage("Item: " + event.getItemId() + " used with Object: " + event.getObjectId() + ", [" + event.getPosition().getX() + ", " + event.getPosition().getY() + ", " + player.getPosition().getHeight() + "], Reached: " + reached);
}
}
Interface List: https://mega.nz/#!ItRGHQoS!lUCiPzclO...Yxo3enMzNx22nc
Here's some configs someone might find useful:
Code:
101 - Quest Points
102 - Health Poisoned (1 for poison, 1000000 for venom)
439 - Spellbook (0 - Standard, 1 - Ancients, 2 - Lunar)
456 - Diseased
1021 - Flashing Sidebar Icon
843 - Attack Style
1151 - Grand Exchange Item
563 - Grand Exchange Quantity
1043 - Grand Exchange Price
638 - Run Energy Type (1000000000 for Stamina, 0 for Regular)
1055 - Quest Tab Icon (10000 for red, 0 for blue)