|
You last visited: Today at 13:41
Advertisement
moblist
Discussion on moblist within the CO2 Programming forum part of the Conquer Online 2 category.
03/25/2010, 18:21
|
#1
|
elite*gold: 0
Join Date: Jan 2007
Posts: 177
Received Thanks: 57
|
moblist
Hey guys, i posted here a while back, but I'm still having problems and nothing has really helped except to teach me new reasons to beat my head against the wall. Pretty much, I'm trying to find the moblist in conquer's memory. I can find individual elements of whatever data structure they are stored in (seems almost like a linked list, except that the list isn't re-ordered when an element is deleted, but instead just marked as free for use by whatever needs to be added to the list), my main problem is i cannot find a static pointer to any of the elements themselves. The elements themselves seem to be seperated by an offset of 0x988.
Pretty much what i have so far is that when there is a mob actively stored in the list(?) element, the first value turns to a fixed number (7373896) and otherwise it changes to a seemingly random number (2XXXXXXX). The way i actually found the elements was to go to a secluded area (moon platform works nicely) and then go there also with another character and search the other character's coords in cheat engine until i got it down to the memory address of their coords. This then traces back to the start of that element. My problem from here is that i cannot backtrack to find where it actually points to the moblist structure, or how to use it.
Seeing as clint has turned into a ghost in the last week or two, if anyone has any experience in this and would like to help me i would greatly appreciate it!
|
|
|
03/25/2010, 18:57
|
#2
|
elite*gold: 0
Join Date: Mar 2010
Posts: 2
Received Thanks: 0
|
thanxxx
|
|
|
03/25/2010, 19:36
|
#3
|
elite*gold: 0
Join Date: Oct 2008
Posts: 828
Received Thanks: 427
|
thanxx?? why did you press thanks for lol!!!
|
|
|
03/25/2010, 21:01
|
#4
|
elite*gold: 0
Join Date: Jan 2007
Posts: 177
Received Thanks: 57
|
Quote:
Originally Posted by SaM.ThE.MaN
thanxx?? why did you press thanks for lol!!!
|
to up post count
|
|
|
03/25/2010, 22:52
|
#5
|
elite*gold: 20
Join Date: Aug 2007
Posts: 1,749
Received Thanks: 2,199
|
MobListPtrPtr = 0x7AEF24
MobListPtr = [MobListPtrPtr]
FirstMobBaseAddress = [MobListPtr]
SecondMobBaseAddress = [MobListPtr + 0x4]
ThirdMobBaseAddress = [MobListPtr + 0x4 + 0x4]
FourthMobBaseAddress = [MobListPtr + 0x4 + 0x4 + 0x4]
FifthMobBaseAddress = [MobListPtr + 0x4 + 0x4 + 0x4 + 0x4]
As long as xMobBaseAddress != 0
[] = The integer value of the address ( ReadProcessMemory(pHandle, Address, retval, 4, 4)
I'm bad at explaining things, I know
|
|
|
03/26/2010, 03:55
|
#6
|
elite*gold: 0
Join Date: Jan 2007
Posts: 177
Received Thanks: 57
|
Quote:
Originally Posted by IAmHawtness
MobListPtrPtr = 0x7AEF24
MobListPtr = [MobListPtrPtr]
FirstMobBaseAddress = [MobListPtr]
SecondMobBaseAddress = [MobListPtr + 0x4]
ThirdMobBaseAddress = [MobListPtr + 0x4 + 0x4]
FourthMobBaseAddress = [MobListPtr + 0x4 + 0x4 + 0x4]
FifthMobBaseAddress = [MobListPtr + 0x4 + 0x4 + 0x4 + 0x4]
As long as xMobBaseAddress != 0
[] = The integer value of the address ( ReadProcessMemory(pHandle, Address, retval, 4, 4)
I'm bad at explaining things, I know 
|
that is just amazing  could you possibly explain how you got the ptrptr? all i could find were the individual elements :x lol i've used that to kludge together a hardcoded moblist which just checks the first 50 elements in the moblist to see whether or not it has something currently inside of it and if so puts it at that index in an array :P
|
|
|
03/26/2010, 08:48
|
#7
|
elite*gold: 20
Join Date: Aug 2007
Posts: 1,749
Received Thanks: 2,199
|
Quote:
Originally Posted by DarkMessiah
that is just amazing  could you possibly explain how you got the ptrptr? all i could find were the individual elements :x lol i've used that to kludge together a hardcoded moblist which just checks the first 50 elements in the moblist to see whether or not it has something currently inside of it and if so puts it at that index in an array :P
|
I just found the base address of the first mob in the moblist, searched for all addresses that stored the base address, and them I did the same with those addresses until I found a static address. There's lots of other ways to find it though
|
|
|
03/26/2010, 11:05
|
#8
|
elite*gold: 0
Join Date: Oct 2008
Posts: 828
Received Thanks: 427
|
IamHawtness,
Do you program,idk if you do :P,"if" you do "then" pm me and tell me which language you use and if you could teach meh!
"Else" Do not pm me
End if.
|
|
|
03/26/2010, 18:43
|
#9
|
elite*gold: 0
Join Date: Jan 2007
Posts: 177
Received Thanks: 57
|
Quote:
Originally Posted by IAmHawtness
MobListPtrPtr = 0x7AEF24
MobListPtr = [MobListPtrPtr]
FirstMobBaseAddress = [MobListPtr]
SecondMobBaseAddress = [MobListPtr + 0x4]
ThirdMobBaseAddress = [MobListPtr + 0x4 + 0x4]
FourthMobBaseAddress = [MobListPtr + 0x4 + 0x4 + 0x4]
FifthMobBaseAddress = [MobListPtr + 0x4 + 0x4 + 0x4 + 0x4]
As long as xMobBaseAddress != 0
[] = The integer value of the address ( ReadProcessMemory(pHandle, Address, retval, 4, 4)
I'm bad at explaining things, I know 
|
can you possibly show me how you actually use this to form some kind of list? i'm just not sure what to check to make sure there's actually a mob there, because neither of the values ever go to 0, even when the screen is empty.
|
|
|
03/27/2010, 00:12
|
#10
|
elite*gold: 0
Join Date: Jan 2007
Posts: 177
Received Thanks: 57
|
also are you sure it's a 4 offset instead of 8?
|
|
|
03/27/2010, 10:21
|
#11
|
elite*gold: 20
Join Date: Aug 2005
Posts: 1,734
Received Thanks: 1,001
|
I'd imagine it's something like this.
PHP Code:
class Monster { private uint Base; public Monster(uint Base) { this.Base = Base; } public uint UID { get { return ReadDWord(Base); // Assuming it's the first value. } } public static Monster[] Monster.GetMonsters(uint Base) { List<Monster> Monsters = new List<Monster>(); uint ListPointer = ReadDWord(Base); uint Counter = 0; while(true) { uint MonsterPointer = ReadDWord(ListPointer + (Counter++ * 4)); Monster monster = new Monster(MonsterPointer); if(monster.UID == 0) break; Monsters.Add(monster); } return Monsters.ToArray(); } }
class Program { public static void Main(string[] args) { Monster[] Monsters = Monster.GetMonsters(0x7AEF24); } }
|
|
|
03/27/2010, 16:20
|
#12
|
elite*gold: 0
Join Date: Jan 2007
Posts: 177
Received Thanks: 57
|
Quote:
Originally Posted by tanelipe
I'd imagine it's something like this.
PHP Code:
class Monster { private uint Base; public Monster(uint Base) { this.Base = Base; } public uint UID { get { return ReadDWord(Base); // Assuming it's the first value. } } public static Monster[] Monster.GetMonsters(uint Base) { List<Monster> Monsters = new List<Monster>(); uint ListPointer = ReadDWord(Base); uint Counter = 0; while(true) { uint MonsterPointer = ReadDWord(ListPointer + (Counter++ * 4)); Monster monster = new Monster(MonsterPointer); if(monster.UID == 0) break; Monsters.Add(monster); } return Monsters.ToArray(); } }
class Program { public static void Main(string[] args) { Monster[] Monsters = Monster.GetMonsters(0x7AEF24); } }
|
Yeah, here's what I've got:
Code:
public List<Mob> mobList
{
get
{
List<Mob> temp = new List<Mob>();
int index = ReadDword(MobListPtr);
int mobelem = ReadDword(index);
while (this.ReadDword(mobelem) == 7373896)
{
Mob m = new Mob(this, this.ReadDword(index));
temp.Add(m);
index += 8;
mobelem = ReadDword(index);
}
return temp;
}
}
for some reason, the first element is the static number 7373896 if it is being used. This works almost fully, but misses a few mobs every now and then for no apparent reason :/
|
|
|
All times are GMT +1. The time now is 13:42.
|
|