#==================================================================================# #Scriptname: IdleAFKTimer.LPR #Author: Bass-Driver #Version: 1.2 #VersionDate: 09-06-2018 # ##Version 1.1: # -Fixed: Timer didnt work when a new player joined the server. # -Fixed: Added ToNum() to check time. ##Version 1.2: # -Add: MaxAFKTime GlobalVar # -Add: MaxIdleTime GlobalVar # -Fixed: Driving while lapperreboot still activate the timers. ( added a speedcheck) #==================================================================================# CatchEvent OnLapperStart() GlobalVar $Idle_AFKTimerVersion; $Idle_AFKTimerVersion = "V1.2"; GlobalVar $IdleAFKTimer; $IdleAFKTimer = "0 * * * * * * "; FOR($i=1;$i<61;$i=$i+1) $IdleAFKTimer = $IdleAFKTimer . " : ".$i." * * * * * *"; ENDFOR GlobalVar $MaxAFKTime; $MaxAFKTime = 60; GlobalVar $MaxIdleTime; $MaxIdleTime = 60; RegisterScheduleAction( "".$IdleAFKTimer."", RSA_IdleTimer); EndCatchEvent Sub RSA_IdleTimer() # Lapper Event $ConnectedPlayers = GetListOfPlayers("U"); #Get Distance and Angle from each player FOREACH ($Player in $ConnectedPlayers) #IDLE TIMER & Speedcheck IF((GetPlayerVar( $Player["value"], "IsIdle") == 1) && (GetPlayerVar( $Player["value"], "InstantSpeed") < 1)) THEN $Player_IdleTime = GetPlayerVar( $Player["value"], "IdleTimer"); SetPlayerVar($Player["value"], "IdleTimer", $Player_IdleTime + 1); ENDIF #AFK TIMER & Speedcheck IF(( GetPlayerVar( $Player["value"], "IsAFK") == 1) && (GetPlayerVar( $Player["value"], "InstantSpeed") < 1)) THEN $Player_AFKTime = GetPlayerVar( $Player["value"], "AFKTimer"); SetPlayerVar($Player["value"], "AFKTimer", $Player_AFKTime + 1); ENDIF #Display Message to player OpenButton( $Player["value"], "AFKTIMER",185,96,15,4,4,-1,16, "^3AFK: ^7" .Convert_AFK_IDLE_Time(GetPlayerVar( $Player["value"], "AFKTimer"))); OpenButton( $Player["value"], "IDLETIMER",185,100,15,4,4,-1,16, "^3IDLE: ^7" .Convert_AFK_IDLE_Time(GetPlayerVar( $Player["value"], "IdleTimer"))); #When Idle/AFk time exceed the 1 min ( 60 seconds) execute the code below. IF((ToNum(GetPlayerVar( $Player["value"], "AFKTimer")) > $MaxAFKTime) || (ToNum(GetPlayerVar( $Player["value"], "IdleTimer")) > $MaxIdleTime)) THEN #Do Something ENDIF ENDFOREACH EndSub ################################################# #Event when a player is connecting to the server# ################################################# CatchEvent OnConnect( $userName ) # Player event #Init PlayerVars SetPlayerVar($userName, "IsIdle",1); SetPlayerVar($userName, "IsAFK",1); #Timers SetPlayerVar($userName, "IdleTimer",0); SetPlayerVar($userName, "AFKTimer",0); EndCatchEvent ################################################# #Event when a player stopped or is driving a car# ################################################# CatchEvent OnCarStateChanged($userName,$StateOfCar) IF($StateOfCar == 0) THEN #Car stopped: Player could be idling or going be AFK. SetPlayerVar($userName, "IsIdle",1); SetPlayerVar($userName, "IsAFK",1); ENDIF IF($StateOfCar == 1) THEN #Reset Idle/AFK timers after driving the car forward SetPlayerVar($userName, "IsIdle",0); SetPlayerVar($userName, "IsAFK",0); SetPlayerVar($userName, "IdleTimer",0); SetPlayerVar($userName, "AFKTimer",0); ENDIF EndCatchEvent ######################################### #Event when a player joined the race # ######################################### Event OnNewPlayerJoin( $userName ) # Player event SetPlayerVar($userName, "IsIdle",1); SetPlayerVar($userName, "IsAFK",1); SetPlayerVar($userName, "AFKTimer",0); EndEvent ######################################### #Event when a player is leaving the race# ######################################### Event OnLeaveRace( $userName ) # Player event SetPlayerVar($userName, "IsIdle",1); SetPlayerVar($userName, "IsAFK",1); #Reset Idle/AFK timers SetPlayerVar($userName, "IdleTimer",0); SetPlayerVar($userName, "AFKTimer",0); EndEvent ######################################### #Event when a player typed something # ######################################### CatchEvent OnMSO( $userName, $text ) # Player event SetPlayerVar($userName, "AFKTimer",0); EndCatchEvent ################################################### #Function that convert seconds into hours/min/sec # ################################################### Sub Convert_AFK_IDLE_Time($TimeInSeconds) $Mins = ToNum(round(($TimeInSeconds/60),0)); $Time = ToNum(round(($TimeInSeconds/60),2)- $Mins ); $Secs = ToNum(round(($Time*60),0)); #Calculate hours/minutes $Hours = ToNum(round(($Mins/60),0)); $HoursTime = ToNum(round(($Mins/60),2)-$Hours); $MinLeft = ToNum(round(($HoursTime*60),0)); $Mins = $MinLeft; IF ( $Secs < 0 ) THEN # when seconds are negative $Mins = $Mins-1; $Secs = 60 + $Secs; ENDIF IF ( $Secs < 10 ) THEN $Secs = "0".$Secs; ENDIF IF ( $Mins < 10 ) THEN $Mins = "0".$Mins; ENDIF #Return the converted time. Return($Hours.":".$Mins.":".$Secs.""); EndSub