Lord of the rings online

You may request or share scripts for MicroMacro in this forum.
Message
Author
User avatar
MiesterMan
Posts: 543
Joined: Tue Jul 06, 2010 9:15 pm
Location: Between the Second and Third Circles of Hell

Re: Lord of the rings online

#21 Post by MiesterMan » Fri Dec 23, 2011 8:03 pm

Administrator wrote:Easiest way to find enemy level offsets and other stuff that is unlikely to change is to make assumptions. First find it for the player class, and then you can often assume that enemies and NPCs use those same offsets.

If not, then you can first find something that does change, such as HP, then find it's offset. Lets say the address for HP is 0x02DB4100 and the HP offset is 0x100. You can then use the start and stop addresses 0x02DB4000 and 0x02DB5000 (just make this up, but make it at least 0x1000 higher than the start). Now search for their level and it should only return a few results (often only one).
Three locations with CurrentHP,MaxHP,MaxHP show up when you scan. Two of them have CurrentMP,MaxMP,MaxMP offset by 0x100 after them.

Here's what I want to do. You know how for a 4 byte register, cheatengine can detect when something changes with the debugger? I want to do that for a small region of memory around the found HP so I can track what changes when I do what. Do you know any methods I can use to do this?

Edited: A large portion of that first paragraph was incorrect so I removed it.
Last edited by MiesterMan on Mon Dec 26, 2011 9:36 am, edited 1 time in total.

User avatar
Administrator
Site Admin
Posts: 5306
Joined: Sat Jan 05, 2008 4:21 pm

Re: Lord of the rings online

#22 Post by Administrator » Fri Dec 23, 2011 9:34 pm

You might be able to place a breakpoint and actually run the game through Olly.

User avatar
MiesterMan
Posts: 543
Joined: Tue Jul 06, 2010 9:15 pm
Location: Between the Second and Third Circles of Hell

Re: Lord of the rings online

#23 Post by MiesterMan » Fri Dec 23, 2011 9:38 pm

Quick update: I managed to find target hp and it had actual offsets in the info but they led to nil. After 4 offsets, {0,0,34,34} I hit a dead end so I tried a pointer scan. Pointer scans returned something completely different and nothing useful.

Method to find target hp: Target yourself! Worked amazingly well. As soon as I found my own HP, two of the values were actually target hp and target max hp.

The game still uses a launcher but I'll try and see if I can do it through Olly. If nothing else I can attach and try to figure it out.

Edit: While I did find these offsets using the manual method and I'd like to believe some of them are valid (as the fit a little more snug to ideal positioning) lisa's target pointer offsets have been reliable for me. I thought it was important to mention here for future reference.
Last edited by MiesterMan on Mon Dec 26, 2011 9:44 am, edited 1 time in total.

User avatar
lisa
Posts: 8332
Joined: Tue Nov 09, 2010 11:46 pm
Location: Australia

Re: Lord of the rings online

#24 Post by lisa » Fri Dec 23, 2011 10:24 pm

Hmm I thought I posted target hp already.

Code: Select all

targetaddress = 0x12f98fc,
targethpoffsets = {0xc,0x4,0x0,0x4,0xb4},

Code: Select all

targetHP = memoryReadFloatPtr(getProc(), addresses.targetaddress, addresses.targethpoffsets )

--=== edit ===--
Not 100% reliable, occasionally the address is out by 0x1400
So not sure on that.

The player HP has been 100% reliable though so far.
Remember no matter you do in life to always have a little fun while you are at it ;)

wiki here http://www.solarstrike.net/wiki/index.php?title=Manual

User avatar
MiesterMan
Posts: 543
Joined: Tue Jul 06, 2010 9:15 pm
Location: Between the Second and Third Circles of Hell

Re: Lord of the rings online

#25 Post by MiesterMan » Sat Dec 24, 2011 3:23 am

Well, for the record (and future reference if to nobody else then myself), this is the proc used to update HP info:

Applies to target hp as well as player hp:

Code: Select all

CreateShaderCompiler+2AEED0 - 51      - push ecx
CreateShaderCompiler+2AEED1 - 8B 44 24 08  - mov eax,[esp+08]
CreateShaderCompiler+2AEED5 - D9 00   - fld dword ptr [eax]
CreateShaderCompiler+2AEED7 - 56      - push esi
CreateShaderCompiler+2AEED8 - 8B F1   - mov esi,ecx
CreateShaderCompiler+2AEEDA - D9 5E 34  - fstp dword ptr [esi+34]
CreateShaderCompiler+2AEEDD - D9 40 04  - fld dword ptr [eax+04]
CreateShaderCompiler+2AEEE0 - D9 5E 38  - fstp dword ptr [esi+38]
CreateShaderCompiler+2AEEE3 - D9 40 0C  - fld dword ptr [eax+0C]
CreateShaderCompiler+2AEEE6 - D9 5E 3C  - fstp dword ptr [esi+3C]
CreateShaderCompiler+2AEEE9 - D9 40 10  - fld dword ptr [eax+10]
CreateShaderCompiler+2AEEEC - D9 5E 40  - fstp dword ptr [esi+40]
CreateShaderCompiler+2AEEEF - D9 46 34  - fld dword ptr [esi+34]
CreateShaderCompiler+2AEEF2 - D9 5C 24 04  - fstp dword ptr [esp+04]
CreateShaderCompiler+2AEEF6 - D9 46 38  - fld dword ptr [esi+38]
CreateShaderCompiler+2AEEF9 - D9 5C 24 0C  - fstp dword ptr [esp+0C]
CreateShaderCompiler+2AEEFD - D9 44 24 0C  - fld dword ptr [esp+0C]
CreateShaderCompiler+2AEF01 - D9 44 24 04  - fld dword ptr [esp+04]
CreateShaderCompiler+2AEF05 - DFF1    - fcomip st(0),st(1)
CreateShaderCompiler+2AEF07 - DDD8    - fstp st(0)
CreateShaderCompiler+2AEF09 - 76 08   - jna CreateShaderCompiler+2AEF13
CreateShaderCompiler+2AEF0B - F3 0F10 44 24 0C  - movss xmm0,[esp+0C]
CreateShaderCompiler+2AEF11 - EB 11   - jmp CreateShaderCompiler+2AEF24
CreateShaderCompiler+2AEF13 - 0F57 C0  - xorps xmm0,xmm0
CreateShaderCompiler+2AEF16 - F3 0F10 4C 24 04  - movss xmm1,[esp+04]
CreateShaderCompiler+2AEF1C - 0F2F C1  - comiss xmm0,xmm1
CreateShaderCompiler+2AEF1F - 77 03   - ja CreateShaderCompiler+2AEF24
CreateShaderCompiler+2AEF21 - 0F28 C1  - movaps xmm0,xmm1
CreateShaderCompiler+2AEF24 - F3 0F11 46 34  - movss [esi+34],xmm0
CreateShaderCompiler+2AEF29 - E8 32F7FFFF - call CreateShaderCompiler+2AE660
CreateShaderCompiler+2AEF2E - 8B 46 4C  - mov eax,[esi+4C]
CreateShaderCompiler+2AEF31 - 85 C0   - test eax,eax
CreateShaderCompiler+2AEF33 - 74 08   - je CreateShaderCompiler+2AEF3D
CreateShaderCompiler+2AEF35 - 50      - push eax
CreateShaderCompiler+2AEF36 - 8B CE   - mov ecx,esi
CreateShaderCompiler+2AEF38 - E8 83F6FFFF - call CreateShaderCompiler+2AE5C0
CreateShaderCompiler+2AEF3D - 5E      - pop esi
CreateShaderCompiler+2AEF3E - 59      - pop ecx
CreateShaderCompiler+2AEF3F - C2 0400 - ret 0004
I gotta go back and look at your addr for it, may actually be the one I'm looking for XD.

User avatar
MiesterMan
Posts: 543
Joined: Tue Jul 06, 2010 9:15 pm
Location: Between the Second and Third Circles of Hell

Re: Lord of the rings online

#26 Post by MiesterMan » Sat Dec 24, 2011 3:30 am

lisa wrote:Hmm I thought I posted target hp already.

Code: Select all

targetaddress = 0x12f98fc,
targethpoffsets = {0xc,0x4,0x0,0x4,0xb4},

Code: Select all

targetHP = memoryReadFloatPtr(getProc(), addresses.targetaddress, addresses.targethpoffsets )

--=== edit ===--
Not 100% reliable, occasionally the address is out by 0x1400
So not sure on that.

The player HP has been 100% reliable though so far.
ICIC, that is the pointer for that one of three, CurHP, MaxHP,MaxHP.

The one I was looking for is withing 0x200 of the target hp.
Example of the addresses I'm looking at right now:

Code: Select all

Player HP is     0x2A9A07A8
Player Max HP is 0x2A9A07AC
Target HP is     0x2A9A0928
Target Max HP is 0x2A9A092C
I'll take a look at your target hp info too, gimme a minute.

User avatar
MiesterMan
Posts: 543
Joined: Tue Jul 06, 2010 9:15 pm
Location: Between the Second and Third Circles of Hell

Re: Lord of the rings online

#27 Post by MiesterMan » Sat Dec 24, 2011 3:55 am

Ok, using your target pointer info I was able to get a pointer to the target hp but I don't think it's quite right.

Based on the last offset, 0xb4, the address being offset is right between the player hp and mp values.

User avatar
lisa
Posts: 8332
Joined: Tue Nov 09, 2010 11:46 pm
Location: Australia

Re: Lord of the rings online

#28 Post by lisa » Sat Dec 24, 2011 4:10 am

In my many hours of searching and looking at memory there is something I noticed, which might explain what you are seeing.

Most of the time, deffinately not all of the time, you will notice something like this

hp, maxhp, maxhp
few line later
mp, maxmp,maxmp
few lines later
hp, maxhp, maxhp
few line later
mp, maxmp,maxmp

I have no idea why the values are repeated and so close to each other.
The target HP is usually in between there, can't remember exact spot.

Now reason I said most of the time is because 1 time out of 20 (guess) it isn't like this at all, the hp and mp values arn't repeated and at this time the target hp is nowhere near that location in memory.

I still haven't worked out why it does this.
Remember no matter you do in life to always have a little fun while you are at it ;)

wiki here http://www.solarstrike.net/wiki/index.php?title=Manual

User avatar
MiesterMan
Posts: 543
Joined: Tue Jul 06, 2010 9:15 pm
Location: Between the Second and Third Circles of Hell

Re: Lord of the rings online

#29 Post by MiesterMan » Sat Dec 24, 2011 2:31 pm

Some progress on coordinates. First I'd like to explain where I went wrong. Once I wasn't able to figure out the floats under the minimap I looked up how to report coords in the chat system. Using the ";loc" command you can get the coords into chat. Well, those were the same coords on the minimap.

So, after much tinkering I stumbled upon the REAL chat options and found the is a /loc command that amazingly reports real coordinates.....

AAAARGH!!!

User avatar
MiesterMan
Posts: 543
Joined: Tue Jul 06, 2010 9:15 pm
Location: Between the Second and Third Circles of Hell

Re: Lord of the rings online

#30 Post by MiesterMan » Sat Dec 24, 2011 7:43 pm

As expected, an in-game plug-in explained how the coords work. I'm not 100% on how accurate they should be but we can use a variation.

Code: Select all

   -- You are at: r1 lx904 ly975 ox18.49 oy142.90 oz418.52 h140.6
   -- You are at: r1 lx1046 ly1147 ox129.00 oy75.72 oz417.78 h358.6 

   local x = (( math.floor( lx / 8 ) * 160 + ox ) - 29360) / 200;
   local y = (( math.floor( ly / 8 ) * 160 + oy ) - 24880) / 200;
I think I'm just going to change the calc so that it's devided by 2 at the end and keep the extra significant digits.

Finding ox and oy was easy enough, but I'm having trouble finding lx and ly.

Edit: Forgot to put the example data.

User avatar
lisa
Posts: 8332
Joined: Tue Nov 09, 2010 11:46 pm
Location: Australia

Re: Lord of the rings online

#31 Post by lisa » Mon Dec 26, 2011 12:50 am

Not sure if fishing is worth it but I had MM fish for me today for about 30 mins lol

Can't find any reliable pointers for the addresses for casting and when fish bites line though.
So I found them and just added addresses directly for that current session.
Remember no matter you do in life to always have a little fun while you are at it ;)

wiki here http://www.solarstrike.net/wiki/index.php?title=Manual

User avatar
lisa
Posts: 8332
Joined: Tue Nov 09, 2010 11:46 pm
Location: Australia

Re: Lord of the rings online

#32 Post by lisa » Tue Dec 27, 2011 4:21 am

Ok I finally understand what you meant by location. I did some searching for commands and came up with
/loc
which gives your current location

static addresses at
0X = 0x1234440
0Y = 0x1234444
0Z = 0x1234448

Ok the x and y seem to be coords in a little box and x is 0-160 and then the other coords come into use.
lx and ly
So when 0X gets to 0 and is going down then lx becomes 1 less.
location.png
I haven't found any addresses for the lx or ly though.
0z is simply height and there is no lz value


--=== Added ===--
There were 2 lots of static addresses for the location, I went with the 1234440 as it is easier to remember lol

After examining both lots the other set is probably more useful as it has direction nearby aswell.

0x12198C4
0x12198C8
0x12198CC
Also for direction you are facing
0x12198D0
0x12198DC
Now I don't quite understand these as yet,
if you face north they are 1 and 0,
if you face south they are opposite 0 and 1.
if you face east they are 0.71 and -0.71
if you face west they are -0.71 and -0.71
those values are all floats.
Remember no matter you do in life to always have a little fun while you are at it ;)

wiki here http://www.solarstrike.net/wiki/index.php?title=Manual

User avatar
MiesterMan
Posts: 543
Joined: Tue Jul 06, 2010 9:15 pm
Location: Between the Second and Third Circles of Hell

Re: Lord of the rings online

#33 Post by MiesterMan » Sun Jan 01, 2012 12:34 am

I didn't post this before because I wanted to make sure I had the pointer path correct but I still have several working paths so I'm just posting the one that's pointed to earliest in memory.

Target ID:

Code: Select all

base = 0x121E134
offsets = {0x0,0x0,0xFC}
Still no real progress though.

User avatar
MiesterMan
Posts: 543
Joined: Tue Jul 06, 2010 9:15 pm
Location: Between the Second and Third Circles of Hell

Re: Lord of the rings online

#34 Post by MiesterMan » Tue Apr 29, 2014 2:17 am

I regained interest breifly but still don't have a lot of time to commit so here's one more bit of information I discovered.

The ID's of all objects in game are 8 byte unique identifying numbers. I figured this out when I found the UID of my character next to my character's name in unicode as a string of decimal numbers. I converted it to hexadecimal and suddenly I have a few dozen or so 8byte memory regions that fill with that UID when I have myself targeted and consistently changes to the UID of other objects as they are targeted.

I do not know which is the main target pointer but I believe that locating the "mouseover" targetting pointer might unlock a method of targetting by ID.

This should also help locate the objects list.

KillerTHC
Posts: 63
Joined: Tue May 25, 2010 8:49 pm

Re: Lord of the rings online

#35 Post by KillerTHC » Fri Sep 19, 2014 10:59 am

lisa wrote:Not sure if fishing is worth it but I had MM fish for me today for about 30 mins lol

Can't find any reliable pointers for the addresses for casting and when fish bites line though.
So I found them and just added addresses directly for that current session.
I am taking an interest, in helping develop a bot for LOTRO. My memory address finding skills are sub par at best, but I'm always trying to learn more. I am a decent coder but I am still struggling with the addresses. What things did you look for when making your fishing bot? I think that it is something that is doable and the exercise will help me in the big picture too. Any help is appreciated!

User avatar
lisa
Posts: 8332
Joined: Tue Nov 09, 2010 11:46 pm
Location: Australia

Re: Lord of the rings online

#36 Post by lisa » Fri Sep 19, 2014 6:20 pm

sorry KillerTHC, I have deleted what I did have on this game, been a couple of years.

while fishing I would search for 1 and then when not fishing do next search of 0 and do that a few times until you have only a couple results. Then it is a matter of going to that region of memory and seeing how it changes while you are fishing.

I seem to recall an address changing from 0 to 1 to 2

0 was not fishing
1 was line in water
2 was you had to catch the fish

But I could also have it confused with another game.
Remember no matter you do in life to always have a little fun while you are at it ;)

wiki here http://www.solarstrike.net/wiki/index.php?title=Manual

KillerTHC
Posts: 63
Joined: Tue May 25, 2010 8:49 pm

Re: Lord of the rings online

#37 Post by KillerTHC » Mon Sep 22, 2014 2:37 pm

lisa wrote:sorry KillerTHC, I have deleted what I did have on this game, been a couple of years.

while fishing I would search for 1 and then when not fishing do next search of 0 and do that a few times until you have only a couple results. Then it is a matter of going to that region of memory and seeing how it changes while you are fishing.

I seem to recall an address changing from 0 to 1 to 2

0 was not fishing
1 was line in water
2 was you had to catch the fish

But I could also have it confused with another game.
Thank you Lisa, I am going to work on this on and off I will post my result here. If anyone wants to work on this with me you are welcome too. Currently I don't have much of anything but in the future I am willing to share my work with others so they can contribute as well.

Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests