(RoF2) Fixed Tracking.

This commit is contained in:
Trevius 2014-12-22 16:09:11 -06:00
parent ce3d513ca0
commit 6e192b1794
14 changed files with 51 additions and 63 deletions

View File

@ -1,5 +1,8 @@
EQEMu Changelog (Started on Sept 24, 2003 15:50) EQEMu Changelog (Started on Sept 24, 2003 15:50)
------------------------------------------------------- -------------------------------------------------------
== 12/22/2014 ==
Trevius: (RoF2) Fixed Tracking.
== 12/21/2014 == == 12/21/2014 ==
Trevius: (RoF2) Fixed Extended Targets Window by correcting opcodes. Trevius: (RoF2) Fixed Extended Targets Window by correcting opcodes.
Trevius: (RoF/RoF2) Fixed Guild Rank in the Player Profile, which prevents the guild rank message on login/zone. Trevius: (RoF/RoF2) Fixed Guild Rank in the Player Profile, which prevents the guild rank message on login/zone.

View File

@ -3015,14 +3015,14 @@ struct ClientError_Struct
}; };
struct Track_Struct { struct Track_Struct {
uint16 entityid; uint32 entityid;
uint16 padding002;
float distance; float distance;
// Fields for SoD and later // Fields for SoD and later
uint8 level; uint8 level;
uint8 NPC; uint8 is_npc;
uint8 GroupMember;
char name[64]; char name[64];
uint8 is_pet;
uint8 is_merc;
}; };
struct Tracking_Struct { struct Tracking_Struct {

View File

@ -3294,9 +3294,9 @@ namespace RoF
VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->entityid); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->entityid);
VARSTRUCT_ENCODE_TYPE(float, Buffer, emu->distance); VARSTRUCT_ENCODE_TYPE(float, Buffer, emu->distance);
VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->level); VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->level);
VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->NPC); VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->is_npc);
VARSTRUCT_ENCODE_STRING(Buffer, emu->name); VARSTRUCT_ENCODE_STRING(Buffer, emu->name);
VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->GroupMember); VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->is_merc);
} }
delete[] __emu_buffer; delete[] __emu_buffer;

View File

@ -3289,7 +3289,7 @@ namespace RoF2
int PacketSize = 2; int PacketSize = 2;
for (int i = 0; i < EntryCount; ++i, ++emu) for (int i = 0; i < EntryCount; ++i, ++emu)
PacketSize += (12 + strlen(emu->name)); PacketSize += (13 + strlen(emu->name));
emu = (Track_Struct *)__emu_buffer; emu = (Track_Struct *)__emu_buffer;
@ -3305,9 +3305,10 @@ namespace RoF2
VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->entityid); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->entityid);
VARSTRUCT_ENCODE_TYPE(float, Buffer, emu->distance); VARSTRUCT_ENCODE_TYPE(float, Buffer, emu->distance);
VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->level); VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->level);
VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->NPC); VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->is_npc);
VARSTRUCT_ENCODE_STRING(Buffer, emu->name); VARSTRUCT_ENCODE_STRING(Buffer, emu->name);
VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->GroupMember); VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->is_pet);
VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->is_merc);
} }
delete[] __emu_buffer; delete[] __emu_buffer;

View File

@ -3112,29 +3112,24 @@ struct MobHealth
}; };
struct Track_Struct { struct Track_Struct {
uint16 entityid; uint32 entityid;
uint16 y; float distance;
uint16 x; // Fields for SoD and later
uint16 z; uint8 level;
uint8 is_npc;
char name[64];
uint8 is_pet;
uint8 is_merc;
}; };
struct Tracking_Struct { struct Tracking_Struct {
uint16 entry_count;
Track_Struct Entrys[0]; Track_Struct Entrys[0];
}; };
// Looks like new tracking structures - Opcode: 0x57a7 struct TrackTarget_Struct
struct Tracking_Struct_New { {
uint16 totalcount; // Total Count of mobs within tracking range uint32 EntityID;
Track_Struct Entrys[0];
};
struct Track_Struct_New {
uint16 entityid; // Entity ID
uint16 unknown002; // 00 00
uint32 unknown004; //
uint8 level; // level of mob
uint8 unknown009; // 01 maybe type of mob? player/npc?
char name[1]; // name of mob
}; };

View File

@ -3103,32 +3103,25 @@ struct MobHealth
}; };
struct Track_Struct { struct Track_Struct {
uint16 entityid; uint32 entityid;
uint16 y; float distance;
uint16 x; // Fields for SoD and later
uint16 z; uint8 level;
uint8 is_npc;
char name[64];
uint8 is_merc;
}; };
struct Tracking_Struct { struct Tracking_Struct {
uint16 entry_count;
Track_Struct Entrys[0]; Track_Struct Entrys[0];
}; };
// Looks like new tracking structures - Opcode: 0x57a7 struct TrackTarget_Struct
struct Tracking_Struct_New { {
uint16 totalcount; // Total Count of mobs within tracking range uint32 EntityID;
Track_Struct Entrys[0];
}; };
struct Track_Struct_New {
uint16 entityid; // Entity ID
uint16 unknown002; // 00 00
uint32 unknown004; //
uint8 level; // level of mob
uint8 unknown009; // 01 maybe type of mob? player/npc?
char name[1]; // name of mob
};
/* /*
** ZoneServerInfo_Struct ** ZoneServerInfo_Struct
** Zone server information ** Zone server information

View File

@ -2058,9 +2058,9 @@ namespace SoD
VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->entityid); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->entityid);
VARSTRUCT_ENCODE_TYPE(float, Buffer, emu->distance); VARSTRUCT_ENCODE_TYPE(float, Buffer, emu->distance);
VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->level); VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->level);
VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->NPC); VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->is_npc);
VARSTRUCT_ENCODE_STRING(Buffer, emu->name); VARSTRUCT_ENCODE_STRING(Buffer, emu->name);
VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->GroupMember); VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->is_merc);
} }
delete[] __emu_buffer; delete[] __emu_buffer;

View File

@ -1645,7 +1645,7 @@ namespace SoF
for (int i = 0; i < EntryCount; ++i, ++eq, ++emu) for (int i = 0; i < EntryCount; ++i, ++eq, ++emu)
{ {
OUT(entityid); OUT(entityid);
OUT(padding002); //OUT(padding002);
OUT(distance); OUT(distance);
} }

View File

@ -2624,8 +2624,8 @@ struct MobHealth
}; };
struct Track_Struct { struct Track_Struct {
uint16 entityid; uint32 entityid;
uint16 padding002; //uint16 padding002;
float distance; float distance;
}; };

View File

@ -1094,7 +1094,7 @@ namespace Titanium
for (int i = 0; i < EntryCount; ++i, ++eq, ++emu) for (int i = 0; i < EntryCount; ++i, ++eq, ++emu)
{ {
OUT(entityid); OUT(entityid);
OUT(padding002); //OUT(padding002);
OUT(distance); OUT(distance);
} }

View File

@ -2319,8 +2319,8 @@ struct MobHealth
}; };
struct Track_Struct { struct Track_Struct {
uint16 entityid; uint32 entityid;
uint16 padding002; //uint16 padding002;
float distance; float distance;
}; };

View File

@ -2348,9 +2348,9 @@ namespace Underfoot
VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->entityid); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->entityid);
VARSTRUCT_ENCODE_TYPE(float, Buffer, emu->distance); VARSTRUCT_ENCODE_TYPE(float, Buffer, emu->distance);
VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->level); VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->level);
VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->NPC); VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->is_npc);
VARSTRUCT_ENCODE_STRING(Buffer, emu->name); VARSTRUCT_ENCODE_STRING(Buffer, emu->name);
VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->GroupMember); VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->is_merc);
} }
delete[] __emu_buffer; delete[] __emu_buffer;

View File

@ -249,7 +249,7 @@ OP_ItemLinkClick=0x4cef
OP_ItemPreview=0x6b5c OP_ItemPreview=0x6b5c
OP_NewSpawn=0x6097 OP_NewSpawn=0x6097
OP_Track=0x17e5 OP_Track=0x17e5
OP_TrackTarget=0x0029 OP_TrackTarget=0x695e
OP_TrackUnknown=0x4577 OP_TrackUnknown=0x4577
OP_ClickDoor=0x3a8f OP_ClickDoor=0x3a8f
OP_MoveDoor=0x08e8 OP_MoveDoor=0x08e8

View File

@ -2957,8 +2957,6 @@ bool EntityList::MakeTrackPacket(Client *client)
if (distance < 300) if (distance < 300)
distance = 300; distance = 300;
Group *g = client->GetGroup();
for (auto it = mob_list.cbegin(); it != mob_list.cend(); ++it) { for (auto it = mob_list.cbegin(); it != mob_list.cend(); ++it) {
if (!it->second || it->second == client || !it->second->IsTrackable() || if (!it->second || it->second == client || !it->second->IsTrackable() ||
it->second->IsInvisible(client)) it->second->IsInvisible(client))
@ -2979,15 +2977,13 @@ bool EntityList::MakeTrackPacket(Client *client)
int index = 0; int index = 0;
for (auto it = tracking_list.cbegin(); it != tracking_list.cend(); ++it, ++index) { for (auto it = tracking_list.cbegin(); it != tracking_list.cend(); ++it, ++index) {
Mob *cur_entity = it->first; Mob *cur_entity = it->first;
outtrack->Entrys[index].entityid = cur_entity->GetID(); outtrack->Entrys[index].entityid = (uint32)cur_entity->GetID();
outtrack->Entrys[index].distance = it->second; outtrack->Entrys[index].distance = it->second;
outtrack->Entrys[index].level = cur_entity->GetLevel(); outtrack->Entrys[index].level = cur_entity->GetLevel();
outtrack->Entrys[index].NPC = !cur_entity->IsClient(); outtrack->Entrys[index].is_npc = !cur_entity->IsClient();
if (g && cur_entity->IsClient() && g->IsGroupMember(cur_entity->CastToMob()))
outtrack->Entrys[index].GroupMember = 1;
else
outtrack->Entrys[index].GroupMember = 0;
strn0cpy(outtrack->Entrys[index].name, cur_entity->GetName(), sizeof(outtrack->Entrys[index].name)); strn0cpy(outtrack->Entrys[index].name, cur_entity->GetName(), sizeof(outtrack->Entrys[index].name));
outtrack->Entrys[index].is_pet = cur_entity->IsPet();
outtrack->Entrys[index].is_merc = cur_entity->IsMerc();
} }
client->QueuePacket(outapp); client->QueuePacket(outapp);