Compare commits

...

7 Commits

Author SHA1 Message Date
Akkadius f0278d9591 Update dbcore.cpp 2025-03-02 23:17:54 -06:00
Akkadius 8a1f4545a4 Update entity.cpp 2025-03-02 23:15:17 -06:00
Akkadius 8419e284d4 Fix 2025-03-02 23:10:43 -06:00
Akkadius 72646cab35 Revert "Reload crash fix"
This reverts commit 96e1e76306.
2025-03-02 23:09:33 -06:00
Akkadius 96e1e76306 Reload crash fix 2025-03-02 22:55:27 -06:00
Akkadius 7c242723f4 Potentially fix aura crash 2025-03-02 22:16:43 -06:00
Akkadius 2162c00edd Stuff 2025-03-02 22:09:06 -06:00
7 changed files with 30 additions and 12 deletions
+3 -1
View File
@@ -302,7 +302,9 @@ std::string DBcore::Escape(const std::string& s)
void DBcore::SetMutex(Mutex *mutex)
{
safe_delete(m_mutex);
if (m_mutex && m_mutex != mutex) {
safe_delete(m_mutex);
}
DBcore::m_mutex = mutex;
}
+2 -1
View File
@@ -894,7 +894,8 @@ void ZSList::SendServerReload(ServerReload::Type type, uchar *packet)
ServerReload::Type::Commands,
ServerReload::Type::PerlExportSettings,
ServerReload::Type::DataBucketsCache,
ServerReload::Type::WorldRepop
ServerReload::Type::WorldRepop,
ServerReload::Type::WorldWithRespawn
};
// Set requires_zone_booted flag before executing reload logic
+3
View File
@@ -708,6 +708,9 @@ Client::Client(EQStreamInterface *ieqs) : Mob(
}
Client::~Client() {
entity_list.RemoveMobFromCloseLists(this);
m_close_mobs.clear();
if (ClientVersion() == EQ::versions::ClientVersion::RoF2 && RuleB (Parcel, EnableParcelMerchants)) {
DoParcelCancel();
}
+2 -2
View File
@@ -2231,7 +2231,7 @@ Raid* EntityList::GetRaidByBotName(const char* name)
}
}
}
return nullptr;
}
@@ -2933,7 +2933,7 @@ void EntityList::ScanCloseMobs(Mob *scanning_mob)
for (auto &e : mob_list) {
auto mob = e.second;
if (mob->GetID() <= 0) {
if (mob && mob->GetID() <= 0) {
continue;
}
+8 -1
View File
@@ -375,6 +375,10 @@ void NPC::AddLootDrop(
if (item2->Slots & slots) {
if (equipment[i]) {
compitem = database.GetItem(equipment[i]);
if (!compitem) {
continue;
}
if (item2->AC > compitem->AC || (item2->AC == compitem->AC && item2->HP > compitem->HP)) {
// item would be an upgrade
// check if we're multi-slot, if yes then we have to keep
@@ -385,6 +389,9 @@ void NPC::AddLootDrop(
else {
// Unequip old item
auto *old_item = GetItem(i);
if (!old_item) {
continue;
}
old_item->equip_slot = EQ::invslot::SLOT_INVALID;
@@ -677,7 +684,7 @@ LootItem *NPC::GetItem(int slot_id)
end = m_loot_items.end();
for (; cur != end; ++cur) {
LootItem *item = *cur;
if (item->equip_slot == slot_id) {
if (item && item->equip_slot == slot_id) {
return item;
}
}
+3 -3
View File
@@ -531,6 +531,9 @@ Mob::Mob(
Mob::~Mob()
{
entity_list.RemoveMobFromCloseLists(this);
m_close_mobs.clear();
quest_manager.stopalltimers(this);
mMovementManager->RemoveMob(this);
@@ -570,11 +573,8 @@ Mob::~Mob()
entity_list.UnMarkNPC(GetID());
UninitializeBuffSlots();
entity_list.RemoveMobFromCloseLists(this);
entity_list.RemoveAuraFromMobs(this);
m_close_mobs.clear();
ClearDataBucketCache();
LeaveHealRotationTargetPool();
+9 -4
View File
@@ -4663,14 +4663,19 @@ void WorldServer::ProcessReload(const ServerReload::Request& request)
case ServerReload::Type::WorldRepop:
entity_list.ClearAreas();
parse->ReloadQuests();
zone->Repop();
if (zone && zone->IsLoaded()) {
zone->Repop();
}
break;
case ServerReload::Type::WorldWithRespawn:
entity_list.ClearAreas();
parse->ReloadQuests();
zone->Repop();
zone->ClearSpawnTimers();
if (zone && zone->IsLoaded()) {
entity_list.ClearAreas();
zone->Repop();
zone->ClearSpawnTimers();
}
break;
case ServerReload::Type::ZonePoints: