(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)
-------------------------------------------------------
== 12/22/2014 ==
Trevius: (RoF2) Fixed Tracking.
== 12/21/2014 ==
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.

View File

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

View File

@ -3294,9 +3294,9 @@ namespace RoF
VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->entityid);
VARSTRUCT_ENCODE_TYPE(float, Buffer, emu->distance);
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_TYPE(uint8, Buffer, emu->GroupMember);
VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->is_merc);
}
delete[] __emu_buffer;

View File

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

View File

@ -3112,29 +3112,24 @@ struct MobHealth
};
struct Track_Struct {
uint16 entityid;
uint16 y;
uint16 x;
uint16 z;
uint32 entityid;
float distance;
// Fields for SoD and later
uint8 level;
uint8 is_npc;
char name[64];
uint8 is_pet;
uint8 is_merc;
};
struct Tracking_Struct {
uint16 entry_count;
Track_Struct Entrys[0];
};
// Looks like new tracking structures - Opcode: 0x57a7
struct Tracking_Struct_New {
uint16 totalcount; // Total Count of mobs within tracking range
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
struct TrackTarget_Struct
{
uint32 EntityID;
};

View File

@ -3103,32 +3103,25 @@ struct MobHealth
};
struct Track_Struct {
uint16 entityid;
uint16 y;
uint16 x;
uint16 z;
uint32 entityid;
float distance;
// Fields for SoD and later
uint8 level;
uint8 is_npc;
char name[64];
uint8 is_merc;
};
struct Tracking_Struct {
uint16 entry_count;
Track_Struct Entrys[0];
};
// Looks like new tracking structures - Opcode: 0x57a7
struct Tracking_Struct_New {
uint16 totalcount; // Total Count of mobs within tracking range
Track_Struct Entrys[0];
struct TrackTarget_Struct
{
uint32 EntityID;
};
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
** Zone server information

View File

@ -2058,9 +2058,9 @@ namespace SoD
VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->entityid);
VARSTRUCT_ENCODE_TYPE(float, Buffer, emu->distance);
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_TYPE(uint8, Buffer, emu->GroupMember);
VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->is_merc);
}
delete[] __emu_buffer;

View File

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

View File

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

View File

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

View File

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

View File

@ -2348,9 +2348,9 @@ namespace Underfoot
VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->entityid);
VARSTRUCT_ENCODE_TYPE(float, Buffer, emu->distance);
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_TYPE(uint8, Buffer, emu->GroupMember);
VARSTRUCT_ENCODE_TYPE(uint8, Buffer, emu->is_merc);
}
delete[] __emu_buffer;

View File

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

View File

@ -2957,8 +2957,6 @@ bool EntityList::MakeTrackPacket(Client *client)
if (distance < 300)
distance = 300;
Group *g = client->GetGroup();
for (auto it = mob_list.cbegin(); it != mob_list.cend(); ++it) {
if (!it->second || it->second == client || !it->second->IsTrackable() ||
it->second->IsInvisible(client))
@ -2979,15 +2977,13 @@ bool EntityList::MakeTrackPacket(Client *client)
int index = 0;
for (auto it = tracking_list.cbegin(); it != tracking_list.cend(); ++it, ++index) {
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].level = cur_entity->GetLevel();
outtrack->Entrys[index].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;
outtrack->Entrys[index].is_npc = !cur_entity->IsClient();
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);