[Tutorial] Absolute beginner tutorials [SC]
#3

We zijn alweer toe aan tutorial 3 in de Simple Commands reeks! In deze tutorial gaan we kennis maken met voertuigen.

3e commando: /healmycar
Nu we basiskennis hebben van het veranderen van het leven van een persoon kunnen we deze kennis ook bij auto's toepassen.

Het commando
Bij auto's (eigenlijk alle voertuigen) is het eigenlijk hetzelfde als bij personen. Alleen dan 10x erger. Maak je maar geen zorgen, met erger bedoel ik niet het script gedeelte - dat is maar 2x erger - maar het leven dat je hebt. Als persoon kan je maximaal 100.0 leven hebben, als voertuig heb je 1000.0 leven. Rond de 300.0 komt er rook uit volgens mij, maar dat is een beetje irrelevant.

De functies die we vandaag gaan behandelen zijn: Allereerst het commando die we vroeger (SAMP v0.2.x) gebruikten om het voertuig weer heel te maken:
pawn Код:
if(!strcmp("/healmycar",cmdtext,true))
{
    new vehicleID = GetPlayerVehicleID(playerid); // haal het voertuig ID op
    SetVehicleHealth(vehicleID,1000.0); // set het leven van het voertuig op 1000 (dus vol)
    SendClientMessage(playerid, 0xFF0000AA, "Je voertuig is gemaakt!"); // stuur een bericht naar de speler
    return 1; // geef aan dat het commando is gevonden
}
Het voertuig was gerepareerd en je kon er weer flink mee beuken op muren en zo. Hij zag er echter niet netjes uit. Hij leek nog steeds helemaal beschadigd (voor jou, voor anderen was er nooit schade te zien.. zo ver was de sync nog niet).

In SA:MP 0.3 is er een extra functie bij gekomen:
pawn Код:
RepairVehicle(vehicleid)
Deze functie zet de VehicleHealth, zoals we dat dan mooi noemen, op 1000.0 maar repareert ook de visuele schade. Je voertuig is dan weer helemaal heel! We kunnen deze functie als volgt gebruiken:
pawn Код:
if(!strcmp("/healmycar",cmdtext,true))
{
    new vehicleID = GetPlayerVehicleID(playerid); // haal het voertuig ID op
    RepairVehicle(vehicleID); // repareer het voertuig
    SendClientMessage(playerid, 0xFF0000AA, "Je voertuig is gerepareerd! Moet je eens zien hoe mooi!"); // stuur een bericht naar de speler
    return 1; // het commando is gevonden
}
Om toch even te zeuren over het gebruik van een variabele in deze code:
Gebruik geen onnodige variabelen. De twee lijnen die hierboven zijn beschreven (GetPlayerVehicleID & RepairVehicle) kunnen makkelijk in 1 regel en dan is er geen extra geheugen nodig. Door dit te doen komt het commando op het volgende uit:
pawn Код:
if(!strcmp("/healmycar",cmdtext,true))
{
    RepairVehicle(GetPlayerVehicleID(playerid)); // repareer het voertuig waar de speler in zit
    SendClientMessage(playerid, 0xFF0000AA, "Je voertuig is gerepareerd! moet je eens zien hoe mooi!"); // stuur een bericht naar de speler
    return 1; // het commando is gevonden
}
Op die manier sla je geen variabele op (vehicleID) en spaar je geheugen, wat je nodig zult hebben bij een grote gamemode.

Level up!
Je zult je wel afvragen wat hier nu weer komt. We spelen immers geen MMO of een ander spel (ja, SA:MP, maar nu even niet, je zit nu op het forum). We gaan onder dit kopje een klein beetje geavanceerdere dingen uitproberen. Als je dus al wat programmeerkennis hebt (bijvoorbeeld in PHP, ASP, C++, C, etc), of je wilt dit alvast proberen - maak je maar geen zorgen, het is allemaal makkelijke taal -, dan kan je hier wat extra lezen wat je zeker kunt (en later ook zult moeten) gebruiken om je commando's net dat beetje extra te geven dat ze nodig hebben.

Het eerste wat we gaan toevoegen aan onze commando's zijn if-statements (Als je nog niet weet wat het zijn dan kan je tot nu nog even op de wiki-pagina terecht. Later zal iemand hier ongetwijfeld een tutorial voor maken in het nederlands zodat het makkelijk te begrijpen is voor SA:MP-scripters).

Je hebt je eerste IF-statement al gebruikt bij het controleren op je commando:
pawn Код:
if(!strcmp("/healmycar",cmdtext,true))
We maken nu een extra if-statement in onze code om te controleren of de persoon wel in een voertuig zit! Als de speler te voet is, zit die niet in een voertuig en kan hij die ook niet maken. Om erachter te komen of de speler in een voertuig zit kunnen we de functie IsPlayerInAnyVehicle gebruiken. Deze functie geeft een 1 (true) terug als de speler in een voertuig zit en 0 (false) als die te voet is. Dat betekent dat we een IF-statement kunnen maken als volgt:
pawn Код:
if(IsPlayerInAnyVehicle(playerid) == 1) { <code> }
Omdat "== 1" gelijk staat aan het helemaal niet gebruiken (als de statement waar is, dan voert hij hem uit) kunnen we die weglaten zodat de code duidelijker wordt:
pawn Код:
if(IsPlayerInAnyVehicle(playerid)) { }
Om te controleren of de speler niet in een voertuig is gebruik je een ELSE-statement. Dit betekent: als het IF-statement niet waar is, ga dan hierin. Dus:
pawn Код:
if(IsPlayerInAnyVehicle(playerid)) { // code als conditie waar is
} else { // code als conditie niet waar is
}
Dit kunnen we ook sneller krijgen als je geen ELSE wilt, of als het overzichtelijker wordt op een andere manier te coderen:
pawn Код:
if(!IsPlayerInAnyVehicle(playerid)) { // deze code wordt uitgevoerd als de speler NIET in een voertuig is }
Onze functie wordt nu als volgt:
pawn Код:
if(!strcmp("/healmycar",cmdtext,true))
{
    if(!IsPlayerInAnyVehicle(playerid))
    {
        SendClientMessage(playerid, 0xFF0000AA, "Je zit niet in een voertuig!");
    } else {
        RepairVehicle(GetPlayerVehicleID(playerid));
        SendClientMessage(playerid, 0xFF0000AA, "Je voertuig is gerepareerd! Moet je eens zien hoe mooi!");
    }
    return 1;
}
Deze code kan nog compacter, maar hier komen we in een volgende tutorial nog wel op terug.

-Wijzigingen voorbehouden-
Reply


Messages In This Thread
Absolute beginner tutorials [SC] - by mamorunl - 23.04.2011, 16:19
/healme -Absolute beginner- [SC]2 - by mamorunl - 24.04.2011, 20:11
Re: Absolute beginner tutorials [SC] - by mamorunl - 27.04.2011, 15:43
Re: Absolute beginner tutorials [SC] - by mamorunl - 02.05.2011, 13:41
Re: Absolute beginner tutorials [SC] - by Hiddos - 03.05.2011, 16:16
Re: Absolute beginner tutorials [SC] - by swell - 28.08.2012, 14:24
Re: Absolute beginner tutorials [SC] - by swell - 28.08.2012, 15:11
Re: Absolute beginner tutorials [SC] - by swell - 28.08.2012, 15:18
Re: Absolute beginner tutorials [SC] - by swell - 28.08.2012, 15:25
Re: Absolute beginner tutorials [SC] - by Dredd - 28.08.2012, 20:19

Forum Jump:


Users browsing this thread: 3 Guest(s)