The online racing simulator
Searching in All forums
(882 results)
Adminchat
Bass-Driver
S3 licensed
Hello Lapperusers,

Like to release a Adminchat script i had laying around.

Features:
  • Multiple admins can join the session.
  • Stored chatfiles.
  • notification when a admin join/leave the adminchat window
HOW TO INSTALL THE ADDON
  • -Be Sure you have the latest version of LFSLapper: https://www.lfs.net/forum/thread/58433-Release.
  • -Unpack the files and place these files in the 'includes' folder (\bin\default\includes)
  • -Open the "addonsused.LPR" file (\bin\default\includes\addonsused.LPR)
  • -add the following line: include( "./Adminchat/adminchat.lpr");
  • -Start LFSLapper and type !adchat
Last edited by Bass-Driver, .
StartLight Control
Bass-Driver
S3 licensed
Hello Lapperusers,

After getting many questions about how to setup the AutoX Startlights.
I will publish a example script, which is also available in the current LFSLapper version.

###############################
#HOW TO INSTALL THE ADDON
###############################
  • -Be Sure you have the latest version of LFSLapper: https://www.lfs.net/forum/thread/58433-Release.
  • -Open the file and change the extension of the file to: .LPR
  • -Save the file in the 'includes' folder (\bin\default\includes)

  • -Open the "addonsused.LPR" file (\bin\default\includes\addonsused.LPR) and add the following lines:
include( "./AutoX_StartLight_Example.lpr");

-Start LFSLapper

###############################
#HOW TO SET THE LIGHTS
###############################
  • -Open AutoX editor (Shift+U)
  • -Add some Startlights ( Control >> Startlights)
  • -Change the indentifier (0 - 63)
As you can see the lights arent working. Thats because you have to optimise the layout.
  • -Click on 'MORE' button.
  • -Click on 'OPTIMISE' button.
The lights are lit green now.

Now type command !slid. And change the Index/Indentifier/Mode/Light
  • -Index ( 149 = AutoX lights or 240 = Track Startlight )
  • -Indentifier (Indentifier of the light you want to change the light)
  • -Modes (common is 5)
Last edited by Bass-Driver, .
Bass-Driver
S3 licensed
i made a small mistake.

But if you had used the search function on this forum and searched for 'hostdelayedcommand',you had found the issue with a fix.

https://www.lfs.net/forum/post/1921312#post1921312



<?php 
Sub semaforo1
$userName,$ZoneID)
    
#privmsg("Sub semaforo1"); #Debug message
    
startlightcontrol(5,149,22,1);
    
HostDelayedCommand5semaforo3 );
EndSub

Sub semaforo3
($keyflags#This is not a priv sub-routine anymore
    #globalmsg("Sub semaforo3"); #Debug message
    
startlightcontrol(5,149,22,8);
EndSub
?>


Let me know this works for you, so i can close this thread.
Bass-Driver
S3 licensed
Quote from Yisc[NL] :No, that isn't possible, because Lapper doesn't have a GetTopList for Drift function (yet).
The request you made, has been asked in the past as well.

Question: https://www.lfs.net/forum/post/1903097#post1903097

Answer: https://www.lfs.net/forum/post/1903170#post1903170

I have add this feature to the Lapper todo/wish list

https://www.lfs.net/forum/post/1702912#post1702912
Bass-Driver
S3 licensed
When you call a sub routine with HostDelayedCommand(), be sure your Sub-routine does not have any variables.

When you open the error file, you see a line with Wrong amounts of variables or something.




<?php 
Sub semaforo1
$userName,$ZoneID)
    
startlightcontrol(5,149,22,1);
    
HostDelayedCommand5semaforo3 );
EndSub

Sub semaforo3
()
    
startlightcontrol(5,149,22,8);
EndSub
?>


Bass-Driver
S3 licensed
works fine for me.
How did you debug your code, i guess you didnt.

TEST code:

#closeprivbutton("DAM_YLoc_X_Axis&DAM_YLoc_Y_Axis");
#closeprivbutton("DAM_Bgddark&DAM_BgdLight&DAM_Title&DAM_YLoc_Title&DAM_YLoc_X_Title&DAM_YLoc_Y_Title&DAM_YLoc_XY");
#closeprivbutton("DAM_Cfg_Title&DAM_Cfg_FileName&DAM_Cfg_ButtonID&DAM_Cfg_WoA&DAM_Cfg_SubEnter&DAM_Cfg_SubLeave&DAM_Cfg_X-Axis&DAM_Cfg_Y-Axis");
#closeprivbutton("DAM_Cfg_FileName_01&DAM_Cfg_ButtonID_01&DAM_Cfg_WoA_01&DAM_Cfg_SubEnter_01&DAM_Cfg_SubLeave_01&DAM_Cfg_X-Axis_01&DAM_Cfg_Y-Axis_01");
#closeprivbutton("DAM_Test&DAM_Edit&DAM_Save&DAM_Close&DAM_Expand&DAM_GoTo&DAM_Spare1");

closeButtonRegex (GetCurrentPlayerVar("UserName"), "DAM_*");

The Function closeButtonRegex () can be found in the utils file of lapper.

LFSLapper V7.0.4.6\bin\default\includes\Utils.LPR
Last edited by Bass-Driver, .
Bass-Driver
S3 licensed
Tested the code and everything works perfectly.

Testcode:

CatchEvent OnNewPlayerJoin( $userName ) # Player event
openPrivButton( "lang_en",30,30,4,4,5,-1,32, "^3EN" ,SetLanguage);
EndCatchEvent


<?php 
Sub SetLanguage
$KeyFlags,$ButtonID  )
   
#Cut the first 5 chars of the buttonID , result = 'en'
   
$language trimsubStr$ButtonID,) );

   
#When the value/string of $language is equal to 'en'
   
IF ($language == "en"THEN

     
#Set player language to English
      
SetCurrentPlayerVar("IdLang","en");

     
#DEBUG MESSAGE
      
privmsg("Language selected");
       
      
#Display Text
      
openPrivButton"example",75,111,50,10,5,-1,ISB_DARKlangEngine("%{example}%"));
   ENDIF
EndSub


Lang 
"EN"
    
example "This text is an exampletext";
EndLang
?>


Now up to you to LEARN HOW TO debug your own code.
Bass-Driver
S3 licensed
Post your code!!! , we cant help you with this.
Bass-Driver
S3 licensed
Tongue

Yisc[NL] , could you try to run LFSLapper localy? Because that packet i showed can only be run locally.
Will see when i have time to implement this packet Tongue
Last edited by Bass-Driver, .
Bass-Driver
S3 licensed
that doesnt work, because it will execute the command for the host.

I also havent run Lapper in localmode before, So i cant say if it works locally.
Also

The Insimpacket that controls the local player lights/horns isnt implemented yet.

SMALL_LCS, // 9 - instruction : set local car switches (lights, horn, siren)

// CAR SWITCHES
// ============

// To operate the local car's lights, horn or siren you can send this IS_SMALL :

// ReqI : 0
// SubT : SMALL_LCS (Local Car Switches)
// UVal : Switches (see below)

// Switches bits

// Bits 0 to 7 are a set of flags specifying which values to set. You can set as many
// as you like at a time. This is to allow you to set only the values you want to set
// while leaving the others to be controlled by the user.

#define LCS_SET_SIGNALS 1 // bit 0
#define LCS_SET_FLASH 2 // bit 1
#define LCS_SET_HEADLIGHTS 4 // bit 2
#define LCS_SET_HORN 8 // bit 3
#define LCS_SET_SIREN 0x10 // bit 4

// Depending on the above values, InSim will read some of the following values and try
// to set them as required, if a real player is found on the local computer.

// bits 8-9 (Switches & 0x0300) - Signal (0 off / 1 left / 2 right / 3 hazard)
// bit 10 (Switches & 0x0400) - Flash
// bit 11 (Switches & 0x0800) - Headlights

// bits 16-18 (Switches & 0x070000) - Horn (0 off / 1 to 5 horn type)
// bits 20-21 (Switches & 0x300000) - Siren (0 off / 1 fast / 2 slow)

Last edited by Bass-Driver, .
Bass-Driver
S3 licensed
I'm sure we have told this many times , but oke. Another one..........

If you want to get/set a Global variable to/from the database you have to use the following functions:

Get/Set Global Var

SetStoredValue("varname", $value) - sets a variable
GetStoredValue("varname") - returns variable as a string
GetStoredNum("varname") - returns variable as a numeric (or as -1 if it's not a number), so you don't need to do a ToNum($var) conversion if you're doing numeric comparisons

Get/Set Player Variables like storing the totaldistance of each user, you have to use these functions.

Get/Set User var

SetUserStoredValue($username, "varname", $value) - Sets a variable
GetUserStoredValue($username, "varname") - returns variable as a string
GetUserStoredNum($username, "varname") - returns variable as a numeric

To set the Player's distance , go to the Player event: OnDistDone. This event will execute every 100 meters the player has driven.
Event OnDistDone( $userName ) # Player event
EndEvent

In that event you STORE the total distance.
SetUserStoredValue($username,"TotalDistance",GetUserStoredValue($username,TotalDistance)+100);

I'm sure you know now, how to GET the player's stored distance.
Bass-Driver
S3 licensed
Hello,

During developing a tool to define area's i discovered a bug in the RegisterZoneAction() function.

RegisterZoneAction( "MyZone", "SO6" , X-Axis , Y-Axis, WidthOfZone, EnterZone,LeaveZone );

After set a name for the LeaveZone Sub routine, i drove into the zone , which was ok. But Lapper crashed when i left the zone.
So i went exploring the bug in the sourcecode, and i found a typo. This is fixed and tested and is working

This bug only appear when set the LeaveZone Sub routine in the registerZoneAction() function.
The RegisterNodeAction() function is fine.

See Attachment for the fix bug. This attachment contains the LFSLapper.exe
Overwrite the old LFSLapper.exe in your LFSLapper directory.


PS: For players that customised theire LFSLapper.exe, Send me a PM.
Last edited by Bass-Driver, .
Bass-Driver
S3 licensed
You have to split StrMsg[1] into 2 differend words. More info about split()

string user = StrMsg[1];
// Split string on spaces.
// ... This will separate all the words.
string[] username = user.Split(' ');

And then combine them together. Something like this i guess?

string UName = username[0] + " " + username[1];

if (C.Username == StrMsg[1])
{
blah
}
else if (C.Username == UName)
{
blahblah
}
else
{
InSim.Send_MTC_MessageToConnection("^4|^7 Username not found.", MSO.UCID, 0);
}

Bass-Driver
S3 licensed
With a S3 (this includes S1 and S2) , all cars and tracks are unlocked.

You can host a server by a dedicated server or ingame ( Multiplayer >> Start a new host)

Or you can rent a LFS Server.
https://www.lfs.net/hosting for example
Bass-Driver
S3 licensed
@popughini


Ever checked the tutorial section? https://www.lfs.net/forum/441-Tutorials

Oh look what i found.

https://www.lfs.net/forum/thread/71158-GET---SET-Database-%28what-where-when%29-Use%3F

If there isnt a tutorial about a specific section of LFSLapper. Report it and we will look into it.
Bass-Driver
S3 licensed
show us your code.
Bass-Driver
S3 licensed
did you tried to get this code to work?

https://www.lfs.net/forum/post/1925799#post1925799

Because in this topic there is usefull info to Save/Get info to/from textfiles
Bass-Driver
S3 licensed
New update:

Insim changes:

V1.08 (02-07-2017)
New: PlayerHud: Contains Racetimer/Messages/Penalty's etc
New: Classes/Air restriction system
Update: Penaltysystem: Add Scenery objects to Penaltylist
Update: Helpmenu: Add new Tab :Serverinfo ( for now Penalty's and Car restiction)

Layout update:

New layout on Fernbay that contains 3 differend stages, 1 of the them is a rallystage
Bass-Driver
S3 licensed
Sorry for bumping this topic, but i had the same today with my [DTC]Timeattack server.

My fix was to change the gameport number, and everything is fine now.
Bass-Driver
S3 licensed
Well what i think it works the same as.

$ListOfPlayers = getListOfPlayers("U");

Because getListOfPlayers() is an array aswell.

I have to study the sourcecode even more to understand it.

I will figure out, how to unset 1 value in an array. I think, i did this once in one of my scripts before. but cant remember which one :S Could be the sortscript.

Heres the code i have used for sorting the times in the Timetable of my Timeattack addon.

Maybe its usefull or not. Sorry for the lack of commentary

Just a note for all readers who copied this code: This code simply doesnt work , because it is connected with other parts of the addon, dont ask for the rest of the code, you will not get it



Sub SortArray($DisplayedStage)
################Sort Times###############
#Add a '0' to the number to create a 2 to 7 digit number
#This will also converts string to Numeric character
UserGroupFromFile( "RallyUserTime".$DisplayedStage,"includes/RallySystem/Times/Times".$DisplayedStage.".txt" ); # Load File
$ListOfTimes = GetListOfUsersGroup("RallyUserTime".$DisplayedStage); #Which stage has to be displayed
$Count_GetNumber = arrayCount( $ListOfTimes );
FOR ($i=0;$i<=$Count_GetNumber;$i=$i+1)
$GetDataFromLine = SplitToArray($ListOfTimes[$i],"|");
IF (IsNum($GetDataFromLine[4])== TRUE) THEN
### Array with values from 0 - 10 ###
IF ((ToNum($GetDataFromLine[4]) > 0) && (ToNum($GetDataFromLine[4]) < 10)) THEN
$GetData[$i,4] = "000000".$GetDataFromLine[4];
ENDIF
### Array with values from 9 - 100 ###
IF ((ToNum($GetDataFromLine[4]) > 9) && (ToNum($GetDataFromLine[4]) < 100)) THEN
$GetData[$i,4] = "00000".$GetDataFromLine[4];
ENDIF
### Array with values from 99 - 1000 ###
IF ((ToNum($GetDataFromLine[4]) > 99) && (ToNum($GetDataFromLine[4]) < 1000)) THEN
$GetData[$i,4] = "0000".$GetDataFromLine[4];
ENDIF
### Array with values from 999 - 10000 ###
IF ((ToNum($GetDataFromLine[4]) > 999) && (ToNum($GetDataFromLine[4]) < 10000)) THEN
$GetData[$i,4] = "000".$GetDataFromLine[4];
ENDIF
### Array with values from 9999 - 100000 ###
IF ((ToNum($GetDataFromLine[4]) > 9999) && (ToNum($GetDataFromLine[4]) < 100000)) THEN
$GetData[$i,4] = "00".$GetDataFromLine[4];
ENDIF
### Array with values from 99999 - 1000000 ###
IF ((ToNum($GetDataFromLine[4]) > 99999) && (ToNum($GetDataFromLine[4]) < 1000000)) THEN
$GetData[$i,4] = "0".$GetDataFromLine[4];
ENDIF
$GetData[$i,1] = $GetDataFromLine[1].""; #String (UserName)
$GetData[$i,2] = $GetDataFromLine[2].""; #String (NickName)
$GetData[$i,3] = $GetDataFromLine[3].""; #String (Car)
$GetData[$i,5] = $GetDataFromLine[5].""; #Num (Penalty)
$GetData[$i,6] = $GetDataFromLine[6].""; #Num (maxSpeed)
$GetData[$i,7] = $GetDataFromLine[7].""; #String (Splittimes)
ENDIF
ENDFOR

$SaveString_One = ""; #String (NickName)
$SaveString_Two = ""; #String (NickName)
$SaveString_Three = ""; #String (Car)
$SaveNumber_Four = 0; #Num (Time)
$SaveNumber_Five = 0; #Num (Penalty)
$SaveNumber_Six = 0; #Num (maxSpeed)
$SaveNumber_Seven = 0; #String (maxSpeed)
#######################
###Ascending sorting###
#######################
FOR ($LineOfFileOne=0;$LineOfFileOne<=$Count_GetNumber;$LineOfFileOne=$LineOfFileOne+1)
FOR ($LineOfFileTwo=$LineOfFileOne;$LineOfFileTwo<=$Count_GetNumber;$LineOfFileTwo=$LineOfFileTwo+1)
IF (($GetData[$LineOfFileOne,4]) > ($GetData[$LineOfFileTwo,4])) THEN

#Temperary Saved vars
$SaveString_One = $GetData[$LineOfFileTwo,1].""; #String (NickName)
$SaveString_Two = $GetData[$LineOfFileTwo,2].""; #String (NickName)
$SaveString_Three = $GetData[$LineOfFileTwo,3].""; #String (Car)
$SaveNumber_Four = $GetData[$LineOfFileTwo,4].""; #Num (Time)
$SaveNumber_Five = $GetData[$LineOfFileTwo,5].""; #Num (Penalty)
$SaveNumber_Six = $GetData[$LineOfFileTwo,6].""; #Num (MaxSpeed)
$SaveNumber_Seven = $GetData[$LineOfFileTwo,7].""; #String (Splits)

$GetData[$LineOfFileTwo,1] = $GetData[$LineOfFileOne,1]."";
$GetData[$LineOfFileTwo,2] = $GetData[$LineOfFileOne,2]."";
$GetData[$LineOfFileTwo,3] = $GetData[$LineOfFileOne,3]."";
$GetData[$LineOfFileTwo,4] = $GetData[$LineOfFileOne,4]."";
$GetData[$LineOfFileTwo,5] = $GetData[$LineOfFileOne,5]."";
$GetData[$LineOfFileTwo,6] = $GetData[$LineOfFileOne,6]."";
$GetData[$LineOfFileTwo,7] = $GetData[$LineOfFileOne,7]."";

$GetData[$LineOfFileOne,1] = $SaveString_One."";
$GetData[$LineOfFileOne,2] = $SaveString_Two."";
$GetData[$LineOfFileOne,3] = $SaveString_Three."";
$GetData[$LineOfFileOne,4] = $SaveNumber_Four."";
$GetData[$LineOfFileOne,5] = $SaveNumber_Five."";
$GetData[$LineOfFileOne,6] = $SaveNumber_Six."";
$GetData[$LineOfFileOne,7] = $SaveNumber_Seven."";
ENDIF
ENDFOR
ENDFOR

##########################################################
#FILTER CARS OR PLAYERS
##########################################################
#Save sorted array to List
IF ((GetCurrentPlayerVar("RallyTimeTableFilterCar") == "")&&(GetCurrentPlayerVar("RallyTimeTableFilterUserName") == "")) THEN
FOR ($i=0;$i<=$Count_GetNumber;$i=$i+1)
$showlist[ToNum($i),1] = $GetData[$i,1]."";
$showlist[ToNum($i),2] = $GetData[$i,2]."";
$showlist[ToNum($i),3] = $GetData[$i,3]."";
$showlist[ToNum($i),4] = $GetData[$i,4]."";
$showlist[ToNum($i),5] = $GetData[$i,5]."";
$showlist[ToNum($i),6] = $GetData[$i,6]."";
$showlist[ToNum($i),7] = $GetData[$i,7]."";
ENDFOR
ELSE
#Something must be Filtered
$showline = 1;
#Clear data from previous array
FOR ($Line=0;$Line<=$Count_GetNumber;$Line=$Line+1)
#Clear Arrays
$showlist[ToNum($Line),1] = "";
$showlist[ToNum($Line),2] = "";
$showlist[ToNum($Line),3] = "";
$showlist[ToNum($Line),4] = "";
$showlist[ToNum($Line),5] = "";
$showlist[ToNum($Line),6] = "";
$showlist[ToNum($Line),7] = "";
ENDFOR
#Car Filter
IF (GetCurrentPlayerVar("RallyTimeTableFilterCar") != "") THEN
$CarsString = SplitToArray(GetCurrentPlayerVar("RallyTimeTableFilterCar"),"+");
$CarsCount = arrayCount($CarsString);
FOR ($c=0;$c<=$CarsCount;$c=$c+1)
FOR ($Car=1;$Car<=20;$Car=$Car+1)
FOR ($Line=0;$Line<=$Count_GetNumber;$Line=$Line+1)
IF ((ToUpper($GetData[ToNum($Line),3]) == ToUpper($CarsString[$c]))&&($Car_TimeTable[$Car] == ToUpper($CarsString[$c]))) THEN
$showlist[ToNum($showline),1] = $GetData[ToNum($Line),1]."";
$showlist[ToNum($showline),2] = $GetData[ToNum($Line),2]."";
$showlist[ToNum($showline),3] = $GetData[ToNum($Line),3]."";
$showlist[ToNum($showline),4] = $GetData[ToNum($Line),4]."";
$showlist[ToNum($showline),5] = $GetData[ToNum($Line),5]."";
$showlist[ToNum($showline),6] = $GetData[ToNum($Line),6]."";
$showlist[ToNum($showline),7] = $GetData[ToNum($Line),7]."";
$showline = $showline+1;
ENDIF
ENDFOR
ENDFOR
ENDFOR
ENDIF
#PlayerName Filter
IF (GetCurrentPlayerVar("RallyTimeTableFilterUserName") != "") THEN
$PlayerString = SplitToArray(GetCurrentPlayerVar("RallyTimeTableFilterUserName"),"+");
$PlayerCount = arrayCount($PlayerString);
FOR ($p=0;$p<=$PlayerCount;$p=$p+1)
FOR ($Line=0;$Line<=$Count_GetNumber;$Line=$Line+1)
IF (ToLower($GetData[ToNum($Line),1]) == ToLower($PlayerString[$p])) THEN
$showlist[ToNum($showline),1] = $GetData[ToNum($Line),1]."";
$showlist[ToNum($showline),2] = $GetData[ToNum($Line),2]."";
$showlist[ToNum($showline),3] = $GetData[ToNum($Line),3]."";
$showlist[ToNum($showline),4] = $GetData[ToNum($Line),4]."";
$showlist[ToNum($showline),5] = $GetData[ToNum($Line),5]."";
$showlist[ToNum($showline),6] = $GetData[ToNum($Line),6]."";
$showlist[ToNum($showline),7] = $GetData[ToNum($Line),7]."";
$showline = $showline+1;
ENDIF
ENDFOR
ENDFOR
ENDIF
ENDIF

#############################
#Set Fastest/Slowest Time
#############################
$WorstTime = 0;
$BestTime = 999999;
FOR ($Line=0;$Line<=$Count_GetNumber;$Line=$Line+1)
IF( IsNum($showlist[ToNum($Line),4]) == TRUE) THEN
IF (ToNum($BestTime) > ToNum($showlist[ToNum($Line),4])) THEN #FASTER THAN
$BestTime = $showlist[ToNum($Line),4]; #Save Current BestTime
ENDIF
IF (ToNum($WorstTime) < ToNum($showlist[ToNum($Line),4])) THEN #SLOWER THAN
$WorstTime = $showlist[ToNum($Line),4]; #Save Current WorstTime
ENDIF
ENDIF
ENDFOR

DisplayList(Getcurrentplayervar("RallyTimeStage"),getcurrentplayervar("RallyTimeTablePage")*15);
EndSub

Last edited by Bass-Driver, .
Bass-Driver
S3 licensed
i might found an solution, which is very stupid i think:

I just created a new Var for the array, inside the testarr sub-routine

CatchEvent OnLapperStart()
OnLapperStart_Test();
EndCatchEvent

Sub OnLapperStart_Test()
GlobalVar $number_array;
GlobalVar $new_number_array;

$number_array[0] = 1;
$number_array[1] = 2;
$number_array[2] = 3;
$number_array[3] = 4;
$number_array[4] = 5;
$number_array[5] = 6;
$number_array[6] = 7;
$number_array[7] = 8;
EndSub

CatchEvent OnMSO( $userName, $text ) # Player event
$idxOfFirtsSpace = indexOf( $text, " ");

IF( $idxOfFirtsSpace == -1 ) THEN
$command = $text;
$argv = "";
ELSE
$command = subStr( $text,0,$idxOfFirtsSpace );
$argv = trim( subStr( $text,$idxOfFirtsSpace ) );
ENDIF

SWITCH( $command )
CASE "!testarr":
testarr ( $KeyFlags , $argv );
BREAK;
ENDSWITCH
EndCatchEvent

Sub testarr( $KeyFlags,$id )

####NEW VAR####
$NewArray = $number_array;

dumpVar ($NewArray);
$counter=0;
FOREACH( $val IN $NewArray)
writeline ( "DEBUG ARR: " . $val["value"] );
IF ($val["value" ] != 3)
THEN
$new_number_array[$counter] = $val["value" ];
ENDIF

$counter=$counter+1;
ENDFOREACH

dumpVar ($new_number_array);
EndSub

Bass-Driver
S3 licensed
Show me the code, before i test my own code. Tongue
Bass-Driver
S3 licensed
Well instead of using the Insimcircles. Use RegisterNodeAction and then a Sub-routine like Yisc[NL] said.
Bass-Driver
S3 licensed
Here a small explaination how i did this:

1) Add a insim circle. When someone drives into that circle the following event will be executed.


Event OnCrossingChecker($userName,$Flags,$Time,$Object,$UserSpeed,$CircleIndex)
EndEvent

2) Created a globalvar ($CountPlayers for example) that will count the many players who entered the circle.
So for each player that will enter the circle +1.

IF ($CountPlayers == 1) THEN
#Blah
ENDIF

3) Use the joinrequest() function to spawn the players to the moon.
Bass-Driver
S3 licensed
Nice server Thumbs up
Challenging for sure
FGED GREDG RDFGDR GSFDG