Register for your free account! | Forgot your password?

Go Back   elitepvpers > Popular Games > World of Warcraft > WoW Bots
You last visited: Today at 22:24

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

Advertisement



[Hilfe]Unit / Objectnamen auslesen

Discussion on [Hilfe]Unit / Objectnamen auslesen within the WoW Bots forum part of the World of Warcraft category.

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 :


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 10/20/2009, 03:42   #2
 
Xeranor's Avatar
 
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 10/20/2009, 21:33   #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 10/20/2009, 21:36   #4
 
Xeranor's Avatar
 
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 10/20/2009, 21:39   #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 10/21/2009, 14:55   #6
 
elite*gold: 0
Join Date: Apr 2007
Posts: 56
Received Thanks: 3
Status update


Ich bekomm die Playernamen einfach nich hin :<
iderise is offline  
Old 10/21/2009, 17:25   #7
 
12354's Avatar
 
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 10/21/2009, 22:41   #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 10/22/2009, 17:51   #9
 
12354's Avatar
 
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/22/2009, 18:29   #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 10/22/2009, 20:47   #11
 
12354's Avatar
 
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


Similar Threads Similar Threads
Hallo Jungs brauche HILFE [DAME] freeBSD Putty SYSTEMINFORMATION auslesen.
07/31/2010 - Metin2 Private Server - 6 Replies
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 FreeBSD installiert. Jetzt ist mir wichtig mit welchem befehl kann ich uber Putty auslesen ob meine 12 GB Arbeitsspeicher erkennt werden oder nur 3.7 GB erkannt wurden. Benutze Putty und FreeBSD 7.2 Am system wurden noch keine Updates vorgenommen. mir gehts darum ob ich PAE installieren muss oder ob das System schon 12 GBArbeitsspeicher...
Brauche hilfe Php auslesen
04/26/2010 - Web Development - 7 Replies
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 vb08 geht nicht autoit auch nicht mit eine php code <?php show_source("http://blablabla.bla/blabla.php ") ?> ich verzweifle langsam ich will den ganzen quelltext von dieser datei aber leider kann ich nicht in das ftp verzeichniss-.- bitte helft mir (=
Unit bar
08/05/2005 - World of Warcraft - 14 Replies
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 rang an vom ausgewählten ziel 4. ist klein aber gut lesbar 5. und mann hat viele weitere einstellungs möglichkeiten Klick also HF :bandit: EDIT: hier sind auch die befehle dabei Klick Two



All times are GMT +2. The time now is 22:24.


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