[Fix] Fix Object Name Init, User Refs, and Client Sync on Close (#4861)

* [Bugfix] Fix uninitialized char* in object.cpp.

* [Bugfix] Clear object user and user tradeskill object on reset.

* [Bugfix] Send clear object packet on Object::Close()
This commit is contained in:
zimp-wow 2025-05-14 20:20:57 -05:00 committed by GitHub
parent 83cd8119c8
commit 3d607d352c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -75,6 +75,8 @@ decay_timer(300000)
decay_timer.Disable(); decay_timer.Disable();
} }
memset(m_display_name, 0, sizeof(m_display_name));
respawn_timer.Disable(); respawn_timer.Disable();
// Set drop_id to zero - it will be set when added to zone with SetID() // Set drop_id to zero - it will be set when added to zone with SetID()
@ -122,6 +124,8 @@ decay_timer(300000)
// Set as much struct data as we can // Set as much struct data as we can
memset(&m_data, 0, sizeof(Object_Struct)); memset(&m_data, 0, sizeof(Object_Struct));
memset(m_display_name, 0, sizeof(m_display_name));
m_data.heading = heading; m_data.heading = heading;
m_data.z = z; m_data.z = z;
m_data.zone_id = zone->GetZoneID(); m_data.zone_id = zone->GetZoneID();
@ -164,6 +168,8 @@ decay_timer(300000)
// Set as much struct data as we can // Set as much struct data as we can
memset(&m_data, 0, sizeof(Object_Struct)); memset(&m_data, 0, sizeof(Object_Struct));
memset(m_display_name, 0, sizeof(m_display_name));
m_data.heading = client->GetHeading(); m_data.heading = client->GetHeading();
m_data.x = client->GetX(); m_data.x = client->GetX();
m_data.y = client->GetY(); m_data.y = client->GetY();
@ -236,6 +242,8 @@ decay_timer(decay_time)
// Set as much struct data as we can // Set as much struct data as we can
memset(&m_data, 0, sizeof(Object_Struct)); memset(&m_data, 0, sizeof(Object_Struct));
memset(m_display_name, 0, sizeof(m_display_name));
m_data.heading = heading; m_data.heading = heading;
m_data.x = x; m_data.x = x;
m_data.y = y; m_data.y = y;
@ -312,6 +320,8 @@ decay_timer(decay_time)
m_data.z = z; m_data.z = z;
m_data.zone_id = zone->GetZoneID(); m_data.zone_id = zone->GetZoneID();
memset(m_display_name, 0, sizeof(m_display_name));
if (!IsFixZEnabled()) { if (!IsFixZEnabled()) {
FixZ(); FixZ();
} }
@ -353,6 +363,8 @@ void Object::SetID(uint16 set_id)
// Reset state of object back to zero // Reset state of object back to zero
void Object::ResetState() void Object::ResetState()
{ {
Close();
safe_delete(m_inst); safe_delete(m_inst);
m_id = 0; m_id = 0;
@ -440,6 +452,12 @@ void Object::Close() {
} }
} }
auto outapp = new EQApplicationPacket(OP_ClearObject, sizeof(ClearObject_Struct));
ClearObject_Struct *cos = (ClearObject_Struct *)outapp->pBuffer;
cos->Clear = 1;
user->QueuePacket(outapp);
safe_delete(outapp);
user->SetTradeskillObject(nullptr); user->SetTradeskillObject(nullptr);
} }