diff --git a/r5dev/networksystem/bansystem.cpp b/r5dev/networksystem/bansystem.cpp index 6fe9a36b..53f7b656 100644 --- a/r5dev/networksystem/bansystem.cpp +++ b/r5dev/networksystem/bansystem.cpp @@ -308,7 +308,7 @@ void CBanSystem::KickPlayerByName(const string& svPlayerName) //----------------------------------------------------------------------------- // Purpose: kicks a player by given handle or id -// Input : svHandle - +// Input : &svHandle - //----------------------------------------------------------------------------- void CBanSystem::KickPlayerById(const string& svHandle) { @@ -399,7 +399,7 @@ void CBanSystem::BanPlayerByName(const string& svPlayerName) //----------------------------------------------------------------------------- // Purpose: bans a player by given handle or id -// Input : svHandle - +// Input : &svHandle - //----------------------------------------------------------------------------- void CBanSystem::BanPlayerById(const string& svHandle) { @@ -466,5 +466,35 @@ void CBanSystem::BanPlayerById(const string& svHandle) } } +//----------------------------------------------------------------------------- +// Purpose: unbans a player by given nucleus id or ip address +// Input : &svCriteria - +//----------------------------------------------------------------------------- +void CBanSystem::UnbanPlayer(const string& svCriteria) +{ + try + { + if (StringIsDigit(svCriteria)) // Check if we have an ip address or nucleus id. + { + if (DeleteEntry("<>", std::stoll(svCriteria))) // Delete ban entry. + { + Save(); // Save modified vector to file. + } + } + else + { + if (DeleteEntry(svCriteria, 0)) // Delete ban entry. + { + Save(); // Save modified vector to file. + } + } + } + catch (const std::exception& e) + { + Error(eDLL_T::SERVER, NO_ERROR, "%s - %s", __FUNCTION__, e.what()); + return; + } +} + /////////////////////////////////////////////////////////////////////////////// CBanSystem* g_pBanSystem = new CBanSystem(); diff --git a/r5dev/networksystem/bansystem.h b/r5dev/networksystem/bansystem.h index 823344eb..0838a93e 100644 --- a/r5dev/networksystem/bansystem.h +++ b/r5dev/networksystem/bansystem.h @@ -24,6 +24,8 @@ public: void BanPlayerByName(const string& svPlayerName); void BanPlayerById(const string& svHandle); + void UnbanPlayer(const string& svCriteria); + private: vector> m_vRefuseList = {}; vector> m_vBanList = {}; diff --git a/r5dev/squirrel/sqinit.cpp b/r5dev/squirrel/sqinit.cpp index c93151da..2152888b 100644 --- a/r5dev/squirrel/sqinit.cpp +++ b/r5dev/squirrel/sqinit.cpp @@ -128,8 +128,8 @@ namespace VSquirrel //----------------------------------------------------------------------------- SQRESULT KickPlayerByName(HSQUIRRELVM v) { - SQChar* szPlayer = sq_getstring(v, 1); - g_pBanSystem->KickPlayerByName(szPlayer); + SQChar* szName = sq_getstring(v, 1); + g_pBanSystem->KickPlayerByName(szName); return SQ_OK; } @@ -139,8 +139,8 @@ namespace VSquirrel //----------------------------------------------------------------------------- SQRESULT KickPlayerById(HSQUIRRELVM v) { - SQChar* szPlayer = sq_getstring(v, 1); - g_pBanSystem->KickPlayerById(szPlayer); + SQChar* szHandle = sq_getstring(v, 1); + g_pBanSystem->KickPlayerById(szHandle); return SQ_OK; } @@ -150,8 +150,8 @@ namespace VSquirrel //----------------------------------------------------------------------------- SQRESULT BanPlayerByName(HSQUIRRELVM v) { - SQChar* szPlayer = sq_getstring(v, 1); - g_pBanSystem->BanPlayerByName(szPlayer); + SQChar* szName = sq_getstring(v, 1); + g_pBanSystem->BanPlayerByName(szName); return SQ_OK; } @@ -161,8 +161,19 @@ namespace VSquirrel //----------------------------------------------------------------------------- SQRESULT BanPlayerById(HSQUIRRELVM v) { - SQChar* szPlayer = sq_getstring(v, 1); - g_pBanSystem->BanPlayerById(szPlayer); + SQChar* szHandle = sq_getstring(v, 1); + g_pBanSystem->BanPlayerById(szHandle); + + return SQ_OK; + } + + //----------------------------------------------------------------------------- + // Purpose: unbans a player by given nucleus id or ip address + //----------------------------------------------------------------------------- + SQRESULT UnbanPlayer(HSQUIRRELVM v) + { + SQChar* szCriteria = sq_getstring(v, 1); + g_pBanSystem->UnbanPlayer(szCriteria); return SQ_OK; } diff --git a/r5dev/squirrel/sqinit.h b/r5dev/squirrel/sqinit.h index ab29d7ae..20b74cb3 100644 --- a/r5dev/squirrel/sqinit.h +++ b/r5dev/squirrel/sqinit.h @@ -33,6 +33,7 @@ namespace VSquirrel SQRESULT KickPlayerById(HSQUIRRELVM v); SQRESULT BanPlayerByName(HSQUIRRELVM v); SQRESULT BanPlayerById(HSQUIRRELVM v); + SQRESULT UnbanPlayer(HSQUIRRELVM v); } #endif // !CLIENT_DLL #ifndef DEDICATED diff --git a/r5dev/squirrel/sqscript.cpp b/r5dev/squirrel/sqscript.cpp index 7b210744..90b37b66 100644 --- a/r5dev/squirrel/sqscript.cpp +++ b/r5dev/squirrel/sqscript.cpp @@ -60,6 +60,8 @@ void Script_RegisterServerFunctions(CSquirrelVM* pSquirrelVM) Script_RegisterFunction(pSquirrelVM, "BanPlayerByName", "Script_BanPlayerByName", "Bans a player from the server by name", "void", "string", &VSquirrel::SERVER::BanPlayerByName); Script_RegisterFunction(pSquirrelVM, "BanPlayerById", "Script_BanPlayerById", "Bans a player from the server by handle or nucleus id", "void", "string", &VSquirrel::SERVER::BanPlayerById); + + Script_RegisterFunction(pSquirrelVM, "UnbanPlayer", "Script_UnbanPlayer", "Unbans a player from the server by nucleus id or ip address", "void", "string", &VSquirrel::SERVER::UnbanPlayer); } #endif // !CLIENT_DLL diff --git a/r5dev/vstdlib/callback.cpp b/r5dev/vstdlib/callback.cpp index 68433bb3..bcf73168 100644 --- a/r5dev/vstdlib/callback.cpp +++ b/r5dev/vstdlib/callback.cpp @@ -167,47 +167,7 @@ void Host_Unban_f(const CCommand& args) return; } - try - { - if (args.HasOnlyDigits(1)) // Check if we have an ip address or nucleus id. - { - if (g_pBanSystem->DeleteEntry("noIP", std::stoll(args.Arg(1)))) // Delete ban entry. - { - g_pBanSystem->Save(); // Save modified vector to file. - } - } - else - { - if (g_pBanSystem->DeleteEntry(args.Arg(1), 0)) // Delete ban entry. - { - g_pBanSystem->Save(); // Save modified vector to file. - } - } - } - catch (const std::exception& e) - { - Error(eDLL_T::SERVER, NO_ERROR, "%s - %s", __FUNCTION__, e.what()); - return; - } -} - -/* -===================== -Host_Changelevel_f - - Goes to a new map, - taking all clients along -===================== -*/ -void Host_Changelevel_f(const CCommand& args) -{ - if (args.ArgC() >= 2 - && IsOriginInitialized() - && g_pServer->IsActive()) - { - v_SetLaunchOptions(args); - v_HostState_ChangeLevelMP(args[1], args[2]); - } + g_pBanSystem->UnbanPlayer(args.Arg(1)); } /* @@ -231,6 +191,25 @@ void Host_ReloadPlaylists_f(const CCommand& args) KeyValues::InitPlaylists(); // Re-Init playlist. } +/* +===================== +Host_Changelevel_f + + Goes to a new map, + taking all clients along +===================== +*/ +void Host_Changelevel_f(const CCommand& args) +{ + if (args.ArgC() >= 2 + && IsOriginInitialized() + && g_pServer->IsActive()) + { + v_SetLaunchOptions(args); + v_HostState_ChangeLevelMP(args[1], args[2]); + } +} + #endif // !CLIENT_DLL /* ===================== diff --git a/r5dev/vstdlib/callback.h b/r5dev/vstdlib/callback.h index 19d43611..a6b8016b 100644 --- a/r5dev/vstdlib/callback.h +++ b/r5dev/vstdlib/callback.h @@ -21,9 +21,9 @@ void Host_KickID_f(const CCommand& args); void Host_Ban_f(const CCommand& args); void Host_BanID_f(const CCommand& args); void Host_Unban_f(const CCommand& args); -void Host_Changelevel_f(const CCommand& args); void Host_ReloadBanList_f(const CCommand& args); void Host_ReloadPlaylists_f(const CCommand& args); +void Host_Changelevel_f(const CCommand& args); #endif // !CLIENT_DLL void Pak_ListPaks_f(const CCommand& args); void Pak_RequestUnload_f(const CCommand& args);