SRL Archive - Unofficial Development

[OSR]Reflection Include


Kyle

2014-01-06 15:37:59

OSR Reflection



Please view the Reflection forum for any info regarding relfection or these includes: https://villavu.com/forum/forumdisplay.php?f=661

Hoodz

2014-01-06 16:33:29

@Borland im sure you can help them!

if you guys got flawless random solvers im going to make a slayer script for osr!

Borland

2014-01-06 17:10:23

Definitely interested. I have been playing around with reflection these last 2 days managed to get together a few functions and made some headway with NPCs today, I'll be back on that tomorrow.

How do I get involved with this officially?

Kyle

2014-01-06 17:36:33

Add me on Skype and we can talk. Its just my villavu name.

Solar

2014-01-07 03:34:57

From: elfyyy
Add me on Skype and we can talk. Its just my villavu name.


How would one go about using the new reflection files instead of the other mini one? Would you just add the line you gave and that would be enough?

Also, congrats on the reflection developer cup. :)

Justin

2014-01-07 04:11:06

From: Solar
How would one go about using the new reflection files instead of the other mini one? Would you just add the line you gave and that would be enough?

Also, congrats on the reflection developer cup. :)


The include is extremely basic at the moment.

Solar

2014-01-07 04:52:47

How do you get the most recent hooks? I tried looking on javahacking but have no idea what I'm looking at or for.

Flight

2014-01-07 05:26:35

From: Solar
How do you get the most recent hooks? I tried looking on javahacking but have no idea what I'm looking at or for.


@n3ss3s made a nifty little hook-grabber, you can find it here.

Solar

2014-01-07 05:44:46

From: Flight
@n3ss3s made a nifty little hook-grabber, you can find it here.


OK, so I ran the bat file and that updated the Fields (I think). Still not sure how to use what I have?

Borland

2014-01-07 07:49:05

Teaser :)


Name: rat
ID: 1372
Combat: 1
Pos X: 3207
Pos Y: 3208
LoopCycle: 194992
MoveSpeed: 1

Hoodz

2014-01-07 08:22:10

From: Borland
Teaser :)


Name: rat
ID: 1372
Combat: 1
Pos X: 3207
Pos Y: 3208
LoopCycle: 194992
MoveSpeed: 1


pm me :P

rj

2014-01-07 08:22:42

From: Borland
Teaser :)


Name: rat
ID: 1372
Combat: 1
Pos X: 3207
Pos Y: 3208
LoopCycle: 194992
MoveSpeed: 1


Ooo Very nice

Kyle

2014-01-07 09:27:43

From: Solar
How would one go about using the new reflection files instead of the other mini one? Would you just add the line you gave and that would be enough?

Also, congrats on the reflection developer cup. :)


Thanks! Uh yeah just like I was saying in the main thread, just download the .zip, extract it and place it inside you sr-osr/srl folder and rename in to Reflection. You don't need to change the hooks or anything, they are up to date!

Justin

2014-01-07 09:53:07

From: Borland
Teaser :)


Name: rat
ID: 1372
Combat: 1
Pos X: 3207
Pos Y: 3208
LoopCycle: 194992
MoveSpeed: 1


Nice work! Any chance you want to share?

Solar

2014-01-07 10:36:56

From: elfyyy
Thanks! Uh yeah just like I was saying in the main thread, just download the .zip, extract it and place it inside you sr-osr/srl folder and rename in to Reflection. You don't need to change the hooks or anything, they are up to date!


I have done all of that like you said in the OP.
I just wanted to know how I can manually update hooks, and if possible, can someone tell me what a hook actually is?
I got n3ss3s's updater and ran the bat file but don't know what to do after that.

Kyle

2014-01-07 10:44:42

From: Solar
I have done all of that like you said in the OP.
I just wanted to know how I can manually update hooks, and if possible, can someone tell me what a hook actually is?
I got n3ss3s's updater and ran the bat file but don't know what to do after that.


Add me On Skype. elfyyy
Same Profile Pic

Hoodz

2014-01-07 17:12:27

@elfyyy

im going to help, getting members asap.

edit: you have to include
{$I SRL-OSR/SRL/misc/SmartGraphics.simba}

before you include reflection.

edit: you can remove
var me: Integer;
@ C:\Simba\Includes\SRL-OSR\SRL\Reflection\Core\Player.simba(118:3)

NKN

2014-01-07 17:44:20

Started working on my updater again, along with helping the group out with code.



Analyzing has started!
Class Hook: Node fz
Class Hook: CacheableNode fa
Class Hook: Renderable cx
Class Hook: Model do
Class Hook: Actor aw
Class Hook: NodeHashTable fu
Class Hook: Player o
Field Hook: o.m PlayerModel Ldo; -1
Field Hook: o.j PlayerName Ljava/lang/String -1
Class Hook: NPC e
Field Hook: e.j NPCDefinition Lak; -1
Class Hook: NPCDefinition ak
Field Hook: z NPCActions [Ljava/lang/String; -1
Field Hook: a NPCName Ljava/lang/String; -1
Class Hook: Client client
Field Hook: f.fo CameraPitch I 1424438993
Field Hook: client.bj NPCArray [Le; -1
Field Hook: client.gi PlayerArray [Lo; -1
Field Hook: q.fi CameraYaw I -1409161417

Borland

2014-01-08 17:50:10

Moar teasers :D

Grabs all the local NPCs that match either on Name or ID (in this case 'rat') and fills a record with each ones information for easy looping after.


######## Result 0 ########
Index: 12506
Name: rat
Tile: (3204, 3210)
Combat: 1
HitPoints: 0
Actions: ['Attack']
ID: 1372
Animation: -1
WalkSpeed: 1
WalkQueueX: 44
WalkQueueY: 50
Interacting: -1
Orientation: 180
##########################
######## Result 1 ########
Index: 12507
Name: rat
Tile: (3201, 3208)
Combat: 1
HitPoints: 0
Actions: ['Attack']
ID: 1372
Animation: -1
WalkSpeed: 2
WalkQueueX: 41
WalkQueueY: 49
Interacting: -1
Orientation: 254
##########################
######## Result 2 ########
Index: 12508
Name: rat
Tile: (3205, 3217)
Combat: 1
HitPoints: 0
Actions: ['Attack']
ID: 1372
Animation: -1
WalkSpeed: 0
WalkQueueX: 45
WalkQueueY: 57
Interacting: -1
Orientation: 142
##########################
######## Result 3 ########
Index: 12509
Name: rat
Tile: (3207, 3208)
Combat: 1
HitPoints: 0
Actions: ['Attack']
ID: 1372
Animation: -1
WalkSpeed: 0
WalkQueueX: 47
WalkQueueY: 48
Interacting: -1
Orientation: 142
##########################
######## Result 4 ########
Index: 12510
Name: rat
Tile: (3201, 3219)
Combat: 1
HitPoints: 0
Actions: ['Attack']
ID: 1372
Animation: -1
WalkSpeed: 0
WalkQueueX: 41
WalkQueueY: 59
Interacting: -1
Orientation: 254
##########################
######## Result 5 ########
Index: 12511
Name: rat
Tile: (3213, 3212)
Combat: 1
HitPoints: 0
Actions: ['Attack']
ID: 1372
Animation: -1
WalkSpeed: 0
WalkQueueX: 53
WalkQueueY: 52
Interacting: -1
Orientation: 180
##########################
######## Result 6 ########
Index: 12514
Name: rat
Tile: (3205, 3201)
Combat: 1
HitPoints: 0
Actions: ['Attack']
ID: 1372
Animation: -1
WalkSpeed: 2
WalkQueueX: 47
WalkQueueY: 41
Interacting: -1
Orientation: 216
##########################
######## Result 7 ########
Index: 12515
Name: rat
Tile: (3212, 3204)
Combat: 1
HitPoints: 0
Actions: ['Attack']
ID: 1372
Animation: -1
WalkSpeed: 2
WalkQueueX: 51
WalkQueueY: 43
Interacting: -1
Orientation: 236
##########################
######## Result 8 ########
Index: 12537
Name: rat
Tile: (3221, 3223)
Combat: 1
HitPoints: 0
Actions: ['Attack']
ID: 1372
Animation: -1
WalkSpeed: 0
WalkQueueX: 61
WalkQueueY: 63
Interacting: -1
Orientation: 160
##########################

Flight

2014-01-08 19:24:38

As a piece of advice you guys don't need AL_Functions to be included, just replace my mouse stuff with SRL's stock mouse procedures. Also, have you all considered upgrading to Lape?

Kyle

2014-01-09 00:14:01

Yeah Brandon. I know, didn't mean to Push them yet as i'm not done with the npc's yet. Thanks though!

slacky

2014-01-09 11:55:14

While at it, why not make it Lape compatible (it seems it's not)? There are only small changes needed for it to compile under lape (so it seems).

Kyle

2014-01-09 12:03:32

From: warpie
While at it, why not make it Lape compatible (it seems it's not)? There are only small changes needed for it to compile under lape (so it seems).


Yeah, a lot of people have been talking about that. But for know, there's no reason to, until OSR is rewritten with lape.

EDIT- Hooks updated!
Got everyone other than a few Npc's, should have it uploaded within the hour!

EDIT2- Minireflection has been updated

EDIT3- This Include is completely updated with new hooks! :)

Brandon

2014-01-10 03:13:55

Hooking ground items.. I wrote it in java. Someone translate it :l Too lazy..


Node:


package osrs;

import java.lang.reflect.Field;

/**
*
* @author Brandon
*/
public class Node {
private Object nodelist;
private ClassLoader loader;

public Node(Object nodelist, ClassLoader loader) {
this.nodelist = nodelist;
this.loader = loader;
}

public Object currentNode() {
return nodelist;
}

public Node getNext() {
try {
Field f = loader.loadClass("fc").getDeclaredField("dt");
f.setAccessible(true);
return new Node(f.get(this.nodelist), loader);
} catch(ClassNotFoundException | NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
}

public Node getPrevious() {
try {
Field f = loader.loadClass("fc").getDeclaredField("ef");
f.setAccessible(true);
return new Node(f.get(this.nodelist), loader);
} catch(ClassNotFoundException | NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
}

public long getID() {
try {
Field f = loader.loadClass("fc").getDeclaredField("dg");
f.setAccessible(true);
return f.getLong(this.nodelist);
} catch(ClassNotFoundException | NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
return -1;
}
}

Linked-List:

package osrs;

import java.lang.reflect.Field;

/**
*
* @author Brandon
*/
public class LinkedList {
private Object obj;
private ClassLoader loader;

public LinkedList(Object obj, ClassLoader loader) {
this.obj = obj;
this.loader = loader;
}

public Node getHead() {
try {
Field f = loader.loadClass("fj").getDeclaredField("e");
f.setAccessible(true);
Object head = f.get(obj);
return new Node(head, loader);
} catch(ClassNotFoundException | NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
}

public Node getTail() {
try {
Field f = loader.loadClass("fj").getDeclaredField("b");
f.setAccessible(true);
Object tail = f.get(obj);
return new Node(tail, loader);
} catch(ClassNotFoundException | NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
}


Item:

package osrs;

import java.lang.reflect.Field;

/**
*
* @author Brandon
*/
public class Item {
private Object obj;
private ClassLoader loader;

public Item(Object obj, ClassLoader loader) {
this.obj = obj;
this.loader = loader;
}

public int getID() {
try {
Field f = loader.loadClass("x").getDeclaredField("b");
f.setAccessible(true);
return f.getInt(obj) * 766650721;
} catch(ClassNotFoundException | NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
return -1;
}

public int getQuantity() {
try {
Field f = loader.loadClass("x").getDeclaredField("e");
f.setAccessible(true);
return f.getInt(obj) * -374023265;
} catch(ClassNotFoundException | NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
return -1;
}

public String getName() {
try {
Field f = loader.loadClass("az").getDeclaredField("l");
f.setAccessible(true);
//return (String) f.get(obj);
return null;
} catch(Exception e) {
e.printStackTrace();
}
return null;
}
}

OSRS:

import java.lang.reflect.Field;
import javax.swing.JFrame;

/**
*
* @author Brandon
*/
public class OSRS {


public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
JFrame Frame = new JFrame("Test-Bot");
Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ClientApplet applet = new ClientApplet("http://oldschool38.runescape.com", "", 765, 503);
applet.start();
Frame.add(applet);
Frame.setVisible(true);
Frame.pack();

try {
System.in.read();
} catch(Exception e) {

}

ClassLoader loader = applet.getClassLoader();
Field GroundItemsLinkedList = loader.loadClass("client").getDeclaredField("hi");
GroundItemsLinkedList.setAccessible(true);

//Item = x, id = b * 766650721, quantity = e * -374023265
//ItemDef = az, name = l
//Linked-List = fj, head = e, tail = b.
//Node = fc, next = dt, prev = ef, id = dg.

Object[][][] glist = (Object[][][])GroundItemsLinkedList.get(null);

for (int i = 0; i < glist.length; ++i) { //always 4.
for (int j = 0; j < glist[i].length; ++j) { //always 104.
for (int k = 0; k < glist[i][j].length; ++k) { //always 104.
Object linked_list = glist[i][j][k];
if (linked_list != null) {
LinkedList l = new LinkedList(linked_list, loader);
Node n = l.getTail();
Object first = n.currentNode();

while(first != (n = n.getNext()).currentNode()) {
Item item = new Item(n.currentNode(), loader);
System.out.println("ID: " + item.getID() + " Quantity: " + item.getQuantity());
System.out.println("Name: " + item.getName());
}
}
}
}
}
}
}


Prints:
[Banana]
ID: 1619 Quantity: 1
Name: null
[/Banana]

which is correct because I dropped a ruby on the floor. In a crowded area, it prints every single item on the floor/ground item. So the above is one way of getting ground items. There HAS to be a better way than iterating the 4x104x104 linked list all the way (check the old includes or something for a hash or index algo iirc).. Oh.. Wasn't sure why my getName wasn't working but the ID and Quantity works.

Someone translate that to PS. I'm tired.

Krazy_Meerkat

2014-01-10 12:59:14

Thank you very much Brandon, any help is good help. It looks like you have some nice stuff there, we'll have it translated to PS soon enough.
I've heavily modified the auto-updater, now it will update the entire reflection include straight from the google source-code whenever there is a new IncludeRevision instead of just the hooks (which used to be updated via pastebin). The hooks will update if the ReflectionRevision or the IncludeRevision version changes.
Also modified R_TileToMs(); to improve accuracy on the player tile, went from 80% accurate to 99.99%. Rarely inaccurate due to rounding issues which couldn't be corrected. Next update will improve accuracy of tiles surrounding the player.
Elfyyy hasn't stated in the OP, but you need to call SetupReflection; at the start of your script for auto-updating to work. Everyone should re-download the include from: https://code.google.com/p/osrreflection/source/browse/ because the auto-updater changes are very important.

Kyle

2014-01-16 11:11:26

Hooks Are updated to latest Revision 35. The Npc Index hook isn't working correctly so for the time being, Npc functions will not work. Will post back when squared away

dog_

2014-01-16 11:59:49

good job ;)

jagexwillneverwin

2014-01-17 19:51:39

Just curious, are you guys planning on incorporating things that would help solve randoms into this eventually?

Kyle

2014-01-17 19:55:25

From: jagexwillneverwin
Just curious, are you guys planning on incorporating things that would help solve randoms into this eventually?


Oh yeah! That's definitely the goal!

jagexwillneverwin

2014-01-17 20:30:48

From: elfyyy
Oh yeah! That's definitely the goal!


Cool! I'll be looking forward to it! :)

Kyle

2014-01-19 10:03:18

Ok, so we got the npc's up and working again using a little bit different method. The functions should still be all the same. We have also just started working on antirandoms and hopefully will have enough of them working soon to be able to call them in scripts!

yayovio10

2014-01-21 20:57:04

thank you guys for working on this, it will help a lot of people including me, i'll be looking forward for the antirandoms too, best of luck!

NKN

2014-01-21 21:01:26

Helping with Object detection for once.

Where would they be without me?

samerdl

2014-01-23 12:54:09

hooks are outdated from today's update, please update ;_)?

Solar

2014-01-23 13:56:09

From: samerdl
hooks are outdated from today's update, please update ;_)?


Apparently the update messed with the updater somehow so it might take some more time than usual.

NKN

2014-01-23 14:15:37

Updaters were released just like normal.


Hold on tight everyone, we'll be back later today.

Krazy_Meerkat

2014-01-24 06:23:29

Sorry for the delay all, timezones were a bit unfair to us on this occasion.. I updated our hooks about an hour ago. Happy scripting everyone :)

Solar

2014-01-24 07:12:01

From: Krazy_Meerkat
Sorry for the delay all, timezones were a bit unfair to us on this occasion.. I updated our hooks about an hour ago. Happy scripting everyone :)


elfyyy said in his Pest Control thread that something was different with this Runescape update. Care to elaborate?
Of course, thank you for the update too.

Krazy_Meerkat

2014-01-24 07:33:16

I'm not too sure, haridos posted on JH "Loads broke/wrong on this update, camera pitch is completely wrong" We don't use the pitch hook, in-fact we only use a few of the actual hooks in our include. I assume something was different in the way OSR handles some methods so most people couldn't get their updaters to run at the time of update (including ours).. When I came on skype today, I saw the hook update and our updater was working fine, so I updated.. Normally elfyyy does it, but he'd gone offline when it was fixed.. Btw, if you run the include, you will now get this message: "Massive thanks to Magorium, Dang, Hyperion, Swipe, dog_ and hexagon for supplying hooks and multipliers when we were in a tight spot!"
We want to give credit to those members of JH who have contributed hooks during the time we were unable to get our own.
@#27 <333

Hoodz

2014-01-24 18:23:35

From: Krazy_Meerkat
I'm not too sure, haridos posted on JH "Loads broke/wrong on this update, camera pitch is completely wrong" We don't use the pitch hook, in-fact we only use a few of the actual hooks in our include. I assume something was different in the way OSR handles some methods so most people couldn't get their updaters to run at the time of update (including ours).. When I came on skype today, I saw the hook update and our updater was working fine, so I updated.. Normally elfyyy does it, but he'd gone offline when it was fixed.. Btw, if you run the include, you will now get this message: "Massive thanks to Magorium, Dang, Hyperion, Swipe, dog_ and hexagon for supplying hooks and multipliers when we were in a tight spot!"
We want to give credit to those members of JH who have contributed hooks during the time we were unable to get our own.
@#27 <333

they are awesome! and thanks for the update krazy

yayovio10

2014-01-27 16:32:03

hello,just wondering why you commented this line
//{$include SRL-OSR/SRL/Reflection/AntiRandoms/Antirandoms.simba}

Kyle

2014-01-27 16:38:02

From: yayovio10
hello,just wondering why you commented this line
//{$include SRL-OSR/SRL/Reflection/AntiRandoms/Antirandoms.simba}


Because as of now we only have a few randoms solved and haven't uploaded them to the googlecode. So we just commented the line out to make it easy for us to test the randoms.

samerdl

2014-01-29 10:06:52

Hey i been looking around at the include and saw a file for npcs, my question is how can i use to make my client click on npcs?

This worked:


var
bbd: tnpc;

begin
playerSetup;
setupsrl;
SetupReflection;
wait(1000);
//ProjectTiles; // i thought this is going to draw boxes/id's on my screen, like osbot.. But it didn't do anything really.
//R_GetNpcs('Name'); didn't work just caused a memory leak and froze the client + simba.
bbd := R_InteractingNpc; // worked.
writeln(bbd);
writeln('//////.,.,');
end.

Result was:

('hring hring', (2399, 3797), 11346, 0, 1237, -1, 0, 33679, 0)
//////.,.,

It would only work if i clicked to interact and had the script repeat the function, didn't work when i was just in-convo screen with the npc.

So how can i make it click on npcs or items?, i think it would make my scripts a lot more powerful and not just that.. it would also make simba 100x more useful for botting on 07scape.

Kyle

2014-01-29 10:46:57

From: samerdl
Hey i been looking around at the include and saw a file for npcs, my question is how can i use to make my client click on npcs?

This worked:


var
bbd: tnpc;

begin
playerSetup;
setupsrl;
SetupReflection;
wait(1000);
//ProjectTiles; // i thought this is going to draw boxes/id's on my screen, like osbot.. But it didn't do anything really.
//R_GetNpcs('Name'); didn't work just caused a memory leak and froze the client + simba.
bbd := R_InteractingNpc; // worked.
writeln(bbd);
writeln('//////.,.,');
end.

Result was:

('hring hring', (2399, 3797), 11346, 0, 1237, -1, 0, 33679, 0)
//////.,.,

It would only work if i clicked to interact and had the script repeat the function, didn't work when i was just in-convo screen with the npc.

So how can i make it click on npcs or items?, i think it would make my scripts a lot more powerful and not just that.. it would also make simba 100x more useful for botting on 07scape.


Uh if you go the the tutorial I have linked, under the NPC section there is an example of just that :). Do note however, tile to ms is not 100% accurate as of now, so its best to use the point given and make a box from it to look for the NPC colors. :)

Unfold

2014-01-30 12:37:09

R_IsAnimating doesn't work with fishing, it always says im not in animating…

Kyle

2014-01-30 12:43:14

From: Unfold
R_IsAnimating doesn't work with fishing, it always says im not in animating…


Hooks just updated. Gimmee a bit…

Solar

2014-01-30 15:11:13

Do you manually type in the new hooks or does your updater do it for you?
No offense but sometimes it takes a while to update them after a RS update, but I find it odd when Krazy_Meerkat said he updated and uploaded the updated hooks within 10 minutes of finding it out.

Unfold

2014-01-30 17:23:45

From: Solar
Do you manually type in the new hooks or does your updater do it for you?
No offense but sometimes it takes a while to update them after a RS update, but I find it odd when Krazy_Meerkat said he updated and uploaded the updated hooks within 10 minutes of finding it out.


They have to manually do it, its much faster than those bot like osbot, they take a while to update their bot.

Sk1nyNerd

2014-01-30 17:40:21

what is meant by "tile"? like spaces your character stands when walking? points on the rs screen?

Krazy_Meerkat

2014-01-30 21:42:42

We manually update them with our logs, but our hook updater seems completely ruined this update.. We are currently taking a look at what's available on JH and testing a few hooks.. It's a slow and difficult process..
I did claim that we could update within 10 mins, because 2 updates ago, the hooks updated and we had them parsed and uploaded within 10 mins of the update, the time before that we had them done within half an hour.. This time something changed and we couldn't get hooks..
The tile is the in-game location (co-ordinates) of a player, npc or object. It is always static to that area (eg. lumby will always have the same co-ords).
samerdl, ProjectTile does draw a single box on your screen, you need to include smartgraphics to call it. There is normally a description for the method (located in tiles.simba), but some lack explanation. A better-suited function for drawing the ms tile-grid is:
From: tiles.simba
function ProjectTiles;
Draws the mainscreen tile grid on screen

The ProjectTiles method was just used for testing Tiletoms (and trying to write something for height/distance differences).. It relies on smartgraphics if you want to call it so don't forget to include this:
{$I SRL-OSR\SRL\misc\SmartGraphics.simba} 

Finally, I see some confusion about how to call the npc functions.. There are several functions you can use, but you must know that npc's are returned in a TNPC format. So it is always wise to declare a variable as a TNPC or TNPCArray;
var
man: TNPC;
men: TNPCArray;
So now, when using npc functions, you can store the npc. There are a few npc functions and they don't all work the same..

men:= R_GetNpcs('man'); //returns a TNPCArray of all npc's named 'man' in the area (sorted by player distance), I stored it into men for this example.
if R_FindNpc('man', man) then //looks for npcs named 'man' and stores the closest one in the TNPC man. Boolean function, returns true if found, false if not.
man:= R_FindFreeNpc('man'); //looks for the closest npc named 'man' which isn't in combat and returns the TNPC (I stored this into man).
R_InteractingNpc //returns the tnpc of any npc your player is interacting with, this means you can use it like R_InteractingNpc.HitPoints

Finally, when you want to call record information from your npc, you treat the TNPC array as an array of npcs as follows:
for i:= 0 to high(men) do
if men[i].Animation > 0 then
man:= men[i];
The TNPC is treated as singular, so you can just call the record info:

R_TileToMs(man.tile);


When you use the npc functions for the first time in script runtime, be prepared for a lag-spike of about 2-8 seconds depending on cpu speed. Same goes for a new area, if you're making a script which has banking as an example, you will get a lag spike when you search for the banker the 1st time and if you go to far away from the banker's area and do another npc search (for a 'goblin' as an example), you will get another lag spike. These spikes are only going to happen once per area searched since starting the script, so don't be worried about it, think of it as "setting up" the npc database.

kingarabian

2014-01-31 03:34:02

@Krazy_Meerkat

Any ETA's?

Also, do you think it's possible to show other members how to obtain hooks? That way it could maybe relief yourself and Elfyyy from that burden?

Justin

2014-01-31 05:39:32

From: kingarabian
@Krazy_Meerkat

Any ETA's?

Also, do you think it's possible to show other members how to obtain hooks? That way it could maybe relief yourself and Elfyyy from that burden?


From: DeSnob
ETA's don't exist in SRL like they did in other communities. Want a faster update? Help out with updating, otherwise just gotta wait it out.


There you go

kingarabian

2014-01-31 14:28:38

From: Justin
There you go

"There you go" what?

I understand the ETA rule completely, but if you noticed, in the latter parts of my post I asked how can we fellow SRL members, can assist in updating the hooks. Unless there's a tutorial somewhere that I cannot find…

Solar

2014-01-31 16:22:34

I changed my hooks file using the updater by @n3ss3s; http://villavu.com/forum/showthread.php?t=105915&highlight=
Seems to be working okay up to now. Here are my new hooks file contents:

const

ReflectionRevision = '36';

{*Node*}
Node = 'fn';
Node_id = 'do';
Node_previous = 'dc';
Node_next = 'ea';

{*CacheableNode*}
CacheableNode = 'fe';
CacheableNode_next = 'cd';
CacheableNode_previous = 'co';

{*Stream*}
Stream = 'ds';
Stream_getUnsignedByte = 'ds.aj';
Stream_getUnsignedLEShort = 'ds.ac';
Stream_getShort = 'ds.ab';

{*Renderable*}
Renderable = 'cy';
Renderable_height = 'bh';

{*Renderable Multipliers*}
Renderable_height_Multiplier = 85503229;


{*Actor*}
Actor = 'af';
Actor_hitDamages = 'al';
Actor_activeText = 'aw';
Actor_pathY = 'bc';
Actor_pathX = 'ba';
Actor_localY = 't';
Actor_localX = 'k';
Actor_animation = 'ad';
Actor_maxHealth = 'ag';
Actor_health = 'aq';
Actor_interacting = 'aj';

{*Actor Multipliers*}
Actor_localY_Multiplier = 2096975085;
Actor_localX_Multiplier = -1527045191;
Actor_animation_Multiplier = 1578023687;
Actor_maxHealth_Multiplier = -1774361849;
Actor_health_Multiplier = -473763318;
Actor_interacting_Multiplier = 1447246719;


{*CacheableNodeQueue*}
CacheableNodeQueue = 'fa';
CacheableNodeQueue_getHead = 'p';

{*NodeHashTable*}
NodeHashTable = 'fd';
NodeHashTable_getNodes = 'l';
NodeHashTable_getSize = 'o';

{*NodeQueue*}
NodeQueue = 'fm';
NodeQueue_getHead = 'p';
NodeQueue_getCurrent = 'l';

{*NodeCache*}
NodeCache = 'fq';
NodeCache_cacheableNode = 'p';
NodeCache_hashTable = 'x';
NodeCache_queue = 'o';
NodeCache_remaining = 'd';
NodeCache_size = 'o';

{*Model*}
Model = 'dl';
Model_trianglesX = 'm';
Model_trianglesY = 'u';
Model_trianglesZ = 's';
Model_verticesX = 'a';
Model_verticesY = 'w';
Model_verticesZ = 'k';

{*StringStorage*}
StringStorage = 'ey';
StringStorage_ = 'ic';

{*ItemDefinition*}
ItemDefinition = 'as';
ItemDefinition_groundActions = 'j';
ItemDefinition_inventoryActions = 'q';
ItemDefinition_isMembers = 'h';
ItemDefinition_name = 'm';

{*Item*}
Item = 'c';
Item_id = 'p';
Item_stackSize = 'l';

{*Item Multipliers*}
Item_id_Multiplier = 1247617319;
Item_stackSize_Multiplier = 1153687903;


{*ObjectDefinition*}
ObjectDefinition = 'ae';
ObjectDefinition_name = 's';
ObjectDefinition_actions = 'ah';

{*NpcDefinition*}
NpcDefinition = 'aa';
NpcDefinition_actions = 't';
NpcDefinition_name = 'a';
NpcDefinition_id = 'o';
NpcDefinition_level = 'y';

{*NpcDefinition Multipliers*}
NpcDefinition_id_Multiplier = -1550313271;
NpcDefinition_level_Multiplier = -1977773035;


{*Npc*}
Npc = 'q';
Npc_definition = 'p';

{*PlayerDefinition*}
PlayerDefinition = 'fr';
PlayerDefinition_getAppearanceIndices = 'u';
PlayerDefinition_getAppearance = 'p';

{*Player*}
Player = 'd';
Player_name = 'p';
Player_model = 'e';
Player_definition = 'l';
Player_level = 'o';

{*Player Multipliers*}
Player_level_Multiplier = 479505669;


{*Region*}
Region = 'cr';
Region_sceneObjects = 'y';
Region_sceneTiles = 'a';

{*Widget*}
Widget = 'fi';
Widget_getRelativeX = 'b';
Widget_getRelativeY = 'x';
Widget_isHidden = 'bs';
Widget_getActions = 'bm';
Widget_getID = 's';
Widget_getText = 'by';
Widget_getItems = 'dh';
Widget_getStackSizes = 'df';

{*Widget Multipliers*}
Widget_getRelativeX_Multiplier = -47615529;
Widget_getRelativeY_Multiplier = -857103235;
Widget_isHidden_Multiplier = 0;
Widget_getID_Multiplier = -493717361;


{*client*}
client = 'client';
client_menuCount = 'client.io';
client_menuActions = 'l.c';
client_menuOptions = 'bt.g';
client_groundSettings = 'u.t';
client_groundHeights = 'u.f';
client_npcIndices = 'client.bq';
client_chat_senders = 'client.lc';
client_chat_messages = 'client.lk';
client_widgets = 'de.p';
client_login_state = 'client.v';
client_player = 'ai.ha';
client_compassAngle = 'client.dy';
client_map_offset = 'client.dw';
client_map_scale = 'client.fp';
client_menuX = 'client.he';
client_menuY = 'client.hx';
client_menuWidth = 'client.hy';
client_menuHeight = 'client.hs';
client_isMenuOpen = 'client.hh';
client_packetStream = 'client.cj';
client_groundItems = 'client.hw';
client_levels = 'client.hf';
client_real_levels = 'client.hp';
client_experiences = 'client.hd';
client_run_energy = 'client.jj';
client_weight = 'client.jd';
client_cameraPitch = 'ec.fi';
client_cameraYaw = 'dd.fk';
client_cameraY = 'ek.ez';
client_cameraX = 'e.fs';
client_cameraZ = 'bk.fx';
client_baseX = 'di.cs';
client_baseY = 's.cq';
client_plane = 'x.hc';
client_players = 'client.gs';
client_npcs = 'client.bc';
client_settings = 'ff.t';
client_addChatMessage = 'h.dk';
client_getItemDefinition = 'bu.f';

{*client Multipliers*}
client_menuCount_Multiplier = -2010021751;
client_login_state_Multiplier = -370572591;
client_compassAngle_Multiplier = 983287781;
client_map_offset_Multiplier = -1834812991;
client_map_scale_Multiplier = -1670744727;
client_menuX_Multiplier = -1080942703;
client_menuY_Multiplier = 2054832625;
client_menuWidth_Multiplier = -1794773983;
client_menuHeight_Multiplier = -360908199;
client_run_energy_Multiplier = 532068423;
client_weight_Multiplier = -14992182;
client_cameraPitch_Multiplier = -1358330977;
client_cameraYaw_Multiplier = 2000037285;
client_cameraY_Multiplier = 1129828653;
client_cameraX_Multiplier = -1767149505;
client_cameraZ_Multiplier = -1182982455;
client_baseX_Multiplier = -863779709;
client_baseY_Multiplier = -2126815013;
client_plane_Multiplier = 253983849;

Edit: I should add, I haven't updated all hooks because the updater doesn't give me everything I need for this include.

Also, walking isn't walking with these hooks.

Kyle

2014-01-31 18:33:48

Ok guys. We have had quite the battle trying to either fix our updater, or find another way of updating hooks, and it looks like we have! Dang from javahacking will now be providing the hooks for the reflection include. I just pushed an update on the hooks so you will get a new hooks.simba next time you run. For the most part, all the Player and map walk functions should work. I just wanted to get most of the main functions working. We are now working on a parser for the hooks and we should get the full hooks updated soon. Sorry for the massive delay, hopefully it won't happen again!!!

@Solar That updater has been outdated for a while now, most if not all are broken unfortunately.

Sk1nyNerd

2014-01-31 19:11:40

what are hooks?

Kyle

2014-01-31 19:40:05

From: ibot_dung11
what are hooks?


Well in the most basic way possible… Hooks are to reflection as Color is to Simba :p
It's what allows us to access the variables that the data is stored under.

kingarabian

2014-01-31 20:57:20

From: elfyyy
Ok guys. We have had quite the battle trying to either fix our updater, or find another way of updating hooks, and it looks like we have! Dang from javahacking will now be providing the hooks for the reflection include. I just pushed an update on the hooks so you will get a new hooks.simba next time you run. For the most part, all the Player and map walk functions should work. I just wanted to get most of the main functions working. We are now working on a parser for the hooks and we should get the full hooks updated soon. Sorry for the massive delay, hopefully it won't happen again!!!

@Solar That updater has been outdated for a while now, most if not all are broken unfortunately.


Thank you very much for the update.

Kyle

2014-01-31 22:37:00

Ok, just finished working on the rest of the hooks. Other than run energy and npc Id they should all be working! :) We are gonna get that parser going and then we shouldn't have this happen again…

Krazy_Meerkat

2014-01-31 22:41:57

Thanks to elfyyy and Dang for implementing the latest hooks :) There was a problem with one of the multipliers but it's updated now.

We're all learning about hooks at the moment, I'd recommend looking here: http://javahacking.org/forum/index.php?/topic/106-tut-asm-updater-part-1/ if you want to help get them, but it does involve pretty much making your own updater..

Solar

2014-02-01 07:28:52

Was just trying to help out a little. My personal update got hoodz ghoul killer to work as long as you were at the right spot and it didn't need to run.

Thanks for the update though, very much appreciated.

Sk1nyNerd

2014-02-01 23:56:19

whats the link to that smart thinger where you turn it on and off and it lets you know what your tile is? forgot who made it and where it was

Kyle

2014-02-02 00:08:48

From: ibot_dung11
whats the link to that smart thinger where you turn it on and off and it lets you know what your tile is? forgot who made it and where it was


Read the guide I have posted… The Tool that's made by Turpinator is in the include tools folder.

Sk1nyNerd

2014-02-02 00:16:49

From: elfyyy
Read the guide I have posted… The Tool that's made by Turpinator is in the include tools folder.


the walkingpath threw me off-didnt think thats what i was looking for, my bad. thanks.

Solar

2014-02-02 04:06:45

With the latest hooks when using @hoodz; ghoul script, walking to the bank works alright, but when it reaches the bank or gets very close, like one more click away, it will seem to skip part of the script.

Anyone know if the Runescape update could have changed the map tiles or something like that?

Krazy_Meerkat

2014-02-13 22:21:53

Hooks now updated, thanks everyone for being patient.
Tiletoms height-correction removed cause it was too glitchy, try to use it only on flat areas..

wthomas

2014-02-15 07:42:49

This looks beautiful, makes me look at my old projects with good hopes.

Kyle

2014-02-16 12:31:19

From: wthomas
This looks beautiful, makes me look at my old projects with good hopes.


Thanks a lot man! And also glad to see that you came back! You should definitely update you older scripts now :)

wthomas

2014-02-19 14:23:39

If I knew how, I would help update the hooks, and also try to hook the actual map rotation as the compass and the MM become very much so misaligned to the point where walking to a max range point can put you 5 tiles out :(

Kyle

2014-02-19 14:46:58

From: wthomas
If I knew how, I would help update the hooks, and also try to hook the actual map rotation as the compass and the MM become very much so misaligned to the point where walking to a max range point can put you 5 tiles out :(


We have all that hooked already. The only reason that the walking can be inaccurate like that is due to the fact that there is a delay from the time you mouse moves to the spot on the map and when it actually clicks. You can test this by walking to a tile when standing still, it will be within the one tile. The TileToMM function is about as perfect as possible. :)

wthomas

2014-02-19 15:01:39

From: elfyyy
We have all that hooked already. The only reason that the walking can be inaccurate like that is due to the fact that there is a delay from the time you mouse moves to the spot on the map and when it actually clicks. You can test this by walking to a tile when standing still, it will be within the one tile. The TileToMM function is about as perfect as possible. :)


Hmm my scripts still have issues on a path that is only made of 3 tiles, a start middle point and end point, I shall try and investigate more though.

Sk1nyNerd

2014-02-19 16:55:22

From: wthomas
Hmm my scripts still have issues on a path that is only made of 3 tiles, a start middle point and end point, I shall try and investigate more though.


mine do too, tiletoms will sometimes click the corner of the tile thus resulting in it walking to the tile next to the one i clicked on. then minimap walking is generally right on but sometimes it is off by a few tiles

this weekend imma try to write a function to right click walk here if a object is on the tile so you dont click on npc's or objects when using tiletoms

Kyle

2014-02-19 17:26:25

Woah der guys. If you are talking about tile to mainscreen, then yes that is most definitely NOT 100% accurate at the moment. @Frement is currently working on making a more accurate one. But yeah the tile tile minimap is accurate as much as possible due to the small tiles. Just make sure to put the tiles in the path close to each other, say 2 per mini map screen and it should work fine!

Krazy_Meerkat

2014-02-20 04:01:57

From: wthomas
Hmm my scripts still have issues on a path that is only made of 3 tiles, a start middle point and end point, I shall try and investigate more though.

R_PerfectPath(TPointArray); is what I use for all my walking and I haven't had any of the issues I've had with R_WalkPath(TPA); (skipping points in the array, spam-clicking, failing to walk the whole path)
R_PerfectPath will blind-walk to any path point which isn't visible on the minimap.
From: Sk1nyNerd
mine do too, tiletoms will sometimes click the corner of the tile thus resulting in it walking to the tile next to the one i clicked on. then minimap walking is generally right on but sometimes it is off by a few tiles

this weekend imma try to write a function to right click walk here if a object is on the tile so you dont click on npc's or objects when using tiletoms

You shouldn't be using R_TileToMs for any walking functions, it's intention is to provide a starting point for object/npc scanning. It does work quite well compared to other methods, if you don't like it then don't use it.
Frement has been taking a very long time with the new function, beginning to wonder if he still is actually working on it..

Sk1nyNerd

2014-02-20 10:08:46

From: Krazy_Meerkat

You shouldn't be using R_TileToMs for any walking functions, it's intention is to provide a starting point for object/npc scanning. It does work quite well compared to other methods, if you don't like it then don't use it.
Frement has been taking a very long time with the new function, beginning to wonder if he still is actually working on it..


i didnt say i didnt like it, simply there was/is no walking method for you to use when you dont need the minimap to walk. theres no point on clicking the minimap to walk somewhere when youre destination is 3tiles away.

ill check out the includes again, didnt realize new walking methods where added, thanks

Krazy_Meerkat

2014-02-20 10:45:55

From: Sk1nyNerd
i didnt say i didnt like it, simply there was/is no walking method for you to use when you dont need the minimap to walk. theres no point on clicking the minimap to walk somewhere when youre destination is 3tiles away.

ill check out the includes again, didnt realize new walking methods where added, thanks

You can stay up-to-date using this link: https://code.google.com/p/osrreflection/source/list
I know what you mean, but using the mainscreen to walk hasn't been very successful, there is a lot of stuff which can get in the way, or it could just walk to the wrong tile (due to screen shifting, the tile grid won't always line up with the map).. In either case, I'd suggest using the minimap, even to walk only 3 tiles. R_ChooseOptionTileUptext or R_ChooseOptionTileColour might be worth looking at if you're trying to perform an action on the tile..

Kyle

2014-02-20 19:28:49

Hooks updated to Revision 41

Sk1nyNerd

2014-02-23 16:48:18

can i make a recommendation to replace all the functions that have (option: string, blahblah); with (button: variant, blahblah);

example1: change

R_ChooseOptionTile(Option: String; Tile: TPoint): Boolean;

to

R_ChooseOptionTile(button: variant; Tile: TPoint): Boolean;

it makes more sense to allow the freedom of the user to choose if they want to click left or right and if they right click they can just use the chooseoptions function.

prevents repetitive right clicking and option choosing when the user just wants to click left.

(sorry for the double post elfyyy and krazy, didnt think to put in the thread)

Krazy_Meerkat

2014-02-24 06:32:03

I answered this in your PM, @Sk1nyNerd
R_ChooseOptionTile is named as such, because it is only intended for ChooseOption.. Scripters should be capable of making a clicktile function using the resources we have provided.

Good news everyone! As of 2 hours ago, I uploaded our first official AntiRandom support. I made solvers for the Mime and Forester randoms using reflection, we have detection using reflection for a few more. The way it works, is instead of calling FindNormalRandom; for randoms, you simply call R_SolveRandoms; and any randoms which aren't solved in reflection will use the SRL solvers.

Frement

2014-02-24 06:49:39

From: Krazy_Meerkat
Good news everyone! As of 2 hours ago, I uploaded our first official AntiRandom support. I made solvers for the Mime and Forester randoms using reflection, we have detection using reflection for a few more. The way it works, is instead of calling FindNormalRandom; for randoms, you simply call R_SolveRandoms; and any randoms which aren't solved in reflection will use the SRL solvers.


Just keep the name as R_FindNormalRandoms and R_FindNonInventoryRandoms. And random solving from reflection include shouldn't call anything from SRL-OSR regarding randoms, make scripters call both functions.

Krazy_Meerkat

2014-02-24 07:01:59

From: Frement
Just keep the name as R_FindNormalRandoms and R_FindNonInventoryRandoms. And random solving from reflection include shouldn't call anything from SRL-OSR regarding randoms, make scripters call both functions.


SRL must be included anyway (The aim of this include is NOT to be seperate from SRL). For the hooks to be checked, the SMART window must already be open. If I had made scripters call both functions, we would be having complaints about the SRL solvers interfering with the reflection solvers. Tbh, most people wouldn't even bother with using randoms if it meant they had to design their own AntiRandom framework.

Frement

2014-02-24 07:22:12

From: Krazy_Meerkat
SRL must be included anyway (The aim of this include is NOT to be seperate from SRL). For the hooks to be checked, the SMART window must already be open. If I had made scripters call both functions, we would be having complaints about the SRL solvers interfering with the reflection solvers. Tbh, most people wouldn't even bother with using randoms if it meant they had to design their own AntiRandom framework.


R_FindNormalRandoms;
FindNormalRandoms;

After Reflection has solved a random, there is no random for SRL-OSR to solve, I don't see how they would be interfering with each other?

P.S. You should handle constructive criticism a bit better, I found your reputation comment quite childish.

Gu3st...

2014-02-24 08:31:18

@Krazy_Meerkat; I think you're overreacting here. What exactly are your arguments? The last post was nothing but flame towards Frement.

Hoodz

2014-02-24 08:32:35

From: Zyt3x
@Krazy_Meerkat; I think you're overreacting here. What exactly are your points? The last post was nothing but flame towards Frement.


isn't frement overreacting in the first place..

Pakyakkistan

2014-02-24 08:32:45

From: Krazy_Meerkat

Good news everyone! As of 2 hours ago, I uploaded our first official AntiRandom support. I made solvers for the Mime and Forester randoms using reflection, we have detection using reflection for a few more. The way it works, is instead of calling FindNormalRandom; for randoms, you simply call R_SolveRandoms; and any randoms which aren't solved in reflection will use the SRL solvers.


Oh so wonderful. Declaring 1 procedure for randoms unstead of several. This also explains why I had to swap SetupSRL and SetupReflection in my scripts to get reflection working :P
Pakki thanks yews all

Then I find out I was supposed to be doing this the entire time - nothing to see here…

Gu3st...

2014-02-24 08:39:59

From: hoodz
isn't frement overreacting in the first place..

As far as I can see, Frement has two posts in this thread; neither of which are flaming anyone and neither of which are worded in an aggressive tone.

Krazy_Meerkat

2014-02-24 09:05:54

From: Zyt3x
As far as I can see, Frement has two posts in this thread; neither of which are flaming anyone and neither of which are worded in an aggressive tone.


Frement should've sent a PM. He posted his opinion on something he did not fully understand. I don't want any flaming on the forums or in this thread. But I also wouldn't like to be told what to do by someone who doesn't understand the situation..
From: Pakyakkistan
Oh so wonderful. Declaring 1 procedure for randoms unstead of several. This also explains why I had to swap SetupSRL and SetupReflection in my scripts to get reflection working :P
Pakki thanks yews all

Then I find out I was supposed to be doing this the entire time - nothing to see here…

I'm glad you like it Pak, I'll certainly be working on solving more randoms with reflection. Considering this is the 1st revision with AntiRandoms, you can expect that we will add much more functionality to AntiRandoms.simba in time. It's quite rewarding to finally start using reflection solvers.

Frement

2014-02-24 09:12:08

From: Krazy_Meerkat
Frement should've sent a PM. He posted his opinion on something he did not fully understand. I don't want any flaming on the forums or in this thread. But I also wouldn't like to be told what to do by someone who doesn't understand the situation..
"So quick to attack me frement, I voted yes for your [hidden] app." ~ This was the "childish" rep post of mine. I have nothing to hide. Now can we please stay on-topic in this thread.


Clearly my understanding of the situation is greater then yours, by replacing FindNormalRandoms with R_SolveRandoms in scripts will cause problems. Lets say a player dies, this random is not checked in your R_SolveRandoms, you disregarded this totally. And you are using R_CombatRandoms instead of SRL_CombatRandoms, but you haven't mentioned this at all, instead you just told to use R_SolveRandoms function, which will now cause combat scripts to run away from fights.

Krazy_Meerkat

2014-02-24 10:03:54

From: Frement
Clearly my understanding of the situation is a bit higher then yours, by replacing FindNormalRandoms with R_SolveRandoms in scripts will cause problems. Lets say a player dies, this random is not checked in your R_SolveRandoms, you disregarded this totally. And you are using R_CombatRandoms instead of SRL_CombatRandoms, but you haven't mentioned this at all, instead you just told to use R_SolveRandoms function, which will now cause combat scripts to run away from fights.

I discussed specifically including FindDead; with elfyyy and we both came to the conclusion that it causes a lot of problems. It's not hard to do a co-ordinate check anyway. Yes I have added our own boolean R_CombatRandoms for combat randoms (in the next revision I will be adding the reflection version of RunAway) The boolean is false by default and it would not run away at all (this feature is not complete, hence I did not mention it).
Calling R_SolveRandoms; then FindNormalRandoms; would waste memory and time by double-checking for randoms, it could possibly return a false positive and it seems very sloppy and lazy to do it that way.

Frement

2014-02-24 10:12:18

From: Krazy_Meerkat
I discussed specifically including FindDead; with elfyyy and we both came to the conclusion that it causes a lot of problems. It's not hard to do a co-ordinate check anyway. Yes I have added our own boolean R_CombatRandoms for combat randoms (in the next revision I will be adding the reflection version of RunAway) The boolean is false by default and it would not run away at all (this feature is not complete, hence I did not mention it).
Calling R_SolveRandoms; then FindNormalRandoms; would waste memory and time by double-checking for randoms, it could possibly return a false positive and it seems very sloppy and lazy to do it that way.


The problem still exists, currently a script that worked before, if a player dies, the player is not set to false, because that random event is not searched, replacing FindNormalRandoms with R_SolveRandoms, in the event of players death, the script continues with the player that died. And I still don't understand why there is the need for another boolean? Why not use the one already used and provided by SRL-OSR include.

Krazy_Meerkat

2014-02-24 10:20:44

From: Frement
The problem still exists, currently a script that worked before, if a player dies, the player is not set to false, because that random event is not searched, replacing FindNormalRandoms with R_SolveRandoms, in the event of players death, the script continues with the player that died. And I still don't understand why there is the need for another boolean? Why not use the one already used and provided by SRL-OSR include.


Well I see the problem as, scripts with death-walking will fail if they are forced to logout on death. What is stopping you from calling FindDead; yourself? We can't please everyone, and I'm against forcing the FindDead; method on users.
I wanted to use the SRL combat randoms boolean, but I felt that it was just cleaner to use a seperate boolean.

Frement

2014-02-24 10:31:12

From: Krazy_Meerkat
Well I see the problem as, scripts with death-walking will fail if they are forced to logout on death. What is stopping you from calling FindDead; yourself? We can't please everyone, and I'm against forcing the FindDead; method on users.
I wanted to use the SRL combat randoms boolean, but I felt that it was just cleaner to use a seperate boolean.


If you had read the function, you'd know there is a check, similar to SRL_CombatRandoms, it's called Reincarnate.

Reincarnate := True; 

Frement

2014-02-24 10:57:19

From: Krazy_Meerkat
Well I see the problem as, scripts with death-walking will fail if they are forced to logout on death. What is stopping you from calling FindDead; yourself?


You should really read the posts before you respond. Reincarnate is a boolean that will not logout the player or set inactive.

Nothing is stopping me from calling FindDead myself, but is that really the scripters job, if it belongs to antirandoms?

And I can't be wrong on my initial post, because it was an opinion, which still stands, why change the name of the function if it does almost exactly what it used to do, but more accurately?

Zaros

2014-02-24 17:16:10

Awesome job with the randoms, after reading the code that goes into solving those bad boys I am thoroughly impressed.

Not to jump in on this and take sides, but I like the fact that both of you are discussing the pros/cons of design choices out in the open and not in PM. It helps people such as myself who aren't intimately involved with development understand what certain things do and why (when documentation/commenting is sometimes scarce…). I found it interesting, and now my knowledge of how the antirandoms work is a little bit better! :)

Beyond that, I've read this entire thread a few times over at this point, and I'm very interested in learning how those hooks work (I have looked at the files too). At the very least, what all of those seemingly random variable names + integers actually mean–I read about javahacking as well, though I'm still not approved to actually join those forums yet. I'm not looking for someone to hold my hand, I'll gladly go research on my own, if there is a place to do so.

A few of the things I'd like to do are reminiscent of the old reflection clients that ended up being shut down; and yeah yeah I know, "most bots should be color here at villavu", etc. etc. But I see no reason to limit the capabilities to color; take for example the many monsters of security stronghold: the same EXACT colors as their surroundings. Sometimes color just can't do everything I want it to.

rj

2014-02-24 17:30:47

How about a
R_FindNonInventoryRandoms;
and R_FindNormalRandoms;

Obviously R_FindNormalRandoms would include R_FindNonInventoryRandoms;

Sk1nyNerd

2014-02-24 17:48:23

From: Officer Barbrady
How about a
R_FindNonInventoryRandoms;
and R_FindNormalRandoms;

Obviously R_FindNormalRandoms would include R_FindNonInventoryRandoms;


i agree.

why dont you just merge the current solved osr randoms in color with the new solved randoms in reflection. remove and replace the randoms that are being upgraded. avoids the whole problem of calling both methods of random solving and can be done rather quickly

Frement

2014-02-24 17:55:52

From: Officer Barbrady
How about a
R_FindNonInventoryRandoms;
and R_FindNormalRandoms;

Obviously R_FindNormalRandoms would include R_FindNonInventoryRandoms;


Careful, I almost started world war 3 because I suggested that.

rj

2014-02-24 18:11:47

From: Sk1nyNerd
i agree.

why dont you just merge the current solved osr randoms in color with the new solved randoms in reflection. remove and replace the randoms that are being upgraded. avoids the whole problem of calling both methods of random solving and can be done rather quickly


OSR and reflection should be separate but compatible with each other ie can use reflection && color together, that was if either of them break it won't take down the whole project

Sk1nyNerd

2014-02-24 18:23:52

From: Officer Barbrady
OSR and reflection should be separate but compatible with each other ie can use reflection && color together, that was if either of them break it won't take down the whole project


i dont understand, are you infavor of what i said or is there a problem with what i said and that wont work??

Im saying put all of the current color solved randoms in the R_FindNormalRandoms so all you have to do is call R_FindNormalRandoms if you are using the reflection include

using R_FindNormalRandoms therefore completely eliminates the need to call FindNormalRandoms, no?

rj

2014-02-24 18:44:23

From: Sk1nyNerd
i dont understand, are you infavor of what i said or is there a problem with what i said and that wont work??

Im saying put all of the current color solved randoms in the R_FindNormalRandoms so all you have to do is call R_FindNormalRandoms if you are using the reflection include

using R_FindNormalRandoms therefore completely eliminates the need to call FindNormalRandoms, no?


Why put all the color randoms in R_FindNormalRandoms; the point of R_FindNormalRandoms; is to call reflection randoms, not color randoms. If we called the color randoms in the reflection randoms that would be misleading If one wanted to call both then they could simply do


procedure findAllRandoms;
begin
findNormalRandom;
R_FindNormalRandoms;
end;

Shouldn't be hard at all for somebody who is scripting

Sk1nyNerd

2014-02-24 19:02:04

From: Officer Barbrady
Why put all the color randoms in R_FindNormalRandoms; the point of R_FindNormalRandoms; is to call reflection randoms, not color randoms. If we called the color randoms in the reflection randoms that would be misleading If one wanted to call both then they could simply do


procedure findAllRandoms;
begin
findNormalRandom;
R_FindNormalRandoms;
end;

Shouldn't be hard at all for somebody who is scripting


combine them to create one solving method for those using reflection until reflection has all the randoms solved. i dont see the problem IMO. but yes i agree you could do it that way too

Kyle

2014-02-24 20:16:57

Ok guys, this thread has really escalated quickly and took a turn that it really shouldn't have. It seems like to me that everyone was just trying to voice their opinion, some more strongly than others, but hopefully nobody meant anything mean by it. So I would definitely like to move past that little bit of drama and continue with our plans on the include and working on randoms! If anybody would like to help contribute or has any ideas, but doesn't feel like posting on this thread, we have a reflection chat on skype that you would be more than welcome to join. Just Pm me and I can add you to it!

With that being said, we are going to keep the R_FindRandoms in the same general format that it is right now. As Meerkat and Sk1nnyNerd pointed out, the most efficient way to do the antirandoms is to call the detectors and solvers of the reflection solvers we have, and then pass along the ones we don't have to SRL random solvers and detection. While making reflection randoms separate will definitely work, it is too inefficient as you are calling the detectors for the same randoms with both reflection and SRL's. Hopefully this will soon not matter as reflection will be able to solve the majority of them.

Now some of the other points that were brought up with setting variables and other pieces will definitely be considered as there were some great ideas mentioned!

So, if we can try to keep this thread civil, i'm sure we will be able to keep expanding the include and soon be able to solve all randoms! :)

Frement

2014-02-25 02:25:15

From: Officer Barbrady
Why put all the color randoms in R_FindNormalRandoms; the point of R_FindNormalRandoms; is to call reflection randoms, not color randoms. If we called the color randoms in the reflection randoms that would be misleading If one wanted to call both then they could simply do


procedure findAllRandoms;
begin
findNormalRandom;
R_FindNormalRandoms;
end;

Shouldn't be hard at all for somebody who is scripting


R_FindNormalRandoms should be above FindNormalRandoms, because as a scripter I'd like to have reflection solve the randoms first, and if it can't solve something, then fall to color. With that function color would solve even the randoms that reflection should solve.

And I completely agree that color should not be used within reflection include.

masterBB

2014-02-25 17:05:44

{$IFDEF SRL5}//if srl osr has been included
{$IFDEF Lape} //if the interpreter is lape
function FindNormalRandom(): Boolean; override;
{$ELSE}
function R_FindNormalRandom(): Boolean;
{$ENDIF}
{$ENDIF}
begin

.. your code

{$IFDEF SRL5}//if srl osr has been included
{$IFDEF Lape} //if the interpreter is lape
inherited;
{$ENDIF}
{$ENDIF}
end;

You can even create a define like ONERANDOMDET or something similar people can define themselve. There are a thousands ways to solve this.

Kyle

2014-02-25 17:26:14

From: masterBB
{$IFDEF SRL5}//if srl osr has been included
{$IFDEF Lape} //if the interpreter is lape
function FindNormalRandom(): Boolean; override;
{$ELSE}
function R_FindNormalRandom(): Boolean;
{$ENDIF}
{$ENDIF}
begin

.. your code

{$IFDEF SRL5}//if srl osr has been included
{$IFDEF Lape} //if the interpreter is lape
inherited;
{$ENDIF}
{$ENDIF}
end;

You can even create a define like ONERANDOMDET or something similar people can define themselve. There are a thousands ways to solve this.


Thanks for the thoughts!
But I do have to say that we are not trying to fix anything with the include.The way that it is currently is clearly the most efficient and fastest way to do it.
Any other way will involve calling the detectors of both reflection and srl. Which isn't a wise thing to do no matter what reason is stated to seperate them.
Once we have most solved though it won't matter!

Kyle

2014-02-28 10:39:05

So we just now pushed a huge update to the include that I know many of us have been waiting for this for a long time. We now have a 100% accurate TileToMs that can be set with offsets for height and sides of tiles. There is also Uptext and menu choosing in this update as well. In the MapWalk most of the file has changed. We now have mainscreen walking functions and some that walk with minimap and when it gets a set distance away, will use mainscreen, just like a human would.

I will add more detail to this and expand the guide later today, but I have to go to class and just wanted to give you guys a heads up.

Oh, we tried our best to keep function and parameters the same to avoid compiling errors, but a few did change, so if anyone has any problems you can just pm me or message me on skype and I should be able to help!

Pakyakkistan

2014-02-28 10:58:26

R_ChooseTile'x' anything gets an 'Out of range @ line 442' error for the Tiles section of the include. Has to do with the TIleToMS, assuming new changes to the TileToMS has changed some things. Will wait to see anything on this :eek:

Frement

2014-02-28 11:03:23

From: Pakyakkistan
R_ChooseTIleOption gets an 'Out of range @ line 422' error for the Tiles section of the include. Will wait to see anything on this :eek:
Has to do with the TIleToMS


In Reflection.simba after line 212 there should be R_SetupCurves;

That causes the problem, you can add it in yourself for a fast fix.

Pakyakkistan

2014-02-28 11:28:41

From: Frement
In Reflection.simba after line 212 there should be R_SetupCurves;

That causes the problem, you can add it in yourself for a fast fix.


Thank you very much Frement!

Sk1nyNerd

2014-03-02 18:19:16

Can we get a variation of
R_NearTile(Tile: TPoint; Distance: Integer): Boolean;
that gets the current players standing tile and restricts the searching and finding of NPCs/Objects on the mainscreen and minimap to with in that distances radius?

This would allow for the player to stay in a however big area without ever having to check if its not within a distance and having to walk back a certain point because its only searching for things within that radius.

example: im in the middle of nowhere where there is a lot of trees and i only want to cut all the trees that are within 5 tiles of my current point.

with that example this function would most likely be called at the begining of the script, R_SetRadius(StartingTile: Tpoint; Radius: Integer);


i just want to be able to get my starting tile and restrict how far away i am clicking on NPC's/Objects. hope this makes sense ha thanks

Frement

2014-03-02 18:22:05

From: Sk1nyNerd
Can we get a variation of
R_NearTile(Tile: TPoint; Distance: Integer): Boolean;
that gets the current players standing tile and restricts the searching and finding of NPCs/Objects on the mainscreen and minimap to with in that distances radius?

This would allow for the player to stay in a however big area without ever having to check if its not within a distance and having to walk back a certain point because its only searching for things within that radius.

example: im in the middle of nowhere where there is a lot of trees and i only want to cut all the trees that are within 5 tiles of my current point.

with that example this function would most likely be called at the begining of the script, 'starting tile'


i just want to be able to get my starting tile and restrict how far away i am clicking on NPC's/Objects. hope this makes sense ha


That would be the logic that you as a script writer need to write, in my opinion.

Just detect your starting tile, search for NPC's/objects and sort them from your starting tile, and count the distance from that, then interact with them.

Sk1nyNerd

2014-03-02 18:32:20

From: Frement
That would be the logic that you as a script writer need to write, in my opinion.

Just detect your starting tile, search for NPC's/objects and sort them from your starting tile, and count the distance from that, then interact with them.


could but it would be more effcient than making TPA ATTPA and sorting functions every time imo. if you copy and paste it everytime you might as well make it a function

Kyle

2014-03-02 18:35:56

From: Sk1nyNerd
could but it would be more effcient than making TPA ATTPA and sorting functions every time imo. if you copy and paste it everytime you might as well make it a function


Well if we added something like that it would be doing the same thing just within the include lol. Frement is definitely right, anything this specific is best left to the scripter.

Sk1nyNerd

2014-03-02 18:39:02

From: elfyyy
Well if we added something like that it would be doing the same thing just within the include lol. Frement is definitely right, anything this specific is best left to the scripter.


alright lol just trying to simplify coding

Kyle

2014-03-05 23:17:18

Just commited a huge update to the include with the bulk of it being antirandoms! So please check out the tutorial and let us know of any problems with the solvers or if we could get an account that is stuck in a random!

Oh and Frement just added a couple Ground Item functions and I am wrapping up some Game Object functions! They will be added to the updater hopefully within the day!

EDIT: Just added Objects.simba and GroundItems.simba. Will add to tutorial tomorrow, i'm going to sleep now!

Pakyakkistan

2014-03-06 06:11:44

From: elfyyy
Just commited a huge update to the include with the bulk of it being antirandoms! So please check out the tutorial and let us know of any problems with the solvers or if we could get an account that is stuck in a random!

Oh and Frement just added a couple Ground Item functions and I am wrapping up some Game Object functions! They will be added to the updater hopefully within the day!

EDIT: Just added Objects.simba and GroundItems.simba. Will add to tutorial tomorrow, i'm going to sleep now!


*Heavy breathing*
Lookin' good! Liking the Objects and Items addition, will see what I can use this for next! Thanks all who working on the Reflection include!

Countan

2014-03-06 07:08:22

Great work guys, looking good!

Kyle

2014-03-09 01:25:38

We have been working on some documentation for the include lately and here's it so far: http://reflection.elfyyy.com/
Note: It's not complete yet and some comments are messed up, but I thought I might as well let some people at least see it how it is until its completely finished with :)

Pakyakkistan

2014-03-09 03:50:28

From: elfyyy
We have been working on some documentation for the include lately and here's it so far: http://reflection.elfyyy.com/
Note: It's not complete yet and some comments are messed up, but I thought I might as well let some people at least see it how it is until its completely finished with :)


Very nice, looking at it now. Fantastic work going on here!

samerdl

2014-03-10 03:32:38

Looks really good, glad you guys added some solvers to some of the unsolvable randoms :p.

Really liking this at the moment, i still script and use this but i almost never leave my guy alone, i also discovered something i never noticed before:

Reincarnate := true;
R_Reincarnate := true;

^ without those on each time i died my guy would just try to log out and mess up the script, ha, was i was confused.

edit1: only issue i got atm is that reflection commands are really heavy/slow on my scripts, r_findnormalrandoms is extremely slow :|, haven't tested any of the random solvers yet either, i will soon XD.


procedure findAllRandoms;
begin
R_FindNormalRandoms;
findNormalRandoms;
FindNonInventoryRandoms;
end;

This is my random detection command :), R_findnormalrandoms takes a bit long.. Findnormalrandoms is done instantly.

I am loving the distance from Tile command, its soooo helpful for me since i train in such a large area.

edit2: I am tying to make it so if i get any of the teleport randoms the solve will start R_Findnormalrandoms (ONLY if i get them) to avoid many precious seconds of delay from just constantly running the command.

I tried to copy paste the reflection demon file and rename it in the srl antirandoms didnt work, i tried to go to the srl file and just add r_findnormalrandoms and comment out everything else, didn't work when i added include antirandoms it gave me errors.

How can i make it so:



procedure findallrandoms;
begin
//condition here
Findnormalrandoms - if find demon/pete/any of the randoms the none reflection include cant solve then
r_findnoramlrandoms;
else
findandtalkto the rest of the randoms...
end;

How do i accomplish this easily?

Frement

2014-03-10 08:25:49

From: samerdl
Looks really good, glad you guys added some solvers to some of the unsolvable randoms :p.

Really liking this at the moment, i still script and use this but i almost never leave my guy alone, i also discovered something i never noticed before:

Reincarnate := true;
R_Reincarnate := true;

^ without those on each time i died my guy would just try to log out and mess up the script, ha, was i was confused.

edit1: only issue i got atm is that reflection commands are really heavy/slow on my scripts, r_findnormalrandoms is extremely slow :|, haven't tested any of the random solvers yet either, i will soon XD.


procedure findAllRandoms;
begin
R_FindNormalRandoms;
findNormalRandoms;
FindNonInventoryRandoms;
end;

This is my random detection command :), R_findnormalrandoms takes a bit long.. Findnormalrandoms is done instantly.

I am loving the distance from Tile command, its soooo helpful for me since i train in such a large area.

edit2: I am tying to make it so if i get any of the teleport randoms the solve will start R_Findnormalrandoms (ONLY if i get them) to avoid many precious seconds of delay from just constantly running the command.

I tried to copy paste the reflection demon file and rename it in the srl antirandoms didnt work, i tried to go to the srl file and just add r_findnormalrandoms and comment out everything else, didn't work when i added include antirandoms it gave me errors.

How can i make it so:



procedure findallrandoms;
begin
//condition here
Findnormalrandoms - if find demon/pete/any of the randoms the none reflection include cant solve then
r_findnoramlrandoms;
else
findandtalkto the rest of the randoms...
end;

How do i accomplish this easily?


The reflection include will call color solvers automatically, you only need to call R_FindNormalRandoms or R_FNRWait.

Pakyakkistan

2014-03-10 11:04:16

From: Frement
The reflection include will call color solvers automatically, you only need to call R_FindNormalRandoms or R_FNRWait.


Is this the ONLY random solver that needs to be called within a script? Or are R_FindCombatRandom and R_FindTalk needed to be called alongside R_FindNormalRandoms?

Frement

2014-03-10 11:13:31

From: Pakyakkistan
Is this the ONLY random solver that needs to be called within a script? Or are R_FindCombatRandom and R_FindTalk needed to be called alongside R_FindNormalRandoms?


R_FindNormalRandoms will call R_FindCombatRandoms (according to R_CombatRandoms) and R_FindTalk.

samerdl

2014-03-10 12:24:00

From: Frement
The reflection include will call color solvers automatically, you only need to call R_FindNormalRandoms or R_FNRWait.


Yeah but i don't wanna call the reflection anti because it has like a 15-20 second delay for me, it really slows down my script a lot since i call finding randoms every whee.

i want to call the findnormalrandoms with color and if its the teleport randoms (mordaut, prisonpete, drill demon etc) i don't want it to run the color solver i want it to call the reflection solver ONLY if it gets those randoms.

Perhaps something is wrong with simba for me, is it slow for you? or maybe its just the debugger is slow?

edit: how do you get rid of this annoying debugger, its annoying and just slows down everything (sorry to whoeverrrr made it!.)

Kyle

2014-03-10 12:32:46

From: samerdl
Yeah but i don't wanna call the reflection anti because it has like a 15-20 second delay for me, it really slows down my script a lot since i call finding randoms every whee.

i want to call the findnormalrandoms with color and if its the teleport randoms (mordaut, prisonpete, drill demon etc) i don't want it to run the color solver i want it to call the reflection solver ONLY if it gets those randoms.

Perhaps something is wrong with simba for me, is it slow for you? or maybe its just the debugger is slow?

edit: how do you get rid of this annoying debugger, its annoying and just slows down everything (sorry to whoeverrrr made it!.)


I am honestly so beyond confused right now about what you're saying. Normal color FindNormalRandoms takes like 2-3 secs to call. R_FindNormalRandoms takes under 100ms, so there's gotta be something wrong with your script. Just marktime how long it takes to call.

Pakyakkistan

2014-03-10 12:33:07

From: samerdl
Yeah but i don't wanna call the reflection anti because it has like a 15-20 second delay for me, it really slows down my script a lot since i call finding randoms every whee.

i want to call the findnormalrandoms with color and if its the teleport randoms (mordaut, prisonpete, drill demon etc) i don't want it to run the color solver i want it to call the reflection solver ONLY if it gets those randoms.

Perhaps something is wrong with simba for me, is it slow for you? or maybe its just the debugger is slow?

edit: how do you get rid of this annoying debugger, its annoying and just slows down everything (sorry to whoeverrrr made it!.)


If it slows you down, you may want to try restarting you Simba client, and the paired or sets of SMART clients as well. Sometimes memory load can occur during scripting and can lead to the delay. The reflection random solver calls the REFLECTION Random solvers FIRST and then it will solve using the SRL random solvers. So, unless it is not covered in the reflection include random solvers, it will be covered by reflection. You may also try using FNR_Wait as this will do both wait and check for randoms. Try moving around the random solvers. I have had problems with them slowing down my scripts in the past but I found it was more due to waits as well as excessive intent to solve randoms. And as far as the debug, i'm not to sure that can be changed since it is include based.

Edit: Elfyyy sneakin' in them ninja replys -:norris:

samerdl

2014-03-10 14:27:28

From: elfyyy
I am honestly so beyond confused right now about what you're saying. Normal color FindNormalRandoms takes like 2-3 secs to call. R_FindNormalRandoms takes under 100ms, so there's gotta be something wrong with your script. Just marktime how long it takes to call.


Its the debugger that's causing my slow down, not script/smart. How do i get rid of it, its this:


Seriously, why does it keep appearing!??

How do i make it never launch ever again when i start a script? each time i compile/run it launches, and r_find.. Takes a lot more than 100 MS!.

Have you guys figured out object clicking??

Pakyakkistan

2014-03-10 14:34:54

From: samerdl
Its the debugger that's causing my slow down, not script/smart. How do i get rid of it, its this:


Seriously, why does it keep appearing!??

How do i make it never launch ever again when i start a script? each time i compile/run it launches, and r_find.. Takes a lot more than 100 MS!.

Have you guys figured out object clicking??


You click the [x] in the top right hand corner to close the window or that funky looking J thing(J thing may actually set it to hide in your toolbar I can't quite remember), one of those, and the debugger will go away and allow you to play your script without seeing the current state of it. You must have opened the debug console when you started the script. If it continues to pop-up I would suggest closing Simba and Smart completely and then re-opening. Maybe check settings to see if you have changed something that deals with the debug console? Debugging console shouldn't slow anything down tho… Hopefully that helps. If not I will try to re-create the problem you are having with the debug console

Solar

2014-03-10 14:51:07

You've probably clicked to the left of the script line numbers and made red X's appear. When you do this and run scripts, the debugger appears.

Pakyakkistan

2014-03-10 15:22:18

From: Solar
You've probably clicked to the left of the script line numbers and made red X's appear. When you do this and run scripts, the debugger appears.


Here comes Solar to save the day! Thanks Solar for getting an answer out there. I have been spending all this time trying to figure out why the debugger would pop up without calling the debug button… Totally forgot all about the line debugging stuff thing(what the heck you even call those red x's?)

samerdl

2014-03-11 06:54:43

From: Solar
You've probably clicked to the left of the script line numbers and made red X's appear. When you do this and run scripts, the debugger appears.


Yea this sorted it out, thnx a lot!

P1nky

2014-03-11 08:21:59

This maybe a off topic question, but why was Reflection taken out in the previous years for Runescape (SRL)?

How and why was it introduced to us (I remember being around when there was a thread posted about the development at first)?
Why did we use it for just for just a short-term period?
Why did we not use it before it was actually introduced to us?

Thanks!
-P1nky

Kyle

2014-03-12 01:09:00

Just added some more object functions, and now have all runescape objects in the include! :)
I'll update the guide tomorrow, but for now you can check out the docs http://reflection.elfyyy.com/Objects.html


From: P1nky
This maybe a off topic question, but why was Reflection taken out in the previous years for Runescape (SRL)?

How and why was it introduced to us (I remember being around when there was a thread posted about the development at first)?

Mainly because Benland make SMART able to read client info

Why did we use it for just for just a short-term period?

The Bot nuke killed all reflection/injection for a while

Why did we not use it before it was actually introduced to us?

See #1

Thanks!
-P1nky

Pakyakkistan

2014-03-12 12:44:06

From: elfyyy
Just added some more object functions, and now have all runescape objects in the include! :)
I'll update the guide tomorrow, but for now you can check out the docs http://reflection.elfyyy.com/Objects.html


Why are some functions acclaimed 'not to be used in scripts'? It's not only here, just this was most prominent in the objects section, i've always been curious, figured now i'll ask. Are they meant to be more called within a function to return values for within scripts? Or used in separate occasions to get values?

Kyle

2014-03-17 16:10:12

Hey guys, sorry I haven't been working on the include much, I have been super busy with school lately and took a little break from scripting because of some tests. We noticed a few problems with R_InFight and thus with R_CombatRandoms and I have a fix for it which I will add later today.

If you guys find any bugs if you could please use this it will get emailed to me instantly and makes it much easier to work on and now that I have a bit more free time I should be able to fix them.


From: Pakyakkistan
Why are some functions acclaimed 'not to be used in scripts'? It's not only here, just this was most prominent in the objects section, i've always been curious, figured now i'll ask. Are they meant to be more called within a function to return values for within scripts? Or used in separate occasions to get values?


Yeah, it is a function that is used within the include that is either useless to a scripter or would have no use. For example, for finding the specific objects we use an array of 103 tiles to find each object. A scripter wouldn't have much success determining which tile the object is at considering that the 0-103 just refers to the position of the tile within the local loaded region :)

Pakyakkistan

2014-03-18 17:06:12

From: elfyyy
Hey guys, sorry I haven't been working on the include much, I have been super busy with school lately and took a little break from scripting because of some tests. We noticed a few problems with R_InFight and thus with R_CombatRandoms and I have a fix for it which I will add later today.

If you guys find any bugs if you could please use this it will get emailed to me instantly and makes it much easier to work on and now that I have a bit more free time I should be able to fix them.


Yeah, it is a function that is used within the include that is either useless to a scripter or would have no use. For example, for finding the specific objects we use an array of 103 tiles to find each object. A scripter wouldn't have much success determining which tile the object is at considering that the 0-103 just refers to the position of the tile within the local loaded region :)


You work on it when you can man! I don't think anyone can complain about it, considering the amount of effort you have put forth so far, as well as others. Do what you can, i'm sure we'll all be looking forward to it when you get to it! Once again, and i'm sure it won't be the last time I say it, thanks!

Oh, and @ my previous question; makes sense now after I tried using them. LOL

Kyle

2014-03-27 14:45:58

Updated to Rev. 42. Ground items are not working atm, will post back when we fix :)

EDIT:Fixed :)

Frement

2014-03-27 15:27:09

Ground items are now fixed. Happy botting.

EDIT: An issue with R_ChooseOption has now been fixed.
EDIT2: An issue with R_GetTileHeight has now been fixed.

samerdl

2014-03-29 05:59:07

Thanks for updating the include, i really appreciate it.

I like the NPC clicking functions now, i was curious to know if you guys can show me an example for object clicking such as agility obstacles and bank booths :)?

Frement

2014-03-29 06:35:38

From: samerdl
Thanks for updating the include, i really appreciate it.

I like the NPC clicking functions now, i was curious to know if you guys can show me an example for object clicking such as agility obstacles and bank booths :)?


A simple tile clicking function:
function F_OpenBank: Boolean;
var
Booth: TPoint;
begin
if (not LoggedIn) or (BankScreen) then
Exit;

//Varrock West: Point(3186, 3436)
//Lumbridge: Point(3208, 3221)
Booth := R_TileToMS(Point(3186, 3436));
MMouse(Booth.X, Booth.Y, 2, 2);
Sleep(100 + Random(100));
if (R_IsUpText('Bank Ba')) then begin
ClickMouse2(Mouse_Left);
end else begin
ClickMouse2(Mouse_Right);
Sleep(250 + Random(250));
R_ChooseOption('Bank Ba');
end;
Sleep(500 + Random(250));

if (PinScreen) then
InPin(Players[CurrentPlayer].Pin);

Result := WaitFunc(@BankScreen, 250, 2500);
Sleep(1000 + Random(250));
end;

samerdl

2014-03-29 08:33:10

From: Frement
A simple tile clicking function:
function F_OpenBank: Boolean;
var
Booth: TPoint;
begin
if (not LoggedIn) or (BankScreen) then
Exit;

//Varrock West: Point(3186, 3436)
//Lumbridge: Point(3208, 3221)
Booth := R_TileToMS(Point(3186, 3436));
MMouse(Booth.X, Booth.Y, 2, 2);
Sleep(100 + Random(100));
if (R_IsUpText('Bank Ba')) then begin
ClickMouse2(Mouse_Left);
end else begin
ClickMouse2(Mouse_Right);
Sleep(250 + Random(250));
R_ChooseOption('Bank Ba');
end;
Sleep(500 + Random(250));

if (PinScreen) then
InPin(Players[CurrentPlayer].Pin);

Result := WaitFunc(@BankScreen, 250, 2500);
Sleep(1000 + Random(250));
end;



Ah, i see there is no way to automatically grab object tiles - but to manually do them. Regardless its still awesome that you are able to click Objects! this makes Agility scripts very possible!.

Thanks!

Frement

2014-03-29 08:35:40

From: samerdl
Ah, i see there is no way to automatically grab object tiles - but to manually do them. Regardless its still awesome that you are able to click Objects! this makes Agility scripts very possible!.

Thanks!


It is possible to get the objects, and the tile from that information.

function GetClosestRock: TPoint;
var
Objects: TRSObjectArray;
Rocks: TPointArray;
I, J: Integer;
begin
if (not LoggedIn) then
Exit;
Result := Point(-1, -1);
Objects := R_GetObjectDistance(OBJ_GAME, 20);
for I := 0 to high(Objects) do begin
if (InIntArray(Coals, Objects[I].ID)) then begin
Inc(J);
SetLength(Rocks, J);
Rocks[High(Rocks)] := Objects[I].Tile;
end;
end;
if (not (Length(Rocks) > 0)) then
Exit;
SortTPAFrom(Rocks, R_GetTileGlobal);
Result := Rocks[0];
end;

samerdl

2014-03-31 08:43:51

From: Frement
It is possible to get the objects, and the tile from that information.

function GetClosestRock: TPoint;
var
Objects: TRSObjectArray;
Rocks: TPointArray;
I, J: Integer;
begin
if (not LoggedIn) then
Exit;
Result := Point(-1, -1);
Objects := R_GetObjectDistance(OBJ_GAME, 20);
for I := 0 to high(Objects) do begin
if (InIntArray(Coals, Objects[I].ID)) then begin
Inc(J);
SetLength(Rocks, J);
Rocks[High(Rocks)] := Objects[I].Tile;
end;
end;
if (not (Length(Rocks) > 0)) then
Exit;
SortTPAFrom(Rocks, R_GetTileGlobal);
Result := Rocks[0];
end;


Couldn't exactly wrap my mind around this command but the one you posted above works perfectly!:



function Clickobject(Objpoint: tpoint; Uptext: TStringArray): Boolean;
var
Bp, Booth: TPoint;
begin
if (not LoggedIn) then
Exit;
if R_DistanceFromTile(Objpoint) > 3 then
begin
Bp.x := Objpoint.x + 1;
Bp.Y := Objpoint.y - 1;
R_WalkPath([Bp]);
// r_webwalk(bp)
//R_WalkPath([objpoint]);
waithumanclick2;
end;
if R_DistanceFromTile(Objpoint) < 5 then
begin
Booth := R_TileToMS(ObjPoint);
MMouse(Booth.X, Booth.Y, 2, 2);
Sleep(100 + Random(100));
if (R_IsUpTextMulti(Uptext)) then
begin
result := true;
end;
end;
end;

function MMouseObject(Objpoint: tpoint; Uptext: TStringArray): Boolean;
var
Booth: TPoint;
begin
if (not LoggedIn) then
Exit;
Booth := R_TileToMS(ObjPoint);
MMouse(Booth.X, Booth.Y, 2, 2);
Sleep(100 + Random(100));
if (R_IsUpTextMulti(Uptext)) then
begin
result := true;
end;
end;

function LocateNPC(Name, Uptext: string): boolean;
var
Bp,Tp: Tpoint;
NpcName: tnpc;
begin
if R_FindNpc(Name, NpcName) then
begin
if NpcName.InCombat then
exit;
Tp := NpcName.Tile;

if R_DistanceFromTile(Tp) > 3 then
begin
Bp.x := Tp.x + 1;
Bp.Y := Tp.y - 1;
R_WalkPath([Bp]);
waithumanclick2;
end;

if R_DistanceFromTile(tp) < 5 then
begin
Tp := R_TileToMs(Tp);
Mmouse(Tp.x, Tp.y, 0, 0);
if R_WaitUptext(Uptext, 200) then
begin
result := true;
end;
end;
end;
end;



The way i obtain the Tile position of the object/npc i want is by using Osbot's entity debugger feature, i.e this:


Works so easily & well, no hassle and i don't have to read through 3 lines of debugged info ^_^. Osbot/tribot both can be used to debug info for free!.

Now am more curious to know, would it be possible in the near future to solve all randoms using the reflection include?. Damn i love this too, its perfect for training at spots that don't have randoms/only have talk and no teleport randoms :D. Thnx a lot.

Frement

2014-03-31 08:47:10

From: samerdl
Couldn't exactly wrap my mind around this command but the one you posted above works perfectly!:



function Clickobject(Objpoint: tpoint; Uptext: TStringArray): Boolean;
var
Bp, Booth: TPoint;
begin
if (not LoggedIn) then
Exit;
if R_DistanceFromTile(Objpoint) > 3 then
begin
Bp.x := Objpoint.x + 1;
Bp.Y := Objpoint.y - 1;
R_WalkPath([Bp]);
// r_webwalk(bp)
//R_WalkPath([objpoint]);
waithumanclick2;
end;
if R_DistanceFromTile(Objpoint) < 5 then
begin
Booth := R_TileToMS(ObjPoint);
MMouse(Booth.X, Booth.Y, 2, 2);
Sleep(100 + Random(100));
if (R_IsUpTextMulti(Uptext)) then
begin
result := true;
end;
end;
end;

function MMouseObject(Objpoint: tpoint; Uptext: TStringArray): Boolean;
var
Booth: TPoint;
begin
if (not LoggedIn) then
Exit;
Booth := R_TileToMS(ObjPoint);
MMouse(Booth.X, Booth.Y, 2, 2);
Sleep(100 + Random(100));
if (R_IsUpTextMulti(Uptext)) then
begin
result := true;
end;
end;

function LocateNPC(Name, Uptext: string): boolean;
var
Bp,Tp: Tpoint;
NpcName: tnpc;
begin
if R_FindNpc(Name, NpcName) then
begin
if NpcName.InCombat then
exit;
Tp := NpcName.Tile;

if R_DistanceFromTile(Tp) > 3 then
begin
Bp.x := Tp.x + 1;
Bp.Y := Tp.y - 1;
R_WalkPath([Bp]);
waithumanclick2;
end;

if R_DistanceFromTile(tp) < 5 then
begin
Tp := R_TileToMs(Tp);
Mmouse(Tp.x, Tp.y, 0, 0);
if R_WaitUptext(Uptext, 200) then
begin
result := true;
end;
end;
end;
end;



The way i obtain the Tile position of the object/npc i want is by using Osbot's entity debugger feature, i.e this:


Works so easily & well, no hassle and i don't have to read through 3 lines of debugged info ^_^. Osbot/tribot both can be used to debug info for free!.


So, what exactly is your question? Or does everything work good? :)

samerdl

2014-03-31 08:48:10

From: Frement
So, what exactly is your question? Or does everything work good? :)


dang you reply fast, look at the post i edited above.

And ye was just reporting back in :D

Frement

2014-03-31 09:04:48

From: samerdl
dang you reply fast, look at the post i edited above.

And ye was just reporting back in :D


Solving all randoms is among the future goals. You might want to consider botting in PvP worlds (Fletching for example, Lumbridge yard is a protected zone and there is a bank chest there).

samerdl

2014-03-31 09:45:40

From: Frement
Solving all randoms is among the future goals. You might want to consider botting in PvP worlds (Fletching for example, Lumbridge yard is a protected zone and there is a bank chest there).


Never knew that, brilliant! wow.! WOW! WOW!.

Omg! ty!

vizzyy

2014-03-31 20:08:19



function findMollyControls: tpoint;
var
objects:trsobjectarray;
i:integer;
begin
result:=point(0,0);
objects:=R_GetAllObjects(0);
for i:=0 to high(objects) do
begin
if (objects[i].ID = 9337) then
begin
result:=objects[i].tile;
break;
end;
end;
end;

function paintSuspects(Text:string):boolean;
var
i:integer;
npcarray:tnpcArray;
begin
//Smart_Clearcanvas;
npcarray:=R_getallNpcs;
if(not (text = '')) then
//SMART_DrawTextEx(false,7,56,'UpChars07',text,clYellow);
for i:=0 to high(npcarray) do
begin
//SMART_DrawTextEx(false,R_Tiletoms(npcarray[i].tile).x,R_Tiletoms(npcarray[i].tile).y,'UpChars07',''+inttostr(npcarray[i].npcID),clYellow);
end;
end;

function findMollyClaw: tpoint;
var
objects:trsobjectarray;
i:integer;
begin
result:=point(0,0);
objects:=R_GetAllObjects(0);
for i:=0 to high(objects) do
begin
if (objects[i].ID = 9335) then
begin
result:=objects[i].tile;
break;
end;
end;
end;

function doClaw(npcID:integer): boolean; // Version 2 - Calculates X/Y together per iteration
var
left,right,up,down,finish,claw:tpoint;
suspects:tnpcarray;
target:tnpc;
x1,x2,x3,y1,y2,y3,i,a:integer;
begin
R_FindNpc(npcID,target);
up:=point(642,292);
down:=point(642,377);
left:=point(598,329);
right:=point(682,329);
finish:=point(700,425);
paintSuspects('Beginning Claw Phase...');
while(not aretalking) do
begin
R_FindNpc(npcID,target);
Claw:=FindMollyClaw;
if(aretalking) then
break;
x1:=target.Tile.x;
x2:=claw.x;
y1:=target.Tile.y;
y2:=claw.y;
while (not (x1 = x2) and not (y1 = y2)) do
begin
R_FindNpc(npcID,target);
Claw:=FindMollyClaw;
if((target.tile = Claw) or areTalking) then
break;
x1:=target.Tile.x;
x2:=Claw.x;
x3:=x1-x2;
if(round(abs(x3))>10) then
x3:=0;
y1:=target.Tile.y;
y2:=Claw.y;
y3:=y1-y2;
if(round(abs(y3))>10) then
y3:=0;
if(x2 > x1) then
begin
paintSuspects('Right - '+inttostr(round(abs(x3))));
for i:=1 to round(abs(x3)) do
mouse(right.x,right.y,3,3,true);
end;
if(x2 < x1) then
begin
paintSuspects('Left - '+inttostr(round(abs(x3))));
for i:=1 to round(abs(x3)) do
mouse(left.x,left.y,3,3,true);
end;
if(y3 < 0) then
begin
paintSuspects('Up - '+inttostr(round(abs(y3))));
for i:=1 to round(abs(y3)) do
mouse(up.x,up.y,3,3,true);
end;
if(y3 > 0) then
begin
paintSuspects('Down - '+inttostr(round(abs(y3))));
for i:=1 to round(abs(y3)) do
mouse(down.x,down.y,3,3,true);
end;
end;
mouse(finish.x,finish.y,3,3,true);
wait(randomrange(4000,6000));
if(aretalking) then
break;
end;
ClickContinueEx(true,true);
wait(randomrange(1000,2000));
finish:=R_gettileglobal;
R_BlindWalkMS(point(finish.x-5,finish.y+1));
while r_iswalking do
wait(500);
R_OpenDoor(point(finish.x-5,finish.y+1),'W');
while r_iswalking do
wait(500);
wait(randomrange(2000,3000));
end;

function applyConst(mollyid:integer;npcarray:TNPCarray):integer;
var
i,j:integer;
mollyconstants:array of integer;
begin
mollyconstants:=[802,3087];
result:=0;
for i:=0 to high(npcarray) do
begin
for j:=0 to high(mollyconstants) do
begin
if((npcarray[i].npcid = (mollyid + mollyConstants[j])) or (npcarray[i].npcid = (mollyid - mollyConstants[j]))) then
begin
writeln(inttostr(npcarray[i].npcid));
result:=npcarray[i].npcid;
exit;
end;
end;
end;
end;

function mollyTwins: boolean ;
var
mollyID:integer;
molly:TNPC;
targets:tnpcarray;
begin
if(R_FindNpc('Molly',molly)) then
begin
paintSuspects('Molly Random Initiated...');
mollyID:=molly.NpcID;
writeln(mollyid);
MakeCompass('N');
wait(randomrange(2000,3000));
R_OpenDoor(point(molly.tile.x+5,molly.tile.y+2),'W');
while r_iswalking do
wait(500);
ClickContinueEx(true,true);
wait(randomrange(900,1600));
ClickText('now','CharsNPC07',MCX1,MCY1,MCX2,MCY2,true);
wait(randomrange(500,600));
while aretalking do
ClickContinueEx(true,true);
wait(randomrange(1500,2000));
paintSuspects('Using Claw...');
mouse(R_TiletoMS(findMollyControls).x,R_TiletoMS(findMollyControls).y,3,3,true);
while r_iswalking do
wait(500);
targets:=R_GetAllNpcs;

doClaw(applyConst(mollyid,targets));

R_FindNpc('Molly',molly);
mouse(R_TiletoMS(molly.tile).x,R_TiletoMS(molly.tile).y,3,3,true);
while r_iswalking do
wait(1000);
while aretalking do
ClickContinueEx(true,true);
end;
end;

samerdl

2014-04-01 09:08:51

vizzyy, solver looks really good.

I like how you map the door/molly/claw, will give it a try when i get the random.

vizzyy

2014-04-01 10:06:46

From: samerdl
vizzyy, solver looks really good.

I like how you map the door/molly/claw, will give it a try when i get the random.


Thanks! I did it that way because the molly random location moves around to several possible locations, which would break any sort of static tile references or if you try and detect the random with a simple withinPolygon sort of thing. Whereas molly's location is always in the same place relative to the door, so you can just find her and then offset it to the door. Same thing with the claw control panel.

Kyle

2014-04-01 12:03:40

Just pushed a new update. I've been doing a lot of work and made a bunch of changes with the antirandoms. It should now work with all of the talking and combat randoms other than Giles/Miles and the Sandwhich Lady. If a player gets one of those it will logout and make the player inactive.

I also changed the name to R_GetObject(s)Distance adding the "s" for proper grammar. So if you used this function previously you must add the "s" or it won't compile!

I added R_FindObjectDistance, this works the same as R_FindNpc. It will return as a boolean and save the closed object found as a TRSObject within the first parameter, making it easier to do object functions in scripts.

As always, please post any suggestions for new functions and any bugs please report either on this thread or here

rj

2014-04-02 21:36:50

From: elfyyy
Just pushed a new update. I've been doing a lot of work and made a bunch of changes with the antirandoms. It should now work with all of the talking and combat randoms other than Giles/Miles and the Sandwhich Lady. If a player gets one of those it will logout and make the player inactive.

I also changed the name to R_GetObject(s)Distance adding the "s" for proper grammar. So if you used this function previously you must add the "s" or it won't compile!

I added R_FindObjectDistance, this works the same as R_FindNpc. It will return as a boolean and save the closed object found as a TRSObject within the first parameter, making it easier to do object functions in scripts.

As always, please post any suggestions for new functions and any bugs please report either on this thread or here

Are the object hooks outdated or am I doing this wrong(most likely the case)


for i := 0 to 3 do
begin
objects := R_GetAllObjects(i);
writeln('test' + toStr(objects));
for k := 0 to high(objects) do
begin
pt := R_TileToMs(objects[k].tile);
if ((pt.x - 5) > 0) and ((pt.x - 5) < 515) and ((pt.y - 25) > 0) and ((pt.y - 25) < 337) then
begin
SMART_DrawText(pt.x - 5, pt.y - 25, 'smallchars07', toStr(objects[k].ID), 65280);
SMART_DrawCircle(false, pt, 1, false, 254);
end;
end;
end;

IT doesn't even reach the test writel -.-


was getting all the objects and it was taking hella long

Kyle

2014-04-02 22:36:54

From: Robert
Are the object hooks outdated or am I doing this wrong(most likely the case)


for i := 0 to 3 do
begin
objects := R_GetAllObjects(i);
writeln('test' + toStr(objects));
for k := 0 to high(objects) do
begin
pt := R_TileToMs(objects[k].tile);
if ((pt.x - 5) > 0) and ((pt.x - 5) < 515) and ((pt.y - 25) > 0) and ((pt.y - 25) < 337) then
begin
SMART_DrawText(pt.x - 5, pt.y - 25, 'smallchars07', toStr(objects[k].ID), 65280);
SMART_DrawCircle(false, pt, 1, false, 254);
end;
end;
end;

IT doesn't even reach the test writel -.-


was getting all the objects and it was taking hella long


Lol, Yeah, you definitely don't want to get all the objects haha.

Dgby714

2014-04-03 01:17:30

I was bored…

Should allow you to compile and run OSR+Reflection scripts in Lape… https://github.com/JohnPeel/osrreflection/commit/636a3806e7f4170a5d89237384bf61e91de25796

Brandon

2014-04-03 11:27:49

More Leaks. Be careful..


_Next := SmartGetFieldObject(SmartCurrentTarget, _Next, Node_next); // R_GetGroundItemsAt

Me := SmartGetFieldObject(SmartCurrentTarget, 0, client_player); // R_GetActorLoopCycle

TheRegion := SmartGetFieldObject(SmartCurrentTarget, 0, client_region); // R_GetGameObject
TheObjects := SmartGetFieldArrayObject(SmartCurrentTarget, Tile, SceneTile_worldObjects, i); // R_GetGameObject

TheRegion := SmartGetFieldObject(SmartCurrentTarget, 0, client_region); // R_GetWalLObject

TheRegion := SmartGetFieldObject(SmartCurrentTarget, 0, client_region); // R_GetFloorDecorationObject

TheRegion := SmartGetFieldObject(SmartCurrentTarget, 0, client_region); // R_GetBoundaryObject

Frement

2014-04-03 11:31:42

Nice catch @ R_GetGroundItemsAt. I had it previously as _Node so there is a SmartFreeObject for _Node, forgot to change to _Next :)

Brandon

2014-04-03 11:40:36

From: Frement
Nice catch @ R_GetGroundItemsAt. I had it previously as _Node so there is a SmartFreeObject for _Node, forgot to change to _Next :)


Thanks but:


SmartFreeObject(SmartCurrentTarget, _Next);
_Next := SmartGetFieldObject(SmartCurrentTarget, _Next, Node_next);

are the new changes? If so..

_Next is null because it was freed before the call to SmartGetFieldObject. So the call to SmartGetFieldObject that takes _Next is taking a nullptr.


The patch should be:

_Temp := _Next;
_Next := SmartGetFieldObject(SmartCurrentTarget, _Temp, Node_next);
SmartFreeObject(SmartCurrentTarget, _Temp);

Frement

2014-04-03 11:43:24

@Brandon; thanks Mr. Eagle Eye :p

Xenobitz

2014-04-03 14:24:36

This seems like the most relevant place to post. Is there a way to grab the current world using reflection?

I want to write a antiban function to hop to random world if you end up on bot worlds (85-86). Jagex has recently started moving bots to these worlds to monitor them and ban them.

vizzyy

2014-04-03 19:29:13

From: Xenobitz
This seems like the most relevant place to post. Is there a way to grab the current world using reflection?

I want to write a antiban function to hop to random world if you end up on bot worlds (85-86). Jagex has recently started moving bots to these worlds to monitor them and ban them.




if((CurrentWorld = 385) or (CurrentWorld = 386)) then
begin
logout;
Writeln('World is hot. GTFO.');
terminatescript;
end;


Xenobitz

2014-04-11 15:01:10

After updating Reflection the following code
R_WalkPath([Point(x, y), Point(x, y), Point(x, y)]);

throw the error

[Error] C:\Users\*\Simba\Scripts\***.simba(68:37): Type mismatch at line 68

It ran fine before the update. What gives?

Kyle

2014-04-11 15:44:08

From: Xenobitz
After updating Reflection the following code
R_WalkPath([Point(x, y), Point(x, y), Point(x, y)]);

throw the error

[Error] C:\Users\*\Simba\Scripts\***.simba(68:37): Type mismatch at line 68

It ran fine before the update. What gives?


What you posted will work, nothing wrong with it. Probably is the line above throwing the error.

Xenobitz

2014-04-11 20:43:52

From: elfyyy
What you posted will work, nothing wrong with it. Probably is the line above throwing the error.


R_OpenDoor has become R_OpenDoorAtTile? Because that's the line above it

Frement

2014-04-11 21:41:03

From: Xenobitz
R_OpenDoor has become R_OpenDoorAtTile? Because that's the line above it


That is most likely your type mismatch error.

Unfold

2014-04-24 15:46:24

I keep getting this, is this something with the hooks?


Kyle

2014-04-24 15:58:17

From: Unfold
I keep getting this, is this something with the hooks?



No, it's not an error. I assume you are using something with a object or npc function, such as the antirandoms. This happens when searching for npc's and the index isn't valid and it tries to pull data from it.

Xenobitz

2014-04-24 21:02:17

Suddenly R_GetInv2 doesn't exist anymore.

but that's okay, because I backed up my custom function for getting the inventory…

But now that no longer works because R_GetWidget2 is also gone.

Is there somewhere where I can see what functions have been removed and what they've been replaced by? Because I've got like 23 custom scripts that are now broken in various ways and I'm not exactly having an easy time figuring out wtf is going on.

Kyle

2014-04-24 21:05:02

From: Xenobitz
Suddenly R_GetInv2 doesn't exist anymore.

but that's okay, because I backed up my custom function for getting the inventory…

But now that no longer works because R_GetWidget2 is also gone.

Is there somewhere where I can see what functions have been removed and what they've been replaced by? Because I've got like 23 custom scripts that are now broken in various ways and I'm not exactly having an easy time figuring out wtf is going on.


If you honestly have 23 scripts that is pretty impressive. You must be badly mistaken, we have never had those functions in the include.

EDIT: The fact that they have number 2 after them would lead me to assume that they were give to you by someone? As we would of course never name a function like that in the include. Depending on the use it would just be named TheFunctionEx…

Xenobitz

2014-04-24 21:10:35

From: elfyyy
If you honestly have 23 scripts that is pretty impressive. You must be badly mistaken, we have never had those functions in the include.


I know I'm not mistaken…

R_GetInv2 was under "Player"

R_GetWidget2 was under "Misc"

As soon as I ran a script, reflection updated, and those functions no longer exist. I'm actually missing A LOT of functions from Reflection recently, but I do know for a fact that those two existed in the official include less than a week ago.

Let me re-install and see if that helps…

"The fact that they have number 2 after them would lead me to assume that they were give to you by someone? As we would of course never name a function like that in the include. Depending on the use it would just be named TheFunctionEx…"

Nope. I've never imported code from anyone but Reflection. Perhaps someone was testing those functions and that's why the have a 2 after them, then they removed it from the include?

EDIT2:
https://code.google.com/p/osrreflection/source/detail?r=4380974557bc43f99c1d0a0094780d44484882a2

There's the revision that removed all of the functions I was using. They DID exist. Now all I'm wondering is what was wrong with them/can you put them back in?

Kyle

2014-04-24 21:35:15

From: Xenobitz
I know I'm not mistaken…

R_GetInv2 was under "Player"

R_GetWidget2 was under "Misc"

As soon as I ran a script, reflection updated, and those functions no longer exist. I'm actually missing A LOT of functions from Reflection recently, but I do know for a fact that those two existed in the official include less than a week ago.

Let me re-install and see if that helps…

"The fact that they have number 2 after them would lead me to assume that they were give to you by someone? As we would of course never name a function like that in the include. Depending on the use it would just be named TheFunctionEx…"

Nope. I've never imported code from anyone but Reflection. Perhaps someone was testing those functions and that's why the have a 2 after them, then they removed it from the include?

EDIT2:
https://code.google.com/p/osrreflection/source/detail?r=4380974557bc43f99c1d0a0094780d44484882a2

There's the revision that removed all of the functions I was using. They DID exist. Now all I'm wondering is what was wrong with them/can you put them back in?


Oh that's news to me lol. Have been busy with school lately. Well we are waiting on adding in widgets until they are completely done, but you can just add them to your scripts and they will work fine.

Cheddy

2014-05-03 16:01:24

Not to point out future problems…. But, I can't see a workaround at the minute. Simba currently has no function for invoking methods, and the likes of Items require a method to be invoked to get the composite. As of R44:
(II)Lad; 'getItemComposite' returns 'ej.i'

The only way around this is to either get a function in simba for invoking native RS methods…

Also, have you guys got widgets sorted yet, cause without injection getting the bounds is causing a lot of confusion

Frement

2014-05-03 16:19:47

From: fish1328
Not to point out future problems…. But, I can't see a workaround at the minute. Simba currently has no function for invoking methods, and the likes of Items require a method to be invoked to get the composite. As of R44:

The only way around this is to either get a function in simba for invoking native RS methods…

Also, have you guys got widgets sorted yet, cause without injection getting the bounds is causing a lot of confusion


If I make it so the logic works for, lets say bank screen, the same logic wont work for inventory, equipment or anything else, and vice versa. I'm suing the widget bounds + position hooks.

And getItemComposite method caches the composites, and there are hooks for the caches, haven't had time to add that yet.

Got a theory how to get the widget positions to work? Because thats the only problem with them currently.

Cheddy

2014-05-03 16:33:37

In my bot I use:

int WidgetPosX = Widget.getRelativeX;
Widget parent = null;
while ((parent = Widget.getParent) != null){
WidgetPosX += parent.getRelativeX;
}
WidgetPosX += Widget.getX;
Chatbox has an offset of 24x20 and I don't know about bank.

I believe you can do it by using the widget boundsIndex as the identifier in the widgetXPositions array in the client as well :D

Cheddy

2014-05-03 16:35:45

From: Frement

And getItemComposite method caches the composites, and there are hooks for the caches, haven't had time to add that yet.

And I don't believe there are Widget cache hooks. Looked throughout the Javahacking logs and the client and can't see any :/
Do you want me to make any part of the api? I have a working java bot so I know how it all works =)

Frement

2014-05-03 16:45:32

From: fish1328
And I don't believe there are Widget cache hooks. Looked throughout the Javahacking logs and the client and can't see any :/
Do you want me to make any part of the api? I have a working java bot so I know how it all works =)


Cache is ad.q and the size of it is 64.

And yes, by using the boundsIndex and widgetPositions it works for some, but fails for others.

Cheddy

2014-05-03 16:49:55

Ahhh, I was wrong, there is a config cache at ad.q :D Just found it in the method haha =)I don't know how it's used though =/

mv.visitFieldInsn(GETSTATIC, "ad", "q", "Lfs;"); <– Thats the field

Cheddy

2014-05-03 16:55:02

The cache would be useless to me anyways: The only hooks I have for it are:

Cache identified as fs [Extends java/lang/Object]
---> HashTable 'getHashTable' returns 'fs.q'
---> CacheableNode 'getCacheableNode' returns 'fs.e'
---> Queue 'getQueue' returns 'fs.j'

I don't know how this is used to get an ItemDef but I assume it can be :D

Frement

2014-05-03 17:00:32

From: fish1328
The cache would be useless to me anyways: The only hooks I have for it are:

Cache identified as fs [Extends java/lang/Object]
---> HashTable 'getHashTable' returns 'fs.q'
---> CacheableNode 'getCacheableNode' returns 'fs.e'
---> Queue 'getQueue' returns 'fs.j'

I don't know how this is used to get an ItemDef but I assume it can be :D


As ItemDefinition extends CacheableNode, you can get the fields of ItemDefinition from the CacheableNode. As the ItemDefinitionCache (ad.q) contains the cached item definitions.

EDIT: ad.aa * 2112439054 to get the ID of the item.

Cheddy

2014-05-03 17:17:02

So something like this would return the modelSizeX:

function R_getModelSizeX(): Integer;
itemCache, itemCacheableNode: Integer;
begin
itemCache := SmartGetFieldObject(SmartCurrentTarget, 0, Client_getItemCache);
itemCacheableNode := SmartGetFieldObject(SmartCurrentTarget, itemCache, Cache_getCacheableNode);
result := SmartGetFieldInt(SmartCurrentTarget,itemCacheableNode , ItemComposite_getModelSizeX) * ItemComposite_getModelSizeX_Multiplier;
SmartFreeObject(SmartCurrentTarget, itemCache);
SmartFreeObject(SmartCurrentTarget, itemCacheableNode);
end;

That's using my hooks file: [ATTACH]23247[/ATTACH]

Frement

2014-05-03 17:20:09

From: fish1328
So something like this would return the modelSizeX:

function R_getModelSizeX(): Integer;
itemCache, itemCacheableNode: Integer;
begin
itemCache := SmartGetFieldObject(SmartCurrentTarget, 0, Client_getItemCache);
itemCacheableNode := SmartGetFieldObject(SmartCurrentTarget, itemCache, Cache_getCacheableNode);
result := SmartGetFieldInt(SmartCurrentTarget,itemCacheableNode , ItemComposite_getModelSizeX) * ItemComposite_getModelSizeX_Multiplier;
SmartFreeObject(SmartCurrentTarget, itemCache);
SmartFreeObject(SmartCurrentTarget, itemCacheableNode);
end;

That's using my hooks file: [ATTACH]23247[/ATTACH]


Yeah something like that.

Cheddy

2014-05-03 17:23:23

Do you want me to help with any api's, or hooks? I have 175 hooks atm on my Updater (Just don't really want to release it open source); however; I am currently working on a self updating hooks file. An app will run constantly checking whether RS has updated and if it has, it runs my analyser and will publish my hooks file. Just don't know where to put the file haha. Was kinda think pastebin, unless any of you guys know how to use the Java API for google drive; I hate web stuff and auth…

I'm happy to help out making the API though if you want

Krazy_Meerkat

2014-05-04 07:48:12

From: fish1328
Do you want me to help with any api's, or hooks? I have 175 hooks atm on my Updater (Just don't really want to release it open source); however; I am currently working on a self updating hooks file. An app will run constantly checking whether RS has updated and if it has, it runs my analyser and will publish my hooks file. Just don't know where to put the file haha. Was kinda think pastebin, unless any of you guys know how to use the Java API for google drive; I hate web stuff and auth…

I'm happy to help out making the API though if you want


I've was working on a similar framework (the update-checker/hook-updater) using java servelets but it wasn't completed.. I think it was discussed that servers might be needed and we didn't want to overcomplicate things.. Something like that..

In all honesty, I'd really appreciate some help with hooks.. Add me on skype, fish.

tristen8878

2014-05-04 10:44:57

From: Krazy_Meerkat
I've was working on a similar framework (the update-checker/hook-updater) using java servelets but it wasn't completed.. I think it was discussed that servers might be needed and we didn't want to overcomplicate things.. Something like that..

In all honesty, I'd really appreciate some help with hooks.. Add me on skype, fish.


I would like to help out with finding the hooks as I would like to learn more about how reflection works is it possible we could talk over skype sometime?

My skype is t2kftw

Cheddy

2014-05-04 18:42:38

I think I have most of the necessary hooks as such (Apart from login and game state/energy and weight break in 2 out of the 44 revs as well)

Cheddy

2014-05-05 16:36:17

Why is there no way to do spoilers on villavu?

Can a java app be initiated in simba and then the output parsed; as my auto updater will run from pastebin using the java pastebin api to put my latest log on pastebin as soon as rs updates. Then, in the reflection api, a java worker could be initiated just to use the pastebin api to get my latest post which would be the latest hooks. Completely flawless throughout revisions, and kept up to date as fast as RS. That is my idea…

Anyways, here is my simba output log (tell me if there are any hooks I should add):


{ 181 Hooks Found By Cheddys Beautiful Updater }

const
ReflectionRevision = 44;


{* Wall - 11 Hooks *}
Wall = 'de';
Wall_getFlags = 'u';
Wall_getFlags_Multiplier = 1787916463;
Wall_getHeight = 'j';
Wall_getHeight_Multiplier = -845646027;
Wall_getID = 'd';
Wall_getID_Multiplier = -533869271;
Wall_getOrientation = 'q';
Wall_getOrientation_Multiplier = -1464134821;
Wall_getPlane = 'e';
Wall_getPlane_Multiplier = -1486979233;
Wall_getRelativeY = 'm';
Wall_getRelativeY_Multiplier = 1140753665;
Wall_getBackupRenderable = 'a';
Wall_getRelativeX = 'z';
Wall_getRelativeX_Multiplier = -1087332817;
Wall_getY = 'k';
Wall_getY_Multiplier = 1499328943;
Wall_getX = 'i';
Wall_getX_Multiplier = -1891346871;
Wall_getRenderable = 'w';

{* SceneObject - 12 Hooks *}
SceneObject = 'cy';
SceneObject_getFlags = 'g';
SceneObject_getFlags_Multiplier = -1132466415;
SceneObject_getID = 't';
SceneObject_getID_Multiplier = -1146448229;
SceneObject_getOffsetX = 'w';
SceneObject_getOffsetX_Multiplier = 1869762125;
SceneObject_getOrientation = 'z';
SceneObject_getOrientation_Multiplier = 1308633513;
SceneObject_getPlane = 'e';
SceneObject_getPlane_Multiplier = 21115503;
SceneObject_getRelativeY = 'a';
SceneObject_getRelativeY_Multiplier = -1487550165;
SceneObject_getRelativeX = 'm';
SceneObject_getRelativeX_Multiplier = 1198689057;
SceneObject_getY = 'q';
SceneObject_getY_Multiplier = -1423235875;
SceneObject_getX = 'k';
SceneObject_getX_Multiplier = -587374085;
SceneObject_getRenderable = 'j';
SceneObject_getOffsetY = 'd';
SceneObject_getOffsetY_Multiplier = 64240557;
SceneObject_getZ = 'i';
SceneObject_getZ_Multiplier = 1833915461;

{* Model - 11 Hooks *}
Model = 'do';
Model_getVerticesLength = 'j';
Model_getVerticesLength_Multiplier = 1;
Model_getIndicesLength = 'a';
Model_getIndicesLength_Multiplier = 1;
Model_getIndicesX = 'd';
Model_getVerticesZ = 'w';
Model_getVerticesY = 'm';
Model_getVerticesX = 'z';
Model_getIndicesZ = 'p';
Model_getIndicesY = 'u';
Model_getTexturedIndicesY = 'g';
Model_getTexturedIndicesX = 't';
Model_getTexturedIndicesZ = 'o';

{* Widget - 22 Hooks *}
Widget = 'fl';
Widget_getID = 'p';
Widget_getID_Multiplier = 692329857;
Widget_getStackSizes = 'dw';
Widget_getParent = 'bc';
Widget_getContentIDs = 'dw';
Widget_getIndex = 't';
Widget_getIndex_Multiplier = -147122741;
Widget_getChildren = 'da';
Widget_getActions = 'bb';
Widget_getBoundsIndex = 'db';
Widget_getBoundsIndex_Multiplier = -1777308095;
Widget_getParentID = 'l';
Widget_getParentID_Multiplier = -1609096221;
Widget_getOpcodes = 'dk';
Widget_getText = 'bk';
Widget_getType = 'o';
Widget_getType_Multiplier = 644671717;
Widget_getHeight = 'r';
Widget_getHeight_Multiplier = 2108824679;
Widget_getRelativeY = 's';
Widget_getRelativeY_Multiplier = -1785434187;
Widget_getName = 'bu';
Widget_getRelativeX = 'f';
Widget_getRelativeX_Multiplier = 1417707275;
Widget_getY = 'x';
Widget_getY_Multiplier = 723086927;
Widget_getScrollX = 'h';
Widget_getScrollX_Multiplier = -1383540543;
Widget_getX = 'b';
Widget_getX_Multiplier = -2099276977;
Widget_getScrollY = 'v';
Widget_getScrollY_Multiplier = -634296339;
Widget_getActionType = 'g';
Widget_getActionType_Multiplier = 1615961513;
Widget_getWidth = 'y';
Widget_getWidth_Multiplier = 81943873;

{* Player - 2 Hooks *}
Player = 'k';
Player_getModel = 't';
Player_getName = 'e';

{* ObjectComposite - 2 Hooks *}
ObjectComposite = 'av';
ObjectComposite_getName = 'p';
ObjectComposite_getActions = 'al';

{* FloorDecoration - 6 Hooks *}
FloorDecoration = 'dk';
FloorDecoration_getFlags = 'z';
FloorDecoration_getFlags_Multiplier = 1675665355;
FloorDecoration_getID = 'j';
FloorDecoration_getID_Multiplier = -1581878055;
FloorDecoration_getPlane = 'e';
FloorDecoration_getPlane_Multiplier = -799417273;
FloorDecoration_getY = 'k';
FloorDecoration_getY_Multiplier = 1479624025;
FloorDecoration_getX = 'i';
FloorDecoration_getX_Multiplier = -1896711519;
FloorDecoration_getRenderable = 'q';

{* Region - 2 Hooks *}
Region = 'ci';
Region_getGroundObjects = 'a';
Region_getGroundTiles = 'z';

{* Renderable - 1 Hooks *}
Renderable = 'co';
Renderable_getHeight = 'bo';
Renderable_getHeight_Multiplier = -170689239;

{* Item - 2 Hooks *}
Item = 'c';
Item_getStackSize = 'i';
Item_getStackSize_Multiplier = 102750599;
Item_getID = 'e';
Item_getID_Multiplier = 1039571511;

{* CollisionMap - 5 Hooks *}
CollisionMap = 'ez';
CollisionMap_getFlags = 'ap';
CollisionMap_getHeight = 'ax';
CollisionMap_getHeight_Multiplier = 1527519115;
CollisionMap_getOffsetX = 'ao';
CollisionMap_getOffsetX_Multiplier = 1705137359;
CollisionMap_getWidth = 'v';
CollisionMap_getWidth_Multiplier = 407820043;
CollisionMap_getOffsetY = 'al';
CollisionMap_getOffsetY_Multiplier = -1859982265;

{* LinkedList - 2 Hooks *}
LinkedList = 'fj';
LinkedList_getHead = 'e';
LinkedList_getTail = 'i';

{* Queue - 1 Hooks *}
Queue = 'fw';
Queue_getHead = 'e';

{* NPCComposite - 2 Hooks *}
NPCComposite = 'aw';
NPCComposite_getName = 'z';
NPCComposite_getActions = 'y';

{* Client - 43 Hooks *}
Client = 'client';
Client_getMapScale = 'client.db';
Client_getMapScale_Multiplier = 441328543;
Client_getTileHeights = 'a.e';
Client_getMaxLevels = 'client.hg';
Client_getCameraYaw = 'co.fl';
Client_getCameraYaw_Multiplier = -881937579;
Client_getWidgetPositionsY = 'client.li';
Client_getCurrentLevels = 'client.hh';
Client_getWidgetPositionsX = 'client.lm';
Client_getMenuHeight = 'b.ho';
Client_getMenuHeight_Multiplier = -1286290847;
Client_getWidgetSettings = 'fp.k';
Client_getWeight = 'client.jk';
Client_getWeight_Multiplier = -1630380455;
Client_getWidgetHeights = 'client.lq';
Client_getNPCIndices = 'client.bi';
Client_getEnergy = 'client.jp';
Client_getEnergy_Multiplier = 1488134077;
Client_getWidgetWidths = 'client.lk';
Client_getMapAngle = 'client.fg';
Client_getMapAngle_Multiplier = -962793663;
Client_getLoginState = 'r.ak';
Client_getLoginState_Multiplier = -1221643161;
Client_getPlane = 'da.hx';
Client_getPlane_Multiplier = 2109014229;
Client_getBaseX = 'aq.cj';
Client_getBaseX_Multiplier = 798455051;
Client_getCollisionMaps = 'client.w';
Client_getLocalPlayers = 'client.ga';
Client_getBaseY = 'ez.cy';
Client_getBaseY_Multiplier = -316692777;
Client_getWidgets = 'fl.e';
Client_getMenuCount = 'client.iy';
Client_getMenuCount_Multiplier = -815878001;
Client_getRegion = 'i.dj';
Client_getMenuActions = 'client.in';
Client_getMapOffset = 'client.ds';
Client_getMapOffset_Multiplier = 1803949977;
Client_isMenuOpen = 'client.he';
Client_getCameraX = 'ad.fh';
Client_getCameraX_Multiplier = 1131536837;
Client_getCameraY = 'dp.fc';
Client_getCameraY_Multiplier = 1751854551;
Client_getCameraZ = 'cz.fd';
Client_getCameraZ_Multiplier = -1628910875;
Client_getTileSettings = 'a.i';
Client_getPassword = 'r.am';
Client_getMenuOptions = 'client.ig';
Client_getLocalPlayer = 'ba.hd';
Client_getPlayerSettings = 'fp.i';
Client_getExperiences = 'client.hc';
Client_getGameCycle = 'client.b';
Client_getGameCycle_Multiplier = -616118339;
Client_getCameraPitch = 'z.fv';
Client_getCameraPitch_Multiplier = -1469741367;
Client_getLocalNPCs = 'client.bc';
Client_getMenuWidth = 'client.ha';
Client_getMenuWidth_Multiplier = 54633017;
Client_getUsername = 'r.ae';
Client_getMenuX = 'dx.hw';
Client_getMenuX_Multiplier = -1475507675;
Client_getMenuY = 'bu.hz';
Client_getMenuY_Multiplier = -643638235;

{* NPC - 1 Hooks *}
NPC = 'v';
NPC_getComposite = 'e';

{* HashTable - 1 Hooks *}
HashTable = 'fu';
HashTable_getNodes = 'i';

{* Cache - 3 Hooks *}
Cache = 'fs';
Cache_getHashTable = 'q';
Cache_getCacheableNode = 'e';
Cache_getQueue = 'j';

{* StringStorage - 0 Hooks *}
StringStorage = 'eq';

{* Character - 16 Hooks *}
Character = 'ao';
Character_getAnimation = 'aj';
Character_getAnimation_Multiplier = -8049691;
Character_getInteractingIndex = 'at';
Character_getInteractingIndex_Multiplier = 1137839891;
Character_getOrientation = 'bn';
Character_getOrientation_Multiplier = -905161465;
Character_getHitCycles = 'aa';
Character_getQueueX = 'bb';
Character_getQueueY = 'bc';
Character_getPositionOffset = 'n';
Character_getPositionOffset_Multiplier = -372805568;
Character_getCycle = 'ad';
Character_getCycle_Multiplier = -720305353;
Character_isInSequence = 'l';
Character_getHealth = 'az';
Character_getHealth_Multiplier = -1554417177;
Character_getY = 'y';
Character_getY_Multiplier = -54698801;
Character_getMaxHealth = 'ar';
Character_getMaxHealth_Multiplier = 5200087;
Character_getX = 's';
Character_getX_Multiplier = -806469611;
Character_getOverheadText = 'av';
Character_getHitTypes = 'an';
Character_getHitDamages = 'ai';

{* CacheableNode - 2 Hooks *}
CacheableNode = 'fn';
CacheableNode_getPrevious = 'cg';
CacheableNode_getNext = 'cm';

{* Tile - 8 Hooks *}
Tile = 'cb';
Tile_getBoundary = 'm';
Tile_getPlane = 'q';
Tile_getPlane_Multiplier = 475110139;
Tile_getWall = 'w';
Tile_getY = 'k';
Tile_getY_Multiplier = 1611516503;
Tile_getX = 'i';
Tile_getX_Multiplier = -155726120;
Tile_getItemLayer = 'd';
Tile_getFloorDecoration = 'a';
Tile_getRSObjects = 'p';

{* Node - 3 Hooks *}
Node = 'fz';
Node_getPrevious = 'ef';
Node_getNext = 'ez';
Node_getUID = 'dh';

{* ItemLayer - 0 Hooks *}
ItemLayer = 'ca';

{* Stream - 2 Hooks *}
Stream = 'dl';
Stream_getPayload = 'q';
Stream_getOffset = 'j';
Stream_getOffset_Multiplier = -1034986483;

{* Boundary - 9 Hooks *}
Boundary = 'ct';
Boundary_getFlags = 'a';
Boundary_getFlags_Multiplier = 1812654487;
Boundary_getID = 'w';
Boundary_getID_Multiplier = -1260769565;
Boundary_getOrientation = 'q';
Boundary_getOrientation_Multiplier = 1252588833;
Boundary_getPlane = 'e';
Boundary_getPlane_Multiplier = -1828307743;
Boundary_getBackupRenderable = 'm';
Boundary_getAlternativeOrientation = 'j';
Boundary_getAlternativeOrientation_Multiplier = 1782006995;
Boundary_getY = 'k';
Boundary_getY_Multiplier = 1722243715;
Boundary_getX = 'i';
Boundary_getX_Multiplier = 71420443;
Boundary_getRenderable = 'z';

{* Canvas - 1 Hooks *}
Canvas = 'bi';
Canvas_getComponent = 'e';

{* Mouse - 2 Hooks *}
Mouse = 'bo';
Mouse_getY = 'bo.z';
Mouse_getY_Multiplier = 233265727;
Mouse_getX = 'bo.j';
Mouse_getX_Multiplier = -199027589;

{* ItemComposite - 9 Hooks *}
ItemComposite = 'ad';
ItemComposite_isMembers = 'l';
ItemComposite_getGroundActions = 'n';
ItemComposite_getModelColours = 'u';
ItemComposite_getName = 'd';
ItemComposite_getWidgetActions = 'h';
ItemComposite_getModelSizeZ = 'at';
ItemComposite_getModelSizeZ_Multiplier = -1442018873;
ItemComposite_getNewModelColours = 'p';
ItemComposite_getModelSizeX = 'az';
ItemComposite_getModelSizeX_Multiplier = 450862007;
ItemComposite_getModelSizeY = 'ar';
ItemComposite_getModelSizeY_Multiplier = 493612761;

rj

2014-05-05 17:58:03

@185 fish1328; you could save the output to a file and have simba parse it, I believe @Brandon; posted a parser somewhere

Brandon

2014-05-05 18:05:27

From: Robert
@185 fish1328; you could save the output to a file and have simba parse it, I believe @Brandon; posted a parser somewhere



I don't remember where it is.. I gave elfy the source a long time ago. That specific one only parsed hooks stored in JSON format. The other parser is somewhere on some thread and worked for n3ss3s parser and the last one I have no clue where that is. Stuck on some thread in the abyss.

It's safe to say I lost them all and have no idea where they are lol..

Cheddy

2014-05-06 02:13:40

Why does it need parsed? It is already in simba constant format :D

Cheddy

2014-05-06 14:58:36

@Robert. That Was from the output file ;)

Xenobitz

2014-05-08 15:05:04

Any ETA on the updated hooks? I'm willing to help in any way I can

Cheddy

2014-05-08 16:26:23

I have them; they just won't work with the current api unless you want to rename them; won't take too long, current api doesn't use many hooks yet =)

P.s. If anyone wants to invite me to the reflection team, feel free to do so ;)
Here's the file in case you don't know how to copy and paste:
[ATTACH]23272[/ATTACH]


{ 183 Hooks Found By Cheddys Beautiful Updater }

const
ReflectionRevision = 45;


{* Boundary - 9 Hooks *}
Boundary = 'bc';
Boundary_getAlternativeOrientation = 'e';
Boundary_getAlternativeOrientation_Multiplier = -1789243751;
Boundary_getBackupRenderable = 'l';
Boundary_getFlags = 'j';
Boundary_getFlags_Multiplier = -128108901;
Boundary_getID = 'v';
Boundary_getID_Multiplier = 872134335;
Boundary_getOrientation = 'z';
Boundary_getOrientation_Multiplier = -1569104233;
Boundary_getPlane = 'n';
Boundary_getPlane_Multiplier = -1179126483;
Boundary_getRenderable = 'a';
Boundary_getX = 'u';
Boundary_getX_Multiplier = -509136167;
Boundary_getY = 't';
Boundary_getY_Multiplier = -1853854939;

{* Cache - 3 Hooks *}
Cache = 'fc';
Cache_getCacheableNode = 'z';
Cache_getHashTable = 't';
Cache_getQueue = 'e';

{* CacheableNode - 2 Hooks *}
CacheableNode = 'fb';
CacheableNode_getNext = 'co';
CacheableNode_getPrevious = 'cl';

{* Canvas - 1 Hooks *}
Canvas = 'di';
Canvas_getComponent = 'z';

{* Character - 18 Hooks *}
Character = 'ai';
Character_getAnimation = 'ay';
Character_getAnimation_Multiplier = 2085431123;
Character_getCycle = 'am';
Character_getCycle_Multiplier = -836843363;
Character_getHealth = 'az';
Character_getHealth_Multiplier = 992112634;
Character_getHitCycles = 'ap';
Character_getHitDamages = 'ao';
Character_getHitTypes = 'aj';
Character_getInteractingIndex = 'ab';
Character_getInteractingIndex_Multiplier = 1501622561;
Character_getMaxHealth = 'aa';
Character_getMaxHealth_Multiplier = 63791007;
Character_getOrientation = 'bb';
Character_getOrientation_Multiplier = -1322793871;
Character_getOverheadText = 'ar';
Character_getPositionOffset = 'w';
Character_getPositionOffset_Multiplier = 393526336;
Character_getQueueLength = 'bk';
Character_getQueueLength_Multiplier = -1617203777;
Character_getQueueTraversed = 'bm';
Character_getQueueX = 'be';
Character_getQueueY = 'bv';
Character_getX = 'h';
Character_getX_Multiplier = 964999791;
Character_getY = 'c';
Character_getY_Multiplier = -891686403;
Character_isInSequence = 'r';

{* Client - 45 Hooks *}
Client = 'client';
Client_getBaseX = 'u.c';
Client_getBaseX_Multiplier = -891686403;
Client_getBaseY = 'u.h';
Client_getBaseY_Multiplier = 964999791;
Client_getCameraPitch = 'aj.fg';
Client_getCameraPitch_Multiplier = -1887817443;
Client_getCameraX = 'x.fv';
Client_getCameraX_Multiplier = 2128126559;
Client_getCameraY = 'bo.fz';
Client_getCameraY_Multiplier = -1423421689;
Client_getCameraYaw = 'cb.fh';
Client_getCameraYaw_Multiplier = -625598461;
Client_getCameraZ = 'dd.fi';
Client_getCameraZ_Multiplier = 1952424259;
Client_getCollisionMaps = 'client.w';
Client_getCurrentLevels = 'client.hw';
Client_getEnergy = 'client.jn';
Client_getEnergy_Multiplier = -2135323093;
Client_getExperiences = 'client.hh';
Client_getGameCycle = 'client.m';
Client_getGameCycle_Multiplier = -111418237;
Client_getLocalNPCs = 'client.bd';
Client_getLocalPlayer = 'g.hq';
Client_getLocalPlayers = 'client.gb';
Client_getLoginState = 's.ac';
Client_getLoginState_Multiplier = -847061727;
Client_getMapAngle = 'client.fu';
Client_getMapAngle_Multiplier = -95364135;
Client_getMapOffset = 'client.df';
Client_getMapOffset_Multiplier = 1191082061;
Client_getMapScale = 'client.db';
Client_getMapScale_Multiplier = 457986691;
Client_getMaxLevels = 'client.hk';
Client_getMenuActions = 'client.id';
Client_getMenuCount = 'client.in';
Client_getMenuCount_Multiplier = 1033279235;
Client_getMenuHeight = 'ck.ic';
Client_getMenuHeight_Multiplier = -741401925;
Client_getMenuOptions = 'client.iy';
Client_getMenuWidth = 'ao.if';
Client_getMenuWidth_Multiplier = 2066528025;
Client_getMenuX = 'ci.hn';
Client_getMenuX_Multiplier = -381870177;
Client_getMenuY = 'bm.he';
Client_getMenuY_Multiplier = -1572072739;
Client_getMouseX = 'de.t';
Client_getMouseX_Multiplier = 428556319;
Client_getMouseY = 'de.e';
Client_getMouseY_Multiplier = 418756057;
Client_getNPCIndices = 'client.bs';
Client_getPassword = 's.ax';
Client_getPlane = 'z.ho';
Client_getPlane_Multiplier = 1699826579;
Client_getPlayerSettings = 'ey.n';
Client_getRegion = 'dw.dk';
Client_getTileHeights = 'a.z';
Client_getTileSettings = 'a.n';
Client_getUsername = 's.ah';
Client_getWeight = 'client.jt';
Client_getWeight_Multiplier = -753412451;
Client_getWidgetHeights = 'client.ly';
Client_getWidgetPositionsX = 'client.lv';
Client_getWidgetPositionsY = 'client.lj';
Client_getWidgets = 'ex.z';
Client_getWidgetSettings = 'ey.u';
Client_getWidgetWidths = 'client.li';
Client_isMenuOpen = 'client.hs';

{* CollisionMap - 5 Hooks *}
CollisionMap = 'gq';
CollisionMap_getFlags = 'ai';
CollisionMap_getHeight = 'ag';
CollisionMap_getHeight_Multiplier = 1553284005;
CollisionMap_getOffsetX = 'ad';
CollisionMap_getOffsetX_Multiplier = -1570421329;
CollisionMap_getOffsetY = 'ak';
CollisionMap_getOffsetY_Multiplier = 510568457;
CollisionMap_getWidth = 's';
CollisionMap_getWidth_Multiplier = 242648881;

{* FloorDecoration - 6 Hooks *}
FloorDecoration = 'cz';
FloorDecoration_getFlags = 'a';
FloorDecoration_getFlags_Multiplier = 315535681;
FloorDecoration_getID = 'e';
FloorDecoration_getID_Multiplier = 2016050653;
FloorDecoration_getPlane = 'n';
FloorDecoration_getPlane_Multiplier = -1840379531;
FloorDecoration_getRenderable = 'z';
FloorDecoration_getX = 'u';
FloorDecoration_getX_Multiplier = -1806270363;
FloorDecoration_getY = 't';
FloorDecoration_getY_Multiplier = -1420091543;

{* HashTable - 1 Hooks *}
HashTable = 'fq';
HashTable_getNodes = 'n';

{* Item - 2 Hooks *}
Item = 'r';
Item_getID = 'z';
Item_getID_Multiplier = 761498115;
Item_getStackSize = 'n';
Item_getStackSize_Multiplier = -1756343239;

{* ItemComposite - 9 Hooks *}
ItemComposite = 'az';
ItemComposite_getGroundActions = 'w';
ItemComposite_getModelColours = 'g';
ItemComposite_getModelSizeX = 'az';
ItemComposite_getModelSizeX_Multiplier = -2034207305;
ItemComposite_getModelSizeY = 'aa';
ItemComposite_getModelSizeY_Multiplier = 459861729;
ItemComposite_getModelSizeZ = 'ab';
ItemComposite_getModelSizeZ_Multiplier = -101111487;
ItemComposite_getName = 'k';
ItemComposite_getNewModelColours = 'd';
ItemComposite_getWidgetActions = 'p';
ItemComposite_isMembers = 'r';

{* ItemLayer - 0 Hooks *}
ItemLayer = 'ci';

{* LinkedList - 2 Hooks *}
LinkedList = 'fr';
LinkedList_getHead = 'z';
LinkedList_getTail = 'n';

{* Model - 11 Hooks *}
Model = 'cp';
Model_getIndicesLength = 'j';
Model_getIndicesLength_Multiplier = 1;
Model_getIndicesX = 'k';
Model_getIndicesY = 'g';
Model_getIndicesZ = 'd';
Model_getTexturedIndicesX = 'b';
Model_getTexturedIndicesY = 'i';
Model_getTexturedIndicesZ = 'o';
Model_getVerticesLength = 'e';
Model_getVerticesLength_Multiplier = 1;
Model_getVerticesX = 'a';
Model_getVerticesY = 'l';
Model_getVerticesZ = 'v';

{* Mouse - 0 Hooks *}
Mouse = 'de';

{* Node - 3 Hooks *}
Node = 'fs';
Node_getNext = 'ek';
Node_getPrevious = 'ez';
Node_getUID = 'df';

{* NPC - 1 Hooks *}
NPC = 'ad';
NPC_getComposite = 'z';

{* NPCComposite - 2 Hooks *}
NPCComposite = 'as';
NPCComposite_getActions = 'h';
NPCComposite_getName = 'a';

{* ObjectComposite - 2 Hooks *}
ObjectComposite = 'ar';
ObjectComposite_getActions = 'ak';
ObjectComposite_getName = 'd';

{* Player - 2 Hooks *}
Player = 'u';
Player_getModel = 'b';
Player_getName = 'z';

{* Queue - 1 Hooks *}
Queue = 'fl';
Queue_getHead = 'z';

{* Region - 2 Hooks *}
Region = 'bd';
Region_getGroundObjects = 'j';
Region_getGroundTiles = 'a';

{* Renderable - 1 Hooks *}
Renderable = 'bm';
Renderable_getHeight = 'bs';
Renderable_getHeight_Multiplier = -1778196667;

{* SceneObject - 12 Hooks *}
SceneObject = 'cc';
SceneObject_getFlags = 'i';
SceneObject_getFlags_Multiplier = 1707018495;
SceneObject_getID = 'b';
SceneObject_getID_Multiplier = 1474827417;
SceneObject_getOffsetX = 'v';
SceneObject_getOffsetX_Multiplier = 910785039;
SceneObject_getOffsetY = 'k';
SceneObject_getOffsetY_Multiplier = 1755899889;
SceneObject_getOrientation = 'a';
SceneObject_getOrientation_Multiplier = -1156896027;
SceneObject_getPlane = 'n';
SceneObject_getPlane_Multiplier = -318176933;
SceneObject_getRelativeX = 'l';
SceneObject_getRelativeX_Multiplier = -794643159;
SceneObject_getRelativeY = 'j';
SceneObject_getRelativeY_Multiplier = -1187590837;
SceneObject_getRenderable = 'z';
SceneObject_getX = 't';
SceneObject_getX_Multiplier = -195861307;
SceneObject_getY = 'e';
SceneObject_getY_Multiplier = 1185481681;
SceneObject_getZ = 'u';
SceneObject_getZ_Multiplier = -1182061875;

{* Stream - 2 Hooks *}
Stream = 'cj';
Stream_getOffset = 'n';
Stream_getOffset_Multiplier = -175947521;
Stream_getPayload = 'z';

{* StringStorage - 0 Hooks *}
StringStorage = 'ee';

{* Tile - 8 Hooks *}
Tile = 'cb';
Tile_getBoundary = 'l';
Tile_getFloorDecoration = 'j';
Tile_getItemLayer = 'k';
Tile_getPlane = 'z';
Tile_getPlane_Multiplier = -1148374097;
Tile_getRSObjects = 'd';
Tile_getWall = 'v';
Tile_getX = 'u';
Tile_getX_Multiplier = -656129177;
Tile_getY = 't';
Tile_getY_Multiplier = 801749763;

{* Wall - 11 Hooks *}
Wall = 'ck';
Wall_getBackupRenderable = 'j';
Wall_getFlags = 'g';
Wall_getFlags_Multiplier = 140266705;
Wall_getHeight = 'e';
Wall_getHeight_Multiplier = 1253283997;
Wall_getID = 'k';
Wall_getID_Multiplier = 1851785047;
Wall_getOrientation = 'z';
Wall_getOrientation_Multiplier = -917699129;
Wall_getPlane = 'n';
Wall_getPlane_Multiplier = 2135188485;
Wall_getRelativeX = 'a';
Wall_getRelativeX_Multiplier = -629665309;
Wall_getRelativeY = 'l';
Wall_getRelativeY_Multiplier = 2147404953;
Wall_getRenderable = 'v';
Wall_getX = 'u';
Wall_getX_Multiplier = 1263795633;
Wall_getY = 't';
Wall_getY_Multiplier = 221600917;

{* Widget - 22 Hooks *}
Widget = 'ex';
Widget_getActions = 'bv';
Widget_getActionType = 'i';
Widget_getActionType_Multiplier = 1676832791;
Widget_getBoundsIndex = 'da';
Widget_getBoundsIndex_Multiplier = 1202228047;
Widget_getChildren = 'du';
Widget_getContentIDs = 'dy';
Widget_getHeight = 'h';
Widget_getHeight_Multiplier = -148818029;
Widget_getID = 'd';
Widget_getID_Multiplier = -1885388699;
Widget_getIndex = 'b';
Widget_getIndex_Multiplier = -592757985;
Widget_getName = 'bk';
Widget_getOpcodes = 'dq';
Widget_getParent = 'be';
Widget_getParentID = 'r';
Widget_getParentID_Multiplier = -982521697;
Widget_getRelativeX = 'c';
Widget_getRelativeX_Multiplier = 1235716305;
Widget_getRelativeY = 'q';
Widget_getRelativeY_Multiplier = -1983070073;
Widget_getScrollX = 'p';
Widget_getScrollX_Multiplier = 448947735;
Widget_getScrollY = 's';
Widget_getScrollY_Multiplier = -789061205;
Widget_getStackSizes = 'dk';
Widget_getText = 'bi';
Widget_getType = 'o';
Widget_getType_Multiplier = 2117159009;
Widget_getWidth = 'y';
Widget_getWidth_Multiplier = 342406379;
Widget_getX = 'x';
Widget_getX_Multiplier = -119692555;
Widget_getY = 'f';
Widget_getY_Multiplier = 81714451;

Xenobitz

2014-05-08 18:38:43

From: fish1328
I have them; they just won't work with the current api unless you want to rename them; won't take too long, current api doesn't use many hooks yet =)

P.s. If anyone wants to invite me to the reflection team, feel free to do so ;)
Here's the file in case you don't know how to copy and paste:
[ATTACH]23272[/ATTACH]


{ 183 Hooks Found By Cheddys Beautiful Updater }

const
ReflectionRevision = 45;


{* Boundary - 9 Hooks *}
Boundary = 'bc';
Boundary_getAlternativeOrientation = 'e';
Boundary_getAlternativeOrientation_Multiplier = -1789243751;
Boundary_getBackupRenderable = 'l';
Boundary_getFlags = 'j';
Boundary_getFlags_Multiplier = -128108901;
Boundary_getID = 'v';
Boundary_getID_Multiplier = 872134335;
Boundary_getOrientation = 'z';
Boundary_getOrientation_Multiplier = -1569104233;
Boundary_getPlane = 'n';
Boundary_getPlane_Multiplier = -1179126483;
Boundary_getRenderable = 'a';
Boundary_getX = 'u';
Boundary_getX_Multiplier = -509136167;
Boundary_getY = 't';
Boundary_getY_Multiplier = -1853854939;

{* Cache - 3 Hooks *}
Cache = 'fc';
Cache_getCacheableNode = 'z';
Cache_getHashTable = 't';
Cache_getQueue = 'e';

{* CacheableNode - 2 Hooks *}
CacheableNode = 'fb';
CacheableNode_getNext = 'co';
CacheableNode_getPrevious = 'cl';

{* Canvas - 1 Hooks *}
Canvas = 'di';
Canvas_getComponent = 'z';

{* Character - 18 Hooks *}
Character = 'ai';
Character_getAnimation = 'ay';
Character_getAnimation_Multiplier = 2085431123;
Character_getCycle = 'am';
Character_getCycle_Multiplier = -836843363;
Character_getHealth = 'az';
Character_getHealth_Multiplier = 992112634;
Character_getHitCycles = 'ap';
Character_getHitDamages = 'ao';
Character_getHitTypes = 'aj';
Character_getInteractingIndex = 'ab';
Character_getInteractingIndex_Multiplier = 1501622561;
Character_getMaxHealth = 'aa';
Character_getMaxHealth_Multiplier = 63791007;
Character_getOrientation = 'bb';
Character_getOrientation_Multiplier = -1322793871;
Character_getOverheadText = 'ar';
Character_getPositionOffset = 'w';
Character_getPositionOffset_Multiplier = 393526336;
Character_getQueueLength = 'bk';
Character_getQueueLength_Multiplier = -1617203777;
Character_getQueueTraversed = 'bm';
Character_getQueueX = 'be';
Character_getQueueY = 'bv';
Character_getX = 'h';
Character_getX_Multiplier = 964999791;
Character_getY = 'c';
Character_getY_Multiplier = -891686403;
Character_isInSequence = 'r';

{* Client - 45 Hooks *}
Client = 'client';
Client_getBaseX = 'u.c';
Client_getBaseX_Multiplier = -891686403;
Client_getBaseY = 'u.h';
Client_getBaseY_Multiplier = 964999791;
Client_getCameraPitch = 'aj.fg';
Client_getCameraPitch_Multiplier = -1887817443;
Client_getCameraX = 'x.fv';
Client_getCameraX_Multiplier = 2128126559;
Client_getCameraY = 'bo.fz';
Client_getCameraY_Multiplier = -1423421689;
Client_getCameraYaw = 'cb.fh';
Client_getCameraYaw_Multiplier = -625598461;
Client_getCameraZ = 'dd.fi';
Client_getCameraZ_Multiplier = 1952424259;
Client_getCollisionMaps = 'client.w';
Client_getCurrentLevels = 'client.hw';
Client_getEnergy = 'client.jn';
Client_getEnergy_Multiplier = -2135323093;
Client_getExperiences = 'client.hh';
Client_getGameCycle = 'client.m';
Client_getGameCycle_Multiplier = -111418237;
Client_getLocalNPCs = 'client.bd';
Client_getLocalPlayer = 'g.hq';
Client_getLocalPlayers = 'client.gb';
Client_getLoginState = 's.ac';
Client_getLoginState_Multiplier = -847061727;
Client_getMapAngle = 'client.fu';
Client_getMapAngle_Multiplier = -95364135;
Client_getMapOffset = 'client.df';
Client_getMapOffset_Multiplier = 1191082061;
Client_getMapScale = 'client.db';
Client_getMapScale_Multiplier = 457986691;
Client_getMaxLevels = 'client.hk';
Client_getMenuActions = 'client.id';
Client_getMenuCount = 'client.in';
Client_getMenuCount_Multiplier = 1033279235;
Client_getMenuHeight = 'ck.ic';
Client_getMenuHeight_Multiplier = -741401925;
Client_getMenuOptions = 'client.iy';
Client_getMenuWidth = 'ao.if';
Client_getMenuWidth_Multiplier = 2066528025;
Client_getMenuX = 'ci.hn';
Client_getMenuX_Multiplier = -381870177;
Client_getMenuY = 'bm.he';
Client_getMenuY_Multiplier = -1572072739;
Client_getMouseX = 'de.t';
Client_getMouseX_Multiplier = 428556319;
Client_getMouseY = 'de.e';
Client_getMouseY_Multiplier = 418756057;
Client_getNPCIndices = 'client.bs';
Client_getPassword = 's.ax';
Client_getPlane = 'z.ho';
Client_getPlane_Multiplier = 1699826579;
Client_getPlayerSettings = 'ey.n';
Client_getRegion = 'dw.dk';
Client_getTileHeights = 'a.z';
Client_getTileSettings = 'a.n';
Client_getUsername = 's.ah';
Client_getWeight = 'client.jt';
Client_getWeight_Multiplier = -753412451;
Client_getWidgetHeights = 'client.ly';
Client_getWidgetPositionsX = 'client.lv';
Client_getWidgetPositionsY = 'client.lj';
Client_getWidgets = 'ex.z';
Client_getWidgetSettings = 'ey.u';
Client_getWidgetWidths = 'client.li';
Client_isMenuOpen = 'client.hs';

{* CollisionMap - 5 Hooks *}
CollisionMap = 'gq';
CollisionMap_getFlags = 'ai';
CollisionMap_getHeight = 'ag';
CollisionMap_getHeight_Multiplier = 1553284005;
CollisionMap_getOffsetX = 'ad';
CollisionMap_getOffsetX_Multiplier = -1570421329;
CollisionMap_getOffsetY = 'ak';
CollisionMap_getOffsetY_Multiplier = 510568457;
CollisionMap_getWidth = 's';
CollisionMap_getWidth_Multiplier = 242648881;

{* FloorDecoration - 6 Hooks *}
FloorDecoration = 'cz';
FloorDecoration_getFlags = 'a';
FloorDecoration_getFlags_Multiplier = 315535681;
FloorDecoration_getID = 'e';
FloorDecoration_getID_Multiplier = 2016050653;
FloorDecoration_getPlane = 'n';
FloorDecoration_getPlane_Multiplier = -1840379531;
FloorDecoration_getRenderable = 'z';
FloorDecoration_getX = 'u';
FloorDecoration_getX_Multiplier = -1806270363;
FloorDecoration_getY = 't';
FloorDecoration_getY_Multiplier = -1420091543;

{* HashTable - 1 Hooks *}
HashTable = 'fq';
HashTable_getNodes = 'n';

{* Item - 2 Hooks *}
Item = 'r';
Item_getID = 'z';
Item_getID_Multiplier = 761498115;
Item_getStackSize = 'n';
Item_getStackSize_Multiplier = -1756343239;

{* ItemComposite - 9 Hooks *}
ItemComposite = 'az';
ItemComposite_getGroundActions = 'w';
ItemComposite_getModelColours = 'g';
ItemComposite_getModelSizeX = 'az';
ItemComposite_getModelSizeX_Multiplier = -2034207305;
ItemComposite_getModelSizeY = 'aa';
ItemComposite_getModelSizeY_Multiplier = 459861729;
ItemComposite_getModelSizeZ = 'ab';
ItemComposite_getModelSizeZ_Multiplier = -101111487;
ItemComposite_getName = 'k';
ItemComposite_getNewModelColours = 'd';
ItemComposite_getWidgetActions = 'p';
ItemComposite_isMembers = 'r';

{* ItemLayer - 0 Hooks *}
ItemLayer = 'ci';

{* LinkedList - 2 Hooks *}
LinkedList = 'fr';
LinkedList_getHead = 'z';
LinkedList_getTail = 'n';

{* Model - 11 Hooks *}
Model = 'cp';
Model_getIndicesLength = 'j';
Model_getIndicesLength_Multiplier = 1;
Model_getIndicesX = 'k';
Model_getIndicesY = 'g';
Model_getIndicesZ = 'd';
Model_getTexturedIndicesX = 'b';
Model_getTexturedIndicesY = 'i';
Model_getTexturedIndicesZ = 'o';
Model_getVerticesLength = 'e';
Model_getVerticesLength_Multiplier = 1;
Model_getVerticesX = 'a';
Model_getVerticesY = 'l';
Model_getVerticesZ = 'v';

{* Mouse - 0 Hooks *}
Mouse = 'de';

{* Node - 3 Hooks *}
Node = 'fs';
Node_getNext = 'ek';
Node_getPrevious = 'ez';
Node_getUID = 'df';

{* NPC - 1 Hooks *}
NPC = 'ad';
NPC_getComposite = 'z';

{* NPCComposite - 2 Hooks *}
NPCComposite = 'as';
NPCComposite_getActions = 'h';
NPCComposite_getName = 'a';

{* ObjectComposite - 2 Hooks *}
ObjectComposite = 'ar';
ObjectComposite_getActions = 'ak';
ObjectComposite_getName = 'd';

{* Player - 2 Hooks *}
Player = 'u';
Player_getModel = 'b';
Player_getName = 'z';

{* Queue - 1 Hooks *}
Queue = 'fl';
Queue_getHead = 'z';

{* Region - 2 Hooks *}
Region = 'bd';
Region_getGroundObjects = 'j';
Region_getGroundTiles = 'a';

{* Renderable - 1 Hooks *}
Renderable = 'bm';
Renderable_getHeight = 'bs';
Renderable_getHeight_Multiplier = -1778196667;

{* SceneObject - 12 Hooks *}
SceneObject = 'cc';
SceneObject_getFlags = 'i';
SceneObject_getFlags_Multiplier = 1707018495;
SceneObject_getID = 'b';
SceneObject_getID_Multiplier = 1474827417;
SceneObject_getOffsetX = 'v';
SceneObject_getOffsetX_Multiplier = 910785039;
SceneObject_getOffsetY = 'k';
SceneObject_getOffsetY_Multiplier = 1755899889;
SceneObject_getOrientation = 'a';
SceneObject_getOrientation_Multiplier = -1156896027;
SceneObject_getPlane = 'n';
SceneObject_getPlane_Multiplier = -318176933;
SceneObject_getRelativeX = 'l';
SceneObject_getRelativeX_Multiplier = -794643159;
SceneObject_getRelativeY = 'j';
SceneObject_getRelativeY_Multiplier = -1187590837;
SceneObject_getRenderable = 'z';
SceneObject_getX = 't';
SceneObject_getX_Multiplier = -195861307;
SceneObject_getY = 'e';
SceneObject_getY_Multiplier = 1185481681;
SceneObject_getZ = 'u';
SceneObject_getZ_Multiplier = -1182061875;

{* Stream - 2 Hooks *}
Stream = 'cj';
Stream_getOffset = 'n';
Stream_getOffset_Multiplier = -175947521;
Stream_getPayload = 'z';

{* StringStorage - 0 Hooks *}
StringStorage = 'ee';

{* Tile - 8 Hooks *}
Tile = 'cb';
Tile_getBoundary = 'l';
Tile_getFloorDecoration = 'j';
Tile_getItemLayer = 'k';
Tile_getPlane = 'z';
Tile_getPlane_Multiplier = -1148374097;
Tile_getRSObjects = 'd';
Tile_getWall = 'v';
Tile_getX = 'u';
Tile_getX_Multiplier = -656129177;
Tile_getY = 't';
Tile_getY_Multiplier = 801749763;

{* Wall - 11 Hooks *}
Wall = 'ck';
Wall_getBackupRenderable = 'j';
Wall_getFlags = 'g';
Wall_getFlags_Multiplier = 140266705;
Wall_getHeight = 'e';
Wall_getHeight_Multiplier = 1253283997;
Wall_getID = 'k';
Wall_getID_Multiplier = 1851785047;
Wall_getOrientation = 'z';
Wall_getOrientation_Multiplier = -917699129;
Wall_getPlane = 'n';
Wall_getPlane_Multiplier = 2135188485;
Wall_getRelativeX = 'a';
Wall_getRelativeX_Multiplier = -629665309;
Wall_getRelativeY = 'l';
Wall_getRelativeY_Multiplier = 2147404953;
Wall_getRenderable = 'v';
Wall_getX = 'u';
Wall_getX_Multiplier = 1263795633;
Wall_getY = 't';
Wall_getY_Multiplier = 221600917;

{* Widget - 22 Hooks *}
Widget = 'ex';
Widget_getActions = 'bv';
Widget_getActionType = 'i';
Widget_getActionType_Multiplier = 1676832791;
Widget_getBoundsIndex = 'da';
Widget_getBoundsIndex_Multiplier = 1202228047;
Widget_getChildren = 'du';
Widget_getContentIDs = 'dy';
Widget_getHeight = 'h';
Widget_getHeight_Multiplier = -148818029;
Widget_getID = 'd';
Widget_getID_Multiplier = -1885388699;
Widget_getIndex = 'b';
Widget_getIndex_Multiplier = -592757985;
Widget_getName = 'bk';
Widget_getOpcodes = 'dq';
Widget_getParent = 'be';
Widget_getParentID = 'r';
Widget_getParentID_Multiplier = -982521697;
Widget_getRelativeX = 'c';
Widget_getRelativeX_Multiplier = 1235716305;
Widget_getRelativeY = 'q';
Widget_getRelativeY_Multiplier = -1983070073;
Widget_getScrollX = 'p';
Widget_getScrollX_Multiplier = 448947735;
Widget_getScrollY = 's';
Widget_getScrollY_Multiplier = -789061205;
Widget_getStackSizes = 'dk';
Widget_getText = 'bi';
Widget_getType = 'o';
Widget_getType_Multiplier = 2117159009;
Widget_getWidth = 'y';
Widget_getWidth_Multiplier = 342406379;
Widget_getX = 'x';
Widget_getX_Multiplier = -119692555;
Widget_getY = 'f';
Widget_getY_Multiplier = 81714451;


I've started to rename them, but unfortunately some are completely different names I don't even recognize.

Why not modify your updater to output with simba's reflection names? Or even just make a quick table so we go through and replace them with the correct names?

This is my only day off of work this week and I really wanted to script, but this is obviously getting in the way and I don't have much experience with updating hooks.

samerdl

2014-05-08 20:04:46

Would love to use your updated revision fish1328, but as Xenobitz pointed out, it gets confusing when we don't what goes where :(.

My scripts are still running as they both run on color & Bitmap fail safes while reflection is down, i'll wait till hooks get updated again so i can use R_GetSkillExp for instant and continuous experience tracking ;)

Krazy_Meerkat

2014-05-09 01:12:03

I just pushed a hook update, let me know if any are incorrect. Also, cheddy I believe your client_loginstate was incorrect.. A couple of others were strange too (your baseX/Y is the same as your CharacterX/Y).. I ended up using JH logs to fix the broken hooks when they came back online, but thank you for the help :) Always good to see someone else at SRL with an updater

Xenobitz

2014-05-09 02:06:23

From: Krazy_Meerkat
I just pushed a hook update, let me know if any are incorrect. Also, cheddy I believe your client_loginstate was incorrect.. A couple of others were strange too (your baseX/Y is the same as your CharacterX/Y).. I ended up using JH logs to fix the broken hooks when they came back online, but thank you for the help :) Always good to see someone else at SRL with an updater


I don't know which hook is incorrect but the following code is not working:
begin
if R_FindNpc('Martin', Martin) then // Loads the record for Martin.
begin
Tp := Martin.Tile; //Get Martin tile location
Tp := R_TileToMs(Tp);
Mmouse(Tp.x, Tp.y, 10, 25);
ClickMouse2(Mouse_Right);
Wait(RandomRange(111, 555));
R_ChooseOption('Pick');
//R_FindNormalRandoms;
Antiban;
//Wait(RandomRange(55555, 77777));
end;
end;

Cheddy

2014-05-09 02:33:41

That's because my character x and why are flipped as well :/ Just noticed that. And thanks Meerkat for pointing out baseXY, don't know what happened there :S

Frement

2014-05-09 03:36:37

From: Xenobitz
I don't know which hook is incorrect but the following code is not working:
begin
if R_FindNpc('Martin', Martin) then // Loads the record for Martin.
begin
Tp := Martin.Tile; //Get Martin tile location
Tp := R_TileToMs(Tp);
Mmouse(Tp.x, Tp.y, 10, 25);
ClickMouse2(Mouse_Right);
Wait(RandomRange(111, 555));
R_ChooseOption('Pick');
//R_FindNormalRandoms;
Antiban;
//Wait(RandomRange(55555, 77777));
end;
end;


What part of the code is not working?

samerdl

2014-05-09 04:16:01

From: Brandon
I don't remember where it is.. I gave elfy the source a long time ago. That specific one only parsed hooks stored in JSON format. The other parser is somewhere on some thread and worked for n3ss3s parser and the last one I have no clue where that is. Stuck on some thread in the abyss.

It's safe to say I lost them all and have no idea where they are lol..


It's here, it's quite useful too.

edit: Map walking is inverted, The X is placed as Y and Y is placed as X, that's why its not working (gota re-invert them).

edit2: eh, something is not working here with map walking.

Cheddy

2014-05-09 11:12:00

It's not working cause if you used my hooks to fix that. For some reason my character XY hooks were flipped which would cause your walking path to be 1/actual path :-D

Krazy_Meerkat

2014-05-09 11:27:31

I updated the hooks just before, the local XY were flipped yes (those were nearly the only hooks I took from your log though lol).. Also some of the client menu multi's were a bit messed up, that was my bad though.. Anyway, the include should auto-update.. Try your script again Xeno

Cheddy

2014-05-09 12:25:19

Says a lot for my updater :D
Thanks for pointing it out though. That and baseX/Y (and the other usual unstable ones) were the only ones I believe that broke ;)

Also, just out of OCD; why is no image appearing for you retired developer / reflection developer status?

Xenobitz

2014-05-09 12:40:37

From: Krazy_Meerkat
I updated the hooks just before, the local XY were flipped yes (those were nearly the only hooks I took from your log though lol).. Also some of the client menu multi's were a bit messed up, that was my bad though.. Anyway, the include should auto-update.. Try your script again Xeno


procedure thieveFarmer;
var
Martin: TNPC;
Tp : Tpoint;
begin
if R_FindNpc('Martin', Martin) then // Loads the record for Martin.
begin
Writeln('Found Martin');
Tp := Martin.Tile; //Get Martin tile location
Writeln(Tp);
Tp := R_TileToMs(Tp);
Writeln(Tp);
Mmouse(Tp.x, Tp.y, 10, 25);
Writeln('Moved Mouse');
ClickMouse2(Mouse_Right);
Writeln('Right Clicked');
//Wait(RandomRange(111, 777));
R_ChooseOption('Pick');
Writeln('Chose option Pick');
//R_FindNormalRandoms;
Antiban;
//Wait(RandomRange(55555, 77777));
end;
end;

Returns:
Reflection succesfully setup!
Found Martin
(3074, 3259)
(183, 106)
*About 15-30 seconds later*
Moved Mouse
Right Clicked

It's only managed to accurately click the target once, and even then it didn't manage to select "Pick"

Cheddy

2014-05-09 13:12:19

Do we not have model clicking methods yet?

Krazy_Meerkat

2014-05-09 13:17:07

From: Xenobitz
It's only managed to accurately click the target once, and even then it didn't manage to select "Pick"


Ok, I've updated the client menu width multiplier. R_ChooseOption is working fine for me, so maybe that was the problem..

@Ched no model functions yet, they've been discussed though.. Idk what is up with the broken pics on my profile.. They were working the other day :p

Xenobitz

2014-05-09 13:44:56

From: Krazy_Meerkat
Ok, I've updated the client menu width multiplier. R_ChooseOption is working fine for me, so maybe that was the problem..

@Ched no model functions yet, they've been discussed though.. Idk what is up with the broken pics on my profile.. They were working the other day :p


Everything is working just fine now :D

Cheddy

2014-05-09 14:13:07

Currently testing my new auto hook updater :D

So far it seems to be working; basically it checks for newer hooks every 20 mins then auto posts them to an unlisted pastebin paste.

Another program I made then automatically downloads the pastebin paste.

Here the current paste: will be deleted when newer hooks are published: http://pastebin.com/0XBzUYrN

Cheddy

2014-05-09 14:50:18

Want me to make a clone of my analyser with simba's hook names? (Some of the hooks names used by simba currently are incorrect (That's just me being pernickety))

Xenobitz

2014-05-09 15:18:28

From: fish1328
Want me to make a clone of my analyser with simba's hook names? (Some of the hooks names used by simba currently are incorrect (That's just me being pernickety))


Yes please! And if you could post the source of your analyzer or at least give to to a reflection dev, that would be awesome!

Cheddy

2014-05-09 16:11:47

I could give the reflection devs the source of my hook file getter which is all you would need to get stable hooks?

rj

2014-05-10 12:47:01

I'm trying to load OSRS, what is the main class? is it client?

Cheddy

2014-05-10 19:13:33

Yes. client is the main class :/ It's in the page source:

document.write('<app'); document.write('let ');
document.write('name=oldscape ');
document.write('id=game ');
document.write('width="765px" ');
document.write('height="503px" ');
document.write('alt="For assistance please visit the FAQ page" ');
document.write('archive=gamepack_2326039.jar ');
document.write('code=client.class '); <– What you're looking for
document.write('mayscript>');

Cheddy

2014-05-15 06:05:48

Before anyone asks, you want them early; convert the names yourself; that way it's survival of the knowledgeable:


{ 183 Hooks Found By Cheddys Beautiful Updater }

const
ReflectionRevision = 46;


{* Boundary - 9 Hooks *}
Boundary = 'bl';
Boundary_getAlternativeOrientation = 'r';
Boundary_getAlternativeOrientation_Multiplier = 878897951;
Boundary_getBackupRenderable = 'f';
Boundary_getFlags = 'w';
Boundary_getFlags_Multiplier = 428515879;
Boundary_getID = 'a';
Boundary_getID_Multiplier = 1175294235;
Boundary_getOrientation = 'g';
Boundary_getOrientation_Multiplier = 1692995081;
Boundary_getPlane = 'm';
Boundary_getPlane_Multiplier = 537728251;
Boundary_getRenderable = 'i';
Boundary_getX = 'k';
Boundary_getX_Multiplier = 1248089959;
Boundary_getY = 'y';
Boundary_getY_Multiplier = -2144067125;

{* Cache - 3 Hooks *}
Cache = 'fl';
Cache_getCacheableNode = 'm';
Cache_getHashTable = 'g';
Cache_getQueue = 'r';

{* CacheableNode - 2 Hooks *}
CacheableNode = 'fw';
CacheableNode_getNext = 'ce';
CacheableNode_getPrevious = 'cc';

{* Canvas - 1 Hooks *}
Canvas = 'dy';
Canvas_getComponent = 'm';

{* Character - 18 Hooks *}
Character = 'ah';
Character_getAnimation = 'at';
Character_getAnimation_Multiplier = -987249045;
Character_getCycle = 'aa';
Character_getCycle_Multiplier = -903763677;
Character_getHealth = 'ag';
Character_getHealth_Multiplier = 366156561;
Character_getHitCycles = 'au';
Character_getHitDamages = 'ar';
Character_getHitTypes = 'an';
Character_getInteractingIndex = 'ap';
Character_getInteractingIndex_Multiplier = -1411100029;
Character_getMaxHealth = 'al';
Character_getMaxHealth_Multiplier = -1254081241;
Character_getOrientation = 'bb';
Character_getOrientation_Multiplier = -97860779;
Character_getOverheadText = 'ad';
Character_getPositionOffset = 'x';
Character_getPositionOffset_Multiplier = 2067851072;
Character_getQueueLength = 'bg';
Character_getQueueLength_Multiplier = 1023989505;
Character_getQueueTraversed = 'by';
Character_getQueueX = 'bh';
Character_getQueueY = 'bs';
Character_getX = 'b';
Character_getX_Multiplier = -144649247;
Character_getY = 's';
Character_getY_Multiplier = -1433463973;
Character_isInSequence = 'h';

{* ClassData - 3 Hooks *}
ClassData = 'fc';
ClassData_getBytes = 'm';
ClassData_getFields = 'i';
ClassData_getMethods = 'a';

{* Client - 45 Hooks *}
Client = 'client';
Client_getBaseX = 'c.cf';
Client_getBaseX_Multiplier = -1162454639;
Client_getBaseY = 'd.cn';
Client_getBaseY_Multiplier = -1263914291;
Client_getCameraPitch = 'ee.fq';
Client_getCameraPitch_Multiplier = 1296111999;
Client_getCameraX = 'bl.fd';
Client_getCameraX_Multiplier = 2106337695;
Client_getCameraY = 'ev.fi';
Client_getCameraY_Multiplier = 1365371889;
Client_getCameraYaw = 'ca.fa';
Client_getCameraYaw_Multiplier = -1426034441;
Client_getCameraZ = 'p.fo';
Client_getCameraZ_Multiplier = 1646692925;
Client_getCollisionMaps = 'client.w';
Client_getCurrentLevels = 'client.hz';
Client_getEnergy = 'client.jg';
Client_getEnergy_Multiplier = 889103707;
Client_getExperiences = 'client.hn';
Client_getGameCycle = 'client.l';
Client_getGameCycle_Multiplier = 757363207;
Client_getLocalNPCs = 'client.by';
Client_getLocalPlayer = 'ar.hv';
Client_getLocalPlayers = 'client.gt';
Client_getLoginState = 'z.ao';
Client_getLoginState_Multiplier = -698784443;
Client_getMapAngle = 'client.fm';
Client_getMapAngle_Multiplier = -610665599;
Client_getMapOffset = 'client.dm';
Client_getMapOffset_Multiplier = 1833616307;
Client_getMapScale = 'client.dq';
Client_getMapScale_Multiplier = 525754767;
Client_getMaxLevels = 'client.hk';
Client_getMenuActions = 'client.iv';
Client_getMenuCount = 'client.ie';
Client_getMenuCount_Multiplier = -1155973213;
Client_getMenuHeight = 't.ih';
Client_getMenuHeight_Multiplier = -1506214785;
Client_getMenuOptions = 'client.im';
Client_getMenuWidth = 't.ic';
Client_getMenuWidth_Multiplier = 36520921;
Client_getMenuX = 'ad.he';
Client_getMenuX_Multiplier = -374280439;
Client_getMenuY = 'ex.hf';
Client_getMenuY_Multiplier = -670697279;
Client_getMouseX = 'dh.i';
Client_getMouseX_Multiplier = -76465873;
Client_getMouseY = 'dh.f';
Client_getMouseY_Multiplier = 1127942147;
Client_getNPCIndices = 'client.bn';
Client_getPassword = 'z.am';
Client_getPlane = 'cy.hy';
Client_getPlane_Multiplier = 1145527365;
Client_getPlayerSettings = 'ed.k';
Client_getRegion = 'af.dx';
Client_getTileHeights = 'i.m';
Client_getTileSettings = 'i.k';
Client_getUsername = 'z.af';
Client_getWeight = 'client.jx';
Client_getWeight_Multiplier = -802060825;
Client_getWidgetHeights = 'client.li';
Client_getWidgetPositionsX = 'client.lk';
Client_getWidgetPositionsY = 'client.lu';
Client_getWidgets = 'en.m';
Client_getWidgetSettings = 'ed.y';
Client_getWidgetWidths = 'client.la';
Client_isMenuOpen = 'client.hx';

{* CollisionMap - 5 Hooks *}
CollisionMap = 'gk';
CollisionMap_getFlags = 'ah';
CollisionMap_getHeight = 'az';
CollisionMap_getHeight_Multiplier = -1653449499;
CollisionMap_getOffsetX = 'av';
CollisionMap_getOffsetX_Multiplier = 1170085725;
CollisionMap_getOffsetY = 'ay';
CollisionMap_getOffsetY_Multiplier = -1160330439;
CollisionMap_getWidth = 'z';
CollisionMap_getWidth_Multiplier = -447423095;

{* FloorDecoration - 6 Hooks *}
FloorDecoration = 'cg';
FloorDecoration_getFlags = 'i';
FloorDecoration_getFlags_Multiplier = -463581871;
FloorDecoration_getID = 'm';
FloorDecoration_getID_Multiplier = -1640610119;
FloorDecoration_getPlane = 'k';
FloorDecoration_getPlane_Multiplier = 487658173;
FloorDecoration_getRenderable = 'r';
FloorDecoration_getX = 'y';
FloorDecoration_getX_Multiplier = 1611962413;
FloorDecoration_getY = 'g';
FloorDecoration_getY_Multiplier = 1246673317;

{* HashTable - 1 Hooks *}
HashTable = 'fn';
HashTable_getNodes = 'k';

{* Item - 2 Hooks *}
Item = 'h';
Item_getID = 'm';
Item_getID_Multiplier = 316261629;
Item_getStackSize = 'k';
Item_getStackSize_Multiplier = -1901397839;

{* ItemComposite - 9 Hooks *}
ItemComposite = 'ag';
ItemComposite_getGroundActions = 'x';
ItemComposite_getModelColours = 'j';
ItemComposite_getModelSizeX = 'ag';
ItemComposite_getModelSizeX_Multiplier = -843896607;
ItemComposite_getModelSizeY = 'al';
ItemComposite_getModelSizeY_Multiplier = 896903307;
ItemComposite_getModelSizeZ = 'ap';
ItemComposite_getModelSizeZ_Multiplier = -1998631057;
ItemComposite_getName = 'u';
ItemComposite_getNewModelColours = 'q';
ItemComposite_getWidgetActions = 'e';
ItemComposite_isMembers = 'h';

{* ItemLayer - 0 Hooks *}
ItemLayer = 'cr';

{* LinkedList - 2 Hooks *}
LinkedList = 'fj';
LinkedList_getHead = 'm';
LinkedList_getTail = 'k';

{* Model - 11 Hooks *}
Model = 'cl';
Model_getIndicesLength = 'w';
Model_getIndicesLength_Multiplier = 1;
Model_getIndicesX = 'u';
Model_getIndicesY = 'd';
Model_getIndicesZ = 't';
Model_getTexturedIndicesX = 'j';
Model_getTexturedIndicesY = 'q';
Model_getTexturedIndicesZ = 'p';
Model_getVerticesLength = 'r';
Model_getVerticesLength_Multiplier = 1;
Model_getVerticesX = 'i';
Model_getVerticesY = 'f';
Model_getVerticesZ = 'a';

{* Mouse - 0 Hooks *}
Mouse = 'dh';

{* Node - 3 Hooks *}
Node = 'fv';
Node_getNext = 'el';
Node_getPrevious = 'ev';
Node_getUID = 'dm';

{* NPC - 1 Hooks *}
NPC = 'av';
NPC_getComposite = 'm';

{* NPCComposite - 2 Hooks *}
NPCComposite = 'aj';
NPCComposite_getActions = 's';
NPCComposite_getName = 'i';

{* ObjectComposite - 2 Hooks *}
ObjectComposite = 'ad';
ObjectComposite_getActions = 'ay';
ObjectComposite_getName = 't';

{* Player - 2 Hooks *}
Player = 'y';
Player_getModel = 'j';
Player_getName = 'm';

{* Queue - 1 Hooks *}
Queue = 'fk';
Queue_getHead = 'm';

{* Region - 2 Hooks *}
Region = 'bf';
Region_getGroundObjects = 'w';
Region_getGroundTiles = 'i';

{* Renderable - 1 Hooks *}
Renderable = 'by';
Renderable_getHeight = 'bn';
Renderable_getHeight_Multiplier = -918006507;

{* SceneObject - 12 Hooks *}
SceneObject = 'cm';
SceneObject_getFlags = 'q';
SceneObject_getFlags_Multiplier = 663882311;
SceneObject_getID = 'j';
SceneObject_getID_Multiplier = 757497189;
SceneObject_getOffsetX = 'a';
SceneObject_getOffsetX_Multiplier = 22763543;
SceneObject_getOffsetY = 'u';
SceneObject_getOffsetY_Multiplier = -922442193;
SceneObject_getOrientation = 'm';
SceneObject_getOrientation_Multiplier = -1857050261;
SceneObject_getPlane = 'k';
SceneObject_getPlane_Multiplier = -1836423125;
SceneObject_getRelativeX = 'f';
SceneObject_getRelativeX_Multiplier = -148031823;
SceneObject_getRelativeY = 'w';
SceneObject_getRelativeY_Multiplier = 1905208669;
SceneObject_getRenderable = 'i';
SceneObject_getX = 'g';
SceneObject_getX_Multiplier = -2106446677;
SceneObject_getY = 'r';
SceneObject_getY_Multiplier = 723724807;
SceneObject_getZ = 'y';
SceneObject_getZ_Multiplier = 1994552379;

{* Stream - 2 Hooks *}
Stream = 'cb';
Stream_getOffset = 'k';
Stream_getOffset_Multiplier = 1480117179;
Stream_getPayload = 'm';

{* StringStorage - 0 Hooks *}
StringStorage = 'ew';

{* Tile - 8 Hooks *}
Tile = 'co';
Tile_getBoundary = 'f';
Tile_getFloorDecoration = 'w';
Tile_getItemLayer = 'u';
Tile_getPlane = 'g';
Tile_getPlane_Multiplier = -337992821;
Tile_getRSObjects = 't';
Tile_getWall = 'a';
Tile_getX = 'k';
Tile_getX_Multiplier = 2059486343;
Tile_getY = 'y';
Tile_getY_Multiplier = 526136011;

{* Wall - 11 Hooks *}
Wall = 'cd';
Wall_getBackupRenderable = 'w';
Wall_getFlags = 'd';
Wall_getFlags_Multiplier = 114114809;
Wall_getHeight = 'r';
Wall_getHeight_Multiplier = -1014346113;
Wall_getID = 'u';
Wall_getID_Multiplier = -994040553;
Wall_getOrientation = 'g';
Wall_getOrientation_Multiplier = 2135341269;
Wall_getPlane = 'm';
Wall_getPlane_Multiplier = -551771509;
Wall_getRelativeX = 'i';
Wall_getRelativeX_Multiplier = -249528601;
Wall_getRelativeY = 'f';
Wall_getRelativeY_Multiplier = 2116893411;
Wall_getRenderable = 'a';
Wall_getX = 'k';
Wall_getX_Multiplier = -1106286073;
Wall_getY = 'y';
Wall_getY_Multiplier = 1321086657;

{* Widget - 19 Hooks *}
Widget = 'en';
Widget_getActions = 'bh';
Widget_getActionType = 'az';
Widget_getActionType_Multiplier = -1709127761;
Widget_getChildren = 'dv';
Widget_getContentIDs = 'dp';
Widget_getHeight = 's';
Widget_getHeight_Multiplier = 1697801853;
Widget_getID = 'j';
Widget_getID_Multiplier = -1488818977;
Widget_getIndex = 'q';
Widget_getIndex_Multiplier = 347670461;
Widget_getName = 'dw';
Widget_getOpcodes = 'db';
Widget_getParent = 'bs';
Widget_getParentID = 'h';
Widget_getParentID_Multiplier = -1641357523;
Widget_getRelativeX = 'y';
Widget_getRelativeX_Multiplier = -1058953831;
Widget_getRelativeY = 'b';
Widget_getRelativeY_Multiplier = -966193979;
Widget_getScrollX = 'e';
Widget_getScrollX_Multiplier = 1128880447;
Widget_getScrollY = 'z';
Widget_getScrollY_Multiplier = -1728529749;
Widget_getType = 'av';
Widget_getType_Multiplier = -1508524803;
Widget_getWidth = 'o';
Widget_getWidth_Multiplier = -95915675;
Widget_getX = 'l';
Widget_getX_Multiplier = 1623658099;
Widget_getY = 'c';
Widget_getY_Multiplier = 2050654873;

samerdl

2014-05-15 06:27:08

Great update today but broke the hooks.

edit: That's a great post @fish1328, but why not post the hooks in the name format the current reflection dev's are using - why re-invent the wheel?.
It's not like OSRS is going to be around & updated for another year so i am not personally worried about the knowledge disappearing from the database.
Anyway, personally.. I don't have time right now to go through each name and update + some of the hooks use different names than the ones we have so am confused as to where they should be used (like actorX and so on), i just took the main things such as tiles and updated that.

Good work nonetheless ;)

Krazy_Meerkat

2014-05-15 08:56:24

New hooks are up, the include should update automatically.

samerdl

2014-05-15 12:43:33

From: Krazy_Meerkat
New hooks are up, the include should update automatically.


Thanks for updating the include, really appreciate all the work you put into this project - love it, without reflection my progress would of been much slower on OSRS over the course of the past two months :p.

Right now it's all working great, just a small bug with R_GetClientLoopCycle & R_GetActorLoopCycle, for me its registering r_underattack and r_isinfight as true at all times, to solve that i simply commented it out of my script:


function isinfight: boolean;
begin
result := (SRL_InFight) // or (R_infight) or (R_UnderAttack)
end;

I like to use the SRL & reflection includes for all of my tasks :) and now i can go back to training - once am done with combat & mage in the upcoming week and half i'll be posting two scripts for OSRS which aren't too bad but probably won't help too many people :blushing:.

rj

2014-05-15 20:08:26

From: samerdl
Thanks for updating the include, really appreciate all the work you put into this project - love it, without reflection my progress would of been much slower on OSRS over the course of the past two months :p.

Right now it's all working great, just a small bug with R_GetClientLoopCycle & R_GetActorLoopCycle, for me its registering r_underattack and r_isinfight as true at all times, to solve that i simply commented it out of my script:


function isinfight: boolean;
begin
result := (SRL_InFight) // or (R_infight) or (R_UnderAttack)
end;

I like to use the SRL & reflection includes for all of my tasks :) and now i can go back to training - once am done with combat & mage in the upcoming week and half i'll be posting two scripts for OSRS which aren't too bad but probably won't help too many people :blushing:.


Why not just use

SRL_InFight

Instead of creating a function that's going to return the same thing :p

samerdl

2014-05-16 03:45:49

From: Robert
Why not just use

SRL_InFight

Instead of creating a function that's going to return the same thing :p


I usually use R_Underattack, R_IsinCOmbat and SRL_InFight, i donno i just like feeling i have enough fail safes :)

Frement

2014-05-16 05:48:54

R_InFight is now fixed.

ineedbot

2014-05-17 18:54:16

Nicee. Really going to make scripts run ALOT better! Scripting with purely color is difficult lol.

Tonekray

2014-05-18 12:59:28

I'm not too sure if anyone here knows already, but finding objects under OBJ_GAME returns nothing. I guess because of a broken hook? I thought I'd just let someone here know in case it wasn't known already.

Cheddy

2014-05-18 13:27:34

Yeh, by the looks of it all the object hooks/boundary/wall etc are all wrong!

My current hooks file which I use with simba is here:
http://pastebin.com/1apg1uYJ

(If you want to use these; you'll have to have some understanding of the RS Object Tree. I have my own version of the API ;D)

ineedbot

2014-05-18 14:54:37

From: fish1328
Yeh, by the looks of it all the object hooks/boundary/wall etc are all wrong!

My current hooks file which I use with simba is here:
http://pastebin.com/UgiNh9vt

(If you want to use these; you'll have to have some understanding of the RS Object Tree. I have my own version of the API ;D)


Hey thanks! I took a look at your hooks, did some comparing, and now I got game objects showing up!

All I changed was 'WorldObject' from 'c' to 'cm' and 'SceneTile_worldObjects' from 'w' to 't'.

Cheddy

2014-05-18 15:07:03

From: ineedbot
Hey thanks! I took a look at your hooks, did some comparing, and now I got game objects showing up!

All I changed was 'WorldObject' from 'c' to 'cm' and 'SceneTile_worldObjects' from 'w' to 't'.

You got the hang of it ;)

Grunt

2014-05-18 21:28:50

>.< did u change ur pastein code?

Cheddy

2014-05-19 01:29:52

Should be there :-D
EDIT: I gave the devs a quick program I made to autodownload the hooks. No reply yet but here is again:
http://pastebin.com/1apg1uYJ

Grunt

2014-05-20 01:40:32

ah, thanks. I am new to reflection, I followed all the guides that i could find. But how did u get smart to show the hooks id? Why can't i get any interactable game objects with R_getallobjects?

Cheddy

2014-05-20 02:33:21

Wrong hooks with the include, check mine and convert if you can ;-) Update the region hooks and the tile and scene/world object hooks. I've got exams all this week but will try and help :-) Will do more next week

Grunt

2014-05-20 04:28:10

thanks man, i got it. Your hooks work, u got to write a guide how u did it. Break it down for us laymens. =p
how did u get hooks to show in smart?

Cheddy

2014-05-20 11:33:22

From: Grunt
thanks man, i got it. Your hooks work, u got to write a guide how u did it. Break it down for us laymens. =p
how did u get hooks to show in smart?

http://docs.villavu.com/srl-5/paintsmart.html#smart-drawdots

Then just paint the on screen coordinates of the objects using R_WorldToScreen/R_TileToScreen (I haven't used any of it yet ;))

Grunt

2014-05-21 01:02:33

is it just me or did the hooks stop working?
edit:I am such noob >.< , it looks like the hooks file autoupdated and reversed my changes

Nebula

2014-05-21 01:05:21

From: Grunt
is it just me or did the hooks stop working?


workin good for me right now.

test something easy like writeln(r_getallnpcs) while near some npcs and see if it returns some st00fs

samerdl

2014-05-22 11:36:07

Game got updated today (good update imo).

However, hooks are outdated now :-(.

Nebula

2014-05-22 14:55:59

Reflection got updated but NPC functions dont seem to work… R_GetAllNPCs and r_GetNPC() don't.

Cheddy

2014-05-22 17:06:48

In case you need these again; R47 Hooks:
http://pastebin.com/YimEJKSw

Nebula

2014-05-22 17:19:14

I AM JESUS

ALL HAIL ME

I found what is broken in hooks.simba that makes npcs not work.


SOLUTION WILL BE REVEALED AFTER A MINUMUM OF 3 PEOPLE HAVE POSTED "ALL HAIL NEBULA" ON THIS THREAD


I pmed the solution to myself so that if someone posts the fix before 3 people say all hail nebula, I have proof that I actually had the fix all along.


edit: kk i dont really care and im not a dick so:

C:\Simba\Includes\SRL-OSR\SRL\Reflection\Core\Hooks.simba

line 246

'client.gw' -> 'client.bp'

all hails are still appreciated tho

Krazy_Meerkat

2014-05-23 02:21:00

Thanks for posting that fix, Nebula.

Updated the include with the correct client loopcycle multiplier and npc index hook.

Cheddy

2014-05-23 09:35:22

Uh oh, spaghetti-ohs; it appears most of the objects/wall/boundary/floor classes and hooks are wrong again; here are the correct ones:

WorldObject = 'ci';
FloorDecorationObject = 'cr';

{*BoundaryObject*}
BoundaryObject = 'ca';
BoundaryObject_Get_x = 'p';
BoundaryObject_Get_y = 'a';
BoundaryObject_plane = 'e';
BoundaryObject_orientation = 'g';
BoundaryObject_hash = 't';

{*BoundaryObject Multipliers*}
BoundaryObject_Get_x_Multiplier = 1565892751;
BoundaryObject_Get_y_Multiplier = 1411135407;
BoundaryObject_plane_Multiplier = 570380847;
BoundaryObject_orientation_Multiplier = -1888160489;
BoundaryObject_hash_Multiplier = -1313887037;

{*WallObject*}
WallObject = 'cz';
WallObject_hash = 'f';
WallObject_orientation = 'g';

{*WallObject Multipliers*}
WallObject_hash_Multiplier = 2002814215;
WallObject_orientation_Multiplier = 108416551;

Krazy_Meerkat

2014-05-23 21:23:38

Ah ok, that would be why elfyyy's pc script is not behaving properly.. He used some of the boundary object functions..
Thanks for posting that fish, I've added it to our hooks.. Get on skype later so we can talk about these hooks

hakishakataki

2014-05-24 23:26:05

I am getting this error on all reflection scripts.

[Error] C:\Simba\Includes\SRL-OSR\SRL\Reflection\Core\Misc.simba(194:63): Unknown identifier 'client_settings' at line 195
Compiling failed.

I have pm'd a few people and no one knows what it is so far.

Cheddy

2014-05-25 04:08:52

Have you got the latest hooks? It's telling you that the field "client_settings" is missing

Krazy_Meerkat

2014-05-25 09:25:03

Try downloading it again, the version at https://code.google.com/p/osrreflection/source/browse/
Post again if the problem persists.

Update: Added R_InventoryRandoms Boolean to control SRL's 'Rewards' Inv-tabbing.
R_PrayerRandoms Boolean to handle the Zombie bone-burying combat random.
Both are set to false by default.

Eduard

2014-05-27 08:39:38

It's down again?

P1nky

2014-05-27 08:46:04

From: Eduard
It's down again?


F2P servers have been released, may have caused it?

Cheddy

2014-05-27 09:44:29

Hence hooks changed :D

Actually 2 new revisions today. Up to R49 now!

My pastebin: http://pastebin.com/n5mFfSxn

And my simba named hooks file which will fix your problems (copy into C:\Simba\Includes\SRL-OSR\SRL\Reflection\Core\Hooks.simba):

{ 187 Hooks Found By Cheddys Beautiful Updater }

const
ReflectionRevision = '49';


{* BoundaryObject - 9 Hooks *}
BoundaryObject = 'cl';
BoundaryObject_AlternativeOrientation = 'l';
BoundaryObject_AlternativeOrientation_Multiplier = 1389124145;
BoundaryObject_BackupRenderable = 'a';
BoundaryObject_Flags = 'r';
BoundaryObject_Flags_Multiplier = -621404059;
BoundaryObject_Hash = 'x';
BoundaryObject_Hash_Multiplier = 174051663;
BoundaryObject_Orientation = 'v';
BoundaryObject_Orientation_Multiplier = 695777807;
BoundaryObject_Plane = 'y';
BoundaryObject_Plane_Multiplier = -1114608285;
BoundaryObject_Renderable = 'g';
BoundaryObject_Get_X = 'u';
BoundaryObject_Get_X_Multiplier = 1452391039;
BoundaryObject_Get_Y = 'k';
BoundaryObject_Get_Y_Multiplier = -949838095;

{* Cache - 3 Hooks *}
Cache = 'fx';
Cache_CacheableNode = 'y';
Cache_HashTable = 'v';
Cache_Queue = 'l';

{* CacheableNode - 2 Hooks *}
CacheableNode = 'ft';
CacheableNode_Next = 'cr';
CacheableNode_Previous = 'cl';

{* Canvas - 1 Hooks *}
Canvas = 'dc';
Canvas_Component = 'u';

{* Actor - 18 Hooks *}
Actor = 'ai';
Actor_Animation = 'an';
Actor_Animation_Multiplier = -772673237;
Actor_CombatCycle = 'ae';
Actor_CombatCycle_Multiplier = 738616745;
Actor_Health = 'at';
Actor_Health_Multiplier = 664073677;
Actor_HitCycles = 'ap';
Actor_HitDamages = 'ac';
Actor_HitTypes = 'aj';
Actor_InteractingIndex = 'aw';
Actor_InteractingIndex_Multiplier = 974088395;
Actor_MaxHealth = 'as';
Actor_MaxHealth_Multiplier = 1495817743;
Actor_Orientation = 'bi';
Actor_Orientation_Multiplier = -692156845;
Actor_ActiveText = 'ai';
Actor_PositionOffset = 'd';
Actor_PositionOffset_Multiplier = 1931324096;
Actor_PathLength = 'bk';
Actor_PathLength_Multiplier = 1333577889;
Actor_PathTraversed = 'bj';
Actor_PathX = 'bg';
Actor_PathY = 'bs';
Actor_LocalX = 'b';
Actor_LocalX_Multiplier = -115581019;
Actor_LocalY = 'i';
Actor_LocalY_Multiplier = 1862326073;
Actor_isInSequence = 'ab';

{* ClassData - 3 Hooks *}
ClassData = 'gn';
ClassData_Bytes = 'x';
ClassData_Fields = 'l';
ClassData_Methods = 'a';

{* Client - 46 Hooks *}
Client = 'client';
Client_BaseX = 'ae.co';
Client_BaseX_Multiplier = -75820169;
Client_BaseY = 'ak.cv';
Client_BaseY_Multiplier = 1363071411;
Client_CameraPitch = 'ct.fy';
Client_CameraPitch_Multiplier = 978451045;
Client_CameraX = 'w.fv';
Client_CameraX_Multiplier = 579382229;
Client_CameraY = 'cp.fw';
Client_CameraY_Multiplier = 201905125;
Client_CameraYaw = 'br.fk';
Client_CameraYaw_Multiplier = 875492681;
Client_CameraZ = 'i.fl';
Client_CameraZ_Multiplier = 282686931;
Client_CollisionMaps = 'client.w';
Client_Levels = 'client.hz';
Client_Run_Energy = 'client.jt';
Client_Run_Energy_Multiplier = -1148693389;
Client_Experiences = 'client.hv';
Client_LoopCycle = 'client.j';
Client_LoopCycle_Multiplier = -1554219467;
Client_GroundItems = 'client.hp';
Client_NPCs = 'client.bj';
Client_Player = 'cg.hb';
Client_Players = 'client.gq';
Client_Login_State = 'al.ah';
Client_Login_State_Multiplier = 1080992083;
Client_CompassAngle = 'client.fd';
Client_CompassAngle_Multiplier = 188773915;
Client_Map_Offset = 'client.dj';
Client_Map_Offset_Multiplier = 100607273;
Client_Map_Scale = 'client.dl';
Client_Map_Scale_Multiplier = 275005369;
Client_Real_Levels = 'client.hq';
Client_MenuActions = 'client.iu';
Client_MenuCount = 'client.ii';
Client_MenuCount_Multiplier = -779437725;
Client_MenuHeight = 'br.io';
Client_MenuHeight_Multiplier = -834841965;
Client_MenuOptions = 'client.iv';
Client_MenuWidth = 'cg.iy';
Client_MenuWidth_Multiplier = -1155881505;
Client_MenuX = 'aa.ht';
Client_MenuX_Multiplier = 1487758909;
Client_MenuY = 'm.hg';
Client_MenuY_Multiplier = -329146929;
Client_MouseX = 'dr.g';
Client_MouseX_Multiplier = -476633551;
Client_MouseY = 'dr.a';
Client_MouseY_Multiplier = 1607741335;
Client_NPCIndices = 'client.bx';
Client_Password = 'al.ax';
Client_Plane = 'v.hd';
Client_Plane_Multiplier = -946619189;
Client_Settings = 'et.u';
Client_Region = 'k.dg';
Client_GroundHeights = 'g.y';
Client_GroundSettings = 'g.u';
Client_Username = 'al.ag';
Client_Weight = 'client.jn';
Client_Weight_Multiplier = -2075744581;
Client_WidgetHeights = 'client.lm';
Client_WidgetPositionsX = 'client.lr';
Client_WidgetPositionsY = 'client.lp';
Client_Widgets = 'ee.u';
Client_WidgetSettings = 'et.k';
Client_WidgetWidths = 'client.ll';
Client_isMenuOpen = 'client.hy';

{* CollisionMap - 5 Hooks *}
CollisionMap = 'gx';
CollisionMap_Flags = 'aa';
CollisionMap_Height = 'av';
CollisionMap_Height_Multiplier = 519861409;
CollisionMap_OffsetX = 'al';
CollisionMap_OffsetX_Multiplier = 571754825;
CollisionMap_OffsetY = 'aq';
CollisionMap_OffsetY_Multiplier = 44134315;
CollisionMap_Width = 'e';
CollisionMap_Width_Multiplier = 1360578593;

{* FloorDecorationObject - 6 Hooks *}
FloorDecorationObject = 'ct';
FloorDecorationObject_Flags = 'g';
FloorDecorationObject_Flags_Multiplier = -380911001;
FloorDecorationObject_Hash = 'l';
FloorDecorationObject_Hash_Multiplier = 197400825;
FloorDecorationObject_Plane = 'y';
FloorDecorationObject_Plane_Multiplier = 554106865;
FloorDecorationObject_Renderable = 'v';
FloorDecorationObject_Get_X = 'u';
FloorDecorationObject_Get_X_Multiplier = 149257185;
FloorDecorationObject_Get_Y = 'k';
FloorDecorationObject_Get_Y_Multiplier = 1639278273;

{* HashTable - 1 Hooks *}
HashTable = 'fr';
HashTable_Nodes = 'u';

{* Item - 2 Hooks *}
Item = 'z';
Item_ID = 'y';
Item_ID_Multiplier = 320823979;
Item_StackSize = 'u';
Item_StackSize_Multiplier = 1770558897;

{* ItemDefinition - 9 Hooks *}
ItemDefinition = 'aw';
ItemDefinition_GroundActions = 'd';
ItemDefinition_ModelColours = 'c';
ItemDefinition_ModelSizeX = 'ae';
ItemDefinition_ModelSizeX_Multiplier = -1056598195;
ItemDefinition_ModelSizeY = 'at';
ItemDefinition_ModelSizeY_Multiplier = 1855279859;
ItemDefinition_ModelSizeZ = 'as';
ItemDefinition_ModelSizeZ_Multiplier = 855806131;
ItemDefinition_Name = 'w';
ItemDefinition_NewModelColours = 'f';
ItemDefinition_InventoryActions = 'z';
ItemDefinition_isMembers = 'q';

{* ItemLayer - 0 Hooks *}
ItemLayer = 'cw';

{* LinkedList - 2 Hooks *}
LinkedList = 'fn';
LinkedList_Head = 'y';
LinkedList_Tail = 'u';

{* Model - 11 Hooks *}
Model = 'cz';
Model_IndicesLength = 'r';
Model_IndicesLength_Multiplier = 1;
Model_IndicesX = 'w';
Model_IndicesY = 'c';
Model_IndicesZ = 'f';
Model_TexturedIndicesX = 'o';
Model_TexturedIndicesY = 'p';
Model_TexturedIndicesZ = 'n';
Model_VerticesLength = 'l';
Model_VerticesLength_Multiplier = 1;
Model_VerticesX = 'g';
Model_VerticesY = 'a';
Model_VerticesZ = 'x';

{* Mouse - 0 Hooks *}
Mouse = 'dr';

{* Node - 3 Hooks *}
Node = 'gw';
Node_Next = 'el';
Node_Previous = 'eg';
Node_UID = 'dj';

{* NPC - 1 Hooks *}
NPC = 'aa';
NPC_Definition = 'y';

{* NPCDefinition - 2 Hooks *}
NPCDefinition = 'ag';
NPCDefinition_Actions = 'i';
NPCDefinition_Name = 'g';

{* ObjectDefinition - 2 Hooks *}
ObjectDefinition = 'ax';
ObjectDefinition_Actions = 'aq';
ObjectDefinition_Name = 'f';

{* Player - 2 Hooks *}
Player = 'k';
Player_Model = 'o';
Player_Name = 'y';

{* Queue - 1 Hooks *}
Queue = 'fh';
Queue_Head = 'y';

{* Region - 2 Hooks *}
Region = 'ch';
Region_SceneObjects = 'r';
Region_SceneTiles = 'g';

{* Renderable - 1 Hooks *}
Renderable = 'bx';
Renderable_Height = 'ch';
Renderable_Height_Multiplier = 1402043673;

{* WorldObject - 12 Hooks *}
WorldObject = 'cg';
WorldObject_Flags = 'p';
WorldObject_Flags_Multiplier = 393169573;
WorldObject_Hash = 'o';
WorldObject_Hash_Multiplier = -21271879;
WorldObject_OffsetX = 'x';
WorldObject_OffsetX_Multiplier = -1588899007;
WorldObject_OffsetY = 'w';
WorldObject_OffsetY_Multiplier = -2043804879;
WorldObject_Orientation = 'g';
WorldObject_Orientation_Multiplier = -1453061613;
WorldObject_Plane = 'y';
WorldObject_Plane_Multiplier = -1717297035;
WorldObject_RelativeX = 'a';
WorldObject_RelativeX_Multiplier = -728627441;
WorldObject_RelativeY = 'r';
WorldObject_RelativeY_Multiplier = -1348670663;
WorldObject_Renderable = 'l';
WorldObject_Get_X = 'k';
WorldObject_Get_X_Multiplier = -646487517;
WorldObject_Get_Y = 'v';
WorldObject_Get_Y_Multiplier = -1750598391;
WorldObject_Height = 'u';
WorldObject_Height_Multiplier = -280590169;

{* Stream - 2 Hooks *}
Stream = 'do';
Stream_Offset = 'u';
Stream_Offset_Multiplier = -1798397783;
Stream_Payload = 'y';

{* StringStorage - 0 Hooks *}
StringStorage = 'ea';

{* SceneTile - 8 Hooks *}
SceneTile = 'cj';
SceneTile_BoundaryObject = 'a';
SceneTile_FloorDecorationObject = 'r';
SceneTile_ItemLayer = 'w';
SceneTile_Plane = 'v';
SceneTile_Plane_Multiplier = -2059823675;
SceneTile_WorldObjects = 'f';
SceneTile_WallObject = 'x';
SceneTile_X = 'u';
SceneTile_X_Multiplier = 337201943;
SceneTile_Y = 'k';
SceneTile_Y_Multiplier = -977894799;

{* WallObject - 11 Hooks *}
WallObject = 'cs';
WallObject_BackupRenderable = 'r';
WallObject_Flags = 'c';
WallObject_Flags_Multiplier = -1188332199;
WallObject_Height = 'l';
WallObject_Height_Multiplier = -526074127;
WallObject_Hash = 'w';
WallObject_Hash_Multiplier = 2123129033;
WallObject_Orientation = 'v';
WallObject_Orientation_Multiplier = 1590020931;
WallObject_Plane = 'y';
WallObject_Plane_Multiplier = 976837181;
WallObject_RelativeX = 'g';
WallObject_RelativeX_Multiplier = -1417347255;
WallObject_RelativeY = 'a';
WallObject_RelativeY_Multiplier = -2079324505;
WallObject_Renderable = 'x';
WallObject_X = 'u';
WallObject_X_Multiplier = -603169993;
WallObject_Y = 'k';
WallObject_Y_Multiplier = -1149723161;

{* Widget - 22 Hooks *}
Widget = 'ee';
Widget_Actions = 'bk';
Widget_ActionType = 'm';
Widget_ActionType_Multiplier = 639658035;
Widget_BoundsIndex = 'dr';
Widget_BoundsIndex_Multiplier = 1921174117;
Widget_Children = 'dz';
Widget_ContentIDs = 'dv';
Widget_Height = 'h';
Widget_Height_Multiplier = 23827733;
Widget_ID = 'q';
Widget_ID_Multiplier = -2071686887;
Widget_Index = 'n';
Widget_Index_Multiplier = 277826827;
Widget_Name = 'be';
Widget_Opcodes = 'dk';
Widget_Parent = 'bg';
Widget_ParentID = 'p';
Widget_ParentID_Multiplier = 1568667015;
Widget_RelativeX = 'y';
Widget_RelativeX_Multiplier = 934982983;
Widget_RelativeY = 'b';
Widget_RelativeY_Multiplier = -839109755;
Widget_ScrollX = 'z';
Widget_ScrollX_Multiplier = 1125536823;
Widget_ScrollY = 'e';
Widget_ScrollY_Multiplier = -297447859;
Widget_StackSizes = 'dg';
Widget_Text = 'ba';
Widget_Type = 's';
Widget_Type_Multiplier = -1142912813;
Widget_Width = 'i';
Widget_Width_Multiplier = 1320459303;
Widget_X = 'j';
Widget_X_Multiplier = -79782867;
Widget_Y = 'x';
Widget_Y_Multiplier = -395318811;

Cheddy

2014-05-27 09:46:20

That hooks file does however lack the following fields compared to the usual hooks file so any scripts using the following will break using mine until meerkat updates the official ones:

TODO

NPCDefinition_ID
NPCDefinition_Level
PlayerDefinition_Appearence
PlayerDefinition_AppearenceIndices
Player_Level
Player_Definition

samerdl

2014-05-27 09:55:07

Ty for the hook info @fish1328, sadly i can't get it to compile with my include - SRL'S unofficial include use different names for the hooks

[Error] D:\Files\programs\Simba\Includes\SRL-OSR\SRL\Reflection\Core\Misc.simba(321:52): Unknown identifier 'client_menuCount' at line 321
Compiling failed.

Why not change names to make em similar to the one's in the existing include & work with the team :)? you're obviously very talented and love to contribute (i know you don't use simba often) we need all da help we can get ;)

Cheddy

2014-05-27 10:11:14

I did change the naming :D Obviously not fully correctly though :/ Will fix immediately :D
Edit: that doesn't make sense. The client_menucount field is in the hooks I posted there :-) Make sure it didn't autoupdate to the old hooks ;-)

Cheddy

2014-05-27 10:13:01

Simba isn't case sensitive with variable names is it?

Turpinator

2014-05-27 10:24:33

From: fish1328
Simba isn't case sensitive with variable names is it?

correct, it is not case sensitive.

Cheddy

2014-05-27 10:51:10

Just copy and paste the hooks I gave over the ones that are in the hooks file and hopefully that should work. I havn't tested myself though ;-)

Cheddy

2014-05-27 12:27:10

Just realised those hooks won't compile for 2 reasons:
The Actor_InteractingIndex needs to be Actor_Interacting

Secondly I don't have the hooks for NPC Level or NPC ID which are used. Sorry guys; will fix later tonight :D

samerdl

2014-05-27 12:42:23

was a few more hooks such as widget


Widget_getItems = 'ds';
Widget_getStackSizes = 'da';
Widget_getID = 'i';
Widget_Y_Multiplier = -395318811;

But overall i had to just copy paste them from the current reflection hook file to the hooks you gave out just so they exist there to avoid all compiling errors - worked like a charm (I have no use for these hooks anyway so i dont mind).

Thanks a lot!, in other news.. been trying to Astral project again for a a good hour - no success, any advise?

Eduard

2014-05-27 13:07:40

Is there any news?

Nebula

2014-05-27 14:40:50

fish's updater would be like 50x better if he edited the names it spits out to be the same names in the hooks.simba file
@samerdl can you upload your working hooks.simba file? :D

Grunt

2014-05-27 15:06:35

From: Nebula
fish's updater would be like 50x better if he edited the names it spits out to be the same names in the hooks.simba file
@samerdl can you upload your working hooks.simba file? :D

At this rate, SRL should just change its names to match fish's name. :f:

samerdl

2014-05-27 15:46:03

From: Nebula
fish's updater would be like 50x better if he edited the names it spits out to be the same names in the hooks.simba file
@samerdl can you upload your working hooks.simba file? :D


[code]
{ 187 Hooks Found By Cheddys Beautiful Updater }

const
ReflectionRevision = '49';


{* BoundaryObject - 9 Hooks *}
BoundaryObject = 'cl';
BoundaryObject_AlternativeOrientation = 'l';
BoundaryObject_AlternativeOrientation_Multiplier = 1389124145;
BoundaryObject_BackupRenderable = 'a';
BoundaryObject_Flags = 'r';
BoundaryObject_Flags_Multiplier = -621404059;
BoundaryObject_Hash = 'x';
BoundaryObject_Hash_Multiplier = 174051663;
BoundaryObject_Orientation = 'v';
BoundaryObject_Orientation_Multiplier = 695777807;
BoundaryObject_Plane = 'y';
BoundaryObject_Plane_Multiplier = -1114608285;
BoundaryObject_Renderable = 'g';
BoundaryObject_Get_X = 'u';
BoundaryObject_Get_X_Multiplier = 1452391039;
BoundaryObject_Get_Y = 'k';
BoundaryObject_Get_Y_Multiplier = -949838095;

{* Cache - 3 Hooks *}
Cache = 'fx';
Cache_CacheableNode = 'y';
Cache_HashTable = 'v';
Cache_Queue = 'l';

{* CacheableNode - 2 Hooks *}
CacheableNode = 'ft';
CacheableNode_Next = 'cr';
CacheableNode_Previous = 'cl';

{* Canvas - 1 Hooks *}
Canvas = 'dc';
Canvas_Component = 'u';

{* Actor - 18 Hooks *}
Actor = 'ai';
Actor_Animation = 'an';
Actor_Animation_Multiplier = -772673237;
Actor_CombatCycle = 'ae';
Actor_CombatCycle_Multiplier = 738616745;
Actor_Health = 'at';
Actor_Health_Multiplier = 664073677;
Actor_HitCycles = 'ap';
Actor_HitDamages = 'ac';
Actor_HitTypes = 'aj';
Actor_InteractingIndex = 'aw';
Actor_InteractingIndex_Multiplier = 974088395;
Actor_MaxHealth = 'as';
Actor_MaxHealth_Multiplier = 1495817743;
Actor_Orientation = 'bi';
Actor_Orientation_Multiplier = -692156845;
Actor_ActiveText = 'ai';
Actor_PositionOffset = 'd';
Actor_PositionOffset_Multiplier = 1931324096;
Actor_PathLength = 'bk';
Actor_PathLength_Multiplier = 1333577889;
Actor_PathTraversed = 'bj';
Actor_PathX = 'bg';
Actor_PathY = 'bs';
Actor_LocalX = 'b';
Actor_LocalX_Multiplier = -115581019;
Actor_LocalY = 'i';
Actor_LocalY_Multiplier = 1862326073;
Actor_isInSequence = 'ab';

{* ClassData - 3 Hooks *}
ClassData = 'gn';
ClassData_Bytes = 'x';
ClassData_Fields = 'l';
ClassData_Methods = 'a';

{* Client - 46 Hooks *}
Client = 'client';
Client_BaseX = 'ae.co';
Client_BaseX_Multiplier = -75820169;
Client_BaseY = 'ak.cv';
Client_BaseY_Multiplier = 1363071411;
Client_CameraPitch = 'ct.fy';
Client_CameraPitch_Multiplier = 978451045;
Client_CameraX = 'w.fv';
Client_CameraX_Multiplier = 579382229;
Client_CameraY = 'cp.fw';
Client_CameraY_Multiplier = 201905125;
Client_CameraYaw = 'br.fk';
Client_CameraYaw_Multiplier = 875492681;
Client_CameraZ = 'i.fl';
Client_CameraZ_Multiplier = 282686931;
Client_CollisionMaps = 'client.w';
Client_Levels = 'client.hz';
Client_Run_Energy = 'client.jt';
Client_Run_Energy_Multiplier = -1148693389;
Client_Experiences = 'client.hv';
Client_LoopCycle = 'client.j';
Client_LoopCycle_Multiplier = -1554219467;
Client_GroundItems = 'client.hp';
Client_NPCs = 'client.bj';
Client_Player = 'cg.hb';
Client_Players = 'client.gq';
Client_Login_State = 'al.ah';
Client_Login_State_Multiplier = 1080992083;
Client_CompassAngle = 'client.fd';
Client_CompassAngle_Multiplier = 188773915;
Client_Map_Offset = 'client.dj';
Client_Map_Offset_Multiplier = 100607273;
Client_Map_Scale = 'client.dl';
Client_Map_Scale_Multiplier = 275005369;
Client_Real_Levels = 'client.hq';
Client_MenuActions = 'client.iu';
Client_MenuCount = 'client.ii';
Client_MenuCount_Multiplier = -779437725;
Client_MenuHeight = 'br.io';
Client_MenuHeight_Multiplier = -834841965;
Client_MenuOptions = 'client.iv';
Client_MenuWidth = 'cg.iy';
Client_MenuWidth_Multiplier = -1155881505;
Client_MenuX = 'aa.ht';
Client_MenuX_Multiplier = 1487758909;
Client_MenuY = 'm.hg';
Client_MenuY_Multiplier = -329146929;
Client_MouseX = 'dr.g';
Client_MouseX_Multiplier = -476633551;
Client_MouseY = 'dr.a';
Client_MouseY_Multiplier = 1607741335;
Client_NPCIndices = 'client.bx';
Client_Password = 'al.ax';
Client_Plane = 'v.hd';
Client_Plane_Multiplier = -946619189;
Client_Settings = 'et.u';
Client_Region = 'k.dg';
Client_GroundHeights = 'g.y';
Client_GroundSettings = 'g.u';
Client_Username = 'al.ag';
Client_Weight = 'client.jn';
Client_Weight_Multiplier = -2075744581;
Client_WidgetHeights = 'client.lm';
Client_WidgetPositionsX = 'client.lr';
Client_WidgetPositionsY = 'client.lp';
Client_Widgets = 'ee.u';
Client_WidgetSettings = 'et.k';
Client_WidgetWidths = 'client.ll';
Client_isMenuOpen = 'client.hy';

{* CollisionMap - 5 Hooks *}
CollisionMap = 'gx';
CollisionMap_Flags = 'aa';
CollisionMap_Height = 'av';
CollisionMap_Height_Multiplier = 519861409;
CollisionMap_OffsetX = 'al';
CollisionMap_OffsetX_Multiplier = 571754825;
CollisionMap_OffsetY = 'aq';
CollisionMap_OffsetY_Multiplier = 44134315;
CollisionMap_Width = 'e';
CollisionMap_Width_Multiplier = 1360578593;

{* FloorDecorationObject - 6 Hooks *}
FloorDecorationObject = 'ct';
FloorDecorationObject_Flags = 'g';
FloorDecorationObject_Flags_Multiplier = -380911001;
FloorDecorationObject_Hash = 'l';
FloorDecorationObject_Hash_Multiplier = 197400825;
FloorDecorationObject_Plane = 'y';
FloorDecorationObject_Plane_Multiplier = 554106865;
FloorDecorationObject_Renderable = 'v';
FloorDecorationObject_Get_X = 'u';
FloorDecorationObject_Get_X_Multiplier = 149257185;
FloorDecorationObject_Get_Y = 'k';
FloorDecorationObject_Get_Y_Multiplier = 1639278273;

{* HashTable - 1 Hooks *}
HashTable = 'fr';
HashTable_Nodes = 'u';

{* Item - 2 Hooks *}
Item = 'z';
Item_ID = 'y';
Item_ID_Multiplier = 320823979;
Item_StackSize = 'u';
Item_StackSize_Multiplier = 1770558897;

{* ItemDefinition - 9 Hooks *}
ItemDefinition = 'aw';
ItemDefinition_GroundActions = 'd';
ItemDefinition_ModelColours = 'c';
ItemDefinition_ModelSizeX = 'ae';
ItemDefinition_ModelSizeX_Multiplier = -1056598195;
ItemDefinition_ModelSizeY = 'at';
ItemDefinition_ModelSizeY_Multiplier = 1855279859;
ItemDefinition_ModelSizeZ = 'as';
ItemDefinition_ModelSizeZ_Multiplier = 855806131;
ItemDefinition_Name = 'w';
ItemDefinition_NewModelColours = 'f';
ItemDefinition_InventoryActions = 'z';
ItemDefinition_isMembers = 'q';

{* ItemLayer - 0 Hooks *}
ItemLayer = 'cw';

{* LinkedList - 2 Hooks *}
LinkedList = 'fn';
LinkedList_Head = 'y';
LinkedList_Tail = 'u';

{* Model - 11 Hooks *}
Model = 'cz';
Model_IndicesLength = 'r';
Model_IndicesLength_Multiplier = 1;
Model_IndicesX = 'w';
Model_IndicesY = 'c';
Model_IndicesZ = 'f';
Model_TexturedIndicesX = 'o';
Model_TexturedIndicesY = 'p';
Model_TexturedIndicesZ = 'n';
Model_VerticesLength = 'l';
Model_VerticesLength_Multiplier = 1;
Model_VerticesX = 'g';
Model_VerticesY = 'a';
Model_VerticesZ = 'x';

NpcDefinition_id = 'u';
NpcDefinition_level = 'j';

{*NpcDefinition Multipliers*}
NpcDefinition_id_Multiplier = -515724329;
NpcDefinition_level_Multiplier = 590573207;

Actor_interacting = 'an';
Actor_interacting_Multiplier = 538168375;

Widget_getText = 'bi';

{* Node - 3 Hooks *}
Node = 'gw';
Node_Next = 'el';
Node_Previous = 'eg';
Node_UID = 'dj';

{* NPC - 1 Hooks *}
NPC = 'aa';
NPC_Definition = 'y';

{* NPCDefinition - 2 Hooks *}
NPCDefinition = 'ag';
NPCDefinition_Actions = 'i';
NPCDefinition_Name = 'g';

{* ObjectDefinition - 2 Hooks *}
ObjectDefinition = 'ax';
ObjectDefinition_Actions = 'aq';
ObjectDefinition_Name = 'f';

{* Player - 2 Hooks *}
Player = 'k';
Player_Model = 'o';
Player_Name = 'y';

{* Queue - 1 Hooks *}
Queue = 'fh';
Queue_Head = 'y';

{* Region - 2 Hooks *}
Region = 'ch';
Region_SceneObjects = 'r';
Region_SceneTiles = 'g';

{* Renderable - 1 Hooks *}
Renderable = 'bx';
Renderable_Height = 'ch';
Renderable_Height_Multiplier = 1402043673;

{* WorldObject - 12 Hooks *}
WorldObject = 'cg';
WorldObject_Flags = 'p';
WorldObject_Flags_Multiplier = 393169573;
WorldObject_Hash = 'o';
WorldObject_Hash_Multiplier = -21271879;
WorldObject_OffsetX = 'x';
WorldObject_OffsetX_Multiplier = -1588899007;
WorldObject_OffsetY = 'w';
WorldObject_OffsetY_Multiplier = -2043804879;
WorldObject_Orientation = 'g';
WorldObject_Orientation_Multiplier = -1453061613;
WorldObject_Plane = 'y';
WorldObject_Plane_Multiplier = -1717297035;
WorldObject_RelativeX = 'a';
WorldObject_RelativeX_Multiplier = -728627441;
WorldObject_RelativeY = 'r';
WorldObject_RelativeY_Multiplier = -1348670663;
WorldObject_Renderable = 'l';
WorldObject_Get_X = 'k';
WorldObject_Get_X_Multiplier = -646487517;
WorldObject_Get_Y = 'v';
WorldObject_Get_Y_Multiplier = -1750598391;
WorldObject_Height = 'u';
WorldObject_Height_Multiplier = -280590169;

{* Stream - 2 Hooks *}
Stream = 'do';
Stream_Offset = 'u';
Stream_Offset_Multiplier = -1798397783;
Stream_Payload = 'y';

{* StringStorage - 0 Hooks *}
StringStorage = 'ea';

{* SceneTile - 8 Hooks *}
SceneTile = 'cj';
SceneTile_BoundaryObject = 'a';
SceneTile_FloorDecorationObject = 'r';
SceneTile_ItemLayer = 'w';
SceneTile_Plane = 'v';
SceneTile_Plane_Multiplier = -2059823675;
SceneTile_WorldObjects = 'f';
SceneTile_WallObject = 'x';
SceneTile_X = 'u';
SceneTile_X_Multiplier = 337201943;
SceneTile_Y = 'k';
SceneTile_Y_Multiplier = -977894799;

{* WallObject - 11 Hooks *}
WallObject = 'cs';
WallObject_BackupRenderable = 'r';
WallObject_Flags = 'c';
WallObject_Flags_Multiplier = -1188332199;
WallObject_Height = 'l';
WallObject_Height_Multiplier = -526074127;
WallObject_Hash = 'w';
WallObject_Hash_Multiplier = 2123129033;
WallObject_Orientation = 'v';
WallObject_Orientation_Multiplier = 1590020931;
WallObject_Plane = 'y';
WallObject_Plane_Multiplier = 976837181;
WallObject_RelativeX = 'g';
WallObject_RelativeX_Multiplier = -1417347255;
WallObject_RelativeY = 'a';
WallObject_RelativeY_Multiplier = -2079324505;
WallObject_Renderable = 'x';
WallObject_X = 'u';
WallObject_X_Multiplier = -603169993;
WallObject_Y = 'k';
WallObject_Y_Multiplier = -1149723161;

{* Widget - 22 Hooks *}
Widget = 'ee';
Widget_Actions = 'bk';
Widget_ActionType = 'm';
Widget_ActionType_Multiplier = 639658035;
Widget_BoundsIndex = 'dr';
Widget_BoundsIndex_Multiplier = 1921174117;
Widget_Children = 'dz';
Widget_ContentIDs = 'dv';
Widget_Height = 'h';
Widget_Height_Multiplier = 23827733;
Widget_ID = 'q';
Widget_ID_Multiplier = -2071686887;
Widget_Index = 'n';
Widget_Index_Multiplier = 277826827;
Widget_Name = 'be';
Widget_Opcodes = 'dk';
Widget_Parent = 'bg';
Widget_ParentID = 'p';
Widget_ParentID_Multiplier = 1568667015;
Widget_RelativeX = 'y';
Widget_RelativeX_Multiplier = 934982983;
Widget_RelativeY = 'b';
Widget_RelativeY_Multiplier = -839109755;
Widget_ScrollX = 'z';
Widget_ScrollX_Multiplier = 1125536823;
Widget_ScrollY = 'e';
Widget_ScrollY_Multiplier = -297447859;
Widget_StackSizes = 'dg';
Widget_Text = 'ba';
Widget_Type = 's';
Widget_Type_Multiplier = -1142912813;
Widget_Width = 'i';
Widget_Width_Multiplier = 1320459303;
Widget_X = 'j';
Widget_X_Multiplier = -79782867;
Widget_Y = 'x';

Widget_getItems = 'ds';
Widget_getStackSizes = 'da';
Widget_getID = 'i';
Widget_Y_Multiplier = -395318811;

Should work i think. (some stuff is outdated because fish didn't posted the updated stuff.
edit: messed up simba tags -.- if it throws error such as 'unknown identifier' just re-name it i guess :|. Hopefully hooks get updated fully =).

Nebula

2014-05-27 16:07:23

From: samerdl

[code]
{ 187 Hooks Found By Cheddys Beautiful Updater }

const
ReflectionRevision = '49';


{* BoundaryObject - 9 Hooks *}
BoundaryObject = 'cl';
BoundaryObject_AlternativeOrientation = 'l';
BoundaryObject_AlternativeOrientation_Multiplier = 1389124145;
BoundaryObject_BackupRenderable = 'a';
BoundaryObject_Flags = 'r';
BoundaryObject_Flags_Multiplier = -621404059;
BoundaryObject_Hash = 'x';
BoundaryObject_Hash_Multiplier = 174051663;
BoundaryObject_Orientation = 'v';
BoundaryObject_Orientation_Multiplier = 695777807;
BoundaryObject_Plane = 'y';
BoundaryObject_Plane_Multiplier = -1114608285;
BoundaryObject_Renderable = 'g';
BoundaryObject_Get_X = 'u';
BoundaryObject_Get_X_Multiplier = 1452391039;
BoundaryObject_Get_Y = 'k';
BoundaryObject_Get_Y_Multiplier = -949838095;

{* Cache - 3 Hooks *}
Cache = 'fx';
Cache_CacheableNode = 'y';
Cache_HashTable = 'v';
Cache_Queue = 'l';

{* CacheableNode - 2 Hooks *}
CacheableNode = 'ft';
CacheableNode_Next = 'cr';
CacheableNode_Previous = 'cl';

{* Canvas - 1 Hooks *}
Canvas = 'dc';
Canvas_Component = 'u';

{* Actor - 18 Hooks *}
Actor = 'ai';
Actor_Animation = 'an';
Actor_Animation_Multiplier = -772673237;
Actor_CombatCycle = 'ae';
Actor_CombatCycle_Multiplier = 738616745;
Actor_Health = 'at';
Actor_Health_Multiplier = 664073677;
Actor_HitCycles = 'ap';
Actor_HitDamages = 'ac';
Actor_HitTypes = 'aj';
Actor_InteractingIndex = 'aw';
Actor_InteractingIndex_Multiplier = 974088395;
Actor_MaxHealth = 'as';
Actor_MaxHealth_Multiplier = 1495817743;
Actor_Orientation = 'bi';
Actor_Orientation_Multiplier = -692156845;
Actor_ActiveText = 'ai';
Actor_PositionOffset = 'd';
Actor_PositionOffset_Multiplier = 1931324096;
Actor_PathLength = 'bk';
Actor_PathLength_Multiplier = 1333577889;
Actor_PathTraversed = 'bj';
Actor_PathX = 'bg';
Actor_PathY = 'bs';
Actor_LocalX = 'b';
Actor_LocalX_Multiplier = -115581019;
Actor_LocalY = 'i';
Actor_LocalY_Multiplier = 1862326073;
Actor_isInSequence = 'ab';

{* ClassData - 3 Hooks *}
ClassData = 'gn';
ClassData_Bytes = 'x';
ClassData_Fields = 'l';
ClassData_Methods = 'a';

{* Client - 46 Hooks *}
Client = 'client';
Client_BaseX = 'ae.co';
Client_BaseX_Multiplier = -75820169;
Client_BaseY = 'ak.cv';
Client_BaseY_Multiplier = 1363071411;
Client_CameraPitch = 'ct.fy';
Client_CameraPitch_Multiplier = 978451045;
Client_CameraX = 'w.fv';
Client_CameraX_Multiplier = 579382229;
Client_CameraY = 'cp.fw';
Client_CameraY_Multiplier = 201905125;
Client_CameraYaw = 'br.fk';
Client_CameraYaw_Multiplier = 875492681;
Client_CameraZ = 'i.fl';
Client_CameraZ_Multiplier = 282686931;
Client_CollisionMaps = 'client.w';
Client_Levels = 'client.hz';
Client_Run_Energy = 'client.jt';
Client_Run_Energy_Multiplier = -1148693389;
Client_Experiences = 'client.hv';
Client_LoopCycle = 'client.j';
Client_LoopCycle_Multiplier = -1554219467;
Client_GroundItems = 'client.hp';
Client_NPCs = 'client.bj';
Client_Player = 'cg.hb';
Client_Players = 'client.gq';
Client_Login_State = 'al.ah';
Client_Login_State_Multiplier = 1080992083;
Client_CompassAngle = 'client.fd';
Client_CompassAngle_Multiplier = 188773915;
Client_Map_Offset = 'client.dj';
Client_Map_Offset_Multiplier = 100607273;
Client_Map_Scale = 'client.dl';
Client_Map_Scale_Multiplier = 275005369;
Client_Real_Levels = 'client.hq';
Client_MenuActions = 'client.iu';
Client_MenuCount = 'client.ii';
Client_MenuCount_Multiplier = -779437725;
Client_MenuHeight = 'br.io';
Client_MenuHeight_Multiplier = -834841965;
Client_MenuOptions = 'client.iv';
Client_MenuWidth = 'cg.iy';
Client_MenuWidth_Multiplier = -1155881505;
Client_MenuX = 'aa.ht';
Client_MenuX_Multiplier = 1487758909;
Client_MenuY = 'm.hg';
Client_MenuY_Multiplier = -329146929;
Client_MouseX = 'dr.g';
Client_MouseX_Multiplier = -476633551;
Client_MouseY = 'dr.a';
Client_MouseY_Multiplier = 1607741335;
Client_NPCIndices = 'client.bx';
Client_Password = 'al.ax';
Client_Plane = 'v.hd';
Client_Plane_Multiplier = -946619189;
Client_Settings = 'et.u';
Client_Region = 'k.dg';
Client_GroundHeights = 'g.y';
Client_GroundSettings = 'g.u';
Client_Username = 'al.ag';
Client_Weight = 'client.jn';
Client_Weight_Multiplier = -2075744581;
Client_WidgetHeights = 'client.lm';
Client_WidgetPositionsX = 'client.lr';
Client_WidgetPositionsY = 'client.lp';
Client_Widgets = 'ee.u';
Client_WidgetSettings = 'et.k';
Client_WidgetWidths = 'client.ll';
Client_isMenuOpen = 'client.hy';

{* CollisionMap - 5 Hooks *}
CollisionMap = 'gx';
CollisionMap_Flags = 'aa';
CollisionMap_Height = 'av';
CollisionMap_Height_Multiplier = 519861409;
CollisionMap_OffsetX = 'al';
CollisionMap_OffsetX_Multiplier = 571754825;
CollisionMap_OffsetY = 'aq';
CollisionMap_OffsetY_Multiplier = 44134315;
CollisionMap_Width = 'e';
CollisionMap_Width_Multiplier = 1360578593;

{* FloorDecorationObject - 6 Hooks *}
FloorDecorationObject = 'ct';
FloorDecorationObject_Flags = 'g';
FloorDecorationObject_Flags_Multiplier = -380911001;
FloorDecorationObject_Hash = 'l';
FloorDecorationObject_Hash_Multiplier = 197400825;
FloorDecorationObject_Plane = 'y';
FloorDecorationObject_Plane_Multiplier = 554106865;
FloorDecorationObject_Renderable = 'v';
FloorDecorationObject_Get_X = 'u';
FloorDecorationObject_Get_X_Multiplier = 149257185;
FloorDecorationObject_Get_Y = 'k';
FloorDecorationObject_Get_Y_Multiplier = 1639278273;

{* HashTable - 1 Hooks *}
HashTable = 'fr';
HashTable_Nodes = 'u';

{* Item - 2 Hooks *}
Item = 'z';
Item_ID = 'y';
Item_ID_Multiplier = 320823979;
Item_StackSize = 'u';
Item_StackSize_Multiplier = 1770558897;

{* ItemDefinition - 9 Hooks *}
ItemDefinition = 'aw';
ItemDefinition_GroundActions = 'd';
ItemDefinition_ModelColours = 'c';
ItemDefinition_ModelSizeX = 'ae';
ItemDefinition_ModelSizeX_Multiplier = -1056598195;
ItemDefinition_ModelSizeY = 'at';
ItemDefinition_ModelSizeY_Multiplier = 1855279859;
ItemDefinition_ModelSizeZ = 'as';
ItemDefinition_ModelSizeZ_Multiplier = 855806131;
ItemDefinition_Name = 'w';
ItemDefinition_NewModelColours = 'f';
ItemDefinition_InventoryActions = 'z';
ItemDefinition_isMembers = 'q';

{* ItemLayer - 0 Hooks *}
ItemLayer = 'cw';

{* LinkedList - 2 Hooks *}
LinkedList = 'fn';
LinkedList_Head = 'y';
LinkedList_Tail = 'u';

{* Model - 11 Hooks *}
Model = 'cz';
Model_IndicesLength = 'r';
Model_IndicesLength_Multiplier = 1;
Model_IndicesX = 'w';
Model_IndicesY = 'c';
Model_IndicesZ = 'f';
Model_TexturedIndicesX = 'o';
Model_TexturedIndicesY = 'p';
Model_TexturedIndicesZ = 'n';
Model_VerticesLength = 'l';
Model_VerticesLength_Multiplier = 1;
Model_VerticesX = 'g';
Model_VerticesY = 'a';
Model_VerticesZ = 'x';

NpcDefinition_id = 'u';
NpcDefinition_level = 'j';

{*NpcDefinition Multipliers*}
NpcDefinition_id_Multiplier = -515724329;
NpcDefinition_level_Multiplier = 590573207;

Actor_interacting = 'an';
Actor_interacting_Multiplier = 538168375;

Widget_getText = 'bi';

{* Node - 3 Hooks *}
Node = 'gw';
Node_Next = 'el';
Node_Previous = 'eg';
Node_UID = 'dj';

{* NPC - 1 Hooks *}
NPC = 'aa';
NPC_Definition = 'y';

{* NPCDefinition - 2 Hooks *}
NPCDefinition = 'ag';
NPCDefinition_Actions = 'i';
NPCDefinition_Name = 'g';

{* ObjectDefinition - 2 Hooks *}
ObjectDefinition = 'ax';
ObjectDefinition_Actions = 'aq';
ObjectDefinition_Name = 'f';

{* Player - 2 Hooks *}
Player = 'k';
Player_Model = 'o';
Player_Name = 'y';

{* Queue - 1 Hooks *}
Queue = 'fh';
Queue_Head = 'y';

{* Region - 2 Hooks *}
Region = 'ch';
Region_SceneObjects = 'r';
Region_SceneTiles = 'g';

{* Renderable - 1 Hooks *}
Renderable = 'bx';
Renderable_Height = 'ch';
Renderable_Height_Multiplier = 1402043673;

{* WorldObject - 12 Hooks *}
WorldObject = 'cg';
WorldObject_Flags = 'p';
WorldObject_Flags_Multiplier = 393169573;
WorldObject_Hash = 'o';
WorldObject_Hash_Multiplier = -21271879;
WorldObject_OffsetX = 'x';
WorldObject_OffsetX_Multiplier = -1588899007;
WorldObject_OffsetY = 'w';
WorldObject_OffsetY_Multiplier = -2043804879;
WorldObject_Orientation = 'g';
WorldObject_Orientation_Multiplier = -1453061613;
WorldObject_Plane = 'y';
WorldObject_Plane_Multiplier = -1717297035;
WorldObject_RelativeX = 'a';
WorldObject_RelativeX_Multiplier = -728627441;
WorldObject_RelativeY = 'r';
WorldObject_RelativeY_Multiplier = -1348670663;
WorldObject_Renderable = 'l';
WorldObject_Get_X = 'k';
WorldObject_Get_X_Multiplier = -646487517;
WorldObject_Get_Y = 'v';
WorldObject_Get_Y_Multiplier = -1750598391;
WorldObject_Height = 'u';
WorldObject_Height_Multiplier = -280590169;

{* Stream - 2 Hooks *}
Stream = 'do';
Stream_Offset = 'u';
Stream_Offset_Multiplier = -1798397783;
Stream_Payload = 'y';

{* StringStorage - 0 Hooks *}
StringStorage = 'ea';

{* SceneTile - 8 Hooks *}
SceneTile = 'cj';
SceneTile_BoundaryObject = 'a';
SceneTile_FloorDecorationObject = 'r';
SceneTile_ItemLayer = 'w';
SceneTile_Plane = 'v';
SceneTile_Plane_Multiplier = -2059823675;
SceneTile_WorldObjects = 'f';
SceneTile_WallObject = 'x';
SceneTile_X = 'u';
SceneTile_X_Multiplier = 337201943;
SceneTile_Y = 'k';
SceneTile_Y_Multiplier = -977894799;

{* WallObject - 11 Hooks *}
WallObject = 'cs';
WallObject_BackupRenderable = 'r';
WallObject_Flags = 'c';
WallObject_Flags_Multiplier = -1188332199;
WallObject_Height = 'l';
WallObject_Height_Multiplier = -526074127;
WallObject_Hash = 'w';
WallObject_Hash_Multiplier = 2123129033;
WallObject_Orientation = 'v';
WallObject_Orientation_Multiplier = 1590020931;
WallObject_Plane = 'y';
WallObject_Plane_Multiplier = 976837181;
WallObject_RelativeX = 'g';
WallObject_RelativeX_Multiplier = -1417347255;
WallObject_RelativeY = 'a';
WallObject_RelativeY_Multiplier = -2079324505;
WallObject_Renderable = 'x';
WallObject_X = 'u';
WallObject_X_Multiplier = -603169993;
WallObject_Y = 'k';
WallObject_Y_Multiplier = -1149723161;

{* Widget - 22 Hooks *}
Widget = 'ee';
Widget_Actions = 'bk';
Widget_ActionType = 'm';
Widget_ActionType_Multiplier = 639658035;
Widget_BoundsIndex = 'dr';
Widget_BoundsIndex_Multiplier = 1921174117;
Widget_Children = 'dz';
Widget_ContentIDs = 'dv';
Widget_Height = 'h';
Widget_Height_Multiplier = 23827733;
Widget_ID = 'q';
Widget_ID_Multiplier = -2071686887;
Widget_Index = 'n';
Widget_Index_Multiplier = 277826827;
Widget_Name = 'be';
Widget_Opcodes = 'dk';
Widget_Parent = 'bg';
Widget_ParentID = 'p';
Widget_ParentID_Multiplier = 1568667015;
Widget_RelativeX = 'y';
Widget_RelativeX_Multiplier = 934982983;
Widget_RelativeY = 'b';
Widget_RelativeY_Multiplier = -839109755;
Widget_ScrollX = 'z';
Widget_ScrollX_Multiplier = 1125536823;
Widget_ScrollY = 'e';
Widget_ScrollY_Multiplier = -297447859;
Widget_StackSizes = 'dg';
Widget_Text = 'ba';
Widget_Type = 's';
Widget_Type_Multiplier = -1142912813;
Widget_Width = 'i';
Widget_Width_Multiplier = 1320459303;
Widget_X = 'j';
Widget_X_Multiplier = -79782867;
Widget_Y = 'x';

Widget_getItems = 'ds';
Widget_getStackSizes = 'da';
Widget_getID = 'i';
Widget_Y_Multiplier = -395318811;

Should work i think. (some stuff is outdated because fish didn't posted the updated stuff.
edit: messed up simba tags -.- if it throws error such as 'unknown identifier' just re-name it i guess :|. Hopefully hooks get updated fully =).


This is working great, but when I first loaded it it gave me an out of range error anytime i used R_TileToMSEx. to fix I just made the entire function a try function so if anything goes wrong the script will just continue.


function R_TileToMSEx(X, Y, Height: Extended): TPoint;
var
Z, CurveX, CurveY, CurveCosX, CurveCosY, CurveSinX, CurveSinY, TempCalculation: Extended;
CalculatedScreenPosX, CalculatedScreenPosY: Integer;
begin
try
begin
if (X < 128) or (Y < 128) or (X > 13056) or (Y > 13056) then begin
Result := Point(-1, -1);
Exit;
end;
Z := -Height;
X := X - R_GetCameraX;
Y := Y - R_GetCameraY;
Z := Z - R_GetCameraZ;
CurveX := R_GetCameraYaw;
CurveY := R_GetCameraPitch;
CurveCosX := CURVECOS[Floor(CurveX)];
CurveCosY := CURVECOS[Floor(CurveY)];
CurveSinX := CURVESIN[Floor(CurveX)];
CurveSinY := CURVESIN[Floor(CurveY)];
TempCalculation := ashr(Round((CurveCosX * X) + (Y * CurveSinX)), 16);
Y := ashr(Round((Y * CurveCosX) - (X * CurveSinX)), 16);
X := Round(TempCalculation);
TempCalculation := ashr(Round((Z * CurveCosY) - (Y * CurveSinY)), 16);
Y := ashr(Round((Z * CurveSinY) - ((-CurveCosY) * Y)), 16);
Z := Round(TempCalculation);
if (Y < 50) then begin
Result := Point(-1, -1);
Exit;
end else begin
CalculatedScreenPosX := Round((((Floor(X) shl 9) / Y)));
IncEx(CalculatedScreenPosX, 256);
CalculatedScreenPosY := Round((((Floor(Z) shl 9) / Y)));
IncEx(CalculatedScreenPosY, 167);
Result := Point(CalculatedScreenPosX, CalculatedScreenPosY);
end;
end;
except
end;
end;

Grunt

2014-05-27 17:20:15

hmmm, is declarplayer messedup? my scripts compiles but does nothing, just goes straight to successfully executed

Frement

2014-05-27 17:29:49

From: Nebula
This is working great, but when I first loaded it it gave me an out of range error anytime i used R_TileToMSEx. to fix I just made the entire function a try function so if anything goes wrong the script will just continue.


function R_TileToMSEx(X, Y, Height: Extended): TPoint;
var
Z, CurveX, CurveY, CurveCosX, CurveCosY, CurveSinX, CurveSinY, TempCalculation: Extended;
CalculatedScreenPosX, CalculatedScreenPosY: Integer;
begin
try
begin
if (X < 128) or (Y < 128) or (X > 13056) or (Y > 13056) then begin
Result := Point(-1, -1);
Exit;
end;
Z := -Height;
X := X - R_GetCameraX;
Y := Y - R_GetCameraY;
Z := Z - R_GetCameraZ;
CurveX := R_GetCameraYaw;
CurveY := R_GetCameraPitch;
CurveCosX := CURVECOS[Floor(CurveX)];
CurveCosY := CURVECOS[Floor(CurveY)];
CurveSinX := CURVESIN[Floor(CurveX)];
CurveSinY := CURVESIN[Floor(CurveY)];
TempCalculation := ashr(Round((CurveCosX * X) + (Y * CurveSinX)), 16);
Y := ashr(Round((Y * CurveCosX) - (X * CurveSinX)), 16);
X := Round(TempCalculation);
TempCalculation := ashr(Round((Z * CurveCosY) - (Y * CurveSinY)), 16);
Y := ashr(Round((Z * CurveSinY) - ((-CurveCosY) * Y)), 16);
Z := Round(TempCalculation);
if (Y < 50) then begin
Result := Point(-1, -1);
Exit;
end else begin
CalculatedScreenPosX := Round((((Floor(X) shl 9) / Y)));
IncEx(CalculatedScreenPosX, 256);
CalculatedScreenPosY := Round((((Floor(Z) shl 9) / Y)));
IncEx(CalculatedScreenPosY, 167);
Result := Point(CalculatedScreenPosX, CalculatedScreenPosY);
end;
end;
except
end;
end;


If you don't call SetupReflection, you get an out of range error in that function.

Olly

2014-05-27 17:32:16

From: Frement
If you don't call SetupReflection, you get an out of range error in that function.


Make the include require Lape!!

Nebula

2014-05-27 17:42:42

From: Frement
If you don't call SetupReflection, you get an out of range error in that function.


Oh wow thanks. what happened was I commented out lots of setupreflection because it was terminating my script by saying the include was out of date. turns out all that needed to be removed was the HooksValid piece.

now we're rolling again :D

 *****Nebula Law-Crafter*****
Running For: 3 Minutes and 27 Seconds
Exp Gained: 513
Exp Per Hour: 8921
laws crafted: 54
Laws per hour: 939
*************************

jman1208

2014-05-27 18:23:46

I changed the hooks file to what is above. And i'm still getting this:
Reflection Hooks are outdated
No need to post about it, we are currently working on it. ~ Reflection dev's

Am i missing a step?

Nebula

2014-05-27 18:25:21

From: jman1208
I changed the hooks file to what is above. And i'm still getting this:
Reflection Hooks are outdated
No need to post about it, we are currently working on it. ~ Reflection dev's

Am i missing a step?


I pretty much posted the solution in my last post.

in the function SetupReflection, put brackets around all of this:


{if HooksValid then
begin
R_SetupRandoms;
R_SetupCurves;
Writeln('Reflection succesfully setup!');
end else
TerminateScript;}

Cheddy

2014-05-27 18:25:25

Just a slight issue I seem to be having with the include:

if ((R_GetLoginState < 10) or (R_GetLoginState > 30)) then

The login state is always less than 10 I believe :D

I believe you have got game state confused with login state. Game state goes between 10 and 30; login state only goes between 0 and 5 :D

jman1208

2014-05-27 18:32:11

From: Nebula
I pretty much posted the solution in my last post.

in the function SetupReflection, put brackets around all of this:


{if HooksValid then
begin
R_SetupRandoms;
R_SetupCurves;
Writeln('Reflection succesfully setup!');
end else
TerminateScript;}


Thank you sir! Sorry for the wasted post :). Time to finish up my plank maker :D

Cheddy

2014-05-27 18:43:45

Here's a few new functions I believe should work, there is no TRecord for player yet so can't do playerIsMoving :D



(*
R_MyPlayerIsMoving
~~~~~~~~~~~

.. code-block:: pascal

function R_MyPlayerIsMoving(): Boolean;

Returns whether the users player is moving or not.

.. note::

by Cheddy

*)
function R_MyPlayerIsMoving(): Boolean;
var
playerObj: integer;
begin
playerObj := SmartGetFieldObject(SmartCurrentTarget, 0, Client_Player);
Result := (SmartGetFieldInt(SmartCurrentTarget, playerObj, Actor_PathLength) * Actor_PathLength_Multiplier) > 0;
SmartFreeObject(SmartCurrentTarget, playerObj);
end;



(*
R_NPCIsMoving
~~~~~~~~~~~

.. code-block:: pascal

function R_NPCIsMoving(npc : TNPC): Boolean;

Returns whether the NPC is moving or not.

.. note::

by Cheddy

*)
function R_NPCIsMoving(npc : TNPC): Boolean;
var
npcObj: integer;
begin
npcObj := SmartGetFieldArrayObject(SmartCurrentTarget, 0, Client_NPCs, npc.index);
Result := ((SmartGetFieldInt(SmartCurrentTarget, npcObj, Actor_PathLength) * Actor_PathLength_Multiplier)) > 0;
SmartFreeObject(SmartCurrentTarget, npcObj);
end;

Cheddy

2014-05-27 18:47:37

From: jman1208
Thank you sir! Sorry for the wasted post :). Time to finish up my plank maker :D


Not a good idea. If you don't setup the the curves you can't do world to screen ;)
The hooks valid function won't work until fixed anyways at the minute

These hooks work fine for me with no compile errors (altered some of the naming top match Simba convention) ;)

{ 189 Hooks Found By Cheddys Beautiful Updater }

const
ReflectionRevision = '49';


{* BoundaryObject - 9 Hooks *}
BoundaryObject = 'cl';
BoundaryObject_AlternativeOrientation = 'l';
BoundaryObject_AlternativeOrientation_Multiplier = 1389124145;
BoundaryObject_BackupRenderable = 'a';
BoundaryObject_Flags = 'r';
BoundaryObject_Flags_Multiplier = -621404059;
BoundaryObject_Hash = 'x';
BoundaryObject_Hash_Multiplier = 174051663;
BoundaryObject_Orientation = 'v';
BoundaryObject_Orientation_Multiplier = 695777807;
BoundaryObject_Plane = 'y';
BoundaryObject_Plane_Multiplier = -1114608285;
BoundaryObject_Renderable = 'g';
BoundaryObject_Get_X = 'u';
BoundaryObject_Get_X_Multiplier = 1452391039;
BoundaryObject_Get_Y = 'k';
BoundaryObject_Get_Y_Multiplier = -949838095;

{* Cache - 3 Hooks *}
Cache = 'fx';
Cache_CacheableNode = 'y';
Cache_HashTable = 'v';
Cache_Queue = 'l';

{* CacheableNode - 2 Hooks *}
CacheableNode = 'ft';
CacheableNode_Next = 'cr';
CacheableNode_Previous = 'cl';

{* Canvas - 1 Hooks *}
Canvas = 'dc';
Canvas_Component = 'u';

{* Actor - 18 Hooks *}
Actor = 'ai';
Actor_Animation = 'an';
Actor_Animation_Multiplier = -772673237;
Actor_CombatCycle = 'ae';
Actor_CombatCycle_Multiplier = 738616745;
Actor_Health = 'at';
Actor_Health_Multiplier = 664073677;
Actor_HitCycles = 'ap';
Actor_HitDamages = 'ac';
Actor_HitTypes = 'aj';
Actor_Interacting = 'aw';
Actor_Interacting_Multiplier = 974088395;
Actor_MaxHealth = 'as';
Actor_MaxHealth_Multiplier = 1495817743;
Actor_Orientation = 'bi';
Actor_Orientation_Multiplier = -692156845;
Actor_ActiveText = 'ai';
Actor_PositionOffset = 'd';
Actor_PositionOffset_Multiplier = 1931324096;
Actor_PathLength = 'bk';
Actor_PathLength_Multiplier = 1333577889;
Actor_PathTraversed = 'bj';
Actor_PathX = 'bg';
Actor_PathY = 'bs';
Actor_LocalX = 'b';
Actor_LocalX_Multiplier = -115581019;
Actor_LocalY = 'i';
Actor_LocalY_Multiplier = 1862326073;
Actor_isInSequence = 'ab';

{* ClassData - 3 Hooks *}
ClassData = 'gn';
ClassData_Bytes = 'x';
ClassData_Fields = 'l';
ClassData_Methods = 'a';

{* Client - 46 Hooks *}
Client = 'client';
Client_BaseX = 'ae.co';
Client_BaseX_Multiplier = -75820169;
Client_BaseY = 'ak.cv';
Client_BaseY_Multiplier = 1363071411;
Client_CameraPitch = 'ct.fy';
Client_CameraPitch_Multiplier = 978451045;
Client_CameraX = 'w.fv';
Client_CameraX_Multiplier = 579382229;
Client_CameraY = 'cp.fw';
Client_CameraY_Multiplier = 201905125;
Client_CameraYaw = 'br.fk';
Client_CameraYaw_Multiplier = 875492681;
Client_CameraZ = 'i.fl';
Client_CameraZ_Multiplier = 282686931;
Client_CollisionMaps = 'client.w';
Client_Levels = 'client.hz';
Client_Run_Energy = 'client.jt';
Client_Run_Energy_Multiplier = -1148693389;
Client_Experiences = 'client.hv';
Client_LoopCycle = 'client.j';
Client_LoopCycle_Multiplier = -1554219467;
Client_GroundItems = 'client.hp';
Client_NPCs = 'client.bj';
Client_Player = 'cg.hb';
Client_Players = 'client.gq';
Client_Login_State = 'al.ah';
Client_Login_State_Multiplier = 1080992083;
Client_CompassAngle = 'client.fd';
Client_CompassAngle_Multiplier = 188773915;
Client_Map_Offset = 'client.dj';
Client_Map_Offset_Multiplier = 100607273;
Client_Map_Scale = 'client.dl';
Client_Map_Scale_Multiplier = 275005369;
Client_Real_Levels = 'client.hq';
Client_MenuActions = 'client.iu';
Client_MenuCount = 'client.ii';
Client_MenuCount_Multiplier = -779437725;
Client_MenuHeight = 'br.io';
Client_MenuHeight_Multiplier = -834841965;
Client_MenuOptions = 'client.iv';
Client_MenuWidth = 'cg.iy';
Client_MenuWidth_Multiplier = -1155881505;
Client_MenuX = 'aa.ht';
Client_MenuX_Multiplier = 1487758909;
Client_MenuY = 'm.hg';
Client_MenuY_Multiplier = -329146929;
Client_ReflectionMouseX = 'dr.g';
Client_ReflectionMouseX_Multiplier = -476633551;
Client_ReflectionMouseY = 'dr.a';
Client_ReflectionMouseY_Multiplier = 1607741335;
Client_NPCIndices = 'client.bx';
Client_Password = 'al.ax';
Client_Plane = 'v.hd';
Client_Plane_Multiplier = -946619189;
Client_Settings = 'et.u';
Client_Region = 'k.dg';
Client_GroundHeights = 'g.y';
Client_GroundSettings = 'g.u';
Client_Username = 'al.ag';
Client_Weight = 'client.jn';
Client_Weight_Multiplier = -2075744581;
Client_WidgetHeights = 'client.lm';
Client_WidgetPositionsX = 'client.lr';
Client_WidgetPositionsY = 'client.lp';
Client_Widgets = 'ee.u';
Client_WidgetSettings = 'et.k';
Client_WidgetWidths = 'client.ll';
Client_isMenuOpen = 'client.hy';

{* CollisionMap - 5 Hooks *}
CollisionMap = 'gx';
CollisionMap_Flags = 'aa';
CollisionMap_Height = 'av';
CollisionMap_Height_Multiplier = 519861409;
CollisionMap_OffsetX = 'al';
CollisionMap_OffsetX_Multiplier = 571754825;
CollisionMap_OffsetY = 'aq';
CollisionMap_OffsetY_Multiplier = 44134315;
CollisionMap_Width = 'e';
CollisionMap_Width_Multiplier = 1360578593;

{* FloorDecorationObject - 6 Hooks *}
FloorDecorationObject = 'ct';
FloorDecorationObject_Flags = 'g';
FloorDecorationObject_Flags_Multiplier = -380911001;
FloorDecorationObject_Hash = 'l';
FloorDecorationObject_Hash_Multiplier = 197400825;
FloorDecorationObject_Plane = 'y';
FloorDecorationObject_Plane_Multiplier = 554106865;
FloorDecorationObject_Renderable = 'v';
FloorDecorationObject_Get_X = 'u';
FloorDecorationObject_Get_X_Multiplier = 149257185;
FloorDecorationObject_Get_Y = 'k';
FloorDecorationObject_Get_Y_Multiplier = 1639278273;

{* HashTable - 1 Hooks *}
HashTable = 'fr';
HashTable_Nodes = 'u';

{* Item - 2 Hooks *}
Item = 'z';
Item_ID = 'y';
Item_ID_Multiplier = 320823979;
Item_StackSize = 'u';
Item_StackSize_Multiplier = 1770558897;

{* ItemDefinition - 9 Hooks *}
ItemDefinition = 'aw';
ItemDefinition_GroundActions = 'd';
ItemDefinition_ModelColours = 'c';
ItemDefinition_ModelSizeX = 'ae';
ItemDefinition_ModelSizeX_Multiplier = -1056598195;
ItemDefinition_ModelSizeY = 'at';
ItemDefinition_ModelSizeY_Multiplier = 1855279859;
ItemDefinition_ModelSizeZ = 'as';
ItemDefinition_ModelSizeZ_Multiplier = 855806131;
ItemDefinition_Name = 'w';
ItemDefinition_NewModelColours = 'f';
ItemDefinition_InventoryActions = 'z';
ItemDefinition_isMembers = 'q';

{* ItemLayer - 0 Hooks *}
ItemLayer = 'cw';

{* LinkedList - 2 Hooks *}
LinkedList = 'fn';
LinkedList_Head = 'y';
LinkedList_Tail = 'u';

{* Model - 11 Hooks *}
Model = 'cz';
Model_IndicesLength = 'r';
Model_IndicesLength_Multiplier = 1;
Model_IndicesX = 'w';
Model_IndicesY = 'c';
Model_IndicesZ = 'f';
Model_TexturedIndicesX = 'o';
Model_TexturedIndicesY = 'p';
Model_TexturedIndicesZ = 'n';
Model_VerticesLength = 'l';
Model_VerticesLength_Multiplier = 1;
Model_VerticesX = 'g';
Model_VerticesY = 'a';
Model_VerticesZ = 'x';

{* ReflectionMouse - 0 Hooks *}
ReflectionMouse = 'dr';

{* Node - 3 Hooks *}
Node = 'gw';
Node_Next = 'el';
Node_Previous = 'eg';
Node_UID = 'dj';

{* NPC - 1 Hooks *}
NPC = 'aa';
NPC_Definition = 'y';

{* NPCDefinition - 4 Hooks *}
NPCDefinition = 'ag';
NPCDefinition_Actions = 'i';
NPCDefinition_ID = 'l';
NPCDefinition_ID_Multiplier = 1854256689;
NPCDefinition_Level = 'q';
NPCDefinition_Level_Multiplier = -2071384963;
NPCDefinition_Name = 'g';

{* ObjectDefinition - 2 Hooks *}
ObjectDefinition = 'ax';
ObjectDefinition_Actions = 'aq';
ObjectDefinition_Name = 'f';

{* Player - 2 Hooks *}
Player = 'k';
Player_Model = 'o';
Player_Name = 'y';

{* Queue - 1 Hooks *}
Queue = 'fh';
Queue_Head = 'y';

{* Region - 2 Hooks *}
Region = 'ch';
Region_SceneObjects = 'r';
Region_SceneTiles = 'g';

{* Renderable - 1 Hooks *}
Renderable = 'bx';
Renderable_Height = 'ch';
Renderable_Height_Multiplier = 1402043673;

{* WorldObject - 12 Hooks *}
WorldObject = 'cg';
WorldObject_Flags = 'p';
WorldObject_Flags_Multiplier = 393169573;
WorldObject_Hash = 'o';
WorldObject_Hash_Multiplier = -21271879;
WorldObject_OffsetX = 'x';
WorldObject_OffsetX_Multiplier = -1588899007;
WorldObject_OffsetY = 'w';
WorldObject_OffsetY_Multiplier = -2043804879;
WorldObject_Orientation = 'g';
WorldObject_Orientation_Multiplier = -1453061613;
WorldObject_Plane = 'y';
WorldObject_Plane_Multiplier = -1717297035;
WorldObject_RelativeX = 'a';
WorldObject_RelativeX_Multiplier = -728627441;
WorldObject_RelativeY = 'r';
WorldObject_RelativeY_Multiplier = -1348670663;
WorldObject_Renderable = 'l';
WorldObject_Get_X = 'k';
WorldObject_Get_X_Multiplier = -646487517;
WorldObject_Get_Y = 'v';
WorldObject_Get_Y_Multiplier = -1750598391;
WorldObject_Height = 'u';
WorldObject_Height_Multiplier = -280590169;

{* Stream - 2 Hooks *}
Stream = 'do';
Stream_Offset = 'u';
Stream_Offset_Multiplier = -1798397783;
Stream_Payload = 'y';

{* StringStorage - 0 Hooks *}
StringStorage = 'ea';

{* SceneTile - 8 Hooks *}
SceneTile = 'cj';
SceneTile_BoundaryObject = 'a';
SceneTile_FloorDecorationObject = 'r';
SceneTile_ItemLayer = 'w';
SceneTile_Plane = 'v';
SceneTile_Plane_Multiplier = -2059823675;
SceneTile_WorldObjects = 'f';
SceneTile_WallObject = 'x';
SceneTile_X = 'u';
SceneTile_X_Multiplier = 337201943;
SceneTile_Y = 'k';
SceneTile_Y_Multiplier = -977894799;

{* WallObject - 11 Hooks *}
WallObject = 'cs';
WallObject_BackupRenderable = 'r';
WallObject_Flags = 'c';
WallObject_Flags_Multiplier = -1188332199;
WallObject_Height = 'l';
WallObject_Height_Multiplier = -526074127;
WallObject_Hash = 'w';
WallObject_Hash_Multiplier = 2123129033;
WallObject_Orientation = 'v';
WallObject_Orientation_Multiplier = 1590020931;
WallObject_Plane = 'y';
WallObject_Plane_Multiplier = 976837181;
WallObject_RelativeX = 'g';
WallObject_RelativeX_Multiplier = -1417347255;
WallObject_RelativeY = 'a';
WallObject_RelativeY_Multiplier = -2079324505;
WallObject_Renderable = 'x';
WallObject_X = 'u';
WallObject_X_Multiplier = -603169993;
WallObject_Y = 'k';
WallObject_Y_Multiplier = -1149723161;

{* Widget - 22 Hooks *}
Widget = 'ee';
Widget_Actions = 'bk';
Widget_ActionType = 'm';
Widget_ActionType_Multiplier = 639658035;
Widget_BoundsIndex = 'dr';
Widget_BoundsIndex_Multiplier = 1921174117;
Widget_Children = 'dz';
Widget_GetItems = 'dv';
Widget_Height = 'h';
Widget_Height_Multiplier = 23827733;
Widget_GetID = 'q';
Widget_GetID_Multiplier = -2071686887;
Widget_Index = 'n';
Widget_Index_Multiplier = 277826827;
Widget_Name = 'be';
Widget_Opcodes = 'dk';
Widget_Parent = 'bg';
Widget_ParentID = 'p';
Widget_ParentID_Multiplier = 1568667015;
Widget_RelativeX = 'y';
Widget_RelativeX_Multiplier = 934982983;
Widget_RelativeY = 'b';
Widget_RelativeY_Multiplier = -839109755;
Widget_ScrollX = 'z';
Widget_ScrollX_Multiplier = 1125536823;
Widget_ScrollY = 'e';
Widget_ScrollY_Multiplier = -297447859;
Widget_GetStackSizes = 'dg';
Widget_Text = 'ba';
Widget_Type = 's';
Widget_Type_Multiplier = -1142912813;
Widget_Width = 'i';
Widget_Width_Multiplier = 1320459303;
Widget_X = 'j';
Widget_X_Multiplier = -79782867;
Widget_Y = 'x';
Widget_Y_Multiplier = -395318811;

Grunt

2014-05-27 19:26:49

so why not just make hook valid always return true?

edit: is there a function for telling whether or not your character is talking to an npc?

Frement

2014-05-27 19:51:49

From: Grunt
so why not just make hook valid always return true?

edit: is there a function for telling whether or not your character is talking to an npc?


R_InteractingNPC

Nebula

2014-05-27 19:55:20

From: Frement
R_InteractingNPC


this function doesn't work actually.

just use AreTalking. it's not reflection but it works.

Frement

2014-05-27 19:56:50

From: Nebula
this function doesn't work actually.

just use AreTalking. it's not reflection but it works.


And why is that?

Nebula

2014-05-27 20:02:00

From: Frement
And why is that?


it just doesn't work, lol. I've tried using it before and I just tried using it now to verify. it doesnt work .

Frement

2014-05-27 20:08:33

From: Nebula
it just doesn't work, lol. I've tried using it before and I just tried using it now to verify. it doesnt work .


Yeah, good explanation, you provided so much information I can tell you how to fix your problem very easily.

Nebula

2014-05-27 21:00:57

From: Frement
Yeah, good explanation, you provided so much information I can tell you how to fix your problem very easily.


writeln(R_InteractingNPC) doesn't return a npc when you call it while talking to a npc.

Krazy_Meerkat

2014-05-27 21:11:44

I just want to say Fish, you spend more time posting in this thread than trying to talk to me about getting your hooks implemented.
I tried @ 3 different times in the last 24 hours talking to you about it and I see you're on here posting instead?
We already have R_IsWalking function which works fine.
I did not choose the hook names Fish, nobody here would choose these names, we left them like this b/c we were pulling hooks from another client. Unfortunately the include has become a little bloated with hooks since then and we can no-longer use those old client hooks for a quick-update.

R_Interacting is not broken.. From knowledge, all npc functions break when the npc Index hook is wrong. This ties into naming for some wierd reason, there is a hook called NpcIndicies which we use as the NPC Index hook (other clients call NpcIndicies something else). Anyway, if there's some kinda problem with the Npcs it's usually the Index hook "NpcIndicies"

Dervish

2014-05-27 21:18:31

Sorry to bother you guys, I'm sort of bad at this "hooks" business (not that I don't want to learn, I just don't know where to start), but why does my script run straight from compiled to terminated ? Does it have anything to do with hooks not being updated ?

*hides in shame*.

Edit :

I confirm R_IsWalking works fine albeit misses at times (very rarely though).

Wetish

2014-05-27 21:26:16

If you updated them manually then you need to alter a function in Reflections.simba so that the script doesn't automatically terminate.

function HooksValid: Boolean;
begin
if MouseSpeed = 0 then
begin
Writeln('It appears SetupSRL is below SetupReflection in current script');
Writeln('Please Change the order in the mainloop. ~ Reflection');
terminatescript;
end;
if ((R_GetLoginState < 10) or (R_GetLoginState > 30)) then
begin
Writeln('Reflection Hooks are outdated');
Writeln('No need to post about it, we are currently working on it. ~ Reflection dev''s');
Result := True; //Instead of Result := False;
end else
Result := True;
end;

Dervish

2014-05-27 21:35:50

From: Wetish
If you updated them manually then you need to alter a function in Reflections.simba so that the script doesn't automatically terminate.

function HooksValid: Boolean;
begin
if MouseSpeed = 0 then
begin
Writeln('It appears SetupSRL is below SetupReflection in current script');
Writeln('Please Change the order in the mainloop. ~ Reflection');
terminatescript;
end;
if ((R_GetLoginState < 10) or (R_GetLoginState > 30)) then
begin
Writeln('Reflection Hooks are outdated');
Writeln('No need to post about it, we are currently working on it. ~ Reflection dev''s');
Result := True; //Instead of Result := False;
end else
Result := True;
end;


Thank you, that worked and I don't understand how, isn't the problem that the hooks' names are different than those usually used ? How can they be still be "understood" by simba ?

Wetish

2014-05-27 21:43:08

From: Dervish
Thank you, that worked and I don't understand how, isn't the problem that the hooks' names are different than those usually used ? How can they be still be "understood" by simba ?


I don't know what the LoginState has to do with hooks being outdated. I just looked for what was causing the script to stop and changed it since I knew I had updated hooks. As for the hooks with different names, it just doesn't use them. Those hooks are still broken.

rj

2014-05-27 21:43:37

From: Dervish
Thank you, that worked and I don't understand how, isn't the problem that the hooks' names are different than those usually used ? How can they be still be "understood" by simba ?


hooks are passed to smart and smart sends the info back to simba.

Since the I guess the only valid login state is between 10 and 30 you can assume if those values don't work tyhe hook is broken

Dervish

2014-05-27 21:49:25

From: Wetish
I don't know what the LoginState has to do with hooks being outdated. I just looked for what was causing the script to stop and changed it since I knew I had updated hooks. As for the hooks with different names, it just doesn't use them. Those hooks are still broken.


I don't know, I probably asked a stupid question but the function is named HooksValid after all :blushing:.
Thanks for explaining.

From: Robert
hooks are passed to smart and smart sends the info back to simba.

Since the I guess the only valid login state is between 10 and 30 you can assume if those values don't work tyhe hook is broken


Hmm.. okay.
Do you have a link which can lead me to somewhere I can learn more about these "hooks" ?

tls

2014-05-27 22:09:54

There were two updates today for OSRS.

Krazy_Meerkat

2014-05-27 22:28:29

From: Robert
hooks are passed to smart and smart sends the info back to simba.

Since the I guess the only valid login state is between 10 and 30 you can assume if those values don't work tyhe hook is broken


It's also one of the few hooks you can access from the login screen :p GameState would be a better name for the hook I know (b/c it also handles rendering state).
I know most people's updaters don't support the hooks which we use. Especially people who didn't make their own updater.
The f2p update has been a hassle, I think they were paranoid about java bots on f2p.
We're still working on hooks, elfyyy is MIA.

Grunt

2014-05-27 23:52:59

How do you make ur own updater? How does these hooks work? Could one of you merciful gods show us how to make fire? :redface:

Krazy_Meerkat

2014-05-28 00:53:14

Hooks have been updated, just run a reflection script and they'll auto-update.
You know the drill people, if anything's not working post it here and we'll take a look as soon as we can :)

Flight

2014-05-28 01:50:12

I'm glad to see some of the reflection developers are staying active on this project. Regardless of if I use it or not I'm always pleased to see teamwork, as everyone on SRL is in the same boat; keep up the good work team! :thumbsup:

Frement

2014-05-28 02:15:04

I'm active, now like me! :(

Hoodz

2014-05-28 02:45:46

From: Frement
I'm active, now like me! :(


you mean you are active at diablo? :D

Dervish

2014-05-28 08:01:47

Hmm..? Getting an out of range at line 465 in Tiles.simba :

Confirmed : needtobank.
Error: Out Of Range at line 465
The following DTMs were not freed: [SRL - Lamp bitmap, SRL - Book of Knowledge, 2, 3]


.. note::

by Frement < line 465

*)
function R_TileToMSEx(X, Y, Height: Extended): TPoint;
var

SetupReflection is called in the script.

Frement

2014-05-28 08:06:28

From: Dervish
Hmm..? Getting an out of range at line 465 in Tiles.simba :

Confirmed : needtobank.
Error: Out Of Range at line 465
The following DTMs were not freed: [SRL - Lamp bitmap, SRL - Book of Knowledge, 2, 3]


.. note::

by Frement < line 465

*)
function R_TileToMSEx(X, Y, Height: Extended): TPoint;
var

SetupReflection is called in the script.


Is R_SetupCurves called in SetupReflection? If not, try calling it at the main loop before anything.

Dervish

2014-05-28 08:12:51

From: Frement
Is R_SetupCurves called in SetupReflection? If not, try calling it at the main loop before anything.


It is indeed called :

  if HooksValid then
begin
R_SetupRandoms;
R_SetupCurves;
Writeln('Reflection succesfully setup!');
end else

Frement

2014-05-28 08:17:09

From: Dervish
It is indeed called :

  if HooksValid then
begin
R_SetupRandoms;
R_SetupCurves;
Writeln('Reflection succesfully setup!');
end else


And "Reflection succesfully setup!" gets written to debug?

Dervish

2014-05-28 08:18:39

From: Frement
And "Reflection succesfully setup!" gets written to debug?


Yes.

TehNeonFishy

2014-05-28 09:04:08

I'm finding that R_WalkPath is broken. Worked before the update now seems to be completely off, seems to want to go in the opposite direction to where it is supposed to.

Krazy_Meerkat

2014-05-28 11:43:26

Found 3 bad multipliers in the client.. Tested R_InteractTile and R_WalkToTileMM, both are working well. I missed them when I checked the tiles :3

Dervish

2014-05-28 12:30:24

Now works (not using same script as before though), thanks very much for all the effort you guys put into this project.

TehNeonFishy

2014-05-28 12:31:32

Yeah everything I'm using is working great now, thanks guys!

Turpinator

2014-05-28 13:14:43

From: Wetish
If you updated them manually then you need to alter a function in Reflections.simba so that the script doesn't automatically terminate.

function HooksValid: Boolean;
begin
if MouseSpeed = 0 then
begin
Writeln('It appears SetupSRL is below SetupReflection in current script');
Writeln('Please Change the order in the mainloop. ~ Reflection');
terminatescript;
end;
if ((R_GetLoginState < 10) or (R_GetLoginState > 30)) then
begin
Writeln('Reflection Hooks are outdated');
Writeln('No need to post about it, we are currently working on it. ~ Reflection dev''s');
Result := True; //Instead of Result := False;
end else
Result := True;
end;


an easier way would be to just override the function in a script of…
function HooksValid: Boolean; Override;
begin
Result := True;
end;
But… we dont have lape.
i vote we switch over to lape and integrate/work alongside with flight's aero lib

Olly

2014-05-28 14:07:59

From: Turpinator
an easier way would be to just override the function in a script of…
function HooksValid: Boolean; Override;
begin
Result := True;
end;
But… we dont have lape.
i vote we switch over to lape and integrate/work alongside with flight's aero lib


What? your crazy.. do it srl-6 style.

Krazy_Meerkat

2014-05-28 14:08:48

From: Turpinator
an easier way would be to just override the function in a script of…
function HooksValid: Boolean; Override;
begin
Result := True;
end;
But… we dont have lape.
i vote we switch over to lape and integrate/work alongside with flight's aero lib

We will be making the transition to lape soon, Frement has developed a very nice base.. We'll be writing some tutorials on how to use the new lape functions and there will be plenty of warning before the switch.

Nebula

2014-05-28 15:04:26

Hahaha one of the reflection functions I use in my script was broken (dunno which, likely a tile function). I woke up this morning and hit start on my law crafter before I went to school. I failsafed the fk out of my script to make it basically never end by teleporting back to castle wars and restarting if there's a problem. Burned through over 300 rings of dueling xD

works fine now after auto updating. TY all reflection devs <3 <3 <3

Cheddy

2014-05-29 06:59:31

Have just made some model clicking methods, and resurrected a Dijkstra's algorithm path generator (Finds the shortest path taking into account the obstacles). Am going to test them after lunch. Also got my updater to post to a static URL as it will be needed to get the hooks required for the functions I have just created (No support for collision maps/Object_Renderable in current ones)

Cheddy

2014-05-29 13:17:42

These are completely untested at the minute. Just ported them from my Java bot…

Will test and fix later tonight


Type TModel = Record
xVertices, yVertices, zVertices : TIntegerArray;
xIndices, yIndices, zIndices : TIntegerArray;
tile: TPoint;
verticesLength, indicesLength: Integer;
end;
TModelArray = Array of TModel;

function NULL_MODEL: TModel;
begin
with Result do
begin
Tile := Point(0, 0);
end;
end;

(*
R_NewModel
~~~~~~~~~~~

.. code-block:: pascal

function R_NewModel(obj : Integer): TModel;

Generates a TModel from a Java model

.. note::

by Cheddy

*)
function R_NewModel(obj : Integer): TModel;
var
i : Integer;
begin
with Result do
begin
verticesLength := SmartGetFieldInt(SmartCurrentTarget, obj, Model_VerticesLength);
indicesLength := SmartGetFieldInt(SmartCurrentTarget, obj, Model_IndicesLength);
for i := 0 to verticesLength do
begin
xVertices[i] := SmartGetFieldArrayInt(SmartCurrentTarget, obj, Model_VerticesX, i);
yVertices[i] := SmartGetFieldArrayInt(SmartCurrentTarget, obj, Model_VerticesY, i);
zVertices[i] := SmartGetFieldArrayInt(SmartCurrentTarget, obj, Model_VerticesZ, i);
end;
for i := 0 to indicesLength do
begin
xIndices[i] := SmartGetFieldArrayInt(SmartCurrentTarget, obj, Model_IndicesX, i);
yIndices[i] := SmartGetFieldArrayInt(SmartCurrentTarget, obj, Model_IndicesY, i);
zIndices[i] := SmartGetFieldArrayInt(SmartCurrentTarget, obj, Model_IndicesZ, i);
end;
end;
end;

(*
R_GetWorldObjectModel
~~~~~~~~~~~

.. code-block:: pascal

function R_GetWorldObjectModel(ob : Integer): TModel;

Gets the model associated with a world object

.. note::

by Cheddy

*)
function R_GetWorldObjectModel(ob : Integer): TModel;
var
obj : Integer;
begin
obj := SmartGetFieldObject(SmartCurrentTarget, ob, WorldObject_Renderable);
Result := R_NewModel(obj);
Result.tile := Point(SmartGetFieldInt(SmartCurrentTarget, ob, WorldObject_Get_X) * WorldObject_Get_X_Multiplier, SmartGetFieldInt(SmartCurrentTarget, ob, WorldObject_Get_Y) * WorldObject_Get_Y_Multiplier);
SmartFreeObject(SmartCurrentTarget, obj);
end;

(*
R_GetBoundaryObjectModel
~~~~~~~~~~~

.. code-block:: pascal

function R_GetBoundaryObjectModel(ob : Integer): TModel;

Gets the model associated with a boundary object

.. note::

by Cheddy

*)
function R_GetBoundaryObjectModel(ob : Integer): TModel;
var
obj : Integer;
begin
obj := SmartGetFieldObject(SmartCurrentTarget, ob, BoundaryObject_Renderable);
Result := R_NewModel(obj);
Result.tile := Point(SmartGetFieldInt(SmartCurrentTarget, ob, BoundaryObject_Get_X) * BoundaryObject_Get_X_Multiplier, SmartGetFieldInt(SmartCurrentTarget, ob, BoundaryObject_Get_Y) * BoundaryObject_Get_Y_Multiplier);
SmartFreeObject(SmartCurrentTarget, obj);
end;

(*
R_GetFloorDecorationObjectModel
~~~~~~~~~~~

.. code-block:: pascal

function R_GetFloorDecorationObjectModel(ob : Integer): TModel;

Gets the model associated with a floor decoration object

.. note::

by Cheddy

*)
function R_GetFloorDecorationObjectModel(ob : Integer): TModel;
var
obj : Integer;
begin
obj := SmartGetFieldObject(SmartCurrentTarget, ob, FloorDecorationObject_Renderable);
Result := R_NewModel(obj);
Result.tile := Point(SmartGetFieldInt(SmartCurrentTarget, ob, FloorDecorationObject_Get_X) * FloorDecorationObject_Get_X_Multiplier, SmartGetFieldInt(SmartCurrentTarget, ob, FloorDecorationObject_Get_Y) * FloorDecorationObject_Get_Y_Multiplier);
SmartFreeObject(SmartCurrentTarget, obj);
end;

(*
R_GetWallObjectModel
~~~~~~~~~~~

.. code-block:: pascal

function R_GetWallObjectModel(ob : Integer): TModel;

Gets the model associated with a wall object

.. note::

by Cheddy

*)
function R_GetWallObjectModel(ob : Integer): TModel;
var
obj : Integer;
begin
obj := SmartGetFieldObject(SmartCurrentTarget, ob, WallObject_Renderable);
Result := R_NewModel(obj);
Result.tile := Point(SmartGetFieldInt(SmartCurrentTarget, ob, WallObject_X) * WallObject_X_Multiplier, SmartGetFieldInt(SmartCurrentTarget, ob, WallObject_Y) * WallObject_Y_Multiplier);
SmartFreeObject(SmartCurrentTarget, obj);
end;



(*
R_GetPolygons
~~~~~~~~~~~

.. code-block:: pascal

function function R_GetPolygons(model : TModel): T2DPointArray;

Gets the clickable polygons for a model.

.. note::

by Cheddy

*)
function R_GetPolygons(model : TModel): T2DPointArray;
var
p1,p2,p3 : TPoint;
polys : T2DPointArray;
i : Integer;
begin
for i := 0 to High(model.xVertices) do
begin
p1 := R_TileToMSEx(model.tile.x + model.xVertices[model.xIndices[i]],model.tile.y + model.zVertices[model.xIndices[i]], 0 - model.yVertices[model.xIndices[i]]);
p2 := R_TileToMSEx(model.tile.x + model.xVertices[model.yIndices[i]],model.tile.y + model.zVertices[model.yIndices[i]], 0 - model.yVertices[model.yIndices[i]]);
p3 := R_TileToMSEx(model.tile.x + model.xVertices[model.zIndices[i]],model.tile.y + model.zVertices[model.zIndices[i]], 0 - model.yVertices[model.zIndices[i]]);
if((p1.x >= 0) and (p2.x >= 0) and (p3.x >= 0)) then
begin
polys[High(polys)] := [p1, p2, p3];
end;
end;
result := polys;
end;

(*
R_RandomModelPoint
~~~~~~~~~~~

.. code-block:: pascal

function R_RandomModelPoint(model : TModel): TPoint;

Gets a random clickable point within a TModel

.. note::

by Cheddy

*)
function R_RandomModelPoint(model : TModel): TPoint;
var
atpa : T2DPointArray;
tpa : TPointArray;
tempPoint : TPoint;
i : Integer;
begin
atpa := R_GetPolygons(model);
for i := 0 to 100 do
begin
tpa := atpa[RandomRange(0, High(atpa))];
tempPoint := Point(tpa[RandomRange(Low(tpa), High(tpa))].x,tpa[RandomRange(Low(tpa), High(tpa))].y);
if(PointInBox(tempPoint, MSBox)) then
begin
result := tempPoint;
exit;
end;
end;
if(not PointInBox(tempPoint, MSBox)) then
begin
result := Point(-1, -1);
exit;
end;
end;



(*
R_ClickModel
~~~~~~~~~~~

.. code-block:: pascal

function R_ClickModel(model : TModel, left : Boolean): Boolean;

Returns whether the NPC is moving or not.

.. note::

by Cheddy

*)
function R_ClickModel(model : TModel; button : Variant): Boolean;
var
p : TPoint;
begin
p := R_RandomModelPoint(model);
if(not PointInBox(p, MSBox)) then
begin
result := false;
exit;
end;
Mouse(p.x,p.y,0,0, button);
result := true;
end;

Dervish

2014-05-30 14:54:32

From: fish1328
These are completely untested at the minute. Just ported them from my Java bot…

Will test and fix later tonight


Type TModel = Record
xVertices, yVertices, zVertices : TIntegerArray;
xIndices, yIndices, zIndices : TIntegerArray;
tile: TPoint;
verticesLength, indicesLength: Integer;
end;
TModelArray = Array of TModel;

function NULL_MODEL: TModel;
begin
with Result do
begin
Tile := Point(0, 0);
end;
end;

(*
R_NewModel
~~~~~~~~~~~

.. code-block:: pascal

function R_NewModel(obj : Integer): TModel;

Generates a TModel from a Java model

.. note::

by Cheddy

*)
function R_NewModel(obj : Integer): TModel;
var
i : Integer;
begin
with Result do
begin
verticesLength := SmartGetFieldInt(SmartCurrentTarget, obj, Model_VerticesLength);
indicesLength := SmartGetFieldInt(SmartCurrentTarget, obj, Model_IndicesLength);
for i := 0 to verticesLength do
begin
xVertices[i] := SmartGetFieldArrayInt(SmartCurrentTarget, obj, Model_VerticesX, i);
yVertices[i] := SmartGetFieldArrayInt(SmartCurrentTarget, obj, Model_VerticesY, i);
zVertices[i] := SmartGetFieldArrayInt(SmartCurrentTarget, obj, Model_VerticesZ, i);
end;
for i := 0 to indicesLength do
begin
xIndices[i] := SmartGetFieldArrayInt(SmartCurrentTarget, obj, Model_IndicesX, i);
yIndices[i] := SmartGetFieldArrayInt(SmartCurrentTarget, obj, Model_IndicesY, i);
zIndices[i] := SmartGetFieldArrayInt(SmartCurrentTarget, obj, Model_IndicesZ, i);
end;
end;
end;

(*
R_GetWorldObjectModel
~~~~~~~~~~~

.. code-block:: pascal

function R_GetWorldObjectModel(ob : Integer): TModel;

Gets the model associated with a world object

.. note::

by Cheddy

*)
function R_GetWorldObjectModel(ob : Integer): TModel;
var
obj : Integer;
begin
obj := SmartGetFieldObject(SmartCurrentTarget, ob, WorldObject_Renderable);
Result := R_NewModel(obj);
Result.tile := Point(SmartGetFieldInt(SmartCurrentTarget, ob, WorldObject_Get_X) * WorldObject_Get_X_Multiplier, SmartGetFieldInt(SmartCurrentTarget, ob, WorldObject_Get_Y) * WorldObject_Get_Y_Multiplier);
SmartFreeObject(SmartCurrentTarget, obj);
end;

(*
R_GetBoundaryObjectModel
~~~~~~~~~~~

.. code-block:: pascal

function R_GetBoundaryObjectModel(ob : Integer): TModel;

Gets the model associated with a boundary object

.. note::

by Cheddy

*)
function R_GetBoundaryObjectModel(ob : Integer): TModel;
var
obj : Integer;
begin
obj := SmartGetFieldObject(SmartCurrentTarget, ob, BoundaryObject_Renderable);
Result := R_NewModel(obj);
Result.tile := Point(SmartGetFieldInt(SmartCurrentTarget, ob, BoundaryObject_Get_X) * BoundaryObject_Get_X_Multiplier, SmartGetFieldInt(SmartCurrentTarget, ob, BoundaryObject_Get_Y) * BoundaryObject_Get_Y_Multiplier);
SmartFreeObject(SmartCurrentTarget, obj);
end;

(*
R_GetFloorDecorationObjectModel
~~~~~~~~~~~

.. code-block:: pascal

function R_GetFloorDecorationObjectModel(ob : Integer): TModel;

Gets the model associated with a floor decoration object

.. note::

by Cheddy

*)
function R_GetFloorDecorationObjectModel(ob : Integer): TModel;
var
obj : Integer;
begin
obj := SmartGetFieldObject(SmartCurrentTarget, ob, FloorDecorationObject_Renderable);
Result := R_NewModel(obj);
Result.tile := Point(SmartGetFieldInt(SmartCurrentTarget, ob, FloorDecorationObject_Get_X) * FloorDecorationObject_Get_X_Multiplier, SmartGetFieldInt(SmartCurrentTarget, ob, FloorDecorationObject_Get_Y) * FloorDecorationObject_Get_Y_Multiplier);
SmartFreeObject(SmartCurrentTarget, obj);
end;

(*
R_GetWallObjectModel
~~~~~~~~~~~

.. code-block:: pascal

function R_GetWallObjectModel(ob : Integer): TModel;

Gets the model associated with a wall object

.. note::

by Cheddy

*)
function R_GetWallObjectModel(ob : Integer): TModel;
var
obj : Integer;
begin
obj := SmartGetFieldObject(SmartCurrentTarget, ob, WallObject_Renderable);
Result := R_NewModel(obj);
Result.tile := Point(SmartGetFieldInt(SmartCurrentTarget, ob, WallObject_X) * WallObject_X_Multiplier, SmartGetFieldInt(SmartCurrentTarget, ob, WallObject_Y) * WallObject_Y_Multiplier);
SmartFreeObject(SmartCurrentTarget, obj);
end;



(*
R_GetPolygons
~~~~~~~~~~~

.. code-block:: pascal

function function R_GetPolygons(model : TModel): T2DPointArray;

Gets the clickable polygons for a model.

.. note::

by Cheddy

*)
function R_GetPolygons(model : TModel): T2DPointArray;
var
p1,p2,p3 : TPoint;
polys : T2DPointArray;
i : Integer;
begin
for i := 0 to High(model.xVertices) do
begin
p1 := R_TileToMSEx(model.tile.x + model.xVertices[model.xIndices[i]],model.tile.y + model.zVertices[model.xIndices[i]], 0 - model.yVertices[model.xIndices[i]]);
p2 := R_TileToMSEx(model.tile.x + model.xVertices[model.yIndices[i]],model.tile.y + model.zVertices[model.yIndices[i]], 0 - model.yVertices[model.yIndices[i]]);
p3 := R_TileToMSEx(model.tile.x + model.xVertices[model.zIndices[i]],model.tile.y + model.zVertices[model.zIndices[i]], 0 - model.yVertices[model.zIndices[i]]);
if((p1.x >= 0) and (p2.x >= 0) and (p3.x >= 0)) then
begin
polys[High(polys)] := [p1, p2, p3];
end;
end;
result := polys;
end;

(*
R_RandomModelPoint
~~~~~~~~~~~

.. code-block:: pascal

function R_RandomModelPoint(model : TModel): TPoint;

Gets a random clickable point within a TModel

.. note::

by Cheddy

*)
function R_RandomModelPoint(model : TModel): TPoint;
var
atpa : T2DPointArray;
tpa : TPointArray;
tempPoint : TPoint;
i : Integer;
begin
atpa := R_GetPolygons(model);
for i := 0 to 100 do
begin
tpa := atpa[RandomRange(0, High(atpa))];
tempPoint := Point(tpa[RandomRange(Low(tpa), High(tpa))].x,tpa[RandomRange(Low(tpa), High(tpa))].y);
if(PointInBox(tempPoint, MSBox)) then
begin
result := tempPoint;
exit;
end;
end;
if(not PointInBox(tempPoint, MSBox)) then
begin
result := Point(-1, -1);
exit;
end;
end;



(*
R_ClickModel
~~~~~~~~~~~

.. code-block:: pascal

function R_ClickModel(model : TModel, left : Boolean): Boolean;

Returns whether the NPC is moving or not.

.. note::

by Cheddy

*)
function R_ClickModel(model : TModel; button : Variant): Boolean;
var
p : TPoint;
begin
p := R_RandomModelPoint(model);
if(not PointInBox(p, MSBox)) then
begin
result := false;
exit;
end;
Mouse(p.x,p.y,0,0, button);
result := true;
end;


This seems well interesting, can you post an example of how to use it ?

Cheddy

2014-05-31 08:39:11

It doesn't work as of yet. It grabs the model correctly, but veryyyy slowly as Simba has to crunch a lot of numbers and being an interpreted language makes it very slow at that. So I need to find a new way of implementing the model grabber; and need to adjust R_GetPolygons so it uses a list instead of an array

tls

2014-05-31 14:29:33

I think your bottleneck is the calls to R_TileToMSEx. Check out how we did it a while back: https://github.com/Drags111/Kronos/blob/master/lib/wrappers/Model.scar

Cheddy

2014-05-31 18:36:59

Oh, I didn't know there was a TPolygon, that would have made thing a whole lot easier ;)

tls

2014-06-01 00:01:01

That's a class made with a different script compiler…

Cheddy

2014-06-01 07:18:04

Hey, it's mormonman ;)
You were the one who told me that my cacheable node hooks were wrong in R45 ;)
I didn't know you were a dev here haha, How is the updater coming along?

Dervish

2014-06-01 10:18:01

Can someone please explain what a model is ?

rj

2014-06-01 10:50:00

From: Dervish
Can someone please explain what a model is ?


Players, plants, trees, npcs all have models like this:


Dervish

2014-06-01 11:09:24

From: Robert
Players, plants, trees, npcs all have models like this:



So its the "graphic part" of an object?

masterBB

2014-06-01 13:28:52

From: Dervish
So its the "graphic part" of an object?


A model is a collection of triangles making up any 3 dimensional object.

Vertices are the 3D points:

[100, 100, 100]
[200, 100, 100]
[200, 200, 100]
[100, 200, 100]

Indices are the indexes of the 3D point array making a triangle
[0,1,2]
[0,2,3]

This would make two triangles, making up a square.

Dervish

2014-06-01 15:35:49

From: masterBB
A model is a collection of triangles making up any 3 dimensional object.

Vertices are the 3D points:

[100, 100, 100]
[200, 100, 100]
[200, 200, 100]
[100, 200, 100]

Indices are the indexes of the 3D point array making a triangle
[0,1,2]
[0,2,3]

This would make two triangles, making up a square.


Thanks alot for explaining this ! What is it that makes the process of getting the model so slow ? (fish's post)

masterBB

2014-06-01 16:34:02

From: Dervish
Thanks alot for explaining this ! What is it that makes the process of getting the model so slow ? (fish's post)


It is ineffecient for a simba bot. Het gets all indices and vertices. Uses non of the indices though. Note that for every ellement in an array a call to Smart has to be made(slow-ish). He then transforms every vertex to a 2D point(slow). Then loops randomly through 100 of them to check which one is on the mainscreen.

Basically the code is good for grabbing an entire model. But for a simba bot grabbing individual points and transforming them one by one till you got a point on your mainscreen would be way faster.

e: I was wrong, he does use the indices. my bad. My theorie still stands though.

This sounds like a rant(it is not)

The only thing I could speed up without completly changing how it works is this:
function R_GetPolygons(model : TModel): T2DPointArray;
var
p1,p2,p3 : TPoint;
polys : T2DPointArray;
i, j : Integer;
begin
for i := 0 to High(model.xVertices) do
begin
p1 := R_TileToMSEx(model.tile.x + model.xVertices[model.xIndices[i]],model.tile.y + model.zVertices[model.xIndices[i]], 0 - model.yVertices[model.xIndices[i]]);
p2 := R_TileToMSEx(model.tile.x + model.xVertices[model.yIndices[i]],model.tile.y + model.zVertices[model.yIndices[i]], 0 - model.yVertices[model.yIndices[i]]);
p3 := R_TileToMSEx(model.tile.x + model.xVertices[model.zIndices[i]],model.tile.y + model.zVertices[model.zIndices[i]], 0 - model.yVertices[model.zIndices[i]]);
if((p1.x >= 0) and (p2.x >= 0) and (p3.x >= 0)) then
begin
polys[High(polys)] := [p1, p2, p3];
end;
end;
result := polys;
end;

A cube has 8 points, 6 sides, 12 triangles which got 36 points. You loop through the indices, thus projecting all 36 points. Faster would be(untested/in my head):
function R_GetPolygons(model : TModel): T2DPointArray;
var
p1,p2,p3 : TPoint;
projectedPts, polys : T2DPointArray;
i : Integer;
begin
SetLength(projectedPts, Length(model.xVertices));
for i := 0 to High(model.xVertices) do
projectedPts := R_TileToMSEx(model.tile.x + model.xVertices[i],model.tile.y + model.zVertices[i], 0 - model.yVertices[i]);

for j := 0 to High(model.xIndices) do
begin
p1 := projectedPts[model.xIndices[j]];
p2 := projectedPts[model.yIndices[j]];
p3 := projectedPts[model.zIndices[j]];

if((p1.x >= 0) and (p2.x >= 0) and (p3.x >= 0)) then
polys[High(polys)] := [p1, p2, p3];
end;
result := polys;
end;

@fishy1328 After writing this in browser I noticed something odd. Your for loop goes to High(model.xVertices) instead of High(model.xIndices). Why? Also I noticed indices having an x, y and z value. I just assume these are the indices of the corners of the triangles?

Cheddy

2014-06-02 12:45:49

I really need to make a polygon class like they used to have. Got exams for the next few days then I'll look at it. Yes BB, the indices are the triangle corners and the codes should go to high(indicesX) :-)

Flight

2014-06-04 02:09:39

From: masterBB
A model is a collection of triangles making up any 3 dimensional object.

Vertices are the 3D points:

[100, 100, 100]
[200, 100, 100]
[200, 200, 100]
[100, 200, 100]

Indices are the indexes of the 3D point array making a triangle
[0,1,2]
[0,2,3]

This would make two triangles, making up a square.



Cheddy

2014-06-04 04:19:09

Nice mesh flight, I never figured how to hide the object without using bytecode to spoof the renderer and load the mesh instead :-D
I think I have perfected it. Will test later today :-)

P1nky

2014-06-04 08:11:20

[Error] C:\Simba\Includes\SRL-OSR\SRL\core\mapwalk.simba(20:8): Unknown identifier 'R_TileToMM' at line 20

Too late/early for me to try solve atm, please if someone can tell me the solution; Probably a easy fix.

Cheers.

Hoodz

2014-06-04 08:15:24

From: P1nky
[Error] C:\Simba\Includes\SRL-OSR\SRL\core\mapwalk.simba(20:8): Unknown identifier 'R_TileToMM' at line 20

Too late/early for me to try solve atm, please if someone can tell me the solution; Probably a easy fix.

Cheers.


are your folders correct?

[Error] C:\Simba\Includes\SRL-OSR\SRL\core\mapwalk.simba(20:8) <- this is just the srl-osr include but R_TileToMM is a reflection function which is not found in the srl-osr include.

P1nky

2014-06-04 08:18:12

From: hoodz
are your folders correct?

[Error] C:\Simba\Includes\SRL-OSR\SRL\core\mapwalk.simba(20:8) <- this is just the srl-osr include but R_TileToMM is a reflection function which is not found in the srl-osr include.


Where should it be located?

E:

I just followed these instructions:
You will want to extract it to Simba/Includes/SRL-OSR/SRL.
Once there, you will need to rename it to "reflection" without the "".



E2:

Thank you, just solved it lol… I was just being clumsy, this just shows how much of a rookie I am now :(

Dervish

2014-06-04 08:38:33

From: P1nky
Where should it be located?

E:

I just followed these instructions:


Simba/Includes/SRL-OSR/SRL/reflection

ineedbot

2014-06-15 13:45:12

Frement is part of the reflection team right? Why don't you combine his F_AntiRandoms in with the include? Its very useful with extra antirandoms and inv item reflection.

On that note, I notices that Frement's F_antiRandoms has a broken hook;
function R_GetWidgetModelID(WidgetPointer: Integer): Integer;
begin
result := smartGetFieldInt(smartCurrentTarget, WidgetPointer, 'af') * -1749303759;
writeln('R_GetWidgetModelID Debug - WidgetPointer '+intToStr(WidgetPointer)+' Result: '+intToStr(Result));
end;

edit: I also found some possible broken hooks function in F_AntiRandoms too…
SMartGetFieldArrayInt(smartcurrentTarget, def, 'w', i); and SMartGetFieldArrayInt(smartcurrentTarget, def, 'ak', i);

How do yous debug your runescape screens? I use a script I made, its really handy, it takes pictures of the screen (and debug stuff) and records it and saves it in a tidy matter. Also will log down all the available widgets to a .txt file. Handy for anti randoms. Here it is, called dev.simba

Example:
[137]
0=Index: (137) ChildIndex: (0) Widget: (432925428) Text: () Model: (160763239)
1=Index: (137) ChildIndex: (1) Widget: (432925372) Text: (Name HERE: <col=0000ff>*) Model: (160763239)
2=Index: (137) ChildIndex: (2) Widget: (432925312) Text: () Model: (160763239)
3=Index: (137) ChildIndex: (3) Widget: (432925232) Text: () Model: (160763239)
4=Index: (137) ChildIndex: (4) Widget: (432923212) Text: () Model: (160763239)
5=Index: (137) ChildIndex: (5) Widget: (432923148) Text: () Model: (160763239)
6=Index: (137) ChildIndex: (6) Widget: (432925132) Text: () Model: (160763239)
7=Index: (137) ChildIndex: (7) Widget: (432925068) Text: () Model: (160763239)
8=Index: (137) ChildIndex: (8) Widget: (432923004) Text: () Model: (160763239)
9=Index: (137) ChildIndex: (9) Widget: (432922988) Text: () Model: (160763239)
10=Index: (137) ChildIndex: (10) Widget: (432924956) Text: () Model: (160763239)
11=Index: (137) ChildIndex: (11) Widget: (432922908) Text: () Model: (160763239)
12=Index: (137) ChildIndex: (12) Widget: (432922860) Text: () Model: (160763239)
13=Index: (137) ChildIndex: (13) Widget: (432922816) Text: () Model: (160763239)
14=Index: (137) ChildIndex: (14) Widget: (432924836) Text: () Model: (160763239)
15=Index: (137) ChildIndex: (15) Widget: (432924800) Text: () Model: (160763239)
16=Index: (137) ChildIndex: (16) Widget: (432924792) Text: () Model: (160763239)
17=Index: (137) ChildIndex: (17) Widget: (432924764) Text: () Model: (160763239)
18=Index: (137) ChildIndex: (18) Widget: (432924736) Text: () Model: (160763239)
19=Index: (137) ChildIndex: (19) Widget: (435774620) Text: () Model: (160763239)
20=Index: (137) ChildIndex: (20) Widget: (435774592) Text: () Model: (160763239)
21=Index: (137) ChildIndex: (21) Widget: (435774544) Text: () Model: (160763239)
22=Index: (137) ChildIndex: (22) Widget: (435774516) Text: () Model: (160763239)
23=Index: (137) ChildIndex: (23) Widget: (432924684) Text: () Model: (160763239)
24=Index: (137) ChildIndex: (24) Widget: (432924656) Text: () Model: (160763239)
25=Index: (137) ChildIndex: (25) Widget: (432924628) Text: () Model: (160763239)
26=Index: (137) ChildIndex: (26) Widget: (432924600) Text: () Model: (160763239)
27=Index: (137) ChildIndex: (27) Widget: (432924572) Text: () Model: (160763239)
28=Index: (137) ChildIndex: (28) Widget: (432924512) Text: () Model: (160763239)
29=Index: (137) ChildIndex: (29) Widget: (432924504) Text: () Model: (160763239)
30=Index: (137) ChildIndex: (30) Widget: (432924468) Text: () Model: (160763239)
31=Index: (137) ChildIndex: (31) Widget: (432924440) Text: () Model: (160763239)
32=Index: (137) ChildIndex: (32) Widget: (432924412) Text: () Model: (160763239)
33=Index: (137) ChildIndex: (33) Widget: (432924344) Text: () Model: (160763239)
34=Index: (137) ChildIndex: (34) Widget: (432924316) Text: () Model: (160763239)
35=Index: (137) ChildIndex: (35) Widget: (432924308) Text: () Model: (160763239)
36=Index: (137) ChildIndex: (36) Widget: (432924280) Text: () Model: (160763239)
37=Index: (137) ChildIndex: (37) Widget: (432924264) Text: () Model: (160763239)
38=Index: (137) ChildIndex: (38) Widget: (432924204) Text: () Model: (160763239)
39=Index: (137) ChildIndex: (39) Widget: (432924176) Text: () Model: (160763239)
40=Index: (137) ChildIndex: (40) Widget: (432924148) Text: () Model: (160763239)
41=Index: (137) ChildIndex: (41) Widget: (432924140) Text: () Model: (160763239)
42=Index: (137) ChildIndex: (42) Widget: (432924124) Text: () Model: (160763239)
43=Index: (137) ChildIndex: (43) Widget: (432924116) Text: () Model: (160763239)
44=Index: (137) ChildIndex: (44) Widget: (432924108) Text: () Model: (160763239)
45=Index: (137) ChildIndex: (45) Widget: (432924092) Text: () Model: (160763239)
46=Index: (137) ChildIndex: (46) Widget: (432924052) Text: () Model: (160763239)
47=Index: (137) ChildIndex: (47) Widget: (432924044) Text: () Model: (160763239)
48=Index: (137) ChildIndex: (48) Widget: (432924028) Text: () Model: (160763239)
49=Index: (137) ChildIndex: (49) Widget: (432924020) Text: () Model: (160763239)
50=Index: (137) ChildIndex: (50) Widget: (432924012) Text: () Model: (160763239)

[149]
0=Index: (149) ChildIndex: (0) Widget: (432923888) Text: () Model: (160763239)

[182]
0=Index: (182) ChildIndex: (0) Widget: (432923524) Text: (When you have finished playing<br>RuneScape, always use the<br>button below to logout safely.) Model: (160763239)
1=Index: (182) ChildIndex: (1) Widget: (432923516) Text: () Model: (160763239)
2=Index: (182) ChildIndex: (2) Widget: (432923508) Text: () Model: (160763239)
3=Index: (182) ChildIndex: (3) Widget: (432923492) Text: () Model: (160763239)
4=Index: (182) ChildIndex: (4) Widget: (432923484) Text: () Model: (160763239)
5=Index: (182) ChildIndex: (5) Widget: (432923476) Text: () Model: (160763239)
6=Index: (182) ChildIndex: (6) Widget: (432923460) Text: (Click here to logout) Model: (160763239)

[192]
0=Index: (192) ChildIndex: (0) Widget: (432923404) Text: () Model: (160763239)
1=Index: (192) ChildIndex: (1) Widget: (432923388) Text: () Model: (160763239)
2=Index: (192) ChildIndex: (2) Widget: (432923380) Text: () Model: (160763239)
3=Index: (192) ChildIndex: (3) Widget: (432923372) Text: () Model: (160763239)
4=Index: (192) ChildIndex: (4) Widget: (432923356) Text: () Model: (160763239)
5=Index: (192) ChildIndex: (5) Widget: (432923348) Text: () Model: (160763239)
6=Index: (192) ChildIndex: (6) Widget: (432923340) Text: () Model: (160763239)
7=Index: (192) ChildIndex: (7) Widget: (432923332) Text: () Model: (160763239)
8=Index: (192) ChildIndex: (8) Widget: (432923324) Text: () Model: (160763239)
9=Index: (192) ChildIndex: (9) Widget: (432923316) Text: () Model: (160763239)
10=Index: (192) ChildIndex: (10) Widget: (432923308) Text: () Model: (160763239)
11=Index: (192) ChildIndex: (11) Widget: (432923300) Text: () Model: (160763239)
12=Index: (192) ChildIndex: (12) Widget: (432922772) Text: () Model: (160763239)
13=Index: (192) ChildIndex: (13) Widget: (432922764) Text: () Model: (160763239)
14=Index: (192) ChildIndex: (14) Widget: (432922748) Text: () Model: (160763239)
15=Index: (192) ChildIndex: (15) Widget: (432922740) Text: () Model: (160763239)
16=Index: (192) ChildIndex: (16) Widget: (432922732) Text: () Model: (160763239)
17=Index: (192) ChildIndex: (17) Widget: (432922724) Text: () Model: (160763239)
18=Index: (192) ChildIndex: (18) Widget: (432922708) Text: () Model: (160763239)
19=Index: (192) ChildIndex: (19) Widget: (432922700) Text: () Model: (160763239)
20=Index: (192) ChildIndex: (20) Widget: (432922692) Text: () Model: (160763239)
21=Index: (192) ChildIndex: (21) Widget: (432922676) Text: () Model: (160763239)
22=Index: (192) ChildIndex: (22) Widget: (432922668) Text: () Model: (160763239)
23=Index: (192) ChildIndex: (23) Widget: (432922660) Text: () Model: (160763239)
24=Index: (192) ChildIndex: (24) Widget: (432921812) Text: () Model: (160763239)
25=Index: (192) ChildIndex: (25) Widget: (432921804) Text: () Model: (160763239)
26=Index: (192) ChildIndex: (26) Widget: (432921788) Text: () Model: (160763239)
27=Index: (192) ChildIndex: (27) Widget: (432921780) Text: () Model: (160763239)
28=Index: (192) ChildIndex: (28) Widget: (432921764) Text: () Model: (160763239)
29=Index: (192) ChildIndex: (29) Widget: (432921756) Text: () Model: (160763239)
30=Index: (192) ChildIndex: (30) Widget: (432921748) Text: () Model: (160763239)
31=Index: (192) ChildIndex: (31) Widget: (432921740) Text: () Model: (160763239)
32=Index: (192) ChildIndex: (32) Widget: (432921724) Text: () Model: (160763239)
33=Index: (192) ChildIndex: (33) Widget: (432921708) Text: () Model: (160763239)
34=Index: (192) ChildIndex: (34) Widget: (432921700) Text: () Model: (160763239)
35=Index: (192) ChildIndex: (35) Widget: (432921692) Text: () Model: (160763239)
36=Index: (192) ChildIndex: (36) Widget: (432921652) Text: () Model: (160763239)
37=Index: (192) ChildIndex: (37) Widget: (432921644) Text: () Model: (160763239)
38=Index: (192) ChildIndex: (38) Widget: (432921636) Text: () Model: (160763239)
39=Index: (192) ChildIndex: (39) Widget: (432921628) Text: () Model: (160763239)
40=Index: (192) ChildIndex: (40) Widget: (432921620) Text: () Model: (160763239)
41=Index: (192) ChildIndex: (41) Widget: (432921604) Text: () Model: (160763239)
42=Index: (192) ChildIndex: (42) Widget: (432921596) Text: () Model: (160763239)
43=Index: (192) ChildIndex: (43) Widget: (432921588) Text: () Model: (160763239)
44=Index: (192) ChildIndex: (44) Widget: (432921572) Text: () Model: (160763239)
45=Index: (192) ChildIndex: (45) Widget: (432921564) Text: () Model: (160763239)
46=Index: (192) ChildIndex: (46) Widget: (432921556) Text: () Model: (160763239)
47=Index: (192) ChildIndex: (47) Widget: (432921540) Text: () Model: (160763239)
48=Index: (192) ChildIndex: (48) Widget: (432921532) Text: () Model: (160763239)
49=Index: (192) ChildIndex: (49) Widget: (432922612) Text: () Model: (160763239)
50=Index: (192) ChildIndex: (50) Widget: (432922596) Text: () Model: (160763239)

[239]
0=Index: (239) ChildIndex: (0) Widget: (432922496) Text: () Model: (160763239)
1=Index: (239) ChildIndex: (1) Widget: (432921488) Text: () Model: (160763239)
2=Index: (239) ChildIndex: (2) Widget: (432921464) Text: (Click the tune to play.) Model: (160763239)
3=Index: (239) ChildIndex: (3) Widget: (432921448) Text: (Green=Unlocked) Model: (160763239)
4=Index: (239) ChildIndex: (4) Widget: (432921416) Text: () Model: (160763239)
5=Index: (239) ChildIndex: (5) Widget: (432921404) Text: (Fishing) Model: (160763239)
6=Index: (239) ChildIndex: (6) Widget: (432921392) Text: (Playing:) Model: (160763239)
7=Index: (239) ChildIndex: (7) Widget: (432921332) Text: () Model: (160763239)
8=Index: (239) ChildIndex: (8) Widget: (432921320) Text: (AUTO) Model: (160763239)
9=Index: (239) ChildIndex: (9) Widget: (432921296) Text: () Model: (160763239)
10=Index: (239) ChildIndex: (10) Widget: (432921288) Text: (MAN) Model: (160763239)
11=Index: (239) ChildIndex: (11) Widget: (432921276) Text: () Model: (160763239)
12=Index: (239) ChildIndex: (12) Widget: (432921256) Text: (LOOP) Model: (160763239)

[261]
0=Index: (261) ChildIndex: (0) Widget: (432922116) Text: () Model: (160763239)
1=Index: (261) ChildIndex: (1) Widget: (432922104) Text: () Model: (160763239)
2=Index: (261) ChildIndex: (2) Widget: (432922088) Text: () Model: (160763239)
3=Index: (261) ChildIndex: (3) Widget: (432922072) Text: () Model: (160763239)
4=Index: (261) ChildIndex: (4) Widget: (432922048) Text: () Model: (160763239)
5=Index: (261) ChildIndex: (5) Widget: (432922032) Text: () Model: (160763239)
6=Index: (261) ChildIndex: (6) Widget: (430865264) Text: () Model: (160763239)
7=Index: (261) ChildIndex: (7) Widget: (430865248) Text: () Model: (160763239)
8=Index: (261) ChildIndex: (8) Widget: (430865232) Text: () Model: (160763239)
9=Index: (261) ChildIndex: (9) Widget: (430865200) Text: () Model: (160763239)
10=Index: (261) ChildIndex: (10) Widget: (430865192) Text: () Model: (160763239)
11=Index: (261) ChildIndex: (11) Widget: (430865176) Text: () Model: (160763239)
12=Index: (261) ChildIndex: (12) Widget: (430865160) Text: () Model: (160763239)
13=Index: (261) ChildIndex: (13) Widget: (432921168) Text: () Model: (160763239)
14=Index: (261) ChildIndex: (14) Widget: (432921152) Text: () Model: (160763239)
15=Index: (261) ChildIndex: (15) Widget: (432921140) Text: () Model: (160763239)
16=Index: (261) ChildIndex: (16) Widget: (432921128) Text: () Model: (160763239)
17=Index: (261) ChildIndex: (17) Widget: (432921104) Text: () Model: (160763239)
18=Index: (261) ChildIndex: (18) Widget: (432921088) Text: () Model: (160763239)
19=Index: (261) ChildIndex: (19) Widget: (432921064) Text: () Model: (160763239)
20=Index: (261) ChildIndex: (20) Widget: (432921048) Text: () Model: (160763239)
21=Index: (261) ChildIndex: (21) Widget: (432921008) Text: () Model: (160763239)
22=Index: (261) ChildIndex: (22) Widget: (432920976) Text: () Model: (160763239)
23=Index: (261) ChildIndex: (23) Widget: (432920968) Text: () Model: (160763239)
24=Index: (261) ChildIndex: (24) Widget: (432920944) Text: () Model: (160763239)
25=Index: (261) ChildIndex: (25) Widget: (432920928) Text: () Model: (160763239)
26=Index: (261) ChildIndex: (26) Widget: (432920900) Text: () Model: (160763239)
27=Index: (261) ChildIndex: (27) Widget: (432920888) Text: () Model: (160763239)
28=Index: (261) ChildIndex: (28) Widget: (432920840) Text: () Model: (160763239)
29=Index: (261) ChildIndex: (29) Widget: (432920816) Text: () Model: (160763239)
30=Index: (261) ChildIndex: (30) Widget: (432920800) Text: () Model: (160763239)
31=Index: (261) ChildIndex: (31) Widget: (432920792) Text: () Model: (160763239)
32=Index: (261) ChildIndex: (32) Widget: (432920764) Text: () Model: (160763239)
33=Index: (261) ChildIndex: (33) Widget: (432920756) Text: () Model: (160763239)
34=Index: (261) ChildIndex: (34) Widget: (432920740) Text: () Model: (160763239)
35=Index: (261) ChildIndex: (35) Widget: (432920732) Text: () Model: (160763239)
36=Index: (261) ChildIndex: (36) Widget: (432920684) Text: () Model: (160763239)
37=Index: (261) ChildIndex: (37) Widget: (432920676) Text: () Model: (160763239)
38=Index: (261) ChildIndex: (38) Widget: (432920668) Text: () Model: (160763239)
39=Index: (261) ChildIndex: (39) Widget: (432920660) Text: () Model: (160763239)
40=Index: (261) ChildIndex: (40) Widget: (432920640) Text: () Model: (160763239)
41=Index: (261) ChildIndex: (41) Widget: (432920632) Text: () Model: (160763239)
42=Index: (261) ChildIndex: (42) Widget: (432920608) Text: () Model: (160763239)
43=Index: (261) ChildIndex: (43) Widget: (432920592) Text: () Model: (160763239)
44=Index: (261) ChildIndex: (44) Widget: (432920584) Text: () Model: (160763239)
45=Index: (261) ChildIndex: (45) Widget: (432920528) Text: () Model: (160763239)
46=Index: (261) ChildIndex: (46) Widget: (432920512) Text: (Attack option priority:) Model: (160763239)
47=Index: (261) ChildIndex: (47) Widget: (432920504) Text: () Model: (160763239)
48=Index: (261) ChildIndex: (48) Widget: (432920476) Text: () Model: (160763239)
49=Index: (261) ChildIndex: (49) Widget: (432920464) Text: () Model: (160763239)
50=Index: (261) ChildIndex: (50) Widget: (432920456) Text: () Model: (160763239)

[271]
0=Index: (271) ChildIndex: (0) Widget: (432920432) Text: () Model: (160763239)
1=Index: (271) ChildIndex: (1) Widget: (432920416) Text: () Model: (160763239)
2=Index: (271) ChildIndex: (2) Widget: (432920360) Text: (52 / 52) Model: (160763239)
3=Index: (271) ChildIndex: (3) Widget: (432920352) Text: () Model: (160763239)
4=Index: (271) ChildIndex: (4) Widget: (432920336) Text: () Model: (160763239)
5=Index: (271) ChildIndex: (5) Widget: (432920312) Text: () Model: (160763239)
6=Index: (271) ChildIndex: (6) Widget: (432920300) Text: () Model: (160763239)
7=Index: (271) ChildIndex: (7) Widget: (432920288) Text: () Model: (160763239)
8=Index: (271) ChildIndex: (8) Widget: (432920276) Text: () Model: (160763239)
9=Index: (271) ChildIndex: (9) Widget: (432920264) Text: () Model: (160763239)
10=Index: (271) ChildIndex: (10) Widget: (432920256) Text: () Model: (160763239)
11=Index: (271) ChildIndex: (11) Widget: (432920200) Text: () Model: (160763239)
12=Index: (271) ChildIndex: (12) Widget: (432920184) Text: () Model: (160763239)
13=Index: (271) ChildIndex: (13) Widget: (432920176) Text: () Model: (160763239)
14=Index: (271) ChildIndex: (14) Widget: (432920152) Text: () Model: (160763239)
15=Index: (271) ChildIndex: (15) Widget: (432920140) Text: () Model: (160763239)
16=Index: (271) ChildIndex: (16) Widget: (432920116) Text: () Model: (160763239)
17=Index: (271) ChildIndex: (17) Widget: (432920104) Text: () Model: (160763239)
18=Index: (271) ChildIndex: (18) Widget: (432920092) Text: () Model: (160763239)
19=Index: (271) ChildIndex: (19) Widget: (432920048) Text: () Model: (160763239)
20=Index: (271) ChildIndex: (20) Widget: (432920036) Text: () Model: (160763239)
21=Index: (271) ChildIndex: (21) Widget: (432920012) Text: () Model: (160763239)
22=Index: (271) ChildIndex: (22) Widget: (432920000) Text: () Model: (160763239)
23=Index: (271) ChildIndex: (23) Widget: (432919988) Text: () Model: (160763239)
24=Index: (271) ChildIndex: (24) Widget: (432919976) Text: () Model: (160763239)
25=Index: (271) ChildIndex: (25) Widget: (432919964) Text: () Model: (160763239)
26=Index: (271) ChildIndex: (26) Widget: (432919940) Text: () Model: (160763239)
27=Index: (271) ChildIndex: (27) Widget: (432919928) Text: () Model: (160763239)
28=Index: (271) ChildIndex: (28) Widget: (432919852) Text: () Model: (160763239)
29=Index: (271) ChildIndex: (29) Widget: (432919840) Text: () Model: (160763239)
30=Index: (271) ChildIndex: (30) Widget: (432919816) Text: () Model: (160763239)

[274]
0=Index: (274) ChildIndex: (0) Widget: (432919792) Text: () Model: (160763239)
1=Index: (274) ChildIndex: (1) Widget: (432919780) Text: () Model: (160763239)
2=Index: (274) ChildIndex: (2) Widget: (432919768) Text: () Model: (160763239)
3=Index: (274) ChildIndex: (3) Widget: (432919752) Text: () Model: (160763239)
4=Index: (274) ChildIndex: (4) Widget: (432919696) Text: () Model: (160763239)
5=Index: (274) ChildIndex: (5) Widget: (432919688) Text: () Model: (160763239)
6=Index: (274) ChildIndex: (6) Widget: (432919672) Text: () Model: (160763239)
7=Index: (274) ChildIndex: (7) Widget: (432919648) Text: () Model: (160763239)
8=Index: (274) ChildIndex: (8) Widget: (432919640) Text: () Model: (160763239)
9=Index: (274) ChildIndex: (9) Widget: (432919628) Text: () Model: (160763239)
10=Index: (274) ChildIndex: (10) Widget: (432919620) Text: (Quest Points: 0) Model: (160763239)
11=Index: (274) ChildIndex: (11) Widget: (432919600) Text: () Model: (160763239)
12=Index: (274) ChildIndex: (12) Widget: (432919584) Text: () Model: (160763239)
13=Index: (274) ChildIndex: (13) Widget: (432919528) Text: () Model: (160763239)
14=Index: (274) ChildIndex: (14) Widget: (432919516) Text: (Free Quests) Model: (160763239)
15=Index: (274) ChildIndex: (15) Widget: (432919504) Text: (Black Knights' Fortress) Model: (160763239)
16=Index: (274) ChildIndex: (16) Widget: (432919492) Text: (Cook's Assistant) Model: (160763239)
17=Index: (274) ChildIndex: (17) Widget: (432919464) Text: (Demon Slayer) Model: (160763239)
18=Index: (274) ChildIndex: (18) Widget: (432919452) Text: (Doric's Quest) Model: (160763239)
19=Index: (274) ChildIndex: (19) Widget: (432919440) Text: (Dragon Slayer) Model: (160763239)
20=Index: (274) ChildIndex: (20) Widget: (432919416) Text: (Ernest the Chicken) Model: (160763239)
21=Index: (274) ChildIndex: (21) Widget: (432919372) Text: (Goblin Diplomacy) Model: (160763239)
22=Index: (274) ChildIndex: (22) Widget: (432919360) Text: (Imp Catcher) Model: (160763239)
23=Index: (274) ChildIndex: (23) Widget: (432919336) Text: (The Knight's Sword) Model: (160763239)
24=Index: (274) ChildIndex: (24) Widget: (432919320) Text: (Pirate's Treasure) Model: (160763239)
25=Index: (274) ChildIndex: (25) Widget: (432919312) Text: (Prince Ali Rescue) Model: (160763239)
26=Index: (274) ChildIndex: (26) Widget: (432919284) Text: (The Restless Ghost) Model: (160763239)
27=Index: (274) ChildIndex: (27) Widget: (432919272) Text: (Romeo & Juliet) Model: (160763239)
28=Index: (274) ChildIndex: (28) Widget: (432919256) Text: (Rune Mysteries) Model: (160763239)
29=Index: (274) ChildIndex: (29) Widget: (432919216) Text: (Sheep Shearer) Model: (160763239)
30=Index: (274) ChildIndex: (30) Widget: (432919200) Text: (Shield of Arrav) Model: (160763239)
31=Index: (274) ChildIndex: (31) Widget: (432919176) Text: (Vampire Slayer) Model: (160763239)
32=Index: (274) ChildIndex: (32) Widget: (432919152) Text: (Witch's Potion) Model: (160763239)
33=Index: (274) ChildIndex: (33) Widget: (432919144) Text: (Members' Quests) Model: (160763239)
34=Index: (274) ChildIndex: (34) Widget: (432919128) Text: (Animal Magnetism) Model: (160763239)
35=Index: (274) ChildIndex: (35) Widget: (432919116) Text: (Between a Rock...) Model: (160763239)
36=Index: (274) ChildIndex: (36) Widget: (432919104) Text: (Big Chompy Bird Hunting) Model: (160763239)
37=Index: (274) ChildIndex: (37) Widget: (432919056) Text: (Biohazard) Model: (160763239)
38=Index: (274) ChildIndex: (38) Widget: (432919044) Text: (Cabin Fever) Model: (160763239)
39=Index: (274) ChildIndex: (39) Widget: (432919032) Text: (Clock Tower) Model: (160763239)
40=Index: (274) ChildIndex: (40) Widget: (432919020) Text: (Contact!) Model: (160763239)
41=Index: (274) ChildIndex: (41) Widget: (432919008) Text: (Zogre Flesh Eaters) Model: (160763239)
42=Index: (274) ChildIndex: (42) Widget: (432918992) Text: (Creature of Fenkenstrain) Model: (160763239)
43=Index: (274) ChildIndex: (43) Widget: (432918984) Text: (Darkness of Hallowvale) Model: (160763239)
44=Index: (274) ChildIndex: (44) Widget: (432918968) Text: (Death to the Dorgeshuun) Model: (160763239)
45=Index: (274) ChildIndex: (45) Widget: (432918960) Text: (Death Plateau) Model: (160763239)
46=Index: (274) ChildIndex: (46) Widget: (432918944) Text: (Desert Treasure) Model: (160763239)
47=Index: (274) ChildIndex: (47) Widget: (432918900) Text: (Devious Minds) Model: (160763239)
48=Index: (274) ChildIndex: (48) Widget: (432918888) Text: (The Digsite) Model: (160763239)
49=Index: (274) ChildIndex: (49) Widget: (432918876) Text: (Druidic Ritual) Model: (160763239)
50=Index: (274) ChildIndex: (50) Widget: (432918864) Text: (Dwarf Cannon) Model: (160763239)

[320]
0=Index: (320) ChildIndex: (0) Widget: (432918836) Text: () Model: (160763239)
1=Index: (320) ChildIndex: (1) Widget: (432918824) Text: () Model: (160763239)
2=Index: (320) ChildIndex: (2) Widget: (432918808) Text: () Model: (160763239)
3=Index: (320) ChildIndex: (3) Widget: (432918796) Text: () Model: (160763239)
4=Index: (320) ChildIndex: (4) Widget: (432918784) Text: () Model: (160763239)
5=Index: (320) ChildIndex: (5) Widget: (432918740) Text: () Model: (160763239)
6=Index: (320) ChildIndex: (6) Widget: (432918728) Text: () Model: (160763239)
7=Index: (320) ChildIndex: (7) Widget: (432918712) Text: () Model: (160763239)
8=Index: (320) ChildIndex: (8) Widget: (432918704) Text: () Model: (160763239)
9=Index: (320) ChildIndex: (9) Widget: (432918688) Text: () Model: (160763239)
10=Index: (320) ChildIndex: (10) Widget: (432918676) Text: () Model: (160763239)
11=Index: (320) ChildIndex: (11) Widget: (432918664) Text: () Model: (160763239)
12=Index: (320) ChildIndex: (12) Widget: (432918648) Text: () Model: (160763239)
13=Index: (320) ChildIndex: (13) Widget: (432918636) Text: () Model: (160763239)
14=Index: (320) ChildIndex: (14) Widget: (432918624) Text: () Model: (160763239)
15=Index: (320) ChildIndex: (15) Widget: (432918576) Text: () Model: (160763239)
16=Index: (320) ChildIndex: (16) Widget: (432918568) Text: () Model: (160763239)
17=Index: (320) ChildIndex: (17) Widget: (432918552) Text: () Model: (160763239)
18=Index: (320) ChildIndex: (18) Widget: (432918536) Text: () Model: (160763239)
19=Index: (320) ChildIndex: (19) Widget: (432918528) Text: () Model: (160763239)
20=Index: (320) ChildIndex: (20) Widget: (432918512) Text: () Model: (160763239)
21=Index: (320) ChildIndex: (21) Widget: (432918500) Text: () Model: (160763239)
22=Index: (320) ChildIndex: (22) Widget: (432918492) Text: () Model: (160763239)
23=Index: (320) ChildIndex: (23) Widget: (432918484) Text: () Model: (160763239)
24=Index: (320) ChildIndex: (24) Widget: (432918476) Text: () Model: (160763239)
25=Index: (320) ChildIndex: (25) Widget: (432918468) Text: () Model: (160763239)
26=Index: (320) ChildIndex: (26) Widget: (432918460) Text: () Model: (160763239)
27=Index: (320) ChildIndex: (27) Widget: (432918408) Text: (Total level:<br>977) Model: (160763239)
28=Index: (320) ChildIndex: (28) Widget: (432918396) Text: () Model: (160763239)

[387]
0=Index: (387) ChildIndex: (0) Widget: (432918200) Text: () Model: (160763239)
1=Index: (387) ChildIndex: (1) Widget: (432918176) Text: () Model: (160763239)
2=Index: (387) ChildIndex: (2) Widget: (432918164) Text: () Model: (160763239)
3=Index: (387) ChildIndex: (3) Widget: (432918136) Text: () Model: (160763239)
4=Index: (387) ChildIndex: (4) Widget: (432918096) Text: () Model: (160763239)
5=Index: (387) ChildIndex: (5) Widget: (432918084) Text: () Model: (160763239)
6=Index: (387) ChildIndex: (6) Widget: (432918068) Text: () Model: (160763239)
7=Index: (387) ChildIndex: (7) Widget: (432918060) Text: () Model: (160763239)
8=Index: (387) ChildIndex: (8) Widget: (432918040) Text: () Model: (160763239)
9=Index: (387) ChildIndex: (9) Widget: (432918032) Text: () Model: (160763239)
10=Index: (387) ChildIndex: (10) Widget: (432918016) Text: () Model: (160763239)
11=Index: (387) ChildIndex: (11) Widget: (432918004) Text: () Model: (160763239)
12=Index: (387) ChildIndex: (12) Widget: (432917996) Text: () Model: (160763239)
13=Index: (387) ChildIndex: (13) Widget: (432917988) Text: () Model: (160763239)
14=Index: (387) ChildIndex: (14) Widget: (432917940) Text: () Model: (160763239)
15=Index: (387) ChildIndex: (15) Widget: (432917928) Text: () Model: (160763239)
16=Index: (387) ChildIndex: (16) Widget: (432917912) Text: () Model: (160763239)
17=Index: (387) ChildIndex: (17) Widget: (432917904) Text: () Model: (160763239)
18=Index: (387) ChildIndex: (18) Widget: (432917884) Text: () Model: (160763239)
19=Index: (387) ChildIndex: (19) Widget: (432917876) Text: () Model: (160763239)
20=Index: (387) ChildIndex: (20) Widget: (432917860) Text: () Model: (160763239)

[464]
0=Index: (464) ChildIndex: (0) Widget: (432917680) Text: () Model: (160763239)
1=Index: (464) ChildIndex: (1) Widget: (432917672) Text: () Model: (160763239)
2=Index: (464) ChildIndex: (2) Widget: (432917664) Text: () Model: (160763239)
3=Index: (464) ChildIndex: (3) Widget: (432917656) Text: () Model: (160763239)
4=Index: (464) ChildIndex: (4) Widget: (432917604) Text: () Model: (160763239)
5=Index: (464) ChildIndex: (5) Widget: (432917596) Text: () Model: (160763239)
6=Index: (464) ChildIndex: (6) Widget: (432917568) Text: () Model: (160763239)
7=Index: (464) ChildIndex: (7) Widget: (432917556) Text: () Model: (160763239)
8=Index: (464) ChildIndex: (8) Widget: (432917540) Text: () Model: (160763239)
9=Index: (464) ChildIndex: (9) Widget: (432917528) Text: () Model: (160763239)
10=Index: (464) ChildIndex: (10) Widget: (432917504) Text: () Model: (160763239)
11=Index: (464) ChildIndex: (11) Widget: (432917456) Text: () Model: (160763239)
12=Index: (464) ChildIndex: (12) Widget: (432917444) Text: () Model: (160763239)
13=Index: (464) ChildIndex: (13) Widget: (432917420) Text: () Model: (160763239)
14=Index: (464) ChildIndex: (14) Widget: (432917408) Text: () Model: (160763239)
15=Index: (464) ChildIndex: (15) Widget: (432917384) Text: () Model: (160763239)
16=Index: (464) ChildIndex: (16) Widget: (432917360) Text: () Model: (160763239)
17=Index: (464) ChildIndex: (17) Widget: (432917348) Text: () Model: (160763239)
18=Index: (464) ChildIndex: (18) Widget: (432917336) Text: () Model: (160763239)
19=Index: (464) ChildIndex: (19) Widget: (432917292) Text: () Model: (160763239)
20=Index: (464) ChildIndex: (20) Widget: (432917276) Text: () Model: (160763239)
21=Index: (464) ChildIndex: (21) Widget: (432917268) Text: () Model: (160763239)
22=Index: (464) ChildIndex: (22) Widget: (432917252) Text: () Model: (160763239)
23=Index: (464) ChildIndex: (23) Widget: (432917236) Text: () Model: (-749994522)
24=Index: (464) ChildIndex: (24) Widget: (432917224) Text: () Model: (-910757761)
25=Index: (464) ChildIndex: (25) Widget: (432917216) Text: () Model: (-106941566)
26=Index: (464) ChildIndex: (26) Widget: (432917188) Text: () Model: (-267704805)
27=Index: (464) ChildIndex: (27) Widget: (432917136) Text: () Model: (-428468044)
28=Index: (464) ChildIndex: (28) Widget: (432917120) Text: () Model: (-589231283)
29=Index: (464) ChildIndex: (29) Widget: (432917096) Text: () Model: (-1232284239)
30=Index: (464) ChildIndex: (30) Widget: (432917084) Text: () Model: (-1393047478)
31=Index: (464) ChildIndex: (31) Widget: (432917056) Text: () Model: (-1553810717)
32=Index: (464) ChildIndex: (32) Widget: (432917044) Text: () Model: (-1714573956)
33=Index: (464) ChildIndex: (33) Widget: (432917032) Text: () Model: (-1875337195)
34=Index: (464) ChildIndex: (34) Widget: (432917016) Text: () Model: (-2036100434)
35=Index: (464) ChildIndex: (35) Widget: (432916976) Text: () Model: (-1071521000)
36=Index: (464) ChildIndex: (36) Widget: (432916952) Text: () Model: (2098103623)
37=Index: (464) ChildIndex: (37) Widget: (432916936) Text: () Model: (1937340384)
38=Index: (464) ChildIndex: (38) Widget: (432916928) Text: (Yes) Model: (160763239)
39=Index: (464) ChildIndex: (39) Widget: (432916904) Text: (No) Model: (160763239)
40=Index: (464) ChildIndex: (40) Widget: (432916880) Text: (Bow) Model: (160763239)
41=Index: (464) ChildIndex: (41) Widget: (432916872) Text: (Angry) Model: (160763239)
42=Index: (464) ChildIndex: (42) Widget: (432916860) Text: (Think) Model: (160763239)
43=Index: (464) ChildIndex: (43) Widget: (432916804) Text: (Wave) Model: (160763239)
44=Index: (464) ChildIndex: (44) Widget: (432916792) Text: (Shrug) Model: (160763239)
45=Index: (464) ChildIndex: (45) Widget: (432916768) Text: (Cheer) Model: (160763239)
46=Index: (464) ChildIndex: (46) Widget: (432916752) Text: (Beckon) Model: (160763239)
47=Index: (464) ChildIndex: (47) Widget: (432916728) Text: (Laugh) Model: (160763239)
48=Index: (464) ChildIndex: (48) Widget: (432916720) Text: (Jump for Joy) Model: (160763239)
49=Index: (464) ChildIndex: (49) Widget: (432916656) Text: (Yawn) Model: (160763239)
50=Index: (464) ChildIndex: (50) Widget: (432916648) Text: (Dance) Model: (160763239)

kingarabian

2014-06-22 17:09:12

Is R_GetTileGlobal broken?

snsgold

2014-06-23 10:07:31

old school rs was update

Krazy_Meerkat

2014-06-23 12:31:32

<3 ineedbot
Thanks for that test script :) I usually just do some writeln edits to an existing script and test a few functions but it's becoming very monotonous to keep doing that, it was on my list to make something like this and I'm very grateful for saving me that trouble.

@Cheddy I checked your updater and it was broken.. Your pastebin also had old hooks..

Edit: There was another update about 10 mins ago, meaning I need to run the updater again.. I'll take another look in a couple of hours just in case they update anything else.

Dervish

2014-06-23 14:47:57

How does one get the updated hooks after each Game Update ?

Krazy_Meerkat

2014-06-24 03:04:20

It's been mentioned a few times in this thread Dervish.

New Hooks, few extra updates:
Converted MakeCompass to R_MakeCompass using reflection.
R_PerfectPath random support re-added, function moved to AntiRandoms.Simba to avoid conflicts.
R_InteractTile modified, works instantly like R_MouseTile now.
R_InteractTileWait added to support timers.

Uploading now, please give it about 5 mins for the GC to update itself.
Edit: As usual, report anything that isn't working.. I did do some extra testing this time so everything should be in order.

Solar

2014-06-24 04:46:57

Great work on updating. Don't think it doesn't go unrecognised and unappreciated.

Spoola

2014-06-24 13:21:59

Thank you so much Krazy_Meerkat! You're the greatest

Solar

2014-06-26 03:46:36

Think R_ChooseOption might need checking. elfyyy's PC script right clicks but then doesn't select an option.

Spoola

2014-06-26 12:49:23

From: Solar
Think R_ChooseOption might need checking. elfyyy's PC script right clicks but then doesn't select an option.


It did this as well with the VarrockEastMinerBanker script, would right click the bank then bug out.

Haxz

2014-06-26 14:41:17

Sorry if this has been answered, is there a way to manually update the reflection when a OSR update occurs?

Harrier

2014-06-26 17:27:01

From: Haxz
Sorry if this has been answered, is there a way to manually update the reflection when a OSR update occurs?

Not without making a updater. If you are interested in making one look on javahacking.

Awkwardsaw

2014-06-26 17:58:20

From: arm2
Not without making a updater. If you are interested in making one look on javahacking.


I've really been thinking about doing this. The lack of useful hooks makes reflection really frustrating :(

masterBB

2014-06-26 18:30:16

From: Awkwardsaw
I've really been thinking about doing this. The lack of useful hooks makes reflection really frustrating :(


The problem with writing an hook updater though is the time it takes to create and update it. Is it worth the time?

Krazy_Meerkat

2014-06-26 20:19:36

MasterBB is wise.. Mostly people will just write a java bot if they write an updater, because it's easier and more logical to use the same language/resources as the updater. They can also try to make a profit by selling subscriptions

Sorry about the R_Chooseoption problem, I thought this was already resolved.. Let me see what I can find.

Awkwardsaw

2014-06-26 20:43:42

From: masterBB
The problem with writing an hook updater though is the time it takes to create and update it. Is it worth the time?


I'm not sure to be honest. However it gives me a chance to learn/ contribute

Krazy_Meerkat

2014-06-26 22:52:00

New hooks are out, we're at rev 52 now. I really hope they leave the client alone for a few weeks now :/
Known bugs: Npc level multi is wrong (npc level hook isn't used for anything other than storing in the record). NpcIndex hook is missing, localindex array method will be used by default.

Tested:
R_Chooseoption
R_IsUpText
R_InteractTile
R_OpenDoor
R_GetAllNpcs

Report any broken hooks and I'll fix when I can.

Tonekray

2014-06-27 01:24:54

R_GetAllNPCs returns a length 0 array time to time. From what it looks like, the first time it is called it works, but the second time it doesn't, and then the third works. It looks like it flips like that.

I assume it's because of the switch to LocalIndex? I don't have the reflection technical know-how to fix, but I'm currently dabbling; I might be able to help.

EDIT:

Looks like for the first call, a -1 gets into the result for R_GetIndices() for this part of the code:

for i:=0 to 99 do
begin
Result[i] := SmartGetFieldArrayint(SmartCurrentTarget, 0, client_npcIndices, i);
end;
Result:= RemoveDeadTIA(Result);

Resulting in LocalIndex not being used until the second call, when the -1 doesn't appear anymore. I guess catching the -1 would be a good call? I don't know if that ever appears when NPCIndex is working properly, so it would be a quick bugfix.

Replacing the above with this fixes the issue.

for i:=0 to 99 do
begin
Result[i] := SmartGetFieldArrayint(SmartCurrentTarget, 0, client_npcIndices, i);
if result[ i ] = -1 then // Hack-fix for 6/26/14 OSRS update.
result[ i ] := 0; // To be caught under RemoveDeadTIA.
end;
Result:= RemoveDeadTIA(Result);

Krazy_Meerkat

2014-06-27 07:01:41

From: Tonekray
R_GetAllNPCs returns a length 0 array time to time. From what it looks like, the first time it is called it works, but the second time it doesn't, and then the third works. It looks like it flips like that.

I assume it's because of the switch to LocalIndex? I don't have the reflection technical know-how to fix, but I'm currently dabbling; I might be able to help.

EDIT:

Looks like for the first call, a -1 gets into the result for R_GetIndices() for this part of the code:

for i:=0 to 99 do
begin
Result[i] := SmartGetFieldArrayint(SmartCurrentTarget, 0, client_npcIndices, i);
end;
Result:= RemoveDeadTIA(Result);

Resulting in LocalIndex not being used until the second call, when the -1 doesn't appear anymore. I guess catching the -1 would be a good call? I don't know if that ever appears when NPCIndex is working properly, so it would be a quick bugfix.

Replacing the above with this fixes the issue.

for i:=0 to 99 do
begin
Result[i] := SmartGetFieldArrayint(SmartCurrentTarget, 0, client_npcIndices, i);
if result[ i ] = -1 then // Hack-fix for 6/26/14 OSRS update.
result[ i ] := 0; // To be caught under RemoveDeadTIA.
end;
Result:= RemoveDeadTIA(Result);


The LocalIndex array is supposed to have that functionality.. This is the line of code is where the LocalIndex will be used when the result's length is 0:

for i:=0 to 99 do
begin
Result[i] := SmartGetFieldArrayint(SmartCurrentTarget, 0, client_npcIndices, i);
end;
Result:= RemoveDeadTIA(Result);
if (length(Result) < 1) then
begin //NpcIndex hook is broken, use LocalIndex method
I'm having a look at it now to see why it returns an empty array every 2nd use..
Edit: Ok it seems to be RemoveDeadTIA which wasn't removing values less than 1, it was only removing 0's.. I'm committing the fix now.

Thanks very much, Tonekray for pointing this issue out and providing a fix for others :)

Solar

2014-06-27 07:42:44

@Krazy_Meerkat; Not sure if it helps or not, but I am getting fields not found: ch, e, and j. Think the ch one is nothing to worry about, but the other two might need checking.

Krazy_Meerkat

2014-06-27 08:31:04

Thanks solar, but it's not uncommon to have SMART complaining about fields not found :) Just let me know if a function isn't working correctly..
Latest Commit:
LocalIndex array fixed, was returning an empty array every 2nd call.
Added Widgets.simba to store a few functions by Frement (just something to use for now)
Added ID_Display.simba (by ineedbot) to tools.

I could've added more from F_Randoms, but I'm not sure how much longer we'll be using PascalScript and I didn't want to add too much b/c some of it uses hardcoded hooks which aren't in my updater or on JH..
Note: If you also use F_Randoms, you will get a duplicate identifier error with some of the functions, just open up Widgets.simba and take all of those functions out of F_Randoms.simba

Solar

2014-06-27 12:37:14

Still seems to be some issues and unfortunately I don't know which hooks are broken. I'm sorry about that.
Just using the PC script to see if it runs ok and going from that.

When I get to a portal, the script thinks I am "attacking monsters". Other times, I will be "running to first portal" and trying to click off the island on the minimap.

Unfold

2014-06-27 17:23:53

R_GetObjectsDistance isn't work :/

corangerx111

2014-06-27 23:20:14

I'm having trouble with a lot of the functions beginning with the one, "R_GetWidget," and multiple ones under that. The full error is "[Error] C:\Simba\Includes\F_AntiRandoms.simba(120:10): Duplicate identifier 'R_GETWIDGET' at line 120"

Next after that is "R_GetWidgetText," full error being "[Error] C:\Simba\Includes\F_AntiRandoms.simba(130:10): Duplicate identifier 'R_GETWIDGETTEXT' at line 130"

I'll list one more - "TInventoryItem," full error being "[Error] C:\Simba\Includes\F_AntiRandoms.simba(855:3): Duplicate identifier 'TInventoryItem' at line 855"

Basically, all the errors I'm having deal with duplicate identifiers.

Frement

2014-06-27 23:22:15

From: corangerx111
I'm having trouble with a lot of the functions beginning with the one, "R_GetWidget," and multiple ones under that. The full error is "[Error] C:\Simba\Includes\F_AntiRandoms.simba(120:10): Duplicate identifier 'R_GETWIDGET' at line 120"

Next after that is "R_GetWidgetText," full error being "[Error] C:\Simba\Includes\F_AntiRandoms.simba(130:10): Duplicate identifier 'R_GETWIDGETTEXT' at line 130"

I'll list one more - "TInventoryItem," full error being "[Error] C:\Simba\Includes\F_AntiRandoms.simba(855:3): Duplicate identifier 'TInventoryItem' at line 855"

Basically, all the errors I'm having deal with duplicate identifiers.


From: Krazy_Meerkat
Note: If you also use F_Randoms, you will get a duplicate identifier error with some of the functions, just open up Widgets.simba and take all of those functions out of F_Randoms.simba


If you would have read a bit above, you would have seen the instructions.

Krazy_Meerkat

2014-06-28 01:41:14

Well R_GetObjectsDistance was working for game-objects, but I've fixed the other object hooks (mistake with the hook naming for wall/floor/boundary)..

Latest update:
Replaced BoundaryObject/Wall/Floor Main class hooks with the Tile_Boundary/Wall/Floor Hooks (Array of Boundary/Wall/Floor)
Fixed NpcLevelDef Multiplier.
All Object Functions should be working again.

Stick1234

2014-06-28 12:14:03

[Error] C:\Users\Mike\Downloads\F_AntiRandoms.simba(120:10): Duplicate identifier 'R_GETWIDGET' at line 120

Note: If you also use F_Randoms, you will get a duplicate identifier error with some of the functions, just open up Widgets.simba and take all of those functions out of F_Randoms.simba

Instructions unclear, burnt house down.

No seriously, I took the duplicate functions from widgets out of F antirandoms, but I must have taken other vital functions with it, because while have got my script running (Instead of giving me an error) it seems to miss random events that it used to clear flawlessly. I would appreciate it if somebody shed more light onto what it is that I'm supposed to change in these two scripts, because I must not have done a good job.

Awkwardsaw

2014-06-28 13:35:36

From: Krazy_Meerkat
Well R_GetObjectsDistance was working for game-objects, but I've fixed the other object hooks (mistake with the hook naming for wall/floor/boundary)..

Latest update:
Replaced BoundaryObject/Wall/Floor Main class hooks with the Tile_Boundary/Wall/Floor Hooks (Array of Boundary/Wall/Floor)
Fixed NpcLevelDef Multiplier.
All Object Functions should be working again.


Thanks for all the work :)

Unfold

2014-06-28 17:00:52

Is it currently possible for reflection to detect obstacles when walking a path?

Cheddy

2014-06-28 18:04:07

Derp yes. Google A-Star algorithm and input it into RS context.

New Hooks:

{ 207 Hooks Found By Cheddys Beautiful Updater }

const
ReflectionRevision = '52';


{* BoundaryObject - 9 Hooks *}
BoundaryObject = 'ch';
BoundaryObject_AlternativeOrientation = 'r';
BoundaryObject_AlternativeOrientation_Multiplier = -1409784601;
BoundaryObject_BackupRenderable = 'k';
BoundaryObject_Flags = 'n';
BoundaryObject_Flags_Multiplier = -811434849;
BoundaryObject_Hash = 'b';
BoundaryObject_Hash_Multiplier = -107201215;
BoundaryObject_Orientation = 'z';
BoundaryObject_Orientation_Multiplier = 89571079;
BoundaryObject_Plane = 'j';
BoundaryObject_Plane_Multiplier = -1895237785;
BoundaryObject_Renderable = 'e';
BoundaryObject_Get_X = 'y';
BoundaryObject_Get_X_Multiplier = 1920246735;
BoundaryObject_Get_Y = 'h';
BoundaryObject_Get_Y_Multiplier = 688028895;

{* Cache - 3 Hooks *}
Cache = 'fq';
Cache_CacheableNode = 'j';
Cache_HashTable = 'h';
Cache_Queue = 'r';

{* CacheableNode - 2 Hooks *}
CacheableNode = 'fe';
CacheableNode_Next = 'cd';
CacheableNode_Previous = 'ch';

{* Canvas - 1 Hooks *}
Canvas = 'ds';
Canvas_Component = 'j';

{* Actor - 18 Hooks *}
Actor = 'ag';
Actor_Animation = 'as';
Actor_Animation_Multiplier = 346868905;
Actor_CombatCycle = 'ay';
Actor_CombatCycle_Multiplier = -631709259;
Actor_Health = 'am';
Actor_Health_Multiplier = 1935778589;
Actor_HitCycles = 'aa';
Actor_HitDamages = 'ad';
Actor_HitTypes = 'at';
Actor_Interacting = 'au';
Actor_Interacting_Multiplier = 718341389;
Actor_MaxHealth = 'az';
Actor_MaxHealth_Multiplier = -1034371255;
Actor_Orientation = 'ba';
Actor_Orientation_Multiplier = -866281573;
Actor_ActiveText = 'ag';
Actor_PositionOffset = 'l';
Actor_PositionOffset_Multiplier = -862303680;
Actor_PathLength = 'bu';
Actor_PathLength_Multiplier = -1936525339;
Actor_PathTraversed = 'bc';
Actor_PathX = 'by';
Actor_PathY = 'bn';
Actor_LocalX = 'm';
Actor_LocalX_Multiplier = -1283739801;
Actor_LocalY = 'v';
Actor_LocalY_Multiplier = -1308082377;
Actor_isInSequence = 'p';

{* ClassData - 3 Hooks *}
ClassData = 'gx';
ClassData_Bytes = 'b';
ClassData_Fields = 'r';
ClassData_Methods = 'k';

{* Client - 48 Hooks *}
Client = 'client';
Client_BaseX = 'e.ce';
Client_BaseX_Multiplier = 640915389;
Client_BaseY = 'client.cu';
Client_BaseY_Multiplier = -2112689689;
Client_CameraPitch = 'cw.fi';
Client_CameraPitch_Multiplier = -1301731629;
Client_CameraX = 'dg.fs';
Client_CameraX_Multiplier = -541413329;
Client_CameraY = 'ca.ft';
Client_CameraY_Multiplier = 573960223;
Client_CameraYaw = 'n.fd';
Client_CameraYaw_Multiplier = -1715187017;
Client_CameraZ = 'g.fz';
Client_CameraZ_Multiplier = 1053895939;
Client_CollisionMaps = 'client.w';
Client_Levels = 'client.hn';
Client_Run_Energy = 'client.ji';
Client_Run_Energy_Multiplier = 1630043583;
Client_Experiences = 'client.ha';
Client_LoopCycle = 'client.d';
Client_LoopCycle_Multiplier = 1836037131;
Client_Login_State = 'client.t';
Client_Login_State_Multiplier = -1546172329;
Client_GroundItems = 'client.he';
Client_NPCs = 'client.bc';
Client_Player = 'client.hj';
Client_Players = 'client.gd';
Client_LoginState = 'al.ag';
Client_LoginState_Multiplier = -1436864683;
Client_CompassAngle = 'client.fx';
Client_CompassAngle_Multiplier = -1116838697;
Client_Map_Offset = 'client.df';
Client_Map_Offset_Multiplier = -986795503;
Client_Map_Scale = 'client.dj';
Client_Map_Scale_Multiplier = -1158978579;
Client_Real_Levels = 'client.hx';
Client_MenuActions = 'client.ip';
Client_MenuCount = 'client.ia';
Client_MenuCount_Multiplier = -1031396587;
Client_MenuHeight = 'fz.iv';
Client_MenuHeight_Multiplier = 408425289;
Client_MenuOptions = 'client.is';
Client_MenuWidth = 'af.ir';
Client_MenuWidth_Multiplier = -1702543585;
Client_MenuX = 'co.hs';
Client_MenuX_Multiplier = 1064434231;
Client_MenuY = 'av.hg';
Client_MenuY_Multiplier = 1472619701;
Client_ReflectionMouseX = 'dp.r';
Client_ReflectionMouseX_Multiplier = 2049707531;
Client_ReflectionMouseY = 'dp.e';
Client_ReflectionMouseY_Multiplier = 506036497;
Client_NPCIndices = 'client.bv';
Client_Password = 'al.aq';
Client_Plane = 'cb.hi';
Client_Plane_Multiplier = -1434897979;
Client_Settings = 'ea.z';
Client_Region = 'bb.dr';
Client_GroundHeights = 'e.j';
Client_GroundSettings = 'e.z';
Client_Username = 'al.aw';
Client_Weight = 'client.ja';
Client_Weight_Multiplier = 764550633;
Client_WidgetHeights = 'client.lm';
Client_WidgetNodeTable = 'client.jv';
Client_WidgetPositionsX = 'client.lc';
Client_WidgetPositionsY = 'client.ly';
Client_Widgets = 'em.j';
Client_WidgetSettings = 'ea.y';
Client_WidgetWidths = 'client.la';
Client_isMenuOpen = 'client.hb';

{* CollisionMap - 5 Hooks *}
CollisionMap = 'gn';
CollisionMap_Flags = 'ai';
CollisionMap_Height = 'aj';
CollisionMap_Height_Multiplier = -752880557;
CollisionMap_OffsetX = 'al';
CollisionMap_OffsetX_Multiplier = -2115422721;
CollisionMap_OffsetY = 'af';
CollisionMap_OffsetY_Multiplier = 428578929;
CollisionMap_Width = 'x';
CollisionMap_Width_Multiplier = -843855967;

{* FloorDecorationObject - 6 Hooks *}
FloorDecorationObject = 'co';
FloorDecorationObject_Flags = 'e';
FloorDecorationObject_Flags_Multiplier = 1674008273;
FloorDecorationObject_Hash = 'r';
FloorDecorationObject_Hash_Multiplier = -62010579;
FloorDecorationObject_Plane = 'j';
FloorDecorationObject_Plane_Multiplier = -2029055535;
FloorDecorationObject_Renderable = 'z';
FloorDecorationObject_Get_X = 'y';
FloorDecorationObject_Get_X_Multiplier = 1987689607;
FloorDecorationObject_Get_Y = 'h';
FloorDecorationObject_Get_Y_Multiplier = -344449963;

{* HashTable - 2 Hooks *}
HashTable = 'fo';
HashTable_Nodes = 'z';
HashTable_Size = 'j';
HashTable_Size_Multiplier = 1;

{* Item - 2 Hooks *}
Item = 'w';
Item_ID = 'j';
Item_ID_Multiplier = -1208979173;
Item_StackSize = 'z';
Item_StackSize_Multiplier = 460384345;

{* ItemDefinition - 9 Hooks *}
ItemDefinition = 'au';
ItemDefinition_GroundActions = 'l';
ItemDefinition_ModelColours = 'f';
ItemDefinition_ModelSizeX = 'ay';
ItemDefinition_ModelSizeX_Multiplier = 836976809;
ItemDefinition_ModelSizeY = 'am';
ItemDefinition_ModelSizeY_Multiplier = 1785188107;
ItemDefinition_ModelSizeZ = 'az';
ItemDefinition_ModelSizeZ_Multiplier = 1752736447;
ItemDefinition_Name = 'a';
ItemDefinition_NewModelColours = 'o';
ItemDefinition_InventoryActions = 'w';
ItemDefinition_isMembers = 'p';

{* ItemLayer - 8 Hooks *}
ItemLayer = 'ct';
ItemLayer_BottomRenderable = 'z';
ItemLayer_Height = 'b';
ItemLayer_Height_Multiplier = 1041807905;
ItemLayer_ID = 'k';
ItemLayer_ID_Multiplier = -851268015;
ItemLayer_MiddleRenderable = 'r';
ItemLayer_Plane = 'j';
ItemLayer_Plane_Multiplier = -1875046189;
ItemLayer_TopRenderable = 'e';
ItemLayer_X = 'y';
ItemLayer_X_Multiplier = -1476370387;
ItemLayer_Y = 'h';
ItemLayer_Y_Multiplier = 1489080997;

{* LinkedList - 2 Hooks *}
LinkedList = 'fa';
LinkedList_Head = 'j';
LinkedList_Tail = 'z';

{* Model - 11 Hooks *}
Model = 'cl';
Model_IndicesLength = 'n';
Model_IndicesLength_Multiplier = 1;
Model_IndicesX = 'a';
Model_IndicesY = 'q';
Model_IndicesZ = 'i';
Model_TexturedIndicesX = 'f';
Model_TexturedIndicesY = 'o';
Model_TexturedIndicesZ = 't';
Model_VerticesLength = 'r';
Model_VerticesLength_Multiplier = 1;
Model_VerticesX = 'e';
Model_VerticesY = 'k';
Model_VerticesZ = 'b';

{* ReflectionMouse - 0 Hooks *}
ReflectionMouse = 'dp';

{* Node - 3 Hooks *}
Node = 'gb';
Node_Next = 'ef';
Node_Previous = 'ej';
Node_UID = 'df';

{* NPC - 1 Hooks *}
NPC = 'ai';
NPC_Definition = 'j';

{* NPCDefinition - 4 Hooks *}
NPCDefinition = 'an';
NPCDefinition_Actions = 'v';
NPCDefinition_ID = 'r';
NPCDefinition_ID_Multiplier = -563242523;
NPCDefinition_Level = 'p';
NPCDefinition_Level_Multiplier = -545532659;
NPCDefinition_Name = 'e';

{* ObjectDefinition - 2 Hooks *}
ObjectDefinition = 'av';
ObjectDefinition_Actions = 'af';
ObjectDefinition_Name = 'i';

{* Player - 2 Hooks *}
Player = 'y';
Player_Model = 'f';
Player_Name = 'j';

{* Queue - 1 Hooks *}
Queue = 'fy';
Queue_Head = 'j';

{* Region - 2 Hooks *}
Region = 'cc';
Region_SceneObjects = 'n';
Region_SceneTiles = 'e';

{* Renderable - 1 Hooks *}
Renderable = 'bv';
Renderable_Height = 'cc';
Renderable_Height_Multiplier = -1694915813;

{* WorldObject - 12 Hooks *}
WorldObject = 'cz';
WorldObject_Flags = 'o';
WorldObject_Flags_Multiplier = 2142440351;
WorldObject_Hash = 'f';
WorldObject_Hash_Multiplier = -1448524597;
WorldObject_OffsetX = 'b';
WorldObject_OffsetX_Multiplier = -1773120761;
WorldObject_OffsetY = 'a';
WorldObject_OffsetY_Multiplier = 2041037581;
WorldObject_Orientation = 'e';
WorldObject_Orientation_Multiplier = -940565287;
WorldObject_Plane = 'j';
WorldObject_Plane_Multiplier = -1061781103;
WorldObject_RelativeX = 'k';
WorldObject_RelativeX_Multiplier = -1895767987;
WorldObject_RelativeY = 'n';
WorldObject_RelativeY_Multiplier = -246789625;
WorldObject_Renderable = 'z';
WorldObject_Get_X = 'h';
WorldObject_Get_X_Multiplier = -1521310019;
WorldObject_Get_Y = 'r';
WorldObject_Get_Y_Multiplier = 1563783995;
WorldObject_Height = 'y';
WorldObject_Height_Multiplier = -1852292595;

{* Stream - 2 Hooks *}
Stream = 'de';
Stream_Offset = 'z';
Stream_Offset_Multiplier = -326030699;
Stream_Payload = 'j';

{* StringStorage - 0 Hooks *}
StringStorage = 'eq';

{* SceneTile - 8 Hooks *}
SceneTile = 'ca';
SceneTile_BoundaryObject = 'k';
SceneTile_FloorDecorationObject = 'n';
SceneTile_ItemLayer = 'a';
SceneTile_Plane = 'z';
SceneTile_Plane_Multiplier = -811609317;
SceneTile_WorldObjects = 'i';
SceneTile_WallObject = 'b';
SceneTile_X = 'y';
SceneTile_X_Multiplier = -52645999;
SceneTile_Y = 'h';
SceneTile_Y_Multiplier = -1881681223;

{* WallObject - 11 Hooks *}
WallObject = 'cb';
WallObject_BackupRenderable = 'n';
WallObject_Flags = 'q';
WallObject_Flags_Multiplier = -2025564059;
WallObject_Height = 'r';
WallObject_Height_Multiplier = 314372237;
WallObject_Hash = 'a';
WallObject_Hash_Multiplier = -2032013177;
WallObject_Orientation = 'z';
WallObject_Orientation_Multiplier = -1962180045;
WallObject_Plane = 'j';
WallObject_Plane_Multiplier = 1322146753;
WallObject_RelativeX = 'e';
WallObject_RelativeX_Multiplier = -1087159463;
WallObject_RelativeY = 'k';
WallObject_RelativeY_Multiplier = 1972772869;
WallObject_Renderable = 'b';
WallObject_X = 'y';
WallObject_X_Multiplier = 1067256453;
WallObject_Y = 'h';
WallObject_Y_Multiplier = 918945475;

{* Widget - 28 Hooks *}
Widget = 'em';
Widget_Actions = 'bu';
Widget_ActionType = 'ar';
Widget_ActionType_Multiplier = -2114217435;
Widget_BorderThickness = 'at';
Widget_BorderThickness_Multiplier = 1508056151;
Widget_BoundsIndex = 'dp';
Widget_BoundsIndex_Multiplier = 1967481091;
Widget_Children = 'dm';
Widget_GetItems = 'dl';
Widget_Height = 'u';
Widget_Height_Multiplier = 1561540347;
Widget_GetID = 'f';
Widget_GetID_Multiplier = 1835939729;
Widget_Index = 'o';
Widget_Index_Multiplier = 944922441;
Widget_ItemID = 'dc';
Widget_ItemID_Multiplier = -1973759017;
Widget_ItemStack = 'da';
Widget_ItemStack_Multiplier = -1319886779;
Widget_Name = 'dd';
Widget_Opcodes = 'dk';
Widget_Parent = 'by';
Widget_ParentID = 'p';
Widget_ParentID_Multiplier = 1754166169;
Widget_RelativeX = 'y';
Widget_RelativeX_Multiplier = 2129553153;
Widget_RelativeY = 'm';
Widget_RelativeY_Multiplier = 786087633;
Widget_ScrollX = 'w';
Widget_ScrollX_Multiplier = -405712701;
Widget_ScrollY = 'x';
Widget_ScrollY_Multiplier = -1401783281;
Widget_SpritesX = 'bw';
Widget_SpritesY = 'bo';
Widget_GetStackSizes = 'dr';
Widget_Text = 'bf';
Widget_Type = 'at';
Widget_Type_Multiplier = 1508056151;
Widget_Width = 'v';
Widget_Width_Multiplier = 1887184409;
Widget_X = 'g';
Widget_X_Multiplier = 1271518477;
Widget_Y = 's';
Widget_Y_Multiplier = -1124070965;
Widget_isHidden = 'l';

{* WidgetNode - 1 Hooks *}
WidgetNode = 'h';
WidgetNode_ID = 'j';
WidgetNode_ID_Multiplier = 393106341;

My Java implementation of A-Star:

package com.cheddy.bot.api;

import java.awt.Point;
import java.util.ArrayList;
import java.util.Collections;



public class AStar {
static final int BLOCKED = 1;
static final int NON_WALKABLE = 256;
static final int BLOCKED_WEST = 128;
static final int BLOCKED_EAST = 8;
static final int BLOCKED_NORTH = 2;
static final int BLOCKED_SOUTH = 32;

public static Path generatePath(Client client, Point finish, boolean finishOnPoint) throws TileUnreacheableException{
return new Path(client, generateShortestPath(client, client.getMyPlayer().getPosition().get2DLocalCoord(), new Point(finish.x - client.getBaseX(), finish.y - client.getBaseY()) , finishOnPoint));
}


public static int getFlags(Client client, Point position){
int[][] map = client.getLocalFlags();
if(map == null){
return -1;
}
if(position.x > map.length|| position.y > map[0].length){
return -1;
}

return map[position.x][position.y];
}

private static Point[] generateShortestPath(Client client, Point start, Point finish, boolean finishOnPoint) throws TileUnreacheableException{

int[][] map = client.getLocalFlags();
if(map == null){
return null;
}
if(start.x > map.length || finish.x > map.length || start.y > map[0].length || finish.y > map[0].length || start.x < 0 || start.y < 0 || finish.x < 0 || finish.y < 0){
return null;
}
if(!isWalkable(map[finish.x][finish.y]) && finishOnPoint){
System.out.println("Destination is unwalkable");
return null;
}
ArrayList<AStarNode> openList = new ArrayList<AStarNode>();
ArrayList<AStarNode> closedList = new ArrayList<AStarNode>();
for(int i = 0; i < map.length; i++){
for(int i1 = 0; i1 < map.length; i1++){
if(!isWalkable(map[i][i1])){
AStarNode n = new AStarNode(null, i, i1, map[i][i1], finish, map, finishOnPoint);
closedList.add(n);
}
}
}
openList.add(new AStarNode(null, start.x, start.y, map[start.x][start.y], finish, map, finishOnPoint));
while (openList.size() > 0){
Collections.sort(openList);
AStarNode current = openList.get(0);
if(current.x == finish.x && current.y == finish.y
|| (current.x + 1 == finish.x && current.y == finish.y && !finishOnPoint)
|| (current.x - 1 == finish.x && current.y == finish.y && !finishOnPoint)
|| (current.x == finish.x && current.y + 1 == finish.y && !finishOnPoint)
|| (current.x == finish.x && current.y - 1 == finish.y && !finishOnPoint)){
return retracePath(client, current);
}
openList = current.getNeighbours(openList, closedList);
openList.remove(current);
closedList.add(current);
}
System.out.println("No Path!");
throw new TileUnreacheableException();
}

private static Point[] retracePath(Client client,AStarNode current) {
int baseX = client.getBaseX();
int baseY = client.getBaseY();
ArrayList<Point> points = new ArrayList<Point>();
points.add(new Point(current.x + baseX, current.y + baseY));
while(current.parent != null){
current = current.parent;
points.add(new Point(current.x + baseX, current.y + baseY));
}
Point[] p = new Point[points.size()];
p = points.toArray(p);
return p;
}


@SuppressWarnings("unused")
private static Point[] reverseArray(Point[] arr){
if(arr == null){
return null;
}
for(int i = 0; i < arr.length / 2; i++)
{
Point temp = arr[i];
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = temp;
}
return arr;
}


public static boolean isWalkable(int flag){
return (flag & (NON_WALKABLE)) == 0;
}

public static boolean isNotBlockedNorth(int flag, int flag2){
if(!isWalkable(flag2)){
return false;
}
return (flag & BLOCKED_NORTH) == 0;
}

public static boolean isNotBlockedWest(int flag, int flag2){
if(!isWalkable(flag2)){
return false;
}
return (flag & BLOCKED_WEST) == 0;
}

public static boolean isNotBlockedEast(int flag, int flag2){
if(!isWalkable(flag2)){
return false;
}
return (flag & BLOCKED_EAST) == 0;
}

public static boolean isNotBlockedSouth(int flag, int flag2){
if(!isWalkable(flag2)){
return false;
}
return (flag & BLOCKED_SOUTH) == 0;
}

public static boolean isNotBlockedSouthWest(int northeast, int northwest, int southeast, int southwest){
return ((southwest & (NON_WALKABLE | BLOCKED)) == 0) && ((northeast & (NON_WALKABLE | BLOCKED | BLOCKED_WEST)) == 0) && ((northeast & (NON_WALKABLE | BLOCKED | BLOCKED_SOUTH)) == 0) && ((northwest & (NON_WALKABLE | BLOCKED | BLOCKED_SOUTH)) == 0) && ((southeast & (NON_WALKABLE | BLOCKED | BLOCKED_WEST)) == 0);
}
public static boolean isNotBlockedSouthEast(int northwest, int northeast, int southwest, int southeast){
return ((southeast & (NON_WALKABLE | BLOCKED)) == 0) && ((northwest & (NON_WALKABLE | BLOCKED | BLOCKED_EAST)) == 0) && ((northwest & (NON_WALKABLE | BLOCKED | BLOCKED_SOUTH)) == 0) && ((northeast & (NON_WALKABLE | BLOCKED | BLOCKED_SOUTH)) == 0) && ((southwest & (NON_WALKABLE | BLOCKED | BLOCKED_EAST)) == 0);
}
public static boolean isNotBlockedNorthEast(int southwest, int southeast, int northwest, int northeast){
return ((northeast & (NON_WALKABLE | BLOCKED)) == 0) && ((southwest & (NON_WALKABLE | BLOCKED | BLOCKED_EAST)) == 0) && ((southwest & (NON_WALKABLE | BLOCKED | BLOCKED_NORTH)) == 0) && ((southeast & (NON_WALKABLE | BLOCKED | BLOCKED_NORTH)) == 0) && ((northwest & (NON_WALKABLE | BLOCKED | BLOCKED_EAST)) == 0);
}
public static boolean isNotBlockedNorthWest(int southeast, int southwest, int northeast, int northwest){
return ((northwest & (NON_WALKABLE | BLOCKED)) == 0) && ((southeast & (NON_WALKABLE | BLOCKED | BLOCKED_WEST)) == 0) && ((southeast & (NON_WALKABLE | BLOCKED | BLOCKED_NORTH)) == 0) && ((southwest & (NON_WALKABLE | BLOCKED | BLOCKED_NORTH)) == 0) && ((northeast & (NON_WALKABLE | BLOCKED | BLOCKED_WEST)) == 0);
}


}

And the A-Star node:

package com.cheddy.bot.api;

import java.awt.Point;
import java.util.ArrayList;



public class AStarNode implements Comparable<AStarNode>{

int f,g,h,x,y,flags;
AStarNode parent;
Point finish;
int[][] map;
boolean fop;

public AStarNode(AStarNode parent, int x, int y, int flags, Point finish, int[][] map, boolean finishOnPoint) {
this.parent = parent;
this.x = x;
this.y = y;
this.flags = flags;
if(parent != null){
if(parent.x != x && parent.y != y){
this.g = parent.g + 14;
}else{
this.g = parent.g + 10;
}

}else{
this.g = 0;
}
this.h = (Math.abs(x - finish.x) + Math.abs(y - finish.y));
this.f = h + g;
this.finish = finish;
this.map = map;
this.flags = map[x][y];
this.fop = finishOnPoint;
}

@Override
public int compareTo(AStarNode o) {
return this.f - o.f;
}

public final ArrayList<AStarNode> getNeighbours(final ArrayList<AStarNode> arrayOpen, final ArrayList<AStarNode> arrayClosed){
if(x - 1 > -1){
if(AStar.isNotBlockedWest(flags, map[x - 1][y])){
AStarNode n = new AStarNode(this, x - 1, y, map[x - 1][y], finish, map, fop);
if(listNotContain(n, arrayOpen, arrayClosed)){
arrayOpen.add(n);
}
}
}
if(x + 1 < map.length){
if(AStar.isNotBlockedEast(flags, map[x + 1][y])){
AStarNode n = new AStarNode(this, x + 1, y, map[x + 1][y], finish, map, fop);
if(listNotContain(n, arrayOpen, arrayClosed)){
arrayOpen.add(n);
}
}
}
if(y - 1 > -1){
if(AStar.isNotBlockedSouth(flags, map[x][y - 1])){
AStarNode n = new AStarNode(this, x, y - 1, map[x][y - 1], finish, map, fop);
if(listNotContain(n, arrayOpen, arrayClosed)){
arrayOpen.add(n);
}
}
}
if(y + 1 < map[x].length){
if(AStar.isNotBlockedNorth(flags, map[x][y + 1])){
AStarNode n = new AStarNode(this, x, y + 1, map[x][y + 1], finish, map, fop);
if(listNotContain(n, arrayOpen, arrayClosed)){
arrayOpen.add(n);
}
}

}
//////
if(x - 1 > -1 && y - 1 > -1){
AStarNode n;
if(AStar.isNotBlockedSouth(flags, map[x][y - 1]) && AStar.isNotBlockedSouth(map[x - 1][y], map[x - 1][y - 1]) && AStar.isNotBlockedWest(flags, map[x - 1][y]) && AStar.isNotBlockedWest(map[x][y - 1], map[x - 1][y - 1])){
n = new AStarNode(this, x - 1, y - 1, map[x - 1][y - 1], finish, map, fop);
if(listNotContain(n, arrayOpen, arrayClosed)){
arrayOpen.add(n);
}
}
}
if(x + 1 < map.length && y + 1 < map[x].length){
AStarNode n;
if(AStar.isNotBlockedNorth(flags, map[x][y + 1]) && AStar.isNotBlockedNorth(map[x + 1][y], map[x + 1][y + 1])
&& AStar.isNotBlockedEast(flags, map[x + 1][y]) && AStar.isNotBlockedEast(map[x][y + 1], map[x + 1][y + 1])){
n = new AStarNode(this, x + 1, y + 1, map[x + 1][y + 1], finish, map, fop);
if(listNotContain(n, arrayOpen, arrayClosed)){
arrayOpen.add(n);
}
}
}
if(y - 1 > -1 && x + 1 < map.length){
AStarNode n;
if(AStar.isNotBlockedSouth(flags, map[x][y - 1]) && AStar.isNotBlockedSouth(map[x + 1][y], map[x + 1][y - 1]) && AStar.isNotBlockedEast(flags, map[x + 1][y]) && AStar.isNotBlockedEast(map[x][y - 1], map[x + 1][y - 1])){
n = new AStarNode(this, x + 1, y - 1, map[x + 1][y - 1], finish, map, fop);
if(listNotContain(n, arrayOpen, arrayClosed)){
arrayOpen.add(n);
}
}
}
if(x - 1 > -1 && y + 1 < map[x].length){
AStarNode n;
if(AStar.isNotBlockedNorth(flags, map[x][y + 1]) && AStar.isNotBlockedNorth(map[x - 1][y], map[x - 1][y + 1]) && AStar.isNotBlockedWest(flags, map[x - 1][y]) && AStar.isNotBlockedWest(map[x][y + 1], map[x - 1][y + 1])){
n = new AStarNode(this, x - 1, y + 1, map[x - 1][y + 1], finish, map, fop);
if(listNotContain(n, arrayOpen, arrayClosed)){
arrayOpen.add(n);
}
}
}
return arrayOpen;
}

private static boolean listNotContain(AStarNode node, final ArrayList<AStarNode> arrayOpen, final ArrayList<AStarNode> arrayClosed){

for(AStarNode n : arrayOpen){
if(n.x == node.x && n.y == node.y){
return false;
}
}
for(AStarNode n : arrayClosed){
if(n.x == node.x && n.y == node.y){
return false;
}
}
return true;
}


}

Tickyy

2014-06-29 15:16:50

getting

Error: divide by Zero at line 165
The following DTMs were not freed: [SRL - Lamp bitmap, SRL - Book of Knowledge]
The following bitmaps were not freed: [SRL - Mod bitmap, SRL - Admin bitmap, SRL - Minimap Mask bitmap]


the line of the error


function R_GetMaxHealth: extended;
var
Me: Integer;
begin
Me := SmartGetFieldObject(SmartCurrentTarget, 0, client_player);
Result := (SmartGetFieldInt(SmartCurrentTarget, me, Actor_maxHealth) * Actor_maxHealth_Multiplier);
SmartFreeObject(SmartCurrentTarget, me);
end;

(*
R_GetHealthPercent
~~~~~~~~~~~

.. code-block:: pascal

function R_GetHealthPercent: integer;

Returns the Current health percentage of player.

.. note::

by elfyyy

*)
<------------------------- ERROR HERRE ------------------>
function R_GetHealthPercent: extended;
begin
if R_GetHealth = 0 then
begin
Result := 100;
exit;
end;
Result := Round((R_GetHealth / R_GetMaxHealth) * 100);
end;

piece of code where it happens:


Writeln(R_GetHealth);
if(R_GetHealthPercent < 75)then // probably from this
begin
if((R_InvCount) = 1)then
exit;
//GOBANK - - - --

Edit: appearently this error stops after the first combat happened with someone/something.

Haxz

2014-06-29 15:19:27

From: Tickyy
getting


the line of the error


function R_GetMaxHealth: extended;
var
Me: Integer;
begin
Me := SmartGetFieldObject(SmartCurrentTarget, 0, client_player);
Result := (SmartGetFieldInt(SmartCurrentTarget, me, Actor_maxHealth) * Actor_maxHealth_Multiplier);
SmartFreeObject(SmartCurrentTarget, me);
end;

(*
R_GetHealthPercent
~~~~~~~~~~~

.. code-block:: pascal

function R_GetHealthPercent: integer;

Returns the Current health percentage of player.

.. note::

by elfyyy

*)
<------------------------- ERROR HERRE ------------------>
function R_GetHealthPercent: extended;
begin
if R_GetHealth = 0 then
begin
Result := 100;
exit;
end;
Result := Round((R_GetHealth / R_GetMaxHealth) * 100);
end;

piece of code where it happens:


Writeln(R_GetHealth);
if(R_GetHealthPercent < 75)then
begin
if((R_InvCount) = 1)then
exit;
//GOBANK - - - --


I had the same error when I used GetHealthPercent, so I changed using GetHealth instead.

Krazy_Meerkat

2014-06-29 22:02:12

You could probably check gameobjects and wall/boundary objects for some simple obstacle detection..

Thanks to everyone for supporting Reflection :) We hope you are all having fun!
Great work reporting issues, We'll do our best to fix everything in a timely fashion.

The solvers in F_Randoms rely on 2 custom hooks which have been written into the script (so they are probably outdated).. These hooks are hard to add to the updater b/c I need to know what they were for multiple revisions and they're not listed at JH. I also wanted to see if we could use existing hooks for some kinda unique count on a character model (I saw a java bot only counting the X verticies to do this)

Update:
Modified R_GetMaxHealth to use the skill array (max_health hook might be obsolete b/c it was correct). Works correctly.
Added an extra failsafe to R_GetHealthPercent anyway..
New function R_RotateCameraToTile(Tile: Tpoint): Boolean;

Haxz

2014-06-30 01:16:40

From: Krazy_Meerkat
You could probably check gameobjects and wall/boundary objects for some simple obstacle detection..

Thanks to everyone for supporting Reflection :) We hope you are all having fun!
Great work reporting issues, We'll do our best to fix everything in a timely fashion.

The solvers in F_Randoms rely on 2 custom hooks which have been written into the script (so they are probably outdated).. These hooks are hard to add to the updater b/c I need to know what they were for multiple revisions and they're not listed at JH. I also wanted to see if we could use existing hooks for some kinda unique count on a character model (I saw a java bot only counting the X verticies to do this)

Update:
Modified R_GetMaxHealth to use the skill array (max_health hook might be obsolete b/c it was correct). Works correctly.
Added an extra failsafe to R_GetHealthPercent anyway..
New function R_RotateCameraToTile(Tile: Tpoint): Boolean;


A very big THANK YOU to all the reflection devs. Script couldn't run so well without you guys.

Frement

2014-06-30 01:32:20

From: Krazy_Meerkat
I also wanted to see if we could use existing hooks for some kinda unique count on a character model (I saw a java bot only counting the X verticies to do this)


I wrote that kind of functionality for, I think it was @Tickyy; maybe he could share it since I didn't save it.

Tickyy

2014-06-30 05:22:58

From: Frement
I wrote that kind of functionality for, I think it was @Tickyy; maybe he could share it since I didn't save it.


What exactly are we talking about here "unique count on a character" ???

Solar

2014-06-30 05:24:56

Something still isn't right with the hooks. How can I find which is I being used and wrong?

Krazy_Meerkat

2014-06-30 09:22:48

From: Tickyy
What exactly are we talking about here "unique count on a character" ???


A static number relative to the model which can be used to distinguish one npc from another.

Tickyy

2014-06-30 09:42:00

From: Krazy_Meerkat
A static number relative to the model which can be used to distinguish one npc from another.


Well then @Frement is wrong i wasn't that person he thought he talked to, we actually did talk a little in irc, but not about npc's… at least that is what i remember.

Edit: well describe the problem more in detail and maybe, we can work on it together.

Cov

2014-06-30 11:42:34

Last bot I worked on we created a model checksum that you could find any in game entity using instead of it's id. It worked something along the lines of: for every vertices add the x, y and z together. Then for each of the summations add the previous one with a few bitwise operators. Then turn the final number to a hex string. If I can find the code we used I'll post it.

Edit:
private void calculateChecksum() {
int[] vertices = new int[trianglesX.length];
for (int i = 0; i < trianglesX.length; i++) {
vertices[i] = trianglesX[i] + trianglesZ[i] + trianglesY[i];
}

if (vertices.length != 0) {
long sum = vertices[0];
long tmp;
for (int i = 1; i < trianglesX.length; i++) {
tmp = vertices[i];
tmp = (sum >> 29) + tmp;
tmp = (sum >> 17) + tmp;
sum = (sum << 3) ^ tmp;
}
checksum = sum;
}
}
trianglesX, trianglesY, trianglesZ were badly named fields containing the vertices. I can't guarantee how persistant this will be across different client instances but it seemed to work in testing.

ineedbot

2014-06-30 20:17:37

Loving the new angle functions like R_RotateCameraToTile and R_MakeCompass, but is it possible to have the srl function SetAngle(); into reflection, it can really speed up things as the SetAngle(0); function just holds down the the up key for 2.5 seconds.

Heres a nice function I made
function R_TryMakeTileOnMS(tile:TPoint;time:integer;reset:boolean):boolean;
var FailSafeTime : integer;
ResetAngle, ResetHeight : extended;
begin
if(reset)then begin
ResetAngle := R_GetMinimapAngleDeg;
ResetHeight := R_GetCameraZ;
end;

markTime(FailSafeTime);
while((TimeFromMark(FailSafeTime) < time) and (not PointInBox(R_TileToMS(tile), MSBox))) do begin
R_RotateCameraToTile(tile);
if(not PointInBox(R_TileToMS(tile), MSBox)) then begin
keyDown(VK_Down);
sleep(100+random(50));
keyUp(VK_Down);
end;
end;

if(PointInBox(R_TileToMS(tile), MSBox))then begin
Result := true;
end else begin
Result := false;
end;

if(reset)then begin
R_MakeCompass(ResetAngle);
markTime(FailSafeTime);
while((TimeFromMark(FailSafeTime) < time) and (abs(R_GetCameraZ - ResetHeight) > 100))do begin
keyDown(VK_Up);
sleep(100+random(50));
keyUp(VK_Up);
end;
end;
end;

It'll try and make the tile appear on the mainscreen. It'll return true if it found the tile. You can also reset your compass angle and height.

Brandon

2014-06-30 20:23:09

From: Cov
Last bot I worked on we created a model checksum that you could find any in game entity using instead of it's id. It worked something along the lines of: for every vertices add the x, y and z together. Then for each of the summations add the previous one with a few bitwise operators. Then turn the final number to a hex string. If I can find the code we used I'll post it.

trianglesX, trianglesY, trianglesZ were badly named fields containing the vertices. I can't guarantee how persistant this will be across different client instances but it seemed to work in testing.


https://github.com/Brandon-T/GLX/blob/master/OpenGL32/src/Hooks/Math.cpp#L251

Same algo?

Not sure if that algo will be ideal in Simba though. A model can have tons of vertices and the amount of calls you might have to make to get them all could be a lot to ask SMART for?

Krazy_Meerkat

2014-07-01 02:19:37

Frement and I tried to get some npc model info from smart yesterday and it's not looking good.. Frement found that, for the npcs, their model is returned from a method using the Index/NpcID as arguments.. So b/c they use a method and not a variable, we don't have access to it :(
That being said.. There are TransformIds which we can access.. I'll try and add some new hooks to the updater later on today (and update the broken ones).. It can be a lengthy process..
From: Cov
Last bot I worked on we created a model checksum that you could find any in game entity using instead of it's id. It worked something along the lines of: for every vertices add the x, y and z together. Then for each of the summations add the previous one with a few bitwise operators. Then turn the final number to a hex string. If I can find the code we used I'll post it.

Edit:
private void calculateChecksum() {
int[] vertices = new int[trianglesX.length];
for (int i = 0; i < trianglesX.length; i++) {
vertices[i] = trianglesX[i] + trianglesZ[i] + trianglesY[i];
}

if (vertices.length != 0) {
long sum = vertices[0];
long tmp;
for (int i = 1; i < trianglesX.length; i++) {
tmp = vertices[i];
tmp = (sum >> 29) + tmp;
tmp = (sum >> 17) + tmp;
sum = (sum << 3) ^ tmp;
}
checksum = sum;
}
}
trianglesX, trianglesY, trianglesZ were badly named fields containing the vertices. I can't guarantee how persistant this will be across different client instances but it seemed to work in testing.


Welcome Cov and thanks :) Are you the same Cov from JH?

Cov

2014-07-01 03:55:36

From: Brandon

Same algo?

Not sure if that algo will be ideal in Simba though. A model can have tons of vertices and the amount of calls you might have to make to get them all could be a lot to ask SMART for?


Aye looks to be the same, I think @_Rick stuck it in our model code so would have to ask him where he got it from. On the lower definition models of osrs I don't think it would be all that much work, with 5-6 npc's on screen at the same time it wasn't doing all that much work and you only really have to call it once per model. It was the centroid and concave hull stuff that we had for the models that was probably a tad strenuous for a java based bot.

From: Krazy_Meerkat
Frement and I tried to get some npc model info from smart yesterday and it's not looking good.. Frement found that, for the npcs, their model is returned from a method using the Index/NpcID as arguments.. So b/c they use a method and not a variable, we don't have access to it :(
That being said.. There are TransformIds which we can access.. I'll try and add some new hooks to the updater later on today (and update the broken ones).. It can be a lengthy process..


Welcome Cov and thanks :) Are you the same Cov from JH?


Thanks and yeh I'm the same Cov from JH.

I've not really delved into the source all that much, but surely it's not too hard to invoke a method using reflection. You should be able to handle the model object then?

ibby93

2014-07-01 19:46:43

Every time I try to run a script that uses reflections, I get the following error:

Exception in Script: Operator expected at line 394, column 26 in file "C:\Simba\Includes\SRL-OSR\SRL\Reflection\Core\Tiles.simba"

Krazy_Meerkat

2014-07-01 22:23:07

From: ibby93
Every time I try to run a script that uses reflections, I get the following error:


You will have to re-download the include from here: https://code.google.com/p/osrreflection/source/browse/ if you're having this problem.. Just fixed the missing operators although not too sure why only you had this problem with R_InPolygon..

Haxz

2014-07-01 22:45:40

Does anyone have problems with R_Walkpath when you start it in the middle of the path? Sometimes it will walk towards the opposite direction of the destination first, and sometimes it couldn't find path.

Cov

2014-07-02 03:52:48

From: Brandon
Same algo?

Not sure if that algo will be ideal in Simba though. A model can have tons of vertices and the amount of calls you might have to make to get them all could be a lot to ask SMART for?


Aye seems to be the same algo, I'd have to ask _Rick where he got it from though as he was the one that put it in. I think with osrs it would be fine because the models don't have many faces/vertices and you never really see more than 7-8 npc's on screen at once, that and you would only have to get the checksum once.

From: Krazy_Meerkat
Frement and I tried to get some npc model info from smart yesterday and it's not looking good.. Frement found that, for the npcs, their model is returned from a method using the Index/NpcID as arguments.. So b/c they use a method and not a variable, we don't have access to it :(
That being said.. There are TransformIds which we can access.. I'll try and add some new hooks to the updater later on today (and update the broken ones).. It can be a lengthy process..


Can't you add in the ability to invoke methods in SMART? Shouldn't be all that hard?

From: Krazy_Meerkat
Welcome Cov and thanks :) Are you the same Cov from JH?


Thanks! Yes I am that Cov :p

Harrier

2014-07-02 03:52:52

From: Krazy_Meerkat
You will have to re-download the include from here: https://code.google.com/p/osrreflection/source/browse/ if you're having this problem.. Just fixed the missing operators although not too sure why only you had this problem with R_InPolygon..

Iirc that error comes from then you use lape not pascal script

ineedbot

2014-07-02 20:01:20

I was having problems with 'R_SortNPCs(R_GetNpcs(NpcID));' because it'll return nothing for an array even though there very well it should return something.
An easy fix was using R_GetAllNpcs and filter that array out.

EDIT: wait. Im getting nothing with R_GetAllNPCs now… It only works after I restart the script…
Now after a reset…

This seems like its occurring once you try R_GetAllNpcs, leave the area and try it again.

Krazy_Meerkat

2014-07-03 03:40:09

Thanks ineedbot, I'll take a look at it now.. The way it was originally set up was so that you could leave the area, come back and the npc's would still be in the array.
Edit: Ok I've found some problems with it.. Elfyyy had changed the way R_LoadNpcIndexEx works when he added R_GetAllNpcs so that no new Npc's would be added to the localindex.. The problem is fixed now.. Be aware that if you're using R_GetAllNpcs, there will always be a lag spike (because no npc has been specified, it will refresh the whole array).

Haxz

2014-07-03 07:19:54

After the update, R_FindNormalRandoms takes one or two seconds to check for randoms, making scripts run slower when it is in a loop.

Tickyy

2014-07-03 07:47:15

From: Haxz
After the update, R_FindNormalRandoms takes one or two seconds to check for randoms, making scripts run slower when it is in a loop.


indeed, and it does false detections, it says that it has detected the frog random, without actually happening or frog being near, meaning that the last changes you've made @Krazy_Meerkat about the npc's wasn't a good idea..

Krazy_Meerkat

2014-07-03 08:03:54

From: Tickyy
indeed, and it does false detections, it says that it has detected the frog random, without actually happening or frog being near, meaning that the last changes you've made @Krazy_Meerkat about the npc's wasn't a good idea..


Tickyy, I'm not sure you understand what I changed..
I too got a false detection relating to the frog random.
What I changed was to allow R_GetAllNpcs (which is called in r_findnormalrandoms and r_findcombatrandoms) to refresh the array everytime it's called.. The problem is, if I don't allow it to do this, any random events won't be listed as Npc's.
The problem lies with very inefficient functions (R_FindTalk, R_SolveTalk, R_Findcombatrandoms) which call R_GetAllNpcs many many times.

I am working hard to fix the problem, but don't tell me that the last changes I made were a bad idea when you don't even know what I did.
Edit: Here's a quick fix which should have everything working fast for you again while I fix all this crap..
client_npcIndices                                 =   'client.bv';

Tickyy

2014-07-03 08:30:21

From: Krazy_Meerkat
I am working hard to fix the problem, but don't tell me that the last changes I made were a bad idea when you don't even know what I did.


I Apologize, i am willing to help, so you are trying to find an alternative way of finding randoms, without calling R_GetAllNpcs?

Krazy_Meerkat

2014-07-03 08:59:39

From: Tickyy
I Apologize, i am willing to help, so you are trying to find an alternative way of finding randoms, without calling R_GetAllNpcs?


I'm also sorry if I was rude.

@Cov I think that functions could be added to SMART to invoke methods using reflection, but I feel that they've been left out for a good reason.. Looking over some examples, there could be issues if properties of the method are changed (public or non-public method call, number of parameters, etc.)..
It's a good suggestion, but TransformIds should be enough for our purposes :)

Latest Update:
Major edits to remove lag-bombs from Antirandoms..
NpcIndex Hook re-added.

Tickyy

2014-07-03 11:32:18

From: Krazy_Meerkat
I'm also sorry if I was rude.

@Cov I think that functions could be added to SMART to invoke methods using reflection, but I feel that they've been left out for a good reason.. Looking over some examples, there could be issues if properties of the method are changed (public or non-public method call, number of parameters, etc.)..
It's a good suggestion, but TransformIds should be enough for our purposes :)

Latest Update:
Major edits to remove lag-bombs from Antirandoms..
NpcIndex Hook re-added.


Thank you for your hard work! I wasn't really paying attention to the reason why you did all this and said something i shouldn't have said. I am willing to learn more about reflection and how it works, i hang around irc sometimes, just in case you need a second hand.

Cov

2014-07-03 11:40:20

EDIT: Oops double post

Cov

2014-07-03 12:04:10

From: Krazy_Meerkat
@Cov I think that functions could be added to SMART to invoke methods using reflection, but I feel that they've been left out for a good reason.. Looking over some examples, there could be issues if properties of the method are changed (public or non-public method call, number of parameters, etc.)..
It's a good suggestion, but TransformIds should be enough for our purposes :)


The modifiers that a method has wouldn't matter (other than it being static or not). Only problem you would have from what I can see and my limited knowledge of c++ is providing the new invoke method you would add in Client object of SMART with the objects to go in the varag array of Method#invoke. Other than that it would work in the exact same way as SmartGetFieldObject. Adding something like this in would mean you're able to us the clients tileToScreen and tileToMinimap, as well as loading object/npc/item definitions from the cache.

Haxz

2014-07-03 12:50:47

From: Krazy_Meerkat
I'm also sorry if I was rude.

@Cov I think that functions could be added to SMART to invoke methods using reflection, but I feel that they've been left out for a good reason.. Looking over some examples, there could be issues if properties of the method are changed (public or non-public method call, number of parameters, etc.)..
It's a good suggestion, but TransformIds should be enough for our purposes :)

Latest Update:
Major edits to remove lag-bombs from Antirandoms..
NpcIndex Hook re-added.


Thank you very much! Works great now!

EDIT: I got an Out of Range error at line 300 of antirandoms include when antirandom finds that I'm in combat. @Krazy_Meerkat

Athylus

2014-07-03 13:57:13

Hey look I'm no pro with this at all and I'm just messing around with my third script, but thought I'd share this for the ppl working on it. I tried to open a door, and it moves the mouse very close but then stops and says succesfully executed. Here's my code (yes, no failsafes but I'm assuming we're not supposed to need that).


function IsDoorOpen: Boolean;
var
Door: TRSObject;

begin
//WriteLn(R_GetObjectAt(1, Point(3204, 3432)));
If R_FindObjectNearTile(Door, 25720, 1, 3, Point(3204, 3432)) then
WriteLn('Door found');
R_OpenDoor(Point(3204, 3432), 'E');
end;

Haxz

2014-07-03 14:05:44

From: Athylus
Hey look I'm no pro with this at all and I'm just messing around with my third script, but thought I'd share this for the ppl working on it. I tried to open a door, and it moves the mouse very close but then stops and says succesfully executed. Here's my code (yes, no failsafes but I'm assuming we're not supposed to need that).


function IsDoorOpen: Boolean;
var
Door: TRSObject;

begin
//WriteLn(R_GetObjectAt(1, Point(3204, 3432)));
If R_FindObjectNearTile(Door, 25720, 1, 3, Point(3204, 3432)) then
WriteLn('Door found');
R_OpenDoor(Point(3204, 3432), 'E');
end;


Try using a if and writeln with your opendoor function, pretty sure it will not write out anything because it failed.

EDIT: I tried opening a door to the East and South, works fine for me though.

Dervish

2014-07-03 16:54:40

From: Athylus
Hey look I'm no pro with this at all and I'm just messing around with my third script, but thought I'd share this for the ppl working on it. I tried to open a door, and it moves the mouse very close but then stops and says succesfully executed. Here's my code (yes, no failsafes but I'm assuming we're not supposed to need that).


function IsDoorOpen: Boolean;
var
Door: TRSObject;

begin
//WriteLn(R_GetObjectAt(1, Point(3204, 3432)));
If R_FindObjectNearTile(Door, 25720, 1, 3, Point(3204, 3432)) then
WriteLn('Door found');
R_OpenDoor(Point(3204, 3432), 'E');
end;


You need begin and end; if there are multiple things after a if […] then statement.

Athylus

2014-07-03 17:06:24

From: Dervish
You need begin and end; if there are multiple things after a if […] then statement.


I'm such a newfag, but at least I don't leech and make my own scripts. Btw, it works like 50% of the time. It works better when I change the angle of the camera to a low pitch. Edit: It does say Door Found every time though, lemme try repeating this. LoL game first tho.

Haxz

2014-07-03 17:32:34

From: Athylus
I'm such a newfag, but at least I don't leech and make my own scripts. Btw, it works like 50% of the time. It works better when I change the angle of the camera to a low pitch. Edit: It does say Door Found every time though, lemme try repeating this. LoL game first tho.


Maybe you can try make compass to East when you're trying to open the door.

Krazy_Meerkat

2014-07-03 23:50:18

From: Haxz
Maybe you can try make compass to East when you're trying to open the door.


@Haxz, I modified line 300 and updated the include. Can you let me know if you're still getting an out-of-range error?

@Athylus, The function R_OpenDoor will return true if it opened the door. Sometimes it can't find the uptext and it will return false that it didn't open the door.

snsgold

2014-07-04 05:35:52

there still somethings wrong with AntiRandoms.simba
[Hint] E:\Simba\Includes\SRL-OSR\SRL\Reflection\AntiRandoms\AntiRandoms.simba(252:3): Variable 'FOUNDNPC' never used at line 251
[Error] E:\Simba\Includes\SRL-OSR\SRL\Reflection\AntiRandoms\AntiRandoms.simba(295:5): Identifier expected at line 295
Compiling failed.

Krazy_Meerkat

2014-07-04 07:16:06

From: snsgold
there still somethings wrong with AntiRandoms.simba


Oh I'm sorry about that :3 here's the two functions you need to replace to fix your problem:
function R_FindCombatRandom: boolean;
var
Names: TStringArray;
Temp: TNPCArray;
i: integer;
begin
Result := False;
if (not R_UnderAttack) then
exit;
if (R_PrayerRandoms) then
begin
Names := ['security guard', 'evil chicken', 'river troll', 'rock golem', 'shade', 'swarm', 'tree spirit', 'ent', 'zombie'];
end else
Names := ['security guard', 'evil chicken', 'river troll', 'rock golem', 'shade', 'swarm', 'tree spirit', 'ent'];
Temp := R_GetAllNpcs;
for i := 0 to high(Temp) do
if (ExactStrInArr(Lowercase(Temp[i].Name), Names)) then
begin
if (not R_NearTile(Temp[i].Tile, 10)) then
Continue;
Result := True;
Break;
end;
if Result then
writeln('[Reflection Anti-Randoms] ''' + (Temp[i].Name) + ''' Combat random detected! Running away...');
end;

function R_FindCombatRandomEx: boolean;
var
Names: TStringArray;
i: integer;
begin
Result := False;
if ((not R_UnderAttack) or (length(R_FoundNpcs) < 1)) then
exit;
if (R_PrayerRandoms) then
begin
Names := ['security guard', 'evil chicken', 'river troll', 'rock golem', 'shade', 'swarm', 'tree spirit', 'ent', 'zombie'];
end else
Names := ['security guard', 'evil chicken', 'river troll', 'rock golem', 'shade', 'swarm', 'tree spirit', 'ent'];
for i := 0 to high(R_FoundNpcs) do
if (ExactStrInArr(Lowercase(R_FoundNpcs[i].Name), Names)) then
begin
R_FoundNpcs[i]:= R_GetTNPC(R_FoundNpcs[i].Index);
if (not R_NearTile(R_FoundNpcs[i].Tile, 10)) then
continue;
Result := True;
Break;
end;
if Result then
writeln('[Reflection Anti-Randoms] ''' + (R_FoundNpcs[i].Name) + ''' Combat random detected! Running away...');
end;
Everyone else should be fine, the problem has been fixed, if you auto-update to #72 it will be ok. If you can't compile the include, remember you can always download a new copy from the GC and it should fix any broken files.

Haxz

2014-07-04 13:29:51

From: Krazy_Meerkat
@Haxz, I modified line 300 and updated the include. Can you let me know if you're still getting an out-of-range error?

@Athylus, The function R_OpenDoor will return true if it opened the door. Sometimes it can't find the uptext and it will return false that it didn't open the door.


Not getting the error anymore, script running fine for 4 hours straight now. Good work and thanks!

Krazy_Meerkat

2014-07-05 01:27:05

From: Haxz
Not getting the error anymore, script running fine for 4 hours straight now. Good work and thanks!


That's good Haxz, I found a problem with Talking randoms but it should be fixed now. It's hard to test randoms stuff b/c it can take up to an hour to test the solver..

Brandon

2014-07-05 02:25:16

If you use GroundItems a lot, you could possibly have memory issues.. Not sure, but I know this can't be right:

https://code.google.com/p/osrreflection/source/browse/Core/GroundItems.simba#64

Leaks _Next and free's _Node when it is unassigned.

Should most likely be:

_Node := _Next;
_Next := SmartGetFieldObject(SmartCurrentTarget, _Next, Node_next);
SmartFreeObject(SmartCurrentTarget, _Node);


As for the issue of not being able to call methods, why not modify SMART and add it?

Krazy_Meerkat

2014-07-05 03:35:37

From: Brandon
If you use GroundItems a lot, you could possibly have memory issues.. Not sure, but I know this can't be right:

https://code.google.com/p/osrreflection/source/browse/Core/GroundItems.simba#64

Leaks _Next and free's _Node when it is unassigned.

Should most likely be:

_Node := _Next;
_Next := SmartGetFieldObject(SmartCurrentTarget, _Next, Node_next);
SmartFreeObject(SmartCurrentTarget, _Node);


As for the issue of not being able to call methods, why not modify SMART and add it?


Thanks for finding that Brandon, I added your fix into the function. Everything has been pushed to update 75 :)

snsgold

2014-07-05 04:26:11

after update to 75
got this errorr
D:\Simba\Includes\SRL-OSR\SRL\Reflection\AntiRandoms\AntiRandoms.simba(116:39): Unknown identifier 'R_FindFrog' at line 116

Cheddy

2014-07-05 04:38:20

The problem with invoking methods is that you can corrupt the stream causing the game to crash as it would be out of sync. I could never master it with reflection. It will be interesting to see how you guys do it :-D

Krazy_Meerkat

2014-07-05 05:09:35

From: snsgold
after update to 75
got this errorr

Oh I forgot there might be a conflict with the old R_FrogSolve.simba b/c it isn't listed in the files list for some reason.. So I'm adding it now so that it will be updated with the rest of the files.
If you download a fresh copy of the include from https://code.google.com/p/osrreflection/source/browse/ and replace your current version it will work. Everything is working fine for me.. Pushing to update 76.

Brandon

2014-07-05 05:30:04

From: fish1328
The problem with invoking methods is that you can corrupt the stream causing the game to crash as it would be out of sync. I could never master it with reflection. It will be interesting to see how you guys do it :-D


Well.. I didn't think about that at all. Either way, I couldn't get the player model..


public static void run() throws ClassNotFoundException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, Exception {
ClassLoader loader = applet.getClassLoader();

Object[] players = getPlayers(loader);
for (Object player : players) {
if (player != null) {
System.out.println(getPlayerName(loader, player));
System.out.println(getPlayerModel(loader, player));
System.out.println();
}
}
}

static String getPlayerName(ClassLoader loader, Object player) throws ClassNotFoundException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
Field f = loader.loadClass("y").getDeclaredField("j");
f.setAccessible(true);
return (String)f.get(player);
}

static Object getPlayerModel(ClassLoader loader, Object player) throws ClassNotFoundException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
Field f = loader.loadClass("y").getDeclaredField("f");
f.setAccessible(true);
return f.get(player);
}

static Object[] getPlayers(ClassLoader loader) throws ClassNotFoundException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
Field f = loader.loadClass("client").getDeclaredField("gd");
f.setAccessible(true);
return (Object[])f.get(null);
}


Prints:


Miss*Ail
null

Mosinyan
null

a3-seperate
null

Stanley*Mole
null

Vertikaali
null

I*XII*I
null

Wrangiw
null

Not sure why models are null.. It's definitely a field and not a method..

Frement

2014-07-05 05:57:11

From: Brandon
Well.. I didn't think about that at all. Either way, I couldn't get the player model..


public static void run() throws ClassNotFoundException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, Exception {
ClassLoader loader = applet.getClassLoader();

Object[] players = getPlayers(loader);
for (Object player : players) {
if (player != null) {
System.out.println(getPlayerName(loader, player));
System.out.println(getPlayerModel(loader, player));
System.out.println();
}
}
}

static String getPlayerName(ClassLoader loader, Object player) throws ClassNotFoundException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
Field f = loader.loadClass("y").getDeclaredField("j");
f.setAccessible(true);
return (String)f.get(player);
}

static Object getPlayerModel(ClassLoader loader, Object player) throws ClassNotFoundException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
Field f = loader.loadClass("y").getDeclaredField("f");
f.setAccessible(true);
return f.get(player);
}

static Object[] getPlayers(ClassLoader loader) throws ClassNotFoundException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
Field f = loader.loadClass("client").getDeclaredField("gd");
f.setAccessible(true);
return (Object[])f.get(null);
}


Prints:


Miss*Ail
null

Mosinyan
null

a3-seperate
null

Stanley*Mole
null

Vertikaali
null

I*XII*I
null

Wrangiw
null

Not sure why models are null.. It's definitely a field and not a method..


f.y is a field "cl f;", but this is for getting the players model, not NPC's models.

EDIT: NPC methods "n", "a" and "z" return a model, method z takes in one integer as parameter.

Cheddy

2014-07-05 06:47:13

Pretty sure the model return methods have funky parameters. I've always done it by adding a field to the class and setting that. That's injection though :/

Frement

2014-07-05 07:55:17

From: fish1328
Pretty sure the model return methods have funky parameters. I've always done it by adding a field to the class and setting that. That's injection though :/


Yeah, for item models (I think this is how it's done): index := (itemId and au.r.h.j) - 1; model := au.r.h.z[index];

Brandon

2014-07-05 09:39:42

From: Frement
f.y is a field "cl f;", but this is for getting the players model, not NPC's models.

EDIT: NPC methods "n", "a" and "z" return a model, method z takes in one integer as parameter.



Ahh in that case, I got something working for SMART.. I tested it.. Works using signatures and would allow you to call functions based solely on strings (so Simba can send them to SMART's socket).. IE:


smartPushMethodParam(0);
smartInvokeMethod('y.z', 'I'); //auto pop's the params.

smartPushMethodParam(50);
smartPushMethodParam(200);
smartPushMethodParam('HELLO');
smartPushMethodParam(true);
smartInvokeMethod('eos.Main.test', 'IILjava/lang/String;Z');

Not sure if I like the above.. it does seem annoying the way parameters would be sent to SMART but I can't think of any other way at this moment..


The java code works already though:

/**
*
* @author Brandon
*/

public class Main {
static final HashMap<String, Class> map = new HashMap<>();

static {
map.put("V", void.class);
map.put("I", int.class);
map.put("J", long.class);
map.put("F", float.class);
map.put("D", double.class);
map.put("Z", boolean.class);
map.put("C", char.class);
map.put("B", byte.class);
map.put("S", short.class);

map.put(".V", void.class);
map.put(".I", int.class);
map.put(".J", long.class);
map.put(".F", float.class);
map.put(".D", double.class);
map.put(".Z", boolean.class);
map.put(".C", char.class);
map.put(".B", byte.class);
map.put(".S", short.class);

map.put("[I", int[].class);
map.put("[J", long[].class);
map.put("[F", float[].class);
map.put("[D", double[].class);
map.put("[Z", boolean[].class);
map.put("[C", char[].class);
map.put("[B", byte[].class);
map.put("[S", short[].class);

map.put("[[I", int[][].class);
map.put("[[J", long[][].class);
map.put("[[F", float[][].class);
map.put("[[D", double[][].class);
map.put("[[Z", boolean[][].class);
map.put("[[C", char[][].class);
map.put("[[B", byte[][].class);
map.put("[[S", short[][].class);

map.put("[[[I", int[][][].class);
map.put("[[[J", long[][][].class);
map.put("[[[F", float[][][].class);
map.put("[[[D", double[][][].class);
map.put("[[[Z", boolean[][][].class);
map.put("[[[C", char[][][].class);
map.put("[[[B", byte[][][].class);
map.put("[[[S", short[][][].class);
}

public Class[] buildClassParameters(ClassLoader loader, String params) throws ClassNotFoundException {
if (params == null) {
return null;
}

final String regex = "(L(?!L)[A-z/]+;)|(\\[\\[\\[[A-z])|(\\[\\[[A-z])|(\\[[A-z])|(\\.[A-z])|([A-z])";
Matcher m = Pattern.compile(regex).matcher(params);
ArrayList<Class> result = new ArrayList<>();

while(m.find()) {
if (map.containsKey(m.group(0))) {
result.add(map.get(m.group(0)));
} else {
result.add(Class.forName(m.group(0).replaceAll("^L|;", "").replace('/', '.'), false, loader));
}
}

if (!result.isEmpty()) {
return result.toArray((Class[])java.lang.reflect.Array.newInstance(Class.class, result.size()));
}
return null;
}

public Method findMethodFromPath(ClassLoader loader, String path, String signature) throws Exception {
int idx = path.lastIndexOf(".");
String[] parts = new String[] {path.substring(0, idx), path.substring(idx + 1)}; //allows you to invoke even SMART's internal functions..
Class cls = loader.loadClass(parts[0]);

if (cls != null) {
Method m = cls.getDeclaredMethod(parts[1], buildClassParameters(loader, signature));
m.setAccessible(true);
return m;
}
return null;
}

public Object invokeMethodWithPath(ClassLoader loader, String path, String signature, Object[] params) throws Exception {
return findMethodFromPath(loader, path, signature).invoke(params);
}

public void test(String[] args) {
//...
//...
//...

ClassLoader loader = applet.getClassLoader();

Object me = getMe(loader); //get my player.. client.hj
Method m = findMethodFromPath(loader, "y.a", null); //find "y.a" method.
Method m2 = findMethodFromPath(loader, "y.z", "I"); //find "y.z" method. This method is "protected"!
Method m3 = findMethodFromPath(loader, "y.n", null); //find "y.n" method.

System.out.println(getModelVertexCount(loader, m.invoke(me))); //prints 628
System.out.println(getModelVertexCount(loader, m2.invoke(me))); //prints 628
System.out.println(getModelVertexCount(loader, m3.invoke(me))); //prints 628


Method m = findMethodFromPath(loader, "eos.Main.testSignatureParser", "IILjava/lang/String;Z"); //find my own class method
System.out.println(m.invoke(null, 50, 200, "HELLO", true)); //prints "50200HELLOtrue".
}

public static String testSignatureParser(int A, int B, String C, boolean D) {
return new StringBuilder().append(A).append(B).append(C).append(D).toString();
}

public static void main(String[] args) {
new Main().test(args);
}
}

Cheddy

2014-07-05 12:51:30

Looks good. So this can be used for NPC? Or are the methods player local?

tls

2014-07-05 14:02:57

I'm almost 100 percent positive models can be grabbed without invoking the in class methods.

Cheddy

2014-07-05 15:40:03

Yeh @tls, they can. You can grab the static model from the cache, but you then have to manually rotate them and animate them which would take an age using simba's speed :/

ineedbot

2014-07-05 22:14:43

I think its possible to have banking reflection done, do you think you guys can do it? I'd do it myself but i have no experience in developing reflection with hooks, widgets, multipliers etc.

Also when a Random NPC comes on screen, the whole script stops to a halt and never runs again until you force restart it. idk if its still lingering but it was yesterday..EDIT: NVM its fixed…

Also one more thing, is it possible to do equipment reflection? To see if you have the axe wielded, etc.

However frogSolver is giving a math error….
[Reflection Anti-Randoms] Frog random detected! Solving...
Math error at line 1512
The following DTMs were not freed: [SRL - Lamp bitmap, SRL - Book of Knowledge, 2, 3]
The following bitmaps were not freed: [SRL - Mod bitmap, SRL - Admin bitmap, SRL - Minimap Mask bitmap, 3, 4]

Shows SRL-OSR/SRL/Core/math.simba

Frement

2014-07-06 05:33:21

From: ineedbot
I think its possible to have banking reflection done, do you think you guys can do it? I'd do it myself but i have no experience in developing reflection with hooks, widgets, multipliers etc.

Also when a Random NPC comes on screen, the whole script stops to a halt and never runs again until you force restart it. idk if its still lingering but it was yesterday..EDIT: NVM its fixed…

Also one more thing, is it possible to do equipment reflection? To see if you have the axe wielded, etc.

However frogSolver is giving a math error….
[Reflection Anti-Randoms] Frog random detected! Solving...
Math error at line 1512
The following DTMs were not freed: [SRL - Lamp bitmap, SRL - Book of Knowledge, 2, 3]
The following bitmaps were not freed: [SRL - Mod bitmap, SRL - Admin bitmap, SRL - Minimap Mask bitmap, 3, 4]

Shows SRL-OSR/SRL/Core/math.simba


I did some inventory functions for hoodz, I think they are in his fighter, alternatively they might be in the reflection include, if not you can find some inventory functions in F_AntiRandoms.simba. Getting item column and row in the bank is also quite easy.

function R_BankScreen: Boolean;
begin
Result := (Pos('Bank of Rune', R_GetWidgetText(R_GetWidget(12, 2))) > 0);
end;

type
TInventoryItem = record
ID, Quantity, Slot: Integer;
end;

TInventoryItemArray = Array of TInventoryItem;

function R_GetInventoryItems: TInventoryItemArray;
var
_Inventory, _InventorySlot, _ItemID, _ItemQuantity: Integer;
begin
_Inventory := R_GetWidget(149, 0);
SetLength(Result, 28);
for _InventorySlot := 0 to 27 do begin
_ItemID := SmartGetFieldArrayInt(SmartCurrentTarget, _Inventory, Widget_getItems, _InventorySlot);
if (_ItemID > 0) then begin
_ItemQuantity := SmartGetFieldArrayInt(SmartCurrentTarget, _Inventory, Widget_getStackSizes, _InventorySlot);
with Result[_InventorySlot] do begin
ID := _ItemID;
Quantity := _ItemQuantity;
Slot := _InventorySlot + 1;
end;
end;
end;
SmartFreeObject(SmartCurrentTarget, _Inventory);
end;

There are some I found.

Cheddy

2014-07-06 06:44:34

Equipment is easy, a wrapper class is made for the widget much like you would do with bank or inventory. The wrapper class then holds the functions related to it.

Banking is very easy as well, as long as widgets work, then the only slightly hard bit of banking is the scrolling however, that can be done easily by pressing the up and down arrows on the scroll bar (not as efficient as clicking on the scroll bar but I could never get that perfect :/)

Krazy_Meerkat

2014-07-06 06:44:59

From: ineedbot
frogSolver is giving a math error….
[Reflection Anti-Randoms] Frog random detected! Solving...
Math error at line 1512
The following DTMs were not freed: [SRL - Lamp bitmap, SRL - Book of Knowledge, 2, 3]
The following bitmaps were not freed: [SRL - Mod bitmap, SRL - Admin bitmap, SRL - Minimap Mask bitmap, 3, 4]

Shows SRL-OSR/SRL/Core/math.simba


This was fixed yesterday.. Replace the whole include https://code.google.com/p/osrreflection/source/browse/ and post again if you're still having a problem.

Cheddy

2014-07-06 06:52:16

@Brandon
Here are the methods you can test if you want to test your invoker:


Methods
---> (II)Lau; 'getItemComposite' returns 'aj.z' [STATIC]
---> (IB)Lan; 'getNPCComposite' returns 'u.z' [STATIC]
---> (II)Lav; 'getObjectComposite' returns 'cs.z' [STATIC]

And some hooks to test the received objects:

{* NPCDefinition - 4 Hooks *}
NPCDefinition = 'an';
NPCDefinition_Actions = 'v';
NPCDefinition_ID = 'r';
NPCDefinition_ID_Multiplier = -563242523;
NPCDefinition_Level = 'p';
NPCDefinition_Level_Multiplier = -545532659;
NPCDefinition_Name = 'e';

{* ObjectDefinition - 2 Hooks *}
ObjectDefinition = 'av';
ObjectDefinition_Actions = 'af';
ObjectDefinition_Name = 'i';

{* ItemDefinition - 9 Hooks *}
ItemDefinition = 'au';
ItemDefinition_GroundActions = 'l';
ItemDefinition_ModelColours = 'f';
ItemDefinition_ModelSizeX = 'ay';
ItemDefinition_ModelSizeX_Multiplier = 836976809;
ItemDefinition_ModelSizeY = 'am';
ItemDefinition_ModelSizeY_Multiplier = 1785188107;
ItemDefinition_ModelSizeZ = 'az';
ItemDefinition_ModelSizeZ_Multiplier = 1752736447;
ItemDefinition_Name = 'a';
ItemDefinition_NewModelColours = 'o';
ItemDefinition_InventoryActions = 'w';
ItemDefinition_isMembers = 'p';
The first parameter is the ID. The second parameter is a dummy so just pass 0 to it

lotery33

2014-07-06 16:52:58

I'm getting the
Exception in Script: Operator expected at line 446, column 3 in file "C:\Simba\Includes\SRL-OSR\SRL\Reflection\Core\Tiles.simba"
error, I downloaded the latest version

Harrier

2014-07-06 17:05:27

From: lotery33
I'm getting the
Exception in Script: Operator expected at line 446, column 3 in file "C:\Simba\Includes\SRL-OSR\SRL\Reflection\Core\Tiles.simba"
error, I downloaded the latest version

Read the instructions for setting up OSRS-SRL. You missed a step :p

Awkwardsaw

2014-07-06 18:25:41

From: Frement


function R_BankScreen: Boolean;
begin
Result := (Pos('Bank of Rune', R_GetWidgetText(R_GetWidget(12, 2))) > 0);
end;


function R_BankScreen : boolean;
begin
result := R_GetWidgetText(R_GetWidget(12, 15)) = 'Swap';
end;

is a better way of doing it, just because if a certain tab is open, "Bank of runescape" doesn't show up

From: fish1328
Equipment is easy, a wrapper class is made for the widget much like you would do with bank or inventory. The wrapper class then holds the functions related to it.

Banking is very easy as well, as long as widgets work, then the only slightly hard bit of banking is the scrolling however, that can be done easily by pressing the up and down arrows on the scroll bar (not as efficient as clicking on the scroll bar but I could never get that perfect :/)

That's the problem ;) As far as I know, we can't read the names of the widgets, which would help out a ton with banking/ equipment. We also need to be able to get the components of a child. Of couse if I'm missing something, please point me to the right direction

Frement

2014-07-07 00:42:54

From: Awkwardsaw
function R_BankScreen : boolean;
begin
result := R_GetWidgetText(R_GetWidget(12, 15)) = 'Swap';
end;

is a better way of doing it, just because if a certain tab is open, "Bank of runescape" doesn't show up


I did this before the tab update, and I honestly forgot all about it :)

Cheddy

2014-07-07 02:31:10

From: Awkwardsaw
function R_BankScreen : boolean;
That's the problem ;) As far as I know, we can't read the names of the widgets, which would help out a ton with banking/ equipment. We also need to be able to get the components of a child. Of couse if I'm missing something, please point me to the right direction

Names are a faff. I have them hooked but it took a god-damn age. Using actions to identify widgets is the best method in my opinion =)
For equipment, there is a separate widget for each slot. This is the same for bank =)
bankViewport = Widgets.getWidgets()[12][10];
slotWidget = viewport.getComponent(slotIndex);
Item bankItem = new Item(client, client.getItemDef(slotWidget.getItemID()), slotWidget.getItemID(), slotWidget.getItemStack());
That is my Java code for getting an item within a bank.

Cov

2014-07-07 03:41:21

From: Brandon
Ahh in that case, I got something working for SMART.. I tested it.. Works using signatures and would allow you to call functions based solely on strings (so Simba can send them to SMART's socket).. IE:


smartPushMethodParam(0);
smartInvokeMethod('y.z', 'I'); //auto pop's the params.

smartPushMethodParam(50);
smartPushMethodParam(200);
smartPushMethodParam('HELLO');
smartPushMethodParam(true);
smartInvokeMethod('eos.Main.test', 'IILjava/lang/String;Z');

Not sure if I like the above.. it does seem annoying the way parameters would be sent to SMART but I can't think of any other way at this moment..


What about using VarArgs? I think they could be used in this situation, and as long as you were using standard types minus object you should be okay?

Tickyy

2014-07-07 06:53:42

Procedure Money;
var
i:integer;
begin
i:= (R_InventoryContainsCount([880, 333]));
Writeln('Approx. Money: ' + inttostr(i) + ' K');
end;

Approx. Money: 0 K


This isn't working for some reason…

Brandon

2014-07-07 15:38:51

From: Cov
What about using VarArgs? I think they could be used in this situation, and as long as you were using standard types minus object you should be okay?



Simba has no such thing. The java side has no problems.. It's the Simba side of SMART that has to do all the work really.

Frement

2014-07-07 15:48:17

From: Tickyy
Procedure Money;
var
i:integer;
begin
i:= (R_InventoryContainsCount([880, 333]));
Writeln('Approx. Money: ' + inttostr(i) + ' K');
end;



This isn't working for some reason…


function R_InventoryContainsCount(IDs: TIntegerArray): Integer;
var
I: Integer;
_Items: TInventoryItemArray;
begin
_Items := R_GetInventoryItems;
for I := 0 to High(_items) do begin
if (InIntArray(IDs, _Items[I].ID)) then begin
inc(result);
end;
end;
end;

It counts the items found in inventory, so you are using it wrong to begin with.

You need to use
function R_GetInventoryItems: TInventoryItemArray;
to do what you want.

Tickyy

2014-07-07 17:50:15

From: Frement
function R_InventoryContainsCount(IDs: TIntegerArray): Integer;
var
I: Integer;
_Items: TInventoryItemArray;
begin
_Items := R_GetInventoryItems;
for I := 0 to High(_items) do begin
if (InIntArray(IDs, _Items[I].ID)) then begin
inc(result);
end;
end;
end;

It counts the items found in inventory, so you are using it wrong to begin with.

You need to use
function R_GetInventoryItems: TInventoryItemArray;
to do what you want.


well, this isn't working either…


Procedure Money;
var
InvItems:TInventoryItemArray;
i,j:integer;
begin
InvItems := R_GetInventoryItems;
if (length(InvItems) = 0)then
exit;
for i:= 0 to high(InvItems) do
if(InvItems[i].ID = 890)then
J := ((InvItems[i].Quantity) * 135);

WriteLn('Approx. Money: ' + inttostr(j) + ' K');
end;

Tickyy

2014-07-07 17:52:56

From: Frement
function R_InventoryContainsCount(IDs: TIntegerArray): Integer;
var
I: Integer;
_Items: TInventoryItemArray;
begin
_Items := R_GetInventoryItems;
for I := 0 to High(_items) do begin
if (InIntArray(IDs, _Items[I].ID)) then begin
inc(result);
end;
end;
end;

It counts the items found in inventory, so you are using it wrong to begin with.

You need to use
function R_GetInventoryItems: TInventoryItemArray;
to do what you want.


well, this isn't working either…


Procedure Money;
var
InvItems:TInventoryItemArray;
i,j:integer;
begin
InvItems := R_GetInventoryItems;
if (length(InvItems) = 0)then
exit;
for i:= 0 to high(InvItems) do
if(InvItems[i].ID = 890)then
J := ((InvItems[i].Quantity) * 135);

WriteLn('Approx. Money: ' + inttostr(j) + ' K');
end;

Approx. Money: 0 K

Krazy_Meerkat

2014-07-08 23:07:22

I just found that math error again while using frogsolve.. It was caused by R_BlindWalkEx's use of TPABetweenPoints.
Update:
Fixed part of the frog solver which wouldn't update the npc list when the player entered the cave.
Added some more precautions to R_BlindWalkEx

Solar

2014-07-09 05:11:51

From: Krazy_Meerkat
I just found that math error again while using frogsolve.. It was caused by R_BlindWalkEx's use of TPABetweenPoints.
Update:
Fixed part of the frog solver which wouldn't update the npc list when the player entered the cave.
Added some more precautions to R_BlindWalkEx


Seems like you're the only one still motivated to keeping the OSRS reflection include updated nowadays. :( So thank you for that.
I've been busy with some personal things lately but PM me if you want some help with anything (although you already know I can't do much due to my lack of knowledge).

Cov

2014-07-10 04:06:42

From: Brandon
Simba has no such thing. The java side has no problems.. It's the Simba side of SMART that has to do all the work really.


I think you can use them in freepascal if you're calling c/c++ functions directly, which is what Simba/SMART is doing? I expect you're right though if pascalscript or lape doesn't support them.

NKN

2014-07-12 02:39:35

Time to make waves!


Started a brand new updater today.
The plan is for this one to use control flow deob, unlike my previous ones.
Already have a better foundation than my previous one.

Oh yeah, @Krazy_Meerkat will be joining me in the production of this updater so it should be decent this time. ;)

Tickyy

2014-07-13 13:36:41

From: Krazy_Meerkat
I just found that math error again while using frogsolve.. It was caused by R_BlindWalkEx's use of TPABetweenPoints.
Update:
Fixed part of the frog solver which wouldn't update the npc list when the player entered the cave.
Added some more precautions to R_BlindWalkEx


[Reflection Anti-Randoms] Frog random detected! Solving…
[Reflection Anti-Randoms] Failed Frog random, logging out.


nope, still isn't working…

Cheddy

2014-07-13 13:58:59

Lookin' alright actually :D If you need a hand with any hooks just ask, I have a few now.
One hint of advice, since all you're doing is printing the hooks to a file, set the multiplier field type in FieldHook.class to a long as some of the multis are longs :D (In a Java bot this is far more confusing, but you don't need to use the variable, just print it =))

Crisis

2014-07-13 22:41:37

Is reflection fixed now?

ineedbot

2014-07-14 18:10:35

the Frog solver should be disabled until its fixed, if anyone in the area gets the frog random, it will completely hault the script, it starts checking random NPCs for the frog and never stops.

Also, a little tip on detecting the 'talk' randoms, have it check only nearby NPCs, rather than a large area, because the 'talk' randoms will only spawn 1-3 tiles away from you. This would speed up scripts so it doesn't have to wait for the faraway NPC's overhead text.

Krazy_Meerkat

2014-07-14 23:06:19

I'm a little confused with some of these issues.. Anyone having problems with the Frog/Talk randoms is urged to download a fresh copy of the whole include from https://code.google.com/p/osrreflection/source/browse/ because there was a problem with those 2 files not being updated. If you're sure that your R_FrogSolve.simba and R_TalkRandoms are identical to the current versions (https://code.google.com/p/osrreflection/source/browse/AntiRandoms/R_FrogSolve.simba https://code.google.com/p/osrreflection/source/browse/AntiRandoms/R_TalkRandoms.simba) then there most likely is some kind of problem. But the issues suggested (frog solver running to every npc, log out in cave, waiting too long for overhead text) were fixed in the past few revisions..

ineedbot, 'talk' randoms already have to be within 3 tiles of the player to trigger the overhead text search, it used to be a 10 second pause which I reduced to 5 seconds, this was in the original version that @elfyyy wrote. If you can think of a better way to find talking randoms then feel free to post and I'll discuss it.

I'm not the only one in this project, @Frement has been much help on skype and I do sometimes commit stuff for him because he's busy with work and other things. @NKN has recently taken an interest in updaters again, hopefully it's an extended re-visit. Much love to everyone from JavaHacking, it's really awesome learning with you guys and getting great advice on everything Updater-related and Client-related.

Frement

2014-07-14 23:11:55

From: Krazy_Meerkat
ineedbot, 'talk' randoms already have to be within 3 tiles of the player to trigger the overhead text search, it used to be a 10 second pause which I reduced to 5 seconds, this was in the original version that @elfyyy wrote. If you can think of a better way to find talking randoms then feel free to post and I'll discuss it.


Didn't I at some point write the code for getting our player id to identify which randoms belong to us? Since the "Interacting" field of the NPC is our player id when it belongs to us. Doesn't need any waits, it's one integer check, very fast. If you can't find the code anywhere, remind me on skype.

NKN

2014-07-14 23:43:45

From: Frement
Didn't I at some point write the code for getting our player id to identify which randoms belong to us? Since the "Interacting" field of the NPC is our player id when it belongs to us. Doesn't need any waits, it's one integer check, very fast. If you can't find the code anywhere, remind me on skype.

Hey I heard you got some control flow stuff, should hit me up on skype.

Frement

2014-07-15 00:31:01

function R_GetPlayerIndex: Integer;
begin
Result := (SmartGetFieldInt(SmartCurrentTarget, 0, 'client.hv') * 1836161929) + 32768;
end;

Player[************] has index 34726
Tile: (3185, 3436)
NPC[Mysterious Old Man] is interacting with us.
ID: 2069
Index: 28932
Text: Greetings ************!
Tile: (3185, 3437)
NPC[Mysterious Old Man] is interacting with us.
ID: 2069
Index: 28932
Text: Here you go ************, it's all yours!
Tile: (3185, 3437)

Works with randoms, and even when fighting a normal NPC, or even when the Stray dog in varrock is following our player.

NPC[Stray dog] is interacting with us.
ID: 2840
Index: 14856
Text:
Tile: (3185, 3432)

Krazy_Meerkat

2014-07-15 02:38:26

Ok we're moving to an index-based detection system now.. This hasn't been tested so report any problems and be careful until we work out the kinks.

ineedbot

2014-07-15 02:42:47

Nice! I hope this makes the randoms more fluent. Also about the talk randoms, I only added it because I saw the script hault because it picked up a random like 5-6 tiles away, must of been just on the edge of the box.

Krazy_Meerkat

2014-07-15 06:51:03

New Update :)
Added new function R_IsNpcInArray(NpcName:String; NpcArray: TNpcArray): Boolean;
Stopped "nulls" from activating the frog solver unless there's also a frog around.

ineedbot

2014-07-15 15:46:11

From: Krazy_Meerkat
New Update :)
Added new function R_IsNpcInArray(NpcName:String; NpcArray: TNpcArray): Boolean;
Stopped "nulls" from activating the frog solver unless there's also a frog around.


Thanks! I just wanna thank you for all your work on reflection! Making scripting so much more accurate and stable, I hope you continue to keep it updated for a long time.
Heres a little project ive been working on
Couldn't of done it without the reflection team :)

villur700

2014-07-17 06:14:26

There was a an update like 5min ago or so, kicked me out and said runescape has an update, please reload the page and now when sarting the script again, it says "Reflection Hooks are outdated" and stops the script. I guess reflection needs to be updated now?

SRL Compiled in 15 msec
Attempting to pair to a smart client..
Found 1 free client(s), attempting to pair to one…
Set SMART[4976] as Simba's target
Succesfully paired to a existing client, SMART[4976]
Reflection Hooks are outdated
No need to post about it, we are currently working on it. ~ Reflection dev's
Succesfully freed SMART[4976]
Successfully executed.

Tickyy

2014-07-17 07:13:05

From: villur700
There was a an update like 5min ago or so, kicked me out and said runescape has an update, please reload the page and now when sarting the script again, it says "Reflection Hooks are outdated" and stops the script. I guess reflection needs to be updated now?


No need to post about it, we are currently working on it. ~ Reflection dev's
you saw everything but still wanted to post about it? seriously?

ineedbot

2014-07-17 12:33:18

Krazy_Meerkat was fast with these hooks with this update! great job!

Frement

2014-07-17 13:45:16

From: ineedbot
Krazy_Meerkat was fast with these hooks with this update! great job!


He has a special ability to sense the updates.

villur700

2014-07-17 17:25:37

From: Tickyy
No need to post about it, we are currently working on it. ~ Reflection dev's
you saw everything but still wanted to post about it? seriously?

I just started using it yesterday, was unsure how fast will it be updated and etc, wanted to actually just know more :/

ineedbot

2014-07-18 00:10:49

From: villur700
I just started using it yesterday, was unsure how fast will it be updated and etc, wanted to actually just know more :/


Its working just fine now.

However I think the hook client_run_energy is broken, return negative values…

KeepBotting

2014-07-18 00:18:25

From: villur700
I just started using it yesterday, was unsure how fast will it be updated and etc, wanted to actually just know more :/

The ETA is always the same: soon.
The current status is always the same: being worked on.
Your options are always the same: fix it yourself, or wait.
What you can do in the meantime is always the same: go outside, read a book, play legit (WHAT?!).

ineedbot

2014-07-18 16:31:07

Noticed that it doesn't solve the mysterious box random, i got some screen shots of it
0=Index: (190)  ChildIndex: (0)  Widget: (432458372)  Text: ()
1=Index: (190) ChildIndex: (1) Widget: (432456712) Text: ()
2=Index: (190) ChildIndex: (2) Widget: (432456684) Text: ()
3=Index: (190) ChildIndex: (3) Widget: (432456672) Text: ()
4=Index: (190) ChildIndex: (4) Widget: (432456652) Text: ()
5=Index: (190) ChildIndex: (5) Widget: (432456616) Text: ()
6=Index: (190) ChildIndex: (6) Widget: (432457680) Text: (Which shape has the number 6?)
7=Index: (190) ChildIndex: (7) Widget: (432457664) Text: ()
8=Index: (190) ChildIndex: (8) Widget: (432457616) Text: ()
9=Index: (190) ChildIndex: (9) Widget: (432457604) Text: ()
10=Index: (190) ChildIndex: (10) Widget: (432457580) Text: (Pentagon)
11=Index: (190) ChildIndex: (11) Widget: (432456552) Text: (Square)
12=Index: (190) ChildIndex: (12) Widget: (432456540) Text: (Circle)
13=Index: (190) ChildIndex: (13) Widget: (432456520) Text: ()
14=Index: (190) ChildIndex: (14) Widget: (432456496) Text: ()
15=Index: (190) ChildIndex: (15) Widget: (432456480) Text: ()

I noticed that F_AntiRandoms had this solved, however it used
function R_GetWidgetModelID(WidgetPointer: Integer): Integer;
begin
result := smartGetFieldInt(smartCurrentTarget, WidgetPointer, 'af') * -1749303759;
end;
To get widget ids so it can tell apart from shapes and numbers. But since its a static hook from a while ago, its prob a broken hook. It'd be cool if you can get this hook working, and possibly get the rest of the randoms working too!

Krazy_Meerkat

2014-07-19 23:20:48

I updated the energy/weight hooks but I didn't get a chance to test them.. There will be more hooks soon enough ineedbot, we're putting every effort into the new updater so we won't have constant issues and we can focus on expanding our hooks..

NKN

2014-07-20 02:55:45


{*Starting Deob*
* Starting Method Removal*
* 2457/4158 methods removed*
* Method Removal Finished*
* Starting Arithmetic Deob*
* 150/212 expressions modified*
* Arithmetic Deob Finished*
* Creating Jar*
* Finished Jar*
* Location: C:\Users\Chris\AppData\Roaming/SRLUpdater/output.jar*
*Ending Deob*}

New updater is doing good so far, should be a lot better than the previous. :')

Solar

2014-07-20 04:56:08

Seems like things are getting quite exciting with respect to the reflection include. Nice work behind the scenes guys. Looking forward to the new stuff.

ineedbot

2014-07-23 00:24:49

Hey, could you update my ID Display script, I made it better, also got that hook I wanted for widget model IDs and can take the widgets model IDs. Changed the colors too to make easier to read. Yellow being NPCs, aqua is objects, green is other.

[190]
0=Index: (190) ChildIndex: (0) Widget: (431923788) Text: () Model: 7007
1=Index: (190) ChildIndex: (1) Widget: (431921260) Text: () Model: 7023
2=Index: (190) ChildIndex: (2) Widget: (431920316) Text: () Model: 7035
3=Index: (190) ChildIndex: (3) Widget: (431920236) Text: () Model: 7017
4=Index: (190) ChildIndex: (4) Widget: (431915500) Text: () Model: 7026
5=Index: (190) ChildIndex: (5) Widget: (431923060) Text: () Model: 7049
6=Index: (190) ChildIndex: (6) Widget: (431922944) Text: (Which shape has the number 9?) Model: -1
7=Index: (190) ChildIndex: (7) Widget: (431924416) Text: () Model: -1
8=Index: (190) ChildIndex: (8) Widget: (431921116) Text: () Model: -1
9=Index: (190) ChildIndex: (9) Widget: (431921036) Text: () Model: -1
10=Index: (190) ChildIndex: (10) Widget: (431920132) Text: (Square) Model: -1
11=Index: (190) ChildIndex: (11) Widget: (431920952) Text: (Star) Model: -1
12=Index: (190) ChildIndex: (12) Widget: (431922580) Text: (Circle) Model: -1
13=Index: (190) ChildIndex: (13) Widget: (431922492) Text: () Model: -1
14=Index: (190) ChildIndex: (14) Widget: (431922836) Text: () Model: -1
15=Index: (190) ChildIndex: (15) Widget: (431920804) Text: () Model: -1


Working nicely… ^^
[Reflection Anti-Randoms] Sandwich lady random detected! Solving...
Solved sandwich lady with choice kebab [10729]
[Reflection Anti-Randoms] Solved Sandwich lady random!

Molly detected
[Reflection Anti-Randoms] Molly random detected! Solving...
Getting molly model id's

[Reflection Anti-Randoms] Entering Control Room
[Reflection Anti-Randoms] Door Opened
Clicking control panel
(0, 0)
Finding suspect tile

Suspect index is 21909
Starting endless loop to track suspect
[Reflection Anti-Randoms] Door Opened
[Reflection Anti-Randoms] Solved Molly random!

[Reflection Anti-Randoms] Rewards random detected! Solving...
Found shape Triangle with number 1
Didn't match the question.
Found shape Square with number 0
Correct shape and number found.
[Reflection Anti-Randoms] Solved Rewards random!


Got reflection banking working!
[(3057, 1, 1), (3061, 1, 2), (3058, 1, 3), (6182, 1, 4), (6655, 1, 5), (6656, 1, 6), (6654, 1, 7), (6183, 14, 8), (6181, 1, 9), (3059, 1, 10), (3060, 1, 11), (2922, 2, 12), (6180, 1, 13), (1040, 1, 14), (563, 824, 15), (557, 3856, 16), (554, 11324, 17), (560, 450, 18), (561, 37, 19), (558, 4645, 20), (1381, 1, 21), (1383, 1, 22), (562, 273, 23), (555, 6229, 24), (1385, 1, 25), (556, 5782, 26), (559, 7, 27), (1739, 1, 28), (383, 6517, 29), (453, 168, 30), (1515, 2278, 31), (3049, 30, 32), (10149, 54, 33), (5075, 37, 34), (7993, 1, 35), (1605, 46, 36), (1603, 33, 37), (1601, 15, 38), (62, 282, 39), (1517, 2473, 40), (1607, 27, 41), (5283, 1, 42), (5284, 1, 43), (5323, 7, 44), (5313, 2, 45), (5316, 1, 46), (5286, 3, 47), (1511, 10, 48), (1519, 2575, 49), (5102, 17, 50), (5319, 178, 51), (5318, 620, 52), (5307, 86, 53), (319, 179, 54), (5104, 11, 55), (5280, 1, 56), (5310, 12, 57), (5324, 98, 58), (5098, 26, 59), (5308, 55, 60), (5096, 33, 61), (5306, 66, 62), (60, 445, 63), (58, 377, 64), (2349, 299, 65), (1621, 8, 66), (1521, 239, 67), (2351, 1, 68), (315, 353, 69), (329, 3407, 70), (1635, 1, 71), (438, 165, 72), (436, 149, 73), (361, 182, 74), (359, 333, 75), (331, 41, 76), (321, 31, 77), (333, 5152, 78), (335, 35, 79), (985, 1, 80), (1623, 24, 81), (249, 1, 82), (201, 1, 83), (205, 2, 84), (447, 34, 85), (2003, 24, 86), (8790, 16, 87), (1539, 426, 88), (960, 215, 89), (8496, 11, 90), (8502, 145, 91), (8504, 10, 92), (1891, 276, 93), (1901, 38, 94), (1937, 12, 95), (1993, 6, 96), (5097, 10, 97), (1987, 7, 98), (5309, 43, 99), (7919, 5, 100), (5322, 54, 101), (5320, 22, 102), (5305, 128, 103), (5099, 11, 104), (5101, 18, 105), (5103, 8, 106), (5311, 8, 107), (5292, 12, 108), (5293, 3, 109), (385, 17, 110), (387, 9, 111), (5100, 5, 112), (5291, 7, 113), (5105, 2, 114), (5294, 3, 115), (5282, 2, 116), (379, 486, 117), (377, 93, 118), (317, 28, 119), (375, 2, 120), (373, 13, 121), (371, 280, 122), (11330, 11, 123), (11328, 13, 124), (5073, 17, 125), (1617, 6, 126), (9003, 1, 127), (1513, 21, 128), (5074, 6, 129), (405, 2, 130), (401, 13, 131), (407, 17, 132), (365, 49, 133), (355, 109, 134), (363, 9, 135), (353, 13, 136), (339, 73, 137), (341, 19, 138), (52, 435, 139), (5072, 1, 140), (1971, 3, 141), (1917, 3, 142), (1619, 7, 143), (3051, 4, 144), (6055, 1, 145), (1969, 2, 146), (347, 23, 147), (325, 22, 148), (349, 22, 149), (11332, 3, 150), (309, 4, 151), (10071, 2, 152), (314, 1, 153), (311, 7, 154), (1454, 5, 155), (1438, 2, 156), (952, 4, 157), (590, 7, 158), (303, 6, 159), (954, 4, 160), (1734, 112, 161), (10088, 878, 162), (10087, 1270, 163), (2347, 3, 164), (5341, 4, 165), (1733, 6, 166), (1735, 2, 167), (1755, 2, 168), (1935, 20, 169), (1923, 6, 170), (1887, 1, 171), (1931, 7, 172), (1925, 4, 173), (10129, 10, 174), (1448, 1, 175), (1275, 2, 176), (1271, 1, 177), (4, 1, 178), (1353, 2, 179), (1349, 2, 180), (1351, 2, 181), (10010, 10, 182), (10012, 42, 183), (10045, 1, 184), (10041, 1, 185), (301, 4, 186), (5350, 1, 187), (1267, 1, 188), (8794, 4, 189), (1757, 1, 190), (2165, 1, 191), (4600, 1, 192), (4599, 1, 193), (5325, 3, 194), (5343, 3, 195), (5329, 3, 196), (5376, 2, 197), (5354, 3, 198), (5418, 2, 199), (5340, 2, 200), (10075, 7, 201), (1357, 1, 202), (1355, 1, 203), (1361, 1, 204), (10008, 20, 205), (10043, 1, 206), (313, 2432, 207), (1359, 4, 208), (946, 1, 209), (307, 5, 210), (305, 1, 211), (11323, 1, 212), (783, 1, 213), (4155, 1, 214), (3325, 1, 215), (552, 1, 216), (433, 1, 217), (784, 1, 218), (10999, 1, 219), (3787, 1, 220), (1837, 3, 221), (3853, 36, 222), (2552, 19, 223), (983, 1, 224), (2952, 1, 225), (299, 40, 226), (2713, 1, 227), (9007, 1, 228), (6291, 1, 229), (2402, 1, 230), (3016, 183, 231), (759, 1, 232), (221, 8, 233), (88, 11, 234), (33, 1, 235), (950, 224, 236), (1101, 1, 237), (1139, 1, 238), (1907, 1, 239), (11340, 1, 240), (1542, 2, 241), (8463, 1, 242), (1540, 2, 243), (4589, 1, 244), (1825, 2, 245), (1827, 1, 246), (4605, 1, 247), (4611, 1, 248), (1833, 1, 249), (1854, 2, 250), (10306, 1, 251), (2597, 1, 252), (2591, 1, 253), (2593, 1, 254), (2595, 1, 255), (1121, 5, 256), (1159, 4, 257), (1197, 4, 258), (1071, 4, 259), (1333, 2, 260), (1329, 2, 261), (8901, 1, 262), (1207, 1, 263), (1059, 13, 264), (6568, 1, 265), (1163, 1, 266), (1079, 1, 267), (1127, 1, 268), (1201, 1, 269), (1708, 1, 270), (884, 4471, 271), (1097, 1, 272), (886, 1266, 273), (882, 97, 274), (1169, 1, 275), (1133, 1, 276), (1063, 1, 277), (1061, 23, 278), (853, 1, 279), (892, 9, 280), (995, 8268409, 281), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)]
Working with widgets is interesting and fun!

The reflection.zip is my little edit of this include, feel free to check it out. Added anti randoms are from Frement's F_Antirandoms

Haxz

2014-07-24 04:57:15

Is there a way to find out which plane you are at? GetTileGlobal doesn't return plane.

Cov

2014-07-24 09:28:49

From: Haxz
Is there a way to find out which plane you are at? GetTileGlobal doesn't return plane.


In Player R_GetPlane

Haxz

2014-07-24 09:42:27

Ohh ok. Thanks! Didn't know it would be at player instead of tile.

ineedbot

2014-07-24 15:20:34

From: Haxz
Is there a way to find out which plane you are at? GetTileGlobal doesn't return plane.


R_GetPlane returns the plane.

EDIT: Ah jeez didnt see the extra page. Got ninja'd 5 hours later lol…

Here are client rev 55 hooks update. Its within my edited reflection include. Things to note, it has AL_Functions inside, so your scripts do not need to re include it.

Haxz

2014-07-24 18:02:07

From: ineedbot
R_GetPlane returns the plane.

EDIT: Ah jeez didnt see the extra page. Got ninja'd 5 hours later lol…

Here are client rev 55 hooks update. Its within my edited reflection include. Things to note, it has AL_Functions inside, so your scripts do not need to re include it.


Wow! How are you faster than the official release.

ineedbot

2014-07-24 18:05:45

From: Haxz
Wow! How are you faster than the official release.


Well, not really, It wasn't my hooks. I have no idea on getting the hooks myself or updaters. Its actually Cheddy's hooks from javahacking.

Haxz

2014-07-24 18:08:43

From: ineedbot
Well, not really, It wasn't my hooks. I have no idea on getting the hooks myself or updaters.


Whose include is this? I saw there's a lot more functions that are not in the official one, that is actually very useful!

ineedbot

2014-07-24 18:10:37

From: Haxz
Whose include is this? I saw there's a lot more functions that are not in the official one, that is actually very useful!


Its has Cheddy's hooks, Frement's Antirandoms from his F_Antirandoms, and various of my own functions I made.

Haxz

2014-07-24 18:12:49

From: ineedbot
Its has Cheddy's hooks, Frement's Antirandoms from his F_Antirandoms, and various of my own functions I made.


Why not just suggest it to get into the official reflection include? Those interaction functions are very useful IMO.

ineedbot

2014-07-24 18:15:05

From: Haxz
Why not just suggest it to get into the official reflection include? Those interaction functions are very useful IMO.


I sent a PM about that yesterday, but Krazy hasnt been online yet. It may or may not get included into the include. One major problem is that all of the hooks names changed, so If Krazy has their own updater, they may have to do some extra editing.

Haxz

2014-07-24 18:23:22

I hope I could just run an updater to update all the hooks every Thursday since its "update day" :p

Krazy seems to me is a busy guy and he's not paid to do all these, so can't be active 24/7. I understand that but maybe he can have more people to help on the dev team and updates.

Unfold

2014-07-24 19:19:49

From: Haxz
I hope I could just run an updater to update all the hooks every Thursday since its "update day" :p

Krazy seems to me is a busy guy and he's not paid to do all these, so can't be active 24/7. I understand that but maybe he can have more people to help on the dev team and updates.


If you need your hooks fast, just get them from javahacking.

Krazy_Meerkat

2014-07-25 03:31:42

The Include has been updated, please post if there are any problems with the hooks :)
The banking function was interesting ineedbot, Interaction and AntiRandoms will be updated soon but Interaction won't be getting those exact functions (adding an offset variant of R_MouseTile has been intended for some time though).. Those solvers were made a while ago and Frement will likely want them to have some more failsafes when they are merged with the include.

The Mayor

2014-07-25 03:40:28

It's great that quite a few people are willing to contribute :) Looks like this project is really turning into something!

tls

2014-07-25 21:14:58

Guys I'm available for some extended hours next week. Let's write an actual include, not this mess of code someone upchucked.

ineedbot

2014-07-25 22:11:39

From: tls
Guys I'm available for some extended hours next week. Let's write an actual include, not this mess of code someone upchucked.


I really enjoy SRL-Reflection-2's structure and code. Easy and clean. Maybe a direct port would be cool. (if possible)

tls

2014-07-25 22:47:23

From: ineedbot
I really enjoy SRL-Reflection-2's structure and code. Easy and clean. Maybe a direct port would be cool. (if possible)


It had some memory leaks in its structure. I'd rather start from scratch.

Flight

2014-07-25 22:48:32

From: tls
Guys I'm available for some extended hours next week. Let's write an actual include, not this mess of code someone upchucked.


From: ineedbot
I really enjoy SRL-Reflection-2's structure and code. Easy and clean. Maybe a direct port would be cool. (if possible)


That's a pretty good idea. I also like the layout of Reflection 2, I remember suggesting that at one time but it was shot down.

Turpinator

2014-07-26 02:01:11

From: tls
Guys I'm available for some extended hours next week. Let's write an actual include, not this mess of code someone upchucked.


[video=youtube;l2hqzEKbaIQ]https://www.youtube.com/watch?v=l2hqzEKbaIQ[/video]
BAAAAMMMMM! @R0b0t1;

Harrier

2014-07-26 08:31:37

From: klew1102
I can't figure this out input would be appreciated for the duplicate identifier error:
My Problem is that when i run a script to see if i deleted all the duplicate functions in F_AntiRandoms that are also in Wigets.simba
(Not procedure, type, or TInventoryItemArray = Array of TInventoryItem (have tried)) it gets stuck on something like Unknown identifier 'XILES_SHEARS' at line 125 which isn't a function in widgets.simba.
Ill delete the function its under anyway and it'll just continue to say error on the same line even when the line is blank if that matters tried more than once.
Thank you for any help


Just delete everything to do with f_antirandoms from the script.

klew1102

2014-07-26 08:33:55

Just delete everything to do with f_antirandoms from the script.


I just want to bot without babysitting to see if im logged out or not from a failed random
I'm having trouble with a lot of the functions beginning with the one, "R_GetWidget," and multiple ones under that. The full error is "[Error] C:\Simba\Includes\F_AntiRandoms.simba(120:10): Duplicate identifier 'R_GETWIDGET' at line 120"

Next after that is "R_GetWidgetText," full error being "[Error] C:\Simba\Includes\F_AntiRandoms.simba(130:10): Duplicate identifier 'R_GETWIDGETTEXT' at line 130"

I'll list one more - "TInventoryItem," full error being "[Error] C:\Simba\Includes\F_AntiRandoms.simba(855:3): Duplicate identifier 'TInventoryItem' at line 855"


Thanks for input

tls

2014-07-26 13:44:54

From: Flight
That's a pretty good idea. I also like the layout of Reflection 2, I remember suggesting that at one time but it was shot down.


There are several very important reasons its not a good idea.
1. The game engine is slightly different in some areas and causes structural changes to some of the files that make them ugly with a direct port.
2. SRL-Reflection-2 was supposed to be a stepping stone towards a great include that was named SRL-Reflection-2.2, and as such it has very inefficient data accessing features.
3. As a developer, we scrapped SRL-Reflection-2 a long time before even starting a different library, but I personally tried to keep it functional for everyone to use while we discussed what we were going to do differently in the next alteration.

Here are some ideas that I would like to use:
Structure the scripting-used procedures around quasi-objects. This would allow us to save the loaded object in a global array of loaded smart objects(for a farce of memory control to keep the leaks at a minimum). The objects could be the same as in the rs client or they could have a completely custom structure that we decided made more sense seeing as we are not coding with all the features of java. Here is one I started a while back but didn't finish because I ran out of time and no one I asked wanted to continue it: https://github.com/tlsdude/OSR-REF
I believe that it is imperative for any of our includes to incorporate some sort of object control and force the scripter to create, use, and delete objects….BUT there will also be procedures for those who don't won't to explicitly free their objects with global object freeing.

Another idea that I think is important, is overloaded functions. There is no need to make a lot of different names for functions like getnpc and getnpcex and getnpcexcustom. That can all be overloaded. They should only have separate names if the functionality changes, not the parameters.

Lastly, there needs to be specific people in charge of changes/additions to the include…as you might have noticed several things have been added to this version that just weren't up to par. Things must be vetted before given to the public. That's fundamental in all programming.

Brandon

2014-07-26 14:01:00

If you want to reduce memory leaks entirely, Simba would need classes which in Obj-Pascal has destructors OR RAII containers such as ScopeGuards that automatically delete a resource or calls a cleanup function when it goes out of scope.


How do you plan on doing these things without those OR without modifying SMART?

tls

2014-07-26 14:13:32

From: Brandon
If you want to reduce memory leaks entirely, Simba would need classes which in Obj-Pascal has destructors OR RAII containers such as ScopeGuards that automatically delete a resource or calls a cleanup function when it goes out of scope.


How do you plan on doing these things without those OR without modifying SMART?


https://github.com/tlsdude/OSR-REF/blob/master/Wrappers/smartref.simba

Olly

2014-07-26 14:19:38

From: tls
https://github.com/tlsdude/OSR-REF/blob/master/Wrappers/smartref.simba


https://github.com/Drags111/Kronos Now that's a reflection include. (Because of the interpeter) :P

tls

2014-07-26 14:23:15

From: Olly
https://github.com/Drags111/Kronos Now that's a reflection include. (Because of the interpeter) :P


Ya too bad it was too buggy to even load the models. It would crash all the time.

Brandon

2014-07-26 17:47:50

From: tls
https://github.com/tlsdude/OSR-REF/blob/master/Wrappers/smartref.simba



:S That's just wrappers. You can easily leak those and it's worse due to the fact that you store ALL the objects upon every call and never delete them per call, but only at the end of the script.

If the script terminates abnormally during execution, you're going to have a problem. If the user stops the script and instead presses terminate because it's taking too long to stop, again you don't have "AddOnTerminate" running and all the objects allocated throughout the entire script leaks. If the script crashes or terminates abnormally/unexpectedly for any reason at all, this would be worse off than handling them on a per call basis.


You're better off freeing the object on a per call basis. This way, if the script terminates unexpectedly, you leak at most 1 function's worth of allocations (whichever function was called last).


Though, I don't think leaks in reflection are too much of a big deal seeing as the objects allocated are roughly 4 bytes in size.. Allocating for 24 hours straight, every 100ms, you'd leak at most 3.4mb or 3456000 bytes.

Olly

2014-07-26 19:20:29

From: Brandon

Though, I don't think leaks in reflection are too much of a big deal seeing as the objects allocated are roughly 4 bytes in size.. Allocating for 24 hours straight, every 100ms, you'd leak at most 3.4mb or 3456000 bytes.


Lol, I always wondered how there have been all these leaks yet no one gets out of memory errors. :P

Cheddy

2014-07-27 06:20:11

From: Haxz
I hope I could just run an updater to update all the hooks every Thursday since its "update day" :p

Krazy seems to me is a busy guy and he's not paid to do all these, so can't be active 24/7. I understand that but maybe he can have more people to help on the dev team and updates.


I did have mine running 24/7 checking every 20 minutes but something always goes horribly wrong :/ (I.e. server crashes, class identifier breaks as there were drastic changes, internet goes down and fudges everything up) Basically the idea of constantly updating only works if you do it properly and have a VPS rather than running it on a raspberry pi haha

tls

2014-07-27 16:36:56

From: Brandon
:S That's just wrappers. You can easily leak those and it's worse due to the fact that you store ALL the objects upon every call and never delete them per call, but only at the end of the script.

If the script terminates abnormally during execution, you're going to have a problem. If the user stops the script and instead presses terminate because it's taking too long to stop, again you don't have "AddOnTerminate" running and all the objects allocated throughout the entire script leaks. If the script crashes or terminates abnormally/unexpectedly for any reason at all, this would be worse off than handling them on a per call basis.


You're better off freeing the object on a per call basis. This way, if the script terminates unexpectedly, you leak at most 1 function's worth of allocations (whichever function was called last).


Though, I don't think leaks in reflection are too much of a big deal seeing as the objects allocated are roughly 4 bytes in size.. Allocating for 24 hours straight, every 100ms, you'd leak at most 3.4mb or 3456000 bytes.


Of course you are supposed to free them when you are done with them. That is obvious. I'm talking about forcing it to be the scripter that handles some of the objects, because it forces them to actually comprehend what their function calls are doing. For example, I find an npc and keep the pointer in variable x(some kind of TNPC type). I can then call x.getLocation(), without the overhead of searching for the npc in the global npc array using the index/hash/name/id/etc. This will make scripting things like models actually do-able, in access time and manipulation time.

Cheddy

2014-07-29 11:44:25

From: tls
Of course you are supposed to free them when you are done with them. That is obvious. I'm talking about forcing it to be the scripter that handles some of the objects, because it forces them to actually comprehend what their function calls are doing. For example, I find an npc and keep the pointer in variable x(some kind of TNPC type). I can then call x.getLocation(), without the overhead of searching for the npc in the global npc array using the index/hash/name/id/etc. This will make scripting things like models actually do-able, in access time and manipulation time.

This would be a brilliant idea. I had this idea a while back but I thought I would be shot down if I mentioned it :-D This will make the api more efficient and open up more possibilities for the scripter :-)

tls

2014-07-30 00:41:18

From: fish1328
This would be a brilliant idea. I had this idea a while back but I thought I would be shot down if I mentioned it :-D This will make the api more efficient and open up more possibilities for the scripter :-)


Check out my existing include from 3 months ago: https://github.com/tlsdude/OSR-REF
It's ok but I didn't plan some things out correctly and decided to scrap all but the smart overloads.

Unfold

2014-07-30 11:59:22

Hey, are there any plans on completing the anti-randoms in reflection?

Harrier

2014-07-30 14:49:27

From: Unfold
Hey, are there any plans on completing the anti-randoms in reflection?

Till the new updater is finished, no. Once it is, I would assume the F_AntiRandoms will be added and everyone will start to update it :)

R0b0t1

2014-07-30 20:49:54

From: Turpinator

BAAAAMMMMM! @R0b0t1;


I have been summoned. Who needs insulting?

Cheddy

2014-08-01 05:43:43

May I suggest that if we are to completely re-write this we do so using proper notation, put methods in the correct place (R_getPlane should be in client) and object oriented style. I.e. There should be a record for TActor, within both TNPC and TPlayer there should be a field corresponding to the TActor super class which holds all the methods that relate to both of these subclass records (I.e. the methods that use the actor hooks). What I'm trying to say is that it would make scripting far easier if the include was written with the same structural hierarchy as runescape itself

Cheddy

2014-08-01 05:47:25

If you want my new hooks (Widget_getActionType and Widget_getType broke along with Client_DestinationX and Client_DestinationY). I will be re-writing my updater soon as it currently doesn't deob vigorously enough; will probably use my self learning class identifier that I have made for my new RS3 updater.


{ 248 Hooks Found By Cheddys Beautiful Updater }

const
ReflectionRevision = 56;


{* Boundary - 9 Hooks *}
Boundary = 'cn';
Boundary_getAlternativeOrientation = 'x';
Boundary_getAlternativeOrientation_Multiplier = -937040557;
Boundary_getBackupRenderable = 'q';
Boundary_getFlags = 'm';
Boundary_getFlags_Multiplier = 484123147;
Boundary_getID = 'l';
Boundary_getID_Multiplier = 527163423;
Boundary_getOrientation = 'g';
Boundary_getOrientation_Multiplier = -252173309;
Boundary_getPlane = 'e';
Boundary_getPlane_Multiplier = -1690874541;
Boundary_getRenderable = 'b';
Boundary_getX = 'v';
Boundary_getX_Multiplier = 775213857;
Boundary_getY = 'i';
Boundary_getY_Multiplier = 289649599;

{* Cache - 3 Hooks *}
Cache = 'fo';
Cache_getCacheableNode = 'e';
Cache_getHashTable = 'g';
Cache_getQueue = 'x';

{* CacheableNode - 2 Hooks *}
CacheableNode = 'fa';
CacheableNode_getNext = 'cf';
CacheableNode_getPrevious = 'cb';

{* Canvas - 1 Hooks *}
Canvas = 'dt';
Canvas_getComponent = 'e';

{* Character - 18 Hooks *}
Character = 'ap';
Character_getAnimation = 'ab';
Character_getAnimation_Multiplier = -664286735;
Character_getCycle = 'az';
Character_getCycle_Multiplier = -656228191;
Character_getHealth = 'au';
Character_getHealth_Multiplier = -1164683157;
Character_getHitCycles = 'ar';
Character_getHitDamages = 'at';
Character_getHitTypes = 'aw';
Character_getInteractingIndex = 'ad';
Character_getInteractingIndex_Multiplier = -260494153;
Character_getMaxHealth = 'ai';
Character_getMaxHealth_Multiplier = -1084415617;
Character_getOrientation = 'bm';
Character_getOrientation_Multiplier = 2079985171;
Character_getOverheadText = 'ah';
Character_getPositionOffset = 'n';
Character_getPositionOffset_Multiplier = 1540541504;
Character_getQueueLength = 'ba';
Character_getQueueLength_Multiplier = 1583408165;
Character_getQueueTraversed = 'bt';
Character_getQueueX = 'br';
Character_getQueueY = 'bj';
Character_getX = 'o';
Character_getX_Multiplier = 1863804961;
Character_getY = 'r';
Character_getY_Multiplier = 598559599;
Character_isInSequence = 'k';

{* ClassData - 3 Hooks *}
ClassData = 'gs';
ClassData_getBytes = 'l';
ClassData_getFields = 'x';
ClassData_getMethods = 'q';

{* Client - 55 Hooks *}
Client = 'client';
Client_getBaseX = 'client.ci';
Client_getBaseX_Multiplier = 1926356683;
Client_getBaseY = 'fj.cm';
Client_getBaseY_Multiplier = -1886502923;
Client_getCameraPitch = 'da.fn';
Client_getCameraPitch_Multiplier = -1057472213;
Client_getCameraX = 'co.fs';
Client_getCameraX_Multiplier = 1664538849;
Client_getCameraY = 'i.fd';
Client_getCameraY_Multiplier = 1289362003;
Client_getCameraYaw = 'x.fz';
Client_getCameraYaw_Multiplier = 1999047161;
Client_getCameraZ = 'u.fw';
Client_getCameraZ_Multiplier = 210529351;
Client_getClient = 'client.v';
Client_getCollisionMaps = 'client.w';
Client_getCurrentLevels = 'client.hu';
Client_getCurrentPointsX = 'cz.ay';
Client_getCurrentPointsY = 'cz.af';
Client_getCurrentViewX = 'cz.aj';
Client_getCurrentViewY = 'cz.aw';
Client_getCurrentViewZ = 'cz.at';
Client_getEnergy = 'client.je';
Client_getEnergy_Multiplier = -1988956557;
Client_getExperiences = 'client.hj';
Client_getGameCycle = 'client.d';
Client_getGameCycle_Multiplier = 1929541161;
Client_getGameState = 'client.j';
Client_getGameState_Multiplier = 998026257;
Client_getGroundItems = 'client.hc';
Client_getLocalNPCs = 'client.bj';
Client_getLocalPlayer = 'f.hb';
Client_getLocalPlayers = 'client.gz';
Client_getLoginState = 'ao.ap';
Client_getLoginState_Multiplier = 1404256151;
Client_getLowestCameraPitch = 'client.fh';
Client_getLowestCameraPitch_Multiplier = 772568593;
Client_getMapAngle = 'client.fp';
Client_getMapAngle_Multiplier = 874203131;
Client_getMapOffset = 'client.de';
Client_getMapOffset_Multiplier = -334762247;
Client_getMapScale = 'client.dm';
Client_getMapScale_Multiplier = -1281832857;
Client_getMaxLevels = 'client.hm';
Client_getMenuActions = 'client.ik';
Client_getMenuCount = 'client.im';
Client_getMenuCount_Multiplier = -1513516277;
Client_getMenuHeight = 'd.iy';
Client_getMenuHeight_Multiplier = 2132142411;
Client_getMenuOptions = 'client.ip';
Client_getMenuWidth = 'cd.if';
Client_getMenuWidth_Multiplier = 726557981;
Client_getMenuX = 'cv.hd';
Client_getMenuX_Multiplier = 658216925;
Client_getMenuY = 'ad.hl';
Client_getMenuY_Multiplier = 815311505;
Client_getMouseX = 'dq.g';
Client_getMouseX_Multiplier = -1050677781;
Client_getMouseY = 'dq.b';
Client_getMouseY_Multiplier = 1333315363;
Client_getNPCIndices = 'client.bu';
Client_getPassword = 'ao.aq';
Client_getPlane = 'eb.hf';
Client_getPlane_Multiplier = -1018405511;
Client_getPlayerSettings = 'en.v';
Client_getRegion = 'g.df';
Client_getTileHeights = 'b.e';
Client_getTileSettings = 'b.v';
Client_getUsername = 'ao.af';
Client_getWeight = 'client.jx';
Client_getWeight_Multiplier = -1141465513;
Client_getWidgetHeights = 'client.lz';
Client_getWidgetNodeTable = 'client.jz';
Client_getWidgetPositionsX = 'client.lp';
Client_getWidgetPositionsY = 'client.lg';
Client_getWidgets = 'ex.e';
Client_getWidgetSettings = 'en.i';
Client_getWidgetWidths = 'client.ll';
Client_isMenuOpen = 'client.hv';

{* CollisionMap - 5 Hooks *}
CollisionMap = 'gb';
CollisionMap_getFlags = 'ac';
CollisionMap_getHeight = 'av';
CollisionMap_getHeight_Multiplier = 36001403;
CollisionMap_getOffsetX = 'ao';
CollisionMap_getOffsetX_Multiplier = -1196359135;
CollisionMap_getOffsetY = 'am';
CollisionMap_getOffsetY_Multiplier = 1900422479;
CollisionMap_getWidth = 'z';
CollisionMap_getWidth_Multiplier = 561162925;

{* FloorDecoration - 6 Hooks *}
FloorDecoration = 'ch';
FloorDecoration_getFlags = 'b';
FloorDecoration_getFlags_Multiplier = -1600600389;
FloorDecoration_getID = 'x';
FloorDecoration_getID_Multiplier = -951274947;
FloorDecoration_getPlane = 'e';
FloorDecoration_getPlane_Multiplier = -1391409611;
FloorDecoration_getRenderable = 'g';
FloorDecoration_getX = 'v';
FloorDecoration_getX_Multiplier = -167860585;
FloorDecoration_getY = 'i';
FloorDecoration_getY_Multiplier = -849579211;

{* HashTable - 5 Hooks *}
HashTable = 'fx';
HashTable_getCurrent = 'g';
HashTable_getHead = 'i';
HashTable_getIndex = 'x';
HashTable_getIndex_Multiplier = 1;
HashTable_getNodes = 'v';
HashTable_getSize = 'e';
HashTable_getSize_Multiplier = 1;

{* Item - 2 Hooks *}
Item = 'n';
Item_getID = 'e';
Item_getID_Multiplier = -1341638203;
Item_getStackSize = 'v';
Item_getStackSize_Multiplier = 238113971;

{* ItemComposite - 9 Hooks *}
ItemComposite = 'ai';
ItemComposite_getGroundActions = 'k';
ItemComposite_getModelColours = 's';
ItemComposite_getModelSizeX = 'ar';
ItemComposite_getModelSizeX_Multiplier = 725725615;
ItemComposite_getModelSizeY = 'az';
ItemComposite_getModelSizeY_Multiplier = -2135039455;
ItemComposite_getModelSizeZ = 'au';
ItemComposite_getModelSizeZ_Multiplier = 332877193;
ItemComposite_getName = 'u';
ItemComposite_getNewModelColours = 'f';
ItemComposite_getWidgetActions = 'n';
ItemComposite_isMembers = 't';

{* ItemLayer - 8 Hooks *}
ItemLayer = 'cs';
ItemLayer_getBottomRenderable = 'g';
ItemLayer_getHeight = 'l';
ItemLayer_getHeight_Multiplier = -2104003827;
ItemLayer_getID = 'q';
ItemLayer_getID_Multiplier = -1822308849;
ItemLayer_getMiddleRenderable = 'x';
ItemLayer_getPlane = 'e';
ItemLayer_getPlane_Multiplier = 628016659;
ItemLayer_getTopRenderable = 'b';
ItemLayer_getX = 'v';
ItemLayer_getX_Multiplier = 252390051;
ItemLayer_getY = 'i';
ItemLayer_getY_Multiplier = 1590436751;

{* LinkedList - 2 Hooks *}
LinkedList = 'fc';
LinkedList_getHead = 'e';
LinkedList_getTail = 'v';

{* Model - 14 Hooks *}
Model = 'cz';
Model_getIndicesLength = 'm';
Model_getIndicesLength_Multiplier = 1;
Model_getIndicesX = 'u';
Model_getIndicesY = 's';
Model_getIndicesZ = 'f';
Model_getTexturedIndicesX = 'p';
Model_getTexturedIndicesY = 'w';
Model_getTexturedIndicesZ = 'y';
Model_getTexturedVerticesX = 'r';
Model_getTexturedVerticesY = 't';
Model_getTexturedVerticesZ = 'k';
Model_getVerticesLength = 'x';
Model_getVerticesLength_Multiplier = 1;
Model_getVerticesX = 'b';
Model_getVerticesY = 'q';
Model_getVerticesZ = 'l';

{* Mouse - 0 Hooks *}
Mouse = 'dq';

{* Node - 3 Hooks *}
Node = 'gc';
Node_getNext = 'eh';
Node_getPrevious = 'et';
Node_getUID = 'de';

{* NPC - 1 Hooks *}
NPC = 'ac';
NPC_getComposite = 'e';

{* NPCComposite - 4 Hooks *}
NPCComposite = 'an';
NPCComposite_getActions = 'o';
NPCComposite_getID = 'x';
NPCComposite_getID_Multiplier = -698898793;
NPCComposite_getLevel = 't';
NPCComposite_getLevel_Multiplier = 546828601;
NPCComposite_getName = 'b';

{* ObjectComposite - 14 Hooks *}
ObjectComposite = 'ay';
ObjectComposite_getActions = 'am';
ObjectComposite_getAnimation = 'n';
ObjectComposite_getAnimation_Multiplier = 775807469;
ObjectComposite_getID = 'm';
ObjectComposite_getID_Multiplier = 162233577;
ObjectComposite_getModelColours = 'h';
ObjectComposite_getModelSizeX = 'ah';
ObjectComposite_getModelSizeX_Multiplier = 1835626283;
ObjectComposite_getModelSizeY = 'an';
ObjectComposite_getModelSizeY_Multiplier = -759918767;
ObjectComposite_getModelSizeZ = 'ay';
ObjectComposite_getModelSizeZ_Multiplier = 2056296707;
ObjectComposite_getModifiedModelColours = 'y';
ObjectComposite_getName = 'f';
ObjectComposite_getSizeX = 'j';
ObjectComposite_getSizeX_Multiplier = -350214567;
ObjectComposite_getSizeY = 'c';
ObjectComposite_getSizeY_Multiplier = -1891926785;
ObjectComposite_getTranslateX = 'ah';
ObjectComposite_getTranslateX_Multiplier = 1835626283;
ObjectComposite_getTranslateY = 'an';
ObjectComposite_getTranslateY_Multiplier = -759918767;
ObjectComposite_getTranslateZ = 'ay';
ObjectComposite_getTranslateZ_Multiplier = 2056296707;

{* Player - 3 Hooks *}
Player = 'i';
Player_getCombatLevel = 'x';
Player_getCombatLevel_Multiplier = 1267881449;
Player_getModel = 'p';
Player_getName = 'e';

{* Projectile - 17 Hooks *}
Projectile = 'q';
Projectile_getCycle = 'l';
Projectile_getCycle_Multiplier = -201790113;
Projectile_getHeight = 'x';
Projectile_getHeight_Multiplier = 1442529535;
Projectile_getHeightOffset = 'a';
Projectile_getRotationX = 'o';
Projectile_getRotationX_Multiplier = -1695650567;
Projectile_getRotationY = 'r';
Projectile_getRotationY_Multiplier = 58041145;
Projectile_getScalar = 'c';
Projectile_getSlope = 'm';
Projectile_getSlope_Multiplier = -166938597;
Projectile_getSpeedX = 'h';
Projectile_getSpeedY = 'j';
Projectile_getSpeedZ = 'd';
Projectile_getStartX = 'i';
Projectile_getStartX_Multiplier = 1684595455;
Projectile_getStartY = 'g';
Projectile_getStartY_Multiplier = 394443799;
Projectile_getTargetDistance = 'u';
Projectile_getTargetDistance_Multiplier = 2048319353;
Projectile_getTargetID = 's';
Projectile_getTargetID_Multiplier = 1164776619;
Projectile_getX = 'p';
Projectile_getY = 'w';
Projectile_isMoving = 'f';

{* Queue - 1 Hooks *}
Queue = 'fi';
Queue_getHead = 'e';

{* Region - 2 Hooks *}
Region = 'cj';
Region_getGroundObjects = 'm';
Region_getGroundTiles = 'b';

{* Renderable - 1 Hooks *}
Renderable = 'bu';
Renderable_getHeight = 'cn';
Renderable_getHeight_Multiplier = -1487602713;

{* SceneObject - 12 Hooks *}
SceneObject = 'cx';
SceneObject_getFlags = 'w';
SceneObject_getFlags_Multiplier = 370079205;
SceneObject_getID = 'p';
SceneObject_getID_Multiplier = -678823417;
SceneObject_getOffsetX = 'l';
SceneObject_getOffsetX_Multiplier = 1301598393;
SceneObject_getOffsetY = 'u';
SceneObject_getOffsetY_Multiplier = 627714753;
SceneObject_getOrientation = 'b';
SceneObject_getOrientation_Multiplier = 1223886039;
SceneObject_getPlane = 'e';
SceneObject_getPlane_Multiplier = 545832231;
SceneObject_getRelativeX = 'q';
SceneObject_getRelativeX_Multiplier = -663829119;
SceneObject_getRelativeY = 'm';
SceneObject_getRelativeY_Multiplier = 131709373;
SceneObject_getRenderable = 'x';
SceneObject_getX = 'i';
SceneObject_getX_Multiplier = -691439605;
SceneObject_getY = 'g';
SceneObject_getY_Multiplier = 183837179;
SceneObject_getZ = 'v';
SceneObject_getZ_Multiplier = 2067512927;

{* Stream - 2 Hooks *}
Stream = 'dk';
Stream_getOffset = 'v';
Stream_getOffset_Multiplier = -1354992167;
Stream_getPayload = 'e';

{* StringStorage - 0 Hooks *}
StringStorage = 'ep';

{* Tile - 8 Hooks *}
Tile = 'ca';
Tile_getBoundary = 'q';
Tile_getFloorDecoration = 'm';
Tile_getItemLayer = 'u';
Tile_getPlane = 'g';
Tile_getPlane_Multiplier = 547928651;
Tile_getRSObjects = 'f';
Tile_getWall = 'l';
Tile_getX = 'v';
Tile_getX_Multiplier = 764314491;
Tile_getY = 'i';
Tile_getY_Multiplier = -1401052379;

{* Wall - 11 Hooks *}
Wall = 'ck';
Wall_getBackupRenderable = 'm';
Wall_getFlags = 's';
Wall_getFlags_Multiplier = -506221315;
Wall_getHeight = 'x';
Wall_getHeight_Multiplier = 1338837553;
Wall_getID = 'u';
Wall_getID_Multiplier = -334757297;
Wall_getOrientation = 'g';
Wall_getOrientation_Multiplier = -847305749;
Wall_getPlane = 'e';
Wall_getPlane_Multiplier = 624801845;
Wall_getRelativeX = 'b';
Wall_getRelativeX_Multiplier = -1589564543;
Wall_getRelativeY = 'q';
Wall_getRelativeY_Multiplier = -1421118309;
Wall_getRenderable = 'l';
Wall_getX = 'v';
Wall_getX_Multiplier = -1484786817;
Wall_getY = 'i';
Wall_getY_Multiplier = 2065878649;

{* Widget - 26 Hooks *}
Widget = 'ex';
Widget_getActions = 'bi';
Widget_getWidth = 'o';
Widget_getWidth_Multiplier = 92871183;
Widget_getBorderThickness = 'at';
Widget_getBorderThickness_Multiplier = -2118347447;
Widget_getBoundsIndex = 'dq';
Widget_getBoundsIndex_Multiplier = 1496016673;
Widget_getChildren = 'dp';
Widget_getContentIDs = 'dh';
Widget_getID = 'p';
Widget_getID_Multiplier = 628348239;
Widget_getIndex = 'w';
Widget_getIndex_Multiplier = -1843358029;
Widget_getItemID = 'db';
Widget_getItemID_Multiplier = 1802203577;
Widget_getItemStack = 'di';
Widget_getItemStack_Multiplier = -82348753;
Widget_getName = 'da';
Widget_getOpcodes = 'dw';
Widget_getParent = 'ba';
Widget_getParentID = 't';
Widget_getParentID_Multiplier = -2032118225;
Widget_getRelativeX = 'y';
Widget_getRelativeX_Multiplier = 432723653;
Widget_getRelativeY = 'a';
Widget_getRelativeY_Multiplier = 1728909731;
Widget_getScrollX = 'n';
Widget_getScrollX_Multiplier = -637248725;
Widget_getScrollY = 'z';
Widget_getScrollY_Multiplier = 1586549073;
Widget_getSpritesX = 'bk';
Widget_getSpritesY = 'bq';
Widget_getStackSizes = 'df';
Widget_getText = 'bd';
Widget_getHeight = 'r';
Widget_getHeight_Multiplier = 866589371;
Widget_getX = 'd';
Widget_getX_Multiplier = 598700569;
Widget_getY = 'x';
Widget_getY_Multiplier = -1267767979;
Widget_isHidden = 'k';

{* WidgetNode - 1 Hooks *}
WidgetNode = 'g';
WidgetNode_getID = 'e';
WidgetNode_getID_Multiplier = 1490475817;

champrocks2

2014-08-01 06:51:42

when the update is comming?

yente666

2014-08-01 12:13:28

Is there any update incoming? I'd love to test out a script. :)

Krazy_Meerkat

2014-08-02 01:04:36

Frement's LAPE include has been on GitHub for ages now, I don't have enough arms to update this include, work on a new updater, maintain hooks and also re-write everything with documentation ok. Anyone impatient about a re-write is welcome to finish it.

tls

2014-08-02 01:13:29

I am not going to work on Frement's include.

yente666

2014-08-02 05:01:11

From: Krazy_Meerkat
Frement's LAPE include has been on GitHub for ages now, I don't have enough arms to update this include, work on a new updater, maintain hooks and also re-write everything with documentation ok. Anyone impatient about a re-write is welcome to finish it.


Great job Krazy! I didn't want to come over as a leacher that keeps begging for stuff.
I'm trying to learn programming for Simba now, so who knows one day I can help.. :)

ineedbot

2014-08-04 20:03:53

Soo, is anyone developing any of their own forks of reflection? I was thinking of making something of my own. (from looking off reflection-2's) Try and port all the code to a useable form for OSRS. Thanks to Cheddy's hooks, I will try make use of the all. idk if my fork will be as good as others, but I'll definitely try.

It'll be good practice as I like learn new things.

tls

2014-08-04 20:51:42

From: ineedbot
Soo, is anyone developing any of their own forks of reflection? I was thinking of making something of my own. (from looking off reflection-2's) Try and port all the code to a useable form for OSRS. Thanks to Cheddy's hooks, I will try make use of the all. idk if my fork will be as good as others, but I'll definitely try.

It'll be good practice as I like learn new things.


I am. Working on making it pretty from the bottom up.

ineedbot

2014-08-04 23:35:15

From: tls
I am. Working on making it pretty from the bottom up.


Sweet, I cant wait to see it complete!

So far I came up with this
type TRSPlayer = record
Name, OverheadText : String;
Level, CurrentHP, MaxHP, Animation, Interacting, Orientation, Plane : Integer;
InCombat : boolean;
Tile, TileWalkQueue : TPoint;
end;
TRSPlayerArray = array of TRSPlayer;

function R_GetAllRSPlayers: TRSPlayerArray;
var
i, j, PlayerCount, Ref, PlayerName, Overhead, x, y, LoopCycle : Integer;
begin
PlayerCount := SmartGetFieldArraySize(SmartCurrentTarget, 0, Client_getLocalPlayers, 0);
for i:=0 to PlayerCount-1 do begin
Ref := SmartGetFieldArrayObject(SmartCurrentTarget, 0, Client_getLocalPlayers, i);

if (Ref <= 0) then
Continue;
Inc(j);
SetLength(Result, j);

PlayerName := SmartGetFieldObject(SmartCurrentTarget, Ref, Player_getName);
Overhead := SmartGetFieldObject(SmartCurrentTarget, Ref, Character_getOverheadText);
x := SmartGetFieldInt(SmartCurrentTarget, 0, Client_getBaseX)*Client_getBaseX_Multiplier;
y := SmartGetFieldInt(SmartCurrentTarget, 0, Client_getBaseY)*Client_getBaseY_Multiplier;
LoopCycle := SmartGetFieldInt(SmartCurrentTarget, 0, Client_getGameCycle)*Client_getGameCycle_Multiplier;
with Result[j-1] do begin
Level := SmartGetFieldInt(SmartCurrentTarget, Ref, Player_getCombatLevel)*Player_getCombatLevel_Multiplier;
CurrentHP := SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getHealth)*Character_getHealth_Multiplier;
MaxHP := SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getMaxHealth)*Character_getMaxHealth_Multiplier;
Animation := SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getAnimation)*Character_getAnimation_Multiplier;
Interacting := SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getInteractingIndex)*Character_getInteractingIndex_Multiplier;
Orientation := Round(FixD(180 + (SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getOrientation)*Character_getOrientation_Multiplier*45)/2048));
Plane := SmartGetFieldInt(SmartCurrentTarget, 0, Client_getPlane)*Client_getPlane_Multiplier; //uses client's plane it was found on...
Name := R_GetJavaString(PlayerName, 512);
OverheadText := R_GetJavaString(Overhead, 512);
InCombat := (SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getCycle) * Character_getCycle_Multiplier) > LoopCycle;
Tile := Point(x + (SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getX) * Character_getX_Multiplier) div 128, y + (SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getY) * Character_getY_Multiplier) div 128);
TileWalkQueue := Point(SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getQueueX), SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getQueueY));
end;
SmartFreeObject(SmartCurrentTarget, PlayerName);
SmartFreeObject(SmartCurrentTarget, Ref);
SmartFreeObject(SmartCurrentTarget, Overhead);
end;
end;

All the hooks work and everything is accurate, however CurrentHP and MaxHP return 0 for some reason. Also I'm unsure if TileWalkQueue is doing anything. Only returning (-1, -1)…

tls

2014-08-04 23:46:26

If its -1,-1 then they aren't walking anywhere. God we were so inefficient.

ineedbot

2014-08-05 17:26:46

Well I made some more progress…
type TRSNPC = record
Name, OverheadText : String;
Actions : TStringArray;
ID, Index, Level, CurrentHP, MaxHP, Animation, Interacting, Orientation, Plane : Integer;
InCombat : boolean;
Tile, TileWalkQueue : TRSTile;
end;
TRSNPCArray = array of TRSNPC;

function R_GetRSNPCActions(NPC_Comp:Integer):TStringArray;
var i, j, actionCount, _string : integer;
begin
ActionCount := SmartGetFieldArraySize(SmartCurrentTarget, NPC_Comp, NPCComposite_getActions, 0);
for i:=0 to ActionCount do begin
_string := SmartGetFieldArrayObject(SmartCurrentTarget, NPC_Comp, NPCComposite_getActions, i);
if(_string <= 0)then
continue;
inc(j);
SetLength(Result, j);
result[j-1] := trim(R_GetJavaString(_string, 512));
SmartFreeObject(SmartCurrentTarget, _string);
end;
end;

function R_GetAllRSNPCs: TRSNPCArray;
var
i, j, NPCCount, Ref, Def, NPCName, Overhead, x, y, LoopCycle : Integer;
begin
NPCCount := SmartGetFieldArraySize(SmartCurrentTarget, 0, Client_getLocalNPCs, 0);
for i:=0 to NPCCount-1 do begin
Ref := SmartGetFieldArrayObject(SmartCurrentTarget, 0, Client_getLocalNPCs, i);
if (Ref <= 0) then
Continue;
Def := SmartGetFieldObject(SmartCurrentTarget, Ref, NPC_getComposite);

Inc(j);
SetLength(Result, j);

NPCName := SmartGetFieldObject(SmartCurrentTarget, Def, NPCComposite_getName);
Overhead := SmartGetFieldObject(SmartCurrentTarget, Ref, Character_getOverheadText);
x := SmartGetFieldInt(SmartCurrentTarget, 0, Client_getBaseX)*Client_getBaseX_Multiplier;
y := SmartGetFieldInt(SmartCurrentTarget, 0, Client_getBaseY)*Client_getBaseY_Multiplier;
LoopCycle := SmartGetFieldInt(SmartCurrentTarget, 0, Client_getGameCycle)*Client_getGameCycle_Multiplier;
with Result[j-1] do begin
Actions := R_GetRSNPCActions(Def);
Plane := SmartGetFieldInt(SmartCurrentTarget, 0, Client_getPlane)*Client_getPlane_Multiplier; //uses client's plane it was found on...
Interacting := SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getInteractingIndex)*Character_getInteractingIndex_Multiplier;
Orientation := Round(FixD(180 + (SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getOrientation)*Character_getOrientation_Multiplier*45)/2048));
CurrentHP := SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getHealth)*Character_getHealth_Multiplier;
MaxHP := SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getMaxHealth)*Character_getMaxHealth_Multiplier;
Level := SmartGetFieldInt(SmartCurrentTarget, Def, NPCComposite_getLevel) * NPCComposite_getLevel_Multiplier;;
InCombat := (SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getCycle) * Character_getCycle_Multiplier) > LoopCycle;
Tile := Point(x + (SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getX) * Character_getX_Multiplier) div 128, y + (SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getY) * Character_getY_Multiplier) div 128);
TileWalkQueue := Point(SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getQueueX), SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getQueueY));
Index := i;
Name := trim(R_GetJavaString(NPCName, 512));
OverheadText := trim(R_GetJavaString(Overhead, 512));
Animation:= SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getAnimation) * Character_getAnimation_Multiplier;
ID := SmartGetFieldInt(SmartCurrentTarget, Def, NPCComposite_getID) * NPCComposite_getID_Multiplier;
end;
SmartFreeObject(SmartCurrentTarget, NPCName);
SmartFreeObject(SmartCurrentTarget, Ref);
SmartFreeObject(SmartCurrentTarget, Def);
SmartFreeObject(SmartCurrentTarget, Overhead);
end;
end;

EDIT:
After banning like 10 mules I made in 10 seconds while using OSBot for its interface explorer. I finally got what widget and child IDs are for the equipment tab.

function R_GetRSEquipItemAtSlot(_Slot:integer):TRSEquipItem;
var
_Equipment, _Inventory, _InventorySlot, _ItemID, _ItemQuantity, j{, _Name}: Integer;
_items : TRSEquipItemArray;
begin
GameTab(tab_Equip);
_Equipment := R_GetWidgetChildRef(387, _Slot);//_slot can be between 6 and 16
for _InventorySlot := 0 to 2 do begin
_Inventory := SmartGetFieldArrayObject(SmartCurrentTarget, _Equipment, Widget_getChildren, _InventorySlot);
_ItemID := SmartGetFieldInt(SmartCurrentTarget, _Inventory, Widget_getItemID)*Widget_getItemID_Multiplier;
inc(j);
SetLength(_items, j);
_ItemQuantity := SmartGetFieldInt(SmartCurrentTarget, _Inventory, Widget_getItemStack)*Widget_getItemStack_Multiplier;
//_Name := SmartGetFieldArrayObject(SmartCurrentTarget, _Inventory, Widget_getName, _InventorySlot);
with _items[j-1] do begin
ID := _ItemID;
StackSize := _ItemQuantity;
Slot := _Slot;
//Name := Trim(R_GetJavaString(_Name, 512));
//Actions := R_GetRSInvItemActions(_Inventory, _InventorySlot);
end;
//SmartFreeObject(SmartCurrentTarget, _Name);
end;
SmartFreeObject(SmartCurrentTarget, _Inventory);
result := Null_RSEquipItem;
for j:=0 to high(_items) do begin
if (_items[j].ID > 0)then begin
result := _items[j];
end;
end;
end;
Code is really half-assed right now, but its a start.
Couple problems, it only 'updates' the widget when the tab is current selected (known since Reflection-2), small problem but its ok…

But one big problem is, it cannot detect null slots. Only if they were null'd to begin with. Say you start off with an axe in the weapon slot, then remove it from the slot, reflection will still say that the item is still in that slot until you equip a differ item in that slot…


EDIT2:
Thread/forum is really dead… Anyway, I'm completing my include… Everything is working just fine. All I have to do left is antirandoms. I have the majority of the antirandoms working, like molly and prison. However I need testing… If anyone can donate an account stuck in a random, shoot me a PM. I'll only use for antirandom development.


Oh yeah, if any1 has the NPCComposite_getHeight hook and multiplier for this current osrs rev can you please send me it? I need it to check the strange plant's height for when its able to be 'picked'.

Krazy_Meerkat

2014-08-16 01:00:57

If anyone else wants to post about their own includes they can do it elsewhere.

I'm updating the hooks, as usual let me know if there are any issues..

Cage

2014-08-16 08:40:07

Thanks for the update. I appreciate it.

Cheddy

2014-08-16 15:42:54

From: ineedbot
Sweet, I cant wait to see it complete!

So far I came up with this
type TRSPlayer = record
Name, OverheadText : String;
Level, CurrentHP, MaxHP, Animation, Interacting, Orientation, Plane : Integer;
InCombat : boolean;
Tile, TileWalkQueue : TPoint;
end;
TRSPlayerArray = array of TRSPlayer;

function R_GetAllRSPlayers: TRSPlayerArray;
var
i, j, PlayerCount, Ref, PlayerName, Overhead, x, y, LoopCycle : Integer;
begin
PlayerCount := SmartGetFieldArraySize(SmartCurrentTarget, 0, Client_getLocalPlayers, 0);
for i:=0 to PlayerCount-1 do begin
Ref := SmartGetFieldArrayObject(SmartCurrentTarget, 0, Client_getLocalPlayers, i);

if (Ref <= 0) then
Continue;
Inc(j);
SetLength(Result, j);

PlayerName := SmartGetFieldObject(SmartCurrentTarget, Ref, Player_getName);
Overhead := SmartGetFieldObject(SmartCurrentTarget, Ref, Character_getOverheadText);
x := SmartGetFieldInt(SmartCurrentTarget, 0, Client_getBaseX)*Client_getBaseX_Multiplier;
y := SmartGetFieldInt(SmartCurrentTarget, 0, Client_getBaseY)*Client_getBaseY_Multiplier;
LoopCycle := SmartGetFieldInt(SmartCurrentTarget, 0, Client_getGameCycle)*Client_getGameCycle_Multiplier;
with Result[j-1] do begin
Level := SmartGetFieldInt(SmartCurrentTarget, Ref, Player_getCombatLevel)*Player_getCombatLevel_Multiplier;
CurrentHP := SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getHealth)*Character_getHealth_Multiplier;
MaxHP := SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getMaxHealth)*Character_getMaxHealth_Multiplier;
Animation := SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getAnimation)*Character_getAnimation_Multiplier;
Interacting := SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getInteractingIndex)*Character_getInteractingIndex_Multiplier;
Orientation := Round(FixD(180 + (SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getOrientation)*Character_getOrientation_Multiplier*45)/2048));
Plane := SmartGetFieldInt(SmartCurrentTarget, 0, Client_getPlane)*Client_getPlane_Multiplier; //uses client's plane it was found on...
Name := R_GetJavaString(PlayerName, 512);
OverheadText := R_GetJavaString(Overhead, 512);
InCombat := (SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getCycle) * Character_getCycle_Multiplier) > LoopCycle;
Tile := Point(x + (SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getX) * Character_getX_Multiplier) div 128, y + (SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getY) * Character_getY_Multiplier) div 128);
TileWalkQueue := Point(SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getQueueX), SmartGetFieldInt(SmartCurrentTarget, Ref, Character_getQueueY));
end;
SmartFreeObject(SmartCurrentTarget, PlayerName);
SmartFreeObject(SmartCurrentTarget, Ref);
SmartFreeObject(SmartCurrentTarget, Overhead);
end;
end;

All the hooks work and everything is accurate, however CurrentHP and MaxHP return 0 for some reason. Also I'm unsure if TileWalkQueue is doing anything. Only returning (-1, -1)…

CurrentHp and MaxHp only provide data when you are in combat. Tile walk queue only holds data when you are walking. Personally the best way to tell if a character is walking is the following:

function R_IsWalking(npc: TCharacter):boolean;
begin
Result := (SmartGetFieldInt(SmartCurrentTarget, npc.objectHash, Character_getQueueLength) * Character_getQueueLength_Multiplier) > 0;
end;

iEatApples

2014-08-19 17:32:15

From: lotery33
I'm getting the
Exception in Script: Operator expected at line 446, column 3 in file "C:\Simba\Includes\SRL-OSR\SRL\Reflection\Core\Tiles.simba"
error, I downloaded the latest version


From: Harrier
Read the instructions for setting up OSRS-SRL. You missed a step :p


I'm sorry to ask, but I'm getting the exact same error and I just can't find what I've missed. Went over several guides multiple times. Could anyone possibly help me further? :\

Edit; fixed. stupid me.

Harrier

2014-08-19 17:39:12

From: iEatApples
I'm sorry to ask, but I'm getting the exact same error and I just can't find what I've missed. Went over several guides multiple times. Could anyone possibly help me further? :\

Interpreter step.

iEatApples

2014-08-19 18:31:44

From: Harrier
Interpreter step.


Found that a few moments ago, been stuck on that simple thing for about 2 days and found the solution 5 minutes after I posted that. lol..

ineedbot

2014-08-20 16:33:55

Heres a cool idea that i incorperated into my include

      _players := R_GetAllRSPlayers;
myIndex := R_GetClientIndex;
myName := R_GetMyName;
for i:=0 to high(_players) do begin
if(pos(lowercase(myName), lowercase(_players[i].OverheadText)) > 0)then begin
playSound( 'C:\Windows\Media\Windows Notify Messaging.wav' );
writeln('Player: '''+_players[i].name+''' said your name! They said: '''+_players[i].OverheadText+'''');
end else begin
if(_players[i].Interacting = myIndex)then begin
playSound( 'C:\Windows\Media\Windows Notify Messaging.wav' );
writeln('Player: '''+_players[i].name+''' is following you!');
end else begin
FoundCase := false;
for h:=0 to high(R_NotifyOnPlayerTalkList) do begin
if(pos(lowercase(R_NotifyOnPlayerTalkList[h]), lowercase(_players[i].OverheadText)) > 0) and not FoundCase then begin
playSound( 'C:\Windows\Media\Windows Notify Messaging.wav' );
writeln('Player: '''+_players[i].name+''' said the word '''+R_NotifyOnPlayerTalkList[h]+'''! They said: '''+_players[i].OverheadText+'''');
FoundCase := true;
end;
end;
end;
end;
end;

Player: '****' said your name! They said: '*** hello??'
Player: '****' said your name! They said: '*** are you there?'
Player: '***' said the word 'bot'! They said: 'Are you a bot?'

It'll even get people following you. Ofc you need a working TPlayer handle with hooks working.

goswag

2014-08-20 16:45:31

Greetings fellow OSRS players! I've noticed a problem when i run the Indeedbot's AIO fisher at monkfish, it just blocks itself. I've spoke with the creator and told me nothing is wrong with the script and that i should post this here, as it is something wrong with the include. Anyone can help here?

Harrier

2014-08-20 17:08:33

From: goswag
Greetings fellow OSRS players! I've noticed a problem when i run the Indeedbot's AIO fisher at monkfish, it just blocks itself. I've spoke with the creator and told me nothing is wrong with the script and that i should post this here, as it is something wrong with the include. Anyone can help here?

You're not been very informative to the problem. Either try and explain it or get the scripter to explain it please.

ineedbot

2014-08-20 17:29:00

From: goswag
Greetings fellow OSRS players! I've noticed a problem when i run the Indeedbot's AIO fisher at monkfish, it just blocks itself. I've spoke with the creator and told me nothing is wrong with the script and that i should post this here, as it is something wrong with the include. Anyone can help here?


Ive been doing little to no work on my scripts, ive been working on making my own include for reflection (mainly just the anti-random part of it (most randoms are complete), the rest is complete) (idk if i should even release it…). But as far as I know the script is full functionable if this include is working.

Now, when you mean by 'blocked' do you mean the randoms events? If so, you came to the right place to talk about it. Scripts are not responsible for solving the random events, it is the include's job. Correct me if im wrong but, once Krazy gots the updater perfected, he will work on the random solvers.

Krazy_Meerkat

2014-08-21 00:49:41

Ok, I'm looking into it.. It would be nice to post some info about the problem in future.
Edit: I had a look and I couldn't really find anything wrong.. I can't tell if it's a problem with the script or include, give me a better description of what you mean by "it just blocks itself".. My scripts are working fine.
From: goswag
I've spoke with the creator and told me nothing is wrong with the script and that i should post this here

From: ineedbot
Ive been doing little to no work on my scripts, ive been working on making my own include for reflection.. Now, when you mean by 'blocked' do you mean the randoms events?

ineedbot, I don't appreciate the way you blamed this include when you clearly didn't even confirm what the problem was for this poor guy.

On the topic of the updater, we now have Control Flow:
{*Starting Deob*
* Starting Method Removal*
* 2457/4158 methods removed*
* Method Removal Finished*
* Starting Control Flow Correction*
* 1466 methods constructed*
* 2991 methods removed*
* Control Flow Correction Finished*
* Starting Arithmetic Deob*
* 150/212 expressions modified*
* Arithmetic Deob Finished*
* Creating Jar*
* Finished Jar*
*Ending Deob*}
That marks a big milestone for the updater because now, we're ready to analyse! This takes us one step closer to expanding the Anti-Randoms ;)

goswag

2014-08-21 09:49:33

Hey! Thanks for the reply guys, appreciate it! By blocking itself i mean that after i run the script while i am at the Piscatoris Fishing colony it just walks to the fishing spots and just stops there, it does nothing more. And it says: "Walking to the fishing spot..".

goswag

2014-08-21 09:54:09

From: ineedbot
Ive been doing little to no work on my scripts, ive been working on making my own include for reflection (mainly just the anti-random part of it (most randoms are complete), the rest is complete) (idk if i should even release it…). But as far as I know the script is full functionable if this include is working.

Now, when you mean by 'blocked' do you mean the randoms events? If so, you came to the right place to talk about it. Scripts are not responsible for solving the random events, it is the include's job. Correct me if im wrong but, once Krazy gots the updater perfected, he will work on the random solvers.



No it's not the randoms. When i run it it does walk to the fishing spot then it just stands there

Cheddy

2014-09-04 11:18:39

Inb4 anyone asks, new hooks =)


{ 209 Hooks Found By Cheddys Beautiful Updater }

const
ReflectionRevision = 58;


{* BoundaryObject - 9 Hooks *}
BoundaryObject = 'cj';
BoundaryObject_getAlternativeOrientation = 'd';
BoundaryObject_getAlternativeOrientation_Multiplier = -1515667875;
BoundaryObject_getBackupRenderable = 'v';
BoundaryObject_getFlags = 'j';
BoundaryObject_getFlags_Multiplier = 925559837;
BoundaryObject_getID = 'z';
BoundaryObject_getID_Multiplier = -101908655;
BoundaryObject_getOrientation = 'e';
BoundaryObject_getOrientation_Multiplier = 843487795;
BoundaryObject_getPlane = 't';
BoundaryObject_getPlane_Multiplier = -1666421637;
BoundaryObject_getRenderable = 'n';
BoundaryObject_getX = 's';
BoundaryObject_getX_Multiplier = -1089886639;
BoundaryObject_getY = 'f';
BoundaryObject_getY_Multiplier = 1982254941;

{* Buffer - 2 Hooks *}
Buffer = 'db';
Buffer_getOffset = 's';
Buffer_getOffset_Multiplier = 1042478381;
Buffer_getPayload = 't';

{* Cache - 5 Hooks *}
Cache = 'fy';
Cache_getCacheableNode = 't';
Cache_getHashTable = 'e';
Cache_getQueue = 'd';
Cache_getRemaining = 'f';
Cache_getRemaining_Multiplier = 1;
Cache_getSize = 's';
Cache_getSize_Multiplier = 1;

{* CacheableNode - 2 Hooks *}
CacheableNode = 'fe';
CacheableNode_getNextCacheable = 'cp';
CacheableNode_getPreviousCacheable = 'cx';

{* Canvas - 1 Hooks *}
Canvas = 'dz';
Canvas_getComponent = 't';

{* Character - 17 Hooks *}
Character = 'ae';
Character_getAnimation = 'ap';
Character_getAnimation_Multiplier = 1281463967;
Character_getCombatCycle = 'ag';
Character_getCombatCycle_Multiplier = 1612466433;
Character_getHealth = 'au';
Character_getHealth_Multiplier = 2026047803;
Character_getHitCycles = 'aa';
Character_getHitDamages = 'at';
Character_getHitTypes = 'av';
Character_getInteractingIndex = 'ay';
Character_getInteractingIndex_Multiplier = 189973027;
Character_getMaxHealth = 'aj';
Character_getMaxHealth_Multiplier = 1042698779;
Character_getOrientation = 'bm';
Character_getOrientation_Multiplier = -1991653213;
Character_getQueueLength = 'bj';
Character_getQueueLength_Multiplier = 604519285;
Character_getQueueTraversed = 'bw';
Character_getQueueX = 'bs';
Character_getQueueY = 'bb';
Character_getText = 'ax';
Character_getX = 'k';
Character_getX_Multiplier = -1912652009;
Character_getY = 'b';
Character_getY_Multiplier = 1159505345;
Character_isInSequence = 'ar';

{* Client - 53 Hooks *}
Client = 'client';
Client_getBaseX = 'w.cd';
Client_getBaseX_Multiplier = -568870037;
Client_getBaseY = 'e.cy';
Client_getBaseY_Multiplier = -635953723;
Client_getCameraPitch = 'bk.fa';
Client_getCameraPitch_Multiplier = 1426250829;
Client_getCameraX = 'w.ff';
Client_getCameraX_Multiplier = -998054749;
Client_getCameraY = 'g.fo';
Client_getCameraY_Multiplier = 270638187;
Client_getCameraYaw = 'f.fu';
Client_getCameraYaw_Multiplier = 573879485;
Client_getCameraZ = 'dy.fb';
Client_getCameraZ_Multiplier = -2115906345;
Client_getCanvas = 'p.po';
Client_getCollisionMaps = 'client.w';
Client_getEnergy = 'client.jv';
Client_getEnergy_Multiplier = -758662925;
Client_getExperiences = 'client.hu';
Client_getGameCycle = 'client.p';
Client_getGameCycle_Multiplier = 1234794817;
Client_getGameState = 'client.l';
Client_getGameState_Multiplier = -1320666373;
Client_getGroundItems = 'client.hm';
Client_getItemCompositeCache = 'aj.e';
Client_getItemContainerTable = 'w.t';
Client_getLevels = 'client.ht';
Client_getLocalNPCs = 'client.bb';
Client_getLocalPlayer = 'cr.hf';
Client_getLocalPlayers = 'client.ga';
Client_getLoginState = 'aw.ae';
Client_getLoginState_Multiplier = 76594955;
Client_getMapAngle = 'client.fq';
Client_getMapAngle_Multiplier = -482144205;
Client_getMapOffset = 'client.df';
Client_getMapOffset_Multiplier = 816991303;
Client_getMapScale = 'client.dg';
Client_getMapScale_Multiplier = 1186981241;
Client_getMenuActions = 'client.ik';
Client_getMenuCount = 'client.ak';
Client_getMenuCount_Multiplier = 1851881611;
Client_getMenuHeight = 'ah.io';
Client_getMenuHeight_Multiplier = -1940027677;
Client_getMenuOptions = 'client.iq';
Client_getMenuWidth = 'cf.im';
Client_getMenuWidth_Multiplier = -497476525;
Client_getMenuX = 'cz.he';
Client_getMenuX_Multiplier = -1898904481;
Client_getMenuY = 'f.hx';
Client_getMenuY_Multiplier = -121628793;
Client_getNPCCompositeCache = 'ar.f';
Client_getNPCIndices = 'client.bq';
Client_getObjectCompositeCache = 'aq.e';
Client_getPassword = 'aw.az';
Client_getPlane = 'h.hq';
Client_getPlane_Multiplier = 892241573;
Client_getRealLevels = 'client.hp';
Client_getRegion = 'e.dk';
Client_getSettings = 'ei.s';
Client_getTileHeights = 'n.t';
Client_getTileSettings = 'n.s';
Client_getUsername = 'aw.am';
Client_getValidWidgets = 'ew.s';
Client_getWeight = 'client.jz';
Client_getWeight_Multiplier = 906057103;
Client_getWidgetBoundsHeight = 'client.lb';
Client_getWidgetBoundsWidth = 'client.lc';
Client_getWidgetBoundsX = 'client.lv';
Client_getWidgetBoundsY = 'client.lk';
Client_getWidgetNodeTable = 'client.jb';
Client_getWidgets = 'ew.t';
Client_getWidgetSettings = 'ei.f';
Client_getWidgetVarps = 'ei.f';
Client_isMenuOpen = 'client.hr';

{* CollisionMap - 1 Hooks *}
CollisionMap = 'go';
CollisionMap_getFlags = 'ab';

{* FloorObject - 6 Hooks *}
FloorObject = 'co';
FloorObject_getFlags = 'n';
FloorObject_getFlags_Multiplier = 91978925;
FloorObject_getID = 'd';
FloorObject_getID_Multiplier = -2054573615;
FloorObject_getPlane = 't';
FloorObject_getPlane_Multiplier = 1678696827;
FloorObject_getRenderable = 'e';
FloorObject_getX = 's';
FloorObject_getX_Multiplier = -421149461;
FloorObject_getY = 'f';
FloorObject_getY_Multiplier = -227813017;

{* HashTable - 5 Hooks *}
HashTable = 'ft';
HashTable_getCurrent = 'e';
HashTable_getCurrentIndex = 'd';
HashTable_getCurrentIndex_Multiplier = 1;
HashTable_getHead = 'f';
HashTable_getNodes = 's';
HashTable_getSize = 't';
HashTable_getSize_Multiplier = 1;

{* Item - 2 Hooks *}
Item = 'o';
Item_getID = 't';
Item_getID_Multiplier = 1375185025;
Item_getStackSize = 's';
Item_getStackSize_Multiplier = -1465831673;

{* ItemComposite - 4 Hooks *}
ItemComposite = 'aj';
ItemComposite_getGroundActions = 'i';
ItemComposite_getName = 'u';
ItemComposite_getWidgetActions = 'o';
ItemComposite_isMembers = 'h';

{* ItemContainer - 2 Hooks *}
ItemContainer = 'w';
ItemContainer_getIDs = 's';
ItemContainer_getStackSizes = 'f';

{* ItemLayer - 8 Hooks *}
ItemLayer = 'cs';
ItemLayer_getBottomRenderable = 'e';
ItemLayer_getHeight = 'z';
ItemLayer_getHeight_Multiplier = -817560073;
ItemLayer_getID = 'v';
ItemLayer_getID_Multiplier = 116687793;
ItemLayer_getMiddleRenderable = 'd';
ItemLayer_getPlane = 't';
ItemLayer_getPlane_Multiplier = 1919008493;
ItemLayer_getTopRenderable = 'n';
ItemLayer_getX = 's';
ItemLayer_getX_Multiplier = 190476239;
ItemLayer_getY = 'f';
ItemLayer_getY_Multiplier = 1036270037;

{* LinkedList - 2 Hooks *}
LinkedList = 'fl';
LinkedList_getHead = 't';
LinkedList_getTail = 's';

{* Model - 12 Hooks *}
Model = 'cc';
Model_getIndicesX = 'u';
Model_getIndicesY = 'g';
Model_getIndicesZ = 'a';
Model_getTexturedIndicesX = 'c';
Model_getTexturedIndicesY = 'w';
Model_getTexturedIndicesZ = 'l';
Model_getTexturedVerticesX = 'u';
Model_getTexturedVerticesY = 'g';
Model_getTexturedVerticesZ = 'a';
Model_getVerticesX = 'n';
Model_getVerticesY = 'v';
Model_getVerticesZ = 'z';

{* Node - 3 Hooks *}
Node = 'gm';
Node_getNext = 'em';
Node_getPrevious = 'eh';
Node_getUID = 'df';

{* NPC - 1 Hooks *}
NPC = 'ab';
NPC_getComposite = 't';

{* NPCComposite - 7 Hooks *}
NPCComposite = 'ar';
NPCComposite_getActions = 'k';
NPCComposite_getCombatLevel = 'h';
NPCComposite_getCombatLevel_Multiplier = 569378961;
NPCComposite_getID = 'd';
NPCComposite_getID_Multiplier = 903407553;
NPCComposite_getName = 'n';
NPCComposite_getSettingID = 'ah';
NPCComposite_getSettingID_Multiplier = 722717255;
NPCComposite_getTransformIDs = 'ao';
NPCComposite_getVarBitID = 'ae';
NPCComposite_getVarBitID_Multiplier = 702885197;

{* ObjectComposite - 2 Hooks *}
ObjectComposite = 'aq';
ObjectComposite_getActions = 'af';
ObjectComposite_getName = 'a';

{* Player - 3 Hooks *}
Player = 'f';
Player_getCombatLevel = 'd';
Player_getCombatLevel_Multiplier = 1066957001;
Player_getModel = 'c';
Player_getName = 't';

{* Queue - 1 Hooks *}
Queue = 'fx';
Queue_getHead = 't';

{* Region - 2 Hooks *}
Region = 'cb';
Region_getObjects = 'j';
Region_getTiles = 'n';

{* Renderable - 1 Hooks *}
Renderable = 'bq';
Renderable_getModelHeight = 'cj';
Renderable_getModelHeight_Multiplier = -698968837;

{* RSObject - 12 Hooks *}
RSObject = 'cm';
RSObject_getFlags = 'w';
RSObject_getFlags_Multiplier = 1203732819;
RSObject_getHeight = 's';
RSObject_getHeight_Multiplier = -1795351697;
RSObject_getID = 'c';
RSObject_getID_Multiplier = -1736250779;
RSObject_getOrientation = 'n';
RSObject_getOrientation_Multiplier = 1933292693;
RSObject_getPlane = 't';
RSObject_getPlane_Multiplier = 762681757;
RSObject_getRelativeX = 'v';
RSObject_getRelativeX_Multiplier = -767162703;
RSObject_getRelativeY = 'j';
RSObject_getRelativeY_Multiplier = 101039943;
RSObject_getRenderable = 'd';
RSObject_getSizeX = 'z';
RSObject_getSizeX_Multiplier = 1942425537;
RSObject_getSizeY = 'u';
RSObject_getSizeY_Multiplier = 1814654745;
RSObject_getX = 'f';
RSObject_getX_Multiplier = 1837351411;
RSObject_getY = 'e';
RSObject_getY_Multiplier = 195040881;

{* Tile - 8 Hooks *}
Tile = 'cw';
Tile_getBoundaryObject = 'v';
Tile_getFloorObject = 'j';
Tile_getItemLayer = 'u';
Tile_getPlane = 'e';
Tile_getPlane_Multiplier = 1693898871;
Tile_getRSObjects = 'a';
Tile_getWall = 'z';
Tile_getX = 's';
Tile_getX_Multiplier = -833139785;
Tile_getY = 'f';
Tile_getY_Multiplier = -985522581;

{* Wall - 11 Hooks *}
Wall = 'cn';
Wall_getBackupRenderable = 'j';
Wall_getFlags = 'g';
Wall_getFlags_Multiplier = -153029915;
Wall_getHeight = 'd';
Wall_getHeight_Multiplier = -1238977827;
Wall_getID = 'u';
Wall_getID_Multiplier = 1278767611;
Wall_getOrientation = 'e';
Wall_getOrientation_Multiplier = 1930387639;
Wall_getPlane = 't';
Wall_getPlane_Multiplier = 637314477;
Wall_getRelativeX = 'n';
Wall_getRelativeX_Multiplier = 337723027;
Wall_getRelativeY = 'v';
Wall_getRelativeY_Multiplier = -1850897549;
Wall_getRenderable = 'z';
Wall_getX = 's';
Wall_getX_Multiplier = -366351375;
Wall_getY = 'f';
Wall_getY_Multiplier = 1317694817;

{* Widget - 26 Hooks *}
Widget = 'ew';
Widget_getActions = 'bh';
Widget_getBorderThickness = 'at';
Widget_getBorderThickness_Multiplier = 1107949007;
Widget_getBoundsIndex = 'dq';
Widget_getBoundsIndex_Multiplier = -1419799283;
Widget_getChildren = 'dt';
Widget_getContentIDs = 'dr';
Widget_getHeight = 'b';
Widget_getHeight_Multiplier = -1971283087;
Widget_getID = 'a';
Widget_getID_Multiplier = 640678563;
Widget_getIndex = 'c';
Widget_getIndex_Multiplier = -1751616003;
Widget_getItemID = 'du';
Widget_getItemID_Multiplier = 802088521;
Widget_getLoopCycleStatus = 'dg';
Widget_getLoopCycleStatus_Multiplier = -1404242157;
Widget_getName = 'bv';
Widget_getRelativeX = 'k';
Widget_getRelativeX_Multiplier = -764139897;
Widget_getRelativeY = 'b';
Widget_getRelativeY_Multiplier = -1971283087;
Widget_getRoot = 'bj';
Widget_getRootID = 'h';
Widget_getRootID_Multiplier = 1154498019;
Widget_getScrollX = 'o';
Widget_getScrollX_Multiplier = -1096692949;
Widget_getScrollY = 'm';
Widget_getScrollY_Multiplier = 1512227783;
Widget_getSpriteID = 'am';
Widget_getSpriteID_Multiplier = 132754559;
Widget_getStackSize = 'dv';
Widget_getStackSize_Multiplier = 192913583;
Widget_getStackSizes = 'dk';
Widget_getText = 'br';
Widget_getTextureID = 'aq';
Widget_getTextureID_Multiplier = 2009338005;
Widget_getWidth = 'k';
Widget_getWidth_Multiplier = -764139897;
Widget_getX = 'p';
Widget_getX_Multiplier = 692928385;
Widget_getY = 'x';
Widget_getY_Multiplier = -598844925;
Widget_isHidden = 'i';

{* WidgetNode - 1 Hooks *}
WidgetNode = 'e';
WidgetNode_getID = 't';
WidgetNode_getID_Multiplier = 2097571581;

Dervish

2014-09-04 11:43:05

From: Cheddy
Inb4 anyone asks, new hooks =)


{ 209 Hooks Found By Cheddys Beautiful Updater }

const
ReflectionRevision = 58;


{* BoundaryObject - 9 Hooks *}
BoundaryObject = 'cj';
BoundaryObject_getAlternativeOrientation = 'd';
BoundaryObject_getAlternativeOrientation_Multiplier = -1515667875;
BoundaryObject_getBackupRenderable = 'v';
BoundaryObject_getFlags = 'j';
BoundaryObject_getFlags_Multiplier = 925559837;
BoundaryObject_getID = 'z';
BoundaryObject_getID_Multiplier = -101908655;
BoundaryObject_getOrientation = 'e';
BoundaryObject_getOrientation_Multiplier = 843487795;
BoundaryObject_getPlane = 't';
BoundaryObject_getPlane_Multiplier = -1666421637;
BoundaryObject_getRenderable = 'n';
BoundaryObject_getX = 's';
BoundaryObject_getX_Multiplier = -1089886639;
BoundaryObject_getY = 'f';
BoundaryObject_getY_Multiplier = 1982254941;

{* Buffer - 2 Hooks *}
Buffer = 'db';
Buffer_getOffset = 's';
Buffer_getOffset_Multiplier = 1042478381;
Buffer_getPayload = 't';

{* Cache - 5 Hooks *}
Cache = 'fy';
Cache_getCacheableNode = 't';
Cache_getHashTable = 'e';
Cache_getQueue = 'd';
Cache_getRemaining = 'f';
Cache_getRemaining_Multiplier = 1;
Cache_getSize = 's';
Cache_getSize_Multiplier = 1;

{* CacheableNode - 2 Hooks *}
CacheableNode = 'fe';
CacheableNode_getNextCacheable = 'cp';
CacheableNode_getPreviousCacheable = 'cx';

{* Canvas - 1 Hooks *}
Canvas = 'dz';
Canvas_getComponent = 't';

{* Character - 17 Hooks *}
Character = 'ae';
Character_getAnimation = 'ap';
Character_getAnimation_Multiplier = 1281463967;
Character_getCombatCycle = 'ag';
Character_getCombatCycle_Multiplier = 1612466433;
Character_getHealth = 'au';
Character_getHealth_Multiplier = 2026047803;
Character_getHitCycles = 'aa';
Character_getHitDamages = 'at';
Character_getHitTypes = 'av';
Character_getInteractingIndex = 'ay';
Character_getInteractingIndex_Multiplier = 189973027;
Character_getMaxHealth = 'aj';
Character_getMaxHealth_Multiplier = 1042698779;
Character_getOrientation = 'bm';
Character_getOrientation_Multiplier = -1991653213;
Character_getQueueLength = 'bj';
Character_getQueueLength_Multiplier = 604519285;
Character_getQueueTraversed = 'bw';
Character_getQueueX = 'bs';
Character_getQueueY = 'bb';
Character_getText = 'ax';
Character_getX = 'k';
Character_getX_Multiplier = -1912652009;
Character_getY = 'b';
Character_getY_Multiplier = 1159505345;
Character_isInSequence = 'ar';

{* Client - 53 Hooks *}
Client = 'client';
Client_getBaseX = 'w.cd';
Client_getBaseX_Multiplier = -568870037;
Client_getBaseY = 'e.cy';
Client_getBaseY_Multiplier = -635953723;
Client_getCameraPitch = 'bk.fa';
Client_getCameraPitch_Multiplier = 1426250829;
Client_getCameraX = 'w.ff';
Client_getCameraX_Multiplier = -998054749;
Client_getCameraY = 'g.fo';
Client_getCameraY_Multiplier = 270638187;
Client_getCameraYaw = 'f.fu';
Client_getCameraYaw_Multiplier = 573879485;
Client_getCameraZ = 'dy.fb';
Client_getCameraZ_Multiplier = -2115906345;
Client_getCanvas = 'p.po';
Client_getCollisionMaps = 'client.w';
Client_getEnergy = 'client.jv';
Client_getEnergy_Multiplier = -758662925;
Client_getExperiences = 'client.hu';
Client_getGameCycle = 'client.p';
Client_getGameCycle_Multiplier = 1234794817;
Client_getGameState = 'client.l';
Client_getGameState_Multiplier = -1320666373;
Client_getGroundItems = 'client.hm';
Client_getItemCompositeCache = 'aj.e';
Client_getItemContainerTable = 'w.t';
Client_getLevels = 'client.ht';
Client_getLocalNPCs = 'client.bb';
Client_getLocalPlayer = 'cr.hf';
Client_getLocalPlayers = 'client.ga';
Client_getLoginState = 'aw.ae';
Client_getLoginState_Multiplier = 76594955;
Client_getMapAngle = 'client.fq';
Client_getMapAngle_Multiplier = -482144205;
Client_getMapOffset = 'client.df';
Client_getMapOffset_Multiplier = 816991303;
Client_getMapScale = 'client.dg';
Client_getMapScale_Multiplier = 1186981241;
Client_getMenuActions = 'client.ik';
Client_getMenuCount = 'client.ak';
Client_getMenuCount_Multiplier = 1851881611;
Client_getMenuHeight = 'ah.io';
Client_getMenuHeight_Multiplier = -1940027677;
Client_getMenuOptions = 'client.iq';
Client_getMenuWidth = 'cf.im';
Client_getMenuWidth_Multiplier = -497476525;
Client_getMenuX = 'cz.he';
Client_getMenuX_Multiplier = -1898904481;
Client_getMenuY = 'f.hx';
Client_getMenuY_Multiplier = -121628793;
Client_getNPCCompositeCache = 'ar.f';
Client_getNPCIndices = 'client.bq';
Client_getObjectCompositeCache = 'aq.e';
Client_getPassword = 'aw.az';
Client_getPlane = 'h.hq';
Client_getPlane_Multiplier = 892241573;
Client_getRealLevels = 'client.hp';
Client_getRegion = 'e.dk';
Client_getSettings = 'ei.s';
Client_getTileHeights = 'n.t';
Client_getTileSettings = 'n.s';
Client_getUsername = 'aw.am';
Client_getValidWidgets = 'ew.s';
Client_getWeight = 'client.jz';
Client_getWeight_Multiplier = 906057103;
Client_getWidgetBoundsHeight = 'client.lb';
Client_getWidgetBoundsWidth = 'client.lc';
Client_getWidgetBoundsX = 'client.lv';
Client_getWidgetBoundsY = 'client.lk';
Client_getWidgetNodeTable = 'client.jb';
Client_getWidgets = 'ew.t';
Client_getWidgetSettings = 'ei.f';
Client_getWidgetVarps = 'ei.f';
Client_isMenuOpen = 'client.hr';

{* CollisionMap - 1 Hooks *}
CollisionMap = 'go';
CollisionMap_getFlags = 'ab';

{* FloorObject - 6 Hooks *}
FloorObject = 'co';
FloorObject_getFlags = 'n';
FloorObject_getFlags_Multiplier = 91978925;
FloorObject_getID = 'd';
FloorObject_getID_Multiplier = -2054573615;
FloorObject_getPlane = 't';
FloorObject_getPlane_Multiplier = 1678696827;
FloorObject_getRenderable = 'e';
FloorObject_getX = 's';
FloorObject_getX_Multiplier = -421149461;
FloorObject_getY = 'f';
FloorObject_getY_Multiplier = -227813017;

{* HashTable - 5 Hooks *}
HashTable = 'ft';
HashTable_getCurrent = 'e';
HashTable_getCurrentIndex = 'd';
HashTable_getCurrentIndex_Multiplier = 1;
HashTable_getHead = 'f';
HashTable_getNodes = 's';
HashTable_getSize = 't';
HashTable_getSize_Multiplier = 1;

{* Item - 2 Hooks *}
Item = 'o';
Item_getID = 't';
Item_getID_Multiplier = 1375185025;
Item_getStackSize = 's';
Item_getStackSize_Multiplier = -1465831673;

{* ItemComposite - 4 Hooks *}
ItemComposite = 'aj';
ItemComposite_getGroundActions = 'i';
ItemComposite_getName = 'u';
ItemComposite_getWidgetActions = 'o';
ItemComposite_isMembers = 'h';

{* ItemContainer - 2 Hooks *}
ItemContainer = 'w';
ItemContainer_getIDs = 's';
ItemContainer_getStackSizes = 'f';

{* ItemLayer - 8 Hooks *}
ItemLayer = 'cs';
ItemLayer_getBottomRenderable = 'e';
ItemLayer_getHeight = 'z';
ItemLayer_getHeight_Multiplier = -817560073;
ItemLayer_getID = 'v';
ItemLayer_getID_Multiplier = 116687793;
ItemLayer_getMiddleRenderable = 'd';
ItemLayer_getPlane = 't';
ItemLayer_getPlane_Multiplier = 1919008493;
ItemLayer_getTopRenderable = 'n';
ItemLayer_getX = 's';
ItemLayer_getX_Multiplier = 190476239;
ItemLayer_getY = 'f';
ItemLayer_getY_Multiplier = 1036270037;

{* LinkedList - 2 Hooks *}
LinkedList = 'fl';
LinkedList_getHead = 't';
LinkedList_getTail = 's';

{* Model - 12 Hooks *}
Model = 'cc';
Model_getIndicesX = 'u';
Model_getIndicesY = 'g';
Model_getIndicesZ = 'a';
Model_getTexturedIndicesX = 'c';
Model_getTexturedIndicesY = 'w';
Model_getTexturedIndicesZ = 'l';
Model_getTexturedVerticesX = 'u';
Model_getTexturedVerticesY = 'g';
Model_getTexturedVerticesZ = 'a';
Model_getVerticesX = 'n';
Model_getVerticesY = 'v';
Model_getVerticesZ = 'z';

{* Node - 3 Hooks *}
Node = 'gm';
Node_getNext = 'em';
Node_getPrevious = 'eh';
Node_getUID = 'df';

{* NPC - 1 Hooks *}
NPC = 'ab';
NPC_getComposite = 't';

{* NPCComposite - 7 Hooks *}
NPCComposite = 'ar';
NPCComposite_getActions = 'k';
NPCComposite_getCombatLevel = 'h';
NPCComposite_getCombatLevel_Multiplier = 569378961;
NPCComposite_getID = 'd';
NPCComposite_getID_Multiplier = 903407553;
NPCComposite_getName = 'n';
NPCComposite_getSettingID = 'ah';
NPCComposite_getSettingID_Multiplier = 722717255;
NPCComposite_getTransformIDs = 'ao';
NPCComposite_getVarBitID = 'ae';
NPCComposite_getVarBitID_Multiplier = 702885197;

{* ObjectComposite - 2 Hooks *}
ObjectComposite = 'aq';
ObjectComposite_getActions = 'af';
ObjectComposite_getName = 'a';

{* Player - 3 Hooks *}
Player = 'f';
Player_getCombatLevel = 'd';
Player_getCombatLevel_Multiplier = 1066957001;
Player_getModel = 'c';
Player_getName = 't';

{* Queue - 1 Hooks *}
Queue = 'fx';
Queue_getHead = 't';

{* Region - 2 Hooks *}
Region = 'cb';
Region_getObjects = 'j';
Region_getTiles = 'n';

{* Renderable - 1 Hooks *}
Renderable = 'bq';
Renderable_getModelHeight = 'cj';
Renderable_getModelHeight_Multiplier = -698968837;

{* RSObject - 12 Hooks *}
RSObject = 'cm';
RSObject_getFlags = 'w';
RSObject_getFlags_Multiplier = 1203732819;
RSObject_getHeight = 's';
RSObject_getHeight_Multiplier = -1795351697;
RSObject_getID = 'c';
RSObject_getID_Multiplier = -1736250779;
RSObject_getOrientation = 'n';
RSObject_getOrientation_Multiplier = 1933292693;
RSObject_getPlane = 't';
RSObject_getPlane_Multiplier = 762681757;
RSObject_getRelativeX = 'v';
RSObject_getRelativeX_Multiplier = -767162703;
RSObject_getRelativeY = 'j';
RSObject_getRelativeY_Multiplier = 101039943;
RSObject_getRenderable = 'd';
RSObject_getSizeX = 'z';
RSObject_getSizeX_Multiplier = 1942425537;
RSObject_getSizeY = 'u';
RSObject_getSizeY_Multiplier = 1814654745;
RSObject_getX = 'f';
RSObject_getX_Multiplier = 1837351411;
RSObject_getY = 'e';
RSObject_getY_Multiplier = 195040881;

{* Tile - 8 Hooks *}
Tile = 'cw';
Tile_getBoundaryObject = 'v';
Tile_getFloorObject = 'j';
Tile_getItemLayer = 'u';
Tile_getPlane = 'e';
Tile_getPlane_Multiplier = 1693898871;
Tile_getRSObjects = 'a';
Tile_getWall = 'z';
Tile_getX = 's';
Tile_getX_Multiplier = -833139785;
Tile_getY = 'f';
Tile_getY_Multiplier = -985522581;

{* Wall - 11 Hooks *}
Wall = 'cn';
Wall_getBackupRenderable = 'j';
Wall_getFlags = 'g';
Wall_getFlags_Multiplier = -153029915;
Wall_getHeight = 'd';
Wall_getHeight_Multiplier = -1238977827;
Wall_getID = 'u';
Wall_getID_Multiplier = 1278767611;
Wall_getOrientation = 'e';
Wall_getOrientation_Multiplier = 1930387639;
Wall_getPlane = 't';
Wall_getPlane_Multiplier = 637314477;
Wall_getRelativeX = 'n';
Wall_getRelativeX_Multiplier = 337723027;
Wall_getRelativeY = 'v';
Wall_getRelativeY_Multiplier = -1850897549;
Wall_getRenderable = 'z';
Wall_getX = 's';
Wall_getX_Multiplier = -366351375;
Wall_getY = 'f';
Wall_getY_Multiplier = 1317694817;

{* Widget - 26 Hooks *}
Widget = 'ew';
Widget_getActions = 'bh';
Widget_getBorderThickness = 'at';
Widget_getBorderThickness_Multiplier = 1107949007;
Widget_getBoundsIndex = 'dq';
Widget_getBoundsIndex_Multiplier = -1419799283;
Widget_getChildren = 'dt';
Widget_getContentIDs = 'dr';
Widget_getHeight = 'b';
Widget_getHeight_Multiplier = -1971283087;
Widget_getID = 'a';
Widget_getID_Multiplier = 640678563;
Widget_getIndex = 'c';
Widget_getIndex_Multiplier = -1751616003;
Widget_getItemID = 'du';
Widget_getItemID_Multiplier = 802088521;
Widget_getLoopCycleStatus = 'dg';
Widget_getLoopCycleStatus_Multiplier = -1404242157;
Widget_getName = 'bv';
Widget_getRelativeX = 'k';
Widget_getRelativeX_Multiplier = -764139897;
Widget_getRelativeY = 'b';
Widget_getRelativeY_Multiplier = -1971283087;
Widget_getRoot = 'bj';
Widget_getRootID = 'h';
Widget_getRootID_Multiplier = 1154498019;
Widget_getScrollX = 'o';
Widget_getScrollX_Multiplier = -1096692949;
Widget_getScrollY = 'm';
Widget_getScrollY_Multiplier = 1512227783;
Widget_getSpriteID = 'am';
Widget_getSpriteID_Multiplier = 132754559;
Widget_getStackSize = 'dv';
Widget_getStackSize_Multiplier = 192913583;
Widget_getStackSizes = 'dk';
Widget_getText = 'br';
Widget_getTextureID = 'aq';
Widget_getTextureID_Multiplier = 2009338005;
Widget_getWidth = 'k';
Widget_getWidth_Multiplier = -764139897;
Widget_getX = 'p';
Widget_getX_Multiplier = 692928385;
Widget_getY = 'x';
Widget_getY_Multiplier = -598844925;
Widget_isHidden = 'i';

{* WidgetNode - 1 Hooks *}
WidgetNode = 'e';
WidgetNode_getID = 't';
WidgetNode_getID_Multiplier = 2097571581;


Hey, I'm getting errors with those hooks such as :

[Error] C:\Simba\Includes\SRL-OSR\SRL\Reflection\Core\Misc.simba(245:63): Unknown identifier 'client_settings' at line 245
Compiling failed.
Successfully saved: C:\Simba\Includes\SRL-OSR\SRL\Reflection\Core\Misc.simba
[Hint] C:\Simba\Includes\SRL-OSR\SRL\Reflection\Core\Misc.simba(250:3): Variable 'I' never used at line 249
[Error] C:\Simba\Includes\SRL-OSR\SRL\Reflection\Core\Misc.simba(386:52): Unknown identifier 'client_menuCount' at line 386
Compiling failed.

Know any way to fix those ? Thanks anyways :)

Edit : managed to fix some errors through adding "get" after the "client_".
However, now there's an error :
[Error] C:\Simba\Includes\SRL-OSR\SRL\Reflection\Core\Misc.simba(660:57): Unknown identifier 'client_player' at line 660
Compiling failed.

And I'm finding no such thing in the "client_" list :(.

Fitta

2014-09-04 15:21:41

Reason is quite simple.

Why would you guys keep changing the constants for the hooks?

Edit:
Just make a standard and go with that, no?

tls

2014-09-04 15:40:36

From: Fitta
Reason is quite simple.

Why would you guys keep changing the constants for the hooks?

Edit:
Just make a standard and go with that, no?


The standard is how it is right now. Cheddy started a new updater and named things correctly, and that is why they changed.

Cheddy

2014-09-04 16:11:40

From: tls
The standard is how it is right now. Cheddy started a new updater and named things correctly, and that is why they changed.


I sent you a pull request with your special hooks =)

Fitta

2014-09-04 16:37:14

From: tls
The standard is how it is right now. Cheddy started a new updater and named things correctly, and that is why they changed.


So the standard is wrong? I'm confused

tls

2014-09-04 16:38:09

From: Fitta
So the standard is wrong? I'm confused


The standard is how Cheddy has his hook's formatted at this moment.

Kyle

2014-09-04 17:14:28

Well unless Meerkat recently changed the way the hooks are named, which I don't believe he has, the standard is what the include is currently using. Cheddy's updater isn't being use for this include, while his hooks may work, they're not named according to the include.

Shout

2014-09-04 19:14:59

So when the official hooks with the proper standards are out will the reflection include auto-update when we run a script?

Bumblefff

2014-09-05 05:09:55

So how do i update my hooks? Do i need to use that code above or is it still showing errors?

Fitta

2014-09-05 11:25:54

We have the correct hooks, someone just needs to take the time to change the names of the text posted..

darkspell

2014-09-05 21:44:05

Am I still waiting for the updates to happen or when he updates them? It's still outdated for me.

Dezval

2014-09-06 00:28:03

Same here. We play the waiting game for now.. :norris:

Grunt

2014-09-06 02:17:16

From: Dezval
Same here. We play the waiting game for now.. :norris:


Endless frustration…:duh:


Any merciful god, please make a tutorial for us peasants? So we may make our own fires, and cook our own meals?

Harrier

2014-09-06 02:28:14

From: Grunt
Endless frustration…:duh:


Any merciful god, please make a tutorial for us peasants? So we may make our own fires, and cook our own meals?

Get your own hooks? Ok, learn java, bytecode analysis then study the runetek engine till you start finding hooks.
Or just wait, Krazy meerkat does everything in his own time with little to no reward. So he can take as much time as he wants, since there is a good chance school/college/uni has restarted for him.

Grunt

2014-09-06 02:41:25

From: darkspell
Am I still waiting for the updates to happen or when he updates them? It's still outdated for me.

Get used to waiting.

Grunt

2014-09-06 02:48:44

From: Harrier
Get your own hooks? Ok, learn java, bytecode analysis then study the runetek engine till you start finding hooks.
Or just wait, Krazy meerkat does everything in his own time with little to no reward. So he can take as much time as he wants, since there is a good chance school/college/uni has restarted for him.


I appreciate Krazy meerkat's time and effort.

Point me to some links to where I can get started?

Cheddy

2014-09-06 06:11:13

From: Grunt
Endless frustration…:duh:


Any merciful god, please make a tutorial for us peasants? So we may make our own fires, and cook our own meals?


If you're so impatient, spent your "waiting" time learning a bit about the RuneTek Engine so you can change the names of my hooks to match the hook names that the include needs. I gave you all the hooks you need, you just need to learn the RS hierarchy; it's not difficult, I learnt the class and field hierarchy in about 2 hours =)

Cheddy

2014-09-06 06:17:02

From: Grunt
I appreciate Krazy meerkat's time and effort.

Point me to some links to where I can get started?


Not the best refactor but it's where I learnt, obviously you have to understand the core principles of Java first =)

RS Refactor

Flight

2014-09-06 07:22:04

From: Cheddy

RS Refactor


Looks surprisingly similar to Mopar's old old deob… :huh:

Cheddy

2014-09-06 10:10:08

From: Flight
Looks surprisingly similar to Mopar's old old deob… :huh:


I believe it's Ryan's but I it is of an old RS3 rev from around a similar time to the OSRS version.

Grunt

2014-09-06 10:44:54

Thanks Cheddy


Done from 2 previous revisions of CHeddy and Merkat's to come up with an incomplete translation.
http://speedy.sh/Dm6du/hooks-original.xlsx

Cheddy

2014-09-06 13:25:47

From: Grunt
Thanks Cheddy


Done from 2 previous revisions of CHeddy and Merkat's to come up with an incomplete translation.
http://speedy.sh/Dm6du/hooks-original.xlsx


Because you actually put the effort in to try, I will give you a file with the naming adapted for simba. That will make it easier for you to correct your translation table if you want to use it in the future =) Alternately you could just replace your hooks file with these and it should work (assuming I have corrected all the naming haha), some of the widget ones may need get added actually :/ :


{ 209 Hooks Found By Cheddys Beautiful Updater }

const
ReflectionRevision = '58';


{* BoundaryObject - 9 Hooks *}
BoundaryObject = 'cj';
BoundaryObject_AlternativeOrientation = 'd';
BoundaryObject_AlternativeOrientation_Multiplier = -1515667875;
BoundaryObject_BackupRenderable = 'v';
BoundaryObject_Flags = 'j';
BoundaryObject_Flags_Multiplier = 925559837;
BoundaryObject_Hash = 'z';
BoundaryObject_Hash_Multiplier = -101908655;
BoundaryObject_Orientation = 'e';
BoundaryObject_Orientation_Multiplier = 843487795;
BoundaryObject_Plane = 't';
BoundaryObject_Plane_Multiplier = -1666421637;
BoundaryObject_Renderable = 'n';
BoundaryObject_Get_X = 's';
BoundaryObject_Get_X_Multiplier = -1089886639;
BoundaryObject_Get_Y = 'f';
BoundaryObject_Get_Y_Multiplier = 1982254941;

{* Buffer - 2 Hooks *}
Buffer = 'db';
Buffer_Offset = 's';
Buffer_Offset_Multiplier = 1042478381;
Buffer_Payload = 't';

{* Cache - 5 Hooks *}
Cache = 'fy';
Cache_CacheableNode = 't';
Cache_NodeHashTable = 'e';
Cache_Queue = 'd';
Cache_Remaining = 'f';
Cache_Remaining_Multiplier = 1;
Cache_Size = 's';
Cache_Size_Multiplier = 1;

{* CacheableNode - 2 Hooks *}
CacheableNode = 'fe';
CacheableNode_Next = 'cp';
CacheableNode_Prev = 'cx';

{* Canvas - 1 Hooks *}
Canvas = 'dz';
Canvas_Component = 't';

{* Actor - 17 Hooks *}
Actor = 'ae';
Actor_Animation = 'ap';
Actor_Animation_Multiplier = 1281463967;
Actor_CombatCycle = 'ag';
Actor_CombatCycle_Multiplier = 1612466433;
Actor_Health = 'au';
Actor_Health_Multiplier = 2026047803;
Actor_HitCycles = 'aa';
Actor_HitDamages = 'at';
Actor_HitTypes = 'av';
Actor_Interacting = 'ay';
Actor_Interacting_Multiplier = 189973027;
Actor_MaxHealth = 'aj';
Actor_MaxHealth_Multiplier = 1042698779;
Actor_Orientation = 'bm';
Actor_Orientation_Multiplier = -1991653213;
Actor_PathLength = 'bj';
Actor_PathLength_Multiplier = 604519285;
Actor_PathTraversed = 'bw';
Actor_PathX = 'bs';
Actor_PathY = 'bb';
Actor_ActiveText = 'ax';
Actor_LocalX = 'k';
Actor_LocalX_Multiplier = -1912652009;
Actor_LocalY = 'b';
Actor_LocalY_Multiplier = 1159505345;
Actor_isInSequence = 'ar';

{* Client - 53 Hooks *}
Client = 'client';
Client_BaseX = 'w.cd';
Client_BaseX_Multiplier = -568870037;
Client_BaseY = 'e.cy';
Client_BaseY_Multiplier = -635953723;
Client_CameraPitch = 'bk.fa';
Client_CameraPitch_Multiplier = 1426250829;
Client_CameraX = 'w.ff';
Client_CameraX_Multiplier = -998054749;
Client_CameraY = 'g.fo';
Client_CameraY_Multiplier = 270638187;
Client_CameraYaw = 'f.fu';
Client_CameraYaw_Multiplier = 573879485;
Client_CameraZ = 'dy.fb';
Client_CameraZ_Multiplier = -2115906345;
Client_Canvas = 'p.po';
Client_CollisionMaps = 'client.w';
Client_Run_Energy = 'client.jv';
Client_Run_Energy_Multiplier = -758662925;
Client_Experiences = 'client.hu';
Client_LoopCycle = 'client.p';
Client_LoopCycle_Multiplier = 1234794817;
Client_Login_State = 'client.l';
Client_Login_State_Multiplier = -1320666373;
Client_GroundItems = 'client.hm';
Client_ItemDefinitionCache = 'aj.e';
Client_ItemContainerTable = 'w.t';
Client_Levels = 'client.ht';
Client_NPCs = 'client.bb';
Client_Player = 'cr.hf';
Client_Players = 'client.ga';
Client_LoginState = 'aw.ae';
Client_LoginState_Multiplier = 76594955;
Client_CompassAngle = 'client.fq';
Client_CompassAngle_Multiplier = -482144205;
Client_Map_Offset = 'client.df';
Client_Map_Offset_Multiplier = 816991303;
Client_Map_Scale = 'client.dg';
Client_Map_Scale_Multiplier = 1186981241;
Client_MenuActions = 'client.ik';
Client_MenuCount = 'client.ak';
Client_MenuCount_Multiplier = 1851881611;
Client_MenuHeight = 'ah.io';
Client_MenuHeight_Multiplier = -1940027677;
Client_MenuOptions = 'client.iq';
Client_MenuWidth = 'cf.im';
Client_MenuWidth_Multiplier = -497476525;
Client_MenuX = 'cz.he';
Client_MenuX_Multiplier = -1898904481;
Client_MenuY = 'f.hx';
Client_MenuY_Multiplier = -121628793;
Client_NPCDefinitionCache = 'ar.f';
Client_NPCIndices = 'client.bq';
Client_ObjectDefinitionCache = 'aq.e';
Client_Password = 'aw.az';
Client_Plane = 'h.hq';
Client_Plane_Multiplier = 892241573;
Client_RealLevels = 'client.hp';
Client_Region = 'e.dk';
Client_Settings = 'ei.s';
Client_GroundHeights = 'n.t';
Client_GroundSettings = 'n.s';
Client_Username = 'aw.am';
Client_ValidWidgets = 'ew.s';
Client_Weight = 'client.jz';
Client_Weight_Multiplier = 906057103;
Client_WidgetBoundsHeight = 'client.lb';
Client_WidgetBoundsWidth = 'client.lc';
Client_WidgetBoundsX = 'client.lv';
Client_WidgetBoundsY = 'client.lk';
Client_WidgetNodeTable = 'client.jb';
Client_Widgets = 'ew.t';
Client_WidgetSettings = 'ei.f';
Client_WidgetVarps = 'ei.f';
Client_isMenuOpen = 'client.hr';

{* CollisionMap - 1 Hooks *}
CollisionMap = 'go';
CollisionMap_Flags = 'ab';

{* FloorDecorationObject - 6 Hooks *}
FloorDecorationObject = 'co';
FloorDecorationObject_Flags = 'n';
FloorDecorationObject_Flags_Multiplier = 91978925;
FloorDecorationObject_Hash = 'd';
FloorDecorationObject_Hash_Multiplier = -2054573615;
FloorDecorationObject_Plane = 't';
FloorDecorationObject_Plane_Multiplier = 1678696827;
FloorDecorationObject_Renderable = 'e';
FloorDecorationObject_Get_X = 's';
FloorDecorationObject_Get_X_Multiplier = -421149461;
FloorDecorationObject_Get_Y = 'f';
FloorDecorationObject_Get_Y_Multiplier = -227813017;

{* NodeHashTable - 5 Hooks *}
NodeHashTable = 'ft';
NodeHashTable_Current = 'e';
NodeHashTable_CurrentIndex = 'd';
NodeHashTable_CurrentIndex_Multiplier = 1;
NodeHashTable_Head = 'f';
NodeHashTable_GetNodes = 's';
NodeHashTable_GetSize = 't';
NodeHashTable_GetSize_Multiplier = 1;

{* Item - 2 Hooks *}
Item = 'o';
Item_ID = 't';
Item_ID_Multiplier = 1375185025;
Item_StackSize = 's';
Item_StackSize_Multiplier = -1465831673;

{* ItemDefinition - 4 Hooks *}
ItemDefinition = 'aj';
ItemDefinition_GroundActions = 'i';
ItemDefinition_Name = 'u';
ItemDefinition_InventoryActions = 'o';
ItemDefinition_isMembers = 'h';

{* ItemContainer - 2 Hooks *}
ItemContainer = 'w';
ItemContainer_IDs = 's';
ItemContainer_StackSizes = 'f';

{* ItemLayer - 8 Hooks *}
ItemLayer = 'cs';
ItemLayer_BottomRenderable = 'e';
ItemLayer_Height = 'z';
ItemLayer_Height_Multiplier = -817560073;
ItemLayer_ID = 'v';
ItemLayer_ID_Multiplier = 116687793;
ItemLayer_MiddleRenderable = 'd';
ItemLayer_Plane = 't';
ItemLayer_Plane_Multiplier = 1919008493;
ItemLayer_TopRenderable = 'n';
ItemLayer_X = 's';
ItemLayer_X_Multiplier = 190476239;
ItemLayer_Y = 'f';
ItemLayer_Y_Multiplier = 1036270037;

{* LinkedList - 2 Hooks *}
LinkedList = 'fl';
LinkedList_Head = 't';
LinkedList_Tail = 's';

{* Model - 12 Hooks *}
Model = 'cc';
Model_IndicesX = 'u';
Model_IndicesY = 'g';
Model_IndicesZ = 'a';
Model_TexturedIndicesX = 'c';
Model_TexturedIndicesY = 'w';
Model_TexturedIndicesZ = 'l';
Model_TexturedVerticesX = 'u';
Model_TexturedVerticesY = 'g';
Model_TexturedVerticesZ = 'a';
Model_VerticesX = 'n';
Model_VerticesY = 'v';
Model_VerticesZ = 'z';

{* Node - 3 Hooks *}
Node = 'gm';
Node_Next = 'em';
Node_Previous = 'eh';
Node_ID = 'df';

{* NPC - 1 Hooks *}
NPC = 'ab';
NPC_Definition = 't';

{* NPCDefinition - 7 Hooks *}
NPCDefinition = 'ar';
NPCDefinition_Actions = 'k';
NPCDefinition_CombatLevel = 'h';
NPCDefinition_CombatLevel_Multiplier = 569378961;
NPCDefinition_ID = 'd';
NPCDefinition_ID_Multiplier = 903407553;
NPCDefinition_Name = 'n';
NPCDefinition_SettingID = 'ah';
NPCDefinition_SettingID_Multiplier = 722717255;
NPCDefinition_TransformIDs = 'ao';
NPCDefinition_VarBitID = 'ae';
NPCDefinition_VarBitID_Multiplier = 702885197;

{* ObjectDefinition - 2 Hooks *}
ObjectDefinition = 'aq';
ObjectDefinition_Actions = 'af';
ObjectDefinition_Name = 'a';

{* Player - 3 Hooks *}
Player = 'f';
Player_CombatLevel = 'd';
Player_CombatLevel_Multiplier = 1066957001;
Player_Model = 'c';
Player_Name = 't';

{* Queue - 1 Hooks *}
Queue = 'fx';
Queue_Head = 't';

{* Region - 2 Hooks *}
Region = 'cb';
Region_Objects = 'j';
Region_SceneTiles = 'n';

{* Renderable - 1 Hooks *}
Renderable = 'bq';
Renderable_ModelHeight = 'cj';
Renderable_ModelHeight_Multiplier = -698968837;

{* WorldObject - 12 Hooks *}
WorldObject = 'cm';
WorldObject_Flags = 'w';
WorldObject_Flags_Multiplier = 1203732819;
WorldObject_Height = 's';
WorldObject_Height_Multiplier = -1795351697;
WorldObject_Hash = 'c';
WorldObject_Hash_Multiplier = -1736250779;
WorldObject_Orientation = 'n';
WorldObject_Orientation_Multiplier = 1933292693;
WorldObject_Plane = 't';
WorldObject_Plane_Multiplier = 762681757;
WorldObject_RelativeX = 'v';
WorldObject_RelativeX_Multiplier = -767162703;
WorldObject_RelativeY = 'j';
WorldObject_RelativeY_Multiplier = 101039943;
WorldObject_Renderable = 'd';
WorldObject_SizeX = 'z';
WorldObject_SizeX_Multiplier = 1942425537;
WorldObject_SizeY = 'u';
WorldObject_SizeY_Multiplier = 1814654745;
WorldObject_Get_X = 'f';
WorldObject_Get_X_Multiplier = 1837351411;
WorldObject_Get_Y = 'e';
WorldObject_Get_Y_Multiplier = 195040881;

{* SceneTile - 8 Hooks *}
SceneTile = 'cw';
SceneTile_BoundaryObject = 'v';
SceneTile_FloorDecorationObject = 'j';
SceneTile_ItemLayer = 'u';
SceneTile_Plane = 'e';
SceneTile_Plane_Multiplier = 1693898871;
SceneTile_WorldObjects = 'a';
SceneTile_WallObject = 'z';
SceneTile_X = 's';
SceneTile_X_Multiplier = -833139785;
SceneTile_Y = 'f';
SceneTile_Y_Multiplier = -985522581;

{* WallObject - 11 Hooks *}
WallObject = 'cn';
WallObject_BackupRenderable = 'j';
WallObject_Flags = 'g';
WallObject_Flags_Multiplier = -153029915;
WallObject_Height = 'd';
WallObject_Height_Multiplier = -1238977827;
WallObject_Hash = 'u';
WallObject_Hash_Multiplier = 1278767611;
WallObject_Orientation = 'e';
WallObject_Orientation_Multiplier = 1930387639;
WallObject_Plane = 't';
WallObject_Plane_Multiplier = 637314477;
WallObject_RelativeX = 'n';
WallObject_RelativeX_Multiplier = 337723027;
WallObject_RelativeY = 'v';
WallObject_RelativeY_Multiplier = -1850897549;
WallObject_Renderable = 'z';
WallObject_X = 's';
WallObject_X_Multiplier = -366351375;
WallObject_Y = 'f';
WallObject_Y_Multiplier = 1317694817;

{* Widget - 26 Hooks *}
Widget = 'ew';
Widget_GetActions = 'bh';
Widget_BorderThickness = 'at';
Widget_BorderThickness_Multiplier = 1107949007;
Widget_BoundsIndex = 'dq';
Widget_BoundsIndex_Multiplier = -1419799283;
Widget_Children = 'dt';
Widget_GetItems = 'dr';
Widget_Height = 'b';
Widget_Height_Multiplier = -1971283087;
Widget_GetID = 'a';
Widget_GetID_Multiplier = 640678563;
Widget_GetIndex = 'c';
Widget_GetIndex_Multiplier = -1751616003;
Widget_ItemID = 'du';
Widget_ItemID_Multiplier = 802088521;
Widget_LoopCycleStatus = 'dg';
Widget_LoopCycleStatus_Multiplier = -1404242157;
Widget_Name = 'bv';
Widget_GetRelativeX = 'k';
Widget_GetRelativeX_Multiplier = -764139897;
Widget_GetRelativeY = 'b';
Widget_GetRelativeY_Multiplier = -1971283087;
Widget_Root = 'bj';
Widget_RootID = 'h';
Widget_RootID_Multiplier = 1154498019;
Widget_ScrollX = 'o';
Widget_ScrollX_Multiplier = -1096692949;
Widget_ScrollY = 'm';
Widget_ScrollY_Multiplier = 1512227783;
Widget_SpriteID = 'am';
Widget_SpriteID_Multiplier = 132754559;
Widget_StackSize = 'dv';
Widget_StackSize_Multiplier = 192913583;
Widget_GetStackSizes = 'dk';
Widget_GetText = 'br';
Widget_GetTextureID = 'aq';
Widget_GetTextureID_Multiplier = 2009338005;
Widget_Width = 'k';
Widget_Width_Multiplier = -764139897;
Widget_X = 'p';
Widget_X_Multiplier = 692928385;
Widget_Y = 'x';
Widget_Y_Multiplier = -598844925;
Widget_isHidden = 'i';

{* WidgetNode - 1 Hooks *}
WidgetNode = 'e';
WidgetNode_ID = 't';
WidgetNode_ID_Multiplier = 2097571581;

darkspell

2014-09-06 15:26:49

From: Grunt
Get used to waiting.


Yeah, I can wait but just checking. Guess I will be off for a while until his return.

Krazy_Meerkat

2014-09-07 03:05:00

The hooks have been updated, thanks Cheddy.
I'm not here to debate naming, although the names used in this include aren't entirely logical, it's better not to have this discussion at the minute b/c it's a matter of opinion in the end (eg. Actor class could also be called Character, Entity, etc.) not to mention that Cheddy's updater is for a different include.

tls

2014-09-07 03:39:07

From: Krazy_Meerkat
The hooks have been updated, thanks Cheddy (you were only missing the npcdef_level hook).
I'm not here to debate naming, although the names used in this include aren't entirely logical, it's better not to have this discussion at the minute b/c it's a matter of opinion in the end (eg. Actor class could also be called Character, Entity, etc.) not to mention that Cheddy's updater is for a different include.


npcdef_level = npcdef_combatlvl

Krazy_Meerkat

2014-09-07 03:44:03

From: tls
npcdef_level = npcdef_combatlvl


:p I guess I looked over that too quickly.

tim1142

2014-09-07 12:18:16

Error: Out Of Range at line 509
The following DTMs were not freed: [SRL - Lamp bitmap, SRL - Book of Knowledge, 2]
The following bitmaps were not freed: [SRL - Mod bitmap, SRL - Admin bitmap, SRL - Minimap Mask bitmap, 3]

^ is in the misc file.

Getting this now that the reflection include updated. Any ideas on what to do??

Cheddy

2014-09-07 12:35:22

From: tim1142
Error: Out Of Range at line 509
The following DTMs were not freed: [SRL - Lamp bitmap, SRL - Book of Knowledge, 2]
The following bitmaps were not freed: [SRL - Mod bitmap, SRL - Admin bitmap, SRL - Minimap Mask bitmap, 3]

^ is in the misc file.

Getting this now that the reflection include updated. Any ideas on what to do??

That would be cause my menuCount hook is wrong =)


Client_MenuCount = 'client.ip';
Client_MenuCount_Multiplier = -686236781;

tim1142

2014-09-07 13:15:01

From: Cheddy
That would be cause my menuCount hook is wrong =)


Client_MenuCount = 'client.ip';
Client_MenuCount_Multiplier = -686236781;


Yeah I was looking through it and noticed it was "client.ak" not ".ip". Thanks for the fix.

edit: this is kind of awkward, but i just realized that i'm on my very first account i made here…

Grunt

2014-09-07 13:31:22

What happened to our Updater? o.O

Harrier

2014-09-07 13:46:53

From: Grunt
What happened to our Updater? o.O

It turned into spaghetti and is been rewrote.

NKN

2014-09-07 14:20:41

From: Grunt
What happened to our Updater? o.O


It died in a fire.

Bless its heart.

icode

2014-09-07 17:56:16

From: Cheddy
That would be cause my menuCount hook is wrong =)


Client_MenuCount = 'client.ip';
Client_MenuCount_Multiplier = -686236781;


I can't find that in the misc file to replace :/

EDIT: it's in the hooks file my bad.

Cheddy

2014-09-07 18:00:58

From: icode
I can't find that in the misc file to replace :/


That would be because it is in /Core/Hooks.simba =)

ineedbot

2014-09-11 16:03:39

Well randoms are completely optional now…

Fitta

2014-09-12 12:49:50

Add something where you can input the offset in extends. For example, when you want to attack a dragon.
Had to make a seperate function, it's an really easy add.



function dragon_TileToMS(Tile: TPoint): TPoint;
var
X, Y, Height: Integer;
begin
X := Round((Tile.X - (SmartGetFieldInt(SmartCurrentTarget, 0, client_baseX) * client_baseX_Multiplier) - 0.0) * 128);
Y := Round((Tile.Y - (SmartGetFieldInt(SmartCurrentTarget, 0, client_baseY) * client_baseY_Multiplier) - 0.0) * 128);
Height := R_GetTileHeight(Tile);
Result := R_TileToMSEx(X, Y, Height);
if (not PointInBox(Result, MSBox)) then
Result := Point(-1, -1);
end;

Edit:
0,5 -> 0,0 on the math in TileToMS :)

Fitta

2014-09-12 18:38:57

From: ineedbot
Sweet, I cant wait to see it complete!

So far I came up with this

All the hooks work and everything is accurate, however CurrentHP and MaxHP return 0 for some reason. Also I'm unsure if TileWalkQueue is doing anything. Only returning (-1, -1)…


Fixed it to match our hook names :)


type TRSPlayer = record
Name, OverheadText : String;
Level, CurrentHP, MaxHP, Animation, Interacting, Orientation, Plane : Integer;
InCombat : boolean;
Tile, TileWalkQueue : TPoint;
end;
TRSPlayerArray = array of TRSPlayer;

function R_GetAllRSPlayers: TRSPlayerArray;
var
i, j, PlayerCount, Ref, PlayerName, Overhead, x, y, LoopCycle : Integer;
begin
PlayerCount := SmartGetFieldArraySize(SmartCurrentTarget, 0, Client_Players, 0);
for i:=0 to PlayerCount-1 do begin
Ref := SmartGetFieldArrayObject(SmartCurrentTarget, 0, Client_Players, i);

if (Ref <= 0) then
Continue;
Inc(j);
SetLength(Result, j);

PlayerName := SmartGetFieldObject(SmartCurrentTarget, Ref, Player_Name);
x := SmartGetFieldInt(SmartCurrentTarget, 0, Client_BaseX)*Client_BaseX_Multiplier;
y := SmartGetFieldInt(SmartCurrentTarget, 0, Client_BaseY)*Client_BaseY_Multiplier;
LoopCycle := SmartGetFieldInt(SmartCurrentTarget, 0, Client_LoopCycle)*Client_LoopCycle_Multiplier;
with Result[j-1] do begin
Level := SmartGetFieldInt(SmartCurrentTarget, Ref, Player_CombatLevel)*Player_CombatLevel_Multiplier;
CurrentHP := SmartGetFieldInt(SmartCurrentTarget, Ref, Actor_Health)*Actor_Health_Multiplier;
MaxHP := SmartGetFieldInt(SmartCurrentTarget, Ref, Actor_MaxHealth)*Actor_MaxHealth_Multiplier;
Animation := SmartGetFieldInt(SmartCurrentTarget, Ref, Actor_Animation)*Actor_Animation_Multiplier;
Interacting := SmartGetFieldInt(SmartCurrentTarget, Ref, Actor_Interacting)*Actor_Interacting_Multiplier;
Orientation := Round(FixD(180 + (SmartGetFieldInt(SmartCurrentTarget, Ref, Actor_Orientation)*Actor_Orientation_Multiplier*45)/2048));
Plane := SmartGetFieldInt(SmartCurrentTarget, 0, Client_Plane)*Client_Plane_Multiplier; //uses client's plane it was found on...
Name := R_GetJavaString(PlayerName, 512);
OverheadText := R_GetJavaString(Overhead, 512);
InCombat := (SmartGetFieldInt(SmartCurrentTarget, Ref, Actor_CombatCycle) * Actor_CombatCycle_Multiplier) > LoopCycle;
Tile := Point(x + (SmartGetFieldInt(SmartCurrentTarget, Ref, Actor_LocalX) * Actor_LocalX_Multiplier) div 128, y + (SmartGetFieldInt(SmartCurrentTarget, Ref, Actor_LocalY) * Actor_LocalY_Multiplier) div 128);
TileWalkQueue := Point(SmartGetFieldInt(SmartCurrentTarget, Ref, Actor_PathX), SmartGetFieldInt(SmartCurrentTarget, Ref, Actor_PathY));
end;
SmartFreeObject(SmartCurrentTarget, PlayerName);
SmartFreeObject(SmartCurrentTarget, Ref);
SmartFreeObject(SmartCurrentTarget, Overhead);
end;
end;


EDIT:
Add it?

function get_CB: integer;
begin
Result := StrToIntDef(GetNumbers(R_GetWidgetText(R_GetWidget(593, 2))), -1);
end;

tim1142

2014-09-13 13:56:02

Would it break the reflection include if i removed the antirandoms folder? I don't want it to detect randoms anymore since they are optional now.

NKN

2014-09-13 16:15:03

From: tim1142
Would it break the reflection include if i removed the antirandoms folder? I don't want it to detect randoms anymore since they are optional now.


Why not just keep them in there and not use them..?

Harrier

2014-09-13 17:45:49

From: NKN
Why not just keep them in there and not use them..?

Guess he doesn't know that he needs to remove r_findnormalrandom or w/e from the script.

Fitta

2014-09-14 09:55:00

From: tim1142
Would it break the reflection include if i removed the antirandoms folder? I don't want it to detect randoms anymore since they are optional now.


Just search through the script and delete all the lines with the following "r_FindNormalRandoms", after that if the script does NOT compile, just pm me the script and I'll happily help you sort it out :)

tim1142

2014-09-14 11:30:14

From: Fitta
Just search through the script and delete all the lines with the following "r_FindNormalRandoms", after that if the script does NOT compile, just pm me the script and I'll happily help you sort it out :)


Got it, of course i'll try to get it in working order first, but if i cant i'll pm you. Thanks a ton man.

tim1142

2014-09-14 11:43:36

From: Fitta
Just search through the script and delete all the lines with the following "r_FindNormalRandoms", after that if the script does NOT compile, just pm me the script and I'll happily help you sort it out :)


Okay, I just went through it. Had to remove a few procedures that would call findnormalrandoms, and a procedure that was called like 45 times lol. Thanks for the help, your guidance helped me complete this really quick.

NKN

2014-09-14 15:59:15

From: tim1142
Okay, I just went through it. Had to remove a few procedures that would call findnormalrandoms, and a procedure that was called like 45 times lol. Thanks for the help, your guidance helped me complete this really quick.


why does it matter if that's still in the script or not tho.

Does it slow it down that much?

ineedbot

2014-09-14 16:53:52

From: NKN
why does it matter if that's still in the script or not tho.

Does it slow it down that much?


Jagex updated the chat when you talk with the randoms. You sometimes gotta select an option with some of the randoms, then it takes too long as it doesn't know what to do and then fails and stops the script.

Dervish

2014-09-17 12:55:04

R_GetSkillLevel or maybe it is R_GetHealth doesn't seem to work, broken hook ?

Fitta

2014-09-17 14:35:16

R_GetSkillLevel works fine.
R_GetHealth is based on R_GetSkillLevel.

My guess without testing would be that the constant SKILL_HITPOINTS is wrong?

Use getCurrentHealth, uses color but works flawless!

EDIT:
Writeln(R_GetSkillLevel(SKILL_HITPOINTS)); works fine?

EDIT:
@Dervish, both functions work fine :)

Cheddy

2014-09-17 16:24:08

From: Dervish
R_GetSkillLevel or maybe it is R_GetHealth doesn't seem to work, broken hook ?


The hooks are right. Just note that the Actor#currentHealth and Actor#Health only return a value when the actors health bar is showing. These should only be used to find the health of other actors; for your player just use the skill level and realLevel

Dervish

2014-09-17 16:38:49

Hmm.. I don't understand why this doesn't work and just loops infinitely then :

      if PrayingMelee then
begin
GameTab(tab_Prayer);
Prayer_Mouse('Protect',false);
repeat
Wait(50);
until(R_GetHealth < 13);
Prayer_Mouse('Protect',true);
end;

It doesn't seem to detect that current hitpoints are < 13.

function R_GetHealth: extended;
begin
Result := R_GetSkillLevel(skill_hitpoints);
end;

Doesn't work so… Where is the problem ? :s

Cheddy

2014-09-17 18:16:52

From: Dervish
Hmm.. I don't understand why this doesn't work and just loops infinitely then :

      if PrayingMelee then
begin
GameTab(tab_Prayer);
Prayer_Mouse('Protect',false);
repeat
Wait(50);
until(R_GetHealth < 13);
Prayer_Mouse('Protect',true);
end;

It doesn't seem to detect that current hitpoints are < 13.

function R_GetHealth: extended;
begin
Result := R_GetSkillLevel(skill_hitpoints);
end;

Doesn't work so… Where is the problem ? :s

Only thing I can suggest is checking that skill_hitpoints = 3 :spot:

k0p3

2014-09-18 07:54:41

From: Dervish
Hmm.. I don't understand why this doesn't work and just loops infinitely then :

      if PrayingMelee then
begin
GameTab(tab_Prayer);
Prayer_Mouse('Protect',false);
repeat
Wait(50);
until(R_GetHealth < 13);
Prayer_Mouse('Protect',true);
end;

It doesn't seem to detect that current hitpoints are < 13.

function R_GetHealth: extended;
begin
Result := R_GetSkillLevel(skill_hitpoints);
end;

Doesn't work so… Where is the problem ? :s

I would suggest to use the getHealthPercent instead.
function Check_HP: boolean;
begin
if (getHealthPercent < RandomRange(50,70)) then Result := true;
end;

Fitta

2014-09-18 16:44:19

if PrayingMelee then
begin
GameTab(tab_Prayer);
Prayer_Mouse('Protect',false);
repeat
Wait(50);
Writeln('R_GetHealth says: ' + ToStr(R_GetHealth));
until(Round(R_GetHealth) < 13);
Prayer_Mouse('Protect',true);
end;

Test and get back here.

darkspell

2014-09-18 17:24:22

Reflection hooks are outdated again? Hmm..

NKN

2014-09-18 18:06:19

From: darkspell
Reflection hooks are outdated again? Hmm..


If you could read to me the bottom of the debug log in Simba.

Yeah, the one that says -do not post-, yeah that one.

Hoodz

2014-09-18 18:43:44

From: NKN
If you could read to me the bottom of the debug log in Simba.

Yeah, the one that says -do not post-, yeah that one.


Nooo spamming this thread will make the devs work faster, they are totally not wasting time by reading comments like "hooks are oudated"

Noob King

2014-09-18 19:31:09

From: NKN
If you could read to me the bottom of the debug log in Simba.

Yeah, the one that says -do not post-, yeah that one.


Is your updater not being used to maintain the hooks? I thought it was, unless I'm using the wrong one.

NKN

2014-09-18 20:21:22

From: Noob King
Is your updater not being used to maintain the hooks? I thought it was, unless I'm using the wrong one.


I've never finished an updater completely.

AFAIK, Meerkat had his own that he used, idk if he's still around or if we're just using Cheddy's

Noob King

2014-09-19 08:54:22

From: NKN
I've never finished an updater completely.

AFAIK, Meerkat had his own that he used, idk if he's still around or if we're just using Cheddy's


Ahh my bad. I thought I read somewhere it was yours being used. Anyways i'm impatient and found your updater on github lol.

darkspell

2014-09-19 13:27:04

From: NKN
If you could read to me the bottom of the debug log in Simba.

Yeah, the one that says -do not post-, yeah that one.


Someone has to urahara-san. Maybe Cheddy is still around to check.

NKN

2014-09-19 16:15:56

From: darkspell
Someone has to urahara-san. Maybe Cheddy is still around to check.


no, no one has to.

the developers get the same message.

Cheddy

2014-09-19 16:39:22

I'll post a log in a bit =) Just fixing my dummy method removal as the update to JDK 8 broke the ASM class reader :/

Cheddy

2014-09-19 16:52:14

2 breaks :/ Probably some other wrong hooks so watch out :fiery:
Hope not one was using Widget#getTextureID or Widget#getSpriteID ;)

{ 207 Hooks Found By Cheddys Updater }

const
ReflectionRevision = '59';


{* BoundaryObject - 9 Hooks *}
BoundaryObject = 'ch';
BoundaryObject_AlternativeOrientation = 'm';
BoundaryObject_AlternativeOrientation_Multiplier = -819118419;
BoundaryObject_BackupRenderable = 'g';
BoundaryObject_Flags = 'o';
BoundaryObject_Flags_Multiplier = -502210369;
BoundaryObject_Hash = 'p';
BoundaryObject_Hash_Multiplier = 2052265757;
BoundaryObject_Orientation = 'w';
BoundaryObject_Orientation_Multiplier = -809690117;
BoundaryObject_Plane = 'k';
BoundaryObject_Plane_Multiplier = -1486221241;
BoundaryObject_Renderable = 'j';
BoundaryObject_Get_X = 'r';
BoundaryObject_Get_X_Multiplier = 1210170359;
BoundaryObject_Get_Y = 'y';
BoundaryObject_Get_Y_Multiplier = 1401870691;

{* Buffer - 2 Hooks *}
Buffer = 'de';
Buffer_Offset = 'r';
Buffer_Offset_Multiplier = 1617124369;
Buffer_Payload = 'k';

{* Cache - 5 Hooks *}
Cache = 'fz';
Cache_CacheableNode = 'k';
Cache_NodeHashTable = 'w';
Cache_Queue = 'm';
Cache_Remaining = 'y';
Cache_Remaining_Multiplier = 1;
Cache_Size = 'r';
Cache_Size_Multiplier = 1;

{* CacheableNode - 2 Hooks *}
CacheableNode = 'fj';
CacheableNode_Next = 'cr';
CacheableNode_Prev = 'cd';

{* Canvas - 1 Hooks *}
Canvas = 'dd';
Canvas_Component = 'k';

{* Actor - 17 Hooks *}
Actor = 'an';
Actor_Animation = 'ao';
Actor_Animation_Multiplier = 296689511;
Actor_CombatCycle = 'ad';
Actor_CombatCycle_Multiplier = 1195205775;
Actor_Health = 'af';
Actor_Health_Multiplier = 722959445;
Actor_HitCycles = 'as';
Actor_HitDamages = 'am';
Actor_HitTypes = 'ae';
Actor_Interacting = 'at';
Actor_Interacting_Multiplier = 1552651505;
Actor_MaxHealth = 'ab';
Actor_MaxHealth_Multiplier = -532478459;
Actor_Orientation = 'bj';
Actor_Orientation_Multiplier = 1018188061;
Actor_PathLength = 'by';
Actor_PathLength_Multiplier = 153678603;
Actor_PathTraversed = 'bt';
Actor_PathX = 'bg';
Actor_PathY = 'bm';
Actor_ActiveText = 'aq';
Actor_LocalX = 'e';
Actor_LocalX_Multiplier = 704794231;
Actor_LocalY = 'a';
Actor_LocalY_Multiplier = -759612205;
Actor_isInSequence = 'aj';

{* Client - 53 Hooks *}
Client = 'client';
Client_BaseX = 'cf.cw';
Client_BaseX_Multiplier = 787673155;
Client_BaseY = 'cr.cu';
Client_BaseY_Multiplier = -2026921865;
Client_CameraPitch = 'bi.fb';
Client_CameraPitch_Multiplier = -479031223;
Client_CameraX = 'client.fs';
Client_CameraX_Multiplier = 437628867;
Client_CameraY = 'ak.fr';
Client_CameraY_Multiplier = -1123306917;
Client_CameraYaw = 'gr.fv';
Client_CameraYaw_Multiplier = -436769289;
Client_CameraZ = 'el.fl';
Client_CameraZ_Multiplier = -403565165;
Client_Canvas = 'ci.pw';
Client_CollisionMaps = 'client.w';
Client_Run_Energy = 'client.jo';
Client_Run_Energy_Multiplier = -570678189;
Client_Experiences = 'client.hs';
Client_LoopCycle = 'client.i';
Client_LoopCycle_Multiplier = -1092411589;
Client_Login_State = 'client.u';
Client_Login_State_Multiplier = 2064132071;
Client_GroundItems = 'client.hg';
Client_ItemDefinitionCache = 'ab.w';
Client_ItemContainerTable = 's.k';
Client_Levels = 'client.hp';
Client_NPCs = 'client.bm';
Client_Player = 'h.hq';
Client_Players = 'client.gc';
Client_LoginState = 'ak.an';
Client_LoginState_Multiplier = 237103599;
Client_CompassAngle = 'client.fg';
Client_CompassAngle_Multiplier = 1654042681;
Client_Map_Offset = 'client.dy';
Client_Map_Offset_Multiplier = 217164645;
Client_Map_Scale = 'client.dj';
Client_Map_Scale_Multiplier = -1656813265;
Client_MenuActions = 'client.iy';
Client_MenuCount = 'client.aa';
Client_MenuCount_Multiplier = 54657429;
Client_MenuHeight = 'cc.il';
Client_MenuHeight_Multiplier = 1475787801;
Client_MenuOptions = 'client.ib';
Client_MenuWidth = 'client.iq';
Client_MenuWidth_Multiplier = 53963819;
Client_MenuX = 'af.hx';
Client_MenuX_Multiplier = -1914796849;
Client_MenuY = 'cb.hw';
Client_MenuY_Multiplier = -364129309;
Client_NPCDefinitionCache = 'aj.y';
Client_NPCIndices = 'client.bx';
Client_ObjectDefinitionCache = 'az.w';
Client_Password = 'ak.ax';
Client_Plane = 's.hv';
Client_Plane_Multiplier = 2117524171;
Client_RealLevels = 'client.hk';
Client_Region = 'd.do';
Client_Settings = 'eo.r';
Client_GroundHeights = 'j.k';
Client_GroundSettings = 'j.r';
Client_Username = 'ak.az';
Client_ValidWidgets = 'ei.r';
Client_Weight = 'client.jg';
Client_Weight_Multiplier = 847921335;
Client_WidgetBoundsHeight = 'client.lw';
Client_WidgetBoundsWidth = 'client.lq';
Client_WidgetBoundsX = 'client.lp';
Client_WidgetBoundsY = 'client.lj';
Client_WidgetNodeTable = 'client.jk';
Client_Widgets = 'en.k';
Client_WidgetSettings = 'eo.y';
Client_WidgetVarps = 'eo.y';
Client_isMenuOpen = 'client.hl';

{* CollisionMap - 1 Hooks *}
CollisionMap = 'ga';
CollisionMap_Flags = 'aw';

{* FloorDecorationObject - 6 Hooks *}
FloorDecorationObject = 'cf';
FloorDecorationObject_Flags = 'j';
FloorDecorationObject_Flags_Multiplier = 1711360093;
FloorDecorationObject_Hash = 'm';
FloorDecorationObject_Hash_Multiplier = -695201075;
FloorDecorationObject_Plane = 'k';
FloorDecorationObject_Plane_Multiplier = -875389279;
FloorDecorationObject_Renderable = 'w';
FloorDecorationObject_Get_X = 'r';
FloorDecorationObject_Get_X_Multiplier = 210733581;
FloorDecorationObject_Get_Y = 'y';
FloorDecorationObject_Get_Y_Multiplier = 1265744713;

{* NodeHashTable - 5 Hooks *}
NodeHashTable = 'fd';
NodeHashTable_Current = 'w';
NodeHashTable_CurrentIndex = 'm';
NodeHashTable_CurrentIndex_Multiplier = 1;
NodeHashTable_Head = 'y';
NodeHashTable_GetNodes = 'r';
NodeHashTable_GetSize = 'k';
NodeHashTable_GetSize_Multiplier = 1;

{* Item - 2 Hooks *}
Item = 'q';
Item_ID = 'k';
Item_ID_Multiplier = 1682086687;
Item_StackSize = 'r';
Item_StackSize_Multiplier = 1210858279;

{* ItemDefinition - 4 Hooks *}
ItemDefinition = 'ab';
ItemDefinition_GroundActions = 'f';
ItemDefinition_Name = 'b';
ItemDefinition_InventoryActions = 'q';
ItemDefinition_isMembers = 'c';

{* ItemContainer - 2 Hooks *}
ItemContainer = 's';
ItemContainer_IDs = 'r';
ItemContainer_StackSizes = 'y';

{* ItemLayer - 8 Hooks *}
ItemLayer = 'ci';
ItemLayer_BottomRenderable = 'w';
ItemLayer_Height = 'p';
ItemLayer_Height_Multiplier = 1735202963;
ItemLayer_ID = 'g';
ItemLayer_ID_Multiplier = 1983940829;
ItemLayer_MiddleRenderable = 'm';
ItemLayer_Plane = 'k';
ItemLayer_Plane_Multiplier = -1117706059;
ItemLayer_TopRenderable = 'j';
ItemLayer_X = 'r';
ItemLayer_X_Multiplier = 212577641;
ItemLayer_Y = 'y';
ItemLayer_Y_Multiplier = 13676537;

{* LinkedList - 2 Hooks *}
LinkedList = 'fi';
LinkedList_Head = 'k';
LinkedList_Tail = 'r';

{* Model - 12 Hooks *}
Model = 'cp';
Model_IndicesX = 'b';
Model_IndicesY = 'x';
Model_IndicesZ = 'n';
Model_TexturedIndicesX = 'd';
Model_TexturedIndicesY = 's';
Model_TexturedIndicesZ = 'v';
Model_TexturedVerticesX = 'b';
Model_TexturedVerticesY = 'x';
Model_TexturedVerticesZ = 'n';
Model_VerticesX = 'j';
Model_VerticesY = 'g';
Model_VerticesZ = 'p';

{* Node - 3 Hooks *}
Node = 'go';
Node_Next = 'ef';
Node_Previous = 'er';
Node_ID = 'dy';

{* NPC - 1 Hooks *}
NPC = 'aw';
NPC_Definition = 'k';

{* NPCDefinition - 7 Hooks *}
NPCDefinition = 'aj';
NPCDefinition_Actions = 'e';
NPCDefinition_Level = 'c';
NPCDefinition_Level_Multiplier = 1235631845;
NPCDefinition_ID = 'm';
NPCDefinition_ID_Multiplier = 318160851;
NPCDefinition_Name = 'j';
NPCDefinition_SettingID = 'av';
NPCDefinition_SettingID_Multiplier = -632881019;
NPCDefinition_TransformIDs = 'ai';
NPCDefinition_VarBitID = 'an';
NPCDefinition_VarBitID_Multiplier = 536366809;

{* ObjectDefinition - 2 Hooks *}
ObjectDefinition = 'az';
ObjectDefinition_Actions = 'al';
ObjectDefinition_Name = 'n';

{* Player - 3 Hooks *}
Player = 'y';
Player_CombatLevel = 'm';
Player_CombatLevel_Multiplier = 275292137;
Player_Model = 'd';
Player_Name = 'k';

{* Queue - 1 Hooks *}
Queue = 'fm';
Queue_Head = 'k';

{* Region - 2 Hooks *}
Region = 'cn';
Region_Objects = 'o';
Region_SceneTiles = 'j';

{* Renderable - 1 Hooks *}
Renderable = 'bx';
Renderable_ModelHeight = 'ch';
Renderable_ModelHeight_Multiplier = -977385459;

{* WorldObject - 12 Hooks *}
WorldObject = 'ck';
WorldObject_Flags = 's';
WorldObject_Flags_Multiplier = -481706441;
WorldObject_Height = 'r';
WorldObject_Height_Multiplier = -1125703737;
WorldObject_Hash = 'd';
WorldObject_Hash_Multiplier = -1206431167;
WorldObject_Orientation = 'm';
WorldObject_Orientation_Multiplier = -1030542201;
WorldObject_Plane = 'k';
WorldObject_Plane_Multiplier = 2093853645;
WorldObject_RelativeX = 'g';
WorldObject_RelativeX_Multiplier = -1597364385;
WorldObject_RelativeY = 'o';
WorldObject_RelativeY_Multiplier = 685933967;
WorldObject_Renderable = 'j';
WorldObject_SizeX = 'p';
WorldObject_SizeX_Multiplier = 895506901;
WorldObject_SizeY = 'b';
WorldObject_SizeY_Multiplier = 967160897;
WorldObject_Get_X = 'y';
WorldObject_Get_X_Multiplier = -390074187;
WorldObject_Get_Y = 'w';
WorldObject_Get_Y_Multiplier = -1184474629;

{* SceneTile - 8 Hooks *}
SceneTile = 'cb';
SceneTile_BoundaryObject = 'g';
SceneTile_FloorDecorationObject = 'o';
SceneTile_ItemLayer = 'b';
SceneTile_Plane = 'w';
SceneTile_Plane_Multiplier = -856405677;
SceneTile_WorldObjects = 'n';
SceneTile_WallObject = 'p';
SceneTile_X = 'r';
SceneTile_X_Multiplier = -1289280687;
SceneTile_Y = 'y';
SceneTile_Y_Multiplier = 693691307;

{* WallObject - 11 Hooks *}
WallObject = 'ca';
WallObject_BackupRenderable = 'o';
WallObject_Flags = 'x';
WallObject_Flags_Multiplier = 2099554427;
WallObject_Height = 'm';
WallObject_Height_Multiplier = -266248503;
WallObject_Hash = 'b';
WallObject_Hash_Multiplier = 723969563;
WallObject_Orientation = 'w';
WallObject_Orientation_Multiplier = -273230309;
WallObject_Plane = 'k';
WallObject_Plane_Multiplier = 1785789031;
WallObject_RelativeX = 'j';
WallObject_RelativeX_Multiplier = 154961493;
WallObject_RelativeY = 'g';
WallObject_RelativeY_Multiplier = -1144849677;
WallObject_Renderable = 'p';
WallObject_X = 'r';
WallObject_X_Multiplier = 1038229795;
WallObject_Y = 'y';
WallObject_Y_Multiplier = -1388658969;

{* Widget - 24 Hooks *}
Widget = 'en';
Widget_GetActions = 'bi';
Widget_BorderThickness = 'am';
Widget_BorderThickness_Multiplier = 928110287;
Widget_BoundsIndex = 'dz';
Widget_BoundsIndex_Multiplier = 1011007915;
Widget_Children = 'di';
Widget_GetItems = 'db';
Widget_Height = 'a';
Widget_Height_Multiplier = 1486275607;
Widget_GetID = 's';
Widget_GetID_Multiplier = 275386787;
Widget_GetIndex = 'v';
Widget_GetIndex_Multiplier = 1117261515;
Widget_ItemID = 'dr';
Widget_ItemID_Multiplier = -1655628037;
Widget_LoopCycleStatus = 'dj';
Widget_LoopCycleStatus_Multiplier = 843259955;
Widget_Name = 'bp';
Widget_GetRelativeX = 'y';
Widget_GetRelativeX_Multiplier = 219780081;
Widget_GetRelativeY = 'h';
Widget_GetRelativeY_Multiplier = 1724903883;
Widget_Root = 'by';
Widget_RootID = 'c';
Widget_RootID_Multiplier = 396507425;
Widget_ScrollX = 'q';
Widget_ScrollX_Multiplier = 759718085;
Widget_ScrollY = 'z';
Widget_ScrollY_Multiplier = -631678375;
Widget_SpriteID = 'null';
Widget_StackSize = 'dk';
Widget_StackSize_Multiplier = 1236267309;
Widget_GetStackSizes = 'do';
Widget_GetText = 'bo';
Widget_GetTextureID = 'null';
Widget_Width = 'e';
Widget_Width_Multiplier = 821762893;
Widget_X = 'i';
Widget_X_Multiplier = -136421911;
Widget_Y = 'x';
Widget_Y_Multiplier = 2130533229;
Widget_isHidden = 'f';

{* WidgetNode - 1 Hooks *}
WidgetNode = 'w';
WidgetNode_ID = 'k';
WidgetNode_ID_Multiplier = 448983669;

Hasselihas

2014-09-19 17:40:19

From: Cheddy
2 breaks :/ Probably some other wrong hooks so watch out :fiery:
Hope not one was using Widget#getTextureID or Widget#getSpriteID ;)

Hooks


Does this require anything else than just replace my hooks.simba with these?

Edit: Simba is telling me that the hooks are outdated and just shutdowns the script eventho trying to use Cheddy's hooks. How should I be bypassing this?

darkspell

2014-09-19 18:55:08

[Error] \Simba\Includes\SRL-OSR\SRL\Reflection\Core\Player.simba(99:58): Unknown identifier 'client_real_levels' at line 99
[Error] \Simba\Includes\SRL-OSR\SRL\Reflection\Core\Player.simba(22:9): Unknown identifier 'SmartGetFieldObject' at line 22

Fitta

2014-09-19 18:56:13

Change the rev number :)

darkspell

2014-09-20 01:24:16

From: Fitta
Change the rev number :)


Where do I do this? I did it to current rev already and still giving me same errors.

tls

2014-09-20 01:28:32

From: darkspell
Where do I do this? I did it to current rev already and still giving me same errors.


Change from 59 to 58 in the new hooks that cheddy posted.

Cheddy

2014-09-20 02:04:10

From: darkspell
[Error] \Simba\Includes\SRL-OSR\SRL\Reflection\Core\Player.simba(99:58): Unknown identifier 'client_real_levels' at line 99
[Error] \Simba\Includes\SRL-OSR\SRL\Reflection\Core\Player.simba(22:9): Unknown identifier 'SmartGetFieldObject' at line 22

Your problem is the naming. Change Client_RealLevels to Client_Real_Levels

tim1142

2014-09-20 03:29:48

Right now im getting the error that line 515 in misc is out of range. any idea what is causing this? I fixed the hooks and the naming issue with client_real_levels. tried finding the error but i cant.

tls

2014-09-20 03:34:18

Probably broken hooks.

darkspell

2014-09-20 16:54:19

Thanks Cheddy. But now getting this:
Error: Out Of Range at line 509
The following DTMs were not freed: [SRL - Lamp bitmap, SRL - Book of Knowledge, 2, 3, 4, 5, 6]
The following bitmaps were not freed: [SRL - Mod bitmap, SRL - Admin bitmap, SRL - Minimap Mask bitmap]

vizzyy

2014-09-20 18:14:50

From: tim1142
Right now im getting the error that line 515 in misc is out of range. any idea what is causing this? I fixed the hooks and the naming issue with client_real_levels. tried finding the error but i cant.


I'm getting this same error .


Error: Out Of Range at line 511


Occurs every time when my script calls R_BlindWalk

iEatApplez

2014-09-21 18:36:58

I don't wanna come over as leecher-ish but I'm just wondering why it didn't auto-update this time, as it auto-updates usually =o

darkspell

2014-09-22 00:53:53

From: Annonymus
I don't wanna come over as leecher-ish but I'm just wondering why it didn't auto-update this time, as it auto-updates usually =o


Me too, let's just wait for an update by next week.

iEatApplez

2014-09-22 01:05:57

From: darkspell
Me too, let's just wait for an update by next week.


https://villavu.com/forum/showthread.php?t=107479&page=22&p=1307777#post1307777
Use them, no need to wait.

darkspell

2014-09-22 10:29:03

From: Annonymus
https://villavu.com/forum/showthread.php?t=107479&page=22&p=1307777#post1307777
Use them, no need to wait.


Use what? Those are outdated and there seems to be an error "out of range" when running my scripts also what vizzyy posted.

Cheddy

2014-09-22 12:49:50

From: darkspell
Use what? Those are outdated and there seems to be an error "out of range" when running my scripts also what vizzyy posted.


The error is my Client#menuCount hook: change it to (in the hooks.simba file):

Client_MenuCount = 'client.iv';
Client_MenuCount_Multiplier = 837382777;

Krazy_Meerkat

2014-09-24 00:42:36

:/ Well this is awkward.. I normally get on the updates v quickly.. Just happened to go AFK for a week the day before an update..
Must confess that I've been losing inspiration lately though.. Invested a lot into making a new updater then realised I was the only one interested.. No help from the forum mods when I asked for a reflection subforum re-vamp, etc. etc..
But I love PascalScript and that's why I came back to srl, I didn't come back to try and take over anything or resume Developing..
I'll update the hooks in a couple of hours when I get back..
I've been speaking with the old reflection dev's about the circumstances surrounding the death of SRL's Reflection 2 and it's been very interesting to say the least.. I was asked not to discuss the details so I will honour that request.
I've really enjoyed the experience from writing an updater and using it for our close-knit reflection user base.. Although NKN might've given up, I am still working on the updater for SRL in private.
Been checking out some of Flight's AL stuff and planning to help him implement reflection into AL :) Time has been short though and I haven't been able to spend as much time as I want on this atm.
I'll be back later to test/update the hooks, but Cheddy deserves thanks for the last hook update (and likely this one)..
I have a more "complete" updater, but I stopped working on it at R42 to start from a clean base. It was frustrating and time-consuming re-writing analysers every update..

Hoodz

2014-09-24 03:17:32

From: Krazy_Meerkat
:/ Well this is awkward.. I normally get on the updates v quickly.. Just happened to go AFK for a week the day before an update..
Must confess that I've been losing inspiration lately though.. Invested a lot into making a new updater then realised I was the only one interested.. No help from the forum mods when I asked for a reflection subforum re-vamp, etc. etc..
But I love PascalScript and that's why I came back to srl, I didn't come back to try and take over anything or resume Developing..
I'll update the hooks in a couple of hours when I get back..
I've been speaking with the old reflection dev's about the circumstances surrounding the death of SRL's Reflection 2 and it's been very interesting to say the least.. I was asked not to discuss the details so I will honour that request.
I've really enjoyed the experience from writing an updater and using it for our close-knit reflection user base.. Although NKN might've given up, I am still working on the updater for SRL in private.
Been checking out some of Flight's AL stuff and planning to help him implement reflection into AL :) Time has been short though and I haven't been able to spend as much time as I want on this atm.
I'll be back later to test/update the hooks, but Cheddy deserves thanks for the last hook update (and likely this one)..
I have a more "complete" updater, but I stopped working on it at R42 to start from a clean base. It was frustrating and time-consuming re-writing analysers every update..


mate get on skype

Brandon

2014-09-24 06:35:55

From: Krazy_Meerkat

Must confess that I've been losing inspiration lately though.. Invested a lot into making a new updater then realised I was the only one interested.. No help from the forum mods when I asked for a reflection subforum re-vamp, etc. etc..


You're most likely never going to see that forum update in your lifetime here. I say this because the "spoiler tag" is still a beta tag. It was to get an update to make it "look" better a long time ago. I can't imagine seeing an entire sub-forum re-vamp. Not now, not ever.. But then again, I'm not very optimistic.

As for the interest or help, welcome to villavu: Home of Pascal developers and few outcasts. It's likely because there's very little Java around here other than the little that's in SMART as well as the lack of tutorials and that almost everything is practically strictly colour.

Maybe RS is just dying.. RS just gets so boring.. I dunno.

tls

2014-09-24 14:34:06

Subforums have already been restructured…like 2 weeks ago. I have offered you the opportunity to contribute multiple times. The last week has been crazy busy for me, so I haven't done much on the include but I have been adding at least one hook a day to the updater.

Hoodz

2014-09-24 15:31:31

From: tls
Subforums have already been restructured…like 2 weeks ago. I have offered you the opportunity to contribute multiple times. The last week has been crazy busy for me, so I haven't done much on the include but I have been adding at least one hook a day to the updater.


why are you making another include if there is already an include

Brandon

2014-09-24 15:36:31

From: hoodz
why are you making another include if there is already an include


Have you seen his include though? It has cache optimization and would allow model hooks without as much lag. It's a completely different layout and structure to the current one. There's fewer chances of leaks occurring.

In the old reflection days, there were actually 3 includes..

RRL - made and maintained only by timer (Yes Timer.. The current powerbot developer)
REF - maintained by SRL (don't remember all the names.. I think Harry hosted the hooks on his website.. Don't remember)
REF2- maintained by drags (became official and everyone who could, contributed)

Moral of the story is that there will never be an include that satisfies everyone by design and workings.

Grunt

2014-09-26 05:20:25

hooks are always available from rs hacking. Just have to change em to the simba names…

Fitta

2014-09-26 07:41:39

From: hoodz
why are you making another include if there is already an include


There is no Lape reflection include? Seeing the posts from you in the last three days you seem very ignorant and negative towards tls work for a lape reflection include and the support he is getting?


Edit:
Happy days!

Justin

2014-09-27 09:41:05

From: Krazy_Meerkat
No help from the forum mods when I asked for a reflection subforum re-vamp, etc. etc..



FYI: Forum mods have no power with subforums/forums/access ect. vBulletins modcp is very limited… We can only pass the messages onto the Administrators.

Thread cleaned up, please keep it on topic.

Cheers.

Fitta

2014-09-29 04:21:39

Someone just pulled an update with non-working hooks?


This is the correct ones.

{ 207 Hooks Found By Cheddys Updater }

const
ReflectionRevision = '59';


{* BoundaryObject - 9 Hooks *}
BoundaryObject = 'ch';
BoundaryObject_AlternativeOrientation = 'm';
BoundaryObject_AlternativeOrientation_Multiplier = -819118419;
BoundaryObject_BackupRenderable = 'g';
BoundaryObject_Flags = 'o';
BoundaryObject_Flags_Multiplier = -502210369;
BoundaryObject_Hash = 'p';
BoundaryObject_Hash_Multiplier = 2052265757;
BoundaryObject_Orientation = 'w';
BoundaryObject_Orientation_Multiplier = -809690117;
BoundaryObject_Plane = 'k';
BoundaryObject_Plane_Multiplier = -1486221241;
BoundaryObject_Renderable = 'j';
BoundaryObject_Get_X = 'r';
BoundaryObject_Get_X_Multiplier = 1210170359;
BoundaryObject_Get_Y = 'y';
BoundaryObject_Get_Y_Multiplier = 1401870691;

{* Buffer - 2 Hooks *}
Buffer = 'de';
Buffer_Offset = 'r';
Buffer_Offset_Multiplier = 1617124369;
Buffer_Payload = 'k';

{* Cache - 5 Hooks *}
Cache = 'fz';
Cache_CacheableNode = 'k';
Cache_NodeHashTable = 'w';
Cache_Queue = 'm';
Cache_Remaining = 'y';
Cache_Remaining_Multiplier = 1;
Cache_Size = 'r';
Cache_Size_Multiplier = 1;

{* CacheableNode - 2 Hooks *}
CacheableNode = 'fj';
CacheableNode_Next = 'cr';
CacheableNode_Prev = 'cd';

{* Canvas - 1 Hooks *}
Canvas = 'dd';
Canvas_Component = 'k';

{* Actor - 17 Hooks *}
Actor = 'an';
Actor_Animation = 'ao';
Actor_Animation_Multiplier = 296689511;
Actor_CombatCycle = 'ad';
Actor_CombatCycle_Multiplier = 1195205775;
Actor_Health = 'af';
Actor_Health_Multiplier = 722959445;
Actor_HitCycles = 'as';
Actor_HitDamages = 'am';
Actor_HitTypes = 'ae';
Actor_Interacting = 'at';
Actor_Interacting_Multiplier = 1552651505;
Actor_MaxHealth = 'ab';
Actor_MaxHealth_Multiplier = -532478459;
Actor_Orientation = 'bj';
Actor_Orientation_Multiplier = 1018188061;
Actor_PathLength = 'by';
Actor_PathLength_Multiplier = 153678603;
Actor_PathTraversed = 'bt';
Actor_PathX = 'bg';
Actor_PathY = 'bm';
Actor_ActiveText = 'aq';
Actor_LocalX = 'e';
Actor_LocalX_Multiplier = 704794231;
Actor_LocalY = 'a';
Actor_LocalY_Multiplier = -759612205;
Actor_isInSequence = 'aj';

{* Client - 53 Hooks *}
Client = 'client';
Client_BaseX = 'cf.cw';
Client_BaseX_Multiplier = 787673155;
Client_BaseY = 'cr.cu';
Client_BaseY_Multiplier = -2026921865;
Client_CameraPitch = 'bi.fb';
Client_CameraPitch_Multiplier = -479031223;
Client_CameraX = 'client.fs';
Client_CameraX_Multiplier = 437628867;
Client_CameraY = 'ak.fr';
Client_CameraY_Multiplier = -1123306917;
Client_CameraYaw = 'gr.fv';
Client_CameraYaw_Multiplier = -436769289;
Client_CameraZ = 'el.fl';
Client_CameraZ_Multiplier = -403565165;
Client_Canvas = 'ci.pw';
Client_CollisionMaps = 'client.w';
Client_Run_Energy = 'client.jo';
Client_Run_Energy_Multiplier = -570678189;
Client_Experiences = 'client.hs';
Client_LoopCycle = 'client.i';
Client_LoopCycle_Multiplier = -1092411589;
Client_Login_State = 'client.u';
Client_Login_State_Multiplier = 2064132071;
Client_GroundItems = 'client.hg';
Client_ItemDefinitionCache = 'ab.w';
Client_ItemContainerTable = 's.k';
Client_Levels = 'client.hp';
Client_NPCs = 'client.bm';
Client_Player = 'h.hq';
Client_Players = 'client.gc';
Client_LoginState = 'ak.an';
Client_LoginState_Multiplier = 237103599;
Client_CompassAngle = 'client.fg';
Client_CompassAngle_Multiplier = 1654042681;
Client_Map_Offset = 'client.dy';
Client_Map_Offset_Multiplier = 217164645;
Client_Map_Scale = 'client.dj';
Client_Map_Scale_Multiplier = -1656813265;
Client_MenuActions = 'client.iy';
Client_MenuCount = 'client.aa';
Client_MenuCount_Multiplier = 54657429;
Client_MenuHeight = 'cc.il';
Client_MenuHeight_Multiplier = 1475787801;
Client_MenuOptions = 'client.ib';
Client_MenuWidth = 'client.iq';
Client_MenuWidth_Multiplier = 53963819;
Client_MenuX = 'af.hx';
Client_MenuX_Multiplier = -1914796849;
Client_MenuY = 'cb.hw';
Client_MenuY_Multiplier = -364129309;
Client_NPCDefinitionCache = 'aj.y';
Client_NPCIndices = 'client.bx';
Client_ObjectDefinitionCache = 'az.w';
Client_Password = 'ak.ax';
Client_Plane = 's.hv';
Client_Plane_Multiplier = 2117524171;
Client_RealLevels = 'client.hk';
Client_Region = 'd.do';
Client_Settings = 'eo.r';
Client_GroundHeights = 'j.k';
Client_GroundSettings = 'j.r';
Client_Username = 'ak.az';
Client_ValidWidgets = 'ei.r';
Client_Weight = 'client.jg';
Client_Weight_Multiplier = 847921335;
Client_WidgetBoundsHeight = 'client.lw';
Client_WidgetBoundsWidth = 'client.lq';
Client_WidgetBoundsX = 'client.lp';
Client_WidgetBoundsY = 'client.lj';
Client_WidgetNodeTable = 'client.jk';
Client_Widgets = 'en.k';
Client_WidgetSettings = 'eo.y';
Client_WidgetVarps = 'eo.y';
Client_isMenuOpen = 'client.hl';

{* CollisionMap - 1 Hooks *}
CollisionMap = 'ga';
CollisionMap_Flags = 'aw';

{* FloorDecorationObject - 6 Hooks *}
FloorDecorationObject = 'cf';
FloorDecorationObject_Flags = 'j';
FloorDecorationObject_Flags_Multiplier = 1711360093;
FloorDecorationObject_Hash = 'm';
FloorDecorationObject_Hash_Multiplier = -695201075;
FloorDecorationObject_Plane = 'k';
FloorDecorationObject_Plane_Multiplier = -875389279;
FloorDecorationObject_Renderable = 'w';
FloorDecorationObject_Get_X = 'r';
FloorDecorationObject_Get_X_Multiplier = 210733581;
FloorDecorationObject_Get_Y = 'y';
FloorDecorationObject_Get_Y_Multiplier = 1265744713;

{* NodeHashTable - 5 Hooks *}
NodeHashTable = 'fd';
NodeHashTable_Current = 'w';
NodeHashTable_CurrentIndex = 'm';
NodeHashTable_CurrentIndex_Multiplier = 1;
NodeHashTable_Head = 'y';
NodeHashTable_GetNodes = 'r';
NodeHashTable_GetSize = 'k';
NodeHashTable_GetSize_Multiplier = 1;

{* Item - 2 Hooks *}
Item = 'q';
Item_ID = 'k';
Item_ID_Multiplier = 1682086687;
Item_StackSize = 'r';
Item_StackSize_Multiplier = 1210858279;

{* ItemDefinition - 4 Hooks *}
ItemDefinition = 'ab';
ItemDefinition_GroundActions = 'f';
ItemDefinition_Name = 'b';
ItemDefinition_InventoryActions = 'q';
ItemDefinition_isMembers = 'c';

{* ItemContainer - 2 Hooks *}
ItemContainer = 's';
ItemContainer_IDs = 'r';
ItemContainer_StackSizes = 'y';

{* ItemLayer - 8 Hooks *}
ItemLayer = 'ci';
ItemLayer_BottomRenderable = 'w';
ItemLayer_Height = 'p';
ItemLayer_Height_Multiplier = 1735202963;
ItemLayer_ID = 'g';
ItemLayer_ID_Multiplier = 1983940829;
ItemLayer_MiddleRenderable = 'm';
ItemLayer_Plane = 'k';
ItemLayer_Plane_Multiplier = -1117706059;
ItemLayer_TopRenderable = 'j';
ItemLayer_X = 'r';
ItemLayer_X_Multiplier = 212577641;
ItemLayer_Y = 'y';
ItemLayer_Y_Multiplier = 13676537;

{* LinkedList - 2 Hooks *}
LinkedList = 'fi';
LinkedList_Head = 'k';
LinkedList_Tail = 'r';

{* Model - 12 Hooks *}
Model = 'cp';
Model_IndicesX = 'b';
Model_IndicesY = 'x';
Model_IndicesZ = 'n';
Model_TexturedIndicesX = 'd';
Model_TexturedIndicesY = 's';
Model_TexturedIndicesZ = 'v';
Model_TexturedVerticesX = 'b';
Model_TexturedVerticesY = 'x';
Model_TexturedVerticesZ = 'n';
Model_VerticesX = 'j';
Model_VerticesY = 'g';
Model_VerticesZ = 'p';

{* Node - 3 Hooks *}
Node = 'go';
Node_Next = 'ef';
Node_Previous = 'er';
Node_ID = 'dy';

{* NPC - 1 Hooks *}
NPC = 'aw';
NPC_Definition = 'k';

{* NPCDefinition - 7 Hooks *}
NPCDefinition = 'aj';
NPCDefinition_Actions = 'e';
NPCDefinition_Level = 'c';
NPCDefinition_Level_Multiplier = 1235631845;
NPCDefinition_ID = 'm';
NPCDefinition_ID_Multiplier = 318160851;
NPCDefinition_Name = 'j';
NPCDefinition_SettingID = 'av';
NPCDefinition_SettingID_Multiplier = -632881019;
NPCDefinition_TransformIDs = 'ai';
NPCDefinition_VarBitID = 'an';
NPCDefinition_VarBitID_Multiplier = 536366809;

{* ObjectDefinition - 2 Hooks *}
ObjectDefinition = 'az';
ObjectDefinition_Actions = 'al';
ObjectDefinition_Name = 'n';

{* Player - 3 Hooks *}
Player = 'y';
Player_CombatLevel = 'm';
Player_CombatLevel_Multiplier = 275292137;
Player_Model = 'd';
Player_Name = 'k';

{* Queue - 1 Hooks *}
Queue = 'fm';
Queue_Head = 'k';

{* Region - 2 Hooks *}
Region = 'cn';
Region_Objects = 'o';
Region_SceneTiles = 'j';

{* Renderable - 1 Hooks *}
Renderable = 'bx';
Renderable_ModelHeight = 'ch';
Renderable_ModelHeight_Multiplier = -977385459;

{* WorldObject - 12 Hooks *}
WorldObject = 'ck';
WorldObject_Flags = 's';
WorldObject_Flags_Multiplier = -481706441;
WorldObject_Height = 'r';
WorldObject_Height_Multiplier = -1125703737;
WorldObject_Hash = 'd';
WorldObject_Hash_Multiplier = -1206431167;
WorldObject_Orientation = 'm';
WorldObject_Orientation_Multiplier = -1030542201;
WorldObject_Plane = 'k';
WorldObject_Plane_Multiplier = 2093853645;
WorldObject_RelativeX = 'g';
WorldObject_RelativeX_Multiplier = -1597364385;
WorldObject_RelativeY = 'o';
WorldObject_RelativeY_Multiplier = 685933967;
WorldObject_Renderable = 'j';
WorldObject_SizeX = 'p';
WorldObject_SizeX_Multiplier = 895506901;
WorldObject_SizeY = 'b';
WorldObject_SizeY_Multiplier = 967160897;
WorldObject_Get_X = 'y';
WorldObject_Get_X_Multiplier = -390074187;
WorldObject_Get_Y = 'w';
WorldObject_Get_Y_Multiplier = -1184474629;

{* SceneTile - 8 Hooks *}
SceneTile = 'cb';
SceneTile_BoundaryObject = 'g';
SceneTile_FloorDecorationObject = 'o';
SceneTile_ItemLayer = 'b';
SceneTile_Plane = 'w';
SceneTile_Plane_Multiplier = -856405677;
SceneTile_WorldObjects = 'n';
SceneTile_WallObject = 'p';
SceneTile_X = 'r';
SceneTile_X_Multiplier = -1289280687;
SceneTile_Y = 'y';
SceneTile_Y_Multiplier = 693691307;

{* WallObject - 11 Hooks *}
WallObject = 'ca';
WallObject_BackupRenderable = 'o';
WallObject_Flags = 'x';
WallObject_Flags_Multiplier = 2099554427;
WallObject_Height = 'm';
WallObject_Height_Multiplier = -266248503;
WallObject_Hash = 'b';
WallObject_Hash_Multiplier = 723969563;
WallObject_Orientation = 'w';
WallObject_Orientation_Multiplier = -273230309;
WallObject_Plane = 'k';
WallObject_Plane_Multiplier = 1785789031;
WallObject_RelativeX = 'j';
WallObject_RelativeX_Multiplier = 154961493;
WallObject_RelativeY = 'g';
WallObject_RelativeY_Multiplier = -1144849677;
WallObject_Renderable = 'p';
WallObject_X = 'r';
WallObject_X_Multiplier = 1038229795;
WallObject_Y = 'y';
WallObject_Y_Multiplier = -1388658969;

{* Widget - 24 Hooks *}
Widget = 'en';
Widget_GetActions = 'bi';
Widget_BorderThickness = 'am';
Widget_BorderThickness_Multiplier = 928110287;
Widget_BoundsIndex = 'dz';
Widget_BoundsIndex_Multiplier = 1011007915;
Widget_Children = 'di';
Widget_GetItems = 'db';
Widget_Height = 'a';
Widget_Height_Multiplier = 1486275607;
Widget_GetID = 's';
Widget_GetID_Multiplier = 275386787;
Widget_GetIndex = 'v';
Widget_GetIndex_Multiplier = 1117261515;
Widget_ItemID = 'dr';
Widget_ItemID_Multiplier = -1655628037;
Widget_LoopCycleStatus = 'dj';
Widget_LoopCycleStatus_Multiplier = 843259955;
Widget_Name = 'bp';
Widget_GetRelativeX = 'y';
Widget_GetRelativeX_Multiplier = 219780081;
Widget_GetRelativeY = 'h';
Widget_GetRelativeY_Multiplier = 1724903883;
Widget_Root = 'by';
Widget_RootID = 'c';
Widget_RootID_Multiplier = 396507425;
Widget_ScrollX = 'q';
Widget_ScrollX_Multiplier = 759718085;
Widget_ScrollY = 'z';
Widget_ScrollY_Multiplier = -631678375;
Widget_SpriteID = 'null';
Widget_StackSize = 'dk';
Widget_StackSize_Multiplier = 1236267309;
Widget_GetStackSizes = 'do';
Widget_GetText = 'bo';
Widget_GetTextureID = 'null';
Widget_Width = 'e';
Widget_Width_Multiplier = 821762893;
Widget_X = 'i';
Widget_X_Multiplier = -136421911;
Widget_Y = 'x';
Widget_Y_Multiplier = 2130533229;
Widget_isHidden = 'f';

{* WidgetNode - 1 Hooks *}
WidgetNode = 'w';
WidgetNode_ID = 'k';
WidgetNode_ID_Multiplier = 448983669;

k0p3

2014-09-29 06:42:41

Just remember to correct these:

Client_RealLevels = 'client.hk';  ->  Client_Real_Levels = 'client.hk';
and
Client_MenuCount = 'client.iv';
Client_MenuCount_Multiplier = 837382777;

Patriq

2014-09-29 17:20:43

Is this updated? Says in the code it was last updated today but stuff isnt working rigth, neither R_GetTileGlobal, or R_IsAnimating is working for me :(

ineedbot

2014-09-29 17:30:53

From: PatriqDesigns
Is this updated? Says in the code it was last updated today but stuff isnt working rigth, neither R_GetTileGlobal, or R_IsAnimating is working for me :(


Just read the two above posts… Krazy uploaded the wrong hooks.

Patriq

2014-09-29 18:18:35

Anyone else having this kind of error?

Error: Out Of Range at line 509
The following DTMs were not freed: [SRL - Lamp bitmap, SRL - Book of Knowledge, 2]
The following bitmaps were not freed: [SRL - Mod bitmap, SRL - Admin bitmap, SRL - Minimap Mask bitmap, 3]

the code that is causing it:

function R_GetUpText: String;
var
Options: TStringArray;
begin
Options := R_GetMenuOptions;
if ((High(Options) - 1) > 0) then
Result := Options[0] + ' / ' + ToStr(High(Options) - 1) + ' more options'
else
Result := Options[0];
if (Result = 'Cancel') then
Result := '';
end;

ineedbot

2014-09-29 19:16:52

From: PatriqDesigns
Anyone else having this kind of error?

Error: Out Of Range at line 509
The following DTMs were not freed: [SRL - Lamp bitmap, SRL - Book of Knowledge, 2]
The following bitmaps were not freed: [SRL - Mod bitmap, SRL - Admin bitmap, SRL - Minimap Mask bitmap, 3]

the code that is causing it:

function R_GetUpText: String;
var
Options: TStringArray;
begin
Options := R_GetMenuOptions;
if ((High(Options) - 1) > 0) then
Result := Options[0] + ' / ' + ToStr(High(Options) - 1) + ' more options'
else
Result := Options[0];
if (Result = 'Cancel') then
Result := '';
end;


Have a look at these two posts.

From: Fitta
Someone just pulled an update with non-working hooks?


This is the correct ones.

{ 207 Hooks Found By Cheddys Updater }

const
ReflectionRevision = '59';


{* BoundaryObject - 9 Hooks *}
BoundaryObject = 'ch';
BoundaryObject_AlternativeOrientation = 'm';
BoundaryObject_AlternativeOrientation_Multiplier = -819118419;
BoundaryObject_BackupRenderable = 'g';
BoundaryObject_Flags = 'o';
BoundaryObject_Flags_Multiplier = -502210369;
BoundaryObject_Hash = 'p';
BoundaryObject_Hash_Multiplier = 2052265757;
BoundaryObject_Orientation = 'w';
BoundaryObject_Orientation_Multiplier = -809690117;
BoundaryObject_Plane = 'k';
BoundaryObject_Plane_Multiplier = -1486221241;
BoundaryObject_Renderable = 'j';
BoundaryObject_Get_X = 'r';
BoundaryObject_Get_X_Multiplier = 1210170359;
BoundaryObject_Get_Y = 'y';
BoundaryObject_Get_Y_Multiplier = 1401870691;

{* Buffer - 2 Hooks *}
Buffer = 'de';
Buffer_Offset = 'r';
Buffer_Offset_Multiplier = 1617124369;
Buffer_Payload = 'k';

{* Cache - 5 Hooks *}
Cache = 'fz';
Cache_CacheableNode = 'k';
Cache_NodeHashTable = 'w';
Cache_Queue = 'm';
Cache_Remaining = 'y';
Cache_Remaining_Multiplier = 1;
Cache_Size = 'r';
Cache_Size_Multiplier = 1;

{* CacheableNode - 2 Hooks *}
CacheableNode = 'fj';
CacheableNode_Next = 'cr';
CacheableNode_Prev = 'cd';

{* Canvas - 1 Hooks *}
Canvas = 'dd';
Canvas_Component = 'k';

{* Actor - 17 Hooks *}
Actor = 'an';
Actor_Animation = 'ao';
Actor_Animation_Multiplier = 296689511;
Actor_CombatCycle = 'ad';
Actor_CombatCycle_Multiplier = 1195205775;
Actor_Health = 'af';
Actor_Health_Multiplier = 722959445;
Actor_HitCycles = 'as';
Actor_HitDamages = 'am';
Actor_HitTypes = 'ae';
Actor_Interacting = 'at';
Actor_Interacting_Multiplier = 1552651505;
Actor_MaxHealth = 'ab';
Actor_MaxHealth_Multiplier = -532478459;
Actor_Orientation = 'bj';
Actor_Orientation_Multiplier = 1018188061;
Actor_PathLength = 'by';
Actor_PathLength_Multiplier = 153678603;
Actor_PathTraversed = 'bt';
Actor_PathX = 'bg';
Actor_PathY = 'bm';
Actor_ActiveText = 'aq';
Actor_LocalX = 'e';
Actor_LocalX_Multiplier = 704794231;
Actor_LocalY = 'a';
Actor_LocalY_Multiplier = -759612205;
Actor_isInSequence = 'aj';

{* Client - 53 Hooks *}
Client = 'client';
Client_BaseX = 'cf.cw';
Client_BaseX_Multiplier = 787673155;
Client_BaseY = 'cr.cu';
Client_BaseY_Multiplier = -2026921865;
Client_CameraPitch = 'bi.fb';
Client_CameraPitch_Multiplier = -479031223;
Client_CameraX = 'client.fs';
Client_CameraX_Multiplier = 437628867;
Client_CameraY = 'ak.fr';
Client_CameraY_Multiplier = -1123306917;
Client_CameraYaw = 'gr.fv';
Client_CameraYaw_Multiplier = -436769289;
Client_CameraZ = 'el.fl';
Client_CameraZ_Multiplier = -403565165;
Client_Canvas = 'ci.pw';
Client_CollisionMaps = 'client.w';
Client_Run_Energy = 'client.jo';
Client_Run_Energy_Multiplier = -570678189;
Client_Experiences = 'client.hs';
Client_LoopCycle = 'client.i';
Client_LoopCycle_Multiplier = -1092411589;
Client_Login_State = 'client.u';
Client_Login_State_Multiplier = 2064132071;
Client_GroundItems = 'client.hg';
Client_ItemDefinitionCache = 'ab.w';
Client_ItemContainerTable = 's.k';
Client_Levels = 'client.hp';
Client_NPCs = 'client.bm';
Client_Player = 'h.hq';
Client_Players = 'client.gc';
Client_LoginState = 'ak.an';
Client_LoginState_Multiplier = 237103599;
Client_CompassAngle = 'client.fg';
Client_CompassAngle_Multiplier = 1654042681;
Client_Map_Offset = 'client.dy';
Client_Map_Offset_Multiplier = 217164645;
Client_Map_Scale = 'client.dj';
Client_Map_Scale_Multiplier = -1656813265;
Client_MenuActions = 'client.iy';
Client_MenuCount = 'client.aa';
Client_MenuCount_Multiplier = 54657429;
Client_MenuHeight = 'cc.il';
Client_MenuHeight_Multiplier = 1475787801;
Client_MenuOptions = 'client.ib';
Client_MenuWidth = 'client.iq';
Client_MenuWidth_Multiplier = 53963819;
Client_MenuX = 'af.hx';
Client_MenuX_Multiplier = -1914796849;
Client_MenuY = 'cb.hw';
Client_MenuY_Multiplier = -364129309;
Client_NPCDefinitionCache = 'aj.y';
Client_NPCIndices = 'client.bx';
Client_ObjectDefinitionCache = 'az.w';
Client_Password = 'ak.ax';
Client_Plane = 's.hv';
Client_Plane_Multiplier = 2117524171;
Client_RealLevels = 'client.hk';
Client_Region = 'd.do';
Client_Settings = 'eo.r';
Client_GroundHeights = 'j.k';
Client_GroundSettings = 'j.r';
Client_Username = 'ak.az';
Client_ValidWidgets = 'ei.r';
Client_Weight = 'client.jg';
Client_Weight_Multiplier = 847921335;
Client_WidgetBoundsHeight = 'client.lw';
Client_WidgetBoundsWidth = 'client.lq';
Client_WidgetBoundsX = 'client.lp';
Client_WidgetBoundsY = 'client.lj';
Client_WidgetNodeTable = 'client.jk';
Client_Widgets = 'en.k';
Client_WidgetSettings = 'eo.y';
Client_WidgetVarps = 'eo.y';
Client_isMenuOpen = 'client.hl';

{* CollisionMap - 1 Hooks *}
CollisionMap = 'ga';
CollisionMap_Flags = 'aw';

{* FloorDecorationObject - 6 Hooks *}
FloorDecorationObject = 'cf';
FloorDecorationObject_Flags = 'j';
FloorDecorationObject_Flags_Multiplier = 1711360093;
FloorDecorationObject_Hash = 'm';
FloorDecorationObject_Hash_Multiplier = -695201075;
FloorDecorationObject_Plane = 'k';
FloorDecorationObject_Plane_Multiplier = -875389279;
FloorDecorationObject_Renderable = 'w';
FloorDecorationObject_Get_X = 'r';
FloorDecorationObject_Get_X_Multiplier = 210733581;
FloorDecorationObject_Get_Y = 'y';
FloorDecorationObject_Get_Y_Multiplier = 1265744713;

{* NodeHashTable - 5 Hooks *}
NodeHashTable = 'fd';
NodeHashTable_Current = 'w';
NodeHashTable_CurrentIndex = 'm';
NodeHashTable_CurrentIndex_Multiplier = 1;
NodeHashTable_Head = 'y';
NodeHashTable_GetNodes = 'r';
NodeHashTable_GetSize = 'k';
NodeHashTable_GetSize_Multiplier = 1;

{* Item - 2 Hooks *}
Item = 'q';
Item_ID = 'k';
Item_ID_Multiplier = 1682086687;
Item_StackSize = 'r';
Item_StackSize_Multiplier = 1210858279;

{* ItemDefinition - 4 Hooks *}
ItemDefinition = 'ab';
ItemDefinition_GroundActions = 'f';
ItemDefinition_Name = 'b';
ItemDefinition_InventoryActions = 'q';
ItemDefinition_isMembers = 'c';

{* ItemContainer - 2 Hooks *}
ItemContainer = 's';
ItemContainer_IDs = 'r';
ItemContainer_StackSizes = 'y';

{* ItemLayer - 8 Hooks *}
ItemLayer = 'ci';
ItemLayer_BottomRenderable = 'w';
ItemLayer_Height = 'p';
ItemLayer_Height_Multiplier = 1735202963;
ItemLayer_ID = 'g';
ItemLayer_ID_Multiplier = 1983940829;
ItemLayer_MiddleRenderable = 'm';
ItemLayer_Plane = 'k';
ItemLayer_Plane_Multiplier = -1117706059;
ItemLayer_TopRenderable = 'j';
ItemLayer_X = 'r';
ItemLayer_X_Multiplier = 212577641;
ItemLayer_Y = 'y';
ItemLayer_Y_Multiplier = 13676537;

{* LinkedList - 2 Hooks *}
LinkedList = 'fi';
LinkedList_Head = 'k';
LinkedList_Tail = 'r';

{* Model - 12 Hooks *}
Model = 'cp';
Model_IndicesX = 'b';
Model_IndicesY = 'x';
Model_IndicesZ = 'n';
Model_TexturedIndicesX = 'd';
Model_TexturedIndicesY = 's';
Model_TexturedIndicesZ = 'v';
Model_TexturedVerticesX = 'b';
Model_TexturedVerticesY = 'x';
Model_TexturedVerticesZ = 'n';
Model_VerticesX = 'j';
Model_VerticesY = 'g';
Model_VerticesZ = 'p';

{* Node - 3 Hooks *}
Node = 'go';
Node_Next = 'ef';
Node_Previous = 'er';
Node_ID = 'dy';

{* NPC - 1 Hooks *}
NPC = 'aw';
NPC_Definition = 'k';

{* NPCDefinition - 7 Hooks *}
NPCDefinition = 'aj';
NPCDefinition_Actions = 'e';
NPCDefinition_Level = 'c';
NPCDefinition_Level_Multiplier = 1235631845;
NPCDefinition_ID = 'm';
NPCDefinition_ID_Multiplier = 318160851;
NPCDefinition_Name = 'j';
NPCDefinition_SettingID = 'av';
NPCDefinition_SettingID_Multiplier = -632881019;
NPCDefinition_TransformIDs = 'ai';
NPCDefinition_VarBitID = 'an';
NPCDefinition_VarBitID_Multiplier = 536366809;

{* ObjectDefinition - 2 Hooks *}
ObjectDefinition = 'az';
ObjectDefinition_Actions = 'al';
ObjectDefinition_Name = 'n';

{* Player - 3 Hooks *}
Player = 'y';
Player_CombatLevel = 'm';
Player_CombatLevel_Multiplier = 275292137;
Player_Model = 'd';
Player_Name = 'k';

{* Queue - 1 Hooks *}
Queue = 'fm';
Queue_Head = 'k';

{* Region - 2 Hooks *}
Region = 'cn';
Region_Objects = 'o';
Region_SceneTiles = 'j';

{* Renderable - 1 Hooks *}
Renderable = 'bx';
Renderable_ModelHeight = 'ch';
Renderable_ModelHeight_Multiplier = -977385459;

{* WorldObject - 12 Hooks *}
WorldObject = 'ck';
WorldObject_Flags = 's';
WorldObject_Flags_Multiplier = -481706441;
WorldObject_Height = 'r';
WorldObject_Height_Multiplier = -1125703737;
WorldObject_Hash = 'd';
WorldObject_Hash_Multiplier = -1206431167;
WorldObject_Orientation = 'm';
WorldObject_Orientation_Multiplier = -1030542201;
WorldObject_Plane = 'k';
WorldObject_Plane_Multiplier = 2093853645;
WorldObject_RelativeX = 'g';
WorldObject_RelativeX_Multiplier = -1597364385;
WorldObject_RelativeY = 'o';
WorldObject_RelativeY_Multiplier = 685933967;
WorldObject_Renderable = 'j';
WorldObject_SizeX = 'p';
WorldObject_SizeX_Multiplier = 895506901;
WorldObject_SizeY = 'b';
WorldObject_SizeY_Multiplier = 967160897;
WorldObject_Get_X = 'y';
WorldObject_Get_X_Multiplier = -390074187;
WorldObject_Get_Y = 'w';
WorldObject_Get_Y_Multiplier = -1184474629;

{* SceneTile - 8 Hooks *}
SceneTile = 'cb';
SceneTile_BoundaryObject = 'g';
SceneTile_FloorDecorationObject = 'o';
SceneTile_ItemLayer = 'b';
SceneTile_Plane = 'w';
SceneTile_Plane_Multiplier = -856405677;
SceneTile_WorldObjects = 'n';
SceneTile_WallObject = 'p';
SceneTile_X = 'r';
SceneTile_X_Multiplier = -1289280687;
SceneTile_Y = 'y';
SceneTile_Y_Multiplier = 693691307;

{* WallObject - 11 Hooks *}
WallObject = 'ca';
WallObject_BackupRenderable = 'o';
WallObject_Flags = 'x';
WallObject_Flags_Multiplier = 2099554427;
WallObject_Height = 'm';
WallObject_Height_Multiplier = -266248503;
WallObject_Hash = 'b';
WallObject_Hash_Multiplier = 723969563;
WallObject_Orientation = 'w';
WallObject_Orientation_Multiplier = -273230309;
WallObject_Plane = 'k';
WallObject_Plane_Multiplier = 1785789031;
WallObject_RelativeX = 'j';
WallObject_RelativeX_Multiplier = 154961493;
WallObject_RelativeY = 'g';
WallObject_RelativeY_Multiplier = -1144849677;
WallObject_Renderable = 'p';
WallObject_X = 'r';
WallObject_X_Multiplier = 1038229795;
WallObject_Y = 'y';
WallObject_Y_Multiplier = -1388658969;

{* Widget - 24 Hooks *}
Widget = 'en';
Widget_GetActions = 'bi';
Widget_BorderThickness = 'am';
Widget_BorderThickness_Multiplier = 928110287;
Widget_BoundsIndex = 'dz';
Widget_BoundsIndex_Multiplier = 1011007915;
Widget_Children = 'di';
Widget_GetItems = 'db';
Widget_Height = 'a';
Widget_Height_Multiplier = 1486275607;
Widget_GetID = 's';
Widget_GetID_Multiplier = 275386787;
Widget_GetIndex = 'v';
Widget_GetIndex_Multiplier = 1117261515;
Widget_ItemID = 'dr';
Widget_ItemID_Multiplier = -1655628037;
Widget_LoopCycleStatus = 'dj';
Widget_LoopCycleStatus_Multiplier = 843259955;
Widget_Name = 'bp';
Widget_GetRelativeX = 'y';
Widget_GetRelativeX_Multiplier = 219780081;
Widget_GetRelativeY = 'h';
Widget_GetRelativeY_Multiplier = 1724903883;
Widget_Root = 'by';
Widget_RootID = 'c';
Widget_RootID_Multiplier = 396507425;
Widget_ScrollX = 'q';
Widget_ScrollX_Multiplier = 759718085;
Widget_ScrollY = 'z';
Widget_ScrollY_Multiplier = -631678375;
Widget_SpriteID = 'null';
Widget_StackSize = 'dk';
Widget_StackSize_Multiplier = 1236267309;
Widget_GetStackSizes = 'do';
Widget_GetText = 'bo';
Widget_GetTextureID = 'null';
Widget_Width = 'e';
Widget_Width_Multiplier = 821762893;
Widget_X = 'i';
Widget_X_Multiplier = -136421911;
Widget_Y = 'x';
Widget_Y_Multiplier = 2130533229;
Widget_isHidden = 'f';

{* WidgetNode - 1 Hooks *}
WidgetNode = 'w';
WidgetNode_ID = 'k';
WidgetNode_ID_Multiplier = 448983669;


From: k0p3
Just remember to correct these:

Client_RealLevels = 'client.hk';  ->  Client_Real_Levels = 'client.hk';
and
Client_MenuCount = 'client.iv';
Client_MenuCount_Multiplier = 837382777;


That error is caused by the menuCount hook being broke.

Anyway, it appears that with the latest version of Simba, pascalScript was discarded. We are going to need a OS lib in lape (aerolib?) and a new reflection include that works with that include.

xreflectx

2014-09-30 01:38:23

Why does it keep mentioning
[Reflection Anti-Randoms] Detected we are dead, logging out.

ineedbot

2014-09-30 01:43:51

From: xreflectx
Why does it keep mentioning
[Reflection Anti-Randoms] Detected we are dead, logging out.


Could be a broken hook, but R_FindNormalRandoms is nolonger needed in scripts. So just find all instances of 'R_FindNormalRandoms' and remove them all.

Patriq

2014-09-30 02:10:16

Tyvm <3

Cheddy

2014-09-30 02:14:56

Me and TLS are working on a lape include https://github.com/tlsdude/OSR-Reflection

We are just making an updater at the minute which is why it is on hold for a bit =)

ineedbot

2014-09-30 02:20:10

From: Cheddy
Me and TLS are working on a lape include https://github.com/tlsdude/OSR-Reflection

We are just making an updater at the minute which is why it is on hold for a bit =)


Alright cool, I was just wondering about that include. Can't wait to see the finished product and write some scripts for it!

Fitta

2014-09-30 06:24:26

No more pascalscript?

NKN

2014-09-30 06:45:56

From: Fitta
No more pascalscript?


PascalScript should've died out a long time ago. :')

Fitta

2014-09-30 08:09:20

Indeed. But there's no official includes for Lape yet?

Harrier

2014-09-30 11:45:42

From: Fitta
Indeed. But there's no official includes for Lape yet?

Their include isn't a addon. It's stand alone.

NKN

2014-09-30 14:31:47

From: Fitta
Indeed. But there's no official includes for Lape yet?


The SRL Reflection include is being coded in Lape.

However, I believe there lacks a stable color include for OSRS.

ineedbot

2014-09-30 14:43:56

From: NKN
The SRL Reflection include is being coded in Lape.

However, I believe there lacks a stable color include for OSRS.


AeroLib seems pretty fine to me for a color include. However do you plan on making the reflection include a standalone? or make it an addon for a different include.
Edit: nvm just read an above post that it'll be a standalone.

Fitta

2014-09-30 14:54:06

From: ineedbot
AeroLib seems pretty fine to me for a color include. However do you plan on making the reflection include a standalone? or make it an addon for a different include.


https://github.com/tlsdude/OSR-Reflection

tls

2014-09-30 15:25:59

I would like to correct everyone here. It is not standalone. It requires something to load smart and pass the pointer in setup procedure. You can see how I implemented my standalone smart include in the test scripts.

Brandon

2014-09-30 15:42:02

From: tls
I would like to correct everyone here. It is not standalone. It requires something to load smart and pass the pointer in setup procedure. You can see how I implemented my standalone smart include in the test scripts.


I think they mean that it isn't dependent on other includes.. It does depend on SMART but it's include dependent. It doesn't REQUIRE the OSRS colour include or any other includes to work.. I think that's what they meant.

tls

2014-09-30 15:47:32

From: Brandon
I think they mean that it isn't dependent on other includes.. It does depend on SMART but it's include dependent. It doesn't REQUIRE the OSRS colour include or any other includes to work.. I think that's what they meant.


I'll expound further. It will not include certain functions(login, etc) that a standalone RS include should have. If you want to bot with it, it will require some other include. I guess it just depends on how you define standalone and add-on.

Hoodz

2014-09-30 16:17:06

From: tls
I'll expound further. It will not include certain functions(login, etc) that a standalone RS include should have. If you want to bot with it, it will require some other include. I guess it just depends on how you define standalone and add-on.


if it doesnt support it indeed needs another include.
question: do you know who is writing the osr include for lape?

tls

2014-09-30 19:09:09

From: hoodz
if it doesnt support it indeed needs another include.
question: do you know who is writing the osr include for lape?


Olly is "working" on the combination of osr and rs3 at www.github.com/srl/srl
I made some updater progress today. Got the hooks I need for developing another section of the include. Later on that, I have a concert to go to tonight(The Pretty Reckless, I'm super excited!)
http://rs-hacking.com/forum/index.php?/topic/776-59/page-2#entry7861

Kyle

2014-09-30 20:51:26

Guys, I'm back from my inactivity from over the summer and will get back to working on, and maintaining the include. We are almost finished with the new updater and will be back to updating the hooks within hours of an update.

Furthermore, this thread is about this include, the "unofficial" reflection include. So if anyone has anything to say concerning the development of the lape include, please refrain from posting here and instead do so on the newly made "official" reflection forum section accordingly.

Thanks a lot and hopefully we can keep this thread on topic!

Hoodz

2014-10-01 04:50:25

From: tls
Olly is "working" on the combination of osr and rs3 at www.github.com/srl/srl
I made some updater progress today. Got the hooks I need for developing another section of the include. Later on that, I have a concert to go to tonight(The Pretty Reckless, I'm super excited!)
http://rs-hacking.com/forum/index.php?/topic/776-59/page-2#entry7861


Ah thanks, have a great night

Nexusop

2014-10-01 18:02:17

I'm guessing the forum is for members only?

Dervish

2014-10-01 19:34:59

From: elfyyy
Guys, I'm back from my inactivity from over the summer and will get back to working on, and maintaining the include. We are almost finished with the new updater and will be back to updating the hooks within hours of an update.

Furthermore, this thread is about this include, the "unofficial" reflection include. So if anyone has anything to say concerning the development of the lape include, please refrain from posting here and instead do so on the newly made "official" reflection forum section accordingly.

Thanks a lot and hopefully we can keep this thread on topic!


The… lape include ?

Kyle

2014-10-01 19:37:16

From: Dervish
The… lape include ?


The Lape Reflection include that was under development by tls.

BigRedJapan

2014-10-03 02:13:45

Whats the Update On reflection?????

Harrier

2014-10-03 02:19:40

From: Rules of Joe
Whats the Update On reflection?????

Please reflect on this post.

BigRedJapan

2014-10-03 03:00:25

From: Harrier
Please reflect on this post.


The Hooks are still not updated when they should have been updated last week. Thats why im asking whats the update on Reflection??


Can i just not comment on unrelevent posts. people ask the dumbest questions. probably dont even know how to write a basic script.

Kyle

2014-10-03 08:42:24

From: Rules of Joe
Whats the Update On reflection?????


We're not finished on the new updater, so until then it may take us longer than normal to update from an a rs update. Hopefully within the next few weeks we will be back up and running smoothly.

bas

2014-10-03 08:44:27

From: elfyyy
We're not finished on the new updater, so until then it may take us longer than normal to update from an a rs update. Hopefully within the next few weeks we will be back up and running smoothly.


This mean reflection will be outdated for a few weeks?
Or other people keep posting new hooks?

Thanks for all the hard work =]

-Bas

BigRedJapan

2014-10-03 10:26:20

That means it is out of date for the community, but the Dev have a version that is running and are not willing to release it until they think the time is needed. So sit back and wait. <3

Frement

2014-10-03 10:29:18

From: Rules of Joe
That means it is out of date for the community, but the Dev have a version that is running and are not willing to release it until they think the time is needed. So sit back and wait. <3


No, a working version of reflection is released as soon as it is in the working state. If hooks are broken, those are updated as soon as they are working.

BigRedJapan

2014-10-03 10:32:03

It says right here they have a version, they just dont want to make a new updater yet. I know how Dev work on SRL, everything is kept in secret. But its already updated and it was conf. in one of the OSR scripts.

From: elfyyy
We're not finished on the new updater, so until then it may take us longer than normal to update from an a rs update. Hopefully within the next few weeks we will be back up and running smoothly.

Frement

2014-10-03 10:34:42

From: Rules of Joe
It says right here they have a version, they just dont want to make a new updater yet. I know how Dev work on SRL, everything is kept in secret. But its already updated and it was conf. in one of the OSR scripts.


It says right there that it may take longer for us to update where RS gets updated. And I do think I have more information on the matter then you, no reason to start arguing.

Harrier

2014-10-03 11:34:48

From: Rules of Joe
The Hooks are still not updated when they should have been updated last week. Thats why im asking whats the update on Reflection??


Can i just not comment on unrelevent posts. people ask the dumbest questions. probably dont even know how to write a basic script.

Wow… just wow… RS updated only 30 hours ago? You should of been around rsbot 2010…. when sometimes you had to wait 2 weeks.

BigRedJapan

2014-10-03 13:22:42

You are Correct I come from powerbot, and I was developing scripts thier before I found SRL. I know the waits.

Interfaced

2014-10-03 13:30:59

Have you ever considered moving to GitHub?

Fitta

2014-10-03 17:41:23


function R_GetPlayerIndex: Integer;
begin
Result := (SmartGetFieldInt(SmartCurrentTarget, 0, 'client.hx') * 1800645115) + 32768;
end;

This function needs a hook/hook_multiplier :)
It's the correct hook/multiplier for rev 60.

Kyle

2014-10-04 02:35:12

All correct hooks updated

Fitta

2014-10-04 03:35:28


const
ReflectionRevision = '60';

{*Node*}
Node = 'gc';
Node_id = 'dk';
Node_next = 'er';

{*LinkedList*}
LinkedList = 'fx';
LinkedList_head = 'g';

{*Actor*}
Actor = 'aw';
Actor_combatCycle = 'al';
Actor_activeText = 'am';
Actor_animation = 'ar';
Actor_Health = 'ae';
Actor_maxHealth = 'af';
Actor_interacting = 'aj';
Actor_localX = 'm';
Actor_localY = 'o';

{*Actor Multipliers*}
Actor_animation_Multiplier = 1647325343;
Actor_combatCycle_Multiplier = 166319025;
Actor_Health_Multiplier = -1545297959;
Actor_maxHealth_Multiplier = 769152649;
Actor_interacting_Multiplier = -2108972837;
Actor_localX_Multiplier = 171470795;
Actor_localY_Multiplier = 826764905;


{*Item*}
Item = 'w';
Item_id = 'g';
Item_stackSize = 'v';

{*Item Multipliers*}
Item_id_Multiplier = -1672318173;
Item_stackSize_Multiplier = -767037133;

{*ObjectDefinition*}
ObjectDefinition = 'an';
ObjectDefinition_name = 'i';
ObjectDefinition_actions = 'ai';

{*NpcDefinition*}
NpcDefinition = 'av';
NpcDefinition_actions = 'm';
NpcDefinition_name = 'l';
NpcDefinition_id = 'k';
NpcDefinition_level = 'b';

{*NpcDefinition Multipliers*}
NpcDefinition_id_Multiplier = 140673707;
NpcDefinition_level_Multiplier = -1840374219;

{*Npc*}
Npc = 'as';
Npc_definition = 'g';

{*Player*}
Player = 'z';
Player_definition = 'v';
Player_name = 'g';

{*Region*}
Region = 'cm';
Region_sceneTiles = 'l';

{*WallObject*}
WallObject = 'cd';
WallObject_hash = 'f';

{*WallObject Multipliers*}
WallObject_hash_Multiplier = 414599861;

{*FloorDecorationObject*}
FloorDecorationObject = 'cb';
FloorDecorationObject_hash = 'k';
FloorDecorationObject_hash_Multiplier = 1276953639;

{*BoundaryObject*}
BoundaryObject = 'cg';
BoundaryObject_hash = 'j';

{*BoundaryObject Multipliers*}
BoundaryObject_hash_Multiplier = 639818003;

{*SceneTile*}
SceneTile = 'ch';
SceneTile_WorldObjects = 'i';
SceneTile_WallObject = 'j';
SceneTile_BoundaryObject = 'e';
SceneTile_FloorObject = 'n';

{*WorldObject*}
WorldObject = 'cr';
WorldObject_hash = 'y';
WorldObject_Get_x = 'h';
WorldObject_Get_y = 'k';


{*WorldObject Multipliers*}
WorldObject_hash_Multiplier = 380600017;
WorldObject_Get_x_Multiplier = -1568890631;
WorldObject_Get_y_Multiplier = -904730093;

{*Widget*}
Widget = 'eu';
Widget_getRelativeX = 's';
Widget_getRelativeY = 'x';
Widget_getActions = 'bg';
Widget_getID = 'i';
Widget_getItems = 'dp';
Widget_getStackSizes = 'dn';
Widget_getText = 'ba';
Widget_height = 'o';
Widget_width = 'm';

{*Widget Multipliers*}
Widget_getRelativeX_Multiplier = 985647797;
Widget_getRelativeY_Multiplier = 1730176157;
Widget_getID_Multiplier = -1081473899;
Widget_height_Multiplier = 334099177;
Widget_width_Multiplier = -1281443035;

{*Client*}
client_region = 'df.dn';
client_menuCount = 'client.iy';
client_baseY = 'fr.cp';
client_baseX = 'bu.ca';
client_widgets = 'eu.g';
client_menuActions = 'client.im';
client_player = 'h.hc';
client_plane = 'ab.he';
client_groundSettings = 'l.v';
client_groundHeights = 'l.g';
client_menuWidth = 'dd.ik';
client_isMenuOpen = 'client.hw';
client_cameraPitch = 'ej.fd';
client_cameraYaw = 'dk.fg';
client_cameraX = 'ca.fz';
client_cameraY = 'gs.fk';
client_cameraZ = 'g.fp';
client_npcIndices = 'client.bj';
client_npcs = 'client.bb';
client_groundItems = 'client.hz';
client_login_state = 'client.q';
client_settings = 'ez.z';
client_LoopCycle = 'client.r';
client_menuHeight = 'w.id';
client_menuOptions = 'client.if';
client_menuX = 'y.hi';
client_menuY = 'dh.hq';
client_map_scale = 'client.dx';
client_map_offset = 'client.dk';
client_compassAngle = 'client.fv';
client_levels = 'client.hy';
client_real_levels = 'client.ht';
client_experiences = 'client.hp';
client_run_energy = 'client.jj';
client_weight = 'client.jy';

{*Client Multipliers*}
client_menuCount_Multiplier = 391839991;
client_baseY_Multiplier = 263051377;
client_baseX_Multiplier = -1743142671;
client_plane_Multiplier = -570926309;
client_menuWidth_Multiplier = 1703965243;
client_cameraPitch_Multiplier = -611182019;
client_cameraYaw_Multiplier = -1717637923;
client_cameraX_Multiplier = 1217916071;
client_cameraY_Multiplier = 1498802843;
client_cameraZ_Multiplier = 699100371;
client_LoopCycle_Multiplier = -637317861;
client_menuHeight_Multiplier = 720768655;
client_menuX_Multiplier = -745630459;
client_menuY_Multiplier = -740301953;
client_login_state_Multiplier = 1315883169;
client_map_scale_Multiplier = 1889215063;
client_map_offset_Multiplier = 331969371;
client_compassAngle_Multiplier = -44898889;
client_run_energy_Multiplier = -459978045;
client_weight_Multiplier = -409161997;

this is the correct hooks.

You guys switched CameraY and CameraZ :)

From: Fitta

function R_GetPlayerIndex: Integer;
begin
Result := (SmartGetFieldInt(SmartCurrentTarget, 0, 'client.hx') * 1800645115) + 32768;
end;

This function needs a hook/hook_multiplier :)
It's the correct hook/multiplier for rev 60.


Hook name should be client_getPlayerIndex btw!


Edit again:

client_baseY = 'fr.cp';
client_baseX = 'bu.ca';

You got these wrong too, they need to switch, same with their multipliers.


EDIT, last one, I promise.. just trying to contribute heh.. 100% working with my scripts


const
ReflectionRevision = '60';

{*Node*}
Node = 'gc';
Node_id = 'dk';
Node_next = 'er';

{*LinkedList*}
LinkedList = 'fx';
LinkedList_head = 'g';

{*Actor*}
Actor = 'aw';
Actor_combatCycle = 'al';
Actor_activeText = 'am';
Actor_animation = 'ar';
Actor_Health = 'ae';
Actor_maxHealth = 'af';
Actor_interacting = 'aj';
Actor_localX = 'm';
Actor_localY = 'o';

{*Actor Multipliers*}
Actor_animation_Multiplier = 1647325343;
Actor_combatCycle_Multiplier = 166319025;
Actor_Health_Multiplier = -1545297959;
Actor_maxHealth_Multiplier = 769152649;
Actor_interacting_Multiplier = -2108972837;
Actor_localX_Multiplier = 171470795;
Actor_localY_Multiplier = 826764905;


{*Item*}
Item = 'w';
Item_id = 'g';
Item_stackSize = 'v';

{*Item Multipliers*}
Item_id_Multiplier = -1672318173;
Item_stackSize_Multiplier = -767037133;

{*ObjectDefinition*}
ObjectDefinition = 'an';
ObjectDefinition_name = 'i';
ObjectDefinition_actions = 'ai';

{*NpcDefinition*}
NpcDefinition = 'av';
NpcDefinition_actions = 'm';
NpcDefinition_name = 'l';
NpcDefinition_id = 'k';
NpcDefinition_level = 'b';

{*NpcDefinition Multipliers*}
NpcDefinition_id_Multiplier = 140673707;
NpcDefinition_level_Multiplier = -1840374219;

{*Npc*}
Npc = 'as';
Npc_definition = 'g';

{*Player*}
Player = 'z';
Player_definition = 'v';
Player_name = 'g';

{*Region*}
Region = 'cm';
Region_sceneTiles = 'l';

{*WallObject*}
WallObject = 'cd';
WallObject_hash = 'f';

{*WallObject Multipliers*}
WallObject_hash_Multiplier = 414599861;

{*FloorDecorationObject*}
FloorDecorationObject = 'cb';
FloorDecorationObject_hash = 'k';
FloorDecorationObject_hash_Multiplier = 1276953639;

{*BoundaryObject*}
BoundaryObject = 'cg';
BoundaryObject_hash = 'j';

{*BoundaryObject Multipliers*}
BoundaryObject_hash_Multiplier = 639818003;

{*SceneTile*}
SceneTile = 'ch';
SceneTile_WorldObjects = 'i';
SceneTile_WallObject = 'j';
SceneTile_BoundaryObject = 'e';
SceneTile_FloorObject = 'n';

{*WorldObject*}
WorldObject = 'cr';
WorldObject_hash = 'y';
WorldObject_Get_x = 'h';
WorldObject_Get_y = 'k';


{*WorldObject Multipliers*}
WorldObject_hash_Multiplier = 380600017;
WorldObject_Get_x_Multiplier = -1568890631;
WorldObject_Get_y_Multiplier = -904730093;

{*Widget*}
Widget = 'eu';
Widget_getRelativeX = 's';
Widget_getRelativeY = 'x';
Widget_getActions = 'bg';
Widget_getID = 'i';
Widget_getItems = 'dp';
Widget_getStackSizes = 'dn';
Widget_getText = 'ba';
Widget_height = 'o';
Widget_width = 'm';

{*Widget Multipliers*}
Widget_getRelativeX_Multiplier = 985647797;
Widget_getRelativeY_Multiplier = 1730176157;
Widget_getID_Multiplier = -1081473899;
Widget_height_Multiplier = 334099177;
Widget_width_Multiplier = -1281443035;

{*Client*}
client_region = 'df.dn';
client_menuCount = 'client.iy';
client_baseY = 'bu.ca';
client_baseX = 'fr.cp';
client_widgets = 'eu.g';
client_menuActions = 'client.im';
client_player = 'h.hc';
client_plane = 'ab.he';
client_groundSettings = 'l.v';
client_groundHeights = 'l.g';
client_menuWidth = 'dd.ik';
client_isMenuOpen = 'client.hw';
client_cameraPitch = 'ej.fd';
client_cameraYaw = 'dk.fg';
client_cameraX = 'ca.fz';
client_cameraY = 'gs.fk';
client_cameraZ = 'g.fp';
client_npcIndices = 'client.bj';
client_npcs = 'client.bb';
client_groundItems = 'client.hz';
client_login_state = 'client.q';
client_settings = 'ez.z';
client_LoopCycle = 'client.r';
client_menuHeight = 'w.id';
client_menuOptions = 'client.if';
client_menuX = 'y.hi';
client_menuY = 'dh.hq';
client_map_scale = 'client.dx';
client_map_offset = 'client.dk';
client_compassAngle = 'client.fv';
client_levels = 'client.hy';
client_real_levels = 'client.ht';
client_experiences = 'client.hp';
client_run_energy = 'client.jj';
client_weight = 'client.jy';

{*Client Multipliers*}
client_menuCount_Multiplier = 391839991;
client_baseY_Multiplier = -1743142671;
client_baseX_Multiplier = 263051377;

client_plane_Multiplier = -570926309;
client_menuWidth_Multiplier = 1703965243;
client_cameraPitch_Multiplier = -611182019;
client_cameraYaw_Multiplier = -1717637923;
client_cameraX_Multiplier = 1217916071;
client_cameraY_Multiplier = 1498802843;
client_cameraZ_Multiplier = 699100371;
client_LoopCycle_Multiplier = -637317861;
client_menuHeight_Multiplier = 720768655;
client_menuX_Multiplier = -745630459;
client_menuY_Multiplier = -740301953;
client_login_state_Multiplier = 1315883169;
client_map_scale_Multiplier = 1889215063;
client_map_offset_Multiplier = 331969371;
client_compassAngle_Multiplier = -44898889;
client_run_energy_Multiplier = -459978045;
client_weight_Multiplier = -409161997;


Harrier

2014-10-04 05:48:36

From: Fitta
]

I'm guessing you got these from rs-hacking? They quite often get the x/y the wrong way around
Edit; you should also credit who you got the hooks from if so

Fitta

2014-10-04 07:01:11

From: Harrier
I'm guessing you got these from rs-hacking? They quite often get the x/y the wrong way around
Edit; you should also credit who you got the hooks from if so


Stop guessing. The hooks are from the googlecode for this include. I switched the X and Y's, as it was uploaded switched in two different cases - Camera & Base.

Kyle

2014-10-04 10:44:37

From: Fitta
.


Thanks, not sure how that happened! I was tired last night

Fitta

2014-10-04 11:39:17

From: elfyyy
Thanks, not sure how that happened! I was tired last night


Hey, I'm thankful for all the work you put in!
Cheers :)

BigRedJapan

2014-10-04 12:24:52

Thanks For the Fix man! <3 Back to finishing This script. <3

Frement

2014-10-04 12:34:26

From: Rules of Joe
Thanks For the Fix man! <3 Back to finishing This script. <3


Out of curiosity, are you working on a script for OSR or RS3?

bas

2014-10-04 15:15:48

Walkpath screws up and wont reconise the coords (R_NearTile).
No hate just saying.;)

-Bas.

Kyle

2014-10-04 16:37:24

From: bas
Walkpath screws up and wont reconise the coords (R_NearTile).
No hate just saying.;)

-Bas.


Works fine for me

Cheddy

2014-10-04 17:32:31

From: Frement
Out of curiosity, are you working on a script for OSR or RS3?


I would assume OSR if he was waiting for hooks but ya never know ;)

bas

2014-10-04 17:49:40

From: elfyyy
Works fine for me



Hmm strange, its randomly working once in X resets.

if R_NearTile(point(3380, 2965), 7) then
begin
CenterToBank;
end;

I've also had this with few other scripts i made that used NearTile.
All seem to bugg out on R_NearTile and walking since yesterday for me.

Interfaced

2014-10-04 17:58:26

From: bas
Hmm strange, its randomly working once in X resets.

if R_NearTile(point(3380, 2965), 7) then
begin
CenterToBank;
end;

I've also had this with few other scripts i made that used NearTile.
All seem to bugg out on R_NearTile and walking since yesterday for me.

Set the version of your hooks in Hooks.simba to -1 so it updates from the server, then validate that tile is correct.

bas

2014-10-04 18:11:32

From: Interfaced
Set the version of your hooks in Hooks.simba to -1 so it updates from the server, then validate that tile is correct.


Done that, still not working.
EDIT i need to re-grab the coords??

edit1 seems to work, thanks!

Interfaced

2014-10-04 18:15:30

From: bas
Done that, still not working.
EDIT i need to re-grab the coords??

edit1 seems to work, thanks!
Glad it was sorted out.

BigRedJapan

2014-10-05 11:42:46

Mostly on OSR, but My friends have me writing privet scripts for them on RS3. As they are Comp'd and dont want to restart and transfer to OSR. -_- Its a battle!

Shatterhand

2014-10-07 09:48:58

client_base x and y hooks are swapped in rev 60. :)

Kyle

2014-10-07 10:10:10

From: Shatterhand
client_base x and y hooks are swapped in rev 60. :)


Yup, already fixed, thanks!

Shatterhand

2014-10-07 11:11:19

From: elfyyy
Yup, already fixed, thanks!

So is camera y and z.

Kyle

2014-10-07 11:15:33

From: Shatterhand
So is camera y and z.


Already fixed as well :P Might need to change the hooks file to a lower rev so it downloads the newest hooks!

Shatterhand

2014-10-07 11:46:47

From: elfyyy
Already fixed as well :P Might need to change the hooks file to a lower rev so it downloads the newest hooks!


Could you make a different version counter for this? So the users dont have to change numbers and could get fixes automatically.

Kyle

2014-10-07 13:18:20

From: Shatterhand
Could you make a different version counter for this? So the users dont have to change numbers and could get fixes automatically.


Yeah. I normally increase the include rev so it automatically downloads the updated include itself but didn't get around to it. I might add in a sub rev number for the hooks though that's a good idea.

Shatterhand

2014-10-07 16:03:48

From: elfyyy
Yeah. I normally increase the include rev so it automatically downloads the updated include itself but didn't get around to it. I might add in a sub rev number for the hooks though that's a good idea.


Yeh it needs to be sub version, keep the revision numbers. :)

the bank

2014-10-09 14:16:24

When did they start including multipliers for the field values?? I'm old school I know but I've never seen that.

Is it the same in RS3? Is finding them as simple as iterating the instructions near the field looking for a "fmul" instruction (multiply 2 floats) ?

tls

2014-10-09 14:20:31

From: the bank
When did they start including multipliers for the field values?? I'm old school I know but I've never seen that.

Is it the same in RS3? Is finding them as simple as iterating the instructions near the field looking for a "fmul" instruction (multiply 2 floats) ?


I believe it was sometime around rt5 that multipliers were introduced. I currently search for imul and lmul then get the constant and field instructions just before them. They only use multipliers for ints/longs as far as I have seen. It's just multiplication overflow.

the bank

2014-10-09 14:26:43

From: tls
I believe it was sometime around rt5 that multipliers were introduced. I currently search for imul and lmul then get the constant and field instructions just before them. They only use multipliers for ints/longs as far as I have seen. It's just multiplication overflow.


Awesome thanks for the reply, the client is structured so differently than last time I was active in this scene. Just to see how many hooks on my own updater might still even function, I decided to try running it. Hit with my first issue, they encrypt the client in an inner-pack. Was able to steal the decryption function from within one of the classes outside of the inner-pack but it was still a pain in the ass.

I'm sure you all already know all this I just wanted to /vent haha

tls

2014-10-09 14:42:59

From: the bank
Awesome thanks for the reply, the client is structured so differently than last time I was active in this scene. Just to see how many hooks on my own updater might still even function, I decided to try running it. Hit with my first issue, they encrypt the client in an inner-pack. Was able to steal the decryption function from within one of the classes outside of the inner-pack but it was still a pain in the ass.

I'm sure you all already know all this I just wanted to /vent haha


rs-hacking.com/forum/

Brandon

2014-10-09 15:07:29

From: the bank
Awesome thanks for the reply, the client is structured so differently than last time I was active in this scene. Just to see how many hooks on my own updater might still even function, I decided to try running it. Hit with my first issue, they encrypt the client in an inner-pack. Was able to steal the decryption function from within one of the classes outside of the inner-pack but it was still a pain in the ass.

I'm sure you all already know all this I just wanted to /vent haha



:O Are you "The Bank" from MoparIsTheBest? This guy: https://www.moparscape.org/smf/index.php?topic=299985.0

the bank

2014-10-09 15:08:24

The one and only, bored and checking in on my ex-favourite scene…which it appears to be shit :(

the bank

2014-10-09 16:47:36

From: tls
I believe it was sometime around rt5 that multipliers were introduced. I currently search for imul and lmul then get the constant and field instructions just before them. They only use multipliers for ints/longs as far as I have seen. It's just multiplication overflow.


Curious, why do you search that way?

In the example:

static int var = 1

var *= 23214322

The bytecode (AFAIK) should just be

getstatic ldc imul putstatic

so why don't you search for that? Unless I'm missing something..

tls

2014-10-09 17:19:13

From: the bank
Curious, why do you search that way?

In the example:

static int var = 1

var *= 23214322

The bytecode (AFAIK) should just be

getstatic ldc imul putstatic

so why don't you search for that? Unless I'm missing something..


They don't set the variable equal to the overflow value. They use it in parameters and local variables.


somemethod(var * 23214322)
so bytecode is

getstatic ldc imul invokevirtual
Also, they obfuscate the flow. It can be

ldc getstatic imul invokevirtual

the bank

2014-10-09 17:40:36

From: tls
They don't set the variable equal to the overflow value. They use it in parameters and local variables.


somemethod(var * 23214322)
so bytecode is

getstatic ldc imul invokevirtual
Also, they obfuscate the flow. It can be

ldc getstatic imul invokevirtual


Makes perfect sense now that I see what you're talking about. It would be pointless for them to simply set the field to equal the product of the two.

Thanks for clearing that up, I really appreciate you taking the time to reply!

Kyle

2014-10-13 14:47:26

Hooks updated to revision 61 :)

Hoodz

2014-10-13 15:02:18

From: elfyyy
Hooks updated to revision 61 :)


[video=youtube;y6Sxv-sUYtM]https://www.youtube.com/watch?v=y6Sxv-sUYtM[/video]

Kyle

2014-10-14 11:56:25

Hey guys, just wanted to give you guys some updates on the include and what we have been working on and what to expect going forward. We are working on getting our updater up on a server which will be updated with hooks within a few minutes of rs updating in order to have the most up to date hooks possible. I Can't guarantee that we will do this, just wanted to point it out that it is one of our goals. What I have been working on quite a bit lately is rewriting parts of the include to be more efficient and also added a completely new memory management system. I am doing all of this in a separate github located here, as to not mess up any functionalities of the googlecode's include.

The new memory management stores all global object references from the time it is first called, until termination of the script, making much better use of the already called pointer. All of the other objects will also be stored in the array, until the finishing of the individual function, which again increases the speed quite significantly. In the most extreme case, the old way of object finding, in order to gather all objects in the current loaded region which is 104x104 tiles would take around 12 seconds, using the new memory management it takes around 2.5 seconds. Npc finding used to take around 250ms to find all npc's, it now takes ~30ms.

Using this method also cuts down on potential memory leaks to the point where they aren't even a factor anymore, due to the fact that unless a old object reference is overwritten, it will always be free'd, if not during runtime, then upon termination of the script. Also, the references to the pointers are done using enums instead of integers, which are smaller(1 byte compared to 4), which also improves efficiency.

So until the includes are merged, feel free to test out the include on my github, but ofc note, I am constantly changing stuff, so it may or may not always be stable and what not.

Fitta

2014-10-14 12:50:17

From: elfyyy
Hey guys, just wanted to give you guys some updates on the include and what we have been working on and what to expect going forward. We are working on getting our updater up on a server which will be updated with hooks within a few minutes of rs updating in order to have the most up to date hooks possible. I Can't guarantee that we will do this, just wanted to point it out that it is one of our goals. What I have been working on quite a bit lately is rewriting parts of the include to be more efficient and also added a completely new memory management system. I am doing all of this in a separate github located here, as to not mess up any functionalities of the googlecode's include.

The new memory management stores all global object references from the time it is first called, until termination of the script, making much better use of the already called pointer. All of the other objects will also be stored in the array, until the finishing of the individual function, which again increases the speed quite significantly. In the most extreme case, the old way of object finding, in order to gather all objects in the current loaded region which is 104x104 tiles would take around 12 seconds, using the new memory management it takes around 2.5 seconds. Npc finding used to take around 250ms to find all npc's, it now takes ~30ms.

Using this method also cuts down on potential memory leaks to the point where they aren't even a factor anymore, due to the fact that unless a old object reference is overwritten, it will always be free'd, if not during runtime, then upon termination of the script. Also, the references to the pointers are done using enums instead of integers, which are smaller(1 byte compared to 4), which also improves efficiency.

So until the includes are merged, feel free to test out the include on my github, but ofc note, I am constantly changing stuff, so it may or may not always be stable and what not.


Please don't change too many function/procedure names!
Also, loving the work, keep it up :f:

Kyle

2014-10-14 13:27:32

From: Fitta
Please don't change too many function/procedure names!
Also, loving the work, keep it up :f:


Yeah ofc not. As of now the only thing I can think that is any different is instead of using constants for object types it will now be enums. So OBJ_GAME for example

Kyle

2014-10-17 18:14:12

Hooks updated to revision 62

Kyle

2014-10-30 17:01:17

Hooks updated to revision 63

Kyle

2014-11-06 14:26:15

Hooks update to revision 64

Fitta

2014-11-08 13:37:46


function R_WaitChooseOption(Option: String; Time: Integer): Boolean;
var
T: Integer;
begin
Result := False;
T := GetSystemTime + Time;
while (GetSystemTime < T) do
begin
if (R_IsMenuOpen) then
begin
Result := R_ChooseOption(Option);
Exit;
end;
Wait(20 + Random(20));
end;
end;

Urgent!! -> as atm it always return true, fix is above.



EDIT:

Also, seems like it doesn't matter how much I post about fixes, nobody seems to add/tweak them?

Kyle

2014-11-08 13:40:54

From: Fitta

function R_WaitChooseOption(Option: String; Time: Integer): Boolean;
var
T: Integer;
begin
Result := False;
T := GetSystemTime + Time;
while (GetSystemTime < T) do
begin
if (R_IsMenuOpen) then
begin
Result := R_ChooseOption(Option);
Exit;
end;
Wait(20 + Random(20));
end;
end;

Urgent!! -> as atm it always return true, fix is above.



EDIT:

Also, seems like it doesn't matter how much I post about fixes, nobody seems to add/tweak them?


I'm pretty sure that everything that has been is fixed quite promptly….

EDIT: Pushed new update

Fitta

2014-11-08 13:51:08

Excuse me for trying to help you guys..
I've posted quite a lot of urgent stuff and nobody has made a comment about anything, therefor I had to ask. It was nothing personal at all, just wondering. Please calm down.

Kyle

2014-11-08 13:52:29

From: Fitta
Excuse me for trying to help you guys..
I've posted quite a lot of urgent stuff and nobody has made a comment about anything, therefor I had to ask. It was nothing personal at all, just wondering. Please calm down.


Just saying lol. What else have you posted? May have been over summer when I was AFK, I checked the last few pages and didn't see anything?

Fitta

2014-11-08 13:53:58

page 26

function R_GetPlayerIndex: Integer;
begin
Result := (SmartGetFieldInt(SmartCurrentTarget, 0, 'client.hx') * 1800645115) + 32768;
end;

This function has no global hook.



I posted a whole Players.simba file somewhere, might have been taken down, there's some code at page 22 though.

Kyle

2014-11-08 13:58:06

From: Fitta
page 26

function R_GetPlayerIndex: Integer;
begin
Result := (SmartGetFieldInt(SmartCurrentTarget, 0, 'client.hx') * 1800645115) + 32768;
end;

This function has no global hook.


Oh I guess Frement added it when we were testing anti randoms. I'll just remove the whole function since I doubt people will use it for anything other than that, as you can just get the interacting index of the npc. If not I can add the hook to our updater if you find use in it?

Fitta

2014-11-08 14:32:34

From: elfyyy
Oh I guess Frement added it when we were testing anti randoms. I'll just remove the whole function since I doubt people will use it for anything other than that, as you can just get the interacting index of the npc. If not I can add the hook to our updater if you find use in it?


There is use for it! I use it heavily in all my combat scripts. Please if you don't mind keep it!

Cheddy

2014-11-09 16:09:52

From: Fitta
There is use for it! I use it heavily in all my combat scripts. Please if you don't mind keep it!


Pretty sure it is a pointless hook? It just returns 2047 doesn't it? I was under the impression that the local players index was always 2047

Client.getLocalPlayer = Client.getLocalPlayers[2047] = new Player();
That's what I got from reversing it =)

Assuming you have either removed int ldcs or you skip them the ASM pattern is pretty easy for that hook

AbstractInsnNode[] patPlayerIndex = new AbstractInsnNode[] {
new FieldInsnNode(GETSTATIC, "client", null, "I"),
new InsnNode(IMUL),
new IntInsnNode(BIPUSH, 8),
new InsnNode(ISHL),
new InsnNode(IMUL),
new FieldInsnNode(PUTSTATIC, "client", null, "I")
};

Edit: thanks for the merge =) (I'll remember next time)

tsacmoc

2014-11-13 12:26:46

"Reflection Hooks are outdated
No need to post about it, we are currently working on it. ~ Reflection dev's"

am i supposed to be getting this msg?

Harrier

2014-11-13 12:31:43

From: tsacmoc
"Reflection Hooks are outdated
No need to post about it, we are currently working on it. ~ Reflection dev's"

am i supposed to be getting this msg?

No need to post about it I would think so…

Rlp

2014-11-13 12:32:09

From: tsacmoc
"Reflection Hooks are outdated
No need to post about it, we are currently working on it. ~ Reflection dev's"

am i supposed to be getting this msg?

I believe so, runescape was updated today.

tsacmoc

2014-11-13 12:34:38

thank you Rlp

Kyle

2014-11-13 19:50:00

Hooks update to revision 65.

Sorry it took so long, had class all day :'(

Fitta

2014-11-13 20:18:25

From: elfyyy
Hooks update to revision 65.

Sorry it took so long, had class all day :'(


How is 13 hours long? I'd say that's rather quick and smooth to be honest :)
btw, do you mind pm'ing your skype?

Kyle

2014-11-13 20:34:51

From: Fitta
How is 13 hours long? I'd say that's rather quick and smooth to be honest :)
btw, do you mind pm'ing your skype?


:P Haha Pm'd

Cheddy

2014-11-15 09:45:49

I'll just shove my hooks here in case you want any extra such as myPlayerIndex =)
Nice work with the fast update Elfyyy! =)

{ 443 Hooks Found By Cheddy's PiUpdater }

const
ReflectionRevision = '65';


{* AccessFile - 3 Hooks *}
AccessFile = 'gv';
AccessFile_File = 'n';
AccessFile_Length = 'x';
AccessFile_Length_Multiplier = 7283964095786905305;
AccessFile_Position = 'k';
AccessFile_Position_Multiplier = 1;

{* AnimableNode - 7 Hooks *}
AnimableNode = 'o';
AnimableNode_Animation = 'm';
AnimableNode_ID = 'n';
AnimableNode_ID_Multiplier = -812187483;
AnimableNode_Orientation = 'k';
AnimableNode_Orientation_Multiplier = 589234209;
AnimableNode_Plane = 'i';
AnimableNode_Plane_Multiplier = 468999745;
AnimableNode_Type = 'x';
AnimableNode_Type_Multiplier = -134579313;
AnimableNode_X = 'd';
AnimableNode_X_Multiplier = -218029179;
AnimableNode_Y = 'q';
AnimableNode_Y_Multiplier = 902625265;

{* AnimationSequence - 10 Hooks *}
AnimationSequence = 'as';
AnimationSequence_FlowControl = 'o';
AnimationSequence_Frame1IDs = 'q';
AnimationSequence_Frame2IDs = 'a';
AnimationSequence_FrameStep = 'e';
AnimationSequence_FrameStep_Multiplier = -455715935;
AnimationSequence_MaxLoops = 'c';
AnimationSequence_MaxLoops_Multiplier = -1897252859;
AnimationSequence_MinLoops = 'r';
AnimationSequence_MinLoops_Multiplier = -895486663;
AnimationSequence_PrecedenceAnimation = 'u';
AnimationSequence_PrecedenceAnimation_Multiplier = 548503553;
AnimationSequence_Priority = 'h';
AnimationSequence_Priority_Multiplier = 1829000027;
AnimationSequence_ReplyMode = 't';
AnimationSequence_ReplyMode_Multiplier = 692880611;
AnimationSequence_isStretched = 'v';

{* BoundaryObject - 9 Hooks *}
BoundaryObject = 'cg';
BoundaryObject_AlternativeOrientation = 'd';
BoundaryObject_AlternativeOrientation_Multiplier = -1511456135;
BoundaryObject_BackupRenderable = 'm';
BoundaryObject_Flags = 'w';
BoundaryObject_Flags_Multiplier = 1796555687;
BoundaryObject_Hash = 'a';
BoundaryObject_Hash_Multiplier = -238959213;
BoundaryObject_Orientation = 'i';
BoundaryObject_Orientation_Multiplier = -394024461;
BoundaryObject_Plane = 'n';
BoundaryObject_Plane_Multiplier = -428760937;
BoundaryObject_Renderable = 'q';
BoundaryObject_Get_X = 'k';
BoundaryObject_Get_X_Multiplier = 2081062601;
BoundaryObject_Get_Y = 'x';
BoundaryObject_Get_Y_Multiplier = -1441314441;

{* Buffer - 2 Hooks *}
Buffer = 'dw';
Buffer_Offset = 'x';
Buffer_Offset_Multiplier = 736769211;
Buffer_Payload = 'n';

{* BufferedConnection - 5 Hooks *}
BufferedConnection = 'dd';
BufferedConnection_InputStream = 'n';
BufferedConnection_OutputStream = 'x';
BufferedConnection_Payload = 'm';
BufferedConnection_Socket = 'k';
BufferedConnection_isClosed = 'i';

{* Cache - 5 Hooks *}
Cache = 'fh';
Cache_CacheableNode = 'n';
Cache_NodeHashTable = 'i';
Cache_Queue = 'd';
Cache_Remaining = 'k';
Cache_Remaining_Multiplier = 1;
Cache_Size = 'x';
Cache_Size_Multiplier = 1;

{* CacheableNode - 2 Hooks *}
CacheableNode = 'gr';
CacheableNode_Next = 'cs';
CacheableNode_Prev = 'cb';

{* Canvas - 1 Hooks *}
Canvas = 'dg';
Canvas_Component = 'n';

{* Actor - 17 Hooks *}
Actor = 'av';
Actor_Animation = 'bf';
Actor_Animation_Multiplier = 592229547;
Actor_CombatCycle = 'aq';
Actor_CombatCycle_Multiplier = -111155305;
Actor_Health = 'an';
Actor_Health_Multiplier = -728238545;
Actor_HitCycles = 'ag';
Actor_HitDamages = 'az';
Actor_HitTypes = 'ao';
Actor_Interacting = 'ap';
Actor_Interacting_Multiplier = 1744380331;
Actor_MaxHealth = 'ax';
Actor_MaxHealth_Multiplier = -1437565613;
Actor_Orientation = 'bq';
Actor_Orientation_Multiplier = 1619823327;
Actor_PathLength = 'bc';
Actor_PathLength_Multiplier = 705496411;
Actor_PathTraversed = 'bm';
Actor_PathX = 'bp';
Actor_PathY = 'bz';
Actor_ActiveText = 'at';
Actor_LocalX = 'g';
Actor_LocalX_Multiplier = -1690539899;
Actor_LocalY = 's';
Actor_LocalY_Multiplier = -340252003;
Actor_isInSequence = 'p';

{* ChatboxMessage - 6 Hooks *}
ChatboxMessage = 'ay';
ChatboxMessage_ClanName = 'd';
ChatboxMessage_ID = 'n';
ChatboxMessage_ID_Multiplier = -1974498873;
ChatboxMessage_PlayerName = 'i';
ChatboxMessage_Text = 'q';
ChatboxMessage_TimeSent = 'x';
ChatboxMessage_TimeSent_Multiplier = -1551332889;
ChatboxMessage_Type = 'k';
ChatboxMessage_Type_Multiplier = 1605873655;

{* ClassData - 3 Hooks *}
ClassData = 'gm';
ClassData_Data = 'm';
ClassData_Fields = 'd';
ClassData_Methods = 'a';

{* Client - 84 Hooks *}
Client = 'client';
Client_AnimationSequenceCache = 'as.i';
Client_BaseX = 'cz.cp';
Client_BaseX_Multiplier = -499664201;
Client_BaseY = 'aq.cz';
Client_BaseY_Multiplier = 2016335859;
Client_CameraPitch = 'ak.fu';
Client_CameraPitch_Multiplier = -291086405;
Client_CameraPitchMinimum = 'client.fe';
Client_CameraPitchMinimum_Multiplier = -2009152535;
Client_CameraX = 'do.fy';
Client_CameraX_Multiplier = -320921259;
Client_CameraY = 'av.fl';
Client_CameraY_Multiplier = 395996553;
Client_CameraYaw = 'm.fg';
Client_CameraYaw_Multiplier = 1054913793;
Client_CameraZ = 'bt.fz';
Client_CameraZ_Multiplier = 923000167;
Client_Canvas = 'm.pp';
Client_CollisionMaps = 'client.w';
Client_CosineCurve = 'cc.ay';
Client_CurrentWorldID = 'client.d';
Client_CurrentWorldID_Multiplier = -2077895623;
Client_DestinationX = 'client.mq';
Client_DestinationX_Multiplier = -1072680707;
Client_DestinationY = 'client.md';
Client_DestinationY_Multiplier = -1785231337;
Client_Run_Energy = 'client.je';
Client_Run_Energy_Multiplier = -62802767;
Client_Experiences = 'client.hu';
Client_FirstMenuOption = 'et.is';
Client_LoopCycle = 'client.h';
Client_LoopCycle_Multiplier = 1308178505;
Client_Login_State = 'client.c';
Client_Login_State_Multiplier = 346046433;
Client_GroundItemList = 'client.hs';
Client_IdleTime = 'dy.i';
Client_IdleTime_Multiplier = 1;
Client_ItemDefinintionCache = 'an.i';
Client_ItemModelCache = 'an.d';
Client_LastClickTime = 'dy.v';
Client_LastClickTime_Multiplier = 192837221790910297;
Client_LastClickX = 'dy.e';
Client_LastClickX_Multiplier = 1727757979;
Client_LastClickY = 'dy.o';
Client_LastClickY_Multiplier = -1736437557;
Client_LastMouseClickButton = 'dy.d';
Client_LastMouseClickButton_Multiplier = -679637275;
Client_LastMouseClickModifier = 'dy.w';
Client_LastMouseClickModifier_Multiplier = 1107108155;
Client_Levels = 'client.hz';
Client_NPCs = 'client.bp';
Client_Player = 'cp.ht';
Client_PlayerIndex = 'client.hf';
Client_PlayerIndex_Multiplier = 1451705515;
Client_Players = 'client.gc';
Client_LoginState = 'aa.av';
Client_LoginState_Multiplier = -842222665;
Client_CompassAngle = 'client.fw';
Client_CompassAngle_Multiplier = -1574256657;
Client_Map_Offset = 'client.dd';
Client_Map_Offset_Multiplier = 1324243183;
Client_Map_Scale = 'client.dz';
Client_Map_Scale_Multiplier = -156557579;
Client_MenuActions = 'client.io';
Client_MenuCount = 'client.ij';
Client_MenuCount_Multiplier = 1474678787;
Client_MenuHeight = 'bf.is';
Client_MenuHeight_Multiplier = 57876773;
Client_MenuOptions = 'client.ip';
Client_MenuWidth = 'ax.if';
Client_MenuWidth_Multiplier = -739304797;
Client_MenuX = 'dv.hp';
Client_MenuX_Multiplier = -805974663;
Client_MenuY = 'e.hy';
Client_MenuY_Multiplier = 1441691125;
Client_Mouse = 'dy.n';
Client_MouseX = 'dy.q';
Client_MouseX_Multiplier = -1718608747;
Client_MouseY = 'dy.m';
Client_MouseY_Multiplier = -105845879;
Client_NPCDefinitionCache = 'af.k';
Client_NPCIndices = 'client.bm';
Client_NPCModelCache = 'af.i';
Client_ObjectAnimatedModelCache = 'ae.m';
Client_ObjectDefinitionCache = 'ae.i';
Client_ObjectModelCache = 'ae.d';
Client_ObjectRenderableCache = 'ae.q';
Client_Password = 'aa.as';
Client_Plane = 'd.hj';
Client_Plane_Multiplier = 852571267;
Client_PlayerModelCache = 'fy.v';
Client_ProjectileList = 'client.hg';
Client_Real_Levels = 'client.hm';
Client_Region = 'aq.dh';
Client_RGBImageCache = 'an.q';
Client_SelectedItemName = 'client.it';
Client_SelectedSpellName = 'client.js';
Client_Settings = 'er.x';
Client_SineCurve = 'cc.aw';
Client_GroundHeights = 'q.n';
Client_GroundSettings = 'q.x';
Client_Username = 'aa.ai';
Client_ValidWidgets = 'ep.k';
Client_VarpbitCache = 'ao.x';
Client_VarpbitSettings = 'er.n';
Client_Weight = 'client.jl';
Client_Weight_Multiplier = -652607075;
Client_WidgetBoundsHeight = 'client.lu';
Client_WidgetBoundsWidth = 'client.lm';
Client_WidgetBoundsX = 'client.lh';
Client_WidgetBoundsY = 'client.lb';
Client_WidgetItemTable = 'j.n';
Client_WidgetNodeTable = 'client.jd';
Client_Widgets = 'ep.n';
Client_WidgetSettings = 'er.k';
Client_Worlds = 'cv.bb';
Client_isMenuOpen = 'client.hr';
Client_isWorldSelectorOpen = 'aa.ap';

{* CollisionMap - 5 Hooks *}
CollisionMap = 'gy';
CollisionMap_Flags = 'ak';
CollisionMap_Height = 'ar';
CollisionMap_Height_Multiplier = 522310721;
CollisionMap_OffsetX = 'l';
CollisionMap_OffsetX_Multiplier = -520790741;
CollisionMap_OffsetY = 'al';
CollisionMap_OffsetY_Multiplier = 1807733409;
CollisionMap_Width = 'aa';
CollisionMap_Width_Multiplier = 1470394689;

{* ComplexTile - 1 Hooks *}
ComplexTile = 'cd';
ComplexTile_isFlat = 'o';

{* FloorDecorationObject - 6 Hooks *}
FloorDecorationObject = 'ch';
FloorDecorationObject_Flags = 'q';
FloorDecorationObject_Flags_Multiplier = 702102689;
FloorDecorationObject_Hash = 'd';
FloorDecorationObject_Hash_Multiplier = 130748493;
FloorDecorationObject_Plane = 'n';
FloorDecorationObject_Plane_Multiplier = 2103220875;
FloorDecorationObject_Renderable = 'i';
FloorDecorationObject_Get_X = 'k';
FloorDecorationObject_Get_X_Multiplier = 758653411;
FloorDecorationObject_Get_Y = 'x';
FloorDecorationObject_Get_Y_Multiplier = -605756285;

{* GenericTile - 1 Hooks *}
GenericTile = 'cs';
GenericTile_isFlat = 'q';

{* NodeHashTable - 5 Hooks *}
NodeHashTable = 'fd';
NodeHashTable_Current = 'i';
NodeHashTable_CurrentIndex = 'd';
NodeHashTable_CurrentIndex_Multiplier = 1;
NodeHashTable_Head = 'k';
NodeHashTable_GetNodes = 'x';
NodeHashTable_GetSize = 'n';
NodeHashTable_GetSize_Multiplier = 1;

{* WorldObject - 12 Hooks *}
WorldObject = 'cq';
WorldObject_Flags = 'j';
WorldObject_Flags_Multiplier = 1438568363;
WorldObject_Height = 'k';
WorldObject_Height_Multiplier = -1936186339;
WorldObject_Hash = 'z';
WorldObject_Hash_Multiplier = 620452503;
WorldObject_Orientation = 'q';
WorldObject_Orientation_Multiplier = 1124443433;
WorldObject_Plane = 'n';
WorldObject_Plane_Multiplier = 983356639;
WorldObject_RelativeX = 'm';
WorldObject_RelativeX_Multiplier = 1656569195;
WorldObject_RelativeY = 'w';
WorldObject_RelativeY_Multiplier = 1603314193;
WorldObject_Renderable = 'd';
WorldObject_SizeX = 'a';
WorldObject_SizeX_Multiplier = 1065419227;
WorldObject_SizeY = 'e';
WorldObject_SizeY_Multiplier = 1311664237;
WorldObject_Get_X = 'i';
WorldObject_Get_X_Multiplier = -433338945;
WorldObject_Get_Y = 'x';
WorldObject_Get_Y_Multiplier = 461504359;

{* Item - 2 Hooks *}
Item = 'b';
Item_ID = 'n';
Item_ID_Multiplier = -108747091;
Item_StackSize = 'x';
Item_StackSize_Multiplier = 474329423;

{* ItemDefinition - 38 Hooks *}
ItemDefinition = 'an';
ItemDefinition_DiagonalRotation = 'h';
ItemDefinition_DiagonalRotation_Multiplier = 1178257721;
ItemDefinition_FemaleDialogue = 'ae';
ItemDefinition_FemaleDialogue_Multiplier = -723895155;
ItemDefinition_FemaleDialogueHat = 'ai';
ItemDefinition_FemaleDialogueHat_Multiplier = -612568821;
ItemDefinition_FemaleEmblem = 'av';
ItemDefinition_FemaleEmblem_Multiplier = -2105404479;
ItemDefinition_FemaleEquipOffset = 'ay';
ItemDefinition_FemaleEquipOffset_Multiplier = 880768817;
ItemDefinition_FemaleEquipPrimaryModel = 'ar';
ItemDefinition_FemaleEquipPrimaryModel_Multiplier = -113836729;
ItemDefinition_FemaleEquipSecondaryModel = 'ak';
ItemDefinition_FemaleEquipSecondaryModel_Multiplier = -1656452333;
ItemDefinition_GroundActions = 'p';
ItemDefinition_LightModifier = 'an';
ItemDefinition_LightModifier_Multiplier = -994159053;
ItemDefinition_MaleDialogue = 'at';
ItemDefinition_MaleDialogue_Multiplier = 256046569;
ItemDefinition_MaleDialogueHat = 'af';
ItemDefinition_MaleDialogueHat_Multiplier = 930664111;
ItemDefinition_MaleEmblem = 'aw';
ItemDefinition_MaleEmblem_Multiplier = 4704971;
ItemDefinition_MaleEquipOffset = 'aa';
ItemDefinition_MaleEquipOffset_Multiplier = 1958206685;
ItemDefinition_MaleEquipPrimaryModel = 'l';
ItemDefinition_MaleEquipPrimaryModel_Multiplier = 1843016025;
ItemDefinition_MaleEquipSecondaryModel = 'al';
ItemDefinition_MaleEquipSecondaryModel_Multiplier = 416411009;
ItemDefinition_ModelColours = 'o';
ItemDefinition_ModelID = 'w';
ItemDefinition_ModelID_Multiplier = 1668566381;
ItemDefinition_ModelOffset = 't';
ItemDefinition_ModelOffset_Multiplier = -2032293311;
ItemDefinition_ModelSizeX = 'ao';
ItemDefinition_ModelSizeX_Multiplier = -1806011351;
ItemDefinition_ModelSizeY = 'ag';
ItemDefinition_ModelSizeY_Multiplier = -630371437;
ItemDefinition_ModelSizeZ = 'aq';
ItemDefinition_ModelSizeZ_Multiplier = 297563363;
ItemDefinition_ModelTextures = 'z';
ItemDefinition_ModelZoom = 'r';
ItemDefinition_ModelZoom_Multiplier = 1149990379;
ItemDefinition_ModifiedModelColours = 'v';
ItemDefinition_ModifiedModelTextures = 'j';
ItemDefinition_Name = 'e';
ItemDefinition_NoteIndex = 'au';
ItemDefinition_NoteIndex_Multiplier = -1895896107;
ItemDefinition_NoteTemplateIndex = 'az';
ItemDefinition_NoteTemplateIndex_Multiplier = 640909611;
ItemDefinition_Rotation1 = 'c';
ItemDefinition_Rotation1_Multiplier = -2032950317;
ItemDefinition_Rotation2 = 'u';
ItemDefinition_Rotation2_Multiplier = -1786902161;
ItemDefinition_ShadowModifier = 'ax';
ItemDefinition_ShadowModifier_Multiplier = 1388772907;
ItemDefinition_Sine = 'f';
ItemDefinition_Sine_Multiplier = 1149871571;
ItemDefinition_StackableAmmounts = 'aj';
ItemDefinition_StackableIDs = 'as';
ItemDefinition_TeamIndex = 'ap';
ItemDefinition_TeamIndex_Multiplier = 205759575;
ItemDefinition_Value = 's';
ItemDefinition_Value_Multiplier = -1513265935;
ItemDefinition_InventoryActions = 'b';
ItemDefinition_isMembers = 'y';

{* ItemLayer - 8 Hooks *}
ItemLayer = 'cj';
ItemLayer_BottomRenderable = 'i';
ItemLayer_Height = 'a';
ItemLayer_Height_Multiplier = 531112753;
ItemLayer_ID = 'm';
ItemLayer_ID_Multiplier = 1477854209;
ItemLayer_MiddleRenderable = 'd';
ItemLayer_Plane = 'n';
ItemLayer_Plane_Multiplier = 139213215;
ItemLayer_TopRenderable = 'q';
ItemLayer_X = 'k';
ItemLayer_X_Multiplier = 520766133;
ItemLayer_Y = 'x';
ItemLayer_Y_Multiplier = 1409516503;

{* LinkedList - 2 Hooks *}
LinkedList = 'fx';
LinkedList_Head = 'n';
LinkedList_Tail = 'x';

{* Model - 15 Hooks *}
Model = 'cy';
Model_IndicesLength = 'w';
Model_IndicesLength_Multiplier = 1;
Model_IndicesX = 'e';
Model_IndicesY = 'o';
Model_IndicesZ = 'v';
Model_TexturedIndicesX = 'z';
Model_TexturedIndicesY = 'j';
Model_TexturedIndicesZ = 'r';
Model_TexturedVerticesLength = 'g';
Model_TexturedVerticesLength_Multiplier = 1;
Model_TexturedVerticesX = 's';
Model_TexturedVerticesY = 'y';
Model_TexturedVerticesZ = 'p';
Model_VerticesLength = 'd';
Model_VerticesLength_Multiplier = 1;
Model_VerticesX = 'q';
Model_VerticesY = 'm';
Model_VerticesZ = 'a';

{* ModelHeader - 0 Hooks *}
ModelHeader = 'cx';

{* MouseCapturer - 5 Hooks *}
MouseCapturer = 'v';
MouseCapturer_Length = 'k';
MouseCapturer_Length_Multiplier = -57552945;
MouseCapturer_Lock = 'x';
MouseCapturer_TrackingX = 'i';
MouseCapturer_TrackingY = 'd';
MouseCapturer_isCapturing = 'n';

{* MouseListener - 0 Hooks *}
MouseListener = 'dy';

{* Node - 3 Hooks *}
Node = 'ga';
Node_Next = 'em';
Node_Previous = 'eg';
Node_ID = 'dd';
Node_ID_Multiplier = 1;

{* NPC - 1 Hooks *}
NPC = 'ak';
NPC_Definition = 'n';

{* NPCDefinition - 27 Hooks *}
NPCDefinition = 'af';
NPCDefinition_Actions = 'g';
NPCDefinition_BoundaryObjectDimension = 'm';
NPCDefinition_BoundaryObjectDimension_Multiplier = 1419574127;
NPCDefinition_Brightness = 'al';
NPCDefinition_Brightness_Multiplier = -1546472357;
NPCDefinition_Level = 'y';
NPCDefinition_Level_Multiplier = 1898453373;
NPCDefinition_Contrast = 'aa';
NPCDefinition_Contrast_Multiplier = 2049495097;
NPCDefinition_DegreesToTurn = 'ak';
NPCDefinition_DegreesToTurn_Multiplier = 1307141649;
NPCDefinition_HeadIcon = 'ar';
NPCDefinition_HeadIcon_Multiplier = -1172162869;
NPCDefinition_ID = 'd';
NPCDefinition_ID_Multiplier = 543879159;
NPCDefinition_ModelColours = 'u';
NPCDefinition_ModelIDs = 'a';
NPCDefinition_ModelTextures = 't';
NPCDefinition_ModifiedModelColours = 'h';
NPCDefinition_ModifiedModelTextures = 'f';
NPCDefinition_Name = 'q';
NPCDefinition_SettingID = 'av';
NPCDefinition_SettingID_Multiplier = 1108149095;
NPCDefinition_SizeX = 'p';
NPCDefinition_SizeX_Multiplier = 544386867;
NPCDefinition_SizeY = 'b';
NPCDefinition_SizeY_Multiplier = -438025791;
NPCDefinition_StandAnimationID = 'e';
NPCDefinition_StandAnimationID_Multiplier = -796142733;
NPCDefinition_TransformIDs = 'ay';
NPCDefinition_TurnAroundAnimationID = 'j';
NPCDefinition_TurnAroundAnimationID_Multiplier = -41211299;
NPCDefinition_TurnLeftAnimationID = 'c';
NPCDefinition_TurnLeftAnimationID_Multiplier = -875804957;
NPCDefinition_TurnRightAnimationID = 'r';
NPCDefinition_TurnRightAnimationID_Multiplier = -1943352097;
NPCDefinition_VarbitID = 'aw';
NPCDefinition_VarbitID_Multiplier = -2122953779;
NPCDefinition_WalkAnimationID = 'z';
NPCDefinition_WalkAnimationID_Multiplier = 174167771;
NPCDefinition_isClickable = 'at';
NPCDefinition_isMinimapVisible = 's';
NPCDefinition_isVisible = 'l';

{* ObjectDefinition - 30 Hooks *}
ObjectDefinition = 'ae';
ObjectDefinition_Actions = 'ar';
ObjectDefinition_AnimationID = 'b';
ObjectDefinition_AnimationID_Multiplier = -1943202023;
ObjectDefinition_ClipType = 's';
ObjectDefinition_ClipType_Multiplier = 1500623131;
ObjectDefinition_Icon = 'ak';
ObjectDefinition_Icon_Multiplier = 946283017;
ObjectDefinition_LightAmbient = 'al';
ObjectDefinition_LightAmbient_Multiplier = 838260991;
ObjectDefinition_LightDiffuse = 'aa';
ObjectDefinition_LightDiffuse_Multiplier = -910435247;
ObjectDefinition_MapID = 'ay';
ObjectDefinition_MapID_Multiplier = -1144950553;
ObjectDefinition_ModelColours = 'z';
ObjectDefinition_ModelIDs = 'e';
ObjectDefinition_ModelSizeX = 'at';
ObjectDefinition_ModelSizeX_Multiplier = 706099793;
ObjectDefinition_ModelSizeY = 'af';
ObjectDefinition_ModelSizeY_Multiplier = 1648916947;
ObjectDefinition_ModelSizeZ = 'ae';
ObjectDefinition_ModelSizeZ_Multiplier = -2076859577;
ObjectDefinition_ModelTextures = 'r';
ObjectDefinition_ModelTypes = 'o';
ObjectDefinition_ModifiedModelColours = 'j';
ObjectDefinition_ModifiedModelTextures = 'c';
ObjectDefinition_Name = 'v';
ObjectDefinition_SettingID = 'an';
ObjectDefinition_SettingID_Multiplier = -1172524273;
ObjectDefinition_SizeX = 'u';
ObjectDefinition_SizeX_Multiplier = -502661923;
ObjectDefinition_SizeY = 'h';
ObjectDefinition_SizeY_Multiplier = -313386547;
ObjectDefinition_TransformIDs = 'ag';
ObjectDefinition_TranslateX = 'ai';
ObjectDefinition_TranslateX_Multiplier = 797825137;
ObjectDefinition_TranslateY = 'as';
ObjectDefinition_TranslateY_Multiplier = -117815977;
ObjectDefinition_TranslateZ = 'aj';
ObjectDefinition_TranslateZ_Multiplier = 1607609861;
ObjectDefinition_VarbitID = 'aq';
ObjectDefinition_VarbitID_Multiplier = 1031494069;
ObjectDefinition_isDelayShading = 'y';
ObjectDefinition_isRotated = 'aw';
ObjectDefinition_isShadowCast = 'av';
ObjectDefinition_isSolid = 'f';
ObjectDefinition_isUnwalkableSolid = 'az';

{* Player - 8 Hooks *}
Player = 'k';
Player_CombatLevel = 'd';
Player_CombatLevel_Multiplier = 711685779;
Player_Definition = 'x';
Player_Model = 'z';
Player_Name = 'n';
Player_PrayerIcon = 'i';
Player_PrayerIcon_Multiplier = 2093284217;
Player_SkullIcon = 'k';
Player_SkullIcon_Multiplier = -2063879489;
Player_TeamIndex = 't';
Player_TeamIndex_Multiplier = -1238435483;
Player_isVisible = 'h';

{* PlayerDefinition - 3 Hooks *}
PlayerDefinition = 'fy';
PlayerDefinition_Appearance = 'n';
PlayerDefinition_NPCID = 'i';
PlayerDefinition_NPCID_Multiplier = 1839007765;
PlayerDefinition_isFemale = 'k';

{* Projectile - 17 Hooks *}
Projectile = 'm';
Projectile_Cycle = 'a';
Projectile_Cycle_Multiplier = 1433255817;
Projectile_Height = 'd';
Projectile_Height_Multiplier = -1919671069;
Projectile_HeightOffset = 'f';
Projectile_RotationX = 'g';
Projectile_RotationX_Multiplier = 327685;
Projectile_RotationY = 's';
Projectile_RotationY_Multiplier = 1794015635;
Projectile_Scalar = 'h';
Projectile_Slope = 'w';
Projectile_Slope_Multiplier = -1399899159;
Projectile_SpeedX = 'c';
Projectile_SpeedY = 'u';
Projectile_SpeedZ = 't';
Projectile_StartX = 'k';
Projectile_StartX_Multiplier = -869661499;
Projectile_StartY = 'i';
Projectile_StartY_Multiplier = -1748635553;
Projectile_TargetDistance = 'e';
Projectile_TargetDistance_Multiplier = 1915994211;
Projectile_TargetID = 'o';
Projectile_TargetID_Multiplier = 1145517117;
Projectile_X = 'z';
Projectile_Y = 'j';
Projectile_isMoving = 'v';

{* Queue - 1 Hooks *}
Queue = 'fk';
Queue_Head = 'n';

{* Region - 2 Hooks *}
Region = 'cr';
Region_WorldObjects = 'w';
Region_SceneTiles = 'q';

{* Renderable - 1 Hooks *}
Renderable = 'bm';
Renderable_ModelHeight = 'cm';
Renderable_ModelHeight_Multiplier = 453842311;

{* RSLoader - 1 Hooks *}
RSLoader = 'eg';
RSLoader_isCrashed = 'oe';

{* SceneTile - 11 Hooks *}
SceneTile = 'co';
SceneTile_BoundaryObject = 'm';
SceneTile_ComplexTile = 'q';
SceneTile_FloorDecorationObject = 'w';
SceneTile_GenericTile = 'd';
SceneTile_WorldObjects = 'v';
SceneTile_ItemLayer = 'e';
SceneTile_Plane = 'i';
SceneTile_Plane_Multiplier = -1708148559;
SceneTile_SceneTile = 'y';
SceneTile_WallDecoration = 'a';
SceneTile_X = 'k';
SceneTile_X_Multiplier = -794538675;
SceneTile_Y = 'x';
SceneTile_Y_Multiplier = -1024706277;

{* Varp - 3 Hooks *}
Varp = 'ao';
Varp_ConfigID = 'k';
Varp_ConfigID_Multiplier = 631780987;
Varp_EndBit = 'd';
Varp_EndBit_Multiplier = -1053846147;
Varp_StartBit = 'i';
Varp_StartBit_Multiplier = 30340359;

{* WallDecoration - 11 Hooks *}
WallDecoration = 'cw';
WallDecoration_BackupRenderable = 'w';
WallDecoration_Flags = 'o';
WallDecoration_Flags_Multiplier = 692731661;
WallDecoration_Height = 'd';
WallDecoration_Height_Multiplier = -229362597;
WallDecoration_ID = 'e';
WallDecoration_ID_Multiplier = -721755575;
WallDecoration_Orientation = 'i';
WallDecoration_Orientation_Multiplier = -1362436049;
WallDecoration_Plane = 'n';
WallDecoration_Plane_Multiplier = -852422437;
WallDecoration_RelativeX = 'q';
WallDecoration_RelativeX_Multiplier = -1191312485;
WallDecoration_RelativeY = 'm';
WallDecoration_RelativeY_Multiplier = -617442441;
WallDecoration_Renderable = 'a';
WallDecoration_X = 'k';
WallDecoration_X_Multiplier = 99295879;
WallDecoration_Y = 'x';
WallDecoration_Y_Multiplier = 1051465281;

{* Widget - 60 Hooks *}
Widget = 'ep';
Widget_GetActions = 'bk';
Widget_Alpha = 'at';
Widget_Alpha_Multiplier = 1016581317;
Widget_BorderThickness = 'au';
Widget_BorderThickness_Multiplier = 2007998633;
Widget_BoundsIndex = 'dy';
Widget_BoundsIndex_Multiplier = 2101402537;
Widget_Children = 'da';
Widget_ConfigListeners = 'cj';
Widget_ConfigTriggers = 'cx';
Widget_ContainerActions = 'bw';
Widget_GetItems = 'dp';
Widget_Height = 's';
Widget_Height_Multiplier = 1132991793;
Widget_GetID = 'x';
Widget_GetID_Multiplier = 736769211;
Widget_GetIndex = 'j';
Widget_GetIndex_Multiplier = 1013933429;
Widget_ItemID = 'dx';
Widget_ItemID_Multiplier = 150866627;
Widget_LoopCycleStatus = 'dz';
Widget_LoopCycleStatus_Multiplier = -1805227743;
Widget_ModelID = 'an';
Widget_ModelID_Multiplier = 2045228943;
Widget_ModelType = 'aq';
Widget_ModelType_Multiplier = -1391965683;
Widget_ModelZoom = 'bb';
Widget_ModelZoom_Multiplier = -1568639167;
Widget_MouseClickedListeners = 'cb';
Widget_MouseDraggedListeners = 'cc';
Widget_MouseEnteredListeners = 'cl';
Widget_MouseExitedListeners = 'cw';
Widget_MouseHoverListeners = 'ch';
Widget_MouseMovedListeners = 'cm';
Widget_MousePressedListeners = 'cn';
Widget_MouseReleasedListeners = 'cq';
Widget_Name = 'bq';
Widget_Opcodes = 'di';
Widget_RenderListeners = 'cy';
Widget_Root = 'by';
Widget_RootID = 'y';
Widget_RootID_Multiplier = -411232353;
Widget_RotationX = 'ah';
Widget_RotationX_Multiplier = -2049046273;
Widget_RotationY = 'bx';
Widget_RotationY_Multiplier = 468330155;
Widget_RotationZ = 'bf';
Widget_RotationZ_Multiplier = -1155259211;
Widget_ScrollHeight = 'aa';
Widget_ScrollHeight_Multiplier = 434082875;
Widget_ScrollListeners = 'cz';
Widget_ScrollWidth = 'al';
Widget_ScrollWidth_Multiplier = 1990985579;
Widget_ScrollX = 'b';
Widget_ScrollX_Multiplier = -1476750751;
Widget_ScrollY = 'l';
Widget_ScrollY_Multiplier = 1228076087;
Widget_SelectedActionName = 'bm';
Widget_ShadowColour = 'az';
Widget_ShadowColour_Multiplier = -1473699591;
Widget_SkillListeners = 'ci';
Widget_SkillTriggers = 'cv';
Widget_SpellName = 'dl';
Widget_SpriteID = 'as';
Widget_SpriteID_Multiplier = 846646731;
Widget_StackSize = 'dr';
Widget_StackSize_Multiplier = 61173461;
Widget_GetStackSizes = 'dh';
Widget_TableListeners = 'co';
Widget_TableTriggers = 'ce';
Widget_GetText = 'bh';
Widget_TextColour = 'ar';
Widget_TextColour_Multiplier = -1227121893;
Widget_TextDrawingAreaIndex = 'bd';
Widget_TextDrawingAreaIndex_Multiplier = -995591111;
Widget_TextureID = 'ae';
Widget_TextureID_Multiplier = -1947193201;
Widget_Tooltip = 'do';
Widget_Width = 'g';
Widget_Width_Multiplier = -626335765;
Widget_GetRelativeX = 'h';
Widget_GetRelativeX_Multiplier = 697222877;
Widget_GetRelativeY = 'x';
Widget_GetRelativeY_Multiplier = -2116268553;
Widget_isFlippedHorizontally = 'ag';
Widget_isFlippedVertically = 'ao';
Widget_isHidden = 'p';
Widget_isTypeFaceShadowed = 'aj';

{* WidgetItemNode - 2 Hooks *}
WidgetItemNode = 'j';
WidgetItemNode_IDs = 'x';
WidgetItemNode_StackSizes = 'k';

{* WidgetNode - 1 Hooks *}
WidgetNode = 'i';
WidgetNode_ID = 'n';
WidgetNode_ID_Multiplier = 1103504125;

{* World - 7 Hooks *}
World = 's';
World_Activity = 'd';
World_Domain = 'i';
World_Index = 'm';
World_Index_Multiplier = -781463647;
World_Location = 'q';
World_Location_Multiplier = 122560199;
World_Mask = 'x';
World_Mask_Multiplier = -485706191;
World_Population = 'k';
World_Population_Multiplier = -1825444877;
World_WorldID = 'n';
World_WorldID_Multiplier = -1049303969;

Useful hooks out of these that you don't currently have:

Client#DestinationX/Y
Use like so:
MinimapFlagX = DestinationX + BaseX;
MinimapFlagY = DestinationY + BaseY;
This can be used to verify map walking. (sometimes the flag doesn't appear though for some reason)

Character#PathLength
Use like so:
Character#isWalking = Character#PathLength > 0;

There are some other useful ones like the definition and model caches but i don't know how much use they will be as they are only size 64 and 50 respectively so may not contain all the definitions/models that you need

Kyle

2014-11-16 08:36:22

From: Cheddy
…


Thanks! :p

So guys, just a quick update on the rewrite of the include here. I just finished the last "core" part of it, ground items yesterday. So now all that needs to be done is to get the auto updating working with github, go through and fix my lazy standards :p and also get it to compile in lape, so reflection can be used with @Aerolib!

I really could use people testing this version as it's been hard for me to test it as much as I should, so @Fitta @Harrier @Rlp @ineedbot; (Please tag anyone I might have missed you scripts w/ reflection) could you download this and use it instead with your scripts?

I won't transition over to this include until all of the scripts currently using reflection will 100% compile and run with this as I don't want to break any scripts! If you could talk to me about bugs/suggestions through pm or skype 'elfyyy-' as I don't want to talk about it much on this thread as it doesn't relate to the current include on googlecode!

Thanks a lot guys and hopefully it will be completely finished soon!

Fitta

2014-11-16 08:58:32

From: elfyyy
Thanks! :p

So guys, just a quick update on the rewrite of the include here. I just finished the last "core" part of it, ground items yesterday. So now all that needs to be done is to get the auto updating working with github, go through and fix my lazy standards :p and also get it to compile in lape, so reflection can be used with @Aerolib!

I really could use people testing this version as it's been hard for me to test it as much as I should, so @Fitta @Harrier @Rlp @ineedabot (Please tag anyone I might have missed you scripts w/ reflection) could you download this and use it instead with your scripts?

I won't transition over to this include until all of the scripts currently using reflection will 100% compile and run with this as I don't want to break any scripts! If you could talk to me about bugs/suggestions through pm or skype 'elfyyy-' as I don't want to talk about it much on this thread as it doesn't relate to the current include on googlecode!

Thanks a lot guys and hopefully it will be completely finished soon!


I had a working lape reflection include. Only big problem was that you had to change the SMART target as Aerolib handles that a bit different. Other than that, if you're just looking to convert it, I'm remembering that it was pretty straight forward :)

I'll test all this in two days time.

Cheddy

2014-11-16 09:05:54

Would it help you guys if I dumped the definitions to json so that you can load them in Simba?

Kyle

2014-11-16 09:10:32

From: Fitta
I had a working lape reflection include. Only big problem was that you had to change the SMART target as Aerolib handles that a bit different. Other than that, if you're just looking to convert it, I'm remembering that it was pretty straight forward :)

I'll test all this in two days time.


Yup, I have it working with SRL-OSR in lape, haven't messed with it in AL, still deciding on the best way to declare that we are using SRL-OSR/AeroLib/Lape.

From: Cheddy
Would it help you guys if I dumped the definitions to json so that you can load them in Simba?


Nah, we just use our own updater, thanks though!

Cheddy

2014-11-16 09:39:58

No i meant Item and object definitions like this (the item def for Rune axe):

{"ID":1359,"stackable":false,"members":false,"edible":false,"noted":false,"cosmetic":false,"noteID":-1,"value":12800,"actions":[null,"Wield",null,null,"Drop"],"groundActions":[null,null,"Take",null,null],"noteTemplateID":-1,"cosmeticID":-1,"cosmeticTemplateID":-1,"teamIndex":0,"name":"Rune axe","modelID":2544,"modelZoom":1060,"modelRotation1":520,"modelRotation2":1196,"modelOffset1":65536,"modelOffset2":0,"maleEquipPrimaryModel":510,"maleEquipOffset":0,"maleEquipSecondaryModel":0,"femaleEquipPrimaryModel":510,"femaleEquipOffset":6,"femaleEquipSecondaryModel":0,"modelColourCount":1,"originalColours":[-29403],"modifiedColours":[61],"maleEmblem":0,"diagonalRotation":0,"femaleDialogueHat":0,"maleDialogueHat":0,"femaleEmblem":0,"maleDialogue":0,"femaleDialogue":0,"modelSizeX":0,"modelSizeY":0,"modelSizeZ":0,"lightModifier":0,"shadowModifier":0}

This would allow you to get Object and Item names and actions without having to mess around with the cache objects

I've done them anyways and put them inside a zip archive with the four types of definition in (npc, varp, object, item)

Link to ZIP

Enjoy =)

Kyle

2014-11-16 10:00:26

From: Cheddy
…


Ahhh, miss understood you, downloading them now! Should be quite useful, thanks!!

EDIT: Wow! Those are awesome man!!! Now I know what my next project is! Hopefully we can iterate them quick enough in PS :P

Cheddy

2014-11-16 10:12:48

From: elfyyy
…

They are pretty big files haha, just hoping that the ids don't change with revisions for the objects and npcs. The varps and item ids are static but i know that object and npc defs change throughout revisions so i'm hoping that there are duplicate fields for them in the cache rather than having to update the cache every revision ;)

Kyle

2014-11-16 10:52:14

From: Cheddy
They are pretty big files haha, just hoping that the ids don't change with revisions for the objects and npcs. The varps and item ids are static but i know that object and npc defs change throughout revisions so i'm hoping that there are duplicate fields for them in the cache rather than having to update the cache every revision ;)


Could you add me on skype? 'elfyyy-'

Kyle

2014-11-19 21:21:18

Just pushed another version to my github with ground items finished in the new memory management. That was the final method to be converted and the include is now "finished." I still need to make some changes here and there and add some documentation and possibly add a cache'd database of different data for npc's/objects/items thanks to help from @Cheddy; So again, if you guys could start using the version on my github some and test it and message/skype me how it is working, that would be massively helpful!!
https://github.com/Elfyyy/reflection

ineedbot

2014-11-19 22:49:03

From: elfyyy
Thanks! :p

So guys, just a quick update on the rewrite of the include here. I just finished the last "core" part of it, ground items yesterday. So now all that needs to be done is to get the auto updating working with github, go through and fix my lazy standards :p and also get it to compile in lape, so reflection can be used with @Aerolib!

I really could use people testing this version as it's been hard for me to test it as much as I should, so @Fitta @Harrier @Rlp @ineedabot (Please tag anyone I might have missed you scripts w/ reflection) could you download this and use it instead with your scripts?

I won't transition over to this include until all of the scripts currently using reflection will 100% compile and run with this as I don't want to break any scripts! If you could talk to me about bugs/suggestions through pm or skype 'elfyyy-' as I don't want to talk about it much on this thread as it doesn't relate to the current include on googlecode!

Thanks a lot guys and hopefully it will be completely finished soon!


Sorry I was busy with other things, lovely news! I'll deff look into this and rewrite my scripts! Btw your tag of my name is wrong :P

Kyle

2014-11-19 22:54:36

From: ineedbot
Sorry I was busy with other things, lovely news! I'll deff look into this and rewrite my scripts! Btw your tag of my name is wrong :P


Haha well played! My need to have good grammar messed that up for sure!!! Definitely let me know your feedback and any bugs that you find.

Cheddy

2014-11-27 14:34:51

R66 Hooks If You Want =)


{ 443 Hooks Found By Cheddy's PiUpdater }

const
ReflectionRevision = '66';


{* AccessFile - 3 Hooks *}
AccessFile = 'gg';
AccessFile_File = 'g';
AccessFile_Length = 'i';
AccessFile_Length_Multiplier = -4683923131454255485;
AccessFile_Position = 'k';
AccessFile_Position_Multiplier = 1;

{* AnimableNode - 7 Hooks *}
AnimableNode = 'b';
AnimableNode_Animation = 'u';
AnimableNode_ID = 'g';
AnimableNode_ID_Multiplier = -1276298399;
AnimableNode_Orientation = 'k';
AnimableNode_Orientation_Multiplier = 934696521;
AnimableNode_Plane = 'e';
AnimableNode_Plane_Multiplier = -294271899;
AnimableNode_Type = 'i';
AnimableNode_Type_Multiplier = 599610931;
AnimableNode_X = 'w';
AnimableNode_X_Multiplier = 673721797;
AnimableNode_Y = 'm';
AnimableNode_Y_Multiplier = 1095198517;

{* AnimationSequence - 10 Hooks *}
AnimationSequence = 'ax';
AnimationSequence_FlowControl = 'b';
AnimationSequence_Frame1IDs = 'm';
AnimationSequence_Frame2IDs = 'j';
AnimationSequence_FrameStep = 'h';
AnimationSequence_FrameStep_Multiplier = 1101127937;
AnimationSequence_MaxLoops = 't';
AnimationSequence_MaxLoops_Multiplier = -186408785;
AnimationSequence_MinLoops = 'q';
AnimationSequence_MinLoops_Multiplier = -1103415799;
AnimationSequence_PrecedenceAnimation = 'y';
AnimationSequence_PrecedenceAnimation_Multiplier = 606793231;
AnimationSequence_Priority = 'd';
AnimationSequence_Priority_Multiplier = 422386895;
AnimationSequence_ReplyMode = 'z';
AnimationSequence_ReplyMode_Multiplier = 437062993;
AnimationSequence_isStretched = 'r';

{* BoundaryObject - 9 Hooks *}
BoundaryObject = 'cm';
BoundaryObject_AlternativeOrientation = 'w';
BoundaryObject_AlternativeOrientation_Multiplier = 1769639587;
BoundaryObject_BackupRenderable = 'u';
BoundaryObject_Flags = 'o';
BoundaryObject_Flags_Multiplier = -218587851;
BoundaryObject_Hash = 'j';
BoundaryObject_Hash_Multiplier = -1400501077;
BoundaryObject_Orientation = 'e';
BoundaryObject_Orientation_Multiplier = -1566199663;
BoundaryObject_Plane = 'g';
BoundaryObject_Plane_Multiplier = 674823675;
BoundaryObject_Renderable = 'm';
BoundaryObject_Get_X = 'i';
BoundaryObject_Get_X_Multiplier = -1983413335;
BoundaryObject_Get_Y = 'k';
BoundaryObject_Get_Y_Multiplier = 2085483891;

{* Buffer - 2 Hooks *}
Buffer = 'dk';
Buffer_Offset = 'i';
Buffer_Offset_Multiplier = 130418737;
Buffer_Payload = 'g';

{* BufferedConnection - 5 Hooks *}
BufferedConnection = 'dw';
BufferedConnection_InputStream = 'g';
BufferedConnection_OutputStream = 'i';
BufferedConnection_Payload = 'u';
BufferedConnection_Socket = 'k';
BufferedConnection_isClosed = 'e';

{* Cache - 5 Hooks *}
Cache = 'fc';
Cache_CacheableNode = 'g';
Cache_NodeHashTable = 'e';
Cache_Queue = 'w';
Cache_Remaining = 'k';
Cache_Remaining_Multiplier = 1;
Cache_Size = 'i';
Cache_Size_Multiplier = 1;

{* CacheableNode - 2 Hooks *}
CacheableNode = 'gy';
CacheableNode_Next = 'co';
CacheableNode_Prev = 'cn';

{* Canvas - 1 Hooks *}
Canvas = 'dg';
Canvas_Component = 'g';

{* Actor - 17 Hooks *}
Actor = 'aa';
Actor_Animation = 'by';
Actor_Animation_Multiplier = 685373615;
Actor_CombatCycle = 'aq';
Actor_CombatCycle_Multiplier = 1523759155;
Actor_Health = 'ak';
Actor_Health_Multiplier = -74870063;
Actor_HitCycles = 'ao';
Actor_HitDamages = 'aw';
Actor_HitTypes = 'ag';
Actor_Interacting = 'at';
Actor_Interacting_Multiplier = -171915889;
Actor_MaxHealth = 'al';
Actor_MaxHealth_Multiplier = 244222915;
Actor_Orientation = 'bt';
Actor_Orientation_Multiplier = -939519057;
Actor_PathLength = 'bj';
Actor_PathLength_Multiplier = -1364815893;
Actor_PathTraversed = 'bl';
Actor_PathX = 'bp';
Actor_PathY = 'bs';
Actor_ActiveText = 'am';
Actor_LocalX = 'v';
Actor_LocalX_Multiplier = -207467453;
Actor_LocalY = 'f';
Actor_LocalY_Multiplier = 708620417;
Actor_isInSequence = 'p';

{* ChatboxMessage - 6 Hooks *}
ChatboxMessage = 'aj';
ChatboxMessage_ClanName = 'w';
ChatboxMessage_ID = 'g';
ChatboxMessage_ID_Multiplier = -1466048779;
ChatboxMessage_PlayerName = 'e';
ChatboxMessage_Text = 'm';
ChatboxMessage_TimeSent = 'i';
ChatboxMessage_TimeSent_Multiplier = 467683163;
ChatboxMessage_Type = 'k';
ChatboxMessage_Type_Multiplier = -119015993;

{* ClassData - 3 Hooks *}
ClassData = 'gb';
ClassData_Data = 'm';
ClassData_Fields = 'w';
ClassData_Methods = 'j';

{* Client - 84 Hooks *}
Client = 'client';
Client_AnimationSequenceCache = 'ax.e';
Client_BaseX = 'db.ci';
Client_BaseX_Multiplier = -1445717775;
Client_BaseY = 'k.cq';
Client_BaseY_Multiplier = 1085486563;
Client_CameraPitch = 'b.fi';
Client_CameraPitch_Multiplier = -550475961;
Client_CameraPitchMinimum = 'client.fn';
Client_CameraPitchMinimum_Multiplier = 1511983717;
Client_CameraX = 'aj.fp';
Client_CameraX_Multiplier = 1599138771;
Client_CameraY = 'ai.fh';
Client_CameraY_Multiplier = 982715361;
Client_CameraYaw = 'dn.fg';
Client_CameraYaw_Multiplier = 490187469;
Client_CameraZ = 'g.fw';
Client_CameraZ_Multiplier = 1575193183;
Client_Canvas = 'bm.pn';
Client_CollisionMaps = 'client.w';
Client_CosineCurve = 'cl.aj';
Client_CurrentWorldID = 'client.e';
Client_CurrentWorldID_Multiplier = 1904708431;
Client_DestinationX = 'client.ml';
Client_DestinationX_Multiplier = -1920923311;
Client_DestinationY = 'client.mz';
Client_DestinationY_Multiplier = 1194667191;
Client_Run_Energy = 'client.jg';
Client_Run_Energy_Multiplier = 1684845075;
Client_Experiences = 'client.ht';
Client_FirstMenuOption = 'ey.ix';
Client_LoopCycle = 'client.z';
Client_LoopCycle_Multiplier = -662393551;
Client_Login_State = 'client.t';
Client_Login_State_Multiplier = -1404183043;
Client_GroundItemList = 'client.hb';
Client_IdleTime = 'dp.i';
Client_IdleTime_Multiplier = 1;
Client_ItemDefinintionCache = 'ak.e';
Client_ItemModelCache = 'ak.w';
Client_LastClickTime = 'dp.r';
Client_LastClickTime_Multiplier = -1106688106871487599;
Client_LastClickX = 'dp.h';
Client_LastClickX_Multiplier = -874865137;
Client_LastClickY = 'dp.b';
Client_LastClickY_Multiplier = 161413941;
Client_LastMouseClickButton = 'dp.e';
Client_LastMouseClickButton_Multiplier = 1971020511;
Client_LastMouseClickModifier = 'dp.o';
Client_LastMouseClickModifier_Multiplier = -599658831;
Client_Levels = 'client.hu';
Client_NPCs = 'client.bp';
Client_Player = 'ci.hd';
Client_PlayerIndex = 'client.hz';
Client_PlayerIndex_Multiplier = 511487309;
Client_Players = 'client.ga';
Client_LoginState = 'ac.aa';
Client_LoginState_Multiplier = -796844675;
Client_CompassAngle = 'client.fq';
Client_CompassAngle_Multiplier = 114425955;
Client_Map_Offset = 'client.dw';
Client_Map_Offset_Multiplier = -1677290205;
Client_Map_Scale = 'client.di';
Client_Map_Scale_Multiplier = -798942539;
Client_MenuActions = 'client.iq';
Client_MenuCount = 'client.ii';
Client_MenuCount_Multiplier = 1368001173;
Client_MenuHeight = 'a.iy';
Client_MenuHeight_Multiplier = 882969573;
Client_MenuOptions = 'client.in';
Client_MenuWidth = 'fd.ir';
Client_MenuWidth_Multiplier = 556997877;
Client_MenuX = 'n.hm';
Client_MenuX_Multiplier = 2076527119;
Client_MenuY = 'bv.hf';
Client_MenuY_Multiplier = 1631503311;
Client_Mouse = 'dp.g';
Client_MouseX = 'dp.w';
Client_MouseX_Multiplier = -1859339009;
Client_MouseY = 'dp.m';
Client_MouseY_Multiplier = 1187421839;
Client_NPCDefinitionCache = 'ae.k';
Client_NPCIndices = 'client.bl';
Client_NPCModelCache = 'ae.e';
Client_ObjectAnimatedModelCache = 'ai.u';
Client_ObjectDefinitionCache = 'ai.e';
Client_ObjectModelCache = 'ai.w';
Client_ObjectRenderableCache = 'ai.m';
Client_Password = 'ac.ax';
Client_Plane = 'g.hs';
Client_Plane_Multiplier = 201215043;
Client_PlayerModelCache = 'fp.r';
Client_ProjectileList = 'client.he';
Client_Real_Levels = 'client.hw';
Client_Region = 'et.dh';
Client_RGBImageCache = 'ak.m';
Client_SelectedItemName = 'client.it';
Client_SelectedSpellName = 'client.js';
Client_Settings = 'ea.i';
Client_SineCurve = 'cl.as';
Client_GroundHeights = 'm.g';
Client_GroundSettings = 'm.i';
Client_Username = 'ac.ay';
Client_ValidWidgets = 'eq.i';
Client_VarpbitCache = 'ag.i';
Client_VarpbitSettings = 'ea.g';
Client_Weight = 'client.ju';
Client_Weight_Multiplier = 2001849603;
Client_WidgetBoundsHeight = 'client.lk';
Client_WidgetBoundsWidth = 'client.lg';
Client_WidgetBoundsX = 'client.ll';
Client_WidgetBoundsY = 'client.li';
Client_WidgetItemTable = 'x.g';
Client_WidgetNodeTable = 'client.jf';
Client_Widgets = 'eq.g';
Client_WidgetSettings = 'ea.k';
Client_Worlds = 'ac.bu';
Client_isMenuOpen = 'client.hx';
Client_isWorldSelectorOpen = 'ac.at';

{* CollisionMap - 5 Hooks *}
CollisionMap = 'go';
CollisionMap_Flags = 'ap';
CollisionMap_Height = 'ah';
CollisionMap_Height_Multiplier = 1197330679;
CollisionMap_OffsetX = 'c';
CollisionMap_OffsetX_Multiplier = -1631858009;
CollisionMap_OffsetY = 'ar';
CollisionMap_OffsetY_Multiplier = 1974764361;
CollisionMap_Width = 'ac';
CollisionMap_Width_Multiplier = 230167527;

{* ComplexTile - 1 Hooks *}
ComplexTile = 'cy';
ComplexTile_isFlat = 'b';

{* FloorDecorationObject - 6 Hooks *}
FloorDecorationObject = 'cd';
FloorDecorationObject_Flags = 'm';
FloorDecorationObject_Flags_Multiplier = 102908977;
FloorDecorationObject_Hash = 'w';
FloorDecorationObject_Hash_Multiplier = 248450949;
FloorDecorationObject_Plane = 'g';
FloorDecorationObject_Plane_Multiplier = -1619042723;
FloorDecorationObject_Renderable = 'e';
FloorDecorationObject_Get_X = 'i';
FloorDecorationObject_Get_X_Multiplier = -1066839661;
FloorDecorationObject_Get_Y = 'k';
FloorDecorationObject_Get_Y_Multiplier = -74709691;

{* GenericTile - 1 Hooks *}
GenericTile = 'co';
GenericTile_isFlat = 'm';

{* NodeHashTable - 5 Hooks *}
NodeHashTable = 'fz';
NodeHashTable_Current = 'e';
NodeHashTable_CurrentIndex = 'w';
NodeHashTable_CurrentIndex_Multiplier = 1;
NodeHashTable_Head = 'k';
NodeHashTable_GetNodes = 'i';
NodeHashTable_GetSize = 'g';
NodeHashTable_GetSize_Multiplier = 1;

{* WorldObject - 12 Hooks *}
WorldObject = 'cp';
WorldObject_Flags = 'x';
WorldObject_Flags_Multiplier = 468673977;
WorldObject_Height = 'i';
WorldObject_Height_Multiplier = -307569987;
WorldObject_Hash = 'l';
WorldObject_Hash_Multiplier = 2109181971;
WorldObject_Orientation = 'm';
WorldObject_Orientation_Multiplier = 784356871;
WorldObject_Plane = 'g';
WorldObject_Plane_Multiplier = -1278265567;
WorldObject_RelativeX = 'u';
WorldObject_RelativeX_Multiplier = -567993115;
WorldObject_RelativeY = 'o';
WorldObject_RelativeY_Multiplier = -395767395;
WorldObject_Renderable = 'w';
WorldObject_SizeX = 'j';
WorldObject_SizeX_Multiplier = -1033035509;
WorldObject_SizeY = 'h';
WorldObject_SizeY_Multiplier = -481243539;
WorldObject_Get_X = 'k';
WorldObject_Get_X_Multiplier = 1535028481;
WorldObject_Get_Y = 'e';
WorldObject_Get_Y_Multiplier = 1348296831;

{* Item - 2 Hooks *}
Item = 's';
Item_ID = 'g';
Item_ID_Multiplier = -1414849737;
Item_StackSize = 'i';
Item_StackSize_Multiplier = 1179680475;

{* ItemDefinition - 38 Hooks *}
ItemDefinition = 'ak';
ItemDefinition_DiagonalRotation = 'd';
ItemDefinition_DiagonalRotation_Multiplier = 299345117;
ItemDefinition_FemaleDialogue = 'ai';
ItemDefinition_FemaleDialogue_Multiplier = -1270645895;
ItemDefinition_FemaleDialogueHat = 'ay';
ItemDefinition_FemaleDialogueHat_Multiplier = -2025902259;
ItemDefinition_FemaleEmblem = 'aa';
ItemDefinition_FemaleEmblem_Multiplier = 1711812027;
ItemDefinition_FemaleEquipOffset = 'aj';
ItemDefinition_FemaleEquipOffset_Multiplier = 1476795629;
ItemDefinition_FemaleEquipPrimaryModel = 'ah';
ItemDefinition_FemaleEquipPrimaryModel_Multiplier = 990652695;
ItemDefinition_FemaleEquipSecondaryModel = 'ap';
ItemDefinition_FemaleEquipSecondaryModel_Multiplier = 1619765655;
ItemDefinition_GroundActions = 'p';
ItemDefinition_LightModifier = 'ak';
ItemDefinition_LightModifier_Multiplier = 961120259;
ItemDefinition_MaleDialogue = 'am';
ItemDefinition_MaleDialogue_Multiplier = 317558339;
ItemDefinition_MaleDialogueHat = 'ae';
ItemDefinition_MaleDialogueHat_Multiplier = 1463884903;
ItemDefinition_MaleEmblem = 'as';
ItemDefinition_MaleEmblem_Multiplier = 2017831127;
ItemDefinition_MaleEquipOffset = 'ac';
ItemDefinition_MaleEquipOffset_Multiplier = 376632603;
ItemDefinition_MaleEquipPrimaryModel = 'c';
ItemDefinition_MaleEquipPrimaryModel_Multiplier = -1491341981;
ItemDefinition_MaleEquipSecondaryModel = 'ar';
ItemDefinition_MaleEquipSecondaryModel_Multiplier = -167555537;
ItemDefinition_ModelColours = 'b';
ItemDefinition_ModelID = 'o';
ItemDefinition_ModelID_Multiplier = -2023136935;
ItemDefinition_ModelOffset = 'z';
ItemDefinition_ModelOffset_Multiplier = 223922925;
ItemDefinition_ModelSizeX = 'ag';
ItemDefinition_ModelSizeX_Multiplier = -1978395381;
ItemDefinition_ModelSizeY = 'ao';
ItemDefinition_ModelSizeY_Multiplier = -787743377;
ItemDefinition_ModelSizeZ = 'aq';
ItemDefinition_ModelSizeZ_Multiplier = 620653097;
ItemDefinition_ModelTextures = 'l';
ItemDefinition_ModelZoom = 'q';
ItemDefinition_ModelZoom_Multiplier = -675484572;
ItemDefinition_ModifiedModelColours = 'r';
ItemDefinition_ModifiedModelTextures = 'x';
ItemDefinition_Name = 'h';
ItemDefinition_NoteIndex = 'az';
ItemDefinition_NoteIndex_Multiplier = 2136300955;
ItemDefinition_NoteTemplateIndex = 'aw';
ItemDefinition_NoteTemplateIndex_Multiplier = 1469220379;
ItemDefinition_Rotation1 = 't';
ItemDefinition_Rotation1_Multiplier = -2067888133;
ItemDefinition_Rotation2 = 'y';
ItemDefinition_Rotation2_Multiplier = 1607108579;
ItemDefinition_ShadowModifier = 'al';
ItemDefinition_ShadowModifier_Multiplier = 1271497005;
ItemDefinition_Sine = 'n';
ItemDefinition_Sine_Multiplier = -1520664733;
ItemDefinition_StackableAmmounts = 'au';
ItemDefinition_StackableIDs = 'ax';
ItemDefinition_TeamIndex = 'at';
ItemDefinition_TeamIndex_Multiplier = -984574205;
ItemDefinition_Value = 'f';
ItemDefinition_Value_Multiplier = -184832025;
ItemDefinition_InventoryActions = 's';
ItemDefinition_isMembers = 'a';

{* ItemLayer - 8 Hooks *}
ItemLayer = 'ck';
ItemLayer_BottomRenderable = 'e';
ItemLayer_Height = 'j';
ItemLayer_Height_Multiplier = -1439212179;
ItemLayer_ID = 'u';
ItemLayer_ID_Multiplier = -129237989;
ItemLayer_MiddleRenderable = 'w';
ItemLayer_Plane = 'g';
ItemLayer_Plane_Multiplier = 1995501707;
ItemLayer_TopRenderable = 'm';
ItemLayer_X = 'i';
ItemLayer_X_Multiplier = -1710941019;
ItemLayer_Y = 'k';
ItemLayer_Y_Multiplier = 1923688291;

{* LinkedList - 2 Hooks *}
LinkedList = 'fx';
LinkedList_Head = 'g';
LinkedList_Tail = 'i';

{* Model - 15 Hooks *}
Model = 'ce';
Model_IndicesLength = 'o';
Model_IndicesLength_Multiplier = 1;
Model_IndicesX = 'h';
Model_IndicesY = 'b';
Model_IndicesZ = 'r';
Model_TexturedIndicesX = 'l';
Model_TexturedIndicesY = 'x';
Model_TexturedIndicesZ = 'q';
Model_TexturedVerticesLength = 'v';
Model_TexturedVerticesLength_Multiplier = 1;
Model_TexturedVerticesX = 'f';
Model_TexturedVerticesY = 'a';
Model_TexturedVerticesZ = 'p';
Model_VerticesLength = 'w';
Model_VerticesLength_Multiplier = 1;
Model_VerticesX = 'm';
Model_VerticesY = 'u';
Model_VerticesZ = 'j';

{* ModelHeader - 0 Hooks *}
ModelHeader = 'cr';

{* MouseCapturer - 5 Hooks *}
MouseCapturer = 'r';
MouseCapturer_Length = 'k';
MouseCapturer_Length_Multiplier = 456250053;
MouseCapturer_Lock = 'i';
MouseCapturer_TrackingX = 'e';
MouseCapturer_TrackingY = 'w';
MouseCapturer_isCapturing = 'g';

{* MouseListener - 0 Hooks *}
MouseListener = 'dp';

{* Node - 3 Hooks *}
Node = 'gf';
Node_Next = 'el';
Node_Previous = 'ee';
Node_ID = 'dw';
Node_ID_Multiplier = 1;

{* NPC - 1 Hooks *}
NPC = 'ap';
NPC_Definition = 'g';

{* NPCDefinition - 27 Hooks *}
NPCDefinition = 'ae';
NPCDefinition_Actions = 'v';
NPCDefinition_BoundaryObjectDimension = 'u';
NPCDefinition_BoundaryObjectDimension_Multiplier = -2080167725;
NPCDefinition_Brightness = 'ar';
NPCDefinition_Brightness_Multiplier = 1945044265;
NPCDefinition_Level = 'a';
NPCDefinition_Level_Multiplier = -728418809;
NPCDefinition_Contrast = 'ac';
NPCDefinition_Contrast_Multiplier = 2132438769;
NPCDefinition_DegreesToTurn = 'ap';
NPCDefinition_DegreesToTurn_Multiplier = -1346604173;
NPCDefinition_HeadIcon = 'ah';
NPCDefinition_HeadIcon_Multiplier = -1549694773;
NPCDefinition_ID = 'w';
NPCDefinition_ID_Multiplier = 1133952169;
NPCDefinition_ModelColours = 'y';
NPCDefinition_ModelIDs = 'j';
NPCDefinition_ModelTextures = 'z';
NPCDefinition_ModifiedModelColours = 'd';
NPCDefinition_ModifiedModelTextures = 'n';
NPCDefinition_Name = 'm';
NPCDefinition_SettingID = 'aa';
NPCDefinition_SettingID_Multiplier = 1554737403;
NPCDefinition_SizeX = 'p';
NPCDefinition_SizeX_Multiplier = 599795739;
NPCDefinition_SizeY = 's';
NPCDefinition_SizeY_Multiplier = 1339463961;
NPCDefinition_StandAnimationID = 'h';
NPCDefinition_StandAnimationID_Multiplier = 262858397;
NPCDefinition_TransformIDs = 'aj';
NPCDefinition_TurnAroundAnimationID = 'x';
NPCDefinition_TurnAroundAnimationID_Multiplier = -514627795;
NPCDefinition_TurnLeftAnimationID = 't';
NPCDefinition_TurnLeftAnimationID_Multiplier = -773687227;
NPCDefinition_TurnRightAnimationID = 'q';
NPCDefinition_TurnRightAnimationID_Multiplier = 987119265;
NPCDefinition_VarbitID = 'as';
NPCDefinition_VarbitID_Multiplier = -770404585;
NPCDefinition_WalkAnimationID = 'l';
NPCDefinition_WalkAnimationID_Multiplier = -579147323;
NPCDefinition_isClickable = 'am';
NPCDefinition_isMinimapVisible = 'f';
NPCDefinition_isVisible = 'c';

{* ObjectDefinition - 30 Hooks *}
ObjectDefinition = 'ai';
ObjectDefinition_Actions = 'ah';
ObjectDefinition_AnimationID = 's';
ObjectDefinition_AnimationID_Multiplier = -1137151715;
ObjectDefinition_ClipType = 'f';
ObjectDefinition_ClipType_Multiplier = -2132976787;
ObjectDefinition_Icon = 'ap';
ObjectDefinition_Icon_Multiplier = -1570843161;
ObjectDefinition_LightAmbient = 'ar';
ObjectDefinition_LightAmbient_Multiplier = 1954677831;
ObjectDefinition_LightDiffuse = 'ac';
ObjectDefinition_LightDiffuse_Multiplier = -1485297181;
ObjectDefinition_MapID = 'aj';
ObjectDefinition_MapID_Multiplier = 1203813793;
ObjectDefinition_ModelColours = 'l';
ObjectDefinition_ModelIDs = 'h';
ObjectDefinition_ModelSizeX = 'am';
ObjectDefinition_ModelSizeX_Multiplier = -222614049;
ObjectDefinition_ModelSizeY = 'ae';
ObjectDefinition_ModelSizeY_Multiplier = 1172310083;
ObjectDefinition_ModelSizeZ = 'ai';
ObjectDefinition_ModelSizeZ_Multiplier = 1974169743;
ObjectDefinition_ModelTextures = 'q';
ObjectDefinition_ModelTypes = 'b';
ObjectDefinition_ModifiedModelColours = 'x';
ObjectDefinition_ModifiedModelTextures = 't';
ObjectDefinition_Name = 'r';
ObjectDefinition_SettingID = 'ak';
ObjectDefinition_SettingID_Multiplier = -124292647;
ObjectDefinition_SizeX = 'y';
ObjectDefinition_SizeX_Multiplier = 113894195;
ObjectDefinition_SizeY = 'd';
ObjectDefinition_SizeY_Multiplier = 1782364735;
ObjectDefinition_TransformIDs = 'ao';
ObjectDefinition_TranslateX = 'ay';
ObjectDefinition_TranslateX_Multiplier = -247410523;
ObjectDefinition_TranslateY = 'ax';
ObjectDefinition_TranslateY_Multiplier = -1831882675;
ObjectDefinition_TranslateZ = 'au';
ObjectDefinition_TranslateZ_Multiplier = -752036909;
ObjectDefinition_VarbitID = 'aq';
ObjectDefinition_VarbitID_Multiplier = 619742113;
ObjectDefinition_isDelayShading = 'a';
ObjectDefinition_isRotated = 'as';
ObjectDefinition_isShadowCast = 'aa';
ObjectDefinition_isSolid = 'n';
ObjectDefinition_isUnwalkableSolid = 'aw';

{* Player - 8 Hooks *}
Player = 'k';
Player_CombatLevel = 'w';
Player_CombatLevel_Multiplier = -37414825;
Player_Definition = 'i';
Player_Model = 'l';
Player_Name = 'g';
Player_PrayerIcon = 'm';
Player_PrayerIcon_Multiplier = 724097665;
Player_SkullIcon = 'w';
Player_SkullIcon_Multiplier = -37414825;
Player_TeamIndex = 'z';
Player_TeamIndex_Multiplier = -2110125141;
Player_isVisible = 'd';

{* PlayerDefinition - 3 Hooks *}
PlayerDefinition = 'fp';
PlayerDefinition_Appearance = 'g';
PlayerDefinition_NPCID = 'e';
PlayerDefinition_NPCID_Multiplier = 772410741;
PlayerDefinition_isFemale = 'k';

{* Projectile - 17 Hooks *}
Projectile = 'u';
Projectile_Cycle = 'j';
Projectile_Cycle_Multiplier = -725188225;
Projectile_Height = 'w';
Projectile_Height_Multiplier = -468497413;
Projectile_HeightOffset = 'n';
Projectile_RotationX = 'v';
Projectile_RotationX_Multiplier = 1316401903;
Projectile_RotationY = 'f';
Projectile_RotationY_Multiplier = -1945889647;
Projectile_Scalar = 'd';
Projectile_Slope = 'o';
Projectile_Slope_Multiplier = -1163271465;
Projectile_SpeedX = 't';
Projectile_SpeedY = 'y';
Projectile_SpeedZ = 'z';
Projectile_StartX = 'k';
Projectile_StartX_Multiplier = 1141500167;
Projectile_StartY = 'e';
Projectile_StartY_Multiplier = -2043315377;
Projectile_TargetDistance = 'h';
Projectile_TargetDistance_Multiplier = 1037369539;
Projectile_TargetID = 'b';
Projectile_TargetID_Multiplier = -1077526313;
Projectile_X = 'l';
Projectile_Y = 'x';
Projectile_isMoving = 'r';

{* Queue - 1 Hooks *}
Queue = 'ft';
Queue_Head = 'g';

{* Region - 2 Hooks *}
Region = 'cc';
Region_WorldObjects = 'o';
Region_SceneTiles = 'm';

{* Renderable - 1 Hooks *}
Renderable = 'bl';
Renderable_ModelHeight = 'ct';
Renderable_ModelHeight_Multiplier = 223660393;

{* RSLoader - 1 Hooks *}
RSLoader = 'ee';
RSLoader_isCrashed = 'on';

{* SceneTile - 11 Hooks *}
SceneTile = 'cw';
SceneTile_BoundaryObject = 'u';
SceneTile_ComplexTile = 'm';
SceneTile_FloorDecorationObject = 'o';
SceneTile_GenericTile = 'w';
SceneTile_WorldObjects = 'r';
SceneTile_ItemLayer = 'h';
SceneTile_Plane = 'e';
SceneTile_Plane_Multiplier = -1687894635;
SceneTile_SceneTile = 'a';
SceneTile_WallDecoration = 'j';
SceneTile_X = 'i';
SceneTile_X_Multiplier = 1789296991;
SceneTile_Y = 'k';
SceneTile_Y_Multiplier = 1056224811;

{* Varp - 3 Hooks *}
Varp = 'ag';
Varp_ConfigID = 'k';
Varp_ConfigID_Multiplier = -2036465223;
Varp_EndBit = 'w';
Varp_EndBit_Multiplier = -1321808583;
Varp_StartBit = 'e';
Varp_StartBit_Multiplier = 1915238253;

{* WallDecoration - 11 Hooks *}
WallDecoration = 'cx';
WallDecoration_BackupRenderable = 'o';
WallDecoration_Flags = 'b';
WallDecoration_Flags_Multiplier = 1474324425;
WallDecoration_Height = 'w';
WallDecoration_Height_Multiplier = 884163329;
WallDecoration_ID = 'h';
WallDecoration_ID_Multiplier = 108241691;
WallDecoration_Orientation = 'e';
WallDecoration_Orientation_Multiplier = -899856127;
WallDecoration_Plane = 'g';
WallDecoration_Plane_Multiplier = -152026405;
WallDecoration_RelativeX = 'm';
WallDecoration_RelativeX_Multiplier = -1587800521;
WallDecoration_RelativeY = 'u';
WallDecoration_RelativeY_Multiplier = 713109441;
WallDecoration_Renderable = 'j';
WallDecoration_X = 'i';
WallDecoration_X_Multiplier = -1890180425;
WallDecoration_Y = 'k';
WallDecoration_Y_Multiplier = 204816391;

{* Widget - 60 Hooks *}
Widget = 'eq';
Widget_GetActions = 'bg';
Widget_Alpha = 'am';
Widget_Alpha_Multiplier = 327680;
Widget_BorderThickness = 'az';
Widget_BorderThickness_Multiplier = -927795629;
Widget_BoundsIndex = 'dp';
Widget_BoundsIndex_Multiplier = 525270717;
Widget_Children = 'dj';
Widget_ConfigListeners = 'ck';
Widget_ConfigTriggers = 'cr';
Widget_ContainerActions = 'bx';
Widget_GetItems = 'dd';
Widget_Height = 'f';
Widget_Height_Multiplier = 617892681;
Widget_GetID = 'i';
Widget_GetID_Multiplier = 130418737;
Widget_GetIndex = 'l';
Widget_GetIndex_Multiplier = 12045729;
Widget_ItemID = 'dy';
Widget_ItemID_Multiplier = 885494065;
Widget_LoopCycleStatus = 'di';
Widget_LoopCycleStatus_Multiplier = -702807129;
Widget_ModelID = 'ak';
Widget_ModelID_Multiplier = 1418725555;
Widget_ModelType = 'aq';
Widget_ModelType_Multiplier = 610395339;
Widget_ModelZoom = 'bu';
Widget_ModelZoom_Multiplier = -1143505217;
Widget_MouseClickedListeners = 'cn';
Widget_MouseDraggedListeners = 'cl';
Widget_MouseEnteredListeners = 'ca';
Widget_MouseExitedListeners = 'cx';
Widget_MouseHoverListeners = 'cd';
Widget_MouseMovedListeners = 'ct';
Widget_MousePressedListeners = 'cg';
Widget_MouseReleasedListeners = 'cp';
Widget_Name = 'bt';
Widget_Opcodes = 'do';
Widget_RenderListeners = 'ce';
Widget_Root = 'br';
Widget_RootID = 'a';
Widget_RootID_Multiplier = 571953607;
Widget_RotationX = 'af';
Widget_RotationX_Multiplier = -558773065;
Widget_RotationY = 'bd';
Widget_RotationY_Multiplier = -407401667;
Widget_RotationZ = 'by';
Widget_RotationZ_Multiplier = 983508913;
Widget_ScrollHeight = 'ac';
Widget_ScrollHeight_Multiplier = -235599791;
Widget_ScrollListeners = 'cq';
Widget_ScrollWidth = 'ar';
Widget_ScrollWidth_Multiplier = 549133121;
Widget_ScrollX = 's';
Widget_ScrollX_Multiplier = -2136744347;
Widget_ScrollY = 'c';
Widget_ScrollY_Multiplier = -404148817;
Widget_SelectedActionName = 'bl';
Widget_ShadowColour = 'aw';
Widget_ShadowColour_Multiplier = -428991899;
Widget_SkillListeners = 'cj';
Widget_SkillTriggers = 'ch';
Widget_SpellName = 'dq';
Widget_SpriteID = 'ax';
Widget_SpriteID_Multiplier = -18357319;
Widget_StackSize = 'dr';
Widget_StackSize_Multiplier = -207671017;
Widget_GetStackSizes = 'dh';
Widget_TableListeners = 'cw';
Widget_TableTriggers = 'cb';
Widget_GetText = 'bw';
Widget_TextColour = 'ah';
Widget_TextColour_Multiplier = -616024881;
Widget_TextDrawingAreaIndex = 'bf';
Widget_TextDrawingAreaIndex_Multiplier = 190674391;
Widget_TextureID = 'ai';
Widget_TextureID_Multiplier = 128139607;
Widget_Tooltip = 'dm';
Widget_Width = 'v';
Widget_Width_Multiplier = 17877611;
Widget_GetRelativeX = 'z';
Widget_GetRelativeX_Multiplier = -582288213;
Widget_GetRelativeY = 'x';
Widget_GetRelativeY_Multiplier = -672908551;
Widget_isFlippedHorizontally = 'ao';
Widget_isFlippedVertically = 'ag';
Widget_isHidden = 'p';
Widget_isTypeFaceShadowed = 'au';

{* WidgetItemNode - 2 Hooks *}
WidgetItemNode = 'x';
WidgetItemNode_IDs = 'i';
WidgetItemNode_StackSizes = 'k';

{* WidgetNode - 1 Hooks *}
WidgetNode = 'e';
WidgetNode_ID = 'g';
WidgetNode_ID_Multiplier = -247799505;

{* World - 7 Hooks *}
World = 'f';
World_Activity = 'w';
World_Domain = 'e';
World_Index = 'u';
World_Index_Multiplier = -45110487;
World_Location = 'm';
World_Location_Multiplier = 1647926875;
World_Mask = 'i';
World_Mask_Multiplier = -1922708461;
World_Population = 'k';
World_Population_Multiplier = -1231659147;
World_WorldID = 'g';
World_WorldID_Multiplier = 436539621;

Pm me if there are any naming issues or breaks. I will try to fix =)

Kyle

2014-11-27 18:28:40

Sorry about the delay, am away for thanksgiving with some family :) I don't have my pc so can't run our updater but I fixed the couple names on @Cheddy;'s and pushed them, hopefully all work. Will update when I have a chance to get back to my computer.

Happy thanksgiving to those in the US!

Kyle

2014-11-30 09:28:49

Just another quick update on the new reflection include. Due to the vast and overwhelming opinion of other osr scripters, I have stopped working on the new PS include and am now basically finished with a completely object oriantated version written in lape to be used with @Aerolib.

I don't have it on github currently as I have been out of town and am not on my main computer. If anyone want's to help me test it please let me know! I will hopefully have it released by the end of the week. I will still keep the PS version updated with hooks, but will be focusing entirely on the lape version.
@Fitta @Harrier @Rlp @ineedbot

Fitta

2014-11-30 09:39:27

From: elfyyy
Just another quick update on the new reflection include. Due to the vast and overwhelming opinion of other osr scripters, I have stopped working on the new PS include and am now basically finished with a completely object oriantated version written in lape to be used with @Aerolib.

I don't have it on github currently as I have been out of town and am not on my main computer. If anyone want's to help me test it please let me know! I will hopefully have it released by the end of the week. I will still keep the PS version updated with hooks, but will be focusing entirely on the lape version.
@Fitta @Harrier @Rlp @ineedbot


Upload it somewhere and I'll port my Rock Crab script and release it :)

Edit: Make a catchy name for it..

Kyle

2014-11-30 20:33:23

From: Fitta
Upload it somewhere and I'll port my Rock Crab script and release it :)

Edit: Make a catchy name for it..


I'll get it to github soon. Add me on skype

Kyle

2014-11-30 23:51:15

Just Added it to github @Fitta; It's still a super early release so please let me know of any bugs. It will update hooks and it will let you know when there is an updated version of the include. I will document it and add credits soon!

Fitta

2014-12-01 14:37:49

From: elfyyy
Just Added it to github @Fitta; It's still a super early release so please let me know of any bugs. It will update hooks and it will let you know when there is an updated version of the include. I will document it and add credits soon!


Add GetIndex for player.simba please :((

ineedbot

2014-12-01 16:29:25

From: elfyyy
Just Added it to github @Fitta; It's still a super early release so please let me know of any bugs. It will update hooks and it will let you know when there is an updated version of the include. I will document it and add credits soon!


So this new include is to be used with AeroLib, nice, so how should the include path be? .\includes\aerolib\reflection , or something like that

edit: think i found it: {$i AeroLib/reflection/lib/internal/Includes.simba}

SmartGraphics don't work, highlights line 33 and gives error: Error: The bitmap[-1] does not exist at line 33

Fitta

2014-12-01 20:52:46

This is the template to make it run.


program Template;
{$DEFINE SMART}
{$i AeroLib/AeroLib.Simba}
{$i AeroLib/Reflection/Reflection.simba}

begin
initAL;
setupReflection;
end.





Elfyyy, we really need this

function TReflectionTiles.TileOnMS(Tile: TPoint): Boolean;
var
Point: TPoint;
begin
Point := Reflect.Tiles.TileToMM(Tile);
Result := PointInBox(Point, intToBox(MSX1, MSY1, MSX2, MSY2));
end;

ineedbot

2014-12-01 23:55:48

Could you add:
function TReflectionPlayer.GetInteractingNPCIndice: Integer;
var
Me: Integer;
begin
Me := Reflect.Smart.GetObject(0, Client_Player);
Result := Reflect.Smart.GetInt(Me, Actor_Interacting);
Reflect.Smart.FreeObject(Me);
end;
It would be useful for combat scripts and fishing scripts, to see if you are interacting with the fishing spot/npc for not rather than checking for the animation to timeout.

And I used
function GetQueue:TPoint;
var me, i, x, y : integer;
begin
Me := SmartGetFieldObject(SmartCurrentTarget, 0, client_player);
X := (SmartGetFieldInt(SmartCurrentTarget, 0, client_baseX) * client_baseX_Multiplier);
Y := (SmartGetFieldInt(SmartCurrentTarget, 0, client_baseY) * client_baseY_Multiplier);
result := Point(x+SmartGetFieldArrayInt(SmartCurrentTarget, Me, Actor_PathX, 0), y+SmartGetFieldArrayInt(SmartCurrentTarget, Me, Actor_PathY, 0));
SmartFreeObject(SmartCurrentTarget, Me);
end;
With 'while(GetQueue <> R_GetTileGlobal) do sleep(25);' for a very fast check if the player is moving, I used it in a private chin script, was getting about 100k xp an hour on reds.

And one more request is that you add a 'safe' or 'perfect' path for tricky paths that require extra care while navigating around obstacles and stuff.


TReflectionInventory.IsFull cause 'Error: Access violation at line 472' on SimbaEx.simba

Kyle

2014-12-02 07:37:39

From: Fitta
Add GetIndex for player.simba please :((


Ok.

From: Fitta

Elfyyy, we really need this

function TReflectionTiles.TileOnMS(Tile: TPoint): Boolean;
var
Point: TPoint;
begin
Point := Reflect.Tiles.TileToMM(Tile);
Result := PointInBox(Point, intToBox(MSX1, MSY1, MSX2, MSY2));
end;


Will do

From: ineedbot
Could you add:
function TReflectionPlayer.GetInteractingNPCIndice: Integer;
var
Me: Integer;
begin
Me := Reflect.Smart.GetObject(0, Client_Player);
Result := Reflect.Smart.GetInt(Me, Actor_Interacting);
Reflect.Smart.FreeObject(Me);
end;
It would be useful for combat scripts and fishing scripts, to see if you are interacting with the fishing spot/npc for not rather than checking for the animation to timeout.

And I used
function GetQueue:TPoint;
var me, i, x, y : integer;
begin
Me := SmartGetFieldObject(SmartCurrentTarget, 0, client_player);
X := (SmartGetFieldInt(SmartCurrentTarget, 0, client_baseX) * client_baseX_Multiplier);
Y := (SmartGetFieldInt(SmartCurrentTarget, 0, client_baseY) * client_baseY_Multiplier);
result := Point(x+SmartGetFieldArrayInt(SmartCurrentTarget, Me, Actor_PathX, 0), y+SmartGetFieldArrayInt(SmartCurrentTarget, Me, Actor_PathY, 0));
SmartFreeObject(SmartCurrentTarget, Me);
end;
With 'while(GetQueue <> R_GetTileGlobal) do sleep(25);' for a very fast check if the player is moving, I used it in a private chin script, was getting about 100k xp an hour on reds.

And one more request is that you add a 'safe' or 'perfect' path for tricky paths that require extra care while navigating around obstacles and stuff.


TReflectionInventory.IsFull cause 'Error: Access violation at line 472' on SimbaEx.simba


I'll add those. The error is caused by a bad function override in Aerlib. I'll make a pull request to have it removed. Until then, comment out this entire function:

Procedure Pointer.Inc(Size: Int64);

EDIT: Please don't release any scripts using this include yet, as I will be making some changes and don't want to break any scripts for people!

Fitta

2014-12-02 15:49:34

From: elfyyy
Ok.



Will do



I'll add those. The error is caused by a bad function override in Aerlib. I'll make a pull request to have it removed. Until then, comment out this entire function:

Procedure Pointer.Inc(Size: Int64);

EDIT: Please don't release any scripts using this include yet, as I will be making some changes and don't want to break any scripts for people!


but… but… I already started :redface:

Brandon

2014-12-02 16:40:43

From: Cheddy
R66 Hooks If You Want =)

Pm me if there are any naming issues or breaks. I will try to fix =)



Not sure how but I think your CacheableNode's next and previous are swapped? :S Maybe I'm wrong.. I have:


Cacheable Node: gy
---------------------------------
Prev -> co
Next -> cn


Node: gf
---------------------------------
UID -> dw
Prev -> ee
Next -> el


and the code:

gy:

public void unlink() {
if(this.cn != null) { //Next
this.cn.co = this.co; //this.next.prev = this.prev
this.co.cn = this.cn; //this.prev.next = this.next
this.co = null;
this.cn = null;
}
}


gf:

public void unlink() {
if(this.el != null) { //Next
this.el.ee = this.ee; //this.next.prev = this.prev
this.ee.el = this.el; //this.prev.next = this.next
this.ee = null;
this.el = null;
}
}


??? But you have one having the "if statement" being identified as prev and the other identifying it as next for the same pattern (aload, getfield, ifnonnull)?

Cheddy

2014-12-02 17:40:34

From: Brandon
Not sure how but I think your CacheableNode's next and previous are swapped? :S Maybe I'm wrong.. I have:


Cacheable Node: gy
---------------------------------
Prev -> co
Next -> cn


Node: gf
---------------------------------
UID -> dw
Prev -> ee
Next -> el


and the code:

gy:

public void unlink() {
if(this.cn != null) { //Next
this.cn.co = this.co; //this.next.prev = this.prev
this.co.cn = this.cn; //this.prev.next = this.next
this.co = null;
this.cn = null;
}
}


gf:

public void unlink() {
if(this.el != null) { //Next
this.el.ee = this.ee; //this.next.prev = this.prev
this.ee.el = this.el; //this.prev.next = this.next
this.ee = null;
this.el = null;
}
}


??? But you have one having the "if statement" being identified as prev and the other identifying it as next for the same pattern (aload, getfield, ifnonnull)?


Could be cause I was in a rush making that identifier ;)
Yeh, they should be the other way around haha :D

Also, I identify the node fields based on access haha :D (#Lazy)

Realised that Widget#getID is also messed up… :/

Fitta

2014-12-02 19:24:13

Elfyy, for some weird reason your GetUpText gets the last menu option instead of the first..

Reason was this…
Client_MenuActions: tHook = ['client.iq', 1];

this is the correct hook.


Edit, still not working….

Kyle

2014-12-02 23:13:21

From: Fitta
Elfyy, for some weird reason your GetUpText gets the last menu option instead of the first..

Reason was this…
Client_MenuActions: tHook = ['client.iq', 1];

this is the correct hook.


Edit, still not working….


I'll look at it in a bit. Not gonna be working on it much for a little as I have exams this week and next! :'(

ineedbot

2014-12-04 16:58:29

From: elfyyy
I'll look at it in a bit. Not gonna be working on it much for a little as I have exams this week and next! :'(


Alright the pointer.inc was fixed, thats good, but smartGraphics won't work.

Doing any smartGraphics procedure does this error: Error: The bitmap[-1] does not exist at line 33 on smartGraphics.simba

Kyle

2014-12-04 19:53:01

From: ineedbot
Alright the pointer.inc was fixed, thats good, but smartGraphics won't work.

Doing any smartGraphics procedure does this error: Error: The bitmap[-1] does not exist at line 33 on smartGraphics.simba


Does smartgraphics work normally with Aerolib?

Wetish

2014-12-04 20:13:47

From: elfyyy
Does smartgraphics work normally with Aerolib?


It works for me. You just call it differently.

OS_SMART.__Graphics.DrawCircle(Point(x,y),3);

ineedbot

2014-12-04 21:48:41

From: Wetish
It works for me. You just call it differently.

OS_SMART.__Graphics.DrawCircle(Point(x,y),3);

Well i guess I'll use aerolib's smartgraphics then, thanks

Kyle

2014-12-04 22:02:19

From: ineedbot
Well i guess I'll use aerolib's smartgraphics then, thanks


Yeah definitely do. The only reason I have it included is for a couple methods that we need. I will change it when I get time. Hopefully after this next week things will settle down for me in school.

ineedbot

2014-12-05 16:44:10

TReflectObject.GetAt causes:
Hook Leaked in: Get3DObject
Hook Leaked in: GetObject
Hook Leaked in: Get3DObject
Hook Leaked in: GetObject
Hook Leaked in: Get3DObject
Hook Leaked in: GetObject
Please report this log to the reflection team, terminating

Also just one inconstancy, TReflectionInventory.GetAll must be called like _items := TReflectionInventory.GetAll; while NPCs.GetAll; and Objects.GetAll; doesn't.

Also it seems I can't get any Objects with Objects.GetAll;, I found out that its returning objects from up to 70 tiles away…

The Mayor

2014-12-05 17:16:02

What happened to that super reflection include tls was working on?

Harrier

2014-12-05 17:26:31

From: The Mayor
What happened to that super reflection include tls was working on?

Think he got caught up with other things or lost motivation for it.

Kyle

2014-12-05 19:38:35

From: ineedbot
TReflectObject.GetAt causes:
Hook Leaked in: Get3DObject
Hook Leaked in: GetObject
Hook Leaked in: Get3DObject
Hook Leaked in: GetObject
Hook Leaked in: Get3DObject
Hook Leaked in: GetObject
Please report this log to the reflection team, terminating


Ty very much, fixed it and pushed to Github :)

From: ineedbot

Also just one inconstancy, TReflectionInventory.GetAll must be called like _items := TReflectionInventory.GetAll; while NPCs.GetAll; and Objects.GetAll; doesn't.


One of the changes I am going to do, same with GroundItems.

From: ineedbot

Also it seems I can't get any Objects with Objects.GetAll;, I found out that its returning objects from up to 70 tiles away…


Not sure what you mean? If your getting objects that far away, that's expected since you get all? Or am I not understanding what you mean?
AObject.Get(objGame); Will return ALL Game Objects in loaded region.
AObject.Get(objGam, 10); Willl return ALL Game Objects within 10 tiles.

Kyle

2014-12-05 19:54:26

From: Fitta
Elfyy, for some weird reason your GetUpText gets the last menu option instead of the first..

Reason was this…
Client_MenuActions: tHook = ['client.iq', 1];

this is the correct hook.


Edit, still not working….


Seems Fine to me…

Bank Bank booth / 2 more options

Thought you might have meant choose option, but it works fine also:

[Bank Bank booth, Walk here, Examine Bank booth, Cancel]

Fitta

2014-12-05 20:54:07

From: elfyyy
Seems Fine to me…

Bank Bank booth / 2 more options

Thought you might have meant choose option, but it works fine also:

[Bank Bank booth, Walk here, Examine Bank booth, Cancel]


:S crazy shit.

btw, how much are you planning to change..?

ineedbot

2014-12-05 20:57:34

From: elfyyy
Ty very much, fixed it and pushed to Github :)



One of the changes I am going to do, same with GroundItems.



Not sure what you mean? If your getting objects that far away, that's expected since you get all? Or am I not understanding what you mean?
AObject.Get(objGame); Will return ALL Game Objects in loaded region.
AObject.Get(objGam, 10); Willl return ALL Game Objects within 10 tiles.


Well I'm doing AOBject.Get(ObjGame, 20); and I writeln(TReflectionTiles.DistanceFromTile(AOBject.tile) and it returns 70(or around that number).

Also mapwalking might click the run button over and over if the path overlaps it.

Oh and blindwalking just spam clicks the tile until its there, doesn't check if its moving or FFlag is up etc.

Kyle

2014-12-05 21:20:50

From: Fitta
:S crazy shit.

btw, how much are you planning to change..?


Not sure. Probably just make it all OOP like the example I talked about to @ineedbot;


From: ineedbot
Well I'm doing AOBject.Get(ObjGame, 20); and I writeln(TReflectionTiles.DistanceFromTile(AOBject.tile) and it returns 70(or around that number).

Also mapwalking might click the run button over and over if the path overlaps it.

Oh and blindwalking just spam clicks the tile until its there, doesn't check if its moving or FFlag is up etc.



EDIT: All aforementioned bugs should be fixed, also note: I changed BlindWalk to BlindWalkMM to be consistent with BlindWalkMS. Also, I plan on rewriting all walking procedures as I'm not happy with them atm.

ineedbot

2014-12-05 21:22:55

From: elfyyy
Not sure. Probably just make it all OOP like the example I talked about to @ineedbot;




You're helping a bunch hahaha. Yeah all of those are mistakes :P. Gimme some mins and I'll edit back when I update it!

Yea I'm just converting my AIO fisher atm, getting everything going, so far most things are working.

NPC.GetAll; is return multiple of the same NPC… Nothing to big, but it can create slowdowns..

Kyle

2014-12-06 22:37:35

Just updated on github. I made grounditems and Inventory OOP like the rest of the include. So now you call:

var
OurInv: TReflectInventoryArray;
GroundItems: TReflectGroundItemArray;

begin
OurInv.GetAll;
GroundItems.GetAll;
WriteLn(OurInv);
WriteLn(GroundItems);
end.


ineedbot

2014-12-06 23:45:34

From: elfyyy
Just updated on github. I made grounditems and Inventory OOP like the rest of the include. So now you call:

var
OurInv: TReflectInventoryArray;
GroundItems: TReflectGroundItemArray;

begin
OurInv.GetAll;
GroundItems.GetAll;
WriteLn(OurInv);
WriteLn(GroundItems);
end.



Sweet.

objects are now returning nearby objects and now are useable, but it slows down the script soo much… a simple object.getAt(Objgame, tile) takes almost half a second. If you can find a way to speed this up, it would be great.

Cheddy

2014-12-07 03:24:18

Client.getRegion().getSceneTiles[plane][localX][localY].getObjects();
That's the efficient way to do it. Just get that specific tile from the region and then load the objects from that :-)

Kyle

2014-12-07 08:26:31

From: ineedbot
Sweet.

objects are now returning nearby objects and now are useable, but it slows down the script soo much… a simple object.getAt(Objgame, tile) takes almost half a second. If you can find a way to speed this up, it would be great.


From: Cheddy
Client.getRegion().getSceneTiles[plane][localX][localY].getObjects();
That's the efficient way to do it. Just get that specific tile from the region and then load the objects from that :-)


Yup that's the way that we do it @Cheddy;

I did some messing around with the hook caching for them and found a way to speed it up substantially when searching smaller locations. I'm now convinced that object finding is as fast as simba possible can do it. Every object reference is stored in the 'HookCache' and at the end of the function it free's every one in the cache, but now stops at the end of the stored objects.

Here's a test showing speeds now:


It took: 0ms for (1 * 1) Tiles
It took: 0ms for (2 * 2) Tiles
It took: 0ms for (3 * 3) Tiles
It took: 0ms for (4 * 4) Tiles
It took: 0ms for (5 * 5) Tiles
It took: 0ms for (6 * 6) Tiles
It took: 15ms for (7 * 7) Tiles
It took: 16ms for (8 * 8) Tiles
It took: 16ms for (9 * 9) Tiles
It took: 15ms for (10 * 10) Tiles
It took: 16ms for (11 * 11) Tiles
It took: 15ms for (12 * 12) Tiles
It took: 31ms for (13 * 13) Tiles
It took: 16ms for (14 * 14) Tiles
It took: 15ms for (15 * 15) Tiles
It took: 31ms for (16 * 16) Tiles
It took: 31ms for (17 * 17) Tiles
It took: 32ms for (18 * 18) Tiles
It took: 32ms for (19 * 19) Tiles
It took: 46ms for (20 * 20) Tiles
It took: 47ms for (21 * 21) Tiles
It took: 31ms for (22 * 22) Tiles
It took: 47ms for (23 * 23) Tiles
It took: 63ms for (24 * 24) Tiles
It took: 62ms for (25 * 25) Tiles
It took: 47ms for (26 * 26) Tiles
It took: 79ms for (27 * 27) Tiles
It took: 93ms for (28 * 28) Tiles
It took: 78ms for (29 * 29) Tiles
It took: 78ms for (30 * 30) Tiles
It took: 94ms for (31 * 31) Tiles
It took: 125ms for (32 * 32) Tiles
It took: 109ms for (33 * 33) Tiles
It took: 109ms for (34 * 34) Tiles
It took: 125ms for (35 * 35) Tiles
It took: 156ms for (36 * 36) Tiles
It took: 141ms for (37 * 37) Tiles
It took: 140ms for (38 * 38) Tiles
It took: 156ms for (39 * 39) Tiles
It took: 188ms for (40 * 40) Tiles
It took: 172ms for (41 * 41) Tiles
It took: 172ms for (42 * 42) Tiles
It took: 188ms for (43 * 43) Tiles
It took: 219ms for (44 * 44) Tiles
It took: 219ms for (45 * 45) Tiles
It took: 219ms for (46 * 46) Tiles
It took: 234ms for (47 * 47) Tiles
It took: 250ms for (48 * 48) Tiles
It took: 250ms for (49 * 49) Tiles
It took: 266ms for (50 * 50) Tiles
It took: 297ms for (51 * 51) Tiles
It took: 328ms for (52 * 52) Tiles
It took: 312ms for (53 * 53) Tiles
It took: 312ms for (54 * 54) Tiles
It took: 344ms for (55 * 55) Tiles
It took: 360ms for (56 * 56) Tiles
It took: 344ms for (57 * 57) Tiles
It took: 344ms for (58 * 58) Tiles
It took: 375ms for (59 * 59) Tiles
It took: 422ms for (60 * 60) Tiles
It took: 422ms for (61 * 61) Tiles
It took: 422ms for (62 * 62) Tiles
It took: 437ms for (63 * 63) Tiles
It took: 469ms for (64 * 64) Tiles
It took: 468ms for (65 * 65) Tiles
It took: 485ms for (66 * 66) Tiles
It took: 500ms for (67 * 67) Tiles
It took: 532ms for (68 * 68) Tiles
It took: 547ms for (69 * 69) Tiles
It took: 563ms for (70 * 70) Tiles
It took: 610ms for (71 * 71) Tiles
It took: 609ms for (72 * 72) Tiles
It took: 609ms for (73 * 73) Tiles
It took: 609ms for (74 * 74) Tiles
It took: 657ms for (75 * 75) Tiles
It took: 750ms for (76 * 76) Tiles
It took: 719ms for (77 * 77) Tiles
It took: 703ms for (78 * 78) Tiles
It took: 766ms for (79 * 79) Tiles
It took: 781ms for (80 * 80) Tiles
It took: 781ms for (81 * 81) Tiles
It took: 797ms for (82 * 82) Tiles
It took: 859ms for (83 * 83) Tiles
It took: 875ms for (84 * 84) Tiles
It took: 922ms for (85 * 85) Tiles
It took: 859ms for (86 * 86) Tiles
It took: 906ms for (87 * 87) Tiles
It took: 969ms for (88 * 88) Tiles
It took: 953ms for (89 * 89) Tiles
It took: 969ms for (90 * 90) Tiles
It took: 1031ms for (91 * 91) Tiles
It took: 1094ms for (92 * 92) Tiles
It took: 1078ms for (93 * 93) Tiles
It took: 1078ms for (94 * 94) Tiles
It took: 1140ms for (95 * 95) Tiles
It took: 1203ms for (96 * 96) Tiles
It took: 1219ms for (97 * 97) Tiles
It took: 1203ms for (98 * 98) Tiles
It took: 1250ms for (99 * 99) Tiles
It took: 1282ms for (100 * 100) Tiles
It took: 1297ms for (101 * 101) Tiles
It took: 1281ms for (102 * 102) Tiles
It took: 1313ms for (103 * 103) Tiles
It took: 1360ms for (104 * 104) Tiles


EDIT: Just pushed changes to github. I didn't completely finish ground items as it will be more difficult since each tile can return an array. I will get to it when I get more free time.
I also changed the naming on ground items to be consistent with objects. TReflectGroundItemArray.Get(). If distance is not entered it will automatically get all, just like for objects,

Fitta

2014-12-07 09:31:46

Tell me when you're done changing the names somewhat, I want to go nuts & bananas.

inb4 crazy scripts

ineedbot

2014-12-07 14:36:40

From: elfyyy
Yup that's the way that we do it @Cheddy;

I did some messing around with the hook caching for them and found a way to speed it up substantially when searching smaller locations. I'm now convinced that object finding is as fast as simba possible can do it. Every object reference is stored in the 'HookCache' and at the end of the function it free's every one in the cache, but now stops at the end of the stored objects.

Here's a test showing speeds now:


It took: 0ms for (1 * 1) Tiles
It took: 0ms for (2 * 2) Tiles
It took: 0ms for (3 * 3) Tiles
It took: 0ms for (4 * 4) Tiles
It took: 0ms for (5 * 5) Tiles
It took: 0ms for (6 * 6) Tiles
It took: 15ms for (7 * 7) Tiles
It took: 16ms for (8 * 8) Tiles
It took: 16ms for (9 * 9) Tiles
It took: 15ms for (10 * 10) Tiles
It took: 16ms for (11 * 11) Tiles
It took: 15ms for (12 * 12) Tiles
It took: 31ms for (13 * 13) Tiles
It took: 16ms for (14 * 14) Tiles
It took: 15ms for (15 * 15) Tiles
It took: 31ms for (16 * 16) Tiles
It took: 31ms for (17 * 17) Tiles
It took: 32ms for (18 * 18) Tiles
It took: 32ms for (19 * 19) Tiles
It took: 46ms for (20 * 20) Tiles
It took: 47ms for (21 * 21) Tiles
It took: 31ms for (22 * 22) Tiles
It took: 47ms for (23 * 23) Tiles
It took: 63ms for (24 * 24) Tiles
It took: 62ms for (25 * 25) Tiles
It took: 47ms for (26 * 26) Tiles
It took: 79ms for (27 * 27) Tiles
It took: 93ms for (28 * 28) Tiles
It took: 78ms for (29 * 29) Tiles
It took: 78ms for (30 * 30) Tiles
It took: 94ms for (31 * 31) Tiles
It took: 125ms for (32 * 32) Tiles
It took: 109ms for (33 * 33) Tiles
It took: 109ms for (34 * 34) Tiles
It took: 125ms for (35 * 35) Tiles
It took: 156ms for (36 * 36) Tiles
It took: 141ms for (37 * 37) Tiles
It took: 140ms for (38 * 38) Tiles
It took: 156ms for (39 * 39) Tiles
It took: 188ms for (40 * 40) Tiles
It took: 172ms for (41 * 41) Tiles
It took: 172ms for (42 * 42) Tiles
It took: 188ms for (43 * 43) Tiles
It took: 219ms for (44 * 44) Tiles
It took: 219ms for (45 * 45) Tiles
It took: 219ms for (46 * 46) Tiles
It took: 234ms for (47 * 47) Tiles
It took: 250ms for (48 * 48) Tiles
It took: 250ms for (49 * 49) Tiles
It took: 266ms for (50 * 50) Tiles
It took: 297ms for (51 * 51) Tiles
It took: 328ms for (52 * 52) Tiles
It took: 312ms for (53 * 53) Tiles
It took: 312ms for (54 * 54) Tiles
It took: 344ms for (55 * 55) Tiles
It took: 360ms for (56 * 56) Tiles
It took: 344ms for (57 * 57) Tiles
It took: 344ms for (58 * 58) Tiles
It took: 375ms for (59 * 59) Tiles
It took: 422ms for (60 * 60) Tiles
It took: 422ms for (61 * 61) Tiles
It took: 422ms for (62 * 62) Tiles
It took: 437ms for (63 * 63) Tiles
It took: 469ms for (64 * 64) Tiles
It took: 468ms for (65 * 65) Tiles
It took: 485ms for (66 * 66) Tiles
It took: 500ms for (67 * 67) Tiles
It took: 532ms for (68 * 68) Tiles
It took: 547ms for (69 * 69) Tiles
It took: 563ms for (70 * 70) Tiles
It took: 610ms for (71 * 71) Tiles
It took: 609ms for (72 * 72) Tiles
It took: 609ms for (73 * 73) Tiles
It took: 609ms for (74 * 74) Tiles
It took: 657ms for (75 * 75) Tiles
It took: 750ms for (76 * 76) Tiles
It took: 719ms for (77 * 77) Tiles
It took: 703ms for (78 * 78) Tiles
It took: 766ms for (79 * 79) Tiles
It took: 781ms for (80 * 80) Tiles
It took: 781ms for (81 * 81) Tiles
It took: 797ms for (82 * 82) Tiles
It took: 859ms for (83 * 83) Tiles
It took: 875ms for (84 * 84) Tiles
It took: 922ms for (85 * 85) Tiles
It took: 859ms for (86 * 86) Tiles
It took: 906ms for (87 * 87) Tiles
It took: 969ms for (88 * 88) Tiles
It took: 953ms for (89 * 89) Tiles
It took: 969ms for (90 * 90) Tiles
It took: 1031ms for (91 * 91) Tiles
It took: 1094ms for (92 * 92) Tiles
It took: 1078ms for (93 * 93) Tiles
It took: 1078ms for (94 * 94) Tiles
It took: 1140ms for (95 * 95) Tiles
It took: 1203ms for (96 * 96) Tiles
It took: 1219ms for (97 * 97) Tiles
It took: 1203ms for (98 * 98) Tiles
It took: 1250ms for (99 * 99) Tiles
It took: 1282ms for (100 * 100) Tiles
It took: 1297ms for (101 * 101) Tiles
It took: 1281ms for (102 * 102) Tiles
It took: 1313ms for (103 * 103) Tiles
It took: 1360ms for (104 * 104) Tiles


EDIT: Just pushed changes to github. I didn't completely finish ground items as it will be more difficult since each tile can return an array. I will get to it when I get more free time.
I also changed the naming on ground items to be consistent with objects. TReflectGroundItemArray.Get(). If distance is not entered it will automatically get all, just like for objects,


Oh yeah, its much faster now, thanks! :)

Kyle

2014-12-07 16:15:42

From: Fitta
Tell me when you're done changing the names somewhat, I want to go nuts & bananas.

inb4 crazy scripts


Uhmm, should be pretty close, give me until the end of the week and I'll try to finalize the naming so you can go at it!!

From: ineedbot
Oh yeah, its much faster now, thanks! :)


Fantastic!

Fitta

2014-12-07 18:40:15

From: elfyyy
Uhmm, should be pretty close, give me until the end of the week and I'll try to finalize the naming so you can go at it!!



Fantastic!


btw, totally forgot, did you add PlayerIndex?

ineedbot

2014-12-09 18:03:38

I made up with a ID Display very similar to the one I made before. Feel free to do whatever you want with it.

Fitta

2014-12-09 18:47:36

From: ineedbot
I made up with a ID Display very similar to the one I made before. Feel free to do whatever you want with it.


Thanks for this :)

Kyle

2014-12-10 16:08:10

Hooks updated to rev 67

EDIT: The hooks won't auto update on the lape version this time, please redownload Reflection.simba from github :)

Kyle

2014-12-18 15:29:34

Hooks updated to Rev 68

ineedbot

2014-12-20 17:53:43

From: elfyyy
Hooks updated to Rev 68


Nice keeping this updated, however you removed 'Client_PlayerIndex' which I used with
function R_GetMyIndex: Integer;
begin
Result := Reflect.Smart.GetInt(0, Client_PlayerIndex) + 32768;
end;

To do:
procedure dismissAllRandoms;
var i, j:integer;
_npcs:TReflectNPCArray;
randoms:tstringarray;
begin
randoms := ['molly', 'niles', 'miles', 'giles', 'sandwich lady',
'drunken dwarf', 'genie', 'highwayman', 'dr jekyll', 'cap''n hand', 'security guard',
'rick turpentine', 'mysterious old man', 'frog', 'null', 'mime', 'sergeant damien', 'freaky forester',
'postie pete', 'tilt', 'flippa', 'leo', 'pillory guard', 'evil bob'];
_npcs.GetAll;
for i:=0 to high(_npcs) do begin
if (_npcs[i].Interacting = R_GetMyIndex) then begin
for j:=0 to high(randoms) do begin
if (pos(randoms[j], lowercase(_npcs[i].Name)) > 0) then begin
R_InteractTile(_npcs[i].Tile, 'Dismiss', 0, 0, 50);
sleep(2500+random(1000));
end;
end;
end;
end;
end;

Kyle

2014-12-20 18:01:39

From: ineedbot
…


Yeah there is going to be some inconsistencys with hooks until I finish my updater. Hopefully will be done within the next couple of weeks!

Kyle

2014-12-22 21:35:31

Just wanted to post an update. I have finished the updater, supporting all functions that we currently have. I will now start to expand the include/updater with more functions and getting the necessary hooks for them.


215 Classes Found

Starting Analysers..
|>Node = gv
^ UID................ gv.ee
^ Next............... gv.ej
^ Prev............... gv.ey

|>CacheableNode = gk
^ Next............... gk.cp
^ Prev............... gk.ci

|>RenderableNode = cc
^ ModelHeight........ cc.cg * -1216200879

|>AnimableNode = p

|>Model = ck

|>AnimationSequence = af

|>Npc Definition = aq
^ Actions............ aq.h
^ Name............... aq.c
^ ID................. aq.w * 2072508285
^ CombatLevel........ aq.v * -740355527

|>LinkedList = fw
^ Head............... fw.l
^ Current............ fw.y

|>Actor = aa
^ Animation.......... aa.bm * 495733559
^ QueueX............. aa.br
^ QueueY............. aa.by
^ WorldX............. aa.h * 1604947505
^ WorldY............. aa.k * 917902939
^ SpokenText......... aa.aa
^ Combat Cycle....... aa.an * -79764281
^ Health............. aa.ai * -1515030189
^ MaxHealth.......... aa.ay * 1629208675
^ InteractingIndex... aa.ab * -1596270757

|>Npc = az
^ Def................ az.l

|>ObjectDefinition = am
^ Actions............ am.an
^ Name............... am.a

|>Buffer = dk

|>Widget = eu
^ Children........... eu.dc
^ GetIDs............. eu.dp
^ StackSizes......... eu.dr
^ ItemAmount......... eu.dm * -1545665157
^ ItemID............. eu.dg * 1147860247
^ WidgetID........... eu.b * -166984235
^ Name............... eu.bq
^ GetText............ eu.bn

|>GameShell = ee

|>Client = Client
^ LoopCycle.......... client.i * -1399128113
^ GetRegion.......... er.df
^ GetPlane........... fo.hd * 1140350779
^ MenuCount.......... client.in * -2141825229
^ MenuWidth.......... er.io * -659962767
^ MenuHeight......... ak.iy * -39793823
^ MenuOptions........ client.ir
^ MenuActions........ client.iu
^ MenuX.............. dm.hw * 1828771929
^ MenuY.............. eh.hy * -1589416691
^ BaseX.............. b.ck * -1730369117
^ BaseY.............. aa.ca * 1423972157
^ GetWidgets......... eu.l
^ GetLocalPlayer..... z.hg
^ TileSettings....... c.y
^ TileHeights........ c.l
^ IsMenuOpen......... client.hn
^ LocalNpcs.......... client.br
^ NpcIndices......... client.bz
^ Sine............... cu.az
^ Cosine............. cu.ad
^ CameraPitch........ aw.fq * -1280666421
^ CameraYaw.......... l.fo * -1602289579
^ CameraX............ bz.fk * 1327254957
^ CameraY............ ep.fv * -2010995499
^ CameraZ............ f.fm * 766099511
^ GroundItems........ client.hu
^ GameSettings....... fg.g
^ MapScale........... client.ft * -1898854141
^ MapAngle........... client.di * 633858349
^ MapOffset.......... client.do * -844428383
^ CurrentLevels...... client.hl
^ RealLevels......... client.hc
^ Experiences........ client.hi
^ Energy............. client.jd * 1236262691
^ Weight............. client.ja * 1399852355
^ Rights............. client.jo * -923297739
^ CurrentWorld....... client.c * 18564717
^ LoginState......... client.u * -2035261693

|>Region = cd
^ SceneTiles......... cd.c

|>BoundaryObject = cg
^ ID................. cg.f * -77259343

|>GameObject = ct
^ ID................. ct.o * 2122780761

|>GroundDecoration = cv
^ ID................. cv.w * -1921889485

|>WallDecoration = cf
^ ID................. cf.n * 1625964717

|>SceneTile = cq
^ GameObject......... cq.a
^ GroundDecoration... cq.t
^ WallDecoration..... cq.f
^ BoundaryObject..... cq.x

|>Player = g
^ Definition......... g.y
^ Name............... g.l

|>Item = q
^ ID................. q.l * 1182524155
^ Amount............. q.y * -1258609723


Process finished with exit code 0

ineedbot

2015-01-03 00:42:08

Love having you keeping the hooks up to date, however when are you going to make the lape include official so I can release some scripts for it?

Kyle

2015-01-03 08:06:49

From: ineedbot
Love having you keeping the hooks up to date, however when are you going to make the lape include official so I can release some scripts for it?


Haha so do I! I'm actually basically finished as of now. I have everything done, just need to add locations to widgets, which I will probably end up doing after release. If I have time (Working on my updater atm) I'll write a quick guide on my tutorial thread, and post the include up and call it ready to script with!

ineedbot

2015-01-03 22:55:07

From: elfyyy
Haha so do I! I'm actually basically finished as of now. I have everything done, just need to add locations to widgets, which I will probably end up doing after release. If I have time (Working on my updater atm) I'll write a quick guide on my tutorial thread, and post the include up and call it ready to script with!


Alright cool.

Just a quick bug report; sometimes TReflectionText.GetUpText causes 'Error: Access violation at line 134' on Text.simba. Mainly while on log in screen cause of dc.

Patriq

2015-01-06 14:22:37

This is happening:
http://i.imgur.com/lLNQW7X.png

My wanna check into that, Im running ineedbot's woodcutter :D

Kyle

2015-01-08 08:37:30

Hooks updated to revision 69. Note: I didn't have my updater output in pascal script form, so only the lape version is updated. I have class now, but will be able to fix it later, here is a formatted log if you want to do it manually:

Starting Analysers..

|>Node = gn -> Extends java/lang/Object
^ UID................gn.ef -> J
^ Next...............gn.ew -> Lgn;
^ Prev...............gn.ew -> Lgn;

|>Cacheable = gl -> Extends gn
^ Next...............gl.cw -> Lgl;
^ Prev...............gl.cs -> Lgl;

|>Renderable = ca -> Extends gl
^ ModelHeight........ca.cn * 1931219915 -> I

|>Animable = h -> Extends ca

|>Model = cx -> Extends ca

|>AnimationSequence = ah -> Extends gl

|>NpcDefinition = an -> Extends gl
^ Actions............an.x -> [Ljava/lang/String;
^ Name...............an.c -> Ljava/lang/String;
^ ID.................an.k * -948022345 -> I
^ CombatLevel........an.e * 122508509 -> I

|>LinkedList = fb -> Extends java/lang/Object
^ Head...............fb.g -> Lgn;
^ Current............fb.j -> Lgn;

|>Actor = as -> Extends ca
^ Animation..........as.bq * 47963277 -> I
^ QueueX.............as.bi -> [I
^ QueueY.............as.bj -> [I
^ WorldX.............as.x * 2098213139 -> I
^ WorldY.............as.t * 949760027 -> I
^ SpokenText.........as.as -> Ljava/lang/String;
^ CombatCycle........as.ao * -132651787 -> I
^ Health.............as.ad * 1379153323 -> I
^ MaxHealth..........as.ab * -971553753 -> I
^ Interactingindex...as.af * -1599423227 -> I

|>Npc = az -> Extends as
^ Definition.........az.g -> Lan;

|>ObjectDefinition = al -> Extends gl
^ Actions............al.ap -> [Ljava/lang/String;
^ Name...............al.y -> Ljava/lang/String;

|>Buffer = df -> Extends gn

|>Widget = ec -> Extends gn
^ Children...........ec.dx -> [Lec;
^ GetIDs.............ec.dc -> [I
^ StackSizes.........ec.dk -> [I
^ ItemAmount.........ec.dw * -555895615 -> I
^ ItemID.............ec.ds * 1369596475 -> I
^ WidgetID...........ec.p * -1461666791 -> I
^ Name...............ec.bw -> Ljava/lang/String;

|>GameShell = ef -> Extends java/applet/Applet

|>Client = client -> Extends ef
^ LoopCycle..........client.v * -104058127 -> I
^ GetRegion..........client.dd -> Lcc;
^ GetPlane...........bs.hs * 1458950069 -> I
^ MenuCount..........client.ip * 41640419 -> I
^ MenuWidth..........bv.id * -1377744169 -> I
^ MenuHeight.........client.ib * -1129284701 -> I
^ MenuOptions........client.ii -> [Ljava/lang/String;
^ MenuActions........client.in -> [Ljava/lang/String;
^ IsMenuOpen.........client.hl -> Z
^ MenuX..............cg.hw * 743814199 -> I
^ MenuY..............cn.hv * 2006274017 -> I
^ BaseX..............w.cx * -1676109665 -> I
^ BaseY..............f.cr * -484655533 -> I
^ GetWidgets.........ec.g -> [[Lec;
^ GetLocalPlayer.....en.hn -> Lz;
^ TileSettings.......c.j -> [[[B
^ TileHeights........c.g -> [[[I
^ LocalNpcs..........client.bi -> [Laz;
^ NpcIndices.........client.bv -> [I
^ Sine...............co.az -> [I
^ Cosine.............co.ae -> [I
^ CameraPitch........ao.fd * 918936107 -> I
^ CameraYaw..........client.fo * 1221787769 -> I
^ CameraX............g.fk * -210829173 -> I
^ CameraY............p.fa * 974548229 -> I
^ CameraZ............y.fp * -918634937 -> I
^ GroundItems........client.hp -> [[[Lfb;
^ GameSettings.......fm.z -> [I
^ MapScale...........client.fi * -1469503859 -> I
^ MapAngle...........client.dt * 354393687 -> I
^ MapOffset..........client.dm * 102366111 -> I
^ CurrentLevels......client.hh -> [I
^ RealLevels.........client.hz -> [I
^ Experiences........client.he -> [I
^ Energy.............client.jo * 389552483 -> I
^ Weight.............client.js * -945500193 -> I
^ Rights.............client.jb * -400104091 -> I
^ CurrentWorld.......client.b * 1640745123 -> I
^ LoginState.........dz.s * 3166751 -> I
^ PlayerIndex........client.gb * 328712329 -> I

|>Region = cc -> Extends java/lang/Object
^ SceneTiles.........cc.c -> [[[Lcy;

|>BoundaryObject = cn -> Extends java/lang/Object
^ ID.................cn.l * 980769247 -> I

|>GameObject = cz -> Extends java/lang/Object
^ ID.................cz.p * -1841301077 -> I

|>GroundDecoration = ct -> Extends java/lang/Object
^ ID.................ct.g * 94810389 -> I

|>WallDecoration = cd -> Extends java/lang/Object
^ ID.................cd.d * -1468585503 -> I

|>SceneTile = cy -> Extends gn
^ GameObject.........cy.y -> [Lcz;
^ GroundDecoration...cy.n -> Lct;
^ WallDecoration.....cy.l -> Lcd;
^ BoundaryObject.....cy.w -> Lcn;

|>Player = z -> Extends as
^ Definition.........z.j -> Lfa;
^ Name...............z.g -> Ljava/lang/String;

|>Item = a -> Extends ca
^ ID.................a.g * -1952791939 -> I
^ StackSizes.........a.j * 1213359117 -> I

I also doubt the lape version will auto update, so go download from: https://github.com/Elfyyy/OSR-Reflection

I will get the updating of the include finished soon as the current proxy method wasn't working all the time

Patriq

2015-01-08 11:37:08

Thanks glad to hear that :D

ineedbot

2015-01-08 22:42:08

From: elfyyy
Hooks updated to revision 69. Note: I didn't have my updater output in pascal script form, so only the lape version is updated. I have class now, but will be able to fix it later, here is a formatted log if you want to do it manually:

Starting Analysers..

|>Node = gn -> Extends java/lang/Object
^ UID................gn.ef -> J
^ Next...............gn.ew -> Lgn;
^ Prev...............gn.ew -> Lgn;

|>Cacheable = gl -> Extends gn
^ Next...............gl.cw -> Lgl;
^ Prev...............gl.cs -> Lgl;

|>Renderable = ca -> Extends gl
^ ModelHeight........ca.cn * 1931219915 -> I

|>Animable = h -> Extends ca

|>Model = cx -> Extends ca

|>AnimationSequence = ah -> Extends gl

|>NpcDefinition = an -> Extends gl
^ Actions............an.x -> [Ljava/lang/String;
^ Name...............an.c -> Ljava/lang/String;
^ ID.................an.k * -948022345 -> I
^ CombatLevel........an.e * 122508509 -> I

|>LinkedList = fb -> Extends java/lang/Object
^ Head...............fb.g -> Lgn;
^ Current............fb.j -> Lgn;

|>Actor = as -> Extends ca
^ Animation..........as.bq * 47963277 -> I
^ QueueX.............as.bi -> [I
^ QueueY.............as.bj -> [I
^ WorldX.............as.x * 2098213139 -> I
^ WorldY.............as.t * 949760027 -> I
^ SpokenText.........as.as -> Ljava/lang/String;
^ CombatCycle........as.ao * -132651787 -> I
^ Health.............as.ad * 1379153323 -> I
^ MaxHealth..........as.ab * -971553753 -> I
^ Interactingindex...as.af * -1599423227 -> I

|>Npc = az -> Extends as
^ Definition.........az.g -> Lan;

|>ObjectDefinition = al -> Extends gl
^ Actions............al.ap -> [Ljava/lang/String;
^ Name...............al.y -> Ljava/lang/String;

|>Buffer = df -> Extends gn

|>Widget = ec -> Extends gn
^ Children...........ec.dx -> [Lec;
^ GetIDs.............ec.dc -> [I
^ StackSizes.........ec.dk -> [I
^ ItemAmount.........ec.dw * -555895615 -> I
^ ItemID.............ec.ds * 1369596475 -> I
^ WidgetID...........ec.p * -1461666791 -> I
^ Name...............ec.bw -> Ljava/lang/String;

|>GameShell = ef -> Extends java/applet/Applet

|>Client = client -> Extends ef
^ LoopCycle..........client.v * -104058127 -> I
^ GetRegion..........client.dd -> Lcc;
^ GetPlane...........bs.hs * 1458950069 -> I
^ MenuCount..........client.ip * 41640419 -> I
^ MenuWidth..........bv.id * -1377744169 -> I
^ MenuHeight.........client.ib * -1129284701 -> I
^ MenuOptions........client.ii -> [Ljava/lang/String;
^ MenuActions........client.in -> [Ljava/lang/String;
^ IsMenuOpen.........client.hl -> Z
^ MenuX..............cg.hw * 743814199 -> I
^ MenuY..............cn.hv * 2006274017 -> I
^ BaseX..............w.cx * -1676109665 -> I
^ BaseY..............f.cr * -484655533 -> I
^ GetWidgets.........ec.g -> [[Lec;
^ GetLocalPlayer.....en.hn -> Lz;
^ TileSettings.......c.j -> [[[B
^ TileHeights........c.g -> [[[I
^ LocalNpcs..........client.bi -> [Laz;
^ NpcIndices.........client.bv -> [I
^ Sine...............co.az -> [I
^ Cosine.............co.ae -> [I
^ CameraPitch........ao.fd * 918936107 -> I
^ CameraYaw..........client.fo * 1221787769 -> I
^ CameraX............g.fk * -210829173 -> I
^ CameraY............p.fa * 974548229 -> I
^ CameraZ............y.fp * -918634937 -> I
^ GroundItems........client.hp -> [[[Lfb;
^ GameSettings.......fm.z -> [I
^ MapScale...........client.fi * -1469503859 -> I
^ MapAngle...........client.dt * 354393687 -> I
^ MapOffset..........client.dm * 102366111 -> I
^ CurrentLevels......client.hh -> [I
^ RealLevels.........client.hz -> [I
^ Experiences........client.he -> [I
^ Energy.............client.jo * 389552483 -> I
^ Weight.............client.js * -945500193 -> I
^ Rights.............client.jb * -400104091 -> I
^ CurrentWorld.......client.b * 1640745123 -> I
^ LoginState.........dz.s * 3166751 -> I
^ PlayerIndex........client.gb * 328712329 -> I

|>Region = cc -> Extends java/lang/Object
^ SceneTiles.........cc.c -> [[[Lcy;

|>BoundaryObject = cn -> Extends java/lang/Object
^ ID.................cn.l * 980769247 -> I

|>GameObject = cz -> Extends java/lang/Object
^ ID.................cz.p * -1841301077 -> I

|>GroundDecoration = ct -> Extends java/lang/Object
^ ID.................ct.g * 94810389 -> I

|>WallDecoration = cd -> Extends java/lang/Object
^ ID.................cd.d * -1468585503 -> I

|>SceneTile = cy -> Extends gn
^ GameObject.........cy.y -> [Lcz;
^ GroundDecoration...cy.n -> Lct;
^ WallDecoration.....cy.l -> Lcd;
^ BoundaryObject.....cy.w -> Lcn;

|>Player = z -> Extends as
^ Definition.........z.j -> Lfa;
^ Name...............z.g -> Ljava/lang/String;

|>Item = a -> Extends ca
^ ID.................a.g * -1952791939 -> I
^ StackSizes.........a.j * 1213359117 -> I

I also doubt the lape version will auto update, so go download from: https://github.com/Elfyyy/OSR-Reflection

I will get the updating of the include finished soon as the current proxy method wasn't working all the time


Great work, however, it seems the hooks are still outdated or wrong :/ I used someone elses getGameState hook and it returns 10-30 as normal.

Kyle

2015-01-08 22:55:07

From: ineedbot
Great work, however, it seems the hooks are still outdated or wrong :/ I used someone elses getGameState hook and it returns 10-30 as normal.


For the lape version or pascal script? Didn't have time today to change the hook naming on the pascal version so they are outdated still.

EDIT: Just saw the problem, guess I hooked the wrong login state(there are multiple which return different ints).. Updated hooks with correct one.

kingarabian

2015-01-09 00:13:49

Can someone post the login_state field and multiplies here? It's still not working (trying to convert from lape to pascalscript).

Here's what I have:

const
ReflectionRevision = '69';

{*Node*}
Node = 'ew';
Node_id = 'ef';
Node_next = 'ew';

{*LinkedList*}
LinkedList = 'j';
LinkedList_head = 'g';

{*Actor*}
Actor = 'as';
Actor_combatCycle = 'ao';
Actor_activeText = 'as';
Actor_animation = 'bq';
Actor_Health = 'ad';
Actor_maxHealth = 'ab';
Actor_interacting = 'af';
Actor_localX = 'x';
Actor_localY = 't';

{*Actor Multipliers*}
Actor_animation_Multiplier = 47963277;
Actor_combatCycle_Multiplier = -132651787;
Actor_Health_Multiplier = 1379153323;
Actor_maxHealth_Multiplier = -971553753;
Actor_interacting_Multiplier = -1599423227;
Actor_localX_Multiplier = 2098213139;
Actor_localY_Multiplier = 949760027;


{*Item*}
Item = 'q';
Item_id = 'l';
Item_stackSize = 'y';

{*Item Multipliers*}
Item_id_Multiplier = 1182524155;
Item_stackSize_Multiplier = -1258609723;

{*ObjectDefinition*}
ObjectDefinition = 'al';
ObjectDefinition_name = 'y';
ObjectDefinition_actions = 'ap';

{*NpcDefinition*}
NpcDefinition = 'an';
NpcDefinition_actions = 'x';
NpcDefinition_name = 'c';
NpcDefinition_id = 'k';
NpcDefinition_level = 'e';

{*NpcDefinition Multipliers*}
NpcDefinition_id_Multiplier = -948022345;
NpcDefinition_level_Multiplier = 122508509;

{*Npc*}
Npc = 'az';
Npc_definition = 'g';

{*Player*}
Player = 'z';
Player_definition = 'j';
Player_name = 'g';

{*Region*}
Region = 'cc';
Region_sceneTiles = 'c';

{*WallObject*}
WallObject = 'cd';
WallObject_hash = 'd';

{*WallObject Multipliers*}
WallObject_hash_Multiplier = -1468585503;

{*FloorDecorationObject*}
FloorDecorationObject = 'ct';
FloorDecorationObject_hash = 'g';
FloorDecorationObject_hash_Multiplier = 94810389;

{*BoundaryObject*}
BoundaryObject = 'cn';
BoundaryObject_hash = 'l';

{*BoundaryObject Multipliers*}
BoundaryObject_hash_Multiplier = 980769247;

{*SceneTile*}
SceneTile = 'cy';
SceneTile_WorldObjects = 'y';
SceneTile_WallObject = 'l';
SceneTile_BoundaryObject = 'w';
SceneTile_FloorObject = 'n';

{*WorldObject*}
WorldObject = 'cz';
WorldObject_hash = 'p';
WorldObject_Get_x = 'g';
WorldObject_Get_y = 'j';


{*WorldObject Multipliers*}
WorldObject_hash_Multiplier = 2122780761;
WorldObject_Get_x_Multiplier = 830319895;
WorldObject_Get_y_Multiplier = -449096723;

{*Widget*}
Widget = 'ec';
Widget_getRelativeX = 'i';
Widget_getRelativeY = 'x';
Widget_getActions = 'bj';
Widget_getID = 'dc';
Widget_getItems = 'dw';
Widget_getStackSizes = 'dk';
Widget_getText = 'bw';
Widget_height = 'k';
Widget_width = 'h';

{*Widget Multipliers*}
Widget_getRelativeX_Multiplier = -2146529991;
Widget_getRelativeY_Multiplier = 275292991;
Widget_getID_Multiplier = -166984235;
Widget_height_Multiplier = 1230511175;
Widget_width_Multiplier = 432045399;

{*Client*}
client_region = 'client.dd';
client_menuCount = 'client.ip';
client_baseY = 'f.cr';
client_baseX = 'w.cx';
client_widgets = 'ec.g';
client_menuActions = 'client.in';
client_player = 'en.hn';
client_plane = 'bs.hs';
client_groundSettings = 'c.j';
client_groundHeights = 'c.g';
client_menuWidth = 'bv.id';
client_isMenuOpen = 'client.hl';
client_cameraPitch = 'ao.fd';
client_cameraYaw = 'client.fo';
client_cameraX = 'g.fk';
client_cameraY = 'p.fa';
client_cameraZ = 'y.fp';
client_npcIndices = 'client.bv';
client_npcs = 'client.bi';
client_groundItems = 'client.hp';
client_login_state = 'dz.s';
client_settings = 'fm.z';
client_LoopCycle = 'client.v';
client_menuHeight = 'client.ib';
client_menuOptions = 'client.ii';
client_menuX = 'cg.hw';
client_menuY = 'cn.hv';
client_map_scale = 'client.fi';
client_map_offset = 'client.dm';
client_compassAngle = 'client.dt';
client_levels = 'client.hh';
client_real_levels = 'client.hz';
client_experiences = 'client.he';
client_run_energy = 'client.jo';
client_weight = 'client.js';

{*Client Multipliers*}
client_menuCount_Multiplier = 41640419;
client_baseY_Multiplier = -484655533;
client_baseX_Multiplier = -1676109665;
client_plane_Multiplier = 1458950069;
client_menuWidth_Multiplier = -1377744169;
client_cameraPitch_Multiplier = 918936107;
client_cameraYaw_Multiplier = 1221787769;
client_cameraX_Multiplier = -210829173;
client_cameraY_Multiplier = 974548229;
client_cameraZ_Multiplier = -918634937;
client_LoopCycle_Multiplier = -104058127;
client_menuHeight_Multiplier = -1129284701;
client_menuX_Multiplier = 743814199;
client_menuY_Multiplier = 2006274017;
client_login_state_Multiplier = 3166751;
client_map_scale_Multiplier = -1469503859;
client_map_offset_Multiplier = 102366111;
client_compassAngle_Multiplier = 354393687;
client_run_energy_Multiplier = 389552483;
client_weight_Multiplier = -945500193;

Some field values may be wrong as well since I couldn't find them updates output that Elfyyy provided.

Patriq

2015-01-09 01:46:03

Yeah basicly I tried to update them myself amd the gameState wasnt < 30 and > 10, I was wondering if it was my mistake but I guess not :D

Kyle

2015-01-09 08:13:14

Updated naming standard on the pascal version to my updater's standards and pushed the update to googlecode. Hopefully I didn't swap any names incorrectly, as I rushed through it :p If so just let me know and I'll fix it! Also, It should auto update the include, but depending on if the hooks update first or not, you may have to manually download the include from googlecode.

Hasselihas

2015-01-09 09:17:32

Correct me if I'm wrong but in the current Reflection.simba the IncludeRevision is 97 when it should be 98. Atleast for me at 97 it just keeps constantly trying to update the include. My knowledge is poor but atleast changing that fixed the issue for me.

Kyle

2015-01-09 09:25:50

From: Hasselihas
Correct me if I'm wrong but in the current Reflection.simba the IncludeRevision is 97 when it should be 98. Atleast for me at 97 it just keeps constantly trying to update the include. My knowledge is poor but atleast changing that fixed the issue for me.


Yes you are corect, I missed that :/

Kyle

2015-01-09 17:31:42

Thread updated, Lape version "Officially" released!

Note: Prosocks plugin is now required to use the lape version, download link in thread.

ineedbot

2015-01-09 17:54:16

From: elfyyy
Thread updated, Lape version "Officially" released!


Great news! I'll deff look into this.

Objects are not working… :/

program new;
{$DEFINE SMART}
{$i AeroLib/AeroLib.Simba}
{$i AeroLib/Reflection/Reflection.Simba}

var _objects : TReflectObjectArray;
_t : timer;

begin
initAL;
setupReflection;
_t.start;
_objects.Get(ObjGame, 20);
writeln(_objects);
writeln(_t.timeElapsed);
end.
returns
Compiled successfully in 4594 ms.
[=================================]
| < Aero|Library > |
| ---------------- |
| Version : 1.0 |
| Revision : 2 |
[=================================]
[AL] Initiating AeroLib...
[AL] Checking version...
[AL] Currently up to date.
[AL] Loaded 2 MSObjects.
[AL] Loaded 2 GroundItems.
Paired with SMART[6928]
[AL] Startup complete!
[Status] [Reflection] Reflection succesfully setup!
[]
36469
Successfully executed.

I am logged in and there are objects around me.

Fitta

2015-01-09 19:14:15

From: ineedbot
Great news! I'll deff look into this.

Objects are not working… :/

program new;
{$DEFINE SMART}
{$i AeroLib/AeroLib.Simba}
{$i AeroLib/Reflection/Reflection.Simba}

var _objects : TReflectObjectArray;
_t : timer;

begin
initAL;
setupReflection;
_t.start;
_objects.Get(ObjGame, 20);
writeln(_objects);
writeln(_t.timeElapsed);
end.
returns
Compiled successfully in 4594 ms.
[=================================]
| < Aero|Library > |
| ---------------- |
| Version : 1.0 |
| Revision : 2 |
[=================================]
[AL] Initiating AeroLib...
[AL] Checking version...
[AL] Currently up to date.
[AL] Loaded 2 MSObjects.
[AL] Loaded 2 GroundItems.
Paired with SMART[6928]
[AL] Startup complete!
[Status] [Reflection] Reflection succesfully setup!
[]
36469
Successfully executed.

I am logged in and there are objects around me.



procedure handle_Zapper;
var
Objs: TReflectObjectArray;
I: Integer;
T: Timer;
begin
If (ZapperTimer.timeElapsed < Me.Integers[Int_NextZapperCheck])or(Not UseZappers)or(Failed) then
Exit;

T.start;
Objs.Get(ObjGame, 26256, 24);

For I:=0 to High(Objs)do
If (Objs[I].ID = 26256)then
begin
Debug('Found zapper -> Clicking', False);
Me.Integers[Int_Prio_NextPot] := 18;
handle_flickPrayer;
If Reflect.Tiles.DistanceFromTile(Objs[I].Tile) > 5 then
locPlayer.BlindWalkMM(Objs[I].Tile, 3);

handle_flickPrayer;
drink_Potions;
if interactTile(Objs[I].Tile, 'Activate', 'Activate', 5, 5, mouse_Left, 170+Random(20))then
begin
Debug('Activated Zapper!', False);
Me.Integers[Int_ZappersClicked] := Me.Integers[Int_ZappersClicked] + 1;
Me.Integers[Int_NextZapperCheck] := 30000+Random(10000);
Break;
end;
end;

Me.Integers[Int_NextZapperCheck] := 9000+Random(3000);
ZapperTimer.start;
end;

^ works

ineedbot

2015-01-09 19:16:11

From: Fitta

procedure handle_Zapper;
var
Objs: TReflectObjectArray;
I: Integer;
T: Timer;
begin
If (ZapperTimer.timeElapsed < Me.Integers[Int_NextZapperCheck])or(Not UseZappers)or(Failed) then
Exit;

T.start;
Objs.Get(ObjGame, 26256, 24);

For I:=0 to High(Objs)do
If (Objs[I].ID = 26256)then
begin
Debug('Found zapper -> Clicking', False);
Me.Integers[Int_Prio_NextPot] := 18;
handle_flickPrayer;
If Reflect.Tiles.DistanceFromTile(Objs[I].Tile) > 5 then
locPlayer.BlindWalkMM(Objs[I].Tile, 3);

handle_flickPrayer;
drink_Potions;
if interactTile(Objs[I].Tile, 'Activate', 'Activate', 5, 5, mouse_Left, 170+Random(20))then
begin
Debug('Activated Zapper!', False);
Me.Integers[Int_ZappersClicked] := Me.Integers[Int_ZappersClicked] + 1;
Me.Integers[Int_NextZapperCheck] := 30000+Random(10000);
Break;
end;
end;

Me.Integers[Int_NextZapperCheck] := 9000+Random(3000);
ZapperTimer.start;
end;

^ works


Oh jeez the args changed, Ok i'll see if I can get it to work.

I guess _objects.Get(ObjGame, 20) would look for a object with ID:20 in a 103 radius.

Kyle

2015-01-09 19:16:42

From: ineedbot
…


procedure TReflectObjectArray.Get(__Object: TObjType; Obj: Variant; Distance: Integer = 103);

It is meant to be used like:

_objects.Get(ObjGame, 'Tree' , 20);

If you want all objects:

_objects.GetAll(ObjGame, 20);

I guess lape considers an Enum as a variant and didn't error..

Take a peek at the tutorial, I changed a lot of stuff since the version you were using.

EDIT:Damn, ninja'd by a @Fitta;

ineedbot

2015-01-09 19:26:31

Alright, its working nicely now.

However;
program new;
{$DEFINE SMART}
{$i AeroLib/AeroLib.Simba}
{$i AeroLib/Reflection/Reflection.Simba}

function R_Underattack:Boolean;
var _me : TReflectLocalPlayer;
begin
_me.Create;
result := _me.UnderAttack;
end;

begin
initAL;
setupReflection;
while (true) do
writeln(R_Underattack);
end.
returns
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
And I'm just bankstanding, clearly not in combat or under attack.

Fitta

2015-01-09 19:40:09

From: ineedbot
Alright, its working nicely now.

However;
program new;
{$DEFINE SMART}
{$i AeroLib/AeroLib.Simba}
{$i AeroLib/Reflection/Reflection.Simba}

function R_Underattack:Boolean;
var _me : TReflectLocalPlayer;
begin
_me.Create;
result := _me.UnderAttack;
end;

begin
initAL;
setupReflection;
while (true) do
writeln(R_Underattack);
end.
returns
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
False
True
And I'm just bankstanding, clearly not in combat or under attack.


if you're looking at when YOU are interacted with, use LocalPlayers -> Interacting.
Pretty sure UnderAttack uses LoopCycle?

EDIT: Also for the love of yourself, only .create once(make it a global).
Read up on the tutorial, a lot has changed/added/deleted/re-named.
It's an amazing include and I've had a really nice time trying this sweetheart out.

ineedbot

2015-01-09 20:15:40

From: Fitta
if you're looking at when YOU are interacted with, use LocalPlayers -> Interacting.
Pretty sure UnderAttack uses LoopCycle?

EDIT: Also for the love of yourself, only .create once(make it a global).
Read up on the tutorial, a lot has changed/added/deleted/re-named.
It's an amazing include and I've had a really nice time trying this sweetheart out.


Oh ok, i guess the TReflectLocalPlayer.Create must be global, because now its working fine, I wonder why it oscillates when I update TReflectLocalPlayer.Create, anyway, thanks for the help

Fitta

2015-01-09 20:22:34

From: ineedbot
Oh ok, i guess the TReflectLocalPlayer.Create must be global, because now its working fine, I wonder why it oscillates when I update TReflectLocalPlayer.Create, anyway, thanks for the help


Important Note: In order to handle memory usage smarter, whenever we log into rs, we must call:
Simba Code:
MyPlayer.Create;

^from tutorial

Kyle

2015-01-09 21:43:57

Had a bit of a problem with the prosocks plugin. Please redownload the current version of it from the thread. Also, the include may or may not auto update correctly since there was also a problem with the simba function. If it's a problem just re download the entire include from github again, shouldn't have anymore problems.

We now only have one In combat function: TReflectLocalPlayer.UnderAttack; This returns true if our player has a hp bar above our head, no other time. If you need a more specific in combat function, there are many ways to do it in your scripts..

ineedbot

2015-01-09 22:51:17

Going off the results of object finding and how long it took from a month ago;

It took: 0ms for (1 * 1) Tiles
It took: 0ms for (2 * 2) Tiles
It took: 0ms for (3 * 3) Tiles
It took: 0ms for (4 * 4) Tiles
It took: 0ms for (5 * 5) Tiles
It took: 0ms for (6 * 6) Tiles
It took: 15ms for (7 * 7) Tiles
It took: 16ms for (8 * 8) Tiles
It took: 16ms for (9 * 9) Tiles
It took: 15ms for (10 * 10) Tiles
It took: 16ms for (11 * 11) Tiles
It took: 15ms for (12 * 12) Tiles
It took: 31ms for (13 * 13) Tiles
It took: 16ms for (14 * 14) Tiles
It took: 15ms for (15 * 15) Tiles
It took: 31ms for (16 * 16) Tiles
It took: 31ms for (17 * 17) Tiles
It took: 32ms for (18 * 18) Tiles
It took: 32ms for (19 * 19) Tiles
It took: 46ms for (20 * 20) Tiles
It took: 47ms for (21 * 21) Tiles
It took: 31ms for (22 * 22) Tiles
It took: 47ms for (23 * 23) Tiles
It took: 63ms for (24 * 24) Tiles
It took: 62ms for (25 * 25) Tiles
It took: 47ms for (26 * 26) Tiles
It took: 79ms for (27 * 27) Tiles
It took: 93ms for (28 * 28) Tiles
It took: 78ms for (29 * 29) Tiles
It took: 78ms for (30 * 30) Tiles
It took: 94ms for (31 * 31) Tiles
It took: 125ms for (32 * 32) Tiles
It took: 109ms for (33 * 33) Tiles
It took: 109ms for (34 * 34) Tiles
It took: 125ms for (35 * 35) Tiles
It took: 156ms for (36 * 36) Tiles
It took: 141ms for (37 * 37) Tiles
It took: 140ms for (38 * 38) Tiles
It took: 156ms for (39 * 39) Tiles
It took: 188ms for (40 * 40) Tiles
It took: 172ms for (41 * 41) Tiles
It took: 172ms for (42 * 42) Tiles
It took: 188ms for (43 * 43) Tiles
It took: 219ms for (44 * 44) Tiles
It took: 219ms for (45 * 45) Tiles
It took: 219ms for (46 * 46) Tiles
It took: 234ms for (47 * 47) Tiles
It took: 250ms for (48 * 48) Tiles
It took: 250ms for (49 * 49) Tiles
It took: 266ms for (50 * 50) Tiles
It took: 297ms for (51 * 51) Tiles
It took: 328ms for (52 * 52) Tiles
It took: 312ms for (53 * 53) Tiles
It took: 312ms for (54 * 54) Tiles
It took: 344ms for (55 * 55) Tiles
It took: 360ms for (56 * 56) Tiles
It took: 344ms for (57 * 57) Tiles
It took: 344ms for (58 * 58) Tiles
It took: 375ms for (59 * 59) Tiles
It took: 422ms for (60 * 60) Tiles
It took: 422ms for (61 * 61) Tiles
It took: 422ms for (62 * 62) Tiles
It took: 437ms for (63 * 63) Tiles
It took: 469ms for (64 * 64) Tiles
It took: 468ms for (65 * 65) Tiles
It took: 485ms for (66 * 66) Tiles
It took: 500ms for (67 * 67) Tiles
It took: 532ms for (68 * 68) Tiles
It took: 547ms for (69 * 69) Tiles
It took: 563ms for (70 * 70) Tiles
It took: 610ms for (71 * 71) Tiles
It took: 609ms for (72 * 72) Tiles
It took: 609ms for (73 * 73) Tiles
It took: 609ms for (74 * 74) Tiles
It took: 657ms for (75 * 75) Tiles
It took: 750ms for (76 * 76) Tiles
It took: 719ms for (77 * 77) Tiles
It took: 703ms for (78 * 78) Tiles
It took: 766ms for (79 * 79) Tiles
It took: 781ms for (80 * 80) Tiles
It took: 781ms for (81 * 81) Tiles
It took: 797ms for (82 * 82) Tiles
It took: 859ms for (83 * 83) Tiles
It took: 875ms for (84 * 84) Tiles
It took: 922ms for (85 * 85) Tiles
It took: 859ms for (86 * 86) Tiles
It took: 906ms for (87 * 87) Tiles
It took: 969ms for (88 * 88) Tiles
It took: 953ms for (89 * 89) Tiles
It took: 969ms for (90 * 90) Tiles
It took: 1031ms for (91 * 91) Tiles
It took: 1094ms for (92 * 92) Tiles
It took: 1078ms for (93 * 93) Tiles
It took: 1078ms for (94 * 94) Tiles
It took: 1140ms for (95 * 95) Tiles
It took: 1203ms for (96 * 96) Tiles
It took: 1219ms for (97 * 97) Tiles
It took: 1203ms for (98 * 98) Tiles
It took: 1250ms for (99 * 99) Tiles
It took: 1282ms for (100 * 100) Tiles
It took: 1297ms for (101 * 101) Tiles
It took: 1281ms for (102 * 102) Tiles
It took: 1313ms for (103 * 103) Tiles
It took: 1360ms for (104 * 104) Tiles

Now I'm doing;
program new;
{$DEFINE SMART}
{$i AeroLib/AeroLib.Simba}
{$i AeroLib/Reflection/Reflection.Simba}

var _me : TReflectObjectArray;
_t : timer;

begin
initAL;
setupReflection;
_t.start;
_me.GetAll(ObjGame, 20);
writeln(_me);
writeln(_t.timeElapsed);
end.
result:
[Status] [Reflection] Reflection succesfully setup!
[{NAME = Tree Stump, ACTIONS = [null, null, null, null, null], ID = 9471, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3087, Y = 3231}}, {NAME = Millstones, ACTIONS = [null, null, null, null, null], ID = 1778, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3086, Y = 3228}}, {NAME = Tree Stump, ACTIONS = [null, null, null, null, null], ID = 9471, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3088, Y = 3231}}, {NAME = Tree Stump, ACTIONS = [null, null, null, null, null], ID = 9471, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3087, Y = 3232}}, {NAME = Willow, ACTIONS = [Chop down, null, null, null, null], ID = 11761, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3088, Y = 3228}}, {NAME = Tree Stump, ACTIONS = [null, null, null, null, null], ID = 9471, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3088, Y = 3232}}, {NAME = Willow, ACTIONS = [Chop down, null, null, null, null], ID = 11761, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3089, Y = 3228}}, {NAME = Willow, ACTIONS = [Chop down, null, null, null, null], ID = 11761, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3088, Y = 3227}}, {NAME = Willow, ACTIONS = [Chop down, null, null, null, null], ID = 11761, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3089, Y = 3227}}, {NAME = Willow, ACTIONS = [Chop down, null, null, null, null], ID = 11755, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3088, Y = 3234}}, {NAME = Willow, ACTIONS = [Chop down, null, null, null, null], ID = 11755, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3089, Y = 3234}}, {NAME = Willow, ACTIONS = [Chop down, null, null, null, null], ID = 11759, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3086, Y = 3235}}, {NAME = Willow, ACTIONS = [Chop down, null, null, null, null], ID = 11759, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3085, Y = 3235}}, {NAME = Willow, ACTIONS = [Chop down, null, null, null, null], ID = 11755, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3088, Y = 3235}}, {NAME = Willow, ACTIONS = [Chop down, null, null, null, null], ID = 11755, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3089, Y = 3235}}, {NAME = Willow, ACTIONS = [Chop down, null, null, null, null], ID = 11759, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3086, Y = 3236}}, {NAME = Rock, ACTIONS = [null, null, null, null, null], ID = 10788, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3080, Y = 3231}}, {NAME = Willow, ACTIONS = [Chop down, null, null, null, null], ID = 11759, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3085, Y = 3236}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10790, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3092, Y = 3232}}, {NAME = Rock, ACTIONS = [null, null, null, null, null], ID = 10788, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3080, Y = 3232}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10790, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3092, Y = 3233}}, {NAME = Rock, ACTIONS = [null, null, null, null, null], ID = 10788, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3079, Y = 3231}}, {NAME = Party Balloon, ACTIONS = [Burst, null, null, null, null], ID = 119, HEIGHT = 1, WIDTH = 1, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3085, Y = 3237}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10790, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3093, Y = 3232}}, {NAME = Rock, ACTIONS = [null, null, null, null, null], ID = 10788, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3079, Y = 3232}}, {NAME = Willow, ACTIONS = [Chop down, null, null, null, null], ID = 11763, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3084, Y = 3237}}, {NAME = Willow, ACTIONS = [Chop down, null, null, null, null], ID = 11763, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3083, Y = 3237}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10790, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3093, Y = 3233}}, {NAME = Rock, ACTIONS = [null, null, null, null, null], ID = 10787, HEIGHT = 1, WIDTH = 1, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3079, Y = 3233}}, {NAME = Willow, ACTIONS = [Chop down, null, null, null, null], ID = 11763, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3084, Y = 3238}}, {NAME = Daisies, ACTIONS = [null, null, null, null, null], ID = 1189, HEIGHT = 1, WIDTH = 1, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3094, Y = 3233}}, {NAME = Willow, ACTIONS = [Chop down, null, null, null, null], ID = 11763, HEIGHT = 2, WIDTH = 2, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3083, Y = 3238}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10790, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3092, Y = 3223}}, {NAME = Rock, ACTIONS = [null, null, null, null, null], ID = 10787, HEIGHT = 1, WIDTH = 1, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3077, Y = 3232}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10790, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3093, Y = 3223}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10791, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3094, Y = 3224}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10790, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3092, Y = 3222}}, {NAME = Rock, ACTIONS = [null, null, null, null, null], ID = 10788, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3078, Y = 3236}}, {NAME = Daisies, ACTIONS = [null, null, null, null, null], ID = 1189, HEIGHT = 1, WIDTH = 1, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3096, Y = 3228}}, {NAME = Daisies, ACTIONS = [null, null, null, null, null], ID = 1189, HEIGHT = 1, WIDTH = 1, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3096, Y = 3233}}, {NAME = Rock, ACTIONS = [null, null, null, null, null], ID = 10788, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3078, Y = 3237}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10791, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3094, Y = 3223}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10790, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3093, Y = 3222}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10791, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3095, Y = 3224}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10790, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3092, Y = 3221}}, {NAME = Rock, ACTIONS = [null, null, null, null, null], ID = 10788, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3077, Y = 3236}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10790, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3094, Y = 3222}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10791, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3095, Y = 3223}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10790, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3093, Y = 3221}}, {NAME = Rock, ACTIONS = [null, null, null, null, null], ID = 10788, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3077, Y = 3237}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10790, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3092, Y = 3220}}, {NAME = Daisies, ACTIONS = [null, null, null, null, null], ID = 1189, HEIGHT = 1, WIDTH = 1, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3096, Y = 3236}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10790, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3094, Y = 3221}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10790, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3095, Y = 3222}}, {NAME = Stones, ACTIONS = [null, null, null, null, null], ID = 10793, HEIGHT = 1, WIDTH = 1, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3096, Y = 3223}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10790, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3093, Y = 3220}}, {NAME = Boulder, ACTIONS = [null, null, null, null, null], ID = 10790, HEIGHT = 2, WIDTH = 2, WALKABLE = True, OBJECTTYPE = objGame, TILE = {X = 3095, Y = 3221}}, {NAME = Bank Deposit Box, ACTIONS = [Deposit, null, null, null, null], ID = 11747, HEIGHT = 1, WIDTH = 1, WALKABLE = False, OBJECTTYPE = objGame, TILE = {X = 3094, Y = 3240}}]
1313
Successfully executed.

20*20 is taking 1313ms… when a month ago it was 46ms…

Kyle

2015-01-09 23:23:26

From: ineedbot
…


Hmm, wonder why I didn't notice that earlier :/ Will have a fix in a bit :D

EDIT: Fix Pushed to github

ineedbot

2015-01-09 23:38:22

From: elfyyy
Hmm, wonder why I didn't notice that earlier :/ Will have a fix in a bit :D


Alright cool, but for the life of me… i cannot get the TReflectActor functions to consistently give a solid result (it is being called on TReflectLocalPlayer)… The only time it really works is when I start the script with a fresh SMART client. When I logout on the account and allow the script to log back in, it is no longer consistently. Even calling TReflectLocalPlayer.Create after the second login or not. Even on the first login, I stop the script, replay and its no longer consistent.

Edit: Elfyyy helped me out, thanks! I found the problem, and is now fixed and was purely in my script (oops). However could you add a failsafe check? Like if not LocalPlayer.Created then LocalPlayer.Create would be great, because what if the script lags out of world, but doesn't need to log back in? The script wouldn't of know to call LocalPlayer.Create again.

Also could you add a 'safe' walk path procedure? So you can path walk through tricky areas (waits for the player to stop moving, not FFlag(0)).

TReflectLocalPlayer.GetPlayerIndex isn't returning the correct playerIndex, also it changes +-1 for no reason randomly.

alexes

2015-01-10 10:03:33

I'm having trouble with the pascal version.

After update I'm getting these errors on Abyss runecrafter v1.045, which worked fine before the update.

Abyss Runecrafter V1.045 (1).simba(250:63): Unknown identifier 'client_widgets' at line 251
Abyss Runecrafter V1.045 (1).simba(134:3): Variable 'C' never used at line 133
Abyss Runecrafter V1.045 (1).simba(134:3): Variable 'T' never used at line 133
Abyss Runecrafter V1.045 (1).simba(134:3): Variable 'I' never used at line 133
Compiling failed.

Kyle

2015-01-10 10:08:08

From: alexes
I'm having trouble with the pascal version.

After update I'm getting these errors on Abyss runecrafter v1.045, which worked fine before the update.

Abyss Runecrafter V1.045 (1).simba(250:63): Unknown identifier 'client_widgets' at line 251
Abyss Runecrafter V1.045 (1).simba(134:3): Variable 'C' never used at line 133
Abyss Runecrafter V1.045 (1).simba(134:3): Variable 'T' never used at line 133
Abyss Runecrafter V1.045 (1).simba(134:3): Variable 'I' never used at line 133
Compiling failed.


Please re download the include, replacing the version you had..

alexes

2015-01-10 10:28:59

From: elfyyy
Please re download the include, replacing the version you had..


Already did, also reinstalled simba and everything. And I keep getting this error.

Kyle

2015-01-10 10:35:53

From: alexes
Already did, also reinstalled simba and everything. And I keep getting this error.


You're doing something wrong, maybe not renaming the new version correctly or something. As many people have already done it and it's working, also I just double checked myself and dl'd the googlecode version and it works fine..

EDIT: Fixed player index problem..

alexes

2015-01-10 10:41:16

From: elfyyy
You're doing something wrong, maybe not renaming the new version correctly or something. As many people have already done it and it's working, also I just double checked myself and dl'd the googlecode version and it works fine..


Okay, thank you. I will recheck what i could have done wrong.

Fitta

2015-01-10 12:32:25

From: alexes
Okay, thank you. I will recheck what i could have done wrong.


If you can't figure it out, shoot me a pm and I'll help you @ teamviewer

Fitta

2015-01-10 19:24:33

From: Fitta
If you can't figure it out, shoot me a pm and I'll help you @ teamviewer


It compiles, the error was not with reflection. It was that the script is outdated :(

Everybody, please notice that there's a difference when a script errors and it doesn't open another file, and when it errors and opens a new tab in SIMBA. Usually if it DOES NOT open a new tab, it's the script fault!!! However, if there's a new tab opened that's called something along the lines of "text.simba", "hooks.simba" then go ahead and post the living spirit out of Elfyy :)

However, I updated the script for you. It should run, no idea if it still will work though @ Look PM

ineedbot

2015-01-11 17:52:50

Heres an updated version of ID Display to work with the latest include (lape). Feel free to do whatever with it.

.IsAnimating gives a access violation error, on .GetAnimation.

Kyle

2015-01-14 09:19:10

I would like to welcome @akarigar; as a new dev for the include! He has a lot of previous experience with reflection for rs3 and will be a massive help to the project. So now there is another person to be able to yell at when something goes wrong!!

With his help, we now have widget positioning 100% completed, and will start working on finishing up the rest of the include. I plan on starting gametabs today and seeing how far that goes and maybe work on bank later on. I also have moved the pascal script version to github and will be deciding on the best way to merge people from the googlecode version to the github version. As always, if you have any bugs, it is best if you could make a issue/pull request on github https://github.com/Elfyyy/OSR-Reflection

Also, if you have any suggestions on stuff to be added/changed to the include, please also make a issue on the github repo as-well.

EDIT: Just saw this:
From: ineedbot
.IsAnimating gives a access violation error, on .GetAnimation.


Fixed, will push to github in a bit.

levunit

2015-01-14 18:37:55

Woo! A new dev! Welcome ^^.

Also, I was doing some testing around, and found that MyPlayer.WalkPathMM doesnt work. Its not the tiles I'm using because I cycled through them with MyPlayer.WalkToTileMM and it worked fine. Just a heads up ^^

Kyle

2015-01-14 21:41:46

From: levunit
Woo! A new dev! Welcome ^^.

Also, I was doing some testing around, and found that MyPlayer.WalkPathMM doesnt work. Its not the tiles I'm using because I cycled through them with MyPlayer.WalkToTileMM and it worked fine. Just a heads up ^^


Yeah, I'm aware of the problem(s) with the WalkPath.. We'll get to fixing it soon!

Botbotpotpot

2015-01-15 03:39:13

Hi, I would like to learn a bit on using reflection to write my own scripts. Are there any tutorials that focus specifically in reflection?

Kyle

2015-01-15 08:06:08

From: Botbotpotpot
Hi, I would like to learn a bit on using reflection to write my own scripts. Are there any tutorials that focus specifically in reflection?


In this thread topic there are links to two different tutorials..

Kyle

2015-01-15 08:54:40

Hooks updated to revision #70

I only updated the versions on github as my git for googlecode isn't working atm, so if you are using the pascalscript version, just downlaod the entire new include for github:)

215 Classes Found 

Beginning Deob..
Removed 2595 Dummy Methods (1847.63 ms)
Reordered 2385 Multiplier Instructions (147.86 ms)
Reordered 2072 Arithmetic Statements (1426.41 ms)
Removed 4275 Exceptions (1198.06 ms)
Removed 987 Opaque Predicates (294.75 ms)
Removed 540 Dummy Parameters (485.34 ms)
Total Deob took 5400.06 ms
Deob Finished..

Starting Analysers..

Analysers Finished..

|>Node = gs -> Extends java/lang/Object
^ UID................gs.eb -> J
^ Next...............gs.er -> Lgs;
^ Prev...............gs.ea -> Lgs;
Identified 3 / 3 Fields

|>Cacheable = ga -> Extends gs
^ Next...............ga.ct -> Lga;
^ Prev...............ga.cm -> Lga;
Identified 2 / 2 Fields

|>Renderable = cj -> Extends ga
^ ModelHeight........cj.cn * 263061173 -> I
Identified 1 / 1 Fields

|>Animable = k -> Extends cj

|>Model = ck -> Extends cj

|>AnimationSequence = ar -> Extends ga

|>NpcDefinition = as -> Extends ga
^ Actions............as.o -> [Ljava/lang/String;
^ Name...............as.p -> Ljava/lang/String;
^ ID.................as.h * 1088210017 -> I
^ CombatLevel........as.d * 1673662501 -> I
Identified 4 / 4 Fields

|>LinkedList = fr -> Extends java/lang/Object
^ Head...............fr.x -> Lgs;
^ Current............fr.v -> Lgs;
Identified 2 / 2 Fields

|>Actor = ab -> Extends cj
^ Animation..........ab.bk * 1388441449 -> I
^ QueueX.............ab.bm -> [I
^ QueueY.............ab.bi -> [I
^ WorldX.............ab.o * -127655233 -> I
^ WorldY.............ab.z * 1441948399 -> I
^ SpokenText.........ab.ab -> Ljava/lang/String;
^ CombatCycle........ab.av * 1519043073 -> I
^ Health.............ab.al * 1760173349 -> I
^ MaxHealth..........ab.af * -1082016153 -> I
^ Interactingindex...ab.aj * -860894253 -> I
Identified 10 / 10 Fields

|>Npc = am -> Extends ab
^ Definition.........am.x -> Las;
Identified 1 / 1 Fields

|>ObjectDefinition = ah -> Extends ga
^ Actions............ah.ac -> [Ljava/lang/String;
^ Name...............ah.q -> Ljava/lang/String;
Identified 2 / 2 Fields

|>Buffer = dm -> Extends gs

|>Widget = et -> Extends gs
^ Children...........et.ds -> [Let;
^ InvIDs.............et.dx -> [I
^ StackSizes.........et.de -> [I
^ ItemAmount.........et.dr * 1109214045 -> I
^ ItemID.............et.df * 454191437 -> I
^ WidgetID...........et.b * -1884642563 -> I
^ Name...............et.bu -> Ljava/lang/String;
^ GetText............et.bj -> Ljava/lang/String;
^ IsHidden...........et.y -> Z
^ AbsoluteX..........et.r * -230957739 -> I
^ AbsoluteY..........et.x * 523444805 -> I
^ RelativeX..........et.f * -545121905 -> I
^ RelativeY..........et.t * 1803355887 -> I
^ Width..............et.o * -538762125 -> I
^ Height.............et.z * 1989741601 -> I
^ ParentID...........et.d * -450458375 -> I
^ ScrollX............et.a * 830204599 -> I
^ ScrollY............et.n * -628261171 -> I
^ BoundsIndex........et.dn * -1657773883 -> I
Identified 19 / 19 Fields

|>WidgetNode = e -> Extends gs
^ ID.................e.x * 35736987 -> I
Identified 1 / 1 Fields

|>HashTable = fd -> Extends java/lang/Object
^ Buckets............fd.v -> [Lgs;
^ Size...............fd.x -> I
Identified 2 / 2 Fields

|>GameShell = eb -> Extends java/applet/Applet

|>Client = client -> Extends eb
^ LoopCycle..........client.r * 1601901809 -> I
^ Region.............ap.du -> Lcq;
^ Plane..............dp.hf * 2084826697 -> I
^ MenuCount..........client.in * -918571417 -> I
^ MenuWidth..........fa.iu * -1775861983 -> I
^ MenuHeight.........by.ik * -2033507929 -> I
^ MenuOptions........client.ia -> [Ljava/lang/String;
^ MenuActions........client.ij -> [Ljava/lang/String;
^ IsMenuOpen.........client.hc -> Z
^ MenuX..............cv.hp * -1340196463 -> I
^ MenuY..............al.hr * 1643010459 -> I
^ BaseX..............f.ck * -2042408279 -> I
^ BaseY..............af.cx * -357380903 -> I
^ Widgets............et.v -> [[Let;
^ LocalPlayer........k.hu -> Lm;
^ LocalPlayers.......client.ge -> [Lm;
^ TileSettings.......p.v -> [[[B
^ TileHeights........p.x -> [[[I
^ LocalNpcs..........client.bm -> [Lam;
^ NpcIndices.........client.bc -> [I
^ Sine...............cf.am -> [I
^ Cosine.............cf.au -> [I
^ CameraPitch........u.ft * -155365477 -> I
^ CameraYaw..........et.fy * 1083245601 -> I
^ CameraX............eb.fc * -1123644797 -> I
^ CameraY............cb.fq * 1664431117 -> I
^ CameraZ............ah.fz * -1136825067 -> I
^ GroundItems........client.hs -> [[[Lfr;
^ GameSettings.......fx.m -> [I
^ MapScale...........client.fe * -44176843 -> I
^ MapAngle...........client.dy * -1236362935 -> I
^ MapOffset..........client.dn * -1344761283 -> I
^ CurrentLevels......client.hz -> [I
^ RealLevels.........client.hw -> [I
^ Experiences........client.ht -> [I
^ Energy.............client.jw * 1072163223 -> I
^ Weight.............client.jm * -1336289845 -> I
^ Rights.............client.jc * 1705169487 -> I
^ CurrentWorld.......client.h * -1552976471 -> I
^ LoginState.........client.s * 672893323 -> I
^ PlayerIndex........client.hm * -1028529055 -> I
^ WidgetPositionX....client.lg -> [I
^ WidgetPositionY....client.ly -> [I
^ WidgetWidths.......client.li -> [I
^ WidgetHeights......client.lx -> [I
^ WidgetNodeCache....client.jy -> Lfd;
Identified 46 / 46 Fields

|>Region = cq -> Extends java/lang/Object
^ SceneTiles.........cq.p -> [[[Lcb;
Identified 1 / 1 Fields

|>BoundaryObject = cn -> Extends java/lang/Object
^ ID.................cn.i * -1221649549 -> I
Identified 1 / 1 Fields

|>GameObject = ce -> Extends java/lang/Object
^ ID.................ce.b * -1354640943 -> I
Identified 1 / 1 Fields

|>GroundDecoration = cw -> Extends java/lang/Object
^ ID.................cw.p * -2092519493 -> I
Identified 1 / 1 Fields

|>WallDecoration = cp -> Extends java/lang/Object
^ ID.................cp.l * 1581896175 -> I
Identified 1 / 1 Fields

|>SceneTile = cb -> Extends gs
^ GameObject.........cb.q -> [Lce;
^ GroundDecoration...cb.u -> Lcw;
^ WallDecoration.....cb.i -> Lcp;
^ BoundaryObject.....cb.j -> Lcn;
Identified 4 / 4 Fields

|>Player = m -> Extends ab
^ Definition.........m.v -> Lfq;
^ Name...............m.x -> Ljava/lang/String;
Identified 2 / 2 Fields

|>Item = n -> Extends cj
^ ID.................n.x * -1429811179 -> I
^ StackSizes.........n.v * 823893833 -> I
Identified 2 / 2 Fields

Identified 25 / 25 Classes..
Identified 106 / 106 Fields..


Process finished with exit code 0

kingarabian

2015-01-15 14:18:35

Thanks,elfyyy.

Kyle

2015-01-16 16:49:23

All development for the pascal script version on the include is now moved to github. If you are still using the version on googlecode you will receive a message to download the version on github. The only additional item needed is prosocks, which can be downloaded from this thread's under "Quick Setup"..

The lape version is coming along nicely, gametabs and chat are now mostly finished. We are going to start working on making the include non dependent on Aerolib and additional functions to various sections. As always, please report any bugs/suggestions here, or feel free to make an issue on github!

Kyle

2015-01-18 13:24:33

We just pushed a important update to github. The include is now 100% separate from Aerolib. This means that you can use the include with Aerolib or completely alone as a standalone include. We still have to finish the login functions to be able to use it as a standalone, but it loads smart and can use all functions within it to script with. We aren't going to increase the revision to auto update for a little bit as since almost every file was changed, I wan't to make sure nothing was overlooked.

Other items that have been pushed since last revision increase:
Gametabs.simba now has CombatOptions, WornEquipment and logout functions.
Widgets.simba has full location support with Widget.Interact.
KeyBoard.simba and Mouse.simba: Used by Reflect.Mouse.Click() for example. (Thanks to @BenLand100; & @Flight; for Mouse movements)

We are hoping to have the include virtually complete by the end of the week, as other than login functions/world hoping, we just need to add some various small stuff here and there.

I will also be updating the Basic tutorial in the next day or so, and will release the Advanced one after I make sure we aren't changing anymore naming conventions(Especially with Widgets)

Without including Aerolib, calling: SetupReflection; will load smart if not already open.