Deprecated: The behavior of unparenthesized expressions containing both '.' and '+'/'-' will change in PHP 8: '+'/'-' will take a higher precedence in /home/iano/public_html/tpforums-vb5/forum/includes/class_core.php on line 5842

PHP Warning: Use of undefined constant MYSQL_NUM - assumed 'MYSQL_NUM' (this will throw an Error in a future version of PHP) in ..../includes/init.php on line 165

PHP Warning: Use of undefined constant MYSQL_ASSOC - assumed 'MYSQL_ASSOC' (this will throw an Error in a future version of PHP) in ..../includes/init.php on line 165

PHP Warning: Use of undefined constant MYSQL_BOTH - assumed 'MYSQL_BOTH' (this will throw an Error in a future version of PHP) in ..../includes/init.php on line 165

PHP Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in ..../includes/functions_navigation.php on line 588

PHP Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in ..../includes/functions_navigation.php on line 612

PHP Warning: Use of undefined constant misc - assumed 'misc' (this will throw an Error in a future version of PHP) in ..../global.php(29) : eval()'d code(6) : eval()'d code on line 1

PHP Warning: Use of undefined constant index - assumed 'index' (this will throw an Error in a future version of PHP) in ..../global.php(29) : eval()'d code(6) : eval()'d code on line 1

PHP Warning: Use of undefined constant misc - assumed 'misc' (this will throw an Error in a future version of PHP) in ..../includes/class_bootstrap.php(1422) : eval()'d code(4) : eval()'d code on line 1

PHP Warning: Use of undefined constant index - assumed 'index' (this will throw an Error in a future version of PHP) in ..../includes/class_bootstrap.php(1422) : eval()'d code(4) : eval()'d code on line 1

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 85

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6
Finding adresses and C# programming. Need help!
Results 1 to 9 of 9

Thread: Finding adresses and C# programming. Need help!

  1. #1
    Junior Member
    Join Date
    Jan 2013
    Posts
    4

    Finding adresses and C# programming. Need help!

    I am making my own tibia tool/bot in C#. I already got the read/write memory functions down and the basic pointers and offsets for health, mana and cap etc. I cannot figure out how to find the "full light hack" pointer. I have found an address that only works when theres a light source activated but I know theres a better address for it but no idea on how to find it.

    I am using cheat engine for all of this. When it comes to more complicated stuff such as x ray and player slots I don't even have any idea on where to begin looking. I have tried searching for some good tutorials but almost everything I find is someone asking for help who then gets linked to a tutorial but the link is always broken. The tutorials I did manage to find just give you the addresses to go to and what to change but no explanation as to how you can find that address yourself, so not a real tutorial per say.

    I am writing my bot for older versions of OT servers if it makes any difference for the addresses. (7.4-7.6).

    Now about C# programming. I take it there are several ways to send spells / text to the chat. I could either send key or packets as I understand it. However packets seems a bit to complicated since I think they are encrypted and I am bad as it is at reverse engineering so I would have no clue as to how to decode/encode it. However if I go with the send keys method, does that mean that Tibia must be in focus all the time for it to function?
    Last edited by Inzann; 01-23-2013 at 02:47 PM.

  2. #2
    Member Diego's Avatar
    Join Date
    Mar 2012
    Location
    México
    Posts
    79
    No, It does not have to be focused.
    TibiaViewer taking AFK botting to a whole different level Sign up!.

  3. #3
    Senior Member
    Join Date
    Jan 2008
    Location
    Cambridge, England
    Posts
    725
    Quote Originally Posted by Inzann View Post
    I am making my own tibia tool/bot in C#. I already got the read/write memory functions down and the basic pointers and offsets for health, mana and cap etc. I cannot figure out how to find the "full light hack" pointer. I have found an address that only works when theres a light source activated but I know theres a better address for it but no idea on how to find it.

    I am using cheat engine for all of this. When it comes to more complicated stuff such as x ray and player slots I don't even have any idea on where to begin looking. I have tried searching for some good tutorials but almost everything I find is someone asking for help who then gets linked to a tutorial but the link is always broken. The tutorials I did manage to find just give you the addresses to go to and what to change but no explanation as to how you can find that address yourself, so not a real tutorial per say.

    I am writing my bot for older versions of OT servers if it makes any difference for the addresses. (7.4-7.6).

    Now about C# programming. I take it there are several ways to send spells / text to the chat. I could either send key or packets as I understand it. However packets seems a bit to complicated since I think they are encrypted and I am bad as it is at reverse engineering so I would have no clue as to how to decode/encode it. However if I go with the send keys method, does that mean that Tibia must be in focus all the time for it to function?
    Regarding reading memory: Once you have your addresses, you need a way in which you can read them. My current understanding is that you've found where your HP / MP / Exp etc are in the Tibia client, but I suspect you're not even close to being "there" with this, you need to also understand how to read pointers, and how to calculate Xor values (which HP and MP both are, though you won't know this if you only used CheatEngine, or if you're working on such an old client), and you'll need to be able to read these off your own back, and get these addresses each time there is a client update.

    The best tutorial (in my opinion) for reading memory addresses can be found here. I wrote it, and I know I'm gonna sound big headed but who gives a shit, it is almost the only C# tutorial of its kind (except for my other one).

    Regarding sending and receiving packets to and from Tibia (Proxy method), this method isn't such a hard one as you think, but you must understand packet construction and safe methods for it. If you send a back packet, your client may crash, and you could even bug your character out in game in a way which isn't reversible. I don't recommend this unless you know exactly what you're doing.

    So if you've decided to go with reading memory and not sending packets, I can help further, your next decision will be do you want to either inject code and control using Tibias internal functions, write memory and control by manipulation, or control by keyboard and mouse. The three are quite similar, but also quite different. None of them require the Tibia client to be in focus, with the possible exception of keyboard and mouse, but that depends entirely on how you go about it.

    My favourite option is the one of client injection, especially for OTs, but I'm not so good at it. You may wish to look at TibiaAPI. It is an API which supports version 7.6, and has all the features you need already, all you'd really have to do is learn a bit of C# or VB.NET and go about the business of bossin it up. The downside, of course, being that you're using a third party library and if something isn't working, you probably won't be able to fix it without once more asking for help. The alternative alternative is to use your own functions and learn a considerable amount of your chosen language, and build a bot in that way. That's probably what I'd recommend. If you're wanting to get started, and you like the idea of doing it in C#, I'd also recommend visiting JAPI on GoogleCode. It's a new project I've started which, although poorly designed / written, contains all the stuff you'll need, such as memory reading functions, and sending key presses and mouse clicks to the client at a layer which "won't be instantly detectable", but won't take direct control of your computer.

    Good luck!
    Last edited by XtrmJash; 01-23-2013 at 09:20 PM.

  4. #4
    Administrator
    Join Date
    Mar 2007
    Posts
    1,723
    @ManInTheCave He specifically stated he's working with the 7.4-7.6 clients, no need to XOR values in those clients. The XOR encryption was introduced in a 9.x client (can't remember the exact one of the top of my head).

    @Inzann There's a "light" address that can be NOP'd to give the effect of having full light, and you can also change the light offsets of your character in the battle list to do the same. I guess I could write a tutorial on how to find the "light" address sometime.

  5. #5
    Junior Member
    Join Date
    Jan 2013
    Posts
    4
    Quote Originally Posted by ManInTheCave View Post
    Regarding reading memory: Once you have your addresses, you need a way in which you can read them. My current understanding is that you've found where your HP / MP / Exp etc are in the Tibia client, but I suspect you're not even close to being "there" with this, you need to also understand how to read pointers, and how to calculate Xor values (which HP and MP both are, though you won't know this if you only used CheatEngine, or if you're working on such an old client), and you'll need to be able to read these off your own back, and get these addresses each time there is a client update.

    The best tutorial (in my opinion) for reading memory addresses can be found here. I wrote it, and I know I'm gonna sound big headed but who gives a shit, it is almost the only C# tutorial of its kind (except for my other one).

    Regarding sending and receiving packets to and from Tibia (Proxy method), this method isn't such a hard one as you think, but you must understand packet construction and safe methods for it. If you send a back packet, your client may crash, and you could even bug your character out in game in a way which isn't reversible. I don't recommend this unless you know exactly what you're doing.

    So if you've decided to go with reading memory and not sending packets, I can help further, your next decision will be do you want to either inject code and control using Tibias internal functions, write memory and control by manipulation, or control by keyboard and mouse. The three are quite similar, but also quite different. None of them require the Tibia client to be in focus, with the possible exception of keyboard and mouse, but that depends entirely on how you go about it.

    My favourite option is the one of client injection, especially for OTs, but I'm not so good at it. You may wish to look at TibiaAPI. It is an API which supports version 7.6, and has all the features you need already, all you'd really have to do is learn a bit of C# or VB.NET and go about the business of bossin it up. The downside, of course, being that you're using a third party library and if something isn't working, you probably won't be able to fix it without once more asking for help. The alternative alternative is to use your own functions and learn a considerable amount of your chosen language, and build a bot in that way. That's probably what I'd recommend. If you're wanting to get started, and you like the idea of doing it in C#, I'd also recommend visiting JAPI on GoogleCode. It's a new project I've started which, although poorly designed / written, contains all the stuff you'll need, such as memory reading functions, and sending key presses and mouse clicks to the client at a layer which "won't be instantly detectable", but won't take direct control of your computer.
    Good luck!
    Oh perhaps I confused you but what I wrote. I have the memory functions ready from a library I found and edited. I have found the correct addresses for health, mana and so on and tested to see if I could read them in my application made in C# and it worked perfectly. As I have understood its a lot more complicated in the newer versions of tibia with all that XOR values, but I didn't have to go through all of that fortunately. I have abandoned the idea of going with packets and I don't want to use the TibiaAPI as I feel it would be less challenging. As I understand its a library full of premade functions that people can use to make their own bots?

    Right now I would just need to learn how to get some more addresses, like the real light hack and perhaps some inventory slots if needed. I would also need to learn how to do the sending key presses and mouse clicks you are talking about. So if you could provide any more information I'd be thankful. I will also take a look at your project! So do OT servers have any anti-cheat measures at all? If so will this key presses/mouse clicks method work or should I go with something else?

    Edit: The link you sent me to your project 404'd


    Quote Originally Posted by Jo3Bingham View Post
    @ManInTheCave He specifically stated he's working with the 7.4-7.6 clients, no need to XOR values in those clients. The XOR encryption was introduced in a 9.x client (can't remember the exact one of the top of my head).

    @Inzann There's a "light" address that can be NOP'd to give the effect of having full light, and you can also change the light offsets of your character in the battle list to do the same. I guess I could write a tutorial on how to find the "light" address sometime.
    I would appreciate it if you had the time to make a tutorial for it and perhaps some other more hard to find addresses and why they can be useful. If you do make one please provide intructions as how to do it and not just "search for this value and change it to this". I would like to learn how to do it. PM me if will make the tutorial!

  6. #6
    Super Moderator
    Join Date
    May 2007
    Posts
    1,191
    If it's for Tibianic-HR or RealOTS, there will be some anti-bot measures

  7. #7
    Senior Member
    Join Date
    Jan 2008
    Location
    Cambridge, England
    Posts
    725
    Quote Originally Posted by Inzann View Post
    Oh perhaps I confused you but what I wrote. I have the memory functions ready from a library I found and edited. I have found the correct addresses for health, mana and so on and tested to see if I could read them in my application made in C# and it worked perfectly. As I have understood its a lot more complicated in the newer versions of tibia with all that XOR values, but I didn't have to go through all of that fortunately. I have abandoned the idea of going with packets and I don't want to use the TibiaAPI as I feel it would be less challenging. As I understand its a library full of premade functions that people can use to make their own bots?

    Right now I would just need to learn how to get some more addresses, like the real light hack and perhaps some inventory slots if needed. I would also need to learn how to do the sending key presses and mouse clicks you are talking about. So if you could provide any more information I'd be thankful. I will also take a look at your project! So do OT servers have any anti-cheat measures at all? If so will this key presses/mouse clicks method work or should I go with something else?

    Edit: The link you sent me to your project 404'd
    Sorry about the link, this one is correct. To send keys and what not there are a few things you need to know about the SendMessage() function of User32.dll.

    SendMessage() can be imported using this code:

    PHP Code:
            [DllImport("User32.DLL")]
            public static 
    extern int SendMessage(IntPtr hWndUInt32 MsgIntPtr wParamIntPtr lParam); 
    You need to pass it the window handle of your Tibia client, which you can get (in VS2012, C#) using:

    PHP Code:
    Convert.ToUInt32(Process.GetProcessesByName("Tibia")[0].MainModule.BaseAddress.ToInt32()) 
    Msg will probably be one of these for a key press:

    PHP Code:
            public const Int32 WM_CHAR 0x0102;
            public const 
    Int32 WM_KEYDOWN 0x0100;
            public const 
    Int32 WM_KEYUP 0x0101;
            public const 
    Int32 VK_RETURN 0x0D
    Note that if you use WM_KEYDOWN you should always follow up with WM_KEYUP on the same keycode. The keycode should be inserted into wParam, and can be chosen from a list of virtual key codes. I use a list like this, and select one as I need to:

    PHP Code:
            enum ArrowKeys uint
            
    {
                
    left 0x25,
                
    up 0x26,
                
    right 0x27,
                
    down 0x28
            

    lParam is something I don't use, nor know how to, but I just declare it like this:

    PHP Code:
    IntPtr lParam = new IntPtr(); 
    You can get the memory addresses of items in the inventory by having an empty backpack, adding a gold coin to it, then searching for 3031 in Cheat Engine or something, then you'll have a list, now change it to another item, and do "Next" search for the new item id, and the list should decrease, change back to the gp, search again, try another item and keep doing Next searches in this way until you've just got one address, now you've something to work from. If it was the first item in your inventory, you can probably work out from TibiaAPI source code the structure of the inventory at the time, and calculate what item you've found, then work your way backwards until you've got the start of the inventory structure, then you can iterate through it to get a list of items, their stacksize, and a few flags like movable, iscontainer, canuse, usetype etc... You'll need to know the length of each item in the inventory, and a few other things. I often find a good way to find out structures is to dump the output of the memory to a multi line textbox, and examine it in a text editor for \0 (terminator key, it tells you the end of a string), some integers which may be of relevance, e.g 60 (stack size, if you have 60 items in a stack), and so on... This may be difficult though, and time consuming, so you might be better off to pilfer the addresses and offsets from TibiaAPI.

    An important piece of advice I can give you now is that using TibiaAPI is not necessarily a bad thing. It's not really challenging to read memory addresses and acquire information from the Tibia client at all, what's challenging is using the information in a way which is thread safe, efficient, and actually useful to the end user (even if it is yourself). The beauty of TibiaAPI is that it's not something you will just want to abuse, you may reach one of its many limitations, and decide that you want to take your work a step further. When you do so, you'll probably end up rewriting a large portion of TibiaAPI itself, in order to do more of what you want. The difficult things which you most likely won't be able to do at first are those such as writing your own A* search algorithm, for pathfinding. The A* search algorithm, if you don't know, is a pathfinding function which will take 2 locations, and find the shortest, or quickest path between the two points, considering a whole range of variables depending on your requirements. Those variables could be things as simple as a wall, blocking a certain path, or as complex as the amount of time in ms it takes you to walk over a certain tile. If your algorithm is well written, you'll be able to find the best path every time, without fail. The problem is most of the examples are also written in higher level codes such as C++, which makes them difficult to translate into a low level language like C#, and even more difficult to understand by someone who is new to programming, as they will use a whole variety of functions which don't exist in C#, and they will do different things in some very different ways. Perhaps the most difficult thing you'll find is actually making something which you can work on yourself. The biggest problem I face with all of my projects is that they reach a certain size and I just lose interest, say I've got 1000 lines of code in my reader class, I will need to modify it to read another value, I won't want to add the stuff because it might break the rest of the code. People say that annotation (comments) will help with this, but I often find that the best way to do it is using #region and #endregion, to declare regions of code which are grouped together based on what they do. I also find that creating multiple classes may at first seem rather pointless and time wasting, but having a class for reading, one for controlling, one for the GUI, one for storing object information, one for storing addresses, one for doing pathfinding, and one for anything which doesn't fall into any of the above categories will really help later on. Like at the minute my objects class only has 6 objects, 3 of which are completely empty, 1 of which contains 1 address which might even be incorrect. The thing is, in a months time I will be able to pick it up and look at it, and restart working on it, even if I've forgotten everything about it, it will all make sense still because of how it is written.

    Another piece of advice, and please don't take it the wrong way that I'm throwing advice everywhere, is to get yourself a copy of C# 5.0 in a nutshell. I've got the 4.0 book in front of me and it's helped me countless times, I've actually used a function I hadn't used before, which is the switch function, really useful for testing variables against multiple values (especially strings). I saw the function in an example I found while googling the SendMessage() function, and didn't quite understand how it was being used, so I flicked to the index of C# 4.0 in a nutshell, found "switch", and looked at the page about it, it had a page and a half or so of information and example code which demonstrated perfectly clearly how to use the function according to the C# 4.0 standards. I then mentally high-fived myself and carried on working through the program.

  8. #8
    Junior Member
    Join Date
    Jan 2013
    Posts
    4
    Quote Originally Posted by ManInTheCave View Post
    Sorry about the link, this one is correct. To send keys and what not there are a few things you need to know about the SendMessage() function of User32.dll.

    SendMessage() can be imported using this code:

    PHP Code:
            [DllImport("User32.DLL")]
            public static 
    extern int SendMessage(IntPtr hWndUInt32 MsgIntPtr wParamIntPtr lParam); 
    You need to pass it the window handle of your Tibia client, which you can get (in VS2012, C#) using:

    PHP Code:
    Convert.ToUInt32(Process.GetProcessesByName("Tibia")[0].MainModule.BaseAddress.ToInt32()) 
    Msg will probably be one of these for a key press:

    PHP Code:
            public const Int32 WM_CHAR 0x0102;
            public const 
    Int32 WM_KEYDOWN 0x0100;
            public const 
    Int32 WM_KEYUP 0x0101;
            public const 
    Int32 VK_RETURN 0x0D
    Note that if you use WM_KEYDOWN you should always follow up with WM_KEYUP on the same keycode. The keycode should be inserted into wParam, and can be chosen from a list of virtual key codes. I use a list like this, and select one as I need to:

    PHP Code:
            enum ArrowKeys uint
            
    {
                
    left 0x25,
                
    up 0x26,
                
    right 0x27,
                
    down 0x28
            

    lParam is something I don't use, nor know how to, but I just declare it like this:

    PHP Code:
    IntPtr lParam = new IntPtr(); 
    You can get the memory addresses of items in the inventory by having an empty backpack, adding a gold coin to it, then searching for 3031 in Cheat Engine or something, then you'll have a list, now change it to another item, and do "Next" search for the new item id, and the list should decrease, change back to the gp, search again, try another item and keep doing Next searches in this way until you've just got one address, now you've something to work from. If it was the first item in your inventory, you can probably work out from TibiaAPI source code the structure of the inventory at the time, and calculate what item you've found, then work your way backwards until you've got the start of the inventory structure, then you can iterate through it to get a list of items, their stacksize, and a few flags like movable, iscontainer, canuse, usetype etc... You'll need to know the length of each item in the inventory, and a few other things. I often find a good way to find out structures is to dump the output of the memory to a multi line textbox, and examine it in a text editor for \0 (terminator key, it tells you the end of a string), some integers which may be of relevance, e.g 60 (stack size, if you have 60 items in a stack), and so on... This may be difficult though, and time consuming, so you might be better off to pilfer the addresses and offsets from TibiaAPI.

    An important piece of advice I can give you now is that using TibiaAPI is not necessarily a bad thing. It's not really challenging to read memory addresses and acquire information from the Tibia client at all, what's challenging is using the information in a way which is thread safe, efficient, and actually useful to the end user (even if it is yourself). The beauty of TibiaAPI is that it's not something you will just want to abuse, you may reach one of its many limitations, and decide that you want to take your work a step further. When you do so, you'll probably end up rewriting a large portion of TibiaAPI itself, in order to do more of what you want. The difficult things which you most likely won't be able to do at first are those such as writing your own A* search algorithm, for pathfinding. The A* search algorithm, if you don't know, is a pathfinding function which will take 2 locations, and find the shortest, or quickest path between the two points, considering a whole range of variables depending on your requirements. Those variables could be things as simple as a wall, blocking a certain path, or as complex as the amount of time in ms it takes you to walk over a certain tile. If your algorithm is well written, you'll be able to find the best path every time, without fail. The problem is most of the examples are also written in higher level codes such as C++, which makes them difficult to translate into a low level language like C#, and even more difficult to understand by someone who is new to programming, as they will use a whole variety of functions which don't exist in C#, and they will do different things in some very different ways. Perhaps the most difficult thing you'll find is actually making something which you can work on yourself. The biggest problem I face with all of my projects is that they reach a certain size and I just lose interest, say I've got 1000 lines of code in my reader class, I will need to modify it to read another value, I won't want to add the stuff because it might break the rest of the code. People say that annotation (comments) will help with this, but I often find that the best way to do it is using #region and #endregion, to declare regions of code which are grouped together based on what they do. I also find that creating multiple classes may at first seem rather pointless and time wasting, but having a class for reading, one for controlling, one for the GUI, one for storing object information, one for storing addresses, one for doing pathfinding, and one for anything which doesn't fall into any of the above categories will really help later on. Like at the minute my objects class only has 6 objects, 3 of which are completely empty, 1 of which contains 1 address which might even be incorrect. The thing is, in a months time I will be able to pick it up and look at it, and restart working on it, even if I've forgotten everything about it, it will all make sense still because of how it is written.

    Another piece of advice, and please don't take it the wrong way that I'm throwing advice everywhere, is to get yourself a copy of C# 5.0 in a nutshell. I've got the 4.0 book in front of me and it's helped me countless times, I've actually used a function I hadn't used before, which is the switch function, really useful for testing variables against multiple values (especially strings). I saw the function in an example I found while googling the SendMessage() function, and didn't quite understand how it was being used, so I flicked to the index of C# 4.0 in a nutshell, found "switch", and looked at the page about it, it had a page and a half or so of information and example code which demonstrated perfectly clearly how to use the function according to the C# 4.0 standards. I then mentally high-fived myself and carried on working through the program.
    Thank you. You have been very helpful feeding me information. I guess its up to me to learn and finish this now. I'll see if I can get a hold of that book.

  9. #9
    Senior Member
    Join Date
    Jan 2008
    Location
    Cambridge, England
    Posts
    725
    Quote Originally Posted by Inzann View Post
    Thank you. You have been very helpful feeding me information. I guess its up to me to learn and finish this now. I'll see if I can get a hold of that book.
    No problem & good luck.

    An extension on the inventory reading, if you do the same thing with the 2nd slot in inventory, you will find the address of slot nr 2. Once you have this, in MS calculator (with View > Scientific, and "Hex" instead of "Dec") subtract slot nr 1 address from slot nr 2 address, and you'll have the step between items, then you just need to output the data between the steps and you should know roughly what it means if you use a bit of common sense.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •