Register for your free account! | Forgot your password?

You last visited: Today at 13:41

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

Advertisement



moblist

Discussion on moblist within the CO2 Programming forum part of the Conquer Online 2 category.

Reply
 
Old   #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!
DarkMessiah is offline  
Thanks
1 User
Old 03/25/2010, 18:57   #2
 
elite*gold: 0
Join Date: Mar 2010
Posts: 2
Received Thanks: 0
thanxxx
malak83 is offline  
Old 03/25/2010, 19:36   #3
 
SaM.ThE.MaN's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 828
Received Thanks: 427
thanxx?? why did you press thanks for lol!!!
SaM.ThE.MaN is offline  
Old 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 View Post
thanxx?? why did you press thanks for lol!!!
to up post count
DarkMessiah is offline  
Old 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
IAmHawtness is offline  
Old 03/26/2010, 03:55   #6
 
elite*gold: 0
Join Date: Jan 2007
Posts: 177
Received Thanks: 57
Quote:
Originally Posted by IAmHawtness View Post
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
DarkMessiah is offline  
Old 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 View Post
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
IAmHawtness is offline  
Old 03/26/2010, 11:05   #8
 
SaM.ThE.MaN's Avatar
 
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.
SaM.ThE.MaN is offline  
Old 03/26/2010, 18:43   #9
 
elite*gold: 0
Join Date: Jan 2007
Posts: 177
Received Thanks: 57
Quote:
Originally Posted by IAmHawtness View Post
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.
DarkMessiah is offline  
Old 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?
DarkMessiah is offline  
Old 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<
MonsterMonsters = 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);
    }

tanelipe is offline  
Old 03/27/2010, 16:20   #12
 
elite*gold: 0
Join Date: Jan 2007
Posts: 177
Received Thanks: 57
Quote:
Originally Posted by tanelipe View Post
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<
MonsterMonsters = 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 :/
DarkMessiah is offline  
Reply




All times are GMT +1. The time now is 13:42.


Powered by vBulletin®
Copyright ©2000 - 2025, 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 ©2025 elitepvpers All Rights Reserved.