# ================================================================= #
#                  AIRIO SERVER CONFIGURATION FILE                  #
# ================================================================= #


# All of the following settings can be overwritten in config files of 
# individual servers (named Airio.srv.?.txt. where ? is the server 
# number). If not defined there, defaults below (or app settings) 
# will apply. Values marked as FULL are used only in FULL Airio
# version, they are ignored in the freely available compile. Values
# marked as PROS are included only in this Airio version.


# ======================== SERVER SETTINGS ======================== #

# This section defines general Airio server options like information
# messages, flags, voting, points and drifting.

# File with SRV items to include at this place - string
# If the defined file exists, its contents would be virtually pasted
# at the place of this directive and fully processed.
IncludeFile=

# Short server info displayed as tooltip on the servers page - string
WebDescription=

# Enter usernames of drivers registered for some event, separated
# by comma (,) or as separate items - string
# Output of !rsb and !rtb commands will be limited to these people,
# also !rexp data will include only these.
RName=

# Allow only registered (RName) drivers on this server - boolean
# Allow unregistered people to stay and spectate races - boolean
LimitToRegistered=false
UnregisteredCanSpec=true

# Usernames of server-level limads - strings
# These items allow to define limads on individual servers and have
# precedence over the same items in CFG file. They also follow the
# same rules (levels 0, 2, 4 in FREE, added levels 1, 3, 5 in FULL).
Limad2=

# Do not allow free joining of admins/limads - boolean
# If set to true, even admins and limads have to comply with rank,
# licence, rating, experience, or time requirements to join race.
DisableLimadJoining=false

# FREE: Hide server name and users on Airio servers page if the 
# server is hidden or not connected to the master LFS server.
HideHidden=false

# ---------------------------- Messages --------------------------- #

# Sets time to display custom server logo and Airio logo on each 
# race start (use zero to disable the display) - integer
# Specifies text (may be coloured) used for custom logo - string
# You can also change default text for small Airio logo - string
TimeLogo=10
TextLogo=^0My^3Server
SmallLogo=^3Airio ^7Powered

# Defines message displayed to every connected player or limads (and
# admins) or only to full admins - string(s)
# Divide long messages into several lines starting with +, which means
# adding the text to existing message (not overwriting it).
UsersMotd=
LimadMotd=^7To see the Airio tracker limad commands type ^3!lhelp
AdminMotd=^7To see the Airio tracker admin commands type ^3!ahelp

# Text entered here will be displayed to everyone connected in chat
# area at regular intervals set in minutes - string(s) & integer
# Starting + allows to output several lines of one long message.
TimedMotd1=
TimedTime1=15
TimedMotd2=^7Type ^3!opt ^7to set many personal options!
TimedTime2=60
TimedMotd3=
TimedTime3=240

# Text to be sent to chat area on each race start - string
# Text to be sent to chat area on qualification start - string
# Text to be sent to chat area on each race finish - string
# Create more lines by using starting/concatenating '+'.
RestartMsg=
QualifyMsg=
FinishMsg=

# Personal settings to be used on first connect - integer
# Personal settings to be used on successive connects - integer
# Values 1-3 are supported: 1 = No selectable messages and features, 
# 2 = Airio defauts, 3 = All selectable messages and features.
DefaultVerbosity=
StandardVerbosity=

# -------------------------- Info Buttons ------------------------- #

# Large button(s) to be shown on each race start - string
# Large button(s) to be shown on each qualification start - string
# Create more buttons (max 5) by using starting/concatenating '+'.
RestartBtn=
QualifyBtn=

# Large button(s) to be shown to everyone after connecting - string
# Create more buttons (max 5) by using starting/concatenating '+'.
# If also ButtnMotd (see next item) is defined, it will be shown after
# clicking OK below these large buttons.
ConnectBtn=

# These lines will appear as buttons to everyone connecting to the
# server, allowing for communicating some must-read info - string(s)
# Use "ButtnMotd=+text" to define text for individual buttons.
ButtnMotd=

# Display RC message with car, name, time for new best lap - boolean
# If true, new server best laps are shown to everyone for 5 seconds.
ShowServerBest=false

# ----------------------- Extended Messages ----------------------- #

# FULL: This text will be shown as buttons after issuing the !info
# command, allowing for displaying special info - string(s)
# Starting + allows to output several buttons, with colour codes.
# Starting < (after the +) will make the text left-aligned. Use > for 
# right-aligned text and | for centered text. Default is left-aligned.
InfoMsg=

# FULL: Same as above, only shown after !infos command - string(s)
InfosMsg=

# FULL: Same as above, only shown after !rule command - string(s)
RuleMsg=

# FULL: Same as above, only shown after !rules command - string(s)
RulesMsg=

# FULL: Same as above, only shown after !event command - string(s)
EventMsg=

# FULL: Same as above, only shown after !events command - string(s)
EventsMsg=

# ----------------------------- General --------------------------- #

# Allows to overwrite default car set in Airio.tcd.txt file - string
# Useful especially for defining default cars on individual servers,
# which is important for statistics shown and other calculations.
DefaultCar=

# May set car type (or types combined using +) that will be used in !sb
# and !tb commands instead of standard driver's current car - string
StandardCars=

# Car types separated by space that cannot be used on server - string
# You may use this setting e.g. to allow only custom cars to join
# race - when you define UFB, you may restrict joins with UFR here.
ProhibitedCars=

# Whether to spectate player for pitting (pressing Shift+P) - integer
# Could be used in races closed for midrace join to prevent pitting,
# because only spectating people cannot rejoin the race.
SpecFromPits=false

# Restart race once more after every track change - boolean
# This could be used to make sure cars are properly ordered on grid
# (e.g. by speed) in the first race after track change, regardless
# of the order people were joining in the lobby screen.
RestartOnTrackChange=false

# FULL: Show more data about rank/rating/license/experience
# FULL: Show total positions with points and podiums
# FULL: Show champ positions with points and podiums
# FULL: Show total lap/average/race time improvements
# FULL: Show champ lap/average/race time improvements
ExtendedPlayerInfo=false
ExtendedTotalPointInfo=false
ExtendedChampPointInfo=false
ExtendedTotalTimeInfo=false
ExtendedChampTimeInfo=false

# FULL: Specify car types or categories for pre-join checks.
# Please be sure to put first standard cars (categories), and
# only then all custom cars (categories). Separate items by
# spaces, e.g. "xfg xrg tbo gt2".
CarsToCheck=

# FULL: Set to make the cars from pre-join check unavailable.
# This will disable for individual users all cars that do not
# pass the pre-join check, preventing many bad race joins.
MakeCarsUnavailable=false

# ---------------------- Starting and Ending ---------------------- #

# Time (in seconds) to wait with automatic race restart - integer
# Number of players to be on track for the restart to happen - integer
RestartTime=150
RestartPlys=6

# Time (in seconds) to show until race restart or race end - integer
SecondsCountdown=15

# Use below defined custom start grid ordering - boolean
# This allows to create grid ordering schemes using last race results
# or achieved lap session times or both in any combination.
CustomGrid=false

# Always put forward faster types of cars on custom grid - boolean
# Equal speed car types are defined in TCD file under CarSpeeds item.
GridBySpeed=false

# Primary method used for ordering - string
# Available values are 'RR' (previous Race Results), 'ST' (achieved
# Session lap Time), 'PB' (server Personal stored Best time), 'CP' 
# (current Combo Points), 'TP' (total points).
GridPriMethod=RR

# Maximum number of cars to which the primary method applies - integer
# For remaining people the secondary sort is used.
GridPriCount=6

# Reverse primary method results - boolean
# Using this you may have e.g. first 8 cars of previous race start in
# reversed order.
GridPriReverse=true

# Secondary method used for ordering (RR, ST, PB, CP, TP) - string
# Reverse secodary method results - boolean
GridSecMethod=ST
GridSecReverse=false

# One ordering method for start after qualification (ST or PB) - string
# If valid selection is made start grid after qualification can be 
# changed/adjusted.
GridQualMethod=
GridQualCount=32
GridQualReverse=false

# Allow only one entry to track during qualification - boolean
# Cars may always drive to pitlane for refuel/repairs and continue 
# in the qualification, but after Shift+P/S their qual session ends.
OneQualificationJoin=false

# Optionally clear session data (lap times) of all drivers on practice
# or qualification start - boolean
# Clear session stats for spectating when not a doing pitstop - boolean
# These can together with previous 3 items allow for advanced 1st race
# after qualification sorting, enforcing reality.
ClearSessionOnQual=false
ClearSessionOnSpec=false

# FULL: Time in minutes when an empty server will be reset - boolean
# For server reset the file Airio.set.?.txt (where ? is server number)
# will be used, its contents sent as commands to server. Zero means
# no server reset to default state.
EndResetTime=10

# Track rotation scheme happening on every display of race end screen.
# "track[|laps/-mins[|car+car+]] > track..." in the scheme - string
# Instead of laps, minutes can be set as a negative value, the race is 
# then for specified number of minutes plus one lap for the leader.
# Track name may be followed by underscore and layout name.
RotateTracks=

# Number of races after which to rotate tracks by ending race - integer
# Number of minutes after which to rotate tracks by ending race - integer
RotateRaces=
RotateMinutes=

# FULL: If RotateTracks is empty this definition will be used - string
# In "track[|command1 [; command2 [; ...]]] > track..." any Airio or
# LFS command (such as !/cars or !len or /mustpit) can be used, giving
# much more control over rotations.
RotateTracksFull=

# FULL: When rotation starts, allow people to vote for track - boolean
# A menu appears allowing voting for specific site/track that exists
# in the rotation string. Site and track with most votes is selected.
RotateVote=false

# FULL: Always use random track from rotation string - boolean
# FULL: Always enter rotation, even when on unspecified track - boolean
RotateRandom=false
RotateEnter=false

# Seconds to wait before calling for race end in rotation - integer
EndWait=120

# --------------------- Blue and Yellow Flags --------------------- #

# Diplay custom message on each yellow/blue flag caused - string
# Set delay in seconds before repeating the custom message - integer
YellowFlagMessage=
BlueFlagMessage=
FlagMessageDelay=60

# Display more details about blue flags - boolean
# If true, players get message about the racer that is approaching
# and further checks are done.
ShowBlue=true

# Ignore blue flags from cars of different class/category - boolean
# If true on multiclass servers, only blue flags from people using
# cars of the same category are shown, the rest is considered only
# a teporary condition and ignored.
IgnoreMultiBlue=false

# Seconds to delay showing the blue flag info again - integer
# This setting will limit showing the same message repeatedly in quick
# succession.
DelayBlue=5

# Number of blue flag warnings before penalizing the player - integer
# Zero means there'll be no blue flag spectatings. Any higher value
# will penalize/spectate the player after (DelayBlue * RepeatBlue) 
# seconds under blue flag. Different number of repeats (RB) can be 
# specified based on driver's current safety rating in %, using the 
# following scheme: RB<SR[, RB<SR[, ..]] where SR must be descending.
RepeatBlue=0

# Penalty given for ignoring blue flags - string
# Supported values are only SC=spectate, PL=pitlane, 30, 45, DT, SG.
PenaltyBlue=SC

# Distance in hundreths of a second from obstructed car - integer
# Blue flag info will be shown only if the estimated time distance is 
# lower than set here. Use 0 to show info any time LFS raises blue 
# flag, regardless of car distance. Value of 150 sets the time gap 
# at 1.5 seconds or less.
DistanceBlue=100

# FULL: Show special blue/yellow flag messages - booleans
# Waved blue flag is raised if there are more cars approaching that
# are one or more laps ahead. Waved yellow flag is raised when the
# car causing yellow flag is on the race path.
ShowWavedBlueFlag=false
ShowWavedYellowFlag=false

# FULL: Distance in seconds for waved yellow flags - integer
# Only approaching cars within the distance, on the race path, and
# not causing yellow flag will be shown the waved yellow flag.
WavedYellowGap=5

# -------------------------- Race Voting -------------------------- #

# The following settings turn on and off vote cancelling and management. 
# Cancel means the vote is always cancelled. Manage means cancelling 
# the vote during race according to additional settings below.
CancelEndRace=false
ManageEndRace=true
CancelRestart=false
ManageRestart=true
CancelQualify=false
ManageQualify=true

# In which lap the race can still be restarted by voting - integer
# 0 = never, 1 = only in lap 1, not in later laps...
VoteLap=1

# Number of players for which race restarts are not managed - integer
# If this many or less players race then normal LFS restart rules apply.
VotePlayers=4

# Time (in seconds) after race finish before restart voting - integer
# This setting should let everyone finish the race.
VoteWait=45

# Disallow restart/end race vote when countdown is running - integer
# Set to true to ensure race restarts cannot be speeded up, so that
# everyone knows when will the restart really happen.
NoCountdownVote=false

# FULL: Whether to support priority votes - boolean
# If limad/admin with sufficient rights votes (by pressing 1) against
# someone, the voting is finished.
VotePriority=true

# FULL: If to protect limads and team members from voting - boolean
# If true, everyone voting against such people is kicked.
VoteProtectLimads=true

# FULL: Whether to allow people to vote against themselves - boolean
# If true and someone votes to kick or ban himself, Airio fulfils
# his wishes immediatelly.
VoteOwnSupport=false

# FULL: Minimum rank/rate level for kick and ban voting - integer
# If the rank/rate level of the player starting a vote is lower
# than specified, the vote is cancelled.
VoteRankMinimum=0
VoteRateMinimum=0

# FULL: Starting a vote agains higher ranked/rated people - integer
# If the rank/rate level difference is this many or more, the vote
# is cancelled.
VoteRankDifference=4
VoteRateDifference=4

# FULL: Starting a vote agains higher experienced people - integer
# If the LFS Experience Index (LFSEI) difference is higher than this,
# the vote is cancelled.
VoteLFSEIDifference=250

# Kick people for removing others from start grid - boolean
# Only limads of AllowNoKick or higher level and admins may remove 
# people from start grid (on the race end screen).
KickForRemove=true

# FULL: Manage kick/ban voting by limad power - boolean, integer
# If the management is active and the sum of connected limad/admin
# levels is equal or higher than the set number, driver voting is
# turned off, otherwise it is turned on.
VoteDynamic=false
VoteLevel=6

# FULL: Number of bad kick/ban votes - integer
# Bad votes are simply cancelled until this number is reached, then
# the guy is kicked for bad voting.
NumBadVotes=3

# ----------------------------- Points ---------------------------- #

# Comma separated integer points for victory and other places - string
# Limiting points for victory according to number of racers - boolean
# Giving points for finishing within LapsPoints to everyone - boolean
# Any number of fixed values may be specified. If limiting is turned on,
# maximum points gained by the winner depend on starting grid size.
# If PointSystem is empty, no points are scored/calculated/stored. When
# PointToAll is active, every reasonable finisher gets some points.
PointSystem=10,8,6,5,4,3,2,1
PointLimits=true
PointsToAll=false

# Comma separated values of points for good/great/top laps - integers
# Points for fastest lap in a race - integer
# Use zeroes if you do not want any points assigned for good/best laps.
PointsGood=1,2,4
PointsBest=1

# Percentage of total laps as a condition for scoring points - integer
# Player with less total laps at the race end don't score any points.
LapsPoints=80

# Number of races in a series, used in point reviews - integer
# Series points are shown by !pts, when one serie ends, another starts.
# Use zero if you do not want to group races into series.
GroupRaces=5

# Comma separated points for final podium serie places - integers
# Limiting points for serie according to number of racers - boolean
PointsSerie=5,3,1
SerieLimits=false

# Include additional points (good laps, stunts, ...) to races and
# series point scores - boolean
AdditionalToSerie=false

# FULL: Points for any LFSW PB improvement - integer
PointsImprove=1

# FULL: Display of stunt actions after the race - boolean
# FULL: Points for stunt actions after the race - integer
ShowStunts=false
PointsStunt=1

# FULL: Points to give to the lucky race start jumper - integer
# FULL: Minimum positions to jump from start to split 1 - integer
PointsJump=1
JumpPlaces=3

# FULL: Points to give to the highest race climber - integer
# FULL: Minimum positions to climb from split 1 to finish - integer
PointsClimb=1
ClimbPlaces=3

# FULL: Points for each lap in case low number of people race - integer
# FULL: Maximum number of people racing for support points - integer
PointsSupport=1
PlayersSupport=2

# Whether to display and store the above defined points - booleans
# Use this item to turn off total/champ point system easily. Points
# for playing and driving will be stored independently.
StoreTotalPoints=true
StoreChampPoints=true

# Storing two kinds of points on global level - booleans
# Both are in !pi output, one shown by !ptp, other by !ptd command.
StorePointsPlaying=false
StorePointsDriving=false

# FULL: Optionally use on this server alternate points - boolean
# Total and championship points will be stored and retrieved using
# alternate field in statistics, which in effect enables admins to
# use two different kinds of total/champ points under one Airio.
UseAlternatePoints=false

# FULL: Show driver rank/license on every race join - boolean
# Instead of showing rank on connect / license on 1st join and 
# change you can display rank/license on (almost) every race join.
ShowRankOnJoin=false
ShowLicenceOnJoin=false

# ------------------- Acceleration and Drifting ------------------- #

# Should acceleration data be gathered and shown - boolean
# If false, no one will see any acceleration data (target speed, 
# seconds required and distance covered).
AccelerationShow=false

# Target speed in kilometers per hour - integer
# This value is applied on people using kmph as speed measurement.
AccelerationSpeedKmph=100

# Target speed in miles per hour - integer
AccelerationSpeedMiph=60

# Should drifting be watched and processed - boolean
# If false, no drifting data will be gathered, no scores shown/stored.
# If you do not intend to support drifting, you'll save processor
# time by using 'false'.
DriftProcess=false

# Minimum speed in kmph necessary during the whole drift - integer
DriftMinSpeed=40

# Minimum angle of the drift - integer
# Maximum angle of the drift - integer
# Only drifts ending in car angle going below minimum angle are 
# considered as scoring drifts. No scores are given for drifts ending
# in low speed (that is just sliding) or car angle over maximum angle
# (that is only spinning).
DriftMinAngle=15
DriftMaxAngle=55

# Ideal drifting angle - integer
# The closer the car is to this angle the more points are scored. It
# is not simply the higher the angle the higher the score calculation.
DriftIdealAngle=25

# Minimum time of drifting in tenths (!) of a second - integer
# A value of 20 means car must comply with drifting conditions above
# for at least 2 seconds.
DriftMinTime=10

# --------------------- Scripting and Logging --------------------- #

# Address of a (PHP) script to be run on every race start - string
# Airio will send the response as a typed message meaning you can
# create commands, e.g. "/msg ^3There are ^734 ^3people on chat!"
# Define more scripts by using starting/concatenating '+'. Tabs (%09) 
# in response may be used for multiline output.
ScriptStart=

# Address of a (PHP) script to be run periodically - string
# Periodicity of the script in minutes - integer
ScriptTimed=
ScriptPeriod=10

# PROS: Capture entered /xxx commands on server or remotely - boolean
# Airio cannot log these commands directly but they can still be
# included in the system log together with e.g. IP addresses. Also
# the server log is purged on every midnight.
LogServer=false

# PROS: Complete path to the LFS server directory - string
# Server log file(s) are stored here. Please DO use the closing "\".
LFSPath=C:\LFS\

# PROS: Custom name of LFS server log file - string
# If none is specified, the default Airio.x.log is used. If you are
# running several servers from one directory, be sure to use different 
# name on each server, in Airio.srv.x.txt files!
ServerLogName=

# ---------------------- Resets, Limits, Pits --------------------- #

# FULL: Car reset penalties - strings
# First penalty is given after car reset, the second when entering 
# last lap of the race. Supported values: SG, DT, 45, 30. If a value
# is empty, no penalty is given. Only one car reset is allowed.
# First item accepts also SE meaning spectate for car reset in race.
ResetPenalty1=
ResetPenalty2=

# FULL: Timer for multi-join in demo - boolean
# This timer coordinates players joining the race allowing for more
# than the standard 12 cars on track in demo.
OvercomeLimit=false

# FULL: Limit overcome timer settings, countdown period and what is 
# the actual limit of cars in race - integers
OvercomeTime=5
OvercomeCount=12

# FULL: Race minutes when to open and close pitlane - integers
# Entry such as "4>8+12>16" will define 2 required pitstops, one 
# between 4th and 8th minute of the race, the other between 12th and
# 16th minute. Even count of ascending numbers is required. Special
# entry "0>0" would require one pitstop any time during the race.
PitWindows=

# FULL: Instead of minutes use (leader) laps to set pits - boolean
# Values in PitWindows have the same format, but denote laps of the
# leader and not race minutes.
UsePitLaps=false

# FULL: Number of car refuels required in race - integer
# FULL: Number of complete tyre changes required in race - integer
# These values are used only if PitWindows contains valid definition.
# Tyre changes may be forced by setting their wear level to Always.
PitRefuels=0
PitTyres=0

# Prohibit taking over cars in pits - boolean
# If set to true, then driver taking over car is simply spectated 
# with an explaining message.
ProhibitCarTakeover=false

# Apply defined track/car restricted zones only in race - boolean
# If true, people would be spectated from restricted zones only
# during race, not after race or in qualification or practice.
RaceRestrictedZones=true

# FULL: Temporarily disable race joins at race start - booleans
# The pitlane may be closed from race start or from the last split
# of the first lap, always until the first split of the second lap.
ClosePitAtRaceStart=false
ClosePitAtLap1Finish=false

# FULL: Close pitlane if there are enough cars on track - integer
# With less cars on track the pitlane stays always open.
ClosePitMinDrivers=8

# ---------------------------- Ratings ---------------------------- #

# Initial safety values are in the CFG file under Ratings header.

# Safety rating increase ratio for each completed lap - integer
# Generally increases of rating are specified using positive values
# while decreses use negative values. The value of 100 means increasing
# rating by approx. 1 percent of its current value, but with higher
# ratings this percentage goes down while decrease percentage raises.
LapWeight=30

# Additional safety rating increase for each kilometre - integer
# If higher than zero, this is applied at the end of each lap to
# differentiate between short and long tracks. PTH files are required.
KmWeight=10

# Additional safety rating increase for each WR minute - integer
# If higher than zero, this is applied at the end of each lap to
# differentiate between slower and faster cars, based on current WR.
MinWeight=10

# Safety rating decrease ratio for yellow flag in race - integer
# Percentage for caused yellow flag to be used in calculation; if the
# rating change after each yellow flag is too large, use lower value.
# For how long in seconds another yellow flag is ignored - integer
FlagWeight=-100
FlagDelay=15

# Increase on each race finish with enough laps (LapsPoints) - integer
RaceWeight=100

# Decrease for using bad language and text flooding - integer
ChatWeight=-50

# Decrease when being spectated or kicked or banned - integers
SpecWeight=-50
KickWeight=-200
BanWeight=-500

# Going off the path in race, scoring good lap time in race - integers
OffPathWeight=-20
GoodLapWeight=20

# ----------------- Custom and Scheduled Commands ----------------- #

# PROS: Here you define custom server commands using any LFS/Airio
# instructions. Definitions have three parts separated by '>'.
# First part defines command name without starting '!'. Make sure
# it is unique. After a space optional command description may be
# specified. 2nd part sets limad level from which the command is
# available. Last part contains the actual instructions, separated
# by semicolon ';'. Special string {Parameter} will be replaced by 
# passed parameter. Use & to require immediate execution.
ServerCommand=hi Welcomes people on the server > -1 > !lchs ^7Warm welcome from {NickName}^7!
ServerCommand=bye Says goodbye to the leaving people > -1 > !lchs ^7Happy day wishes from {NickName}^7!

# PROS: Same as above, but executed in the name of curret user.
# Supported parameters {NickName}, {UserName}, {CurrTime}, {CurrDate}, 
# {CurrTrack} can be used also above and in any defined textual item.
# Use % to allow temporary usage of otherwise unavailable items.
# Other supported parameters: {CurrTimeUTC}, {CurrDateUTC}, {CurrCar},
# {CurrCategory}, {ServerName}, {LimadStatus}", {CurrRateValue},
# {CurrRateText}, {CurrRankValue}, {CurrRankText}, {CurrLiceValue}, 
# {CurrLiceText}, {CurrExpeValue}, {CurrExpeText}.
UserCommand=now Shows server date and time > -1 > %lch ^7Server date and time : ^3{CurrDate} {CurrTime}
UserCommand=stat Shows limad status > 0 > %slp {Parameter} ; !rc ^7{NickName}^7's status : ^3{LimadStatus} ; !rc 5
UserCommand=warn Warns a driver > 2 > %slp {Parameter} ; %sbg ^7{NickName}^7, you get a serious warning! ++ ^3Next time you are banned... ; %hbg 10

# PROS: This allows to define series of LFS/Airio commands to execute
# at certain time. Two parts separated by '>' are required, The first
# sets month, day, hour, minute, and second when the command (or 
# commands, separated by ';') in second part should execute. Any number
# may be replaced by '*' denoting the closest value. Optionally month
# number may be replaced by 'w' and day then by weekday value, which
# allows to define date-independent weekly actions. Valid values are 
# 1-12 for month, 1-31 for day, 0-6 for weekday, 0-23 for hour, and
# 0-59 for minute and second.
ScheduledCommand=* * 0 0 0 > /msg ^3Server midnight, a new day starts...
ScheduledCommand=w 1 0 0 5 > /msg ^3We're entering a new week...

# PROS: Choose if time in ScheduledCommands is UTC or server - boolean
UseScheduledUTC=false


# ========================= SERVER FILTERS ======================== #

# This section covers options to turn on/off various Airio filters
# and make appropriate settings.

# -------------------------- Text Filters ------------------------- #

# Warn for bad words in messages kick for bad words in names - boolean
# Curses and char replacements are defined in Airio.cfg.txt file.
CheckCursing=false

# Spectate for bad words in numberplates - boolean
# Spectate for skin containing prohibited (team) name - boolean
CheckText=true
CheckSkin=false

# On which bad language in message the player is kicked - integer
# 0 = never, 1 = on first, 2 = with one warning...
NumCurses=2

# Kick for sending too many text lines into chat - boolean
CheckFlooding=true

# On which text message in what time the player is kicked - integers
# Player is warned of flooding on message (FloodingCount - 1).
FloodingCount=4
FloodingTime=8

# -------------------------- Car Filters -------------------------- #

# Check for prohibited tyres, passengers, handicaps - booleans
CheckTyres=true
CheckPassengers=true
CheckHandicaps=true

# Instead of spectating for bad tyres or passengers just show
# warning buttons. Tyres/passenger check must still be active.
WarnTyres=false
WarnPassengers=false

# AIs should never be allowed, spectate them from race - boolean
CheckAI=true

# Filter to check car setup and compare it to allowed - boolean
# Gears = automatic gears, Brake = brake help, Tc = traction control,
# Abs = anti-blocking system, SymW = symmetric wheels, Clutch = auto
# clutch, Shift = shifter, Button = button clutch.
CheckSetup=false

# If setup filter is active you may allow/disallow a setup - boolean
SetupGearsAllow=true
SetupBrakeAllow=true
SetupClutchAllow=true
SetupShiftAllow=true
SetupButtonAllow=true
SetupTcAllow=true
SetupAbsAllow=true

# If setup filter is active you may require/enforce a setup - boolean
SetupGearsForce=false
SetupBrakeForce=false
SetupClutchForce=false
SetupShiftForce=false
SetupButtonForce=false
SetupTcForce=false
SetupAbsForce=false
SetupSymWForce=false

# ------------------------ Joining Filters ------------------------ #

# On which join with bad car the player is kicked - integer
# This includes bad text, bad tyres, passengers, AI, insufficient time,
# bad setup.
NumBadSetup=3

# Number of allowed forced spectatings in session before kick - integer
# Counted are spectate commands caused by idling, wrong way driving, 
# lagging, restricted zones and speeding in pitlane.
MaxSpectatings=5

# Number of automatic kicks in a day before ban + ban length - integers
# Counted are kick commands caused by bad language, bad setup, bad name,
# flooding, bad tyres, poor time, repeated joining, security (time),
# spectatings and double name. Ban period is set in days, 0 is 12 hours.
MaxKicks=5
BanLength=0

# Limit repeated joining - boolean
# Number of players in race for the check to run - integer
CheckJoin=false
PlyRejoins=8

# Number of allowed running race rejoins - integer
# Number of tries to rejoin before kick - integer
# Race progress percentage after which rejoin is not possible - integer
NumRejoins=3
KickRejoin=6
RaceRejoin=75

# Kick people that do not race for a long time - boolean
# This filter may be used on demo servers with low number of slots.
CheckInactivity=false

# Time in minutes after which the player is kicked for inactivity
# if not completing any laps (or passing splits) - integer
# How many players must be connected for the check to run - integer
InactivityTime=30
InactivityPlys=12

# Make sure cars coming from pits observe the lines - boolean
# This has to be accompanied by valid PitExitNode item in TCD file.
CheckPitExit=false

# What penalty to apply in case of bad pit exit in race - string
# Possible values are 30 (seconds), 45 (seconds), dt (drive through),
# sg (stop and go), pl (pitlane), sc (spectate), or empty (no penalty).
PitExitPenalty=dt

# Same as above, only concerning pit entry in race - boolean, string
CheckPitEntry=false
PitEntryPenalty=

# Check time distance in seconds to cars one or more laps ahead when 
# returning to track from pitlane (red pitlight) - integer
# Requires CheckRacePath to be active. Zero means no track return check.
# Penalty for ignoring the red pitlight - SC, PL, SG, DT, 45, 30.
TrackReturnGap=0
TrackReturnPenalty=SC

# ------------------------ Advanced Joining ----------------------- #

# FULL: Optionally use average lap times for licences - boolean
# This depends on AverageLaps settings in TCD file, but it may provide
# more reliable licensing excluding "lucky laps".
LicenceByAverage=false

# FULL: Level of time-based licence required to join race - integer
# Time-based licence levels and descriptions are created in TCD file.
# 0 = no licence limit, 1 = lowest (first) licence required, etc.
LicenceRequired=0

# FULL: Car-specific required licence levels - string
# These are created as CAR[+CAR[+...]]|LEVEL[,CAR]. Items are separated
# by spaces and car whose licence is used may be specified after ','.
# Example: XFG|0 XRG|1,XFG
LicenceSpecific=

# FULL: Optionally use points for playing or points for driving
# as the base of ranks (instead of total points) on this server.
RankByPlaying=false
RankByDriving=false

# FULL: Level of points-based licence required to join race - integer
# Points-based licence levels and ranks are created in TCD file.
# 0 = no rank limit, 1 = lowest (first) rank required, etc.
RankRequired=0

# FULL: Car-specific required rank levels - string
# These are created as CAR[+CAR[+...]]|LEVEL CAR[+CAR[+...]]|LEVEL ...
RankSpecific=

# FULL: Level of safety rating required to join race - integer
# Safety rating values and levels are created in TCD file.
# 0 = no rating limit, 1 = lowest (worst) rating required, etc.
RatingRequired=0

# FULL: Car-specific safety rating levels - string
# These are created as CAR[+CAR[+...]]|LEVEL CAR[+CAR[+...]]|LEVEL ...
RatingSpecific=

# FULL: LFS Experience Index required to join race - integer
# LFSEI is calculated using LFS World data, drivers must not hide
# their values explicitly. Indexes of connected people are shown by
# !ex and generally range from 0 (lowest) to over 1000 (highest).
# If rank or licence limitations are defined, the LFSEI is used only
# as an optional condition allowing to bypass the requirement.
ExperienceRequired=

# FULL: Car-specific LFS Experience Index values - string
# These are created as CAR[+CAR[+...]]|LFSEI CAR[+CAR[+...]]|LFSEI ...
ExperienceSpecific=

# PROS: Turn on/off automatic managing of dynamic handicaps - boolean
# Additional settings in TCD file allow defining certain handicap 
# increase/decrease based on race result.
DynacapsManage=false

# PROS: Turn on/off automatic managing of safety handicaps - boolean
# Additional settings in TCD file allow defining certain handicap 
# increase/decrease based on current safety rating.
SafecapsManage=false

# PROS: Set handicap buffers to limit forced spectates - integers
# If handicap is raised after race but the difference between last 
# and required handicap is lower than set below, driver is not forced
# to join track again by being spectated.
BufferIntake=1
BufferMass=10

# FULL: Absolute minimum LFS Experience allowing people to stay on
# the server. Anyone below this experience is kicked as temporarily
# not allowed right after his LFSEI is known. People with hidden
# LFSW stats will have experience 0, which will also happen if the
# LFSW data download fails for some reason, so be very careful
# with this setting and use it only e.g. to fight with crashers
# creating new demo accounts every few hours. Zero means no check.
MinimalExperience=0

# ------------------------- Driving Filters ----------------------- #

# Disallow wrong way driving - boolean
CheckDriving=true

# Time in seconds after which player is seen as driving wrong way
# and spectated in race or in practice (after race) - integers
WrongDrivingTimeRace=5
WrongDrivingTimePrac=10

# Maximum seconds to give drivers for each sector - boolean
# Zero means no limit. Make sure the alloted time is reasonable, so
# that people are not incorrectly spectated for slow driving.
MaxSectorTime=0

# Remove idling cars in race - boolean
# Time in seconds after which player is seen as idling - integer
# Player is warned of idling on (IdlingTime - 10) and (IdlingTime - 5).
# Remove idling cars also in qualification or practice - boolean
CheckIdling=true
IdlingTime=30
CheckIdlingQual=false

# Allow idling and driving wrong way when the car is outside
# the racing line - boolean
OffTrackIdling=true
OffTrackDriving=false

# Remove cars with extensive lagging during race - boolean
CheckLagging=true

# Number of missing consecutive car position packets (sent every
# 100 ms) seen as lagging and maximum number of such lags before 
# spectating - integers
LagCount=4
LagTotal=8

# Disallow speeding in the pitlane - boolean
# Disallow this even after race - boolean
# Disallow any kind of speeding (above 80 kmph) - boolean
CheckSpeeding=true
CheckSpeedingAlways=true
DisallowAnySpeeding=false

# Check positions inside defined restricted/limited zones - boolean
CheckPosition=true

# FULL: Always prohibit other than cockpit view from car - boolean
# If a driver switches the view from his car to Follow, Helicopter,
# ot TV Camera, he is spectated.
CheckCockpit=false

# FULL: People for which the cockpit view in not checked - string
# Concatenate usernames using '+' and use this to define exemptions
# to the above filter, e.g. because of some sight troubles.
CheckCockpitExempt=

# Forcefully spectate drivers after receiving results - boolean
# May be useful e.g. on layouts to keep the track clean.
SpecAfterFinish=false

# Always spectate for false start - boolean
# Send to pitlane for false start - boolean
# Could be good for short races or for having race without penalties.
SpecFalseStart=false
PitFalseStart=false

# PROS: Check/report wrong route on custom tracks - boolean
# If active together with advanced server checks, people will receive 
# WRONG ROUTE message on custom tracks, when their location on track 
# (node) is unknown.
CheckRoute=true

# PROS: Spectate people from wrong route on custom tracks - integer
# If route check is running and a value in seconds higher than zero 
# is specified here, people may be send to spectate from wrong route.
WrongRouteSpec=0

# --------------------- Crashing and Hacking ---------------------- #

# Apply lagging filter, spin filter, and yellow flag counting only
# if there are some cars near the driver in troubles.
# Time distance in seconds that is considered "near" - integer
# Zero includes all cars currently on track.
# Number of cars that must be near for the checks to run - integer
# Zero means no cars need to be close around.
NearGap=5
NearCars=1

# Spectate people seen with too high speed/spin - boolean
# Possible speed and spin is defined in Airio.tcd.txt file.
# Speed check also includes additional acceleration check, if proper
# values are defined using AllowedAccel in the TCD file.
CheckSpeed=true
CheckSpin=false

# Turn off speed/spin filter when there is no race - boolean
# If set to true, these checks will not run once the race is over,
# which may allow for some post-race stunts. If false, the checks are
# always conducted.
NoSpeedCheckAfterRace=false
NoSpinCheckAfterRace=true

# Turn off speed/spin filter when crashing outside the track - boolean
# If set to true, these checks will not run when the racer is outside
# the proper racing path, where it probably does not matter.
SpinCheckOnlyOnTrack=true
SpeedCheckOnlyOnTrack=true

# Sets in units of 100 ms for how long the high speed/spin must 
# last for the player to be really spectated for security - integer
# Due to lags the server may see a player spinning highly in one
# moment, while in the next it sees him again driving normally.
# A small delay might help to prevent incorrect spectatings. Value
# of 0 means immediate spectate, 1 = only when the condition is once
# confirmed, 2 = two confirmations (each one separated by 100 ms) etc.
CrashCheckDelay=1

# Compare all split/sector times with WR, kick for too good - boolean
# If you use this check, turn it off for some time after major changes
# in WR table (cars added/updated/deleted).
CheckTime=false

# FULL: Limit maximum speed in specific nodes or polygons - boolean
# The nodes or polygons are together with allowed speed defined in TCD 
# file by MaxSpeedNodes resp. MaxSpeedPolygons item and can be used to
# spectate people driving too fast at certain places, usually crashing.
CheckMaximumSpeed=false

# PROS: Disallow two players with the same IP address on server - boolean
# If connected locally, server logging may be enabled (see SRV file)
# and IP addresses of incoming connections captured. It is then 
# possible to kick players for doubled IPs and prevent voting abuse.
CheckAddress=false

# PROS: Do not send driver/track/car/lap data to AIRW - boolean
# Please set this item to FALSE if you're running a tweaked server
# and use Airio PROS, the only version communicating with AIRW.
SendDataToAIRW=true

# ------------------------ Locking Filter ------------------------- #

# Require certain PB lap time or other values to join race - boolean
# Run the time lock check only when race is in progress - boolean
CheckLock=false
LockOnlyRace=false

# This is server lock time settings allowing for practice/race server 
# configurations. Set percentage * 100 above WR time required and note
# that CheckLock must be true for the lock to function. Setting 
# LockTime=500 means a time within 5 percent of WR is necessary to join.
LockTime=500

# Additional time lock settings specifying which time is used - boolean
# You may use LFSW PB time, but then LFSW data download must be active
# and players must have their stats publicly available. Also server best
# player's time may be checked, thus creating "classic" practice/race
# server combinations. If both options are true, player may join if
# either one of the times complies to time lock condition (percentage).
LockByLFSW=true
LockByServer=true

# Automatically lock/unlock server by prime time and users - boolean
# Prime time start/end for automatic locking by PB time - hour:minute
# Connections for the prime time lock to turn on and off - integers
# If auto is enabled, the lock will turn on at the specified time.
# Lock will turn on during prime time only if at least max people are
# connected and will turn off when less than min people are connected.
LockAuto=false
LockPrimeStart=
LockPrimeStop=
LockPrimeUsersMax=
LockPrimeUsersMin=

# FULL: Apply joining limits only when in locked mode - booleans
# These items allow to apply/check rank, licence, rating and LFS
# experience requirements (as set in the advanced joining checks)
# only when the server is locked (automatically or by !lock). False
# means the check always runs; true applies it only under lock.
LockByRank=false
LockByLicence=false
LockByRating=false
LockByExperience=false

# FULL: Ignore lap time if the lock uses other parameters - boolean
# E.g. when locking by safety rating it may be useful to skip the
# default lap time check by setting the value to false.
LockByLapTime=true

# Prohibit certain type of controls (e.g. keyboard) - boolean
# Percentage * 100 over WR allowing any controls can be used - integer
# Controls check will not run for people with sufficient PB (or PR).
CheckControls=false
ControlsSkipTime=1000

# Specific input controls to prohibit (disallow) - booleans
# If CheckControls is true and e.g. ControlsMouseDisallow is true,
# drivers using mouse cannot join race, unless within ControlsSkipTime.
ControlsMouseDisallow=false
ControlsWheelDisallow=false
ControlsKBStabilizedDisallow=false
ControlsKBUnstabilizedDisallow=false

# --------------------- Additional Information -------------------- #

# The following items may provide more detailed instructions to
# people spectated on race join for different reasons. Create maximum
# 2 or 3 additional lines, also localization can be used here.

# Additional text to show in case of bad joining or bad time - string
BadJoin=
BadLock=

# Additional text to show in case of bad name, plate or skin - string
BadName=^7Please define other than the default nickname - see above.
BadPlate=
BadSkin=

# Additional text to show in case of bad tyres, passengers or applied
# handicaps - string
BadTyres=
BadPassengers=
BadHandicaps=

# Additional text to show in case of bad player setup (AG/BH), car
# setup (ABS/TC/SW) or bad car type (without restrictions) - string
BadPlayerSetup=
BadCarSetup=
BadCarType=

# FULL: Additional text to show in case of insufficient licence (lap
# time), rank (points), (safety) rating, or LFS experience - string
BadLicence=
BadRank=
BadRating=
BadExperience=

# FULL: Additional text to show in case of bad camera view, 
# insufficient intake/mass dynamic handicap, or rejoining when the 
# pitlane is closed at the race 1st lap - string
BadCamera=
BadHandicap=
BadRejoin=^7Pitlane will open on leader's lap 2, split 1.

# Additional text to show in case of unregistered driver - string
# Additional text to show in case of prohibited control type - string
NotRegistered=
BadPlayerControls=


# =================== INITIAL PERSONAL SETTINGS =================== #

# This section defines default personal settings applied to people
# either on their first connect or on every connect. Accepted values
# range from -2 to +2 with the following meaning: -2 = hidden on 
# every connect, -1 = hidden on 1st connect, 0 = Airio default, 
# 1 = shown on 1st connect, 2 = shown on every connect. People can
# manually change even data shown or hidden on each connect.

# Line 1 of !opt screen data
SetKickReasons=1
SetSpectateReasons=-1
SetTimingButtons=1
SetOutputButtons=1

# Line 2 of !opt screen data
SetBestLaps=1
SetBestSplits=-1
SetBestSectors=-1
SetGoodLaps=1
SetGoodSplits=1
SetGoodSectors=-1
SetRacePath=-1
SetDistance=-1

# Line 3 of !opt screen data
SetTimingData=1
SetSoftSplits=-1
SetRaceProgress=-1
SetExperiences=1
SetStunts=1

# Line 4 of !opt screen data
SetServerTimes=-1
SetLfswTimes=-1
SetPoints=-1
SetRanks=1
SetLicences=1
SetRatings=1

# Line 5 of !opt screen data
SetGeneralInfo=1
SetRaceInfo=1
SetOwnData=-1
SetPrivateData=1
SetAverageInfo=-1
SetResultsInfo=-1

# Line 6 of !opt screen data
SetKmph=1
SetOwnSpeed=-1
SetBestSpeed=-1
SetCommands=1
SetAcceleration=-1

# Line 7 of !opt screen data
SetPitBoard=-1
SetPitInfo=-1
SetDriftBoard=-1
SetDriftInfo=-1
SetDriftSingle=-1
SetDriftLap=-1
