Torero wrote:How do I learn to read this? This is exactly like the language of c right?
It's a more complex structure.. Just google any C or C++ site and learn what a structure is.
Then just take our word for it that you can nest structures. (and that structures can contain any type; byte, word, pointers, other structs, ...)
Torero wrote:extern WORD bHitPoints = { "NetHackw.exe", 0x1696D4 };
is exactly the same as w[nethackw.exe+0x1696D4]
Oh, it's because there are different ways to interpret it and that we must tell it how we want the value to be interpreted, in this case w[nethackw.exe+0x1696D4] renders it into a form that can be used in the script?
That is partly correct.
The format "w[nethackw.exe+0x1696D4]" is used in the expression evaluator
"extern WORD bHitPoints = { "NetHackw.exe", 0x1696D4 };"
is used in script... the WORD in this line corresponds to the w in the expression evaluator format.
So in scripts you want to use the extern expression.
Torero wrote:where is the property button?
You misunderstood. When you save a value in the save table, you can right click it and modify it, there on the second tab you will see the other
possibilities you have of defining an address. simple, relative or complex.
Torero wrote:what do i do if there are too many returns?
That, my good man, is the million dollar question.
As L.Spiro already said, there are multiple ways.
But all of them are too complex for you at this point, I think.
1) When you have the saved variable, use the "find what writes" function and when the autohack tells you what instruction it is, work from there..
(you will need some assembler knowledge.)
2) What you can also do (lots more work), is save all the found pointers+offset, then reload the game and see which of the saved pointers+offset is still the right value.
(this won't work if there are multiple levels of pointers.)