Register for your free account! | Forgot your password?

Go Back   elitepvpers > World of Warcraft > WoW Bots
You last visited: Today at 01:33

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

 

[Hilfe]Unit / Objectnamen auslesen

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Apr 2007
Posts: 56
Received Thanks: 3
[Hilfe]Unit / Objectnamen auslesen

Abend:P

Ich bin hier gerade dabei mir zum lernen nen kleinen Bot zu schreiben was auch bisher wunderbar funktioniert...

Nur stolper ich gerade darüber die GameObject / bzw Playernamen von den jeweiligen objectadressen auszulesen :
You must register and activate your account in order to view images.

die objekte lese ich aus mit:

Code:
void GetObjects(HANDLE hProcess,vector<DWORD>& vobjects)
{
wowstruct wow;
int i=0;
DWORD gclientconnection,curobj, scurmgr, nextobj, pbase, cguid;

gclientconnection = MemoryReadInt(hProcess,wow.ptr.clientConnection,true,"(gClientCOnnection)");
scurmgr = MemoryReadInt(hProcess,gclientconnection + wow.offsets.objectManagerOffset,true,"(scurmgr)");
curobj = MemoryReadInt(hProcess,scurmgr + wow.offsets.ObjManagerFirstObject,true,"");

nextobj = curobj;
vobjects.push_back(curobj);
while((curobj != 0) && (curobj & 1) == 0)
{
++i;
nextobj = MemoryReadInt(hProcess,curobj + wow.offsets.ObjectNextOffset,true,"");
cguid = MemoryReadInt(hProcess,(curobj + wow.offsets.ObjectGUIDOffset),true,"");

if (nextobj == curobj){
	break;
} else {
	vobjects.push_back(curobj);
	curobj = nextobj;
}
}//whileend

}
Die listbox fülle ich mit:
Code:
		case 4: //Players
			index = m_pModeless->m_DebugLogBox.InsertItem(i,ToString(i).c_str());
			stor.Format("0x%X",vobjects[i]);
			m_pModeless->m_DebugLogBox.SetItemText(index,1,stor);
			m_pModeless->m_DebugLogBox.SetItemText(index,2,ToString(guid).c_str());
			m_pModeless->m_DebugLogBox.SetItemText(index,3,"Player");
			
			stor.Format("%10s",MemoryReadString(Handle,(vobjects[i] + 0x95C)+0x5C,""));
			m_pModeless->m_DebugLogBox.SetItemText(index,4,stor);
Code:
		case 5: //GameObjects
			index = m_pModeless->m_DebugLogBox.InsertItem(i,ToString(i).c_str());
			stor.Format("0x%X",vobjects[i]);
			m_pModeless->m_DebugLogBox.SetItemText(index,1,stor);
			m_pModeless->m_DebugLogBox.SetItemText(index,2,ToString(guid).c_str());
			m_pModeless->m_DebugLogBox.SetItemText(index,3,"GO");
			
			storage = MemoryReadInt(Handle,vobjects[i] + 0x1A4,0,"");
			stor.Format("%10s",MemoryReadString(Handle,storage+0x90,""));
			m_pModeless->m_DebugLogBox.SetItemText(index,4,stor);
(loop mit for schleife und case nach jeweiligen objecttyp) storage=dword / stor=cstring

bei player habe ich (vobjects[i] + 0x95C)+0x5C versucht
und bei GO's einzeln


Ich bin mir sicher das die offsets soweit stimmen allerdings komme ich einfach nicht darauf wie ich sie auslese...

Hoffe jemand kann helfen :x



iderise is offline  
Old   #2
 
elite*gold: 0
Join Date: Aug 2009
Posts: 308
Received Thanks: 184
#in Engine kram#

Code:
        /// <summary>
        /// Reads the name of the unit
        /// </summary>
        /// <param name="curObject">The ObjectID optained from the objectmanager</param>
        /// <returns>Returns the name of the unit as ASCII string.</returns>
        public string getName(uint curObject)
        {
            bm.OpenProcessAndThread(pid);
            try
            {
                return bm.ReadASCIIString(bm.ReadUInt((bm.ReadUInt((curObject + (uint)offsets.UNIT_NAMEOFFSET_1)) + (uint)offsets.UNIT_NAMEOFFSET_2)), 50);
            }
            catch
            {
                try
                {
                    return bm.ReadASCIIString(bm.ReadUInt((bm.ReadUInt((curObject + (uint)offsets.GAMEOBJECT_NAMEOFFSET_1)) + (uint)offsets.GAMEOBJECT_NAMEOFFSET_2)), 50);
                }
                catch
                {
                    return "error";
                }
            }
        }
und die offsets dazu:
Code:
        UNIT_NAMEOFFSET_1 = 0x968,
        UNIT_NAMEOFFSET_2 = 0x5C,
        GAMEOBJECT_NAMEOFFSET_1 = 0x1A4,
        GAMEOBJECT_NAMEOFFSET_2 = 0x90,
ich hoffe das hilft dir


Xeranor is offline  
Thanks
1 User
Old   #3
 
elite*gold: 0
Join Date: Apr 2007
Posts: 56
Received Thanks: 3
SO macht das ganze sinn danke dir ! :P


Hast du vllt. auch eine Ahnung wie ich die playernamen auslese?
NPC's/GO's/funktionieren wunderbar
iderise is offline  
Old   #4
 
elite*gold: 0
Join Date: Aug 2009
Posts: 308
Received Thanks: 184
ja da gibts eine eigene adresse *such*

bm.ReadASCIIString(0x012705E8,30)


Xeranor is offline  
Old   #5
 
elite*gold: 0
Join Date: Apr 2007
Posts: 56
Received Thanks: 3
Die Static is klar ^^

Ich meinte das auslesen von den Namen anderer Player.

danke trozdem für die mühe:P
iderise is offline  
Old   #6
 
elite*gold: 0
Join Date: Apr 2007
Posts: 56
Received Thanks: 3
Status update
You must register and activate your account in order to view images.

Ich bekomm die Playernamen einfach nich hin :<
iderise is offline  
Old   #7
 
elite*gold: 0
Join Date: Apr 2007
Posts: 943
Received Thanks: 132
Playernamen sind in so ner Art DB gespeichert.

afaik(lang ists her ;D) musste die durchgehen und dann per GUID Vergleich den richtigen Namen finden.

Mom ich such mal den Code.

EDIT für faule( ist aber "in-process"): Du könntest auch einfach die entsprechende VMT callen
-> musst bei WoW Updates nur eventuell den Index ändern : D
-> nur eine Methode für alle ObjektArten(NPCs,Units,GOs,etc)

EDIT2 sagt:
Nö hab den Code nimmer!(hab nur noch den vmt call code ;P)
MMO sagt aber ,dass es so funktioniert(mit alten 3.0.3 Offsets)
Code:
void NameFromGuid(LONGLONG guid, int numBytes, char *name)
{                                                
	static const unsigned long nameStorePtr        = 0x011AE3D0 + 0x8;  // Player name database
	static const unsigned long nameMaskOffset      = 0x024;  // Offset for the mask used with GUID to select a linked list
	static const unsigned long nameBaseOffset      = 0x01c;  // Offset for the start of the name linked list
	static const unsigned long nameStringOffset    = 0x020;  // Offset to the C string in a name structure

	unsigned long mask, base, offset, current, shortGUID, testGUID;
	
	mask = ReadDword(nameStorePtr + nameMaskOffset);
	base = ReadDword(nameStorePtr + nameBaseOffset);

	shortGUID = guid & 0xffffffff;  // Only half the guid is used to check for a hit
	offset = 12 * (mask & shortGUID);  // select the appropriate linked list
	
	current = ReadDword(base + offset + 8);
	offset = ReadDword(base + offset);  // next-4 ?

	if (current == 0 || (current & 0x1)) {*name = 0; return;}

	testGUID = ReadDword(current);
	
	while (testGUID != shortGUID)
	{
		current = ReadDword(current + offset + 4);
		
		if (current == 0 || (current & 0x1)) {*name = 0; return;}
		testGUID = ReadDword(current);		
	}

	// Found the guid in the name list...
	ReadBytesIntoBuffer(current + nameStringOffset, numBytes, name);	
}
12354 is offline  
Thanks
1 User
Old   #8
 
elite*gold: 0
Join Date: Apr 2007
Posts: 56
Received Thanks: 3
Großer dank an dich ! Nun mal schaun wie ich an die aktuellen offsets komme...
iderise is offline  
Old   #9
 
elite*gold: 0
Join Date: Apr 2007
Posts: 943
Received Thanks: 132
Lad mal die aktuellste WoW.exe hoch.
Ich schau se mir in Olly/IDA dann mal an : D
12354 is offline  
Old   #10
 
elite*gold: 0
Join Date: Apr 2007
Posts: 56
Received Thanks: 3


Hier :P falls du icq/msn/whatever hast und lust hast mir mal zu sagen wie du das machst ...ich hör dir gern zu :P

is doch stress immer wieder nachzufragen :<
iderise is offline  
Old   #11
 
elite*gold: 0
Join Date: Apr 2007
Posts: 943
Received Thanks: 132
So weit ich das erkennen kann :
nameStorePtr = 0x12542D8 + 0x8
Die restlichen Offsets sollten sich nicht verändert haben.

Meine ICQ : FUUUUUUUUUUUUUUUUUUUUUUUU ->
(lololol russische Links inc ;D )
EDIT: russische Links sind angekommen ,_,


12354 is offline  
Thanks
1 User
Reply



« Previous Thread | Next Thread »

Similar Threads
Hallo Jungs brauche HILFE [DAME] freeBSD Putty SYSTEMINFORMATION auslesen.
Hallo Jungs da ich mir jetzt einen Dedicated Server zugelegt hab möchte ich mich etwas mehr mit FreeBSD vertiefen. Hab erstmal Ubuntu gelöscht und...
6 Replies - Metin2 PServer - Discussions / Questions
Brauche hilfe Php auslesen
Also ich will eine .php ganz auslesen nicht nur wenn man rechtsklick macht dann kommt da fast nix... ich habe schon mehrere methoden ausprobiert mit...
7 Replies - Web Development
Unit bar
1. zeigt es bei target an welchen ziel der char im mom hat 2. hat der mod ne raid anzeige z.B. für priester praktisch zum heilen 3. zeigt es den...
14 Replies - WoW Addons



All times are GMT +1. The time now is 01:33.


Powered by vBulletin®
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Abuse
Copyright ©2017 elitepvpers All Rights Reserved.