From 9ee095b3546d32eef5ec7719a5c975d197f555bc Mon Sep 17 00:00:00 2001 From: Mitch Freeman <65987027+neckkola@users.noreply.github.com> Date: Fri, 7 Mar 2025 18:17:36 -0400 Subject: [PATCH] [Fix] Add crash checks for certain PlayerEventLogs (#4761) --- zone/client_packet.cpp | 2 +- zone/corpse.cpp | 2 +- zone/gm_commands/parcels.cpp | 4 ++-- zone/inventory.cpp | 4 ++-- zone/trading.cpp | 6 +++--- zone/worldserver.cpp | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 091a8f9ac..747302464 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -16974,7 +16974,7 @@ void Client::Handle_OP_GuildTributeDonateItem(const EQApplicationPacket *app) SendGuildTributeDonateItemReply(in, favor); - if(player_event_logs.IsEventEnabled(PlayerEvent::GUILD_TRIBUTE_DONATE_ITEM)) { + if(inst && player_event_logs.IsEventEnabled(PlayerEvent::GUILD_TRIBUTE_DONATE_ITEM)) { auto e = PlayerEvent::GuildTributeDonateItem{ .item_id = inst->GetID(), .augment_1_id = inst->GetAugmentItemID(0), .augment_2_id = inst->GetAugmentItemID(1), diff --git a/zone/corpse.cpp b/zone/corpse.cpp index e614a2942..ffd3974fb 100644 --- a/zone/corpse.cpp +++ b/zone/corpse.cpp @@ -1569,7 +1569,7 @@ void Corpse::LootCorpseItem(Client *c, const EQApplicationPacket *app) } } - if (player_event_logs.IsEventEnabled(PlayerEvent::LOOT_ITEM) && !IsPlayerCorpse()) { + if (inst && player_event_logs.IsEventEnabled(PlayerEvent::LOOT_ITEM) && !IsPlayerCorpse()) { auto e = PlayerEvent::LootItemEvent{ .item_id = inst->GetItem()->ID, .item_name = inst->GetItem()->Name, diff --git a/zone/gm_commands/parcels.cpp b/zone/gm_commands/parcels.cpp index 710f1b4a9..07cb8244c 100644 --- a/zone/gm_commands/parcels.cpp +++ b/zone/gm_commands/parcels.cpp @@ -197,7 +197,7 @@ void command_parcels(Client *c, const Seperator *sep) send_to_client.at(0).character_name.c_str() ); - if (player_event_logs.IsEventEnabled(PlayerEvent::PARCEL_SEND)) { + if (inst && player_event_logs.IsEventEnabled(PlayerEvent::PARCEL_SEND)) { PlayerEvent::ParcelSend e{}; e.from_player_name = parcel_out.from_name; e.to_player_name = send_to_client.at(0).character_name; @@ -281,7 +281,7 @@ void command_parcels(Client *c, const Seperator *sep) send_to_client.at(0).character_name.c_str() ); - if (player_event_logs.IsEventEnabled(PlayerEvent::PARCEL_SEND)) { + if (inst && player_event_logs.IsEventEnabled(PlayerEvent::PARCEL_SEND)) { PlayerEvent::ParcelSend e{}; e.from_player_name = parcel_out.from_name; e.to_player_name = send_to_client.at(0).character_name; diff --git a/zone/inventory.cpp b/zone/inventory.cpp index a6e21c9e3..78fc3bef5 100644 --- a/zone/inventory.cpp +++ b/zone/inventory.cpp @@ -763,7 +763,7 @@ void Client::DropItem(int16 slot_id, bool recurse) int i = 0; - if (player_event_logs.IsEventEnabled(PlayerEvent::DROPPED_ITEM)) { + if (inst && player_event_logs.IsEventEnabled(PlayerEvent::DROPPED_ITEM)) { auto e = PlayerEvent::DroppedItemEvent{ .item_id = inst->GetID(), .augment_1_id = inst->GetAugmentItemID(0), @@ -1655,7 +1655,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { DeleteItemInInventory(EQ::invslot::slotCursor, 0, true); - if (player_event_logs.IsEventEnabled(PlayerEvent::ITEM_DESTROY)) { + if (test_inst && player_event_logs.IsEventEnabled(PlayerEvent::ITEM_DESTROY)) { auto e = PlayerEvent::DestroyItemEvent{ .item_id = test_inst->GetItem()->ID, .item_name = test_inst->GetItem()->Name, diff --git a/zone/trading.cpp b/zone/trading.cpp index 5fd4eec37..ec81bb273 100644 --- a/zone/trading.cpp +++ b/zone/trading.cpp @@ -1465,7 +1465,7 @@ void Client::BuyTraderItem(TraderBuy_Struct *tbs, Client *Trader, const EQApplic Trader->AddMoneyToPP(copper, silver, gold, platinum, true); - if (player_event_logs.IsEventEnabled(PlayerEvent::TRADER_PURCHASE)) { + if (buy_item && player_event_logs.IsEventEnabled(PlayerEvent::TRADER_PURCHASE)) { auto e = PlayerEvent::TraderPurchaseEvent{ .item_id = buy_item->GetID(), .augment_1_id = buy_item->GetAugmentItemID(0), @@ -1487,7 +1487,7 @@ void Client::BuyTraderItem(TraderBuy_Struct *tbs, Client *Trader, const EQApplic RecordPlayerEventLog(PlayerEvent::TRADER_PURCHASE, e); } - if (player_event_logs.IsEventEnabled(PlayerEvent::TRADER_SELL)) { + if (buy_item && player_event_logs.IsEventEnabled(PlayerEvent::TRADER_SELL)) { auto e = PlayerEvent::TraderSellEvent{ .item_id = buy_item->GetID(), .augment_1_id = buy_item->GetAugmentItemID(0), @@ -2975,7 +2975,7 @@ void Client::BuyTraderItemOutsideBazaar(TraderBuy_Struct *tbs, const EQApplicati Message(Chat::Red, fmt::format("You paid {} for the parcel delivery.", DetermineMoneyString(fee)).c_str()); LogTrading("Customer [{}] Paid: [{}] in Copper", CharacterID(), total_cost); - if (player_event_logs.IsEventEnabled(PlayerEvent::TRADER_PURCHASE)) { + if (buy_item && player_event_logs.IsEventEnabled(PlayerEvent::TRADER_PURCHASE)) { auto e = PlayerEvent::TraderPurchaseEvent{ .item_id = buy_item->GetID(), .augment_1_id = buy_item->GetAugmentItemID(0), diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index fc34e3f18..d9f2c6a56 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -3799,7 +3799,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) auto item = trader_pc->FindTraderItemBySerialNumber(item_sn); - if (player_event_logs.IsEventEnabled(PlayerEvent::TRADER_SELL)) { + if (item && player_event_logs.IsEventEnabled(PlayerEvent::TRADER_SELL)) { auto e = PlayerEvent::TraderSellEvent{ .item_id = item ? item->GetID() : 0, .augment_1_id = item->GetAugmentItemID(0),