From dff1a7c7d4c697729b1197714c9613ff4c6b7521 Mon Sep 17 00:00:00 2001 From: Jackz Date: Thu, 13 May 2021 19:24:39 -0500 Subject: [PATCH] tkstopper: Add a command to make player immune to detection --- plugins/l4d2_TKStopper.smx | Bin 6029 -> 7093 bytes scripting/l4d2_TKStopper.sp | 78 +++++++++++++++++++++++++++--------- 2 files changed, 60 insertions(+), 18 deletions(-) diff --git a/plugins/l4d2_TKStopper.smx b/plugins/l4d2_TKStopper.smx index 32193a08aba8b0ba815947e8ee0924c71ffdb339..9a27c24ce33d9f6938fed91fef56dc1bce8df9e2 100644 GIT binary patch delta 6940 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 #include -bool lateLoaded, IsFinaleEnding, isPlayerTroll[MAXPLAYERS+1]; +bool lateLoaded, IsFinaleEnding, isPlayerTroll[MAXPLAYERS+1], isImmune[MAXPLAYERS+1]; int iJoinTime[MAXPLAYERS+1]; float playerTotalDamageFF[MAXPLAYERS+1]; int lastFF[MAXPLAYERS+1]; @@ -57,6 +57,8 @@ public void OnPluginStart() HookEvent("finale_vehicle_ready", Event_FinaleVehicleReady); HookEvent("player_disconnect", Event_PlayerDisconnect); + RegAdminCmd("sm_ignore", Command_IgnorePlayer, ADMFLAG_KICK, "Makes a player immune for any anti trolling detection for a session"); + if(lateLoaded) { for(int i = 1; i <= MaxClients; i++) { if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2) { @@ -95,37 +97,77 @@ public void Event_PlayerDisconnect(Event event, const char[] name, bool dontBroa public Action Event_OnTakeDamage(int victim, int& attacker, int& inflictor, float& damage, int& damagetype, int& weapon, float damageForce[3], float damagePosition[3]) { if(damage > 0.0 && damagetype & (DMG_BLAST|DMG_BURN|DMG_BLAST_SURFACE) == 0 && victim <= MaxClients && attacker <= MaxClients && attacker > 0 && victim > 0) { + if(GetUserAdmin(attacker) != INVALID_ADMIN_ID || isImmune[attacker]) return Plugin_Continue; if(GetClientTeam(victim) != 2 || GetClientTeam(attacker) != 2 || attacker == victim) return Plugin_Continue; //Allow friendly firing BOTS that aren't idle players: //if(IsFakeClient(victim) && !HasEntProp(attacker, Prop_Send, "m_humanSpectatorUserID") || GetEntProp(attacker, Prop_Send, "m_humanSpectatorUserID") == 0) return Plugin_Continue; if(isPlayerTroll[attacker]) return Plugin_Stop; + int time = GetTime(); if(time - lastFF[attacker] > hForgivenessTime.IntValue) { playerTotalDamageFF[attacker] = 0.0; } playerTotalDamageFF[attacker] += damage; lastFF[attacker] = time; - if(GetUserAdmin(attacker) == INVALID_ADMIN_ID) { - if(playerTotalDamageFF[attacker] > hThreshold.IntValue && !IsFinaleEnding) { + + if(playerTotalDamageFF[attacker] > hThreshold.IntValue && !IsFinaleEnding) { + if(hAction.IntValue == 1) { + LogMessage("[NOTICE] Kicking %N for excessive FF (%f HP) for %d minutes.", attacker, playerTotalDamageFF[attacker], hBanTime.IntValue); + NotifyAllAdmins("[Notice] Kicking %N for excessive FF (%f HP) for %d minutes.", attacker, playerTotalDamageFF[attacker], hBanTime.IntValue); + KickClient(attacker, "Excessive FF"); + } else if(hAction.IntValue == 2) { LogMessage("[NOTICE] Banning %N for excessive FF (%f HP) for %d minutes.", attacker, playerTotalDamageFF[attacker], hBanTime.IntValue); NotifyAllAdmins("[Notice] Banning %N for excessive FF (%f HP) for %d minutes.", attacker, playerTotalDamageFF[attacker], hBanTime.IntValue); - if(hAction.IntValue == 1) - KickClient(attacker, "Excessive FF"); - else if(hAction.IntValue == 2) - BanClient(attacker, hBanTime.IntValue, BANFLAG_AUTO | BANFLAG_AUTHID, "Excessive FF", "Excessive Friendly Fire", "TKStopper"); - else if(hAction.IntValue == 3) - isPlayerTroll[attacker] = true; - return Plugin_Stop; - } - //If the amount of MS is <= join time threshold * 60000 ms then cancel - if(L4D_IsInFirstCheckpoint(victim) || L4D_IsInLastCheckpoint(victim) || time - iJoinTime[attacker] <= hJoinTime.IntValue * 60000) { - return Plugin_Stop; - }else { - SDKHooks_TakeDamage(attacker, attacker, attacker, IsFinaleEnding ? damage * 2.0 : damage / 1.9); - damage = IsFinaleEnding ? 0.0 : damage / 2.1; - return Plugin_Changed; + BanClient(attacker, hBanTime.IntValue, BANFLAG_AUTO | BANFLAG_AUTHID, "Excessive FF", "Excessive Friendly Fire", "TKStopper"); + } else if(hAction.IntValue == 3) { + LogMessage("[NOTICE] %N will be banned for FF on disconnect (%f HP) for %d minutes. ", attacker, playerTotalDamageFF[attacker], hBanTime.IntValue); + NotifyAllAdmins("[Notice] %N will be banned for FF on disconnect (%f HP) for %d minutes.", attacker, playerTotalDamageFF[attacker], hBanTime.IntValue); + isPlayerTroll[attacker] = true; } + return Plugin_Stop; + } + //If the amount of MS is <= join time threshold * 60000 ms then cancel + if(L4D_IsInFirstCheckpoint(victim) || L4D_IsInLastCheckpoint(victim) || time - iJoinTime[attacker] <= hJoinTime.IntValue * 60000) { + return Plugin_Stop; + }else { + SDKHooks_TakeDamage(attacker, attacker, attacker, IsFinaleEnding ? damage * 2.0 : damage / 1.9); + damage = IsFinaleEnding ? 0.0 : damage / 2.1; + return Plugin_Changed; } } return Plugin_Continue; } + +public Action Command_IgnorePlayer(int client, int args) { + char arg1[32]; + GetCmdArg(1, arg1, sizeof(arg1)); + + char target_name[MAX_TARGET_LENGTH]; + int target_list[1], target_count; + bool tn_is_ml; + + if ((target_count = ProcessTargetString( + arg1, + client, + target_list, + MaxClients, + COMMAND_FILTER_ALIVE, + target_name, + sizeof(target_name), + tn_is_ml)) <= 0) + { + ReplyToTargetError(client, target_count); + return Plugin_Handled; + } + + for(int i = 0; i < target_count; i++) { + int target = target_list[i]; + if(isImmune[target]) + ReplyToCommand(client, "%N is no longer immune to teamkiller detection.", target); + else + ReplyToCommand(client, "%N is now immune to teamkiller detection for this session.", target); + isImmune[target] = !isImmune[target]; + } + + return Plugin_Handled; +} \ No newline at end of file