[Quest API] (Performance) Check equip or scale item events exist before export and execute (#2898)

* [Quest API] Optional parse equip and scale item events

# Notes
- Optionally parse `EVENT_SCALE_CALC`, `EVENT_ITEM_ENTER_ZONE`, `EVENT_UNEQUIP_ITEM_BOT`, `EVENT_EQUIP_ITEM_BOT`, `EVENT_EQUIP_ITEM`, `EVENT_UNEQUIP_ITEM`, `EVENT_EQUIP_ITEM_CLIENT`, `EVENT_UNEQUIP_ITEM_CLIENT`

* Cleanup
This commit is contained in:
Alex King
2023-02-12 23:15:54 -05:00
committed by GitHub
parent efd6d2f9b1
commit bc6efd5f74
4 changed files with 122 additions and 72 deletions
+32 -17
View File
@@ -5086,17 +5086,25 @@ void Bot::PerformTradeWithClient(int16 begin_slot_id, int16 end_slot_id, Client*
BotRemoveEquipItem(return_iterator.from_bot_slot);
const auto export_string = fmt::format(
"{} {}",
return_iterator.return_item_instance->IsStackable() ? return_iterator.return_item_instance->GetCharges() : 1,
return_iterator.from_bot_slot
);
if (parse->BotHasQuestSub(EVENT_UNEQUIP_ITEM_BOT)) {
const auto& export_string = fmt::format(
"{} {}",
return_iterator.return_item_instance->IsStackable() ? return_iterator.return_item_instance->GetCharges() : 1,
return_iterator.from_bot_slot
);
std::vector<std::any> args;
std::vector<std::any> args = { return_iterator.return_item_instance };
args.emplace_back(return_iterator.return_item_instance);
parse->EventBot(
EVENT_UNEQUIP_ITEM_BOT,
this,
nullptr,
export_string,
return_iterator.return_item_instance->GetID(),
&args
);
}
parse->EventBot(EVENT_UNEQUIP_ITEM_BOT, this, nullptr, export_string , return_iterator.return_item_instance->GetID(), &args);
if (return_instance) {
EQ::SayLinkEngine linker;
linker.SetLinkType(EQ::saylink::SayLinkItemInst);
@@ -5146,17 +5154,24 @@ void Bot::PerformTradeWithClient(int16 begin_slot_id, int16 end_slot_id, Client*
m_inv.PutItem(trade_iterator.to_bot_slot, *trade_iterator.trade_item_instance);
BotAddEquipItem(trade_iterator.to_bot_slot, (trade_iterator.trade_item_instance ? trade_iterator.trade_item_instance->GetID() : 0));
const auto export_string = fmt::format(
"{} {}",
trade_iterator.trade_item_instance->IsStackable() ? trade_iterator.trade_item_instance->GetCharges() : 1,
trade_iterator.to_bot_slot
);
if (parse->BotHasQuestSub(EVENT_EQUIP_ITEM_BOT)) {
const auto& export_string = fmt::format(
"{} {}",
trade_iterator.trade_item_instance->IsStackable() ? trade_iterator.trade_item_instance->GetCharges() : 1,
trade_iterator.to_bot_slot
);
std::vector<std::any> args;
std::vector<std::any> args = { trade_iterator.trade_item_instance };
args.emplace_back(trade_iterator.trade_item_instance);
parse->EventBot(EVENT_EQUIP_ITEM_BOT, this, nullptr, export_string, trade_iterator.trade_item_instance->GetID(), &args);
parse->EventBot(
EVENT_EQUIP_ITEM_BOT,
this,
nullptr,
export_string,
trade_iterator.trade_item_instance->GetID(),
&args
);
}
trade_iterator.trade_item_instance = nullptr; // actual deletion occurs in client delete below