diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6996943..3e712ca 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -126,7 +126,7 @@ jobs: - name: Compile RGL Suite Plugins against SM ${{ steps.setup-sp.outputs.version }} run: | - for plugin in "rglqol" "rglupdater" "tf2Halftime" "improved_match_timer" "disabled/roundtimer_override" "disabled/passthestats" + for plugin in "rglqol" "rglupdater" "tf2Halftime" "improved_match_timer" "disabled/roundtimer_override" do echo -e "\nCompiling $plugin.sp..." spcomp -E -w234 -O2 -v2 -i $SCRIPTS_PATH/include $plugin.sp @@ -155,8 +155,7 @@ jobs: run: | mv tf2Halftime.smx disabled/ mv roundtimer_override.smx disabled/ - mv passthestats.smx disabled/ - mv passtimecontrol.smx disabled/ + mv p4sstime.smx disabled/ working-directory: ${{ env.PLUGINS_PATH }}/ - name: Rebuild updatefile.txt diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 0d1fe7c..e3e94a9 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -51,7 +51,7 @@ jobs: - name: Compile RGL Suite Plugins against SM ${{ steps.setup-sp.outputs.version }} run: | - for plugin in "rglqol" "rglupdater" "improved_match_timer" "disabled/roundtimer_override" "disabled/passthestats" + for plugin in "rglqol" "rglupdater" "improved_match_timer" "disabled/roundtimer_override" do echo -e "\nCompiling $plugin.sp..." spcomp -E -w234 -O2 -v2 -i $SCRIPTS_PATH/include $plugin.sp @@ -67,8 +67,7 @@ jobs: - name: Disable optional plugins run: | mv roundtimer_override.smx disabled/ - mv passthestats.smx disabled/ - mv passtimecontrol.smx disabled/ + mv p4sstime.smx disabled/ working-directory: ${{ env.PLUGINS_PATH }}/ - name: Rebuild updatefile.txt diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 515404f..e791b4c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -89,7 +89,7 @@ jobs: - name: Compile RGL Suite Plugins against SM ${{ steps.setup-sp.outputs.version }} run: | - for plugin in "rglqol" "rglupdater" "tf2Halftime" "improved_match_timer" "disabled/roundtimer_override" "disabled/passthestats" + for plugin in "rglqol" "rglupdater" "tf2Halftime" "improved_match_timer" "disabled/roundtimer_override" do echo -e "\nCompiling $plugin.sp..." spcomp -E -w234 -O2 -v2 -i $SCRIPTS_PATH/include $plugin.sp @@ -118,8 +118,7 @@ jobs: run: | mv tf2Halftime.smx disabled mv roundtimer_override.smx disabled/ - mv passthestats.smx disabled/ - mv passtimecontrol.smx disabled/ + mv p4sstime.smx disabled/ working-directory: ${{ env.PLUGINS_PATH }}/ - name: Rebuild updatefile.txt diff --git a/.gitignore b/.gitignore index 9182b8a..9c40ba6 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,4 @@ README.txt # ignore smx builds *.smx -!passtimecontrol.smx \ No newline at end of file +!p4sstime.smx \ No newline at end of file diff --git a/addons/sourcemod/gamedata/passtime-fixes.txt b/addons/sourcemod/gamedata/passtime-fixes.txt new file mode 100644 index 0000000..4295738 --- /dev/null +++ b/addons/sourcemod/gamedata/passtime-fixes.txt @@ -0,0 +1,42 @@ +/** + * Copyright (C) 2022 Mikusch + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +"Games" +{ + "tf" + { + "Offsets" + { + "CBaseProjectile::CanCollideWithTeammates" + { + "library" "server" + "linux" "230" + "windows" "229" + } + } + "Functions" + { + "CBaseProjectile::CanCollideWithTeammates" + { + "offset" "CBaseProjectile::CanCollideWithTeammates" + "hooktype" "entity" + "return" "bool" + "this" "entity" + } + } + } +} diff --git a/addons/sourcemod/plugins/p4sstime.smx b/addons/sourcemod/plugins/p4sstime.smx new file mode 100644 index 0000000..f677963 Binary files /dev/null and b/addons/sourcemod/plugins/p4sstime.smx differ diff --git a/addons/sourcemod/plugins/passtimecontrol.smx b/addons/sourcemod/plugins/passtimecontrol.smx deleted file mode 100644 index 6894a0f..0000000 Binary files a/addons/sourcemod/plugins/passtimecontrol.smx and /dev/null differ diff --git a/addons/sourcemod/scripting/disabled/passthestats.sp b/addons/sourcemod/scripting/disabled/passthestats.sp deleted file mode 100644 index 06a1c8b..0000000 --- a/addons/sourcemod/scripting/disabled/passthestats.sp +++ /dev/null @@ -1,213 +0,0 @@ -#include -#include -#include - -//adding support for maps other than arena2 -#define PLUGIN_VERSION "1.6.0" -#define NAME_SIZE 25 - -public Plugin myinfo = { - name = "[TF2] Pass the Stats", - author = "easye", - description = "Stats for Competitve 4v4 Passtime", - version = "PLUGIN_VERSION", - url="https://github.com/eaasye/passtime" -} - - -//playerArray: 0 = scores, saves = 1, 2 = interceptions, 3 = steals -int playerArray[MAXPLAYERS][4]; -float bluGoal[3], redGoal[3]; -ConVar statsEnable, statsDelay, saveRadius; - - -public void OnPluginStart() { - statsEnable = CreateConVar("sm_passtime_stats", "1", "Enables passtime stats") - statsDelay = CreateConVar("sm_passtime_stats_delay", "7.5", "Delay for passtime stats to be displayed after a game is won") - saveRadius = CreateConVar("sm_passtime_stats_save_radius", "200", "The Radius in hammer units from the goal that an intercept is considered a save") - CreateConVar("sm_passthestats_version", PLUGIN_VERSION, "*DONT MANUALLY CHANGE* PassTheStats Plugin Version", FCVAR_NOTIFY | FCVAR_DONTRECORD | FCVAR_SPONLY); - char mapName[64], prefix[16]; - GetCurrentMap(mapName, sizeof(mapName)); - prefix[0] = mapName[0], prefix[1] = mapName[1]; - if - (StrEqual("pa", prefix)) statsEnable.SetInt(1); - else - statsEnable.SetInt(0); - - HookEvent("teamplay_round_win", Event_TeamWin, EventHookMode_Post); - HookEvent("pass_score", Event_PassScore, EventHookMode_Post); - HookEvent("pass_pass_caught", Event_PassCaught, EventHookMode_Post); - HookEvent("pass_ball_stolen", Event_PassStolen, EventHookMode_Post); -} - -public void OnMapStart() { - GetGoalLocations(); -} - -public void OnClientDisconnect(int client) { - playerArray[client][0] = 0, playerArray[client][1] = 0, playerArray[client][2] = 0, playerArray[client][3] = 0; -} - - -public Action Event_PassScore(Event event, const char[] name, bool dontbroadcast) { - if (!statsEnable.BoolValue) return Plugin_Handled; - - int client = event.GetInt("scorer") - if (!IsValidClient(client)) return Plugin_Handled; - char playerName[NAME_SIZE]; - GetClientName(client, playerName, sizeof(playerName)); - PrintToChatAll("\x0700ffff[PASS] %s\x073BC43B scored a goal!", playerName); - playerArray[client][0]++; - return Plugin_Handled; -} - -public Action Event_PassCaught(Event event, const char[] name, bool dontBroadcast) { - if (!statsEnable.BoolValue) return Plugin_Handled; - - int passer = event.GetInt("passer"); - int catcher = event.GetInt("catcher"); - if (TF2_GetClientTeam(passer) == TF2_GetClientTeam(catcher)) return Plugin_Handled; - if (TF2_GetClientTeam(passer) == TFTeam_Spectator || TF2_GetClientTeam(catcher) == TFTeam_Spectator) return Plugin_Handled; - - char passerName[NAME_SIZE], catcherName[NAME_SIZE]; - GetClientName(passer, passerName, sizeof(passerName)); - GetClientName(catcher, catcherName, sizeof(catcherName)); - if (InGoalieZone(catcher)) { - PrintToChatAll("\x0700ffff[PASS] %s \x07ffff00 blocked \x0700ffff%s!", catcherName, passerName); - playerArray[catcher][1]++; - } - else { - PrintToChatAll("\x0700ffff[PASS] %s \x07ff00ffintercepted \x0700ffff%s!", catcherName, passerName); - playerArray[catcher][2]++; - } - - return Plugin_Handled; -} - -public Action Event_PassStolen(Event event, const char[] name, bool dontBroadcast) { - if (!statsEnable.BoolValue) return Plugin_Handled; - - int thief = event.GetInt("attacker"); - int victim = event.GetInt("victim"); - char thiefName[NAME_SIZE], victimName[NAME_SIZE]; - GetClientName(thief, thiefName, sizeof(thiefName)); - GetClientName(victim, victimName, sizeof(victimName)); - PrintToChatAll("\x0700ffff[PASS] %s\x07ff8000 stole from\x0700ffff %s!", thiefName, victimName); - playerArray[thief][3]++; - - return Plugin_Handled; -} - -public Action Event_TeamWin(Event event, const char[] name, bool dontBroadcast) { - if (!statsEnable.BoolValue) return Plugin_Handled; - CreateTimer(statsDelay.FloatValue, Timer_DisplayStats) - return Plugin_Handled; -} - -//this is really fucking sloppy but shrug -public Action Timer_DisplayStats(Handle timer) { - int redTeam[16], bluTeam[16]; - int redCursor, bluCursor = 0; - for (int x=1; x < MaxClients+1; x++) { - if (!IsValidClient(x)) continue; - - if (TF2_GetClientTeam(x) == TFTeam_Red) { - redTeam[redCursor] = x; - redCursor++; - } - - else if (TF2_GetClientTeam(x) == TFTeam_Blue) { - bluTeam[bluCursor] = x; - bluCursor++; - } - } - for (int x=1; x < MaxClients+1; x++) { - if (!IsValidClient2(x)) continue; - - if (TF2_GetClientTeam(x) == TFTeam_Red) { - for (int i=0; i < bluCursor; i++) { - char playerName[NAME_SIZE]; - GetClientName(bluTeam[i], playerName, sizeof(playerName)) - PrintToChat(x, "\x0700ffff[PASS]\x074EA6C1 %s:\x073BC43B goals %d,\x07ffff00 saves %d,\x07ff00ff intercepts %d,\x07ff8000 steals %d", playerName, playerArray[bluTeam[i]][0], playerArray[bluTeam[i]][1], playerArray[bluTeam[i]][2], playerArray[bluTeam[i]][3]) - } - - for (int i=0; i < redCursor; i++) { - char playerName[NAME_SIZE]; - GetClientName(redTeam[i], playerName, sizeof(playerName)) - PrintToChat(x, "\x0700ffff[PASS]\x07C43F3B %s:\x073BC43B goals %d,\x07ffff00 saves %d,\x07ff00ff intercepts %d,\x07ff8000 steals %d", playerName, playerArray[redTeam[i]][0], playerArray[redTeam[i]][1], playerArray[redTeam[i]][2], playerArray[redTeam[i]][3]) - } - } - - else if (TF2_GetClientTeam(x) == TFTeam_Blue|| TF2_GetClientTeam(x) == TFTeam_Spectator) { - for (int i=0; i < redCursor; i++) { - char playerName[NAME_SIZE]; - GetClientName(redTeam[i], playerName, sizeof(playerName)) - PrintToChat(x, "\x0700ffff[PASS]\x07C43F3B %s:\x073BC43B goals %d,\x07ffff00 saves %d,\x07ff00ff intercepts %d,\x07ff8000 steals %d", playerName, playerArray[redTeam[i]][0], playerArray[redTeam[i]][1], playerArray[redTeam[i]][2], playerArray[redTeam[i]][3]) - } - - for (int i=0; i < bluCursor; i++) { - char playerName[NAME_SIZE]; - GetClientName(bluTeam[i], playerName, sizeof(playerName)) - PrintToChat(x, "\x0700ffff[PASS]\x074EA6C1 %s:\x073BC43B goals %d,\x07ffff00 saves %d,\x07ff00ff intercepts %d,\x07ff8000 steals %d", playerName, playerArray[bluTeam[i]][0], playerArray[bluTeam[i]][1], playerArray[bluTeam[i]][2], playerArray[bluTeam[i]][3]) - } - - } - } - - //clear stats - for (int i=0; i < MaxClients+1;i++) { - playerArray[i][0] = 0, playerArray[i][1] = 0, playerArray[i][2] = 0, playerArray[i][3] = 0; - } - return Plugin_Continue; -} - -public bool InGoalieZone(int client) { - int team = GetClientTeam(client); - float position[3]; - GetClientAbsOrigin(client, position); - - if (team == view_as(TFTeam_Blue)) { - float distance = GetVectorDistance(position, bluGoal, false); - if (distance < saveRadius.FloatValue) return true; - } - - if (team == view_as(TFTeam_Red)) { - float distance = GetVectorDistance(position, redGoal, false); - if (distance < saveRadius.FloatValue) return true; - } - - return false; -} - -public void GetGoalLocations() { - int goal1 = FindEntityByClassname(-1, "func_passtime_goal"); - int goal2 = FindEntityByClassname(goal1, "func_passtime_goal"); - int team1 = GetEntProp(goal1, Prop_Send, "m_iTeamNum"); - if (team1 == 2) { - GetEntPropVector(goal1, Prop_Send, "m_vecOrigin", bluGoal); - GetEntPropVector(goal2, Prop_Send, "m_vecOrigin", redGoal); - } - else { - GetEntPropVector(goal2, Prop_Send, "m_vecOrigin", bluGoal); - GetEntPropVector(goal1, Prop_Send, "m_vecOrigin", redGoal); - } -} - -//i have two of these because i have no friends so i test with robots -public bool IsValidClient(int client) { - if (client > 4096) client = EntRefToEntIndex(client); - if (client < 1 || client > MaxClients) return false; - if (!IsClientInGame(client)) return false; - //if (IsFakeClient(client)) return false; - if (GetEntProp(client, Prop_Send, "m_bIsCoaching")) return false; - return true; -} - -public bool IsValidClient2(int client) { - if (client > 4096) client = EntRefToEntIndex(client); - if (client < 1 || client > MaxClients) return false; - if (!IsClientInGame(client)) return false; - if (IsFakeClient(client)) return false; - if (GetEntProp(client, Prop_Send, "m_bIsCoaching")) return false; - return true; -} \ No newline at end of file diff --git a/addons/sourcemod/scripting/disabled/passtimecontrol.sp b/addons/sourcemod/scripting/disabled/passtimecontrol.sp deleted file mode 100644 index 1040916..0000000 --- a/addons/sourcemod/scripting/disabled/passtimecontrol.sp +++ /dev/null @@ -1,201 +0,0 @@ -#include -#include - - -#define PLUGIN_VERSION "1.4.0" - -bool deadPlayers[MAXPLAYERS + 1]; -//0 = hud text, 1 = chat, 2 = sound -bool ballHudEnabled[MAXPLAYERS + 1][3]; - -ConVar stockEnable, respawnEnable, clearHud, collisionDisable; - -Menu ballHudMenu; - -public Plugin myinfo = { - name = "[TF2] PasstimeControl", - author = "EasyE", - description = "Intended for 4v4 Competitive Passtime use. Can prevent players from using shotgun, stickies, and needles. Can disable the screenoverlay blur effect after intercepting or stealing the jack.", - version = PLUGIN_VERSION, - url = "https://github.com/eaasye/passtime" -} - -public void OnPluginStart() { - RegConsoleCmd("sm_ballhud", Command_BallHud); - - HookEvent("player_spawn", Event_PlayerSpawn, EventHookMode_Post); - HookEvent("post_inventory_application", Event_PlayerResup, EventHookMode_Post); - HookEvent("player_death", Event_PlayerDeath, EventHookMode_Post); - HookEvent("pass_get", Event_PassGet, EventHookMode_Post); - HookEvent("pass_free", Event_PassFree, EventHookMode_Post); - HookEvent("pass_ball_stolen", Event_PassStolen, EventHookMode_Post); - HookEntityOutput("info_passtime_ball_spawn", "OnSpawnBall", Hook_OnSpawnBall) - AddCommandListener(OnChangeClass, "joinclass"); - - stockEnable = CreateConVar("sm_passtime_whitelist", "0", "Enables/Disables passtime stock weapon locking"); - respawnEnable = CreateConVar("sm_passtime_respawn", "0", "Enables/disables fixed respawn time"); - clearHud = CreateConVar("sm_passtime_hud", "1", "Enables/Disables blocking the blur effect after intercepting or stealing the ball"); - collisionDisable = CreateConVar("sm_passtime_collision_disable", "0", "Enables/Disables the passtime jack from colliding with ammopacks or weapons"); - CreateConVar("sm_passtimecontrol_version", PLUGIN_VERSION, "*DONT MANUALLY CHANGE* Passtime-Control Plugin Version", FCVAR_NOTIFY | FCVAR_DONTRECORD | FCVAR_SPONLY); - - ballHudMenu = new Menu(BallHudMenuHandler); - ballHudMenu.SetTitle("Jack Notifcations"); - ballHudMenu.AddItem("hudtext", "Toggle hud notifcation"); - ballHudMenu.AddItem("chattext", "Toggle chat notifcation"); - ballHudMenu.AddItem("sound", "Toggle sound notification"); -} - -public void OnClientDisconnect(int client) { - deadPlayers[client] = false; - ballHudEnabled[client][0] = false; - ballHudEnabled[client][1] = false; - ballHudEnabled[client][2] = false; -} - -public void TF2_OnConditionAdded(int client, TFCond condition) { - if (condition == TFCond_PasstimeInterception && clearHud.BoolValue) { - ClientCommand(client, "r_screenoverlay \"\""); - } -} - -public Action Command_BallHud(int client, int args) { - if (IsValidClient(client)) ballHudMenu.Display(client, MENU_TIME_FOREVER); - return Plugin_Handled; -} - -public int BallHudMenuHandler(Menu menu, MenuAction action, int param1, int param2) { - if (action == MenuAction_Select) { - char info[32]; - char status[64]; - ballHudMenu.GetItem(param2, info, sizeof(info)); - if (StrEqual(info, "hudtext")) { - ballHudEnabled[param1][0] = !ballHudEnabled[param1][0]; - ballHudMenu.Display(param1, MENU_TIME_FOREVER); - - Format(status, sizeof(status), "\x0700ffff[PASS]\x01 Hud text: %s", ballHudEnabled[param1][0] ? "\x0700ff00Enabled" : "\x07ff0000Disabled"); - PrintToChat(param1, status); - } - if (StrEqual(info, "chattext")) { - ballHudEnabled[param1][1] = !ballHudEnabled[param1][1]; - ballHudMenu.Display(param1, MENU_TIME_FOREVER); - - Format(status, sizeof(status), "\x0700ffff[PASS]\x01 Chat text: %s", ballHudEnabled[param1][1] ? "\x0700ff00Enabled" : "\x07ff0000Disabled"); - PrintToChat(param1, status); - - } - if (StrEqual(info, "sound")) { - ballHudEnabled[param1][2] = !ballHudEnabled[param1][2]; - ballHudMenu.Display(param1, MENU_TIME_FOREVER); - - Format(status, sizeof(status), "\x0700ffff[PASS]\x01 Sound notification: %s", ballHudEnabled[param1][2] ? "\x0700ff00Enabled" : "\x07ff0000Disabled"); - PrintToChat(param1, status); - } - } - return 0; -} - -/* ---EVENTS--- */ - -public Action Event_PassFree(Event event, const char[] name, bool dontBroadcast) { - int owner = event.GetInt("owner") - if (ballHudEnabled[owner][0]) { - SetHudTextParams(-1.0, 0.22, 3.0, 240, 0, 240, 255); - ShowHudText(owner, 1, ""); - } - return Plugin_Continue; -} - -public Action Event_PassGet(Event event, const char[] name, bool dontBroadcast) { - int owner = event.GetInt("owner"); - if (ballHudEnabled[owner][0]) { - SetHudTextParams(-1.0, 0.22, 3.0, 240, 0, 240, 255); - ShowHudText(owner, 1, "YOU HAVE THE JACK"); - } - - if (ballHudEnabled[owner][1]) { - PrintToChat(owner, "\x07ffff00[PASS]\x0700ff00 YOU HAVE THE JACK!!!"); - } - - if (ballHudEnabled[owner][2]) { - ClientCommand(owner, "playgamesound Passtime.BallSmack"); - } - return Plugin_Continue; -} - -public Action Event_PassStolen(Event event, const char[] name, bool dontBroadcast) { - int owner = event.GetInt("victim"); - if (ballHudEnabled[owner][0]) { - SetHudTextParams(-1.0, 0.22, 3.0, 240, 0, 240, 255); - ShowHudText(owner, 1, ""); - } - return Plugin_Continue; -} - -public Action Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast) { - int client = GetClientOfUserId(GetEventInt(event, "userid")) - deadPlayers[client] = true; - return Plugin_Continue; -} - -public Action Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast) { - int client = GetClientOfUserId(GetEventInt(event, "userid")) - deadPlayers[client] = false; - RemoveShotty(client); - return Plugin_Continue; -} - -public Action Event_PlayerResup(Event event, const char[] name, bool dontBroadcast) { - int client = GetClientOfUserId(GetEventInt(event, "userid")) - RemoveShotty(client); - return Plugin_Continue; -} - -public Action OnChangeClass(int client, const char[] strCommand, int args) { - if(deadPlayers[client] == true && respawnEnable.BoolValue) { - PrintCenterText(client, "You cant change class yet."); - return Plugin_Handled; - } - - return Plugin_Continue; -} - -public void Hook_OnSpawnBall(const char[] name, int caller, int activator, float delay) { - int ball = FindEntityByClassname(-1, "passtime_ball"); - if(collisionDisable.BoolValue) SetEntityCollisionGroup(ball, 4); -} - -/* ---FUNCTIONS--- */ - -public void RemoveShotty(int client) { - if(stockEnable.BoolValue) { - TFClassType class = TF2_GetPlayerClass(client); - int iWep; - if (class == TFClass_DemoMan || class == TFClass_Soldier) iWep = GetPlayerWeaponSlot(client, 1) - else if (class == TFClass_Medic) iWep = GetPlayerWeaponSlot(client, 0); - - if(iWep >= 0) { - char classname[64]; - GetEntityClassname(iWep, classname, sizeof(classname)); - - if (StrEqual(classname, "tf_weapon_shotgun_soldier") || StrEqual(classname, "tf_weapon_pipebomblauncher")) { - PrintToChat(client, "\x07ff0000 [PASS] Shotgun/Stickies equipped"); - TF2_RemoveWeaponSlot(client, 1); - } - - if (StrEqual(classname, "tf_weapon_syringegun_medic")) { - PrintToChat(client, "\x07ff0000 [PASS] Syringe Gun equipped"); - TF2_RemoveWeaponSlot(client, 0); - } - - } - } -} - -public bool IsValidClient(int client) { - if (client > 4096) client = EntRefToEntIndex(client); - if (client < 1 || client > MaxClients) return false; - if (!IsClientInGame(client)) return false; - if (IsFakeClient(client)) return false; - if (GetEntProp(client, Prop_Send, "m_bIsCoaching")) return false; - return true; -} \ No newline at end of file diff --git a/cfg/rgl_base.cfg b/cfg/rgl_base.cfg index 443f8b0..09a7177 100644 --- a/cfg/rgl_base.cfg +++ b/cfg/rgl_base.cfg @@ -11,8 +11,7 @@ sm plugins unload disabled/roundtimer_override // unloads the old improved mat sm plugins unload roundtimer_override // unloads the old improved match timer from any server that may still have it enabled sm plugins unload improved_match_timer // unloads the improved match timer, not used by all formats sm plugins unload tf2Halftime // unloads tf2Halftime plugin -sm plugins unload disabled/passthestats // unloads passthestats plugin -sm plugins unload disabled/passtimecontrol // unloads passtimecontrol plugin +sm plugins unload disabled/p4sstime // unloads p4sstime plugin // TF2 Comp Fixes sm_deterministic_fall_damage 0 // patched by Valve July 7, 2022 with tf_fall_damage_disablespread diff --git a/cfg/rgl_off.cfg b/cfg/rgl_off.cfg index 86d624d..8ed532b 100644 --- a/cfg/rgl_off.cfg +++ b/cfg/rgl_off.cfg @@ -124,6 +124,7 @@ mp_time_between_capscoring "30" // delay between scoring of owned c tf_passtime_score_crit_sec "5.0f" // how long a scoring team's crits last tf_passtime_powerball_passpoints "25" // how many ball meter points are awarded for a complete pass tf_passtime_powerball_airtimebonus "40" // ball meter points added per second of time a pass is in the air. +tf_passtime_overtime_idle_sec "5" // defaults to 5 tf_tournament_classlimit_scout "-1" // defaults tf_tourney classlimits tf_tournament_classlimit_soldier "-1" // ^ @@ -177,7 +178,7 @@ sv_client_min_interp_ratio "1" // clamps client interp settings (d sv_client_max_interp_ratio "5" // ^ sv_client_predict "-1" // does not force cl_predict 1 - +sv_quota_stringcmdspersecond "40" // reset to default sv_allow_votes "1" // enables vote system @@ -206,8 +207,7 @@ sm plugins unload rglqol // unloads the qol plugin so that it sm plugins unload improved_match_timer // unloads the improved match timer //Pass time plugin -sm plugins unload disabled/passtimecontrol // loads passtimecontrol -sm plugins unload disabled/passthestats // loads passthestats +sm plugins unload disabled/p4sstime // unloads passtimecontrol exec "server" // execs the settings in your server.cfg servercfgfile "server" // execs your server cfg file on map change @@ -217,4 +217,4 @@ servercfgfile "server" // execs your server cfg file on map ch //sv_shutdown // sets a graceful shutdown to occur when server is empty say "Thanks for playing! Please note that STV is not immediately unloaded via this config, as slot count issues would occur and lead to potentional crashes." -say "A server restart has been scheduled to occur when all players have left the server, to turn off STV. Use sv_shutdown_cancel to prevent this. \ No newline at end of file +// say "A server restart has been scheduled to occur when all players have left the server to turn off STV. Use sv_shutdown_cancel to prevent this." \ No newline at end of file diff --git a/cfg/rgl_pt_base.cfg b/cfg/rgl_pt_base.cfg index 7941d4d..4736ff7 100644 --- a/cfg/rgl_pt_base.cfg +++ b/cfg/rgl_pt_base.cfg @@ -28,12 +28,17 @@ tf_passtime_score_crit_sec "0" tf_passtime_powerball_passpoints "0" tf_passtime_powerball_airtimebonus "0" +// sv_client_cmdrate_difference "30" +sv_quota_stringcmdspersecond "200" // prevent players from being kicked for issuing too many commands to the server +tf_passtime_overtime_idle_sec "30" // extend overtime period before round reset to allow for more interesting play + //Pass time plugin -sm plugins load disabled/passtimecontrol // loads passtimecontrol -sm plugins load disabled/passthestats // loads passthestats - -sm_passtime_whitelist "1" -sm_passtime_respawn "1" -sm_passtime_stats "1" -sm_passtime_hud "1" -sm_passtime_disable_collisions "1" \ No newline at end of file +sm plugins load disabled/p4sstime // loads p4sstime + +sm_pt_whitelist "1" +sm_pt_respawn "1" +sm_pt_stats "1" +sm_pt_hud "1" +sm_pt_drop_collision "1" +sm_pt_catapultprint "0" +sm_pt_practice "0" \ No newline at end of file diff --git a/cfg/rgl_pt_push.cfg b/cfg/rgl_pt_push.cfg index 2fd323f..f6ca323 100644 --- a/cfg/rgl_pt_push.cfg +++ b/cfg/rgl_pt_push.cfg @@ -11,14 +11,11 @@ mp_winlimit "3" // unsets server winlimit mp_windifference "0" // unsets windifference mp_maxrounds "0" // sets maxrounds to 2 -mp_showrespawntimes "1" // show the min respawn times for the teams, needed? -mp_time_between_capscoring "0" // delay between scoring of owned capture points -sv_client_cmdrate_difference "30" mp_tournament_restart // restarts the tournament to apply above settings say "RGL Fours Pass Time Push Config Executed." -say "First to win 3 rounds the match. First to 5 scores wins a round." +say "First to win 3 rounds wins the match. First to 5 scores wins a round." say "To be safe, please ***CHANGELEVEL*** to reload all settings properly and prevent any crashes." say "Exec rgl_off or restart your server 90 seconds after you have fully finished playing." \ No newline at end of file