mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-11 03:31:08 +00:00
[Quest API] Add Entity Variable Events to Perl/Lua (#4092)
* [Quest API] Add Entity Variable Events to Perl/Lua - Add `EVENT_ENTITY_VARIABLE_DELETE`. - Add `EVENT_ENTITY_VARIABLE_SET`. - Add `EVENT_ENTITY_VARIABLE_UPDATE`. - All export `$variable_name` and `$variable_value`. - Add `event_entity_variable_delete`. - Add `event_entity_variable_set`. - Add `event_entity_variable_update`. - All export `e.variable_name` and `e.variable_value`. - Allows operators to perform operations when entity variables are cleared, deleted, set, or updated. * Update mob.cpp * Cleanup. * Cleanup * Update mob.cpp * Update lua_general.cpp * Update embparser_api.cpp
This commit is contained in:
+69
-11
@@ -5547,6 +5547,24 @@ 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 };
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_EntityVariables.clear();
|
||||
return true;
|
||||
}
|
||||
@@ -5563,6 +5581,23 @@ bool Mob::DeleteEntityVariable(std::string variable_name)
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -5573,22 +5608,22 @@ std::string Mob::GetEntityVariable(std::string variable_name)
|
||||
}
|
||||
|
||||
const auto& v = m_EntityVariables.find(variable_name);
|
||||
if (v != m_EntityVariables.end()) {
|
||||
return v->second;
|
||||
}
|
||||
|
||||
return std::string();
|
||||
return v != m_EntityVariables.end() ? v->second : std::string();
|
||||
}
|
||||
|
||||
std::vector<std::string> Mob::GetEntityVariables()
|
||||
{
|
||||
std::vector<std::string> l;
|
||||
|
||||
if (m_EntityVariables.empty()) {
|
||||
return l;
|
||||
}
|
||||
|
||||
l.reserve(m_EntityVariables.size());
|
||||
|
||||
for (const auto& v : m_EntityVariables) {
|
||||
l.push_back(v.first);
|
||||
l.emplace_back(v.first);
|
||||
}
|
||||
|
||||
return l;
|
||||
@@ -5600,12 +5635,7 @@ bool Mob::EntityVariableExists(std::string variable_name)
|
||||
return false;
|
||||
}
|
||||
|
||||
const auto& v = m_EntityVariables.find(variable_name);
|
||||
if (v != m_EntityVariables.end()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return m_EntityVariables.find(variable_name) != m_EntityVariables.end();
|
||||
}
|
||||
|
||||
void Mob::SetEntityVariable(std::string variable_name, std::string variable_value)
|
||||
@@ -5614,6 +5644,34 @@ 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
|
||||
);
|
||||
|
||||
if (
|
||||
(IsBot() && parse->BotHasQuestSub(event_id)) ||
|
||||
(IsClient() && parse->PlayerHasQuestSub(event_id)) ||
|
||||
(IsNPC() && parse->HasQuestSub(GetNPCTypeID(), event_id))
|
||||
) {
|
||||
std::vector<std::any> args;
|
||||
|
||||
if (event_id != EVENT_ENTITY_VARIABLE_UPDATE) {
|
||||
args = { variable_name, variable_value };
|
||||
} 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);
|
||||
}
|
||||
}
|
||||
|
||||
m_EntityVariables[variable_name] = variable_value;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user