Skip to content

Kryptanyte/bhoptimer

 
 

Repository files navigation

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.
  • DHooks - required for compilation of shavit-misc.
  • The RTLer is required to compile shavit-chat and you don't need Simple Chat Processor as listed in Ther RTLer's requirements.
  • Chat-Processor - for compilation and better runtime of shavit-chat (plugin can run without it).
  • Dynamic for compilation and runtime of the whole plugin. (use latest version from GitHub)

Optional requirements:

  • DHooks - required for 250/260 prestrafe for all weapons.
  • The RTLer - required for properly formatted RTL text within shavit-chat.
  • Chat-Processor - for more proper parsing inside shavit-chat.
  • sv_disable_immunity_alpha set to 1 in CS:GO for shavit_misc_playeropacity to work.
  • Bunnyhop Statistics - to show amount of scrolls for non-auto styles in the key display.
  • SteamWorks - for the {serverip} advertisement varialbe.

Installation:

  1. If you want to use MySQL (VERY RECOMMENDED) add a database entry in addons/sourcemod/configs/databases.cfg, call it "shavit". The plugin also supports the "sqlite" driver. You can also skip this step and not modify databases.cfg.
"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 equivalent bz2 files on your FastDL server!
    4.1. Do the same for the materials folder.
  4. Copy the configs folder to your server and modify them if you need 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.
  • Support "out of the box" installations and SQLite support.
  • Implement a config file for styles and use Dynamic to load them, add Shavit_OnStylesLoaded and caching natives.
  • Save timer variables on Dynamic's per-player settings.

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).
  • Add speed reset at timer start.
  • Add support for 100AA styles.
  • Measure strafe count/sync, also have it in the Shavit_OnFinish forward.
  • Add low gravity styles (0.6).
  • Better implementation of autobhop and +ds (doublestep fix).
  • Save autobhop/styles to clientprefs.
  • Add lastlogin column to users.
  • Allow late loading by adding Shavit_OnDatabaseLoaded() and get the new database handle in modules.
  • Add style changing commands (config file).
  • 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 in css)
  • Show 'time left' to HUD (CS:S only).
  • 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.
  • Bonus replay for default style.

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)
  • Generate mapsdone points on the fly.
  • Add map rank to mapsdone.
  • Show strafes/sync in mapsdone submenu.
  • Redo everything.
  • Add 'last online' field.
  • Add Shavit_GetWRCount(int client).
  • Stop calculating points on the fly and grab everything from the table.
  • Rework on points sorting and show weighting percentages.

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.
  • Make frags/score as -time and deaths as rank.
  • Add sm_usp sm_glock sm_knife.
  • Add SSJ (Speed Sixth Jump), save settings to clientprefs and print SSJ to spectators. REMOVED: Use this.
  • Add cvar to disable static 250 maxspeed.

Sounds (NEW!)

  • Play sounds (from config file | configs/shavit-sounds.cfg) on new events.
  • On new #1.
  • On personal best.
  • On map finish.
  • Add support for 'sound for X map rank'.
  • Add styles config for enabling/disabling sounds.

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.
  • Add map tiers. sm_tier sm_settier
  • Redirect to stats menu from sm_top.
  • Deprecate the tables, use a playertimes column for map points and a users column for total points.
  • Find a way to update newly calculated points for all records on a map with the least amount of queries possible.
  • Remove idealtime and use the WR time for the default time instead.
  • Remove deleted records from playerpoints.
  • Update every player's total points once per map. (MySQL only)

Web Interface

  • Implement points.
  • Compatibility for unix timestamps.
  • Compatibility for new 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.
  • Use unix timestamps for future record dates and add backwards compatibility.
  • Calculate points on the fly (sub-menu) instead of grabbing them from playerpoints.
  • Add sm_recent sm_recentrecords sm_rr.
  • Add strafes/sync to the WR menu where available.
  • Add 'player stats' to submenu.
  • Grab points from playertimes instead of calculating on the fly.
  • Add sm_bwr sm_bonuswr sm_bonusworldrecord.

Time Limits

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

About

CS:S/CS:GO bhop timer

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • SourcePawn 74.5%
  • C++ 16.8%
  • PHP 8.1%
  • Other 0.6%