• “Just being a mediocre driver has never been my ambition. That's not my style” ― Michael Schumacher
  1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Dear Guest. Follow RaceDepartment on Twitter, Facebook, Instagram, Twitch, Steam and YouTube.

Kissmyrank - Local Assetto Corsa Server Plugin 0.8c

A self contained server plugin that can be used to auto-admin public servers

  1. Brioche
    Kissmyrank Assetto Corsa Server Plugin
    ---------------------------------------------
    Version: 0.8c
    Author: Brioche
    ---------------------------------------------
    Sim racing is all about realism but what is of realism when you can throw your car around the track like the ultimate apocalyptic Carmageddon and then just hit the respawn button like nothing really happened?
    Driving is all about respecting the car, loving it... ehrm... paying the bills, know what it can do and what it cannot do. But if you have ever been in the Assetto Corsa public servers you'll know that they tell a quite different story...
    Why don't drivers do the same kind of bullcrap on the real tracks? While some might argue that they actually do, it's quite clear that it all turns down to money.
    No one would buy or build a race car and give it to someone that destroys it one minute later.
    It's all about money... isn't it? The Kissmyrank Assetto Corsa Server Plugin replicates the same dynamics. Drivers have to pay for the damage that they cause to their car with the money that they win racing and competing with other drivers for the fastest times...
    ---------------------------------------------
    Disclaimer:
    Free use and redistribution. No warranty. Use at your own risk. Modification of the code requires the author's permission.
    ---------------------------------------------
    Requirements:
    This plugin runs locally and doesn't need any remote master server to operate.
    There are no requirements at all except having an Assetto Corsa Dedicated Server. All the data is saved in the folder where you run the plugin and the only connection required is the one with the Assetto Corsa dedicated server.
    ---------------------------------------------
    Features:
    This is a simple self-contained server plugin meant to promote knowledge of the gentlemen drivers' driving etiquette.
    It does this:
    1) By giving penalties to lapped drivers that ignore blue flags during the race for a prolonged time.
    2) By giving penalties to drivers that block hotlapping drivers when they are in the qualification outlap.
    3) By kicking drivers that are involved in too many collisions (per session and in general).
    4) By taking money from drivers that are involved in collisions (they have to pay for repairs).
    5) By fining drivers that are involved in the first collision of the race.
    6) By rewarding drivers that manage to qualify in the top 3 (when enough players are on the server).
    7) By rewarding drivers that finish the race.
    8) By rewarding drivers that improve over their qualifying position without touching the cars they pass.
    9) By rewarding drivers that are able to improve their times and set the fastest laps (race and leaderboard).
    This plugin doesn't do any kind of accident analysis. Money is taken from all the players involved in a collision as they all have to pay to repair their car.
    Additional penalties are given to:
    a) lapped cars that collide with lapping cars
    b) cars in the outlap that collide with hotlapping cars
    c) first collision of the race
    Additional features:
    - Ping limit and ping stability check.
    - Automatic restart of the race on first lap carnage
    - Skips race if there are not enough players
    - Pole announcement
    - Race winner announcement
    - First accident shame announcement
    - Fastest lap of the race announcement
    - Driving Standard (you can require times to be within a certain % of the leaderboard best)
    - Restrict players with high collision rates
    - Car Towing Cost
    - Cut Lines (custom line cutting and speed limits)
    - Track Rotation
    - Leaderboard
    - Web Stats Server
    - Race Results
    - Assetto Corsa Auth Support (Web Auth Server)
    - Auth Relay (to use external Auth like Minorating or Stracker)
    - UDP Relay (to chain other plugins)
    - Reserved Slots
    - Web Administrator Console (to manage the plugin and your Assetto Corsa server from your Web Browser)
    ---------------------------------------------
    Download: http://www.mediafire.com/?f7tn4k7zgog1b
    ---------------------------------------------
    Installation:
    Extract files to any path.
    ---------------------------------------------
    Runtime:
    Just launch the appropriate binary for your platform.
    ---------------------------------------------
    Automatic Configuration:
    Launch the plugin and run through the Setup Wizard.
    The Setup Wizard will set the most important settings for you. Once you're done, you can customize the gameplay experience by manually editing the config.json file.
    ----------------------------------------------
    Manual Configuration:
    If you wish to perform the first time configuration manually, copy config.default.json to config.json.
    Then edit config.json and:
    1) set "ac_server_plugin_local_port" to the value that you set in the Assetto Corsa server_cfg.ini under UDP_PLUGIN_LOCAL_PORT (e.g for UDP_PLUGIN_LOCAL_PORT=8004 set it to 8004).
    2) set "ac_server_plugin_address_port" according to the value that you set in server_cfg.ini for UDP_PLUGIN_ADDRESS (e.g for UDP_PLUGIN_ADDRESS=127.0.0.1:12000 set the "ac_server_plugin_address_port" to 12000). Please note that the IP that you should use in the server_cfg.ini is the one of the machine where you run ac_kissmyrank binary.
    3) set "ac_server_ip" to the IP address of your Assetto Corsa Server (please ensure that you use the same interface that you used for the plugin).
    4) set "ac_server_http_port" to match the Assetto Corsa server_cfg.ini HTTP_PORT setting.
    5) set "max_players" according to the number of slots on your server.
    ---------------------------------------------
    Commands:
    You can type commands in the Kissmyrank Plugin Console. You can use tab to autocomplete. Hit tab twice or write help for a list of commands.
    Kissmyrank Management Commands: help, clear, config_get, config_set, backup_list, backup_restore, save, exit");
    ~ help: shows a full list of commands (you can also get the full list by pressing tab twice)
    ~ help config_get: shows help for the config_get command
    ~ json_verify {"PRACTICE": "remove", "QUALIFY": {"TIME": 10}, "RACE": {"LAPS": 10}}: verifies if the provided string is valid JSON to be used for any command that requires this kind of format (e.g. track_rotation_edit)
    ~ config_get max_ping: gets the current value of the max_ping configuration entry
    ~ config_set id|value: sets the config_id config.json entry to value (please note how the value after | must be in the exact same format that you would get using the config_get command)
    ~ config_set max_ping|300: sets max_ping to 300 and saves the config.json
    ~ config_set currency_symbol|"$": sets the currency_symbol to "$" and saves the config.json
    ~ backup_list: lists the available backup dates to be used with the backup_restore command
    ~ backup_create: creates a new backup
    ~ backup_restore 2017-11-24_165120: restores the backup with id 2017-11-24_165120 and exits the plugin. You will have to relaunch the plugin after the restore is complete
    ~ database_sharing_active_connections_list: shows a list of the active Database Sharing connections
    ~ database_sharing_overwrite_local_data_with_remote: overwrites the local database with the remote database (warning there is no coming back, you'll lose all changes that were not saved). This can be useful to resynch plugins without restarting it. Use only as last resort
    ~ refresh: reinitializes session and connections (warning, if you do this during a race, all players will be reloaded and the session stats will be gone)
    ~ save: saves all the data in memory to files
    ~ exit: quits and saves the stats
    Server Admin Commands
    ~ admin_next_session: skips to next session (e.g. qualify->race)
    ~ admin_restart_session: restart the current session (e.g. restarts the race)
    ~ admin_send_command /ballast 0 100: sends the "/ballast 0 100" command to the Assetto Corsa server just like if you typed it in the chat
    ~ admin_say hello: broadcast "hello" to all players
    ~ player_list: gives a list of the online players (car_id:name:guid)
    ~ player_name 0: returns the player name associated with the slot number 0
    ~ player_kick 0: kicks the player associated with the slot number 0
    ~ player_temporary_ban 0|60: bans the player in slot number 0 for 60 minutes
    ~ player_temporary_ban_guid 12345678901234567|60: bans the player with GUID 12345678901234567 for 60 minutes
    ~ player_ban_list: lists all the banned players
    ~ player_unban 12345678901234567: unbans the player with GUID 12345678901234567
    ~ reserved_slots_list: shows a list of the reserved slots
    ~ reserved_slots_add 12345678901234567: adds a reserved slot for steam GUID 12345678901234567
    ~ reserved_slots_remove 1: removes the reserved slots that has id = 1 in the output of the reserved_slots_list command
    ~ reserved_slots_announce: announces the reserved slots list to the Kissmyrank Master server (announcement is automatic so this command is not really needed but you can force the announcement to troubleshoot problems without restarting the plugin)
    Stats Management Commands:
    ~ driver_get_guid Rockfeller: shows the GUID of "Rockfeller" (case sensitive)
    ~ driver_reset_money 12345678901234567: resets the money for Steam GUID 12345678901234567
    ~ driver_reset_times 12345678901234567: clears all the times for Steam GUID 12345678901234567
    ~ driver_reset_driving_stats 12345678901234567: clears the driving stats (km and collisions) for GUID 12345678901234567
    Track Management Commands:
    ~ track_get_length: returns the current track length in meters
    ~ track_set_length 5422: sets the current track length to 5422m
    ~ track_get_name: returns the name of the current track
    ~ track_set_name Monza: sets the current track human friendly name to Monza
    ~ pit_origin_remove 6: unsets the pit origin for slot id 6. This can help when for whatever reason the pit origin is not correct. Kissmyrank will then rebuild the pit origin in time (it might require a few sessions).
    Track Rotation Commands:
    ~ track_rotation_next_track: switches to the next track in the server rotation
    ~ track_rotation_list: shows a list of all the tracks in the rotation in the id|track|config|races format
    ~ track_rotation_current_track: shows the current track in the rotation
    ~ track_rotation_rotate_to 0: rotates to the track with id 0
    ~ track_rotation_vote_reset: cancels the current track rotation vote
    ~ track_rotation_get_races: shows the amount of races set for the current track in the rotation
    ~ track_rotation_set_races 10: sets to 10 the amount of races for the current track in the rotation
    ~ track_rotation_add vallelunga|extended_circuit|3|{"PRACTICE": "remove", "QUALIFY": {"TIME": 10}, "RACE": {"LAPS": 10}}: adds {track: "vallelunga", config: "extended_circuit", "races": 3, "ini_options": {"PRACTICE": "remove", "QUALIFY": {"TIME": 10}, "RACE": {"LAPS": 10}}} to the track list
    ~ track_rotation_edit 1|vallelunga|extended_circuit|3|{"PRACTICE": "remove", "QUALIFY": {"TIME": 10}, "RACE": {"LAPS": 10}}: sets track 1 to {track: "vallelunga", config: "extended_circuit", "races": 3, "ini_options": {"PRACTICE": "remove", "QUALIFY": {"TIME": 10}, "RACE": {"LAPS": 10}}}
    ~ track_rotation_remove 0: removes the track with id 0 from the rotation
    ~ track_rotation_save: saves the current track list to the config.json making it permanent (required if you want the new track list to stay if you restart the plugin)
    Cut Lines Commands:
    ~ cut_line_list: shows a list of the cut_lines defined for the current track
    ~ cut_line_remove 1: removes the cut line that has id 1 in the output of the cut_line_list_command
    ~ cut_line_edit 1|pit entry speed limit line|80|0.6|0|0|0: updates the cut_line with id 1 in the cut_line_list with name=pit entry speed limit line, max_speed_kmh=80, penalty_cost=0.6, outlap_only = 0, qualify_only= 0,race_only=0
    ~ cut_line_drawer_begin: starts a new cut_line sketch
    ~ cut_line_drawer_set_first_point 6: sets the first point of the cut line sketch on the current position of the car in the slot 6 (use player_list to get a list of the players slots)
    ~ cut_line_drawer_set_second_point 6: sets the second point of the cut line sketch on the current position of the car in the slot 6 (use player_list to get a list of the players slots)
    ~ cut_line_drawer_set_name pit entry speed limit line: set the name of the cut line sketch to pit entry
    ~ cut_line_drawer_set_max_speed 80: sets the max speed of the cut line sketch to 80km/h
    ~ cut_line_drawer_set_penalty_cost 0.6: sets the penalty for the cut line sketch to 600€
    ~ cut_line_drawer_toggle_outlap_only: toggles the outlap only flag for the cut line sketch
    ~ cut_line_drawer_toggle_qualify_only: toggles the qualify only flag for the cut line sketch
    ~ cut_line_drawer_toggle_race_only: toggles the qualify only flag for the cut line sketch
    ~ cut_line_drawer_save: saves the current sketch to a permanent cut line
    --------------------------------------------
    Cut Lines
    The Cut Lines Feature allows you to define lines on the track.
    These lines can be used:
    - to give penalty to players that cross the line
    - to set a speed limit in a certain area of the track
    - to prevent cutting in certain areas
    Each cut line has the following properties:
    - a name (pit entry speed limit line, pit exit line, your custom line)
    - a speed limit over which to apply the penalty
    - the penalty cost (e.g. how much a driver is charged for crossing it at a speed that is higher than the defined speed)
    - the coordinates of the first point
    - the coordinates of the second point
    - a outlap only flag (e.g if the cut line should be applied only if the player is in the outlap)
    - a qualify only flag (e.g. if the cut line should be applied only during the qualify session)
    - a race only flag (e.g if the cut line should be applied only during the race session)
    You can define a cut line using your car as a reference. Here is how you do it:
    Scenario 1: Pit exit line ( pictures can be found here: http://www.racedepartment.com/threa...orsa-server-plugin.142199/page-6#post-2640347 )
    1) Use the player_list command to get the slot id of the car that you wish to use to define the line (let's assume 6 for the purpose of this guide)
    2) Start the cut line sketch by writing in the console the "cut_line_drawer_begin" command
    3) Set the line name with "cut_line_drawer_set_name pit exit line $1" (most pit exit lines are not straight so you have to define it as a multi line, appending $1, $2, $3 to the line name is the way to tell the plugin that they are all part of the same line)
    4) Set the max speed with "cut_line_drawer_set_max_speed 0" (the 0 tells the plugin that crossing the pit exit line at any speed greater than 0 will give a penalty which is exactly what we want)
    5) Set the penalty cost of the cut with "cut_line_drawer_set_penalty_cost 0.6" (anyone that will cross this line will pay 600€)
    6) Enable the outlap only flag with "cut_line_drawer_toggle_outlap_only" (this applies the penalty only to those that are in the outlap)
    7) Drive your car to the start of the pit exit line segment that you wish to define. Place it exactly where the line begins.
    8) Set the first point of the line with the "cut_line_drawer_set_first_point 6" command (where 6 is your car slot id as determined on point 1)
    9) Drive your car to the end of the pit exit line segment that you wish to define
    10) Set the second point of the line with the "cut_line_drawer_set_second_point 6"
    11) Save the line with the "cut_line_drawer_save"
    12) Repeat points 2-11 to define other segments of the pit exit line as needed (e.g. pit exit line$2, pit exit line$3) and so on.
    Scenario 2: Pit entry speed limit line (for pit lane speeding)
    1) Use the player_list command to get the slot id of the car that you wish to use to define the line (let's assume 6 for the purpose of this guide)
    2) Start the cut line sketch by writing in the console the "cut_line_drawer_begin" command
    3) Set the line name with "cut_line_drawer_set_name pit entry speed limit line" (no need for $ this time as this is going to be a single line)
    4) Set the max speed with "cut_line_drawer_set_max_speed 80" (the 80 tells the plugin that crossing the pit entry speed limit line at any speed greater than 80 km/h will give a penalty which is exactly what we want)
    5) Set the penalty cost of the cut with "cut_line_drawer_set_penalty_cost 0.6" (anyone that will break the speed limit will pay 600€)
    6) Drive your car to the left end of the pit entry speed limit line. Place it as much to the left as possible.
    7) Set the first point of the line with the "cut_line_drawer_set_first_point 6" command (where 6 is your car slot id as determined on point 1)
    8) Drive your car to the right end of the pit entry speed limit line segment that you wish to define
    9) Set the second point of the line with the "cut_line_drawer_set_second_point 6"
    10) Save the line with the "cut_line_drawer_save"
    Scenario 3: Your custom cut line (for the sake of this tutorial let's define a qualify only cut for the "Prima Variante" at Monza)
    1) Use the player_list command to get the slot id of the car that you wish to use to define the line (let's assume 6 for the purpose of this guide)
    2) Start the cut line sketch by writing in the console the "cut_line_drawer_begin" command
    3) Set the line name with "cut_line_drawer_set_name prima variante$1" ($1 is only needed if you need it to be multi-line)
    4) Set the max speed with "cut_line_drawer_set_max_speed 120" (people cutting this line at more than 120km/h will be issued a penalty)
    5) Set the penalty cost of the cut with "cut_line_drawer_set_penalty_cost 0.6" (anyone that will cross this line above the defined speed will pay 600€)
    6) Optional (if you wish the penalty to only apply in qualify or in the race use the "cut_line_drawer_toggle_qualify_only" or the "cut_line_drawer_toggle_race_only" command
    7) Drive your car to the first point of the line that you wish to define (for the "Prima Variante" we could for example cover track re-entry on the part that leads to Biassono to check track re-entry speed)
    8) Set the first point of the line with the "cut_line_drawer_set_first_point 6" command (where 6 is your car slot id as determined on point 1)
    9) Drive your car to the end of the segment that you wish to define
    10) Set the second point of the line with the "cut_line_drawer_set_second_point 6"
    11) Save the line with the "cut_line_drawer_save"
    12) Repeat points 2-11 to define other segments as needed (e.g. prima variante$2, prima variante$3) and so on.
    You can list the cut lines for the current track with the cut_line_list command.
    After you defined a cut line you can edit some of its settings with the cut_line_edit command.
    Once defined you can save your work by typing save in the console.
    Cut lines are effective as soon as you define them. You can disable the feature altogether by typing config_set cut_lines_enabled|0 and enable them back with config_set cut_lines_enabled|1.
    The included tracks.json contains only a few cut lines that I defined while testing. Most tracks do not have any cut line defined so, if you want them, you'll have to define them yourself.
    If you have defined reliable cut lines, feel free to share the tracks.json file with me so that I can update the main package and share appropriate cut lines to new users of the Kissmyrank plugin.
    --------------------------------------------
    Player Chat Commands
    ~ kmr help: shows a list of commands
    ~ kmr leaderboard: shows the fastest time on the server with the car that the player is driving
    ~ kmr level: shows the player level in the laptime challenge (if enabled)
    ~ kmr money: shows the amount of money that a player has
    ~ kmr mybest: shows the driver personal best with the car that the player is driving
    ~ kmr next_track: shows the next track in the server rotation (will only appear if the track rotation is active)
    ~ kmr rules: shows the server rules
    ~ kmr toggle_notifications: toggles notifications while driving (rules will still apply but the driver will not be notified about damage, penalty and blue flags)
    ~ kmr vote_track: vote for track change (will only appear if the rotation is active and track_rotation_vote_min_percent is not 0)
    ---------------------------------------------
    Setup Notes:
    - Under Windows please be sure that Windows Firewall allows incoming connections to the plugin (they are required to communicate with the Assetto Corsa dedicated server).
    - Drivers' Account balance is saved to rank.json (it will be created the first time stats needs to be saved). You can use the reset_money command to unban a player.
    - If you know how to, feel free to edit and customize the index.html template but be careful not to break its runtime. The donate button is for those that want to support all the work I do on the plugin. Feel free to remove it if it disturbs you.
    - The plugin has a lot of options, but as with all things, be careful when changing the configuration values.

    Gameplay Notes:
    - Race Entry Fee was introduced to promote responsible behavior and to encourage drivers to finish the race. Basically a driver pays to enter a race session and can make up for that amount only by finishing the race and cleanly beating another driver. Finishing the race does indeed pay.
    - Sponsor fee and the race entry fee contribute to the total competition prize that is distributed among drivers that finish the race. Sponsor will pay more for longer races so that prices will be higher depending on the length of the race.
    - Damage cost goes with the square of the velocity just like in real life.
    - Since the plugin doesn't perform any kind of accident analysis it can occasionally happen that good drivers get penalized for accidents they didn't cause (insurance won't pay except for some cases). However good drivers are likely to finish races and earn money while the bad ones quickly go broke and get kicked. While I can't guarantee that this will work, I tested this plugin over a period of time and it proved effective to promote the right behavior.
    - Prizes are paid to all those that pay the entry fee (e.g. are present at the beginning of the race) and that are not lapped more than twice.
    - The minimum driving standard is a tool designed to control the quality of the drivers that join the server. Basically if you set it to 110% of the fastest lap, drivers that (in the specified amount of valid laps) haven't been able to post a time that is within 110% of the fastest time set with the very same car will not be able to join the server. We can safely assume that if 12 valid lap a member hasn't been able to post a valid time he's probably going to need a bit of practice.
    - The minimum driving standard is fully customizable. By default it only kicks in if more than 12 players are on the server but you can change it according to your wish (always on, always off). This setting is designed to make sure that the server drivers quality doesn't deteriorate as the server gets full while not killing the server population when the server is empty. Cars that were not able to set a decent time, can be given a second chance to rejoin the server over time. For more check the configuration file.
    - Laptime Challenge allows new drivers to get some money by beating the time challenge and motivates them to set times. Laptime Challenge is fully customizable (prizes, levels etc.) and can be turned off altogether by setting the laptime_challenge_base_prize to 0.
    - Automatic race restart on first lap collision carnage can be tweaked in the options. See config.json for more (set "first_lap_max_collision_player average" to 0 to disable the feature altogether).
    - On a regular racing day you're always driving to the pits. If you park the car, someone will have to come and tow it, unless your pit crew is near enough to push it. config.json "car_towing_cost" allows you to set how much a driver will pay in this case (e.g. going to pits via the menu from more than what your pit crew muscles allow).
    - You can prevent drivers with high collision rates from joining the server. To do this, you can set the max_collisions_per_100km to anything you want (set to 0 to disable the feature altogether). max_collision_per_100km_min_distance is the driven distance over which this setting will apply. You can also set max_collisions_per_100km_recharge_hours if you wish to give drivers a second chance in time (set to 0 if you don't want to give a second chance).

    Assetto Corsa Auth Notes:
    - The Kissmyrank Plugin supports blocking bad drivers before they join the server via the Assetto Corsa Server AUTH. The Plugin Auth Server requires proper AUTH_PLUGIN_ADDRESS setting in the Assetto Corsa server_cfg.ini so that the Assetto Corsa Server can communicate with it. The proper value is written in the Kissmyrank Console when you launch the plugin. If you wish to also use a separate auth (e.g. another Kissmyrank Server Plugin, Minorating, Stracker etc.) you can edit the config.json "web_auth_relay_to" list. You can set as many as you wish and create a safe area where bad drivers are blocked from multiple sources. Driver that are banned in any of the specified systems will not be allowed to join the server.
    - The Kissmyrank Plugin supports blocking bad drivers via third-party services using the AUTH relay feature (see config.json entry 16).

    UDP Relay Notes:
    - The UDP Relay Feature allows you to use other plugins by relaying information coming from the Assetto Corsa server in the following way: Assetto Corsa Saver <-> Kissmyrank Plugin <-> Other plugins. Once you activated the plugin by adding the third-party plugin ip:port to the "udp_relay_to" config.json entry, you need to configure the other plugin as if the Kissmyrank Plugin were the Assetto Corsa server. This is an experimental feature. Please let me know if there are problems.
    - To use Minorating via the Kissmyrank UDP Relay you need to add the following lines to the Minorating config: <add key="ac_server_port" value="12000" /><add key="plugin_port" value="10006" /> where 12000 is the port number that you used for the KMR "ac_server_plugin_address_port" and 10006 is the port number to use after the semicolon in the "udp_relay_to" list (e.g. replace UDP_PLUGIN_ADDRESS_1 with 127.0.0.1:10006).
    - To use Stracker via the Kissmyrank UDP Relay you can create a copy of your Assetto Corsa server_cfg.ini (e.g. server_cfg_stracker.ini) and edit it by setting UDP_PLUGIN_LOCAL_PORT=12000 and UDP_PLUGIN_ADDRESS=127.0.0.1:10007 where 12000 is the port number that you used for the KMR "ac_server_plugin_address_port" and 127.0.0.1:10006 is the address to use in the "udp_relay_to" list (e.g. replace UDP_PLUGIN_ADDRESS_2 with 127.0.0.1:10007). You then need to edit the Stracker cfg and set "Ac_server_cfg_ini" to the edited server_cfg_stracker.ini path (e.g. Ac_server_cfg_ini =/opt/ac_server/cfg/server_cfg_stracker.ini).

    Ping Limit Notes:
    - The Ping Limit Feature allows you to check the drivers' connection and verify their connection stability. Use the "max_ping" value to set the upper limit and the "max_ping_deviation" to control the connection stability. Assetto Corsa network code can work quite well with high pings as long as they are stable, so I recommend not to use values that are too restrictive as this might reduce the population of your server.

    Track Rotation Notes:
    - The Track Rotation Feature requires that you fill the correct path settings in the config.json file. If the settings are not correct, the plugin will notify you that the track rotation is disabled (in this case you have to manually launch the server). You can specify how many races you want to happen before each rotation and if you wish the rotation to occur when drivers are on the server. When the race limit is reached, players will be booted and the server track will change by terminating and relaunching your server. You can also manually trigger the track rotation by using the "next_track" console command. Do not use the same track twice.
    - When you use the Track Rotation feature the Kissmyrank Plugin will start the server for you using the specified executable. The plugin will not work if the server is already running. Also notice that when you close the plugin the server will also be closed so please wait for races to be over before you do that.
    - The ini_options track rotation config entry defined for each track lets you change server_cfg.ini entries before the track rotates. You could for example change the server name, the grip, the server password, the qualify time, the amount of laps, the weather or anything that comes to your mind.
    - The ini_options need to includes the entries to set for each server_cfg.ini section. Let's say that we want to change the server name to "My Awesome Imola Server", the qualify time to 30 minutes, remove the practice session and set the start grip to 97% with a session grip transfer of 75%. Normally to do this we would open the file and change the NAME entry of the [SERVER] section, the TIME entry of the [QUALIFY] section, the SESSION_START and SESSION_TRANSFER of the [DYNAMIC_TRACK] as well as removing the [PRACTICE] section. We then need to set ini_options: {"SERVER": {"NAME": "My Awesome Imola Server"}, "QUALIFY": {"TIME": 30}, "PRACTICE": "remote", "DYNAMIC_TRACK": {"SESSION_START": 97, "SESSION_TRANSFER": 75}} and we're done.
    - ini_options remain between one rotation and another so the server name will remain "My Awesome Imola Server" until you change it again. If a session was removed and you wish to add it back, it's enough to specify the TIME (qualify and practice) or the LAPS (race) value. It's wise to limit the amount of changes to the ones that are strictly necessary.
    - The json_verify command is your friend to see if your entry is valid. To visualize an entry you can visit: http://jsonparseronline.com/
    - The kmr vote_track command allows players to vote for one of the tracks in the current rotation. Admins can reset the vote (before the track rotates) using the track_rotation_vote_reset console command. track_rotation_vote_min_votes can be used to set a minimum amount of votes required for the track change to start (useful if you don't want lonely players to be able to change the track). track_rotation_vote_min_percent allows you to set the % of players that have to cast a vote before the track change occurs. When a sufficient number of votes have been casted, the track will switch to the most voted one.

    Launcher Multiplayer Mod Notes:
    - The Kissmyrank Assetto Corsa Multiplayer Launcher Mod allows you to auto-reconnect on track change via the use of the Kissmyrank Master Server. It also allows you to join a full server as soon as a slot opens up ( demo:
    , download: http://www.mediafire.com/?f7tn4k7zgog1b ).
    - The reserved slot feature requires the Kissmyrank Assetto Corsa Multiplayer Launcher v0.1b or greater. Keep in mind that this feature might kick players to make room for VIP players (it kicks drivers starting from the bottom of the leaderboard). This is the only way for you to make it on your server if it's full. For this to work, you need to define the "reserved_slots_guid_list" and "reserved_slots_access_key" in the config.json and type the access key in the Kissmyrank Assetto Corsa Multiplayer Launcher Mod (input box will appear near the server ping and help buttons). If any of these is not set, the feature will be disabled for safety.
    - reserved_slots_boot_players_at_race allows you to control if you want the Reserved Slot Fature to kick players during the race (if you set this to 0, VIP players that want to join during a race, will have to wait for a slot to natrually open up or for the next session).

    Database Sharing Notes:
    - With the Local Database Sharing feature you can share the rank, tracks and leaderboard database between different instances of the plugin running on the same machine. To use this feature you just need to set "database_sharing_unique_name" to a unique name for each plugin and then set "database_sharing_local_group_port" in the config.json to the same value for all the instances that will be sharing the database (leave the other entries alone as those are only required for remote sharing). You can create separate groups by picking a different port for each group (e.g. 4567 for group 1, 4568 for group 2 and so on). "database_sharing_unique_name" will help you to identify plugins in the Kissmyrank log so make sure you pick a different one for each.
    - With the Remote Database Sharing feature you can connect instances that run on a different machine. For this you need to set "database_sharing_unique_name", "database_sharing_remote_listen_port", "database_sharing_remote_secret_key", "database_sharing_remote_connect_to_addresses" as described in the config.json. Remote database sharing is not as reliable as Local Sharing. Connection might drop and there might be lags. The plugin will try to recover whenever possible but better to use Local Database Sharing whenever it's possible.
    - When using either Local or Remote Database Sharing, the plugin will use the database of the first member to start. When the databases are in sync, you can then turn off any group member and restart it at any time. The other plugins will keep on updating the shared database and send it to the offline member the next time that it starts.
    - Let's say that you want to share the database between 3 plugins (A,B and C) and that you set database_sharing_unique_name to "plugin_a", "plugin_b", "plugin_c" respectively. Let's say that you can only connect A<->B and B<->C but you can't connect A with C directly. After properly setting all the other keys for (A<->B and B<->C), you then edit plugin_b config.json and set database_sharing_relay_for_names to ["plugin_a", "plugin_b"]. This will tell plugin B to relay database updates to the other plugins allowing you to do A<->B<->C. Keep in mind that in this case if you take down B, you have to also take down A and C or the synchronization might not fully apply. This feature works for both local and remote connections as long as you set the unique name. This feature is to relay information to lonely plugins. Be careful not to create double links between plugins or you might get double updates.
    - Pay attention at the red warning messages when using Database Sharing. They will notify if anything is wrong and help you prevent any problem. Use the database_sharing_active_connections_list command to get a list of the active connections at any time. The database_sharing_overwrite_local_data_with_remote can be used to force a synch if it's lost. Keep in mind that any change that is not already on the remote database might get lost if you run this command.

    Web Admin Console:
    - The Kissmyrank Web Admin Console is located at http://yourserverip/kissmyrank_admin (same port as the web stats).
    - The password needs to be at least 12 characters long.
    - To login type "login password" (e.g. "login yourcomplexpassword").

    General Notes:
    - This plugin makes a very rough estimate of the track length. I recommend you use the set_track_length command to update the length if it's not accurate.
    - Pit origin database might require a little to build up. This might lead to a few towing cost anomalies in the first period.
    - The proper way to quit (so that all the data is saved) is by typing "exit" in the console.
    - The refresh command will make you lose any unsaved change. Type save first if you wish to save.
    - The config_set command allows you to edit the config.json at runtime. You need to specify the argument in the config_id|value format where value is exactly what would appear in the config.json file for that config_id (e.g. config_set currency_symbol|"€" or config_set max_ping|300). Please notice that, for the value, double-quotes need to be present whenever they are present in the config.json as shown in the examples. On the contrary, the config_id never needs to be enclosed within double-quotes. The changes you make are permanently saved to config.json. In the backup folder you can find older copies of config.json (a backup is made whenever you start the plugin). Some values might require a plugin restart to apply.
    ---------------------------------------------
    Troubleshooting:
    Timeout errors are an indication of a communication problem with the Assetto Corsa server or that max_players is not matching the number of slots on your server. Please check your configuration.
    If you get the "In use" error it means that the plugin is already launched or that the port is used by another service.
    Backup the rank.json file from time to time as this tool is still being developed.
    I suggest to always use the available console commands. Never edit the json files unless you know what you're doing. If you do a mistake stats might reset.
    If you get any issue, try the default configuration values first and doublecheck the setup.
    If you're running Linux and the web server doesn't start, it's because process without root privileges cannot bind ports below 1024. In this case you can use iptables to create a redirection using the command "sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080" where 8080 would be the plugin "web_stats_server_port".
    If you're running Windows and the plugin gets stuck until a keypress, it might be because "Quick Edit Mode" is turned on. When you accidentally click or drag on the console text, Windows might pause the execution until you quit the selection mode with a right-click. You can disable "Quick Edit Mode" by right-clicking the top bar and selecting "Properties".
    ---------------------------------------------
    Changelog
    v0.1 Fixed an issue with ranks not saving on exit. Updated configuration entries.
    v0.1a New list_players command. Added console logging for pole and race winner.
    v0.2 Switched to money for the sake of better realism. This better justifies both cars being penalized in a collision as they have to pay to repair the car. Collisions now cost 1000€ each. This opens many possibilities and could be used for other rating systems too.
    v0.2a Race entry fee. Entering a race now costs money. Set to 0 to disable.
    v0.2b Fixed a few minor things with rank auto-save, kick messages etc.. Changed default warned_car_grace cfg value.
    v0.3 Increased default car update rate. Lapping and hotlapping protection is now more reliable. Protection area is now expressed in meters. Drivers now have to also pay for collisions with the environment. Collisions repair cost is now gauged against the relative velocity. Collision base cost for both environment and car collisions can be set in the config. You can now change the currency symbol and the thousands separator. Prizes are now related to the entry and sponsor fees. Added support for the practice session. Better race result calculation. Added more logging in the console. This is a major update, please make sure you use the latest config.json file.
    v0.3a Fixed a silly issue with paths that would crash the plugin on start.
    v0.3b Fixed an issue with auto-kick.
    v0.4 Added Leaderboard (times are saved per car and per track). Added a Web Stats Server (http://yourserverip/) that allows everyone to access the Leaderboard. Default port is 80. You can change port by editing config.json. Added Chat commands: now players can request their stats, toggle notifications etc.. Type kmr help in game for a list of commands. Penalty cost can now be set in the config. Lapping and hotlapping cars are now going to be charged for damage on their car (this is more fair as they already get the protection and the offending car is fined with the additional penalty, thanks AJ Clarke for the feedback). Fixed an issue with auto-kick on join not working properly. Race prize is now also based on race length. Added fastest lap announcement in race. Added fastest lap prize (in race and overall). You can now see which car was driven by the player that took the pole or set the fastest lap. Added Server Minimum Driving Requirement Standard: this allows to filter out players that are not capable to set a time within x% (default 110%) of the fastest Leaderboard lap (with the same car) in a certain amount of valid laps. This feature is fully customizable: you can set it to only work when the server is getting full and control if players should be given a second chance over time. Set minimum_driving_standard to 0 to disable the feature altogether. Added new console commands (reload, save, get_track_length, set_track_length, get_track_name, set_track_name, get_money, reset_money) for controlling the plugin without restart. Better handling of track change, server name change and server restart (just type "save" and then "reload" if needed and the plugin will automatically parse the new server configuration). Many other improvements and fixes. This is a major update, replace all the files in the folder with the new ones (including config.json and tracks.json) and then edit the new configuration as you see fit.
    v0.4a Fixed missing AC server name on the Web Stats Page.
    v0.4b Added Recent Activity tab to the Web Stats. Laptime Challenge (gives reward to players as they get faster and level up). This is useful to motivate players to set times. Reward can be set in the options (set to 0 to disable the feature altogether). Fixed an issue with prizes not being assigned to drivers that disconnect immediately on race finish.
    v0.4c Implemented support for the Assetto Corsa Auth. The Kissmyrank Plugin can now poll external auth servers via its auth relay feature (e.g. Minorating, Stracker, another Kissmyrank Plugin etc., see config.json for more). Fixed an issue with incorrect damage calculation. Added support for time based races. Fixed incorrect race prize calculation. config.json has changed. Please update the old file. Thanks to Bruno32600 for all the feedback so far.
    v0.4d Fixed wrong AUTH_PLUGIN_ADDRESS tip on plugin start.
    v0.4e Fixed car_id is not defined error. Added configuration options to control the race auto-restart depending on the first lap collision count (see config.json for more). config.json was updated. Please overwrite the old file.
    v0.5 New UDP Relay Feature that allows to relay the information coming from the Assetto Corsa server to other UDP plugins. It works like AC Server <-> Kissmyrank Plugin <-> Other plugins (e.g Minorating, Stracker etc.). In order for this to work you need to set the other plugins as if the Kissmyrank plugin were the AC Server (have a look at the config for more). config.json was updated. Please overwrite the old file.
    v0.5a Fixed multiple auto-restarts on first lap carnage.
    v0.5b New Ping Limit: you can configure "max_ping" and "max_ping_deviation" limits, as well as the ping check interval (amount of time between two consecutive measurements). Added "race_min_players" value to the config. Collision chat notifications now include the name of the other driver. config.json was changed. Update accordingly and don't forget to configure the proper "ac_server_http_port" so that it matches your server_cfg.ini HTTP_PORT.
    v0.5c Fixed car check when the car is not connected. Fixed UDP Relay not working properly. Other improvements and fixes. Thanks to IZI for helping with the tests.
    v0.6 New Track rotation (see config for the options and the readme for more). If you use the Track Rotation feature, the Kissmyrank Plugin will launch the server (do not launch the server manually). Join queue and auto-rejoin on track rotation are available via the Kissmyrank Assetto Corsa Multiplayer Launcher Mod. config.json was updated. Added File Backup on start. config.json has changed. Please overwrite the old file and edit the configuration anew.
    v0.6a Added track_rotation_max_players (set to 0 if you wish to only rotate the next time that the server is empty, 99 or any number greater than the number of slots to rotate at any time). warned_car_grace is now in expressed in seconds (update your config accordingly). Added session recovery if the new session packet gets lost (for qualify and time based races). Fixed refreshing loop. config.json was updated. Please update your config.
    v0.6b Fixed player list not being reset on track rotation.
    v0.6c New First Launch Setup Wizard to facilitate the first time setup. Other improvements and fixes.
    v0.6d Fixed rotation doesn't work as expected when config is specified. Fixed unexpected server termination when track rotation is active. Optimized players connection handler. Added 900ms timeout on auth relay not to delay the join process too much. Other improvements and fixes.
    v0.6e Improved configuration check for directories and files. Better handling of Assetto Corsa Server launch failures. Improved Setup Wizard input validation.
    v0.6f New Startup Port Check (to prevent accidentally running the plugin twice or running the track rotation with an external instance of acServer already running). If config.json is broken you will now receive a note allowing you to fix the config before it's overwritten. Improved handling of the Assetto Corsa Server exit codes.
    v0.6g Fixed an error with UDP Relay not starting due to recent changes. New track_list, current_track, track_rotate_to, track_get_races, track_set_races, add_track, edit_track, remove_track, save_track_list, config_set console commands. Added Startup Backup of config.json (since now you can permanently update the config at runtime, you might need a backup if you want to revert some edits).
    v0.6h New Car Towing Cost. On a regular racing day, you're always driving to the pits. If you park the car, someone will have to come and tow it unless your pit crew is near enough to push it. If "car_towing_cost" is set and you go back to pits without driving, you'll have to pay the car towing fee (set "car_towing_cost" to 0 to disable). This feature should allow for better immersion for those who like to have it on their servers. Added configuration for the clean gain reward (previously it was hardcoded, set "race_sponsor_clean_gain_reward" to 0 to disable the feature altogether). Fixed setup wizard not behaving properly on the first answer. Private/public net range checks for the setup wizard if you wish to try to use the plugin remotely over the Internet. Other minor fixes. Changed the order of the default config entries for less confusion on future updates (this is the last time that the order should change, so I recommend to generate the config anew. It will be easier for you to update and maintain it in the future. If you already have a config and you don't want to create a new one, just add the new options 32, 33, 54 at the bottom of your current config.json. Please be sure that you add a comma after the last entry of your current config.json before you add the new lines).
    0.7 New Cut Lines. You can now define cut lines on the track and give penalty to players that cross them (any speed or speed limit). Creating a cut line is easy. All you have to do is just parking your car on the two ends of the line and run Kissmyrank console commands. Each cut line is fully customizable meaning that you can assign a penalty, a max speed in km/h, outlap only, qualify only and race only flags (please check the readme for more). Special cut lines can be defined for pit entry speed limit line (aka pit lane speeding penalty) and pit exit line. You can disable line cutting detection using the "cut_lines_enabled" config.json entry if you don't want to use the feature. New Web Results (it shows a log of the last 30 sessions on the Web Stats page). You can decide how many sessions to keep. New Backup feature to automatically restore the backups in the backup folder. Better detection of corrupt files. New reserved slots feature. If the server is full, the Kissmyrank plugin will attempt to make room for the selected GUIDs (requires the Kissmyrank Multiplayer Launcher Mod v0.1b+). Improved: towing cost now depends on the distance. New: money penalty instead of kick for hotlapping/lapping protection (set the penalty cost to 0 if you wish to use the old kick system in this case). You can set different punishment for quali and race. Improved: reorganized all the commands. Improved: pit origin is now saved to tracks.json (the database will need a while to build up). New total collisions and driven distance are now logged per player and can be seen in the web stats. New commands to reset player stats and times if something goes wrong. Other improvement and fixes. This is a major update which will partly modify the json file structure. Backup your old folder before updating in case you need to recover. Clear your backup folder as the backup system has now changed. Do not overwrite your current tracks.json with the new one right away. Run the new plugin once and type "save" in the console. This will move the leaderboard from tracks.json to leaderboard.json. After that you can exit and overwrite tracks.json with the new one. Update config.json entries from 54 to 61 (these are new and are required to run the new version of the plugin).
    v0.7a Disabled memory monitor by default (since it requires libc6 2.14+ that is not available in some older versions of Linux) and added entry 62 to config.json to turn the feature on and off.
    v0.7b Fixed Web Stats driver list not showing total collisions if the collision number is zero. Changed collisions per km to collisions per 100km for better readability.
    v0.7c Added backup_list, backup_create and backup_restore commands.
    v0.7d Fixed driven distance displaying with the wrong amount of decimal digits in the Web Stats. Added Best Lap to the Web Stats race results. Improved Web Stats results visualization when no valid lap was recorded. Fixed Web Stats showing the wrong pole lap in case of cuts. Added live money check for the new money based lapping/hotlapping penalties (so that wreckers get kicked immediately when they go below the min money value that you set in the config). Improved the calculation of the distance driven by a certain driver.
    v0.8 New Database Sharing: you can now share the rank, tracks and leaderboard database between different instances of the Kissmyrank plugin that are running on the same machine and/or remotely. If the Kissmyrank instances run locally, you just need to set "database_sharing_unique_name" to a unique name for each plugin and then set "database_sharing_local_group_port" in the config.json to the same value for all the instances that will be sharing the database (no other entries are required as all the other settings are for remote). You can create different local groups by picking a different port for each group (e.g. 4567 for group 1, 4568 for group 2 and so on). If the instances run on a different machine, you need to set "database_sharing_remote_listen_port", "database_sharing_remote_secret_key" and "database_sharing_remote_connect_to_addresses" as described in the config.json documentation. New Track Rotation ini_options. You can now change server_cfg.ini entries when rotating to a certain track (e.g. change server name for each track, set sessions, grip, weather etc.). See the readme for more. New: console command autocompletion, yay, no more typing errors when looking for a command. New "help command_name" console command to get help about a certain command. New: pagination for ranks as the list can get very long. Improved: cut_line_drawer now shows you which commands are left to finalize the cut line sketch. Fixed reserved slots handler kicking players that have a reserved slot to make room for other players with reserved slots (ouch). Other improvements and fixes. tracks.json contains more up to date track info so you might want to update that too (leaderboard was moved in 0.7 to a separate file so if you run this version and you haven't defined new cut lines, you can overwrite tracks.json no problem). New entries in config.json are 63-69. Entry 22 has changed. Please update your config accordingly.
    v0.8a New Kissmyrank Web Admin Console: you can now manage the Kissmyrank plugin and the Assetto Corsa server from the Web Browser via the Kissmyrank Web Admin Console ( http://yourserverip/kissmyrank_admin ). This feature will be disabled unless you set the "web_admin_console_password" config.json entry to a password of at least 12 characters. New admin_send_command: you can now send commands to the Assetto Corsa Server just like if you were typing in the game chat (e.g /ban_id, /ballast etc.). Added config entry 70. Please update your config.json accordingly.
    v0.8b New "on_ac_server_start_run_path" config.json option that allows you to run a program or a shell script when the Assetto Corsa Server starts (you can use it to restart other plugins or perform other tasks when the Assetto Corsa Server rotates the track etc.). Added config entry 71. Update your config.json accordingly.
    v0.8c New max_collisions_per_100km setting: you can now prevent drivers with high collision rate from joining the server (set to 0 to disable the feature altogether). You can set the driven distance over which this setting should apply (max_collision_per_100km_min_distance) and if there should be a recharge period (in order to allow players with high collision rates to join the server again after a certain amount of time). Added reserved_slots_boot_players_at_race config.json entry if you wish to prevent the Reserved Slot Feature from kicking drivers during the race (keep in mind that kicking happens from the very bottom of the grid and that if you set this to 0 VIP players will have to wait for a slot to natrually open up or for the end of the race). Added driver search in the Web Stats drivers page (you can search both by name and GUID). Added sorting to all tables and fixed format mismatch for decimal separators. New player_temporary_ban, player_temporary_ban_guid, player_ban_list, player_unban commands to allow you to temporarily block a driver (this is intended for short lived bans and it resets when you restart the plugin). Added option to vote for next track (kmr vote_track chat command). You can choose how many votes are needed to trigger a track change (percent and min). See config.json for more. Set track_rotation_vote_min_percent to 0 to disable the feature altogether. Added config.json entries 72-77. Please update your config.json accordingly.
    ---------------------------------------------
    Have fun!
    Brioche
    DORNER likes this.

Recent Reviews

  1. Xarlith
    Xarlith
    5/5,
    Version: 0.8b
    Very promising server plugin
    1. Brioche
      Author's Response
      Thank you for your feedback :).
  2. ramon31
    ramon31
    5/5,
    Version: 0.7c
    Juste pu l'expérimenter sur un serveur en tant que conducteur, ça semble très bien, a voir ce que ça peux donner si le plugin se répand, je commente surtout pour saluer l'initiative et remercier du travail ;)
    1. Brioche
      Author's Response
      Thank you for the good words :)!
  3. Lwi
    Lwi
    5/5,
    Version: 0.6h
    Very nice plugin. Original system using cash to reward clean drivers and kick crashers. Ping limit and blue flag warnings are great features. Easy to setup and detailed settings. Thanks for sharing your work!
    1. Brioche
      Author's Response
      Thank you for the kind words Lwi :).
  4. noxxfaxx
    noxxfaxx
    5/5,
    Version: 0.6h
    Cada día más completa! Enhorabuena.
    1. Brioche
      Author's Response
      Thank you :)
  5. Peter Koslowski
    Peter Koslowski
    5/5,
    Version: 0.4d
    Great Plugin, easy to use and it will keep out bad drivers! THX a lot!
    1. Brioche
      Author's Response
      Thanks for the feedback!
  6. Bruno32600
    Bruno32600
    5/5,
    Version: 0.4b
    very impressive
    1. Brioche
      Author's Response
      Thank you for your feedback!