mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-21 14:21:32 +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: {
|
case EVENT_PLAYER_PICKUP: {
|
||||||
ExportVar(package_name.c_str(), "picked_up_id", data);
|
ExportVar(package_name.c_str(), "picked_up_id", data);
|
||||||
ExportVar(package_name.c_str(), "picked_up_entity_id", extradata);
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -528,26 +528,24 @@ bool Object::HandleClick(Client* sender, const ClickObject_Struct* click_object)
|
|||||||
RecordPlayerEventLogWithClient(sender, PlayerEvent::GROUNDSPAWN_PICKUP, e);
|
RecordPlayerEventLogWithClient(sender, PlayerEvent::GROUNDSPAWN_PICKUP, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string export_string = fmt::format("{}", item->ID);
|
if (parse->PlayerHasQuestSub(EVENT_PLAYER_PICKUP)) {
|
||||||
std::vector<std::any> args;
|
std::vector<std::any> args = { m_inst };
|
||||||
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);
|
|
||||||
|
|
||||||
// No longer using a tradeskill object
|
if (parse->EventPlayer(EVENT_PLAYER_PICKUP, sender, std::to_string(item->ID), GetID(), &args)) {
|
||||||
sender->SetTradeskillObject(nullptr);
|
auto outapp = new EQApplicationPacket(OP_ClickObject, sizeof(ClickObject_Struct));
|
||||||
user = nullptr;
|
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
|
// Transfer item to client
|
||||||
sender->PutItemInInventory(EQ::invslot::slotCursor, *m_inst, false);
|
sender->PutItemInInventory(EQ::invslot::slotCursor, *m_inst, false);
|
||||||
sender->SendItemPacket(EQ::invslot::slotCursor, m_inst, ItemPacketTrade);
|
sender->SendItemPacket(EQ::invslot::slotCursor, m_inst, ItemPacketTrade);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user