diff --git a/zone/embparser.cpp b/zone/embparser.cpp index 1dfa7e778..0aea3f2c1 100644 --- a/zone/embparser.cpp +++ b/zone/embparser.cpp @@ -1680,6 +1680,9 @@ void PerlembParser::ExportEventVariables( case EVENT_PLAYER_PICKUP: { ExportVar(package_name.c_str(), "picked_up_id", data); ExportVar(package_name.c_str(), "picked_up_entity_id", extradata); + if (extra_pointers && extra_pointers->size() == 1) { + ExportVar(package_name.c_str(), "item", "QuestItem", std::any_cast(extra_pointers->at(0))); + } break; } diff --git a/zone/object.cpp b/zone/object.cpp index 276a8435e..d041635d6 100644 --- a/zone/object.cpp +++ b/zone/object.cpp @@ -528,26 +528,24 @@ bool Object::HandleClick(Client* sender, const ClickObject_Struct* click_object) RecordPlayerEventLogWithClient(sender, PlayerEvent::GROUNDSPAWN_PICKUP, e); } - std::string export_string = fmt::format("{}", item->ID); - std::vector args; - args.push_back(m_inst); - if(parse->EventPlayer(EVENT_PLAYER_PICKUP, sender, export_string, GetID(), &args)) - { - auto outapp = new EQApplicationPacket(OP_ClickObject, sizeof(ClickObject_Struct)); - memcpy(outapp->pBuffer, click_object, sizeof(ClickObject_Struct)); - ClickObject_Struct* co = (ClickObject_Struct*)outapp->pBuffer; - co->drop_id = 0; - entity_list.QueueClients(nullptr, outapp, false); - safe_delete(outapp); + if (parse->PlayerHasQuestSub(EVENT_PLAYER_PICKUP)) { + std::vector args = { m_inst }; - // No longer using a tradeskill object - sender->SetTradeskillObject(nullptr); - user = nullptr; + if (parse->EventPlayer(EVENT_PLAYER_PICKUP, sender, std::to_string(item->ID), GetID(), &args)) { + auto outapp = new EQApplicationPacket(OP_ClickObject, sizeof(ClickObject_Struct)); + memcpy(outapp->pBuffer, click_object, sizeof(ClickObject_Struct)); + auto* co = (ClickObject_Struct*) outapp->pBuffer; + co->drop_id = 0; + entity_list.QueueClients(nullptr, outapp, false); + safe_delete(outapp); - return true; + sender->SetTradeskillObject(nullptr); + user = nullptr; + + return true; + } } - // Transfer item to client sender->PutItemInInventory(EQ::invslot::slotCursor, *m_inst, false); sender->SendItemPacket(EQ::invslot::slotCursor, m_inst, ItemPacketTrade);