alpha-bravo
Registered
Sure i will put a message today and then i will create a wiki with all possibilities.
You will see, my goal is to provide a near 100% customizable plugin. So if needed you will be able to create your own events.
Wow
Sure i will put a message today and then i will create a wiki with all possibilities.
You will see, my goal is to provide a near 100% customizable plugin. So if needed you will be able to create your own events.
// if the vehicle class does not have it own parameter, the one in [DEFAULT] will be used instead.
// In addition to the predefined parameters, you can create your own parameters and use them as Inputs in the rules files.
// Those parameters must be prefixed by "v:"
[DEFAULT]
Rules.file=DefaultRules.ini
Sounds.subPath=Sounds/EN
Mapping.VehicleClass.file=vehiculeClass.ini // usefull for multi category (when the mod does not have already one class per category)
maxDetailLevel=2
v:breakTooHot=600
v:breakTooCold=500
// You can override any DEFAULT parameter in a section named as a rF2 Vehicle Class, for exemple
// [Megane]
// maxDetailLevel=2
// v:breakThreshold=900
// The [**DEFAULT**] is usefull for mono category config in case of you still want to display category informations - Those data are taken into account when there is no matching section equals to the rF2 vehicule class info
[**DEFAULT**]
category.name=***
// each section must have the name of each rF2 vehicule class string (used for multi category race)
//[Corvette ALMS GT2 2009]
//category.name=GT2
[Main]
Events.file=DefaultEvents.ini
Rules.count=12
// One section per rule
// [Rule.1] for the first rule, [Rule.2] for the second rule, ...
[Rule.1]
Trigger=S1
Event=SelfGapSector1
Input1=SelfGap
// Possible values for Trigger
// ScoreUpdate : correspond to a call to the UpdateScoring method of the plugin API (around every 0.5s) - WARNING: do not put too many rule with this trigger to avoid FPS loss
// AnySector : when the car reach a sector
// S1 : when the car reach the sector 1
// S2 : when the car reach the sector 2
// S3 : when the car reach the sector 3 (just finish a lap)
// PlaceChanged : when you rank change
// StartLightGo : When the starting light is green
// SectorFlagChanged : When one of the 3 sector flag change
// NewBestLap : When the beat the best laptime (all drivers best lap)
// NewCategoryBestLap : When the beat "only" the category best laptime
// NewSelfBestLap : When the beat "only" your own best laptime
// Finished : When you finish the session
// ---------------------------------------------------------------------------------------------------------------------------
// Possible values for Input1/2/3
// <"hardcoded" number> : such as -0.37, range is that of IEEE double-precision floating point number
// v:<name> : one of the custom variable defined in the Spotter.ini file
// Session : 0 - 13, 0=test day, 1=practice1 ..., 5=qual1, ..., 9=warmup, 10=race1..., 13=race3
// Laptime : your laptime of the just finished lap (if trigger S3), else it is the current laptime
// MyBestLaptime : your current best lap (not yet updated in trigger S3, if you just beat it)
// Place : your current position
// LastPlace : your last position
// OilTemp : your oil temperature (celcius)
// WaterTemp : your water temperature (celcius)
// BreakTemp : your breaks temperature (celcius) - (take the higher temperature of the 4 wheels)
// TireTemp : your tire temperature (celcius) - (take the higher temperature of the 4 wheels - the center part of the wheel)
// TireInnerLayer : your inner layer (before carcass) tire temperature (celcius) - (take the higher temperature of the 4 wheels - the center part of the wheel)
// TireCarcass : your carcass tire temperature (celcius) - (take the higher temperature of the 4 wheels)
// TireTemp : your tire temperature (celcius) - (take the higher temperature of the 4 wheels - the center part of the wheel)
// Fuel : your fuel left (liters)
// FuelCapacity : your fuel tank capacity (liters)
// FuelPerLap : Fuel quantity used to completed the last lap - (updated at S3)
// RemainingLapsWithFuel : Number of laps remaining before empty fuel (based on FuelPerLap) - (updated at S3) - equals to "1000001" if FuelPerLap is not yet computed
// RemainingLaps : Number of laps remaining before the end of the session - (updated at S3) - equals to "1000000" if not yet computed
// NumberOfStartLight : Number of light in the start sequence (track specificity)
// CurrentStartLight : Current number of light (on) - if CurrentStartLight == NumberOfStartLight means the race start.
// Lap : the current lap number (0 for the first lap)
// TrackLapDist : The track lap distance (meter)
// LapDist : you current lap distance (meter)
// LapDistRatio : you current lap distance compare to the track lap distance(0.0 to 1.0)
// S1Flag : 0 = no flag, 1 = yellow flag
// S2Flag : 0 = no flag, 1 = yellow flag
// S3Flag : 0 = no flag, 1 = yellow flag
// OldSelfBestLaptime : my previous self best laptime (updated on trigger NewBestLap > NewCategoryBestLap > NewSelfBestLap - if you beat a any king of best lap only one will be triggered)
// OldBestLaptime : the beaten best laptime (updated on trigger NewBestLap > NewCategoryBestLap > NewSelfBestLap - if you beat a any king of best lap only one will be triggered)
// SelfGap : the gap to your previous best (updated at each sector)
// FinishStatus : your finish status (0=none, 1=finish, 2=dnf, 3=dq)
// Tells player a sector 1 gap (compare to s1 of self best lap)
Event=SelfGapSector1 // Input1 = sector1 gap
{
// Event properties (note that these are not applied if this event is played by another event)
Detail=1 // Detail level (so this event will be evaluated as soon as the maxDetailLevel is t lest equals to 1 in the Spotter.ini
Spacing=0.0 // Number of second to wait before another event of this type is evaluate (0.0 as this event is used only on Trigger=S1)
Priority=1 // highest priority (used to priorize event in the awaiting queues - when several event occurs in the same time) - from 0.0 (lowest) to 1.0 (highest)
Probability=1.0 // probability to evaluate this event (0.0 (never - 0%) - 1.0 (always - 100%)
TTL=10.0 // Time to live (in seconds) in the awaiting queue before he is discarded - so if this time is reached without being yet evaluated, it is discarded
Break=0.25 // number of second (pause) to wait before any other awaiting event is evaluated
// Repeat until duration ends (Not yet supported)
Repeat=Off
Duration=0.0
Volume=1.0 // volume from 0.0 to 1.0 (not yes supported)
// Now the real algorhytm to see if a sound must be played and which sound(s)
Variable=Session // set the working variable to the Session value
{
Value=(>=0,<=8) { // check if we are not in WarmUp or Race
Variable=Input1 // set the working variable to Input1 (the rule file set "SelfGap" as input1)
{
Value=(>0,<=1.0) { // look if the gap is positive and lower than 1.0s (so the spotter only speak if the gap is less than a second)
File=slow_on_first.wav // tell "Sector one is slower by..."
PlayEvent=Gap // play the other event which is used to tell the gap value (using the working variable as Input1 of the event)
}
Value=(>=-1.0, <0) { // look if the gap is negative and lower than 1.0s (so the spotter only speak if the gap is less than a second)
Variable=Absolute { // get the absolution value of input1 (need a positive value for the "Gap" event)
File=fast_on_first.wav // tell "sector one is faster by..."
PlayEvent=Gap // play the other event which is used to tell the gap value (using the working variable as Input1 of the event)
}
}
}
}
}
}
// Tells player a gap
Event=Gap // Input1 = gap (speak only if gap < 30s)
{
// Event properties (note that these are not applied if this event is played by another event)
Detail=1 // lap time is based on option, so this needs to be played at all detail levels
Spacing=0.0
Priority=1
Probability=1.0
TTL=10.0
Break=0.25
// Repeat until duration ends
Repeat=Off
Duration=0.0
// Play introduction to laptime
Volume=1.0
// Variable used to choose one File to play for this Sound (Variable compared to Value)
Variable=Input1
{
Value=(>0) {
Value=(>0;<0.10) { File=gap_000.wav } // tell "less than 0.1 second"
Value=(>=0.1;<0.15) { File=gap_001.wav } // tell "less 0.1 second"
Value=(>=0.15;<0.25) { File=gap_002.wav }
Value=(>=0.25;<0.35) { File=gap_003.wav }
Value=(>=0.35;<0.45) { File=gap_004.wav }
Value=(>=0.45;<0.55) { File=gap_005.wav }
Value=(>=0.55;<0.65) { File=gap_006.wav }
Value=(>=0.65;<0.75) { File=gap_007.wav }
Value=(>=0.75;<0.85) { File=gap_008.wav }
Value=(>=0.85;<0.95) { File=gap_009.wav }
Value=(>=0.95;<1.5) { File=gap_010.wav } // tell "less 1 second"
Value=(>=1.5;<2.5) { File=gap_020.wav }
Value=(>=2.5;<4.0) { File=gap_030.wav }
Value=(>=4.0;<5.5) { File=gap_050.wav }
Value=(>=5.5;<7.0) { File=gap_060.wav }
Value=(>=7.0;<9.0) { File=gap_080.wav }
Value=(>=9.0;<12.5) { File=gap_100.wav }
Value=(>=12.5;<17.5) { File=gap_150.wav }
Value=(>=17.5;<=25.0) { File=gap_200.wav } // tell "less 2 second"
Value=(>=25.0;<=30.0) { File=gap_300.wav }// tell "less 3 second"
}
}
}
Not for now, but a key shortcut will be added to reload all ini filesFor testing if changes in the ini are work as expected do I have to restart the rF2 session or is it enough to drive to pit switch to desktop change the value in the ini and switch back to rF2 and go on track again ?
Once the spotter will be in a "finished" state, i will look to those kind of things and if it is possible to avoid conflict with Team Speak, for example.Would it be possible (from developers view) to include a voice trigger for example: designated push button for activate voice command like:
"spotter" - "Fuel duration?" - spotter answer as defined in the ini for example "55l around 22 laps" or something else ?
Thanks
Not for now, but a key shortcut will be added to reload all ini files
Once the spotter will be in a "finished" state, i will look to those kind of things and if it is possible to avoid conflict with Team Speak, for example.
Yes it works in 64bit and 32bitsI've searched the topic but haven't found anything about 64-bit... It doesn't work for 64, does it?
It seems to be related to a choice made by ISI since an old build. I asked them if they can revert this spotter volume limit and wait their response.This sounds really cool. But I think I'll prefer to wait until you don't have to fiddle that much with sound volumes in order to hear it (difficult fix?).
No, and i know notron tell that about many plugin. I use as few API as possible so i cannot do anything about Norton. Maybe you can configure it.One more thing, my antivirus program (Norton) reported that SpotterPlugin_x64.dll is dangerous and deleted itsomething you can do about that? So atm I can't use it even if I would want to.
I reach a limit, as i have a limited list of predefined sound, so i will not be able to have spotter sound for weather, contact, etc...
I think i will use a "Text to Wav" Tools, like this site: https://www.fromtexttospeech.com
I know it is not as natural/alive as a human people but it will let me done any kind of message.
It will be perfect, but i must be sure that the one who start to make a voice will be highly reacting to create sound i need asap and don't stop after few times, as i don't think having heterogenous voice between message will be sweet.Nice job guys!
Can we help with the sound? Can we create a library of live recorded sound (multilanguage)?