[Lua] Add UpdatePersonalFaction Lua Mod (#4279)

* Add UpdatePersonalFaction lua mod

* Fix typo

* Fix value typo
This commit is contained in:
Xackery
2024-05-04 15:58:58 -07:00
committed by GitHub
parent 943274b443
commit 34c27ebb2a
5 changed files with 88 additions and 0 deletions
+56
View File
@@ -37,6 +37,7 @@ void LuaMod::Init()
m_has_get_experience_for_kill = parser_->HasFunction("GetExperienceForKill", package_name_);
m_has_common_outgoing_hit_success = parser_->HasFunction("CommonOutgoingHitSuccess", package_name_);
m_has_calc_spell_effect_value_formula = parser_->HasFunction("CalcSpellEffectValue_formula", package_name_);
m_has_update_personal_faction = parser_->HasFunction("UpdatePersonalFaction", package_name_);
m_has_register_bug = parser_->HasFunction("RegisterBug", package_name_);
m_has_common_damage = parser_->HasFunction("CommonDamage", package_name_);
m_has_heal_damage = parser_->HasFunction("HealDamage", package_name_);
@@ -177,6 +178,61 @@ void GetExtraAttackOptions(luabind::adl::object &ret, ExtraAttackOptions *opts)
}
}
void LuaMod::UpdatePersonalFaction(Mob *self, int32 npc_value, int32 faction_id, int32 current_value, int32 temp, int32 this_faction_min, int32 this_faction_max, int32 &return_value, bool &ignore_default)
{
int start = lua_gettop(L);
try {
if (!m_has_update_personal_faction) {
return;
}
lua_getfield(L, LUA_REGISTRYINDEX, package_name_.c_str());
lua_getfield(L, -1, "UpdatePersonalFaction");
Lua_Mob l_self(self);
luabind::adl::object e = luabind::newtable(L);
e["self"] = l_self;
e["npc_value"] = npc_value;
e["faction_id"] = faction_id;
e["current_value"] = current_value;
e["temp"] = temp;
e["this_faction_min"] = this_faction_min;
e["this_faction_max"] = this_faction_max;
e.push(L);
if (lua_pcall(L, 1, 1, 0)) {
std::string error = lua_tostring(L, -1);
parser_->AddError(error);
lua_pop(L, 2);
return;
}
if (lua_type(L, -1) == LUA_TTABLE) {
luabind::adl::object ret(luabind::from_stack(L, -1));
auto ignore_default_obj = ret["ignore_default"];
if (luabind::type(ignore_default_obj) == LUA_TBOOLEAN) {
ignore_default = ignore_default || luabind::object_cast<bool>(ignore_default_obj);
}
auto return_value_obj = ret["return_value"];
if (luabind::type(return_value_obj) == LUA_TNUMBER) {
return_value = luabind::object_cast<int64>(return_value_obj);
}
}
}
catch (std::exception &ex) {
parser_->AddError(ex.what());
}
int end = lua_gettop(L);
int n = end - start;
if (n > 0) {
lua_pop(L, n);
}
}
void LuaMod::MeleeMitigation(Mob *self, Mob *attacker, DamageHitInfo &hit, ExtraAttackOptions *opts, bool &ignoreDefault) {
int start = lua_gettop(L);