From f05d935e9c8fa1e6cd08fe457e25896ad6f468c5 Mon Sep 17 00:00:00 2001 From: Jackz Date: Mon, 27 Jun 2022 19:17:50 -0500 Subject: [PATCH] Hopefully improve permission system --- plugins/L4D2Tools.smx | Bin 23873 -> 23891 bytes scripting/L4D2Tools.sp | 92 +++++++++++++++++++++-------------------- 2 files changed, 48 insertions(+), 44 deletions(-) diff --git a/plugins/L4D2Tools.smx b/plugins/L4D2Tools.smx index 563cfcc47f15e833f3c025d87b392a59be245011..f4ab4384a1a9ff26b08e2557c856df69e70c3197 100644 GIT binary patch literal 23891 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%0DBWGn$ig?%yS6;JLjwTdwZz6b5J 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 OZ*(yUpuGH^hW`O^m#1j} diff --git a/scripting/L4D2Tools.sp b/scripting/L4D2Tools.sp index 2d503e2..f5eae72 100644 --- a/scripting/L4D2Tools.sp +++ b/scripting/L4D2Tools.sp @@ -6,7 +6,6 @@ #define PLUGIN_VERSION "1.0" #include -#include #include #include #include @@ -80,19 +79,6 @@ public void OnPluginStart() { } LoadTranslations("common.phrases"); - Handle hConfig = LoadGameConfigFile("l4d2tools"); - if(hConfig == INVALID_HANDLE) SetFailState("Could not load l4d2tools gamedata."); - StartPrepSDKCall(SDKCall_Player); - PrepSDKCall_SetFromConf(hConfig, SDKConf_Signature, "TakeOverBot"); - hTakeOverBot = EndPrepSDKCall(); - StartPrepSDKCall(SDKCall_Player); - PrepSDKCall_SetFromConf(hConfig, SDKConf_Signature, "GoAwayFromKeyboard"); - hGoAwayFromKeyboard = EndPrepSDKCall(); - CloseHandle(hConfig); - if(hTakeOverBot == INVALID_HANDLE || hGoAwayFromKeyboard == INVALID_HANDLE) { - SetFailState("One of 3 signatures is invalid"); - } - hLaserNotice = CreateConVar("sm_laser_use_notice", "1.0", "Enable notification of a laser box being used", FCVAR_NONE, true, 0.0, true, 1.0); hFinaleTimer = CreateConVar("sm_time_finale", "0.0", "Record the time it takes to complete finale. 0 -> OFF, 1 -> Gauntlets Only, 2 -> All finales", FCVAR_NONE, true, 0.0, true, 2.0); hFFNotice = CreateConVar("sm_ff_notice", "0.0", "Notify players if a FF occurs. 0 -> Disabled, 1 -> In chat, 2 -> In Hint text", FCVAR_NONE, true, 0.0, true, 2.0); @@ -129,6 +115,7 @@ public void OnPluginStart() { HookEvent("bot_player_replace", Event_BotPlayerSwap); HookEvent("player_first_spawn", Event_PlayerFirstSpawn); HookEvent("weapon_drop", Event_WeaponDrop); + HookEvent("player_disconnect", Event_PlayerDisconnect); AutoExecConfig(true, "l4d2_tools"); @@ -177,32 +164,35 @@ public void OnClientConnected(int client) { } } -stock void PrintChatToAdmins(const char[] format, any ...) { - char buffer[254]; - VFormat(buffer, sizeof(buffer), format, 2); - for(int i = 1; i < MaxClients; i++) { - if(IsClientConnected(i) && IsClientInGame(i)) { - AdminId admin = GetUserAdmin(i); - if(admin != INVALID_ADMIN_ID) { - PrintToChat(i, "%s", buffer); - } - } - } - PrintToServer("%s", buffer); +// Returns -1 if not allowed, or their previous index +int GetAllowedPlayerIndex(const char[] authid2) { + int index; + return SteamIDs.GetValue(authid2, index) ? index : -1; } public void OnClientPostAdminCheck(int client) { if(!IsFakeClient(client)) { - static char auth[32]; - GetClientAuthId(client, AuthId_Steam2, auth, sizeof(auth)); - if(reserveMode == Reserve_Private || (reserveMode == Reserve_AdminOnly && GetUserAdmin(client) == INVALID_ADMIN_ID)) { - int index; - if(!SteamIDs.GetValue(auth, index)) { + if(reserveMode == Reserve_AdminOnly && GetUserAdmin(client) == INVALID_ADMIN_ID) { + static char auth[32]; + GetClientAuthId(client, AuthId_Steam2, auth, sizeof(auth)); + if(GetAllowedPlayerIndex(auth) == -1) { KickClient(client, "Sorry, server is reserved"); return; } } + } +} + +public void OnClientAuthorized(int client, const char[] auth) { + if(IsFakeClient(client)) return; + if(reserveMode == Reserve_Private) { + if(GetAllowedPlayerIndex(auth) == -1) { + KickClient(client, "Sorry, server is reserved"); + } + } + // Don't insert id here if admin only, let admin check do that + if(reserveMode != Reserve_AdminOnly) { SteamIDs.SetValue(auth, client); } } @@ -213,26 +203,31 @@ public Action Command_SetServerPermissions(int client, int args) { GetCmdArg(1, arg1, sizeof(arg1)); if(StrEqual(arg1, "public", false)) { reserveMode = Reserve_None; - }else if(StrContains(arg1, "noti", false) > -1) { + }else if(StrContains(arg1, "noti", false) > -1 || StrContains(arg1, "watch", false) > -1) { reserveMode = Reserve_Watch; }else if(StrContains(arg1, "admin", false) > -1) { reserveMode = Reserve_AdminOnly; - }else if(StrEqual(arg1, "private", false)) { - reserveMode = Reserve_Private; - static char auth[32]; for(int i = 1; i <= MaxClients; i++) { if(IsClientConnected(i) && IsClientInGame(i) && !IsFakeClient(i)) { - GetClientAuthId(i, AuthId_Steam2, auth, sizeof(auth)); - SteamIDs.SetValue(auth, i); + GetClientAuthId(i, AuthId_Steam2, arg1, sizeof(arg1)); + SteamIDs.SetValue(arg1, i); + } + } + }else if(StrEqual(arg1, "private", false)) { + reserveMode = Reserve_Private; + for(int i = 1; i <= MaxClients; i++) { + if(IsClientConnected(i) && IsClientInGame(i) && !IsFakeClient(i)) { + GetClientAuthId(i, AuthId_Steam2, arg1, sizeof(arg1)); + SteamIDs.SetValue(arg1, i); } } }else { ReplyToCommand(client, "Usage: sm_reserve [public/notify/admin/private] or no arguments to view current reservation."); return Plugin_Handled; } - PrintToChatAll("Server is now %s.", ReserveLevels[reserveMode]); + PrintChatToAdmins("Server access changed to %s", ReserveLevels[reserveMode]); } else { - ReplyToCommand(client, "Server is currently %s", ReserveLevels[reserveMode]); + ReplyToCommand(client, "Server access level is currently %s", ReserveLevels[reserveMode]); } return Plugin_Handled; } @@ -245,14 +240,15 @@ public Action Timer_CheckPlayerPings(Handle timer) { if(IsClientConnected(i) && IsClientInGame(i) && !IsFakeClient(i) && IsPlayerAlive(i) && GetClientTeam(i) > 1) { int ping = GetEntProp(GetPlayerResourceEntity(), Prop_Send, "m_iPing", _, i); if(isHighPingIdle[i] && ping <= hPingDropThres.IntValue) { - SDKCall(hTakeOverBot, i); + L4D_TakeOverBot(i); isHighPingIdle[i] = false; + iHighPingCount[i] = 0; }else if(ping > hPingDropThres.IntValue) { if(iHighPingCount[i]++ > 2) { - PrintToChat(i, "Due to your high ping (%d ms) you have been moved to AFK.", ping); + PrintToChat(i, "Due to your high ping (%d ms), you have been moved to AFK.", ping); PrintToChat(i, "You will be automatically switched back once your ping restores"); //PrintToChat(i, "Type /pingignore to disable this feature."); - SDKCall(hGoAwayFromKeyboard, i); + L4D_ReplaceWithBot(i); isHighPingIdle[i] = true; iHighPingCount[i] = 0; } @@ -280,7 +276,7 @@ public Action Command_RespawnAll(int client, int args) { } public Action Command_SwapPlayer(int client, int args) { if(args < 1) { - ReplyToCommand(client, "Usage: sm_swap [player or yourself] [silent]"); + ReplyToCommand(client, "Usage: sm_swap [another player (default: self)] [\"silent\"]"); }else{ char arg1[64], arg2[64], arg3[8]; GetCmdArg(1, arg1, sizeof(arg1)); @@ -621,23 +617,31 @@ public Action Cmd_SetSurvivor(int client, int args) { return Plugin_Handled; } +// Hide MOTD public Action VGUIMenu(UserMsg msg_id, Handle bf, const int[] players, int playersNum, bool reliable, bool init) { static char buffer[5]; BfReadString(bf, buffer, sizeof(buffer)); return strcmp(buffer, "info") == 0 ? Plugin_Handled : Plugin_Continue; } + public void OnClientPutInServer(int client) { if(!IsFakeClient(client)) SDKHook(client, SDKHook_WeaponEquip, Event_OnWeaponEquip); } + public void OnClientDisconnect(int client) { + isHighPingIdle[client] = false; + iHighPingCount[client] = 0; if(IsClientConnected(client) && IsClientInGame(client) && botDropMeleeWeapon[client] > -1) { float pos[3]; GetClientAbsOrigin(client, pos); TeleportEntity(botDropMeleeWeapon[client], pos, NULL_VECTOR, NULL_VECTOR); botDropMeleeWeapon[client] = -1; } - if(!IsFakeClient(client)) { +} +public void Event_PlayerDisconnect(Event event, const char[] name, bool dontBroadcast) { + int client = GetClientOfUserId(event.GetInt("userid")); + if(client && !IsFakeClient(client)) { static char auth[32]; GetClientAuthId(client, AuthId_Steam2, auth, sizeof(auth)); SteamIDs.Remove(auth);