What it is:
- Map votes (!votemap). You can schedule one. Unfortunately, it only works with mp_timelimit. No frag/round limits. Yet.
But if you want, it can change maps instantly (without waiting for round end), so it still matches requirements of DM servers. - Map extensions. Any map can be extended if you let players do it.
- Recent maps exclusion. Stops them from switching between two dust's back and forth.
- Nominations (!nominate). Players can nominate their maps so that these maps appear on first places in the map votes.
- RockTheVote (!rtv). Players can start map votes prematurely.
- TimeLeft (!timeleft). Reports how much time is left till the map changes.
- NextMap (!nextmap). Reports what the next map is.
- Map ratings (!likemap). Allows players to Like! or Dislike the map they're playing on. Also runs mass surveys right before main map vote.
Map rating (likes, likes - dislikes or likes:dislikes) is one of the most important factors that defines which maps will make it to the final vote. - New maps tracker. Sometimes you add new maps to you maplist and want to make people see and play them. The plugin tracks these maps for X days and bumps them just a bit in map votes.
- maps folder scanner. If you run a fast-paced gamemode, you probably have a lot of maps. This plugin allows you to rebuild mapcycle.txt if you provide right prefixes.
- Fancy map names :) . No more de_dust2, it's Dust II now. You can define your own multilangual translations or hardcode the name right into mapcycle.json.
- mapcycle.json. I'm sorry, but it's just the way it is. Once you have built your mapcycle.txt, the plugin will help you convert it to mapcycle.json. Why JSON? It gives you the opportunity to define extra mapcycling options.
- Time restriction. Got both de_dust2 and de_dust2_night? No problem. mapcycle.json allows you to set time intervals when each map should appear in map votes.
- "1. I Don't Care". It's important. I believe that if a player doesn't want to vote, he has all the rights to hit '1' without even looking at the popup.
Popup screenshots

mc command
I'll just paste it here
Code: Select all
mc help:
> mc help
Shows this help message
> mc reload_mapcycle
Reloads mapcycle.json
> mc rebuild_mapcycle
Creates new mapcycle.json based on mapcycle.txt (mapcycle_default.txt)
> mc db show [<starting ID>]
Prints contents of database.sqlite3. If the starting ID is given, shows the
contents only beginning from this ID.
> mc db dump_html
Dumps contents of the database to an HTML page:
<mod folder>/logs/source-python/map_cycle/databasedump.html
> mc db dump_txt
Dumps contents of the database to a text file:
<mod folder>/logs/source-python/map_cycle/databasedump.txt
> mc db save
Saves current maps list from memory to the database
> mc db load
Reloads data from the database into memory
> mc db set_old <map filename>
Marks the given map as old (no NEW! postfix)
> mc db set_old_all
Marks all known maps as old (no NEW! postfix)
> mc db forget_map <map filename>
Removes the given map from the database, doesn't remove the map from the
mapcycle.
Map will be added to the database again if it's still in mapcycle.
> mc scan_maps_folder [<map prefix> ...]
Scans contents of ../maps folder and puts scanned maps in mapcycle.txt.
You can then convert that mapcycle.txt to mapcycle.json by typing
'mc rebuild_mapcycle'.
If map prefixes are given, only maps that start with that prefix will be added
to the list.
Example:
mc scan_maps_folder de_ cs_ gg_
Usage examples
First run instant start
Code: Select all
mc scan_maps_folder // Scan maps folder into mapcycle.txt
mc rebuild_mapcycle // Convert mapcycle.txt to mapcycle.json
mc reload_mapcycle // (optional - you can wait til changelevel or restart the plugin) Load mapcycle.json into memory
mc db save // (optional - you can wait til changelevel) Save the maps to the database
mc db set_old_all // (optional - you can wait 5 days) Strips NEW! flags from all your maps
Database print
Code: Select all
mc db show
prints something like this:
Installation
- Install ControlledCvars and SpamProofCommands packages
- Download the latest release of the plugin
- Extract contents of the sp-map-cycle-x.x.x directory to your mod folder
- Add the following line to autoexec.cfg:
sp plugin load map_cycle
Source.Python Admin integration
- Download the latest development snapshot of SPA Map Cycle
- Extract contents of the SPA-Map-Cycle-master directory to your mod folder
- Add the following line to autoexec.cfg:
admin plugin load map_cycle
Configuration
After first loading plugin will create config file called main.cfg in your cstrike/cfg/source-python/map_cycle folder. Go through it, you may want to disable logging, although I would be much happier if you provided log files when you ask something.
There's also a file called downloadlist.txt in cstrike/cfg/source-python/map_cycle folder. It's meant to hold paths to the sounds for this plugin.
mapcycle.json can also be found/created in cstrike/cfg/source-python/map_cycle folder.
Your own map names translations go to cstrike/resource/source-python/translations/map_cycle/map_names_server.ini. Use map_names.ini as a reference.
You can restrict map to some particular time interval:
Code: Select all
{
"filename": "cs_assault",
"timerestrict": "8:00,22:00"
},
- this way the map will only be playable from 8am to 10pm
Code: Select all
{
"filename": "cs_assault_night",
"timerestrict": "22:00,8:00"
},
- and this map will only be playable from 10pm to 8am
Feedback
Greatly appreciated. Exceptions, warnings and debug messages can be found in cstrike/logs/source-python