mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-13 06:21:28 +00:00
[Quest API] Export $item to EVENT_PLAYER_PICKUP in Perl. (#2875)
* [Quest API] Export $item to EVENT_PLAYER_PICKUP in Perl. # Notes - Exports `$item` to `EVENT_PLAYER_PICKUP` in Perl so that you have access to the item itself. * Optional parsing. * Update object.cpp * Update object.cpp
This commit is contained in:
parent
5b24d38d1e
commit
ca0e85b4bc
@ -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<EQ::ItemInstance*>(extra_pointers->at(0)));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@ -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<std::any> 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<std::any> 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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user