Upvote Upvoted 87 Downvote Downvoted
Sawr's Competitive Plugins
posted in Projects
1
#1
0 Frags +

I wrote two plugins to bring much needed functionality to competitive tf2 matches based on features present in other competitive games. Both plugins are open-source, thoroughly tested, and ready for community feedback.

AdvancedPause

AdvancedPause is an extension of F2's Pause plugin that automatically pauses a game when a player disconnects, and allows that player to rejoin at the same position they disconnected. A player's health, position, velocity, ammo, ubercharge, and more are restored upon reconnecting. The plugin retains F2's original pause functionality, which provides accidental unpause protection, a 5 second unpause countdown, and unlimited chat during a pause. Once all players who are going to reconnect have rejoined, the game can be unpaused and play can resume almost as if no disconnect occurred.

Because the player's state can not be exactly reproduced, care has been taken to prevent the plugin from being abuseable. Players that disconnect while dead will have to sit out a death timer when they rejoin, and changing loadouts is not allowed; i.e. a medic cannot build with Quick-Fix, disconnect and switch to uber, and have a full uber. If a loadout change occurs, the player will be slain. Many other scenarios have been considered and are detailed in the technical document.

Current version: 1.0.1
Download
Source

GG Concede

GG Concede provides a "gg" command that allows a team to concede the match to their opponents. Typing !gg or /gg in chat, or gg in console will start a 10 second countdown after which the match will end, unless someone on the conceding uses the "cancel" command (!cancel or /cancel in chat). Spectators and the opposing team are alerted that their opponents are calling gg in 10 seconds. This plugin can eliminate "dead time," in which it is mathematically impossible for the losing team to win and players typically stop trying, and instead replace it with a concise and respectful end to the match.

In league play, each round win may affect a team's rankings, so conditions can be set on when a team can GG out. GG Concede features ConVars to limit when a gg can be called: round win threshold, win difference, time left (e.g. less than 3 minutes left). These conditions can be set to ensure that neither team can be cheated out of a fair chance to earn round wins.

On pug and lobby servers, the gg_vote ConVar can be set to have the gg command initiate a vote instead of a countdown. The vote lasts for 10 seconds and a majority of players must !gg in order to end the game.

ConVars
gg_enabled - Sets whether calling gg is enabled
gg_vote - Sets whether a team must vote on gg.
gg_winnerconcede - Sets whether the winning team can call gg
gg_winthreshold - Sets the number of round wins a team must win before their opponents may call gg
gg_windifference - Sets the difference in round wins required for the losing team to call gg
gg_timeleft - Sets the number of minutes left in the game before a team can call gg

Current version: 1.1.0
Download
Source

Installation

  • SourceMod is required for these plugins.
  • Remove F2's Pause Plugin (pause.smx) before installing (don't worry, it has all the same functionality)
  • Place AdvancedPause.smx and/or ggconcede.smx in /tf/addons/sourcemod/plugins/
  • Configure ConVar settings by adding them to your server's config files
  • Change server level once to load plugins

Comments

Competitive TF2 is a great game and deserves the same functionality as other Valve games like Dota 2, which has automatic pausing on player disconnect and player reconnecting as well as a "gg" game ending mechanism. The ultimate goal of this project is for Valve to take notice and properly implement the functionality in game. In the meantime, these thoroughly tested plugins are a close approximation. Please use them on your scrim server and make suggestions for improvements on this thread or report issues on the github page. If you are a programmer, you can check out the commented source code on github and read my detailed documentation on how the plugins work. After a few weeks of beta testing and community feedback, these plugins should be ready for league play and make the functionality a standard for competitive tf2.

Credits

  • Sawr - plugin design, development
  • Hedge - testing, ideas, advice
  • F2 - original pause plugin

and countless others who paved the road with SourceMod.

I wrote two plugins to bring much needed functionality to competitive tf2 matches based on features present in other competitive games. Both plugins are open-source, thoroughly tested, and ready for community feedback.

[h]AdvancedPause[/h]

AdvancedPause is an extension of F2's Pause plugin that automatically pauses a game when a player disconnects, and allows that player to rejoin at the same position they disconnected. A player's health, position, velocity, ammo, ubercharge, and more are restored upon reconnecting. The plugin retains F2's original pause functionality, which provides accidental unpause protection, a 5 second unpause countdown, and unlimited chat during a pause. Once all players who are going to reconnect have rejoined, the game can be unpaused and play can resume almost as if no disconnect occurred.

Because the player's state can not be exactly reproduced, care has been taken to prevent the plugin from being abuseable. Players that disconnect while dead will have to sit out a death timer when they rejoin, and changing loadouts is not allowed; i.e. a medic cannot build with Quick-Fix, disconnect and switch to uber, and have a full uber. If a loadout change occurs, the player will be slain. Many other scenarios have been considered and are detailed in the [url=https://docs.google.com/document/d/1xXOQjlc-ZtjE6AgYnx4p6OQxDaBd57tt7bPl279DXw4/]technical document[/url].

Current version: 1.0.1
[url=https://github.com/Sawrr/tf2/blob/master/AdvancedPause/AdvancedPause.smx?raw=true]Download[/url]
[url=https://github.com/Sawrr/tf2/tree/master/AdvancedPause]Source[/url]

[h]GG Concede[/h]

GG Concede provides a "gg" command that allows a team to concede the match to their opponents. Typing !gg or /gg in chat, or gg in console will start a 10 second countdown after which the match will end, unless someone on the conceding uses the "cancel" command (!cancel or /cancel in chat). Spectators and the opposing team are alerted that their opponents are calling gg in 10 seconds. This plugin can eliminate "dead time," in which it is mathematically impossible for the losing team to win and players typically stop trying, and instead replace it with a concise and respectful end to the match.

In league play, each round win may affect a team's rankings, so conditions can be set on when a team can GG out. GG Concede features ConVars to limit when a gg can be called: round win threshold, win difference, time left (e.g. less than 3 minutes left). These conditions can be set to ensure that neither team can be cheated out of a fair chance to earn round wins.

On pug and lobby servers, the gg_vote ConVar can be set to have the gg command initiate a vote instead of a countdown. The vote lasts for 10 seconds and a majority of players must !gg in order to end the game.

[b]ConVars[/b]
gg_enabled - Sets whether calling gg is enabled
gg_vote - Sets whether a team must vote on gg.
gg_winnerconcede - Sets whether the winning team can call gg
gg_winthreshold - Sets the number of round wins a team must win before their opponents may call gg
gg_windifference - Sets the difference in round wins required for the losing team to call gg
gg_timeleft - Sets the number of minutes left in the game before a team can call gg

Current version: 1.1.0
[url=https://github.com/Sawrr/tf2/blob/master/GGConcede/ggconcede.smx?raw=true]Download[/url]
[url=https://github.com/Sawrr/tf2/tree/master/GGConcede]Source[/url]

[h]Installation[/h]
[list]
[*] SourceMod is required for these plugins.
[*] Remove F2's Pause Plugin (pause.smx) before installing (don't worry, it has all the same functionality)
[*] Place AdvancedPause.smx and/or ggconcede.smx in /tf/addons/sourcemod/plugins/
[*] Configure ConVar settings by adding them to your server's config files
[*] Change server level once to load plugins
[/list]

[h]Comments[/h]

Competitive TF2 is a great game and deserves the same functionality as other Valve games like Dota 2, which has automatic pausing on player disconnect and player reconnecting as well as a "gg" game ending mechanism. The ultimate goal of this project is for Valve to take notice and properly implement the functionality in game. In the meantime, these thoroughly tested plugins are a close approximation. Please use them on your scrim server and make suggestions for improvements on this thread or report issues on the [url=https://github.com/Sawrr/tf2]github page[/url]. If you are a programmer, you can check out the commented source code on github and read my detailed [url=https://docs.google.com/document/d/1xXOQjlc-ZtjE6AgYnx4p6OQxDaBd57tt7bPl279DXw4/]documentation[/url] on how the plugins work. After a few weeks of beta testing and community feedback, these plugins should be ready for league play and make the functionality a standard for competitive tf2.

[h]Credits[/h]
[list]
[*] Sawr - plugin design, development
[*] Hedge - testing, ideas, advice
[*] F2 - original pause plugin
[/list]
and countless others who paved the road with SourceMod.
2
#2
23 Frags +

Very nice of you to implement someone's idea about dead time. Good work man!

Very nice of you to implement someone's idea about dead time. Good work man!
3
#3
25 Frags +

you forgot about the best plugin in the game, your prefix plugin sawr!

edit: sawr we discovered a bug! when we scrimmed, after the match was over someone disconnected and it paused the pregame. you have a lovely plugin and i hope this minor inconvenience is fixed soon!

you forgot about the best plugin in the game, your prefix plugin sawr!

edit: sawr we discovered a bug! when we scrimmed, after the match was over someone disconnected and it paused the pregame. you have a lovely plugin and i hope this minor inconvenience is fixed soon!
4
#4
8 Frags +

lots of thought and testing has been put into these plugins and it shows (assuming it works as described xd). super good job, i hope they become standard (sad that f2's pause plugin never really did)

lots of thought and testing has been put into these plugins and it shows (assuming it works as described xd). super good job, i hope they become standard (sad that f2's pause plugin never really did)
5
#5
10 Frags +
niteyou forgot about the best plugin in the game, your prefix plugin sawr!

edit: sawr we discovered a bug! when we scrimmed, after the match was over someone disconnected and it paused the pregame. you have a lovely plugin and i hope this minor inconvenience is fixed soon!

Hedge and I have discovered that the bug occurs when a match ends due to time limit rather than win limit. I will have a fix for that shortly.

Edit: Issue has been resolved in version 1.0.1

[quote=nite]you forgot about the best plugin in the game, your prefix plugin sawr!

edit: sawr we discovered a bug! when we scrimmed, after the match was over someone disconnected and it paused the pregame. you have a lovely plugin and i hope this minor inconvenience is fixed soon![/quote]

Hedge and I have discovered that the bug occurs when a match ends due to time limit rather than win limit. I will have a fix for that shortly.

Edit: Issue has been resolved in version 1.0.1
6
#6
1 Frags +

Would leagues have to approve these plugins before we use them?

Would leagues have to approve these plugins before we use them?
7
#7
12 Frags +

This sounds like a couple of great plugins but there is one small thing that I would change. The way the gg command is right now from your description would allow for a team to abuse it by typing /gg and then canceling it the last moment to try and catch the opponent off guard.

I would suggest perhaps having it so that only the team that typed it could see it somehow. I'm not sure if sourcemod can be used to hide (certain phrases from) chat if it was typed into the main chat window. If not then make it work via console command only perhaps?

One more thing is that it might be good to have it activate only on a majority rather than one player initiating it. This would mean that the countdown timer could be removed as I assume that is there mainly in case someone types it accidentally.

Great work though, keep it up.

This sounds like a couple of great plugins but there is one small thing that I would change. The way the gg command is right now from your description would allow for a team to abuse it by typing /gg and then canceling it the last moment to try and catch the opponent off guard.

I would suggest perhaps having it so that only the team that typed it could see it somehow. I'm not sure if sourcemod can be used to hide (certain phrases from) chat if it was typed into the main chat window. If not then make it work via console command only perhaps?

One more thing is that it might be good to have it activate only on a majority rather than one player initiating it. This would mean that the countdown timer could be removed as I assume that is there mainly in case someone types it accidentally.

Great work though, keep it up.
8
#8
13 Frags +

Why don't make the !gg command launch a vote (like on faceit) or make it work like old rtv votes.

Why don't make the !gg command launch a vote (like on faceit) or make it work like old rtv votes.
9
#9
6 Frags +
hrThis sounds like a couple of great plugins but there is one small thing that I would change. The way the gg command is right now from your description would allow for a team to abuse it by typing /gg and then canceling it the last moment to try and catch the opponent off guard.

I would suggest perhaps having it so that only the team that typed it could see it somehow. I'm not sure if sourcemod can be used to hide (certain phrases from) chat if it was typed into the main chat window. If not then make it work via console command only perhaps?

One more thing is that it might be good to have it activate only on a majority rather than one player initiating it. This would mean that the countdown timer could be removed as I assume that is there mainly in case someone types it accidentally.

Great work though, keep it up.

While it might be possible to prevent the other team from seeing that gg is being called, it will be obvious if your opponents all say gg in the chat. Unfortunately, the kind of bait-and-switch abuse you describe will always be possible, but typically teams will only call gg when the game is truly over, i.e. at the end of a round or in the midst of a stalemate with 30 seconds left. If your opponents call a suspicious gg, an easy solution is to just stay focused for 10 seconds and say "gg" afterwards.

shorasWhy don't make the !gg command launch a vote (like on faceit) or make it work like old rtv votes.

This is a good idea for pugs where you can't trust all your teammates not to joke around / give up too early. I will implement this and add a ConVar so you can choose which method you prefer.

[quote=hr]This sounds like a couple of great plugins but there is one small thing that I would change. The way the gg command is right now from your description would allow for a team to abuse it by typing /gg and then canceling it the last moment to try and catch the opponent off guard.

I would suggest perhaps having it so that only the team that typed it could see it somehow. I'm not sure if sourcemod can be used to hide (certain phrases from) chat if it was typed into the main chat window. If not then make it work via console command only perhaps?

One more thing is that it might be good to have it activate only on a majority rather than one player initiating it. This would mean that the countdown timer could be removed as I assume that is there mainly in case someone types it accidentally.

Great work though, keep it up.[/quote]

While it might be possible to prevent the other team from seeing that gg is being called, it will be obvious if your opponents all say gg in the chat. Unfortunately, the kind of bait-and-switch abuse you describe will always be possible, but typically teams will only call gg when the game is truly over, i.e. at the end of a round or in the midst of a stalemate with 30 seconds left. If your opponents call a suspicious gg, an easy solution is to just stay focused for 10 seconds and say "gg" afterwards.

[quote=shoras]Why don't make the !gg command launch a vote (like on faceit) or make it work like old rtv votes.[/quote]

This is a good idea for pugs where you can't trust all your teammates not to joke around / give up too early. I will implement this and add a ConVar so you can choose which method you prefer.
10
#10
7 Frags +

I have implemented a voting system in version 1.1.0 so a vote can be started with the !gg command if the ConVar gg_vote is set. A majority of players must vote to gg out within a 10 second period. Additionally, I fixed a similar bug where the plugin continued to be active after games ending via time limit.

I tested the voting functionality as much as I could, but again I am hoping for community testing and feedback.

I have implemented a voting system in version 1.1.0 so a vote can be started with the !gg command if the ConVar gg_vote is set. A majority of players must vote to gg out within a 10 second period. Additionally, I fixed a similar bug where the plugin continued to be active after games ending via time limit.

I tested the voting functionality as much as I could, but again I am hoping for community testing and feedback.
11
#11
6 Frags +

just wondering, wouldn't using gg plugin in ETF2L official matches break the rules?

4.1.1 Timelimit: 30 minutes Timelimit 30 has to be used for all 5CP maps.

so even if it's 4:0 and 2 minutes remaining calling gg and ending match would practically break this rule, since timelimit wasn't 30 minutes but 28
great job btw

just wondering, wouldn't using gg plugin in ETF2L official matches break the rules?
[quote]4.1.1 Timelimit: 30 minutes Timelimit 30 has to be used for all 5CP maps.[/quote]
so even if it's 4:0 and 2 minutes remaining calling gg and ending match would practically break this rule, since timelimit wasn't 30 minutes but 28
great job btw
12
#12
2 Frags +
degujust wondering, wouldn't using gg plugin in ETF2L official matches break the rules?4.1.1 Timelimit: 30 minutes Timelimit 30 has to be used for all 5CP maps.so even if it's 4:0 and 2 minutes remaining calling gg and ending match would practically break this rule, since timelimit wasn't 30 minutes but 28
great job btw

Obviously I am not an ETF2L authority, but my guess is that the rule just means the mp_timelimit cvar must be set to 30. Either way, if leagues want to use this GG functionality they will have to establish rules on when GG can be called and set the appropriate cvar values in their configs.

[quote=degu]just wondering, wouldn't using gg plugin in ETF2L official matches break the rules?
[quote]4.1.1 Timelimit: 30 minutes Timelimit 30 has to be used for all 5CP maps.[/quote]
so even if it's 4:0 and 2 minutes remaining calling gg and ending match would practically break this rule, since timelimit wasn't 30 minutes but 28
great job btw[/quote]

Obviously I am not an ETF2L authority, but my guess is that the rule just means the mp_timelimit cvar must be set to 30. Either way, if leagues want to use this GG functionality they will have to establish rules on when GG can be called and set the appropriate cvar values in their configs.
Please sign in through STEAM to post a comment.