mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-17 03:08:26 +00:00
[Quest API] Add Scripting Support to Mercenaries (#4500)
* [Quest API] Add Scripting Support to Mercenaries * Cleanup * Cleanup * Update lua_merc.h * Update mob.cpp * XYZH * Final * Update attack.cpp * Update attack.cpp * Simplify event invocation * Inline example * Nullptr init example * EVENT_TIMER simplify add EventPlayerNpcBotMerc * EVENT_TIMER_START * Remove has_start_event * EVENT_TIMER_START with settimerMS * EVENT_POPUP_RESPONSE * Consolidation * Update attack.cpp * Push * Update quest_parser_collection.h * Comments * Cleanup per comments --------- Co-authored-by: Akkadius <akkadius1@gmail.com>
This commit is contained in:
+15
-80
@@ -5514,37 +5514,13 @@ void Mob::SetTarget(Mob *mob)
|
||||
target = mob;
|
||||
entity_list.UpdateHoTT(this);
|
||||
|
||||
const auto has_target_change_event = (
|
||||
parse->HasQuestSub(GetNPCTypeID(), EVENT_TARGET_CHANGE) ||
|
||||
parse->PlayerHasQuestSub(EVENT_TARGET_CHANGE) ||
|
||||
parse->BotHasQuestSub(EVENT_TARGET_CHANGE)
|
||||
);
|
||||
|
||||
if (IsClient() && CastToClient()->admin > AccountStatus::GMMgmt) {
|
||||
DisplayInfo(mob);
|
||||
}
|
||||
|
||||
if (has_target_change_event) {
|
||||
std::vector<std::any> args;
|
||||
std::vector<std::any> args = { mob };
|
||||
|
||||
args.emplace_back(mob);
|
||||
|
||||
if (IsNPC()) {
|
||||
if (parse->HasQuestSub(GetNPCTypeID(), EVENT_TARGET_CHANGE)) {
|
||||
parse->EventNPC(EVENT_TARGET_CHANGE, CastToNPC(), mob, "", 0, &args);
|
||||
}
|
||||
} else if (IsClient()) {
|
||||
if (parse->PlayerHasQuestSub(EVENT_TARGET_CHANGE)) {
|
||||
parse->EventPlayer(EVENT_TARGET_CHANGE, CastToClient(), "", 0, &args);
|
||||
}
|
||||
|
||||
CastToClient()->SetBotPrecombat(false); // Any change in target will nullify this flag (target == mob checked above)
|
||||
} else if (IsBot()) {
|
||||
if (parse->BotHasQuestSub(EVENT_TARGET_CHANGE)) {
|
||||
parse->EventBot(EVENT_TARGET_CHANGE, CastToBot(), mob, "", 0, &args);
|
||||
}
|
||||
}
|
||||
}
|
||||
parse->EventMob(EVENT_TARGET_CHANGE, this, mob, [&]() { return ""; }, 0, &args);
|
||||
|
||||
if (IsPet() && GetOwner() && GetOwner()->IsClient()) {
|
||||
GetOwner()->CastToClient()->UpdateXTargetType(MyPetTarget, mob);
|
||||
@@ -5717,22 +5693,10 @@ bool Mob::ClearEntityVariables()
|
||||
return false;
|
||||
}
|
||||
|
||||
if (
|
||||
(IsBot() && parse->BotHasQuestSub(EVENT_ENTITY_VARIABLE_DELETE)) ||
|
||||
(IsClient() && parse->PlayerHasQuestSub(EVENT_ENTITY_VARIABLE_DELETE)) ||
|
||||
(IsNPC() && parse->HasQuestSub(GetNPCTypeID(), EVENT_ENTITY_VARIABLE_DELETE))
|
||||
) {
|
||||
for (const auto& e : m_EntityVariables) {
|
||||
std::vector<std::any> args = { e.first, e.second };
|
||||
for (const auto& e : m_EntityVariables) {
|
||||
std::vector<std::any> args = { e.first, e.second };
|
||||
|
||||
if (IsBot()) {
|
||||
parse->EventBot(EVENT_ENTITY_VARIABLE_DELETE, CastToBot(), nullptr, "", 0, &args);
|
||||
} else if (IsClient()) {
|
||||
parse->EventPlayer(EVENT_ENTITY_VARIABLE_DELETE, CastToClient(), "", 0, &args);
|
||||
} else if (IsNPC()) {
|
||||
parse->EventNPC(EVENT_ENTITY_VARIABLE_DELETE, CastToNPC(), nullptr, "", 0, &args);
|
||||
}
|
||||
}
|
||||
parse->EventMob(EVENT_ENTITY_VARIABLE_DELETE, this, nullptr, [&]() { return ""; }, 0, &args);
|
||||
}
|
||||
|
||||
m_EntityVariables.clear();
|
||||
@@ -5750,24 +5714,11 @@ bool Mob::DeleteEntityVariable(std::string variable_name)
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<std::any> args = { v->first, v->second };
|
||||
parse->EventMob(EVENT_ENTITY_VARIABLE_DELETE, this, nullptr, [&]() { return ""; }, 0, &args);
|
||||
|
||||
m_EntityVariables.erase(v);
|
||||
|
||||
if (
|
||||
(IsBot() && parse->BotHasQuestSub(EVENT_ENTITY_VARIABLE_DELETE)) ||
|
||||
(IsClient() && parse->PlayerHasQuestSub(EVENT_ENTITY_VARIABLE_DELETE)) ||
|
||||
(IsNPC() && parse->HasQuestSub(GetNPCTypeID(), EVENT_ENTITY_VARIABLE_DELETE))
|
||||
) {
|
||||
std::vector<std::any> args = { v->first, v->second };
|
||||
|
||||
if (IsBot()) {
|
||||
parse->EventBot(EVENT_ENTITY_VARIABLE_DELETE, CastToBot(), nullptr, "", 0, &args);
|
||||
} else if (IsClient()) {
|
||||
parse->EventPlayer(EVENT_ENTITY_VARIABLE_DELETE, CastToClient(), "", 0, &args);
|
||||
} else if (IsNPC()) {
|
||||
parse->EventNPC(EVENT_ENTITY_VARIABLE_DELETE, CastToNPC(), nullptr, "", 0, &args);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -5814,32 +5765,16 @@ void Mob::SetEntityVariable(std::string variable_name, std::string variable_valu
|
||||
return;
|
||||
}
|
||||
|
||||
const QuestEventID event_id = (
|
||||
!EntityVariableExists(variable_name) ?
|
||||
EVENT_ENTITY_VARIABLE_SET :
|
||||
EVENT_ENTITY_VARIABLE_UPDATE
|
||||
);
|
||||
std::vector<std::any> args;
|
||||
|
||||
if (
|
||||
(IsBot() && parse->BotHasQuestSub(event_id)) ||
|
||||
(IsClient() && parse->PlayerHasQuestSub(event_id)) ||
|
||||
(IsNPC() && parse->HasQuestSub(GetNPCTypeID(), event_id))
|
||||
) {
|
||||
std::vector<std::any> args;
|
||||
if (!EntityVariableExists(variable_name)) {
|
||||
args = { variable_name, variable_value };
|
||||
|
||||
if (event_id != EVENT_ENTITY_VARIABLE_UPDATE) {
|
||||
args = { variable_name, variable_value };
|
||||
} else {
|
||||
args = { variable_name, GetEntityVariable(variable_name), variable_value };
|
||||
}
|
||||
parse->EventMob(EVENT_ENTITY_VARIABLE_SET, this, nullptr, [&]() { return ""; }, 0, &args);
|
||||
} else {
|
||||
args = { variable_name, GetEntityVariable(variable_name), variable_value };
|
||||
|
||||
if (IsBot()) {
|
||||
parse->EventBot(event_id, CastToBot(), nullptr, "", 0, &args);
|
||||
} else if (IsClient()) {
|
||||
parse->EventPlayer(event_id, CastToClient(), "", 0, &args);
|
||||
} else if (IsNPC()) {
|
||||
parse->EventNPC(event_id, CastToNPC(), nullptr, "", 0, &args);
|
||||
}
|
||||
parse->EventMob(EVENT_ENTITY_VARIABLE_UPDATE, this, nullptr, [&]() { return ""; }, 0, &args);
|
||||
}
|
||||
|
||||
m_EntityVariables[variable_name] = variable_value;
|
||||
|
||||
Reference in New Issue
Block a user