From 0ffea3690522f1c82b17fcddeca7c6801b73135c Mon Sep 17 00:00:00 2001 From: Alex King <89047260+Kinglykrab@users.noreply.github.com> Date: Sun, 4 Feb 2024 18:16:28 -0500 Subject: [PATCH] [Quest API] Add GetAAEXPPercentage() and GetEXPPercentage() to Perl/Lua (#4044) * Initial Push * Push * Push. --- zone/client.cpp | 22 ++++++++++++++++++++++ zone/client.h | 3 +++ zone/lua_client.cpp | 14 ++++++++++++++ zone/lua_client.h | 2 ++ zone/perl_client.cpp | 12 ++++++++++++ 5 files changed, 53 insertions(+) diff --git a/zone/client.cpp b/zone/client.cpp index 9991f15c0..badfcaefd 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -12097,3 +12097,25 @@ void Client::SetEXPModifier(uint32 zone_id, float exp_modifier, int16 instance_v database.LoadCharacterEXPModifier(this); } + +int Client::GetAAEXPPercentage() +{ + int scaled = static_cast(330.0f * static_cast(GetAAXP()) / GetRequiredAAExperience()); + + return static_cast(std::round(scaled * 100.0 / 330.0)); +} + +int Client::GetEXPPercentage() +{ + float norm = 0.0f; + uint32_t min = GetEXPForLevel(GetLevel()); + uint32_t max = GetEXPForLevel(GetLevel() + 1); + + if (min != max) { + norm = static_cast(GetEXP() - min) / (max - min); + } + + int scaled = static_cast(330.0f * norm); // scale and truncate + + return static_cast(std::round(scaled * 100.0 / 330.0)); // unscaled pct +} diff --git a/zone/client.h b/zone/client.h index 9ee58c2d2..3871adf28 100644 --- a/zone/client.h +++ b/zone/client.h @@ -960,6 +960,9 @@ public: void SetTitleSuffix(std::string suffix); void MemorizeSpell(uint32 slot, uint32 spell_id, uint32 scribing, uint32 reduction = 0); + int GetAAEXPPercentage(); + int GetEXPPercentage(); + // Item methods void UseAugmentContainer(int container_slot); void EVENT_ITEM_ScriptStopReturn(); diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index e9358ad69..2ad5d28b0 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -3278,6 +3278,18 @@ void Lua_Client::ClearXTargets() self->ClearXTargets(); } +int Lua_Client::GetAAEXPPercentage() +{ + Lua_Safe_Call_Int(); + return self->GetAAEXPPercentage(); +} + +int Lua_Client::GetEXPPercentage() +{ + Lua_Safe_Call_Int(); + return self->GetEXPPercentage(); +} + luabind::scope lua_register_client() { return luabind::class_("Client") .def(luabind::constructor<>()) @@ -3400,6 +3412,7 @@ luabind::scope lua_register_client() { .def("GetAAEXPModifier", (float(Lua_Client::*)(void))&Lua_Client::GetAAEXPModifier) .def("GetAAEXPModifier", (float(Lua_Client::*)(uint32))&Lua_Client::GetAAEXPModifier) .def("GetAAEXPModifier", (float(Lua_Client::*)(uint32,int16))&Lua_Client::GetAAEXPModifier) + .def("GetAAEXPPercentage", (int(Lua_Client::*)(void))&Lua_Client::GetAAEXPPercentage) .def("GetAAExp", (uint32(Lua_Client::*)(void))&Lua_Client::GetAAExp) .def("GetAAPercent", (uint32(Lua_Client::*)(void))&Lua_Client::GetAAPercent) .def("GetAAPoints", (int(Lua_Client::*)(void))&Lua_Client::GetAAPoints) @@ -3459,6 +3472,7 @@ luabind::scope lua_register_client() { .def("GetEXPModifier", (float(Lua_Client::*)(void))&Lua_Client::GetEXPModifier) .def("GetEXPModifier", (float(Lua_Client::*)(uint32))&Lua_Client::GetEXPModifier) .def("GetEXPModifier", (float(Lua_Client::*)(uint32,int16))&Lua_Client::GetEXPModifier) + .def("GetEXPPercentage", (int(Lua_Client::*)(void))&Lua_Client::GetEXPPercentage) .def("GetEbonCrystals", (uint32(Lua_Client::*)(void))&Lua_Client::GetEbonCrystals) .def("GetEndurance", (int(Lua_Client::*)(void))&Lua_Client::GetEndurance) .def("GetEndurancePercent", (int(Lua_Client::*)(void))&Lua_Client::GetEndurancePercent) diff --git a/zone/lua_client.h b/zone/lua_client.h index 742b6650e..5b7a477a2 100644 --- a/zone/lua_client.h +++ b/zone/lua_client.h @@ -493,6 +493,8 @@ public: void SummonItemIntoInventory(luabind::object item_table); bool HasItemOnCorpse(uint32 item_id); void ClearXTargets(); + int GetAAEXPPercentage(); + int GetEXPPercentage(); void ApplySpell(int spell_id); void ApplySpell(int spell_id, int duration); diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index 762619f81..66ed0bf2c 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -3088,6 +3088,16 @@ void Perl_Client_ClearXTargets(Client* self) self->ClearXTargets(); } +int Perl_Client_GetAAEXPPercentage(Client* self) +{ + return self->GetAAEXPPercentage(); +} + +int Perl_Client_GetEXPPercentage(Client* self) +{ + return self->GetEXPPercentage(); +} + void perl_register_client() { perl::interpreter perl(PERL_GET_THX); @@ -3204,6 +3214,7 @@ void perl_register_client() package.add("GetAAEXPModifier", (float(*)(Client*))&Perl_Client_GetAAEXPModifier); package.add("GetAAEXPModifier", (float(*)(Client*, uint32))&Perl_Client_GetAAEXPModifier); package.add("GetAAEXPModifier", (float(*)(Client*, uint32, int16))&Perl_Client_GetAAEXPModifier); + package.add("GetAAEXPPercentage", &Perl_Client_GetAAEXPPercentage); package.add("GetAAExp", &Perl_Client_GetAAExp); package.add("GetAALevel", &Perl_Client_GetAALevel); package.add("GetAAPercent", &Perl_Client_GetAAPercent); @@ -3265,6 +3276,7 @@ void perl_register_client() package.add("GetEXPModifier", (float(*)(Client*))&Perl_Client_GetEXPModifier); package.add("GetEXPModifier", (float(*)(Client*, uint32))&Perl_Client_GetEXPModifier); package.add("GetEXPModifier", (float(*)(Client*, uint32, int16))&Perl_Client_GetEXPModifier); + package.add("GetEXPPercentage", &Perl_Client_GetEXPPercentage); package.add("GetEbonCrystals", &Perl_Client_GetEbonCrystals); package.add("GetEndurance", &Perl_Client_GetEndurance); package.add("GetEnduranceRatio", &Perl_Client_GetEnduranceRatio);