A bunnyhop timer plugin for Counter-Strike: Source, Counter-Strike: Global Offensive and Team Fortress 2.
Go to file
2016-07-25 14:52:48 +03:00
configs add a decent looking csgo sprite (#95) 2016-07-25 14:52:48 +03:00
gamedata Updated gamedata for CS:S 2016-04-25 10:49:07 +03:00
maps Generate .nav files 2015-09-21 02:22:43 +03:00
materials/shavit add custom zone sprites 2016-07-23 19:22:06 +03:00
scripting add a decent looking csgo sprite (#95) 2016-07-25 14:52:48 +03:00
sound/shavit [sounds] Add "worse than pb" sounds 2016-06-24 11:58:05 +03:00
webserver Applied fixes from StyleCI 2016-07-16 01:36:35 -04:00
.gitattributes 🍭 Added .gitattributes & .gitignore files 2015-07-09 20:29:31 +03:00
.gitignore Add my atom-build config to .gitignore 2016-03-07 16:34:08 +02:00
.travis.yml update travis to use SM 1.8 2016-06-18 02:34:02 +03:00
1.2b_todo.md Started using Atom - let it auto indent everything. 2016-03-07 16:14:21 +02:00
1.3b_todo.md Started using Atom - let it auto indent everything. 2016-03-07 16:14:21 +02:00
1.4b_todo.md update todo 2015-09-22 13:35:11 +03:00
LICENSE attach GNU GPL v3 license 2016-06-20 17:30:31 +03:00
README.md better handling of bot clients 2016-07-25 02:24:41 +03:00
smbuild add -chat to smbuild 2016-07-08 18:38:30 +03:00

Build status

Build status

AlliedModders thread

Download

shavit's simple bhop timer

a bhop server should be simple

Mapzones' setup demonstration

Requirements:

  • SourceMod 1.8 and above
  • clientprefs plugin/extension. Comes built-in with SourceMod.
  • The RTLer is required to compile shavit-chat and you don't need Simple Chat Processor as listed in Ther RTLer's requirements.
  • Dynamic for compilation and runtime of shavit-chat.
  • Simple Chat Processor (Redux) - for compilation and better runtime of shavit-chat (plugin can run without it). Use the scp.inc file I attached in include/scp.inc for transitional syntax support.

Optional requirements:

Installation:

  1. Add a database entry in addons/sourcemod/configs/databases.cfg, call it "shavit"
"Databases"
{
	"driver_default"		"mysql"

	// When specifying "host", you may use an IP address, a hostname, or a socket file path

	"default"
	{
		"driver"			"default"
		"host"				"localhost"
		"database"			"sourcemod"
		"user"				"root"
		"pass"				""
		//"timeout"			"0"
		//"port"			"0"
	}

	"shavit"
	{
		"driver"         "mysql"
		"host"           "localhost"
		"database"       "shavit"
		"user"           "root"
		"pass"           ""
	}
}
  1. Copy the desired .smx files to your plugins (addons/sourcemod/plugins) folder
    2.1. Copy shavit.games.txt to /gamedata if you have DHooks installed.
  2. Copy base.nav to the maps folder.
  3. Copy the files from the sound folder to the one on your server. Make sure to also have equivelant bz2 files on your FastDL server!
    4.1. Do the same for the materials folder.
  4. Copy the configs file to your server and modify shavit-sounds.cfg if you wish to.
    5.1. Changing shavit-prefix.txt to contain your MySQL database prefix might be needed depending on your usage.
  5. Restart your server.

Required plugins:

shavit-core - no other plugin will work without it.
shavit-zones - required for shavit-core and for shavit-misc.
shavit-wr - required for shavit-stats, shavit-replay, shavit-sounds, shavit-stats and shavit-rankings.
shavit-rankings - required for shavit-chat.

Todo for 1.5b release (out of beta!)

General

  • Migrate every menu to the 1.7 transitional syntax.
  • Migrate DBI to the 1.7 transitional syntax.
  • Migrate events to the 1.7 transitional syntax.
  • Migrate ADT_Arrays to ArrayList.

Core

  • Fix chat colors for CS:S.
  • Add table prefix. (configs/shavit-prefix.txt)
  • Add shavit_core_nostaminareset ("easybhop")
  • Make a global enumerator/variable with per-style settings (bitflags) - configs are canceled, just recompile the plugin with your own edit of shavit.inc.
  • Add unranked styles.
  • Add a setting to not start timer if Z axis velocity is a thing (non-prespeed styles).
  • Measure strafe count/sync, also have it in the Shavit_OnFinish forward.
  • Add native that will execute threaded MySQL queries and allow callbacks - including safety checks, to prevent error spams. (Migrate DBI to new syntax first!)
  • Add bonus timer.

HUD

  • HUD toggling command. (sm_hud)
  • Zone (start/end) HUD toggling command. (sm_zonehud)
  • [CS:GO] Replace "- Replay Bot -" for bots with an underlined and pretty text.
  • Remove sm_zonehud and make sm_hud a menu that can toggle HUD, zonehud and spectators list in a panel.
  • Add spectator list.
  • Show time in a "TIME/RECORD" format for replay bots.
  • Support zonehud for CS:S.
  • Redo CS:S HUD and use the HUD capabilities added in late 2013, attempt to look like this HUD because I'm very original!!!111one!1!!
  • Show [PAUSED] if needed.
  • Add potential map rank.
  • Add strafes/sync. (replace 'Player' with strafes and sync in csgo, use keyhinttext for sync/spectator amount in css)
  • Show 'time left' in CS:S HUD.
  • Support for bonus timer.

Replay

  • Make a boolean native that confirms if a client is a replay bot with loaded data. (used for shavit-hud)
  • Stop recording frames (and clear cache) when the player is past the WR for the style.
  • Overall optimizations.
  • Remove replay bot data on deletion of the #1 record.
  • Make replay bots dead if there's no replay data loaded.
  • Clear player cache on spawn/death.
  • Add admin interface. (delete replay data, sm_deletereplay for RCON admins.)
  • Add a setting so there are two modes: one is that bots always play, and the other is that there are X bots (defined by server admin) and players can start their playback with a command. (sm_replay)

Stats

  • Make style names editable from shavit.inc (like I did to the rest of modules) (dynamic!)
  • Make a submenu per style, for aesthetics.
  • [rankings] Points implementation.
  • Make MVP count the amount of WRs the player has. (with cvar)

Miscellaneous

  • Allow changing the prespeed limitation.
  • Add weapon cleanup.
  • Support radar hiding for CS:S.
  • Fix respawn for auto team join.
  • Create extra spawn points for both teams because many bhop maps lack them. (shavit_misc_createspawnpoints)
  • Support map changing, specifically SourceMod's built-in mapchooser and MCE.
  • Add SSJ (Speed Sixth Jump).

Sounds (NEW!)

  • Play sounds (from config file | configs/shavit-sounds.cfg) on new events.
  • On new #1.
  • On personal best.
  • On map finish.

Rankings (NEW!)

  • Create tables. (mappoints, playerpoints)
  • Allow ROOT admins to set ideal points for map and time for the default style. (sm_setpoints <time in seconds> <points>)
  • Add sm_points.
  • Implement an algorithm that will calculate points for a record, will also take the time and style into account. Add a +25% bonus if the time is equal or better than the ideal one.
  • Use a weighting system for points calculation. The highest ranked time will be weighted 100% and worse times will be weighted as 5% less each time.
  • Calculate points for players once they connect to the server.
  • Add sm_top that will show the top X players, sort by points.
  • Calculate rank for players once they connect to the server.
  • Add sm_rank.
  • Calculate points per scored time once it's added to the database.
  • Recalculate points for every record on the current map when a ROOT admin changes the point value for it. (retroactive!)
  • Add natives. float Shavit_GetPoints(int client) int Shavit_GetRank(int client) void Shavit_GetMapValues(float &points, float &idealtime)
  • Add native that checks the total amount of players with over 0 points.
  • Find a way to update newly calculated points for all records on a map with the least amount of queries possible.
  • Remove deleted records from playerpoints.

Web Interface

  • Implement points.

Chat (NEW!)

  • Add logic that processes chat without requiring an external plugin such as Simple Chat Processor (Redux).
  • RTLer support.
  • Custom chat titles/colors per individual player.
  • Custom chat titles/colors for rank ranges.
  • Update cache for a player when his rank updates.
  • Add sm_ranks sm_chatranks.
  • Add Shavit_FormatChat native.
  • Add random rgb and random rgba for CS:S parsing.
  • Implement Simple Chat Processor (Redux) support and make my own chat processor a fallback solution.

Zones

  • Add teleport zones (multiple). Use the command sm_tpzone between the time of setting the zone and confirming the setup.
  • Use string explosion in ZoneAdjuster_Handler and ZoneEdge_Handler for code efficiency.
  • CANCELED: Migrate zone settings to use Dynamic. (i didn't think too far into it before i started)
  • Handle teleport zones. (teleport to a value from gV_Teleport)
  • Change zone sprite. (see configs/shavit-zones.cfg and shavit_zones_usecustomsprite)
  • Optimize InsideZone() so 8 points won't be always calculated (blame ofir™). Cut execution time by over 95%!!
  • Add grid snapping on zone creation.

World Records

  • Make UpdateWRCache smaller. Will result in extra optimization and more uhm.. dynamic!
  • Add a cvar that limits the amount of records in the WR menu. (default: 50 | shavit_wr_recordlimit)
  • Remove sm_wrsw and make sm_wr a dynamic menu with all difficulties. (dynamic!)
  • [rankings] Show points in WR menu.
  • Add native that checks the total amount of players with records on a style.
  • Cache the whole leaderboard per style, sorted and updated at record removal, insertion and updates.
  • Add Shavit_GetRankForTime(BhopStyle style, float time) which will calculate a map rank for the given time.
  • Show map rank on finish.
  • Add strafe sync to the WR menu where available.
  • Calculate points on the fly (sub-menu) instead of grabbing them from playerpoints.
  • Add sm_bwr sm_bonuswr sm_bonusworldrecord.
  • Use unix timestamps for future record dates.

Time Limits

  • Make the query order by time and add proper limitations.
  • Optimize query.