mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-19 13:28:25 +00:00
[Quest API] Add EVENT_ITEM_CLICK_CLIENT and EVENT_ITEM_CLICK_CAST_CLIENT to Perl/Lua. (#2810)
* [Quest API] Add EVENT_ITEM_CLICK_CLIENT and EVENT_ITEM_CLICK_CAST_CLIENT to Perl/Lua. # Perl - Add `EVENT_ITEM_CLICK_CLIENT`. - Add `EVENT_ITEM_CLICK_CAST_CLIENT`. - Both events export `$item_id`, `$item_name`, `$slot_id`, and `$spell_id`. # Lua - Add `event_item_click_client`. - Add `event_item_click_cast_client`. - Both events export `e.item_id`, `e.item_name`, `e.slot_id`, `e.spell_id`, and `e.item`. # Notes - Allows operators to handle item clicks in player scripts instead of item-specific scripts. * Update lua_parser_events.cpp * Remove optional bool.
This commit is contained in:
+89
-8
@@ -4168,8 +4168,26 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app)
|
||||
{
|
||||
if (GetLevel() >= item->Click.Level2)
|
||||
{
|
||||
EQ::ItemInstance* p_inst = (EQ::ItemInstance*)inst;
|
||||
int i = parse->EventItem(EVENT_ITEM_CLICK_CAST, this, p_inst, nullptr, "", castspell->inventoryslot);
|
||||
auto* p_inst = (EQ::ItemInstance*) inst;
|
||||
int i = 0;
|
||||
|
||||
if (parse->ItemHasQuestSub(p_inst, EVENT_ITEM_CLICK_CAST)) {
|
||||
i = parse->EventItem(
|
||||
EVENT_ITEM_CLICK_CAST,
|
||||
this,
|
||||
p_inst,
|
||||
nullptr,
|
||||
"",
|
||||
castspell->inventoryslot
|
||||
);
|
||||
}
|
||||
|
||||
if (parse->PlayerHasQuestSub(EVENT_ITEM_CLICK_CAST_CLIENT)) {
|
||||
std::vector<std::any> args;
|
||||
args.emplace_back(p_inst);
|
||||
i = parse->EventPlayer(EVENT_ITEM_CLICK_CAST_CLIENT, this, std::to_string(castspell->inventoryslot), 0, &args);
|
||||
}
|
||||
|
||||
if (i == 0) {
|
||||
CastSpell(item->Click.Effect, castspell->target_id, slot, item->CastTime, 0, 0, castspell->inventoryslot);
|
||||
}
|
||||
@@ -4187,8 +4205,26 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app)
|
||||
}
|
||||
else
|
||||
{
|
||||
EQ::ItemInstance* p_inst = (EQ::ItemInstance*)inst;
|
||||
int i = parse->EventItem(EVENT_ITEM_CLICK_CAST, this, p_inst, nullptr, "", castspell->inventoryslot);
|
||||
auto* p_inst = (EQ::ItemInstance*) inst;
|
||||
|
||||
int i = 0;
|
||||
|
||||
if (parse->ItemHasQuestSub(p_inst, EVENT_ITEM_CLICK_CAST)) {
|
||||
i = parse->EventItem(
|
||||
EVENT_ITEM_CLICK_CAST,
|
||||
this,
|
||||
p_inst,
|
||||
nullptr,
|
||||
"",
|
||||
castspell->inventoryslot
|
||||
);
|
||||
}
|
||||
|
||||
if (parse->PlayerHasQuestSub(EVENT_ITEM_CLICK_CAST_CLIENT)) {
|
||||
std::vector<std::any> args;
|
||||
args.emplace_back(p_inst);
|
||||
i = parse->EventPlayer(EVENT_ITEM_CLICK_CAST_CLIENT, this, std::to_string(castspell->inventoryslot), 0, &args);
|
||||
}
|
||||
|
||||
if (i == 0) {
|
||||
CastSpell(item->Click.Effect, castspell->target_id, slot, item->CastTime, 0, 0, castspell->inventoryslot);
|
||||
@@ -8836,9 +8872,18 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
||||
|
||||
if (m_inv.SupportsClickCasting(slot_id) || ((item->ItemType == EQ::item::ItemTypePotion || item->PotionBelt) && m_inv.SupportsPotionBeltCasting(slot_id))) // sanity check
|
||||
{
|
||||
EQ::ItemInstance* p_inst = (EQ::ItemInstance*)inst;
|
||||
auto* p_inst = (EQ::ItemInstance*) inst;
|
||||
|
||||
if (parse->ItemHasQuestSub(p_inst, EVENT_ITEM_CLICK)) {
|
||||
parse->EventItem(EVENT_ITEM_CLICK, this, p_inst, nullptr, "", slot_id);
|
||||
}
|
||||
|
||||
if (parse->PlayerHasQuestSub(EVENT_ITEM_CLICK_CLIENT)) {
|
||||
std::vector<std::any> args;
|
||||
args.emplace_back(p_inst);
|
||||
parse->EventPlayer(EVENT_ITEM_CLICK_CLIENT, this, std::to_string(slot_id), 0, &args);
|
||||
}
|
||||
|
||||
parse->EventItem(EVENT_ITEM_CLICK, this, p_inst, nullptr, "", slot_id);
|
||||
inst = m_inv[slot_id];
|
||||
if (!inst)
|
||||
{
|
||||
@@ -8940,7 +8985,25 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
||||
}
|
||||
}
|
||||
|
||||
int i = parse->EventItem(EVENT_ITEM_CLICK_CAST, this, p_inst, nullptr, "", slot_id);
|
||||
int i = 0;
|
||||
|
||||
if (parse->ItemHasQuestSub(p_inst, EVENT_ITEM_CLICK_CAST)) {
|
||||
i = parse->EventItem(
|
||||
EVENT_ITEM_CLICK_CAST,
|
||||
this,
|
||||
p_inst,
|
||||
nullptr,
|
||||
"",
|
||||
slot_id
|
||||
);
|
||||
}
|
||||
|
||||
if (parse->PlayerHasQuestSub(EVENT_ITEM_CLICK_CAST_CLIENT)) {
|
||||
std::vector<std::any> args;
|
||||
args.emplace_back(p_inst);
|
||||
i = parse->EventPlayer(EVENT_ITEM_CLICK_CAST_CLIENT, this, std::to_string(slot_id), 0, &args);
|
||||
}
|
||||
|
||||
inst = m_inv[slot_id];
|
||||
if (!inst)
|
||||
{
|
||||
@@ -8989,7 +9052,25 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
||||
}
|
||||
}
|
||||
|
||||
int i = parse->EventItem(EVENT_ITEM_CLICK_CAST, this, clickaug, nullptr, "", slot_id);
|
||||
int i = 0;
|
||||
|
||||
if (parse->ItemHasQuestSub(p_inst, EVENT_ITEM_CLICK_CAST)) {
|
||||
i = parse->EventItem(
|
||||
EVENT_ITEM_CLICK_CAST,
|
||||
this,
|
||||
clickaug,
|
||||
nullptr,
|
||||
"",
|
||||
slot_id
|
||||
);
|
||||
}
|
||||
|
||||
if (parse->PlayerHasQuestSub(EVENT_ITEM_CLICK_CAST_CLIENT)) {
|
||||
std::vector<std::any> args;
|
||||
args.emplace_back(clickaug);
|
||||
i = parse->EventPlayer(EVENT_ITEM_CLICK_CAST_CLIENT, this, std::to_string(slot_id), 0, &args);
|
||||
}
|
||||
|
||||
inst = m_inv[slot_id];
|
||||
if (!inst)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user