[Quest API] Add GetIPExemption(), GetIPString(), and SetIPExemption(exemption_amount) to Perl/Lua.

- Add $client->GetIPExemption() to Perl.
- Add $client->GetIPString() to Perl.
- Add $client->SetIPExemption(exemption_amount) to Perl.
- Add client:GetIPExemption() to Lua.
- Add client:GetIPString() to Lua.
- Add client:SetIPExemption(exemption_amount) to Lua.

Will make plugin::IP unnecessary and allow people to get readable IP string easier, as well as set/get IP exemptions from Perl and Lua.
This commit is contained in:
Kinglykrab 2021-10-02 13:39:32 -04:00 committed by GitHub
parent 93acf50bb4
commit b3e9e2099a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 124 additions and 1 deletions

View File

@ -2271,6 +2271,35 @@ int Database::GetIPExemption(std::string account_ip) {
return RuleI(World, MaxClientsPerIP);
}
void Database::SetIPExemption(std::string account_ip, int exemption_amount) {
std::string query = fmt::format(
"SELECT `exemption_id` FROM `ip_exemptions` WHERE `exemption_ip` = '{}'",
account_ip
);
auto results = QueryDatabase(query);
uint32 exemption_id = 0;
if (results.Success() && results.RowCount() > 0) {
auto row = results.begin();
exemption_id = atoi(row[0]);
}
query = fmt::format(
"INSERT INTO `ip_exemptions` (`exemption_ip`, `exemption_amount`) VALUES ('{}', {})",
account_ip,
exemption_amount
);
if (exemption_id != 0) {
query = fmt::format(
"UPDATE `ip_exemptions` SET `exemption_amount` = {} WHERE `exemption_ip` = '{}'",
exemption_amount,
account_ip
);
}
QueryDatabase(query);
}
int Database::GetInstanceID(uint32 char_id, uint32 zone_id) {
std::string query = StringFormat("SELECT instance_list.id FROM instance_list INNER JOIN instance_list_player ON instance_list.id = instance_list_player.id WHERE instance_list.zone = '%i' AND instance_list_player.charid = '%i'", zone_id, char_id);
auto results = QueryDatabase(query);

View File

@ -198,7 +198,8 @@ public:
void GetAccountFromID(uint32 id, char* oAccountName, int16* oStatus);
void SetAgreementFlag(uint32 acctid);
int GetIPExemption(std::string account_ip);
int GetIPExemption(std::string account_ip);
void SetIPExemption(std::string account_ip, int exemption_amount);
int GetInstanceID(uint32 char_id, uint32 zone_id);

View File

@ -10530,6 +10530,23 @@ void Client::SetDoorToolEntityId(uint16 door_tool_entity_id)
Client::m_door_tool_entity_id = door_tool_entity_id;
}
int Client::GetIPExemption()
{
return database.GetIPExemption(GetIPString());
}
std::string Client::GetIPString()
{
in_addr client_ip{};
client_ip.s_addr = GetIP();
return inet_ntoa(client_ip);
}
void Client::SetIPExemption(int exemption_amount)
{
database.SetIPExemption(GetIPString(), exemption_amount);
}
void Client::ReadBookByName(std::string book_name, uint8 book_type)
{
int16 book_language = 0;

View File

@ -340,6 +340,9 @@ public:
bool GetRevoked() const { return revoked; }
void SetRevoked(bool rev) { revoked = rev; }
inline uint32 GetIP() const { return ip; }
std::string GetIPString();
int GetIPExemption();
void SetIPExemption(int exemption_amount);
inline bool GetHideMe() const { return gm_hide_me; }
void SetHideMe(bool hm);
inline uint16 GetPort() const { return port; }

View File

@ -2229,6 +2229,21 @@ void Lua_Client::UntrainDiscBySpellID(uint16 spell_id, bool update_client) {
self->UntrainDiscBySpellID(spell_id, update_client);
}
int Lua_Client::GetIPExemption() {
Lua_Safe_Call_Int();
return self->GetIPExemption();
}
std::string Lua_Client::GetIPString() {
Lua_Safe_Call_String();
return self->GetIPString();
}
void Lua_Client::SetIPExemption(int exemption_amount) {
Lua_Safe_Call_Void();
self->SetIPExemption(exemption_amount);
}
void Lua_Client::ReadBookByName(std::string book_name, uint8 book_type) {
Lua_Safe_Call_Void();
self->ReadBookByName(book_name, book_type);
@ -2632,6 +2647,9 @@ luabind::scope lua_register_client() {
.def("CountItem", (int(Lua_Client::*)(uint32))&Lua_Client::CountItem)
.def("RemoveItem", (void(Lua_Client::*)(uint32))&Lua_Client::RemoveItem)
.def("RemoveItem", (void(Lua_Client::*)(uint32,uint32))&Lua_Client::RemoveItem)
.def("GetIPExemption", (int(Lua_Client::*)(void))&Lua_Client::GetIPExemption)
.def("GetIPString", (std::string(Lua_Client::*)(void))&Lua_Client::GetIPString)
.def("SetIPExemption", (void(Lua_Client::*)(int))&Lua_Client::SetIPExemption)
.def("ReadBookByName", (void(Lua_Client::*)(std::string,uint8))&Lua_Client::ReadBookByName)
.def("SetGMStatus", (void(Lua_Client::*)(int32))&Lua_Client::SetGMStatus)
.def("UntrainDiscBySpellID", (void(Lua_Client::*)(uint16))&Lua_Client::UntrainDiscBySpellID)

View File

@ -284,6 +284,9 @@ public:
void SetEndurance(int endur);
void SendOPTranslocateConfirm(Lua_Mob caster, int spell_id);
uint32 GetIP();
std::string GetIPString();
int GetIPExemption();
void SetIPExemption(int exemption_amount);
void AddLevelBasedExp(int exp_pct);
void AddLevelBasedExp(int exp_pct, int max_level);
void AddLevelBasedExp(int exp_pct, int max_level, bool ignore_mods);

View File

@ -5693,6 +5693,55 @@ XS(XS_Client_DiaWind) {
XSRETURN_EMPTY;
}
XS(XS_Client_GetIPExemption);
XS(XS_Client_GetIPExemption) {
dXSARGS;
if (items != 1)
Perl_croak(aTHX_ "Usage: Client::GetIPExemption(THIS)"); // @categories Account and Character
{
Client* THIS;
int exemption_amount = 0;
dXSTARG;
VALIDATE_THIS_IS_CLIENT;
exemption_amount = THIS->GetIPExemption();
XSprePUSH;
PUSHi((IV) exemption_amount);
}
XSRETURN(1);
}
XS(XS_Client_GetIPString);
XS(XS_Client_GetIPString) {
dXSARGS;
if (items != 1)
Perl_croak(aTHX_ "Usage: Client::GetIPString(THIS)"); // @categories Account and Character
{
Client *THIS;
dXSTARG;
VALIDATE_THIS_IS_CLIENT;
std::string ip_string = THIS->GetIPString();
sv_setpv(TARG, ip_string.c_str());
XSprePUSH;
PUSHTARG;
}
XSRETURN(1);
}
XS(XS_Client_SetIPExemption); /* prototype to pass -Wmissing-prototypes */
XS(XS_Client_SetIPExemption) {
dXSARGS;
if (items != 2)
Perl_croak(aTHX_ "Usage: Client::SetIPExemption(THIS, int exemption_amount)"); // @categories Account and Character
{
Client *THIS;
int exemption_amount = (int) SvIV(ST(1));
dXSTARG;
VALIDATE_THIS_IS_CLIENT;
THIS->SetIPExemption(exemption_amount);
}
XSRETURN_EMPTY;
}
XS(XS_Client_ReadBookByName);
XS(XS_Client_ReadBookByName) {
dXSARGS;
@ -5905,6 +5954,8 @@ XS(boot_Client) {
newXSproto(strcpy(buf, "GetInstrumentMod"), XS_Client_GetInstrumentMod, file, "$$");
newXSproto(strcpy(buf, "GetInventory"), XS_Client_GetInventory, file, "$");
newXSproto(strcpy(buf, "GetIP"), XS_Client_GetIP, file, "$");
newXSproto(strcpy(buf, "GetIPExemption"), XS_Client_GetIPExemption, file, "$");
newXSproto(strcpy(buf, "GetIPString"), XS_Client_GetIPString, file, "$");
newXSproto(strcpy(buf, "GetItemAt"), XS_Client_GetItemAt, file, "$$");
newXSproto(strcpy(buf, "GetItemIDAt"), XS_Client_GetItemIDAt, file, "$$");
newXSproto(strcpy(buf, "GetItemInInventory"), XS_Client_GetItemInInventory, file, "$$");
@ -6049,6 +6100,7 @@ XS(boot_Client) {
newXSproto(strcpy(buf, "SetHideMe"), XS_Client_SetHideMe, file, "$$");
newXSproto(strcpy(buf, "SetHorseId"), XS_Client_SetHorseId, file, "$$");
newXSproto(strcpy(buf, "SetHunger"), XS_Client_SetHunger, file, "$$");
newXSproto(strcpy(buf, "SetIPExemption"), XS_Client_SetIPExemption, file, "$$");
newXSproto(strcpy(buf, "SetLanguageSkill"), XS_Client_SetLanguageSkill, file, "$$$");
newXSproto(strcpy(buf, "SetMaterial"), XS_Client_SetMaterial, file, "$$$");
newXSproto(strcpy(buf, "SetPrimaryWeaponOrnamentation"), XS_Client_SetPrimaryWeaponOrnamentation, file, "$$");