-- SLIMax Mgr Lua Script v3.8.1 -- PART OF SLIMAX Manager pkg -- Copyright (c)2012-2013 by Zappadoc - All Rights Reserved. -- last change by Zappadoc - 2013-10 mSMX_VERSION = 3.8 -- see slimax_script_readme.txt for implementation -- load left and right functions tools require "scripts/functions_tools" -- ============================================================ -- GLOBAL VAR -- ============================================================ -- SMXMessageBox Styles MB_OK = 0x00000000 MB_OKCANCEL = 0x00000001 MB_ABORTRETRYIGNORE = 0x00000002 MB_YESNOCANCEL = 0x00000003 MB_YESNO = 0x00000004 MB_RETRYCANCEL = 0x00000005 MB_CANCELTRYCONTINUE = 0x00000006 MB_ICONHAND = 0x00000010 MB_ICONQUESTION = 0x00000020 MB_ICONEXCLAMATION = 0x00000030 MB_ICONASTERISK = 0x00000040 MB_USERICON = 0x00000080 MB_ICONWARNING = MB_ICONEXCLAMATION MB_ICONERROR = MB_ICONHAND MB_ICONINFORMATION = MB_ICONASTERISK MB_ICONSTOP = MB_ICONHAND -- MB result mIDOK = 1 mIDCANCEL = 2 mIDABORT = 3 mIDRETRY = 4 mIDIGNORE = 5 mIDYES = 6 mIDNO = 7 -- scripts settings mCustomScriptsFileName = "" -- new in: 2.2 -- init left and right digits panel text mLeftSpdLmtText = " " mRightSpdLmtText = " " -- 4 digits F1 panel mF1LeftSpdLmtText = " " mF1RightSpdLmtText = " " -- new: 2.1 -- RPM threshold values in percentage used with Shiftlights method 2 -- and configured with SLIMax Manager II Advanced Options Panel -- default values: RPM_PERCENT_VALUES = {50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 97, 98, 98, 99, 99 } RPM_ABSOLUTE_VALUES = {15452, 15545, 15823, 16354, 16410, 16675, 17252, 17545, 17823, 18354, 18510, 18655, 18670, 18675, 18677 } -- Fanatec text using for slowdown update mFanatecText = "" -- SIMRACE DLX text using for slowdown update mSRDlxLeftText = "" mSRDlxRightText = "" -- SIMRACE DLX text using for slowdown update mSRF1LeftText = "" mSRF1RightText = "" -- get feedback on display when you turn encoder or press button assigned to internal functions, see control.lua -- true if you want to display switch pos and value mSwitchFeedbackAllowed = true -- mapping to keystroke demo script -- see the support forum for more info on key mapping mDemoMapToKeyAllowed = false mDemoMapToKeySwitch = 5 -- Fanatec Digits Status mFanatecDigitsFeedbackAllowed = true -- Fanatec speedlimiter method seleted mFanatecSpeedLimiterFeedbackAllowed = true -- Fanatec osp method seleted mFanatecOSPFeedbackAllowed = true -- Fanatec shiftlights method seleted mFanatecShiftlightsFeedbackAllowed = true -- Low Fuel status mLowFuelFeedbackAllowed = true -- Left and Right Digits status mLeftDigitsFeedbackAllowed = true mRightDigitsFeedbackAllowed = true -- display KPH or KMH mUnitFeedbackAllowed = true -- show the current OSP Factor mOSPFeedbackAllowed = true -- cool global brightness feedback mBrightnessFeedbackAllowed = true -- show the current value of maxgear option mMaxGearFeedbackAllowed = true -- activate or deactivate lap dump telemetry -- using button 9 by default mDumpLapAllowed = false mDumpLapButton = 9 -- delta time delay mDeltaTimeBackup = 0 mDeltaTimeOldTicks = 0 mDeltaTimeDelay = 100 mRefreshLapTimeRate = 50 -- dump telemetry TelemetryTools("dumplastlap", false); -- ============================================================ -- init globals flag isGlobalInitialized = 0 -- 15 RPM leds mRPMLedTable = { RPM0=0, RPM1=0, RPM2=0, RPM3=0, RPM4=0, RPM5=0, RPM6=0, RPM7=0, RPM8=0, RPM9=0, RPM10=0, RPM11=0, RPM12=0, RPM13=0, RPM14=0 } -- SLI device type -- mDeviceType no longer avaialable use GetDeviceType(devID) see 2.3 API -- -------------------------------------------- -- KERS functions -- -------------------------------------------- function GetKersPercent() -- get kers value local kers_level = GetCarInfo("kers") local k_percent = 0 if kers_level ~= nil and kers_level > 0 then k_percent = round((kers_level/1000) / 4 ) end return k_percent end -- Init all globals function InitGlobals() -- default blink time delay mBlinkTime = 32 mOSPBlinkTime = 8 -- ticks stuff mOSPBlink = 0 mSpdLmtBlink = 0 mOldTickCount = 0 mOldOSPTickCount = 0 gRedZone = 0 gOSPLimit = 0 mBU0710Leds = 0 mG27Leds = 0 mOSPMethod = 0 mFanatecLeds = 0 end -- set RPM threshold value in percentage ( SLIMax Manager 2.1 ) function SetRPMPercentValue(index, value) if index <1 or index>15 then return end if value <0 or value >100 then return end RPM_PERCENT_VALUES[index] = value end -- set RPM threshold value ( SLIMax Manager 2.1 ) function SetRPMAbsoluteValue(index, value) if index <1 or index>15 then return end if value <0 or value >20000 then return end RPM_ABSOLUTE_VALUES[index] = value end -- get all global preferences set in general_default.sli function GetSLIMaxInfo() -- get RPM Only flag mSpdLmtRPMLedOnly = GetContextInfo("spdlmtrpmledonlyflag") if mSpdLmtRPMLedOnly == nil then mSpdLmtRPMLedOnly = false end -- get blink delay value* mBlinkTime = GetContextInfo("blinktime") if mBlinkTime == nil then mBlinkTime = 32 end if mBlinkTime < 1 or mBlinkTime > 48 then mBlinkTime = 32 end -- get osp blink delay value mOSPBlinkTime = GetContextInfo("ospblinktime") if mOSPBlinkTime == nil then mOSPBlinkTime = 32 end if mOSPBlinkTime < 1 or mOSPBlinkTime > 48 then mOSPBlinkTime = 32 end -- get current speed Limiter LED index mSpeedLimiterLED = GetContextInfo("ledspeedlimiterindex") if mSpeedLimiterLED == nil then mSpeedLimiterLED = 5 end if mSpeedLimiterLED < 1 or mSpeedLimiterLED > 6 then mSpeedLimiterLED = 5 end -- get current osp LEDs index mOSPLED1 = GetContextInfo("ospled1") if mOSPLED1 == nil then mOSPLED1 = 1 end if mOSPLED1 < 1 or mOSPLED1 > 11 then mOSPLED1 = 1 end mOSPLED2 = GetContextInfo("ospled2") if mOSPLED2 == nil then mOSPLED2 = 1 end if mOSPLED2 < 1 or mOSPLED2 > 11 then mOSPLED2 = 1 end -- blinking allowed? mNoBlink = GetContextInfo("noblinkflag") if mNoBlink == nil then mNoBlink = false end -- get limiter char flag mLimiterChar = GetContextInfo("limitercharflag") if mLimiterChar == nil then mLimiterChar = false end -- is OSP with first gear allowed? mOSPWithFirstGear = GetContextInfo("ospwithfirstgear") if mOSPWithFirstGear == nil then mOSPWithFirstGear = false end end -- get cpu ticks function GetTicks() local tcks = GetContextInfo("ticks") if tcks == nil then tcks = 0 end return tcks end -- reset table function function initLedTable(ibl, value) if ibl ~= nil then for k, v in pairs(ibl) do ibl[k] = value end end end -- toggle all led state function toggleAllLed(val) initLedTable(mRPMLedTable, val) for i = 1, 6 do SetWarnLed(i, val) end -- 7 external leds is the max value used in SIM RACE F1 and Emulator for i = 1, 7 do SetExtLed(i, val) end SetRPMLed("mRPMLedTable") end -- The following function rounds a number -- lua doesn't return the same rounded value as C/C++ function round(num) if num == nil then num = 0 end local i = 0 if num >= 0 then i = math.floor(num+.5) else i = math.ceil(num-.5) end return i end -- The following function calculate hr, mn, sec, hd, ms -- param: time in meter/sec function timeDispatcher( tt) if tms == nil then tms = 0 end local tms = math.abs(tt) local t_hr = 0 local t_mn = 0 local t_sc = 0 local t_ms = 0 local t_hd = 0 if tms > 0 then t_hr, n = math.modf(tms/3600) t_mn, c = math.modf(n*60) t_sc, s = math.modf(c*60) t_hd, h = math.modf(s*100) t_ms, m = math.modf(s*1000) end -- print( tt, t_hr, t_mn, t_sc, t_hd, t_ms) return t_hr, t_mn, t_sc, t_hd, t_ms end -- return speed in KPH or MPH function speed(spd, selector) if spd == nil then spd = 0 end if selector then -- MPH return ( spd * 2.237) else return (spd * 3.6) end end -- Fahrenheit to Celsius function FtoC(f) return ((f - 32) * (5/9)) end -- Celsius to Fahrenheit function CtoF(c) return (c * (9/5) + 32) end -- Kelvin to Celsius function KtoC(k) return ( k - 273.313) end -- liters to gallons function LtoG(liters) return (liters * 0.264172052 ) end -- gallons to liters function GtoL(gallons) return (gallons * 3.78541178 ) end -- return fuel in liters or gallons function GetFuel(fl, selector) if fl == nil then fl = 0 end if selector then -- gallons return LtoG( fl) else return fl end end -- return celcius or fahrenheit function GetTemp(tmp, selector) if tmp == nil then tmp = 0 end if selector then -- gallons return CtoF( tmp) else return tmp end end -- set refresh lap time rate in ms function SetRefreshLapTimeRate(delay) if delay == nil or delay < 0 or delay > 5000 then delay = 50 end mRefreshLapTimeRate = delay end -- set delta time delay in ms function SetDeltaTimeDelay(delay) if delay == nil or delay < 0 or delay > 5000 then delay = 200 end mDeltatimeDelay = delay end -- get current gear function GetCurrentGear() local g = GetCarInfo("gear") -- get neutral local n = GetContextInfo("neutral") -- get reverse char and convert to string local r = string.char(GetContextInfo("reverse")) -- get state of custom Optimal Shift Point (OSP) records local ospcustom_on = GetContextInfo("ospcustom") -- set neutral, reverse or current gear local result = g if g == 0 then -- if neutral and using custom OSP record then add a dot to gear digit if ospcustom_on then n = n + 128 end result = string.char(n) elseif g < 0 then -- reverse result = r end return result end function isAppIRacing(sim) if sim == "iRacingSim.exe" or sim == "iRacingSim64.exe" then return true end return false end function isAppRFactor(sim) if sim == "rFactor.exe" or sim == "rFactor2.exe" then return true end return false end function DisplayFormatTime(lptime, delay, dec, deltaflag, numDigits) local ticks = GetTicks() if dft_old_time == nil or (ticks - dft_old_time) > delay then -- global to backup ticks (ms) dft_old_time = ticks local hr = 0 local mn = 0 local sc = 0 local ms = 0 local hd = 0 local panel = "" local prefix = " " if lptime < 0 then prefix = "-" end -- explod time hr, mn, sc, hd, ms = timeDispatcher(lptime) if deltaflag == 1 then --display delta time if lptime == -1 or (mn + sc + ms) == 0.0 then if numDigits == 3 then Panel = "-.--" else Panel = " -.-- " end elseif mn > 0 then if numDigits == 3 then if mn < 100 then Panel = string.format( "%s%02d.", prefix, mn) else Panel = " ." end else Panel = string.format( " %s%1d.%02d ", prefix, mn, sc) end else if numDigits == 3 then if sc < 10 then if prefix == "-" then Panel = string.format( "%s%1d.%01d ", prefix, sc, hd) else Panel = string.format( "%1d.%02d ", sc, hd) end else Panel = " . " end else if Ndig == 2 then Panel = string.format( " %s%1d.%02d ", prefix, sc, hd) else Panel = string.format( " %s%1d.%03d", prefix, sc, ms) end end end elseif deltaflag == 0 then --display laptime if lptime == -1 or (mn + sc + ms) == 0.0 then if numDigits == 3 then Panel = "-.--" else Panel = "-:--.---" end elseif mn < 10 then if numDigits == 3 then Panel = string.format( "%1d.%02d", mn, sc) else Panel = string.format( "%1d:%02d.%03d", mn, sc, ms) end elseif hr > 0 then if numDigits == 3 then Panel = " . " else Panel = string.format( " %02d.%02d ", hr, mn) end else if numDigits == 3 then Panel = string.format( " %02d.", mn) else Panel = string.format( " %02d.%02d.%01d", mn, sc, ms) end end end end return Panel end --============================================== require "scripts/slidevice"