Jump to content

[TUT] Car Spawn systeem


Recommended Posts

Geplaatst: (bewerkt)

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:

#include <a_samp>

.

Dit is voor alle basis dingen!

Dan maak je de kleuren ROOD,GROEN en WIT aan, op deze manier:

#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_RED 0xFF0000AA
#define COLOR_GREEN 0x00FF00AA

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:

enum pInfo()
{
  pCarSpawned,
  pCarSpawnedID,
};
new PlayerInfo[MAX_PLAYERS][pInfo];

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:

#include <a_samp>

#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_RED 0xFF0000AA
#define COLOR_GREEN 0x00FF00AA

enum pInfo()
{
pCarSpawned,
pCarSpawnedID,
};
new PlayerInfo[MAX_PLAYERS][pInfo];

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;
}

Ziezo, nu alleen nog de STRTOK!

Deze hoef je niet uit je hoofd te weten ;)

Zet gewoon ONDER aan het script dit;

strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
	index++;
}

new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
	result[index - offset] = string[index];
	index++;
}
result[index - offset] = EOS;
return result;
}

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

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
Geplaatst:

Sorry voor dubbelpost, ik kan niet bumpen (denk ik)

Waarom wordt hier niet op gereageerd en op de rest wel...

Gvm

Geplaatst:

Ten eerste wil ik zeggen dat strtok oud is, en wordt afgekeurd door veel mensen omdat het te traag is etc. Maar dat terzijde

Verder moet je nooit een lengte van 256 gebruiken voor strings (enkel als je MySQL of files werkt) omdat de maximale lengte van een chatbericht 128 cellen is.

Verder leuke tutorial, en ik denk dat veel mensen iets zullen hebben aan de uitleg van de enum.

Geplaatst:

Verder moet je nooit een lengte van 256 gebruiken voor strings (enkel als je MySQL of files werkt) omdat de maximale lengte van een chatbericht 128 cellen is.

Bedankt voor de tip!

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...