I've recently been playing with WoW reverse engineering, but I'm still a bit of a noob, so bear with me. I just thought I'd share my findings since I've been using other people's work and it's always good to give back. If this is the wrong place for this, feel free to flame me appropriately.
I'm using the BlackrainObjects fork from WRadar, but unfortunately it doesn't allow you to get guild names for players. Looking at the code for getting player names it seems that WoW uses a generic hash map thingie (STL? I'm no C++ coder) with truncated GUIDs as keys. I found the offsets for the guild name cache in this post by TOM_RUS:
http://www.mmowned.com/forums/world-...ml#post2072895
I first wrote some code to dump all guild strings by iterating over all the objects in all the bins in the hashmap and scanning for alphanumeric characters in the linked data. I found that the strings are located at 0x28.
I then tried to cross-reference the guids from the guild map with the player objects, and found that storage field 0x5 holds the guild name guid.
I wrote a quick helper class to get strings from cache objects. It can also be used to get other strings such as pet names and whatnot, but I've just put in the name and guild name caches for now.
#2074076 - Pastie
You'll need to modify Offsets.cs and add the offsets for the guild cache:
The Name and Guild properties of the WowPlayer class can now simply read/// <summary>
/// Memory locations specific to the WowPlayer type.
/// </summary>
public enum WowPlayer : uint
{
NameStore = 0x8DD9A8 + 0x8,
NameMask = 0x024,
NameBase = 0x01c,
NameString = 0x020,
GuildNameStore = 0x8DDA38 + 0x8,
GuildNameMask = 0x024,
GuildNameBase = 0x01c,
GuildNameString = 40
}
/// <summary>
/// The name of the player.
/// </summary>
public override string Name
{
get
{
return StringStore.NameStore.getString((uint)GUID);
}
}
public string Guild
{
get
{
return StringStore.GuildNameStore.getString(GetStorageField<uint>((uint)5));
}
}