Je kent het vast wel: heb je een leuk filterscript gemaakt waarmee je wat voertuigen en objecten plaatst, verdwijnen ze niet als je het filterscript unload! Gelukkig is daar wat simpels voor te maken, en hoe je dat doet leg ik uit in deze tutorial!
Okay, voordat het werkelijke scriptwerk begint, hebben we twee variabelen nodig.
Zoals je ziet worden hier de AddStaticVehicle en AddObject-functies gebruikt. Deze functies gaan wij ombuigen naar de CreateDeletableVehicle en CreateDeletableObject-functies. Maar voordat we dat doen, moeten we eerst de gamemode vertellen dat de objecten en voertuigen die we maken met CreateObject en AddStaticVehicle / CreateVehicle. Dit doen we door aan te nemen dat elk voertuig en object hiermee is gemaakt, en later de uitzonderingen toe te voegen.
public Instellingen() //de functie Instellingen code geven
{
for(new i = 0; i <= MAX_VEHICLES; i++) //Als i nog kleiner is als 700, voer de code dan uit en maak i er eentje groter
{
VerwijderbareAuto[i] = 0; //Het is geen verwijderbare auto.
}
for(new j = 0; j <= MAX_OBJECTS; j++) //Als j kleiner is als 150, voer de code dan uit en maak j er eentje groter
{
VerwijderbaarObject[j] = 0; //Het is geen verwijderbaar object
}
}
Nu gaan we de CreateDeletableVehicle, CreateDeletableObject, CreateAllVehicles, CreateAllObjects, DeleteAllVehicles en DeleteAllObjects functies maken. Omdat het nogal moeilijk is om dit zin voor zin uit te leggen, plaats ik de code maar even op een andere manier, namelijk met commentaar erbij.
public CreateDeletableVehicle(modelid, Float:x, Float:y,Float:z, Float:angle, color1, color2)
{
// De functie CreateDeletableVehicle maken
new vehid;
// Een variabele maken om het id van het voertuig in op te slaan
vehid = AddStaticVehicle(modelid, x, y, z, angle, color1, color2);
// Het voertuig neerzetten
VerwijderbareAuto[vehid] = 1;
// Het voertuig is verwijderbaar.
return vehid;
// Het id van het voertuig returnen.
}
public CreateDeletableObject(modelid, Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ)
{
// De functie CreateDeletableObject maken
new obid;
// Variabele maken om het id van het object in op te slaan
obid = CreateObject(modelid, X, Y, Z, rX, rY, rZ);
// Het object maken
VerwijderbaarObject[obid] = 1;
// Het object is verwijderbaar
return obid;
// Het id van het net gemaakte object returnen.
}
public DeleteAllVehicles()
{
// De functie DeleteAllVehicles maken
for(new i = 0; i <= MAX_VEHICLES; i++)
// Maak de nieuwe variabele i aan, als deze kleiner is als 700 is wordt de code uitgevoerd en 1 bij i opgeteld.
{
if(VerwijderbareAuto[i] == 1)
// Als de auto verwijderbaar is...
{
DestroyVehicle(i);
// De auto verwijderen
VerwijderbareAuto[i] = 0;
// De auto is niet meer verwijderbaar
}
}
}
public DeleteAllObjects()
{
// De functie DeleteAllObjects maken
for(new i = 0; i <= MAX_OBJECTS; i++)
// Maak de nieuwe variabele i aan, als deze kleiner is als 150 is wordt de code uitgevoerd en 1 bij i opgeteld.
{
if(VerwijderbaarObject[i] == 1)
// Als het object verwijderbaar is...
{
DestroyObject(i);
// Het object verwijderen
VerwijderbaarObject[i] = 0;
// Het object is niet meer verwijderbaar
}
}
}
Dit zijn de belangrijkste functies. Nu moeten we alleen nog de CreateAllVehicles en CreateAllObjects functie's toevoegen, maar de inhoud van deze functies hangt compleet af van welke objecten en voertuigen je wil maken. Maar, je moet de objecten en voertuigen toevoegen in deze functie! Als je dit doet kan je namelijk de objecten en voertuigen ook verwijderen met bijvoorbeeld een command! Deze functies zien er dus ongeveer zo uit:
Nu rest ons nog een ding: we moeten de objecten en voertuigen laten maken / spawnen als het filterscript geladen wordt. Dit doen we in de OnFilterscriptInit-callback:
public OnFilterscriptInit()
{
CreateAllVehicles();
CreateAllObjects();
return 1;
}
Hoewel, het is ook wel handig als de voertuigen verdwijnen als je het filterscript unload. Dat kan bij de OnFilterscriptExit-callback:
public OnFilterscriptExit()
{
DeleteAllVehicles();
DeleteAllObjects();
return 1;
}
Waarom gebruik je forwards en publics?
Vrij simpel. Dit is niet per se nodig, maar als je ooit eens een timer of iets dergelijks wil toepassen op een van deze functies is het wel nodig. Dit is dus simpelweg om moeite in de toekomst te besparen .
HINT: Voertuigen verwijderen met een command:
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/delete", cmdtext, true) == 0)
{
DeleteAllVehicles();
DeleteAllObjects();
return 1;
}
return 0;
}
Als je alles bij elkaar gooit, komt het script er zo uit te zien:
Tutorial
Verwijderbare objecten en voertuigen maken
Welkom!
Je kent het vast wel: heb je een leuk filterscript gemaakt waarmee je wat voertuigen en objecten plaatst, verdwijnen ze niet als je het filterscript unload! Gelukkig is daar wat simpels voor te maken, en hoe je dat doet leg ik uit in deze tutorial!
Okay, voordat het werkelijke scriptwerk begint, hebben we twee variabelen nodig.
Zoals je ziet worden hier de AddStaticVehicle en AddObject-functies gebruikt. Deze functies gaan wij ombuigen naar de CreateDeletableVehicle en CreateDeletableObject-functies. Maar voordat we dat doen, moeten we eerst de gamemode vertellen dat de objecten en voertuigen die we maken met CreateObject en AddStaticVehicle / CreateVehicle. Dit doen we door aan te nemen dat elk voertuig en object hiermee is gemaakt, en later de uitzonderingen toe te voegen.
Nu gaan we de CreateDeletableVehicle, CreateDeletableObject, CreateAllVehicles, CreateAllObjects, DeleteAllVehicles en DeleteAllObjects functies maken. Omdat het nogal moeilijk is om dit zin voor zin uit te leggen, plaats ik de code maar even op een andere manier, namelijk met commentaar erbij.
Dit zijn de belangrijkste functies. Nu moeten we alleen nog de CreateAllVehicles en CreateAllObjects functie's toevoegen, maar de inhoud van deze functies hangt compleet af van welke objecten en voertuigen je wil maken. Maar, je moet de objecten en voertuigen toevoegen in deze functie! Als je dit doet kan je namelijk de objecten en voertuigen ook verwijderen met bijvoorbeeld een command! Deze functies zien er dus ongeveer zo uit:
Nu rest ons nog een ding: we moeten de objecten en voertuigen laten maken / spawnen als het filterscript geladen wordt. Dit doen we in de OnFilterscriptInit-callback:
Hoewel, het is ook wel handig als de voertuigen verdwijnen als je het filterscript unload. Dat kan bij de OnFilterscriptExit-callback:
Waarom gebruik je forwards en publics?
Vrij simpel. Dit is niet per se nodig, maar als je ooit eens een timer of iets dergelijks wil toepassen op een van deze functies is het wel nodig. Dit is dus simpelweg om moeite in de toekomst te besparen
.
HINT: Voertuigen verwijderen met een command:
Als je alles bij elkaar gooit, komt het script er zo uit te zien:
Klik!
Veel succes ermee, en mocht er iets niet duidelijk zijn, vraag het gerust!
Bewerkt: door David22