[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();
}
memset(m_display_name, 0, sizeof(m_display_name));
respawn_timer.Disable();
// 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
memset(&m_data, 0, sizeof(Object_Struct));
memset(m_display_name, 0, sizeof(m_display_name));
m_data.heading = heading;
m_data.z = z;
m_data.zone_id = zone->GetZoneID();
@ -164,6 +168,8 @@ decay_timer(300000)
// Set as much struct data as we can
memset(&m_data, 0, sizeof(Object_Struct));
memset(m_display_name, 0, sizeof(m_display_name));
m_data.heading = client->GetHeading();
m_data.x = client->GetX();
m_data.y = client->GetY();
@ -236,6 +242,8 @@ decay_timer(decay_time)
// Set as much struct data as we can
memset(&m_data, 0, sizeof(Object_Struct));
memset(m_display_name, 0, sizeof(m_display_name));
m_data.heading = heading;
m_data.x = x;
m_data.y = y;
@ -312,6 +320,8 @@ decay_timer(decay_time)
m_data.z = z;
m_data.zone_id = zone->GetZoneID();
memset(m_display_name, 0, sizeof(m_display_name));
if (!IsFixZEnabled()) {
FixZ();
}
@ -353,6 +363,8 @@ void Object::SetID(uint16 set_id)
// Reset state of object back to zero
void Object::ResetState()
{
Close();
safe_delete(m_inst);
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);
}