OnPlayerConnect en OnPlayerDisconnect, hierin zet ik ook wat neer om bugs te voorkomen
Dit keer geef ik het hele scriptje met commentaar
public OnPlayerConnect(playerid) //Als de speler op de server komt...
{
PlayerInfo[playerid][pCarSpawned] = 0; //Je hebt geen voertuig gespawnd
PlayerInfo[playerid][pCarSpawnedID] = (-1); //Invalide voertuig ID, dus GEEN voertuig gespawnd
return 1;
}
public OnPlayerDisconnect(playerid) //Als de speler de server verlaat...
{
if(PlayerInfo[playerid][pCarSpawned] == 1) //Heb je een voertuig gespawnd?
{
DestroyVehicle(PlayerInfo[playerid][pCarSpawnedID]); //Vernietig de voertuig die is gespawned
PlayerInfo[playerid][pCarSpawned] = 0; //Je hebt geen voertuig gespawned!
PlayerInfo[playerid][pCarSpawnedID] = (-1); //Invalide voertuig ID, dus GEEN voertuig gespawnd
return 1;
}
return 1;
}
En nu het commando zelf!
Deze zal ik van stap tot stap uitleggen
Als eerst open we het commando met: public OnPlayerCommandText(playerid, cmdtext[])
Dan maken we de volgende variables aan:
cmd[128] - Voor de STRTOK
tmp[128] - Ook voor de STRTOK
string[265] - Om een bericht te weergeven met informatie
idx - Voor STRTOK
En dan gebruiken we: cmd = strtok(cmdtext, idx);
Dan krijg je zoiets als dit:
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[128], tmp[128], string[265], idx;
cmd = strtok(cmdtext, idx);
Open het commando op deze manier:
if(!strcmp(cmd, "/vec", true))
Ik gebruik de 'veiligste' manier voor filterscripts, als je de 'normale' manier gebruikt kan je soms bugs krijgen, dat gewone commando's het niet meer goed doen door het filterscript!
Nadat je het commando hebt aangemaakt kijken we of je wel iets hebt ingevuld achter /vec
Dit doen we zo:
tmp = strtok(cmdtext, idx); //Hetgene wat je acter /vec intypt
if(!strlen(tmp)) //Als je NIKS hebt ingevuld
{
SendClientMessage(playerid, COLOR_WHITE, "GEBRUIK: /vec [Voertuig ID]"); //Stuur de gebruiker een bericht hoe het commando werkt
return 1; //Stop de rest van het commando
}
Nu maken we een 'vecid'
Op deze manier:
new vecid = strval(tmp);
De voertuig Id's in GTA SA zijn van 400 tot 611, dus we moeten een beveiliging maken, ervoor zorgen dat je niet lager of hoger doet!
Dit doen we zo:
if(vecid >= 400 && vecid <= 611)
{
En we kijken of de speler wel RCON admin is
if(IsPlayerAdmin(playerid) == 1)
{
En zoals ik al zei: We voorkomen auto spam die de server kan laten laggen! Daarom kijken we of er een voertuig al is gespawnd, als dit is gebeurd wordt de vorige verwijderd!
Dit doen we zo:
if(PlayerInfo[playerid][pCarSpawned] == 1) //Zoals ik al zei: Heb je een voertuig gespawnd?
{
DestroyVehicle(PlayerInfo[playerid][pCarSpawnedID]); //En verwijder de auto
PlayerInfo[playerid][pCarSpawned] = 0; //Je hebt geen voertuig gespawnd
PlayerInfo[playerid][pCarSpawnedID] = (-1); //Invalide voertuig ID, dus GEEN voertuig gespawnd
}
Zo, de oude is verwijderd!
Nu gaan we een nieuwe aanmaken
new Float:pX, Float:pY, Float:pZ, Float: pA; //Voor de positie van de speler
GetPlayerPos(playerid, pX, pY, pZ); //Waar is de speler? Hier wordt het voertuig namelijk neergezet!
GetPlayerFacingAngle(playerid, pA); //Waar kijkt de speler naar. Hier kijkt het voertuig ook ONGEVEER naar (het is een beetje gebugd)
PlayerInfo[playerid][pCarSpawned] = 1; //Je hebt een voertuig gespawnt
PlayerInfo[playerid][pCarSpawnedID] = CreateVehicle(vecid, pX, pY, pZ, pA, -1, -1, 900); //Maak het voertuig aan op de plek van de speler
PutPlayerInVehicle(playerid, PlayerInfo[playerid][pCarSpawnedID], 0); //Plaats de speler als bestuurder in het voertuig!
format(string, sizeof string, "Je hebt een voertuig gespawnd, Model: %d, ID: %d", vecid, PlayerInfo[playerid][pCarSpawnedID]); //Maak een string aan met info
SendClientMessage(playerid, COLOR_GREEN, string); //Laat de geformatteerde string aan de speler zien
return 1; //idk... XD
De auto is aangemaakt! Nu de 'ERROR' berichten maken
Zet meteen onder hetgeen van zonet dit:
}
else //Als je GEEN administrator bent
{
SendClientMessage(playerid, COLOR_RED, "Je bent geen administrator!"); //Laat de speler het bericht zien dat hij niet een RCON admin is!
}
}
else //Als hetgeen achter /vec lager dan 400 is of hoger dan 611
{
SendClientMessage(playerid, COLOR_RED, "Voertuig Model moet boven 400 zijn en onder 611!"); //Laat de speler het bericht zien
}
return 1;
}
return 0;
}
En nu het resultaat, ik heb geen zin om een filmpje te maken dus ik typ het gewoon
Ik kom ingame.
Ik typ "/vec". De server zegt: "GEBRUIK: /vec [Vehicle ID]"
Ik typ nu "/vec 522" (dat is een nrg-500). De server zegt: "Je bent geen administrator!"
Nu log ik in als RCON. Ik typ nog eens "/vec 522". Ik krijg een NRG-500, waar ik meteen opzit en de server zegt: Je hebt een voertuig gespawnd, Model: 522, ID: 154"
Nu typ ik "/vec 411". Mijn NRG-500 verdwijnt en ik zit opeens in een infernus!
De server zegt weer hetzelfde als zonet, alleen is het Model: 411 in plaats van Model: 522
Dat was de tutorial!
Zoals ik in het begin zei: aan het einde van de tutorial vind je een link voor het volledige script ZONDER commentaar
Hoi!
Dit is één van de beste car spawn systemen!
Je kan als admin /vec [Voertuig ID] gebruiken, en je kan maar één auto!
Als je voor de 2e keer een auto spawnt dan wordt de vorige VERWIJDERD, Dit is om spam tegen te staan (waardoor server gaat laggen)
Ik zal uitleggen hoe je zoiets maakt, en aan het einde van de tutorial vind je een link met het hele systeem ZONDER commentaar!
Laten we bovenaan de pagina beginnen
Als eerst include je <a_samp> op deze manier:
.
Dit is voor alle basis dingen!
Dan maak je de kleuren ROOD,GROEN en WIT aan, op deze manier:
En nu de informatie waarin de volgende informatie wordt opgeslagen:
- Heb je al een vehicle gespawned?
- Wat is de gespawnde voertuig ID
Die voegen we zo toe:
de pCarSpawned is 'heb je al een vehicle gespawned?'
de pCarSpawnedID is 'Wat is de gespawnde voertuig ID'
Dus als het goed is heb je nu dit:
OnPlayerConnect en OnPlayerDisconnect, hierin zet ik ook wat neer om bugs te voorkomen
Dit keer geef ik het hele scriptje met commentaar
En nu het commando zelf!
Deze zal ik van stap tot stap uitleggen
Als eerst open we het commando met: public OnPlayerCommandText(playerid, cmdtext[])
Dan maken we de volgende variables aan:
cmd[128] - Voor de STRTOK
tmp[128] - Ook voor de STRTOK
string[265] - Om een bericht te weergeven met informatie
idx - Voor STRTOK
En dan gebruiken we: cmd = strtok(cmdtext, idx);
Dan krijg je zoiets als dit:
Open het commando op deze manier:
if(!strcmp(cmd, "/vec", true))
Ik gebruik de 'veiligste' manier voor filterscripts, als je de 'normale' manier gebruikt kan je soms bugs krijgen, dat gewone commando's het niet meer goed doen door het filterscript!
Nadat je het commando hebt aangemaakt kijken we of je wel iets hebt ingevuld achter /vec
Dit doen we zo:
Nu maken we een 'vecid'
Op deze manier:
De voertuig Id's in GTA SA zijn van 400 tot 611, dus we moeten een beveiliging maken, ervoor zorgen dat je niet lager of hoger doet!
Dit doen we zo:
En we kijken of de speler wel RCON admin is
En zoals ik al zei: We voorkomen auto spam die de server kan laten laggen! Daarom kijken we of er een voertuig al is gespawnd, als dit is gebeurd wordt de vorige verwijderd!
Dit doen we zo:
Zo, de oude is verwijderd!
Nu gaan we een nieuwe aanmaken
De auto is aangemaakt! Nu de 'ERROR' berichten maken
Zet meteen onder hetgeen van zonet dit:
Ziezo, nu alleen nog de STRTOK!
Deze hoef je niet uit je hoofd te weten
Zet gewoon ONDER aan het script dit;
En nu het resultaat, ik heb geen zin om een filmpje te maken dus ik typ het gewoon
Dat was de tutorial!
Zoals ik in het begin zei: aan het einde van de tutorial vind je een link voor het volledige script ZONDER commentaar
Die is hier: http://pastebin.com/ityDUMN1
Veel plezier!
Ik hoop dat je dit heeft geholpen!
Mocht je nog problemen hebben hiermee, of een ander script, of als je ergens uitleg over wilt.
Ik maak een tutorial voor je, in het forum of via PM!
Groeten,
Kwarde
Bewerkt: door Kwarde