Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Perfect World > PW Hacks, Bots, Cheats, Exploits
You last visited: Today at 10:18

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



PWI - Guide for finding chat message offsets - C# code included

Discussion on PWI - Guide for finding chat message offsets - C# code included within the PW Hacks, Bots, Cheats, Exploits forum part of the Perfect World category.

Reply
 
Old 11/29/2012, 13:41   #166
 
elite*gold: 0
Join Date: Feb 2012
Posts: 18
Received Thanks: 0
its ok) my opera on auto refresh
mb in memory its like action array (for move, when i can change XYZ and he start moving)
i try 2 find but...i use only cheat engine and i think its useless idea \=
AHTOLLlKA is offline  
Old 11/29/2012, 23:56   #167
 
elite*gold: 10
Join Date: Sep 2010
Posts: 400
Received Thanks: 234
Quick update: I haven't forgotten lol. Just updating all my **** at the moment.
As always, my documentation for finding some of the stuff was... lacking. Lol.
Plus I'm a bit rusty
Getting there though, will hopefully have something for you tonight.
You're probably not going to like it though - There's three function injections required to do a proper job of reading chat-linked items lol.

This is bad... I'm quite enjoying playing with this stuff again but I don't want to get sucked back into this game!
dumbfck is offline  
Old 11/30/2012, 00:37   #168
 
Sᴡoosh's Avatar
 
elite*gold: 20
Join Date: May 2009
Posts: 1,290
Received Thanks: 326
The game sucks, reversing it and writing "addons" is fun though
Sᴡoosh is offline  
Thanks
1 User
Old 11/30/2012, 03:16   #169
 
elite*gold: 10
Join Date: Sep 2010
Posts: 400
Received Thanks: 234
Quote:
Originally Posted by S?oosh View Post
The game sucks, reversing it and writing "addons" is fun though
Yep, I agree lol. I don't think I'd ever want to play it again, but it's an easy game to fiddle with... which is quite fun

Anyway, the tutorial I'm writing has turned out to be a very very long one lol. It's too late and I need some sleep, so I'll finish it tomorrow evening.
90% done though
There should hopefully be something in this one for everyone though, perhaps a few little gems that nobody knew about

EDIT: Ok, deeeeep breath, here goes

Ok, all of the following stuff is actually stuff I was going to keep to myself as I was using it for a pretty kickass external PWI chat interface. Kinda like an MSN sorta thing. I have mentioned this a lot but never finished the bastard thing lol.
So... As it's a little less likely now that I'll ever finish it, here's some tricks I might as well share
They're nothing particularly groundbreaking, but they are a bastard to work out in the first place and they're potentially pretty useful.


Getting information about items linked in chat:

As I begin writing this, I don't intend to go into great detail about how to find all this stuff, but as the tutorial progresses, I'll probably:
a) Cave in and show it anyway because of my OCD
b) Find it's actually necessary to go into detail just to show how it works
c) Decide it's probably worthwhile explaining it so you guys can figure out how to update this stuff next time the client gets updated. (*hint hint*)

Notes:
- All information here is valid as of PWI client v676. Offsets / code excerpts / methods WILL vary for different clients
- I've just realised the guy I'm writing this tutorial for doesn't play this version so I'm gonna have to explain how to find more stuff. D'oh!
- You will need to be semi-proficient in the use of Cheat Engine *AND* OllyDbg (you should be anyway if you're into this kinda stuff)
- I am writing this tutorial based on a the requirement I encountered for the program I was writing, in which I wanted to display the item in an external interface as it was displayed in-game, i.e., name, colour, description.
- A bunch of stuff will simply be explained with C++ code snippets. You may have to figure out what they're doing for yourself if you want to port them to another programming language.

Let's start from the beginning with a little recap.
First post in this thread describes how to find the base addresses for the chat system. More importantly, for the list of messages you see in game in the chat window.
If you have trouble following that, then abort this mission now lol.

For readability, the first offsets of interest are (for PWI):
(By the way, I don't use decimal offsets because that's stupid in this line of work)

Code:
baseCall:     0xB8FBCC
chatBaseAddr:    0xB94C70
lastChatIndex:    0xB94C7C
The structure of a chat message is:
Code:
struct chatObj
{
    uint    uk1;        // 0x00 Unknown
    char    msgScope;    // 0x04 I.e., world, private, faction (see messageTypes)
    char    smileySet;    // 0x05
    char    uk3;        // 0x06
    char    uk4;        // 0x07
    wchar    *p_msg        // 0x08 Pointer to actual unicode message string
    uint    dwItemObj    // 0x0C base offset of an item object linked in chat
    uint    msgId        // 0x10 Unique message ID (can be different from index)
    uint    uk5;        // 0x14
    uint    uk6;        // 0x18
}
Chat message objects/structs are 0x1C in size and there are 199 of them, so to traverse the list of messages to get the actual message text for example:
Code:
// 0 - 199 max
For(i = 0 ; i < lastChatObject ; i++)
{
    p->chatObject = [[chatObjectsBase] + i*0x1C]
    // Actual message
    p->message = [[[chatObjectsBase] + i*0x1C]+0x8]
}
The item object is at +0xC though, so replace that 0x8 with 0xC for those.

/recap
Now for the fun stuff...

Ok, you may be aware that for item objects in general (e.g., inventory items) the description (i.e., the detailed text you see when you hover over an inventory item) is located at:
Code:
[[itemBase] +0x40]
You may also be aware that this description is not available at that location until you have hovered over the item (or clicked it, in the case of chat-linked items).

That's because when you hover over the item, the game client executes a function which updates this description as and when it is needed. Clearly it would make no sense to automatically have a potentially very long string instantly available for every single item you encounter or walk nearby in game as that would use a lot of memory... and as we know, PWI devs are very careful to efficiently use memory (LOL).

So, when you programatically read a message body, i.e., the message text from the in-game structures, when an item is linked in text, you will find that the item itself is replaced with something like:

?<1><>


Anyway...
Tons of objects in PWI have what's called (or at least what I call ) a vTable, which is basically a list of function pointers that perform some sort of operation with that object. This includes item objects.

The vTable is always located at the 0th entry of the object (that's just how C++ and other OOP compilers work)
The image below shows an example of a chat-linked item object:



I've only highlighted the stuff that's relevant to us for this tutorial.
As it happens, as far as I can tell, chat-linked items use the same item object structure as items found anywhere else, e.g., inventory, catshops, etc. However, for most purposes, we don't need to utilise the functions that we need for the purpose of identifying them in a chat message, so they have, for the most part, remained undiscovered / purposeless.

In the above image, you'll see that there are three function addresses highlighted within the vTable
In brief, those functions are (as I have chosen to name them):
getItemName 0x14
getItemDescription 0x40
getItemColourIndex 0x54

(**NOTE**: Before the Sirens of War update, these function pointers were at 0x14, 0x3C and 0x50 respectively)


Getting the item name

First things first, we want to find out what the item is actually named.
So, we now know the address of the function call for getItemName() is:
Code:
[[[itemBase]+0]+0x14]
Yay! Problem solved!
... Not quite.
We need to figure out how we actually need to call this function, i.e., what parameters it requires and how the return value is formed.
How to actually figure out how to inject a function is beyond the scope of this tutorial (read: I can't be arsed to explain) so I will just show you.

If you want to really understand what's going on, you're going to have to examine the actual functions within the PWI client using a debugger and preferably IDA Pro.

Code:
        if(getItemNameAddr != 0)
        {
            _asm
            {
                MOV ECX, newMsg.chatItem
                MOV EDX, getItemNameAddr
                CALL EDX
                MOV [itemName], EAX
            }
            msg.itemName = itemName;
        }
This code is taken from my injected DLL so you'll have to figure out how to interpret this into your own program.

Basically:

1 - The function requires that you pass it the base address of the item object in ECX.
[[chatObject]+0xC]

2 - Load the function call address into EDX
[[[[chatObject]+0xC]+0]+0x14]

3 - Call EDX

4 - The pointer to the item name string will be loaded into EAX when the function exits. So you will need to move that somewhere convenient for you to read it.


Getting the item description
This is actually the same method you would use to get the description of an item in your inventory.

So, we now know the address of the function call for getItemDescription() is:
Code:
[[[itemBase]+0]+0x40]
To inject the function:

Code:
        if(updateFuncAddr != 0)
        {
            _asm
            {
                PUSH 0
                MOV EDI, newMsg.chatItem
                MOV ECX,EDI
                MOV EDX, updateFuncAddr
                CALL EDX
            }
            msg.itemDesc = (*((newMsg).chatItem)).description;
        }
Basically:

1 - Push 0 onto the stack - the function just requires this...

2 - The function requires that you pass it the base address of the item object in EDI.

3 - Then copy that address into ECX

4 - Load the function call address into EDX
[[[[chatObject]+0xC]+0]+0x40]

5 - Call EDX

6 - The item description will now be present in the object's item description offset, e.g.,
[[itemBase]+0x40]

7 - You can now read that however you want to


For the record: For anyone who's ever wondered how to read just the item name for an inventory item, rather than getting it from the description and then stripping out the first line (which isn't always the same as you see it in-game ) then here's your answer.
You can use this for any item located in any container in-game.



Ok, so we know the name of the item and the full description of it.
But, say you're displaying this in some nicely designed interface using all the proper in-game colours; we still don't know what colour the item is supposed to be displayed as (white, green, red, purple, blue).
Again, the colour of the item in the top line of the description isn't always the same as it is displayed in the chat window.

So, that's where the last function comes in.


Getting the item colour (as shown in chat)

This one's tricky.
We need to call a function as we did for the last two examples, but all that function does is return a colour index which is typically a value between 4 and 9, representing the colours you will see in-game (white, blue, green, purple, gold, red - perhaps not in that order lol).
Sure, we could just have a list of what each index value represents which colour, but that's not how we roll, right? What if they add more colours later on?
Yes... this sort of thing makes my OCD nerve twitch, so I actually went to the trouble of reverse engineering how the game actually figures this shit out.

There's a structure in-game that I have decided to name:

stringConstStructArray

It's an array of structures that contains string constants!

The base of this structure is at:
[[baseCall]+0x90]

It actually contains tons of pointers to constant strings used all throughout the game, including colour strings.
They're slightly drawn out pointers, but it's basically like this...

Code:
[[[[[baseCall]+0x90+0x8]+i*4]+0]+0]
Note the 0x90+0x8 - I wrote it like that because that's how the game actually resolves it. But you can just resolve it as:
Code:
[[[[[baseCall]+0x98]+i*4]+0]+0]
Note the 'i' in that chain. We'll come back to that later.

Check out this little AutoShit script. It will list all the strings that are present in this array.
Note that these offsets have been consistent through several large updates.

And here's the list of strings it will find:


I know... pretty neat, right?
If you've dug around in PW code much, you should instantly recognise that those first 10 strings are colour constants.
Then, upon closer inspection, you'll notice that they're all strings associated with in-game items!

Right, so...
We know where the colour string constants are, so now all we need to do is inject the item's member function to retrieve which colour index is associated with that item.

Remember, the getItemColour function call is found at:
Code:
[[[itemBase]+0]+0x40]
To inject the function:

Code:
        if(getColourIndexAddr != 0)
        {
            _asm
            {

                MOV ECX, newMsg.chatItem
                OR EDI, 0xFFFFFFFF                // not sure why...
                MOV EDX, getColourIndexAddr
                CALL EDX
                MOV [itemColourIndex], EAX
            }
            if(itemColourIndex > 4 && itemColourIndex < 10)
                msg.itemColour = baseCall->base->stringConstStructArray->ppStringConst[itemColourIndex]->pStringConst->stringConst;
        }
So, remember the 'i' I mentioned in the string constants chain? That's the itemColourIndex that we retrieve from this function.

Basically:

1 - The function requires that you pass it the base address of the item object in ECX.

2 - Whatever's in EDI needs to be OR'ed with oxFFFFFFFF - I don't know why, just do it lol. Anything OR'ed with 0xFFFFFFFF = 0xFFFFFFFF, so we're basically just loading that into EDI

3 - Load the function call address into EDX
[[[[chatObject]+0xC]+0]+0x54]

5 - Call EDX

6 - The function will return with the colour index value in EAX, so move that to somewhere where you can use it.

7 - Use that value to retrieve the colour string constant from the string constants array.



So, there you have it. We now have all we need.
Now you can make some awesome looking thigs like this




Some other notes:

If you're using the PWI font for whatever it is you're making, the [ and ] characters that surround an item name in a chat message are unicode characters 0x3010 and 0x3011 respectively. You'll have to add those manually as they're not part of the item name.


As I may have mentioned earlier, I do all of this stuff within an injected DLL because stuff can change while you're in the middle of reading things, which is obviously a pain in the arse.

You don't necessarily need to use an injected DLL, but I would at least recommend that you use a function hook and do all the magic from within there.

When a message structure is built by the client, it is built in a temporary holding structure which is then transferred to the main chat window.
I place a hook at the end of this function and then do all my function calls from there. This guarantees that you're getting the information at the earliest possible time that you can and it ensures that everything else is put on hold until you have done so.

It's pretty simple to find the place that I insert my hook.

First of all, you'll need your lastChatIndex address (0xB94C7C in PWI Sirens of War v677)
(I prefer to do this in OllyDbg as I like this program a lot!)

So first things first, we need to get the client up and running and attach OllyDbg.
Then, in the view memory window, you need to locate your chatBase (click in window, ctrl+G then type the address)
Then right click this address and select Breakpoint -> Memory



When the "Set memory breakpoint" window pops up, uncheck the "Read axxess" box and ensure the "Write access" box is checked.




Now wait for a new message to arrive and the breakpoint should trigger.
Basically, the chat structure is created in a temporary structure, then copied into the main chat window, then the lastChatIndex is updated.
So, if we look a few lines above where the memory breakpoint was hit (modified lastChatIndex) we can see a function call. So, lets put a breakpoint on that (select that line then hit F2).



Let the client run until a new message arrives and we should hit this breakpoint. You might want to disable the memory breakpoint now by the way (right click the memory address and go Breakpoint -> Memory delete)
Once we hit the new breakpoint on the function call, hit F7 to step into it.
You should now see a function something like this: (in older versions this function is a bit bigger, but the bottom parts looks a little similar).



Ok, when we actually hook our own function call, we will be overwriting some code with a relative call, of which the opcode is 5 bytes.
Code:
E8 XXXXXXXX        where XXXXXXXX is the relative call offset
So, look down near the end of the function (after we know everything has been figured out by the client) and we can see there's a 3-byte opcode followed by a 2-byte opcode. Ideal, we can overwrite both of those with our 5 byte relative call.

I'm not going to go into detail about how to hook stuff and how to calculate the relative address of the function call - there are plenty of tutorials all over the internet for that.

Once you've worked out how to redirect the client to our hook function, you can then call all three functions mentioned earlier to gather all the information about the linked item.
When that's done, you need to restore all the registers (POPAD) and then copy the two instructions we overwrote for the hook and then return.
Here's what my hook function looks like. Bear in mind that this is for handling a complete new message arrival, so there's some code you might not need.

Code:
__declspec( naked ) DWORD hHandleNewMsg( )
{
    _asm
    {
        PUSHAD
        MOV newMsgOffset, EDI
    }
    
    newMsg = *(__chatStruct*)newMsgOffset;
        
    msg.client =        baseCall->base->structures->player->name;
    msg.msgType =        newMsg.msgScope;
    msg.itemID =        (DWORD)newMsg.chatItem;
    msg.itemName =        L"";
    msg.itemColour =    L"";
    msg.itemDesc =        L"";
    msg.msg =            newMsg.msg;
    
    if(newMsg.chatItem != 0)
    {
        updateFuncAddr = (DWORD)(*((*(newMsg.chatItem)).itemFuncs)).updateDescription;
        getItemNameAddr = (DWORD)(*((*(newMsg.chatItem)).itemFuncs)).getItemName;
        getColourIndexAddr = (DWORD)(*((*(newMsg.chatItem)).itemFuncs)).getColourIndex;
        
        if(updateFuncAddr != 0)
        {
            _asm
            {
                PUSH 0
                MOV EDI, newMsg.chatItem
                MOV ECX,EDI
                MOV EDX, updateFuncAddr
                CALL EDX
            }
            msg.itemDesc = (*((newMsg).chatItem)).description;
        }
        
        if(getColourIndexAddr != 0)
        {
            _asm
            {

                MOV ECX, newMsg.chatItem
                OR EDI, 0xFFFFFFFF                // not sure why...
                MOV EDX, getColourIndexAddr
                CALL EDX
                MOV [itemColourIndex], EAX
            }
            if(itemColourIndex > 4 && itemColourIndex < 10)
                msg.itemColour = baseCall->base->stringConstStructArray->pppStringConst[itemColourIndex]->ppStringConst->stringConst;
        }

        if(getItemNameAddr != 0)
        {
            _asm
            {
                MOV ECX, newMsg.chatItem
                MOV EDX, getItemNameAddr
                CALL EDX
                MOV [itemName], EAX
            }
            msg.itemName = itemName;
        }
    }

    msg.serialise();
    /*
    When sending a PM, a dummy second message triggers with the contents of the chat
    entry bar which is an incomplete message and breaks shit.
    Only send the message throuh the pipe if it begins with ^, not /
    */
    temp = msg.msg[0];
    if(temp == L"^")
        pipeSendMsg(hPipe, msg.serialised.c_str());

    _asm
    {
        // reinstate registers
        POPAD
        // replace code overwritten in hook
        MOV DWORD PTR DS:[ESI+18],ECX
        MOV EAX,ESI
        // exit hook
        RETN
    }
}
So there you go... I've had enough of writing this tutorial now lol.
There should be enough info here for anyone to do what we set out to do.
Obviously you will need to do a lot of work yourself though

Well, I've done the hard work, so you can do some work to get it all to make sense.
Afterall, you might not learn much if I just gave the complete solution

Have fun!
dumbfck is offline  
Thanks
6 Users
Old 12/01/2012, 10:23   #170
 
Interest07's Avatar
 
elite*gold: 0
Join Date: Mar 2010
Posts: 862
Received Thanks: 576
Hehe I love reading your tutorials, even though I also am trying to prevent myself from getting sucked back into fiddling with pwi. That list of strings is also contained in one of the files in one of the .pck files. Don't ask me which one, I'm just pretty sure I recognise it

Very well written tutorial anyway

I personally prefer calling ingame functions (within an injected dll) by declaring the function and setting it's address to the one ingame to prevent any asm stuff. I know you love it and in this case it is quite clear to anyone what happens there, but I think it's less neat (that could just be my personal hangups with getting my asm code to work inside c++, which for some reason I always have issues with unlike anybody else).

Shame you never finished that chat client, then again I know what it's like to not finish any pet projects
Interest07 is offline  
Thanks
1 User
Old 12/01/2012, 14:00   #171
 
elite*gold: 10
Join Date: Sep 2010
Posts: 400
Received Thanks: 234
Quote:
Originally Posted by Interest07 View Post
I personally prefer calling ingame functions (within an injected dll) by declaring the function and setting it's address to the one ingame to prevent any asm stuff.
Lol that would make much more sense... I'm not sure it ever even occurred to me to try it like that /facepalm
I'm still a bit of a noob with C++
I might go and rewrite those sections later!

And you're right; those strings are in a text file... weaponeffects.txt or something like that if I recall correctly. However, I personally think it's a bit cleaner to read it directly from the client in this case.
dumbfck is offline  
Old 12/02/2012, 06:41   #172
 
elite*gold: 0
Join Date: Feb 2012
Posts: 18
Received Thanks: 0
omg its work xDDD thx dumbfck
but how u find offsets for description?? i mean 40 (and old - 3c) ??
AHTOLLlKA is offline  
Old 12/02/2012, 17:26   #173
 
Interest07's Avatar
 
elite*gold: 0
Join Date: Mar 2010
Posts: 862
Received Thanks: 576
Quote:
Originally Posted by dumbfck View Post
Lol that would make much more sense... I'm not sure it ever even occurred to me to try it like that /facepalm
I'm still a bit of a noob with C++
I might go and rewrite those sections later!

And you're right; those strings are in a text file... weaponeffects.txt or something like that if I recall correctly. However, I personally think it's a bit cleaner to read it directly from the client in this case.
Yeah it doesn't make sense to have to either supply the txt file or have your tool require access to one of .pcks. That would be a bit odd

With the ingame functions you do have to take care what type of calling convention is used. When you make a __thiscall, since you can't use those in vs at least, you have to use __fastcall instead (first parameter is ecx, second is unused so just provide 0, then your usual parameters.). Other functions are just regular __stdcall I believe.
Interest07 is offline  
Thanks
1 User
Old 12/03/2012, 10:37   #174
 
elite*gold: 10
Join Date: Sep 2010
Posts: 400
Received Thanks: 234
Quote:
Originally Posted by AHTOLLlKA View Post
omg its work xDDD thx dumbfck
but how u find offsets for description?? i mean 40 (and old - 3c) ??
Do you mean how did I find the functions originally? Well, originally, it took a really long time with a lot of patience lol.
However, once I realised it's in the item object's vTable, there's no longer any need to go that route. I expect it will now always be in that vTable, even it it might move a bit higher up at some later point.
But when that happens, I'd probably just set a few breakpoints on the addresses in that table and see which breakpoint gets triggered when hovering over an item
dumbfck is offline  
Thanks
1 User
Old 01/31/2013, 16:57   #175
 
elite*gold: 0
Join Date: Jun 2011
Posts: 18
Received Thanks: 1
oks, here is the question
has anyone really finished this?

i mean, dude, a chat outside of pwi is a really great.
if so, is there anyway for me to have?
Spacedementiall is offline  
Old 01/31/2013, 17:07   #176
 
elite*gold: 10
Join Date: Sep 2010
Posts: 400
Received Thanks: 234
I never quite finished my injected version. I was close but then, as always, I got distracted lol.
I suppose as I don't play PWI anymore I could *possibly* try to just fix the offsets and post it if anyone wants to finish it. I must warn though - It's not just a simple memory reader and I expect there are parts of code I don't even understand anymore :P
It was mostly done though. Even got chat linked items working with hovertips and stuff. Just never quite finished doing smilies.
I'm not guaranteeing anything though :P
dumbfck is offline  
Old 03/04/2013, 10:47   #177
 
elite*gold: 0
Join Date: Jun 2011
Posts: 18
Received Thanks: 1
as i say
this would be really a great tool
Spacedementiall is offline  
Old 03/04/2013, 11:25   #178
 
em3t's Avatar
 
elite*gold: 0
Join Date: Mar 2013
Posts: 23
Received Thanks: 0
it works stably for now, thanks
em3t is offline  
Old 03/22/2013, 09:03   #179
 
elite*gold: 0
Join Date: Mar 2009
Posts: 99
Received Thanks: 4
Its possible remove the "monsters chats",some mobs say some words on lvl 82-86 that I remember...

Anyway its possible remove they?
howldudu is offline  
Old 03/23/2013, 15:51   #180
 
elite*gold: 0
Join Date: Mar 2013
Posts: 116
Received Thanks: 32
Ich werde sehen, dass Sie haben hart daran gearbeitet: D
trussik is offline  
Reply


Similar Threads Similar Threads
guide: debug pwi, find function addresses and offsets, write a bot(c++ code included)
09/04/2022 - PW Hacks, Bots, Cheats, Exploits - 123 Replies
hi, let's start right away. what you can learn: - trace and call ingame-functions like attack, cast spell, pick up, moveto, ... - traverse object lists like items, mobs, players - read ingame structures (class objects) and how they play together - write your own fully client-side bot that doesnt need to simulate mouse/keyboard input and doesnt need to read pixels
Finding offsets?
12/04/2009 - CO2 Programming - 2 Replies
Btw trying to make an aimbot :P just throwing that out there EDIT: This is what iv'e found so far,am I on the right track? this is for a v5165 private server that I own,When I was jumping around on one of my chars,around another character of mine that had the proccess on her client,these are the addresses that came up,eventually I got down to the last x and last y address,and every jump they were right,but the question is am I doing this right Heres what I found: 01175390 - proper x...
problem-finding and updating CE Offsets
11/03/2009 - Dekaron - 2 Replies
Hey guys, Ive checked the 2moons exploit hacks and stuff and i used the tutorial how to find and update the offsets using Cheat engine by using Array of bytes and the Value of the hack..and i get a new address.so far so good. Now the problem is when i open Cheat engine(the updates file which i got the scripts of the hacks in,Just need to update offsets) and i do edit Script.once i change the Adress i try to save but the file is being saved as a CEA file,and i don't know how to open it. The...
mr argus, finding offsets.
02/14/2008 - Final Fantasy XI - 0 Replies
Well, I have been reading the tutorial on how to find them, and all was going well, until i ran into a snag. After following the instructions about 30 times over and over again, and banging my head into my desk a couple times, I decided I needed help from people who already know how to find them. I have searched all around and cant find any other tutorials except for the single one on how to find ownposition. Is there any chance someone could make a video tutorial on how to get all the offsets?...
Finding Memory Offsets in WoW?
07/12/2007 - World of Warcraft - 3 Replies
Hey people, i make bots, and so far i had some guy finding the offsets for me. how to do? do u know?



All times are GMT +1. The time now is 10:18.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.