Jump to content

[Tutorial]Objects


Recommended Posts

Geplaatst: (bewerkt)

Tutorial Objecten



Gemaakt door Sandra18[NL]

**In deze tutorial leg ik jullie uit hoe je objecten kunt maken, vernietigen, verplaatsen en draaien.

Wat heb je nodig:

- Pawno

- Sa:mp 0.2.* Script-tools

- Basis scriptkennis

- En niet te vergeten een kop koffie :7

Sinds sa:mp 0.2 is uitgebracht is het mogelijk om zelf objecten aan een server toe te voegen.

Dit word dan ook veel gedaan.

Veel beginners willen graag poorten in hun server hebben, maar hebben geen idee hoe ze dat moeten aanpakken.

Daarom heb ik maar deze tutorial gemaakt.

Vragen zijn natuurlijk altijd welkom.

Goed, om te beginnen leg ik eerst kort uit welke functies we gaan gebruiken:

- CreateObject(model-id, X, Y, Z, X-rot, Y-rot, Z-rot);

- DestroyObject(object-id)

- MoveObject(object-id, nieuwe-X, nieuwe-Y, nieuwe-Z, snelheid)

- SetObjectRot(id, nieuwe-X-rot, nieuwe-Y-rot, nieuwe-Z-rot);

Als voorbeeld nemen we als object een hek. (model-id = 974)

Deze zetten we in het midden van GroveStreet.

Coördinaten: (2486.0, -1667.0, 13.0).

Om je script ordelijk te houden, is het verstandig om de objecten namen te geven. Zo kan je ze makkelijk uit elkaar houden.

Wij zullen ons hek de naam 'Poort' geven. (Let op de hoofdletter P)

Daarvoor moeten we dus een nieuw variabele maken.

We maken 3 verschillende commando's:

/open

/close

/destroy

We gebruiken SendClientMessage met de kleur groen. (die moeten we dus nog definieren)

We beginnen dus met:

#include <a_samp>
#define COLOR_GREEN 0x00FF00AA

new Poort;

Dan volgt de 'main' (Dit zie je in de console verscheinen)

main()
{
print("\n00000000000000000000000000000000");
print("TutorialGameMode by Sandra18[NL]");
print("00000000000000000000000000000000\n");
}

Vervolgende de OnGameModeInit() (Hier moet alles instaan wat er tijdens het opstarten van de gamemode moet gebeuren.

Normaal zet je hier altijd de AddPlayerClasses en AddStaticVehicles neer.

Hier moet je dus ook de CreateObject-functie plaatsen omdat het hek bij het opstarten van de gamemode al aanwezig moet zijn:

public OnGameModeInit()
{
SetGameModeText("TutorialGameMode");
AddPlayerClass(93, 2494.4888, -1675.5619, 13.3359, 55.9011,0,0,0,0,0,0); // 1 spawnplek

//CreateObject(id, X, Y, Z, X-rotatie, Y-rotatie, Z-rotatie); 
//Je kunt het object een naam geven op deze manier:
Poort = CreateObject(974, 2486.0,-1667.0,13.0, 0.0,0.0,0.0);

return 1;
}

Dan nog het gedeelten waar je je karakter moet uitkiezen. (Voorbeeld):

public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid,-812.0018,-1949.3617,9.3004); // Waar de speler te zetten voor het spawn-menu
SetPlayerCameraPos(playerid,-816.4528,-1945.0082,9.0269); // Camera voor het spawn-menu
SetPlayerCameraLookAt(playerid,-812.0018,-1949.3617,9.3004); // Waar moet de camera naar toe kijken?
return 1;
}

Nu is het tijd voor de commando's:

Het commando /destroy:

if (strcmp("/destroy", cmdtext, true, 10) == 0)  // invoer van het commando
{
DestroyObject(Poort);  // functie om het object te vernietigen
SendClientMessage(playerid, COLOR_GREEN, "De poort is nu vernietigd."); // verzend een bericht
return 1;
}

Het commando: /open:

Ik zet in dit commando alle 6 manieren om een poort te bewegen:

- Verschuiven over de X-as

- Verschuiven over de Y-as

- Verschuiven over de Z-as

- Roteren t.o.v. de X-as

- Roteren t.o.v. de Y-as

- Roteren t.o.v. de Z-as

Ik scheid elke manier door 2 slashes //

Zo kan je van die functiee een 'aantekening' maken, en dus word die functie niet gebruikt.

Voor de snelheid van het bewegen gebruiken we nu '3' en we zullen bij de rotaties telkens met een hoek van 90 graden draaien.

De begin positie van de poort is: 2486.0,-1667.0,13.0

-Om de poort te verschuiven langs de X-as, dan verhoog je de 2486.0:

MoveObject(Poort, 2495.0, -1667.0, 13.0, 3);

-Om de poort te verschuiven langs de Y-as, dan verhoog je de -1667.0:

MoveObject(Poort, 2486.0, -1660.0, 13.0, 3);

-Om de poort te verschuiven langs de Z-as, dan verhoog je de 13.0:

MoveObject(Poort, 2486.0, -1667.0, 20.0, 3);

De standaard rotatie van de Poort is 0, 0, 0

-Om de poort t.o.v. de X-as te roteren, dan verhoog je de 1e 0:

SetObjectRot(Poort, 90, 0, 0);

-Om de poort t.o.v. de Yas te roteren, dan verhoog je de 2e 0:

SetObjectRot(Poort, 0, 90, 0);

-Om de poort t.o.v. de Z-as te roteren, dan verhoog je de 3e 0:

SetObjectRot(Poort, 0, 0, 90);

De code word dus als volgt:

if (strcmp("/open", cmdtext, true, 10) == 0) //Invoer van het commando
{
// MoveObject(objectid, nieuwe X, nieuwe Y, nieuwe Z, snelheid);
//MoveObject(Poort, 2495.0, -1667.0, 13.0, 3); //verplaatsing X
//MoveObject(Poort, 2486.0, -1660.0, 13.0, 3); //verplaatsing Y
//MoveObject(Poort, 2486.0, -1667.0, 20.0, 3); //verplaatsing Z 
//SetObjectRot(Poort, 90, 0, 0); //De poort draait nu 90 graden t.o.v. de X-as
//SetObjectRot(Poort, 0, 90, 0); //De poort draait nu 90 graden t.o.v. de Y-as
//SetObjectRot(Poort, 0, 0, 90); //De poort draait nu 90 graden t.o.v. de Z-as

SendClientMessage(playerid, COLOR_GREEN, "De poort is nu geopend."); //Verzend een bericht naar de speler
return 1;
}

Je hoeft alleen maar uit de bovenstaande code voor 1 van de functies de // weg te halen.

Ik heb vlug een filmpje gemaakt waarin ik de 6 verschillende bewegingen laat zien.

Dit filmpje staat onderaan dit bericht.

Om de poort te sluiten hoef je alleen maar de Poort te 'moven' naar de oude positie en de rotatie weer op de oude stand te zetten:

if (strcmp("/close", cmdtext, true, 10) == 0)
{
MoveObject(Poort, 2486.0, -1667.0, 13.0, 3);  //terug naar oude positie
SetObjectRot(Poort, 0, 0, 0); //terug naar oude rotatie
SendClientMessage(playerid, COLOR_GREEN, "De poort is nu gesloten.");
return 1;
}

Samenvatting:

Als jij een poort wilt die door het commando /open 5 stappen naar boven beweegt en met /close weer sluit, dan heb je deze code nodig:

#include <a_samp>
#define COLOR_GREEN 0x00FF00AA

new Poort;

main()
{
print("\n00000000000000000000000000000000");
print("TutorialGameMode by Sandra18[NL]");
print("00000000000000000000000000000000\n");
}


public OnGameModeInit()
{
SetGameModeText("TutorialGameMode");
AddPlayerClass(93, 2494.4888, -1675.5619, 13.3359, 55.9011,0,0,0,0,0,0);

//CreateObject(id, X, Y, Z, X-rotatie, Y-rotatie, Z-rotatie);
Poort = CreateObject(974, 2486.0,-1667.0,13.0, 0.0,0.0,0.0);

return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid,-812.0018,-1949.3617,9.3004); // Waar de speler te zetten voor het spawn-menu
SetPlayerCameraPos(playerid,-816.4528,-1945.0082,9.0269); // Camera voor het spawn-menu
SetPlayerCameraLookAt(playerid,-812.0018,-1949.3617,9.3004); // Waar moet de camera naar toe kijken?
return 1;
}


public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/open", cmdtext, true, 10) == 0) //Invoer van het commando
{
MoveObject(Poort, 2486.0, -1667.0, 18.0, 3); 
SendClientMessage(playerid, COLOR_GREEN, "De poort is nu geopend."); 
return 1;
}

if (strcmp("/close", cmdtext, true, 10) == 0)
{
MoveObject(Poort, 2486.0, -1667.0, 13.0, 3); 
SendClientMessage(playerid, COLOR_GREEN, "De poort is nu gesloten.");
return 1;
}

if (strcmp("/destroy", cmdtext, true, 10) == 0)
{
DestroyObject(Poort);
SendClientMessage(playerid, COLOR_GREEN, "De poort is nu vernietigd.");
return 1;
}


return 0;
}

Voor een beter uitgelijnde versie, klik >>hier<<

Tis al laat, ben niet helemaal helder meer, dus deze tutorial kan wat chaotisch zijn.

Maar als er nog vragen zijn of er iets niet duidelijk is, moet je het maar in dit topic posten.

Succes ermee

Grtz Sandra

<object width="425" height="350"><param name="movie" value="

name="wmode" value="transparent"></param><embed src="
type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>

<font color="Red">>>> Door Azer: Toegevoegd aan het "PAWN Tutorial List" topic<<<</font>

Bewerkt: door Sandra
  • Reacties 59
  • Created
  • Laatste reactie

Top Posters In This Topic

  • opacool6

    13

  • Sandra

    9

  • Ymosky

    5

  • Donwell

    5

Top Posters In This Topic

Geplaatst:

Mooie tutorial, heel handig voor de beginners.

Ikzelf gebruik een andere manier voor het verplaatsen van de objecten, deze is wat ingewikkelder.

Leuk dat je ook een filmpje met uitleg erbij heb gemaakt :)

Geplaatst:
Mooie tutorial, heel handig voor de beginners.

Ikzelf gebruik een andere manier voor het verplaatsen van de objecten, deze is wat ingewikkelder.

Leuk dat je ook een filmpje met uitleg erbij heb gemaakt :)

Thnx, maar wat is een makkelijkere manier dan?

Geplaatst:
Mooie tutorial, heel handig voor de beginners.

Ikzelf gebruik een andere manier voor het verplaatsen van de objecten, deze is wat ingewikkelder.

Leuk dat je ook een filmpje met uitleg erbij heb gemaakt :)

Thnx, maar wat is een makkelijkere manier dan?

Ik heb nog even je tut opnieuw gelezen en uiteindelijk doe je hetzelfde.

Alleen je behandeld eerst het op een andere manier.

Ik doe datgene wat in je samenvatting staat ;)

Geplaatst:

Top Tutorial, Sandra! :tu: Ik dacht er zelf ook al eens aan om zoiets te gebruiken om bepaalde gebieden af te sluiten, nu kan ik het ook eens toepassen, zal het binnenkort eens testen.

Hoe dan ook, goede uitleg, ook goed filmpje voor de uitkomst. Mijn complimenten hiervoor.

  • 2 weken later...
  • 1 maand later...
Geplaatst:

goeie uitleg Sandra :tu: zelfs ik ben er uit gekomen!

ik ga het zeker gebruiken alleen moet de lijst met objecten nog vinden weet iemand waar je die kan vinden???

alvast bedankt

Geplaatst:
goeie uitleg Sandra :tu: zelfs ik ben er uit gekomen!

ik ga het zeker gebruiken alleen moet de lijst met objecten nog vinden weet iemand waar je die kan vinden???

alvast bedankt

Echt een lijst met alle objecten is er volgens mij niet, aangezien er zo'n 18000 objecten zijn..

Het beste kan je MTA-map editor gebruiken, en daar kan je door alle objecten scrollen, daar staan dan ook de id's bij

Geplaatst:

Dan moet je eventjes de rotatie aanpassen, als ik me niet vergis is dat de Z-rotatie. Als je hem een kwartslag wil draaien, verhoog je hem tot 90 graden of 270. ;)

Geplaatst:
Dan moet je eventjes de rotatie aanpassen, als ik me niet vergis is dat de Z-rotatie. Als je hem een kwartslag wil draaien, verhoog je hem tot 90 graden of 270. ;)

oke bedankt!!

Geplaatst:

Ik denk dat niemand de id's van alle 18000 objecten uit zn/haar hoofd weet :clown:

Download gewoon MTA Map Editor en zoek daar de objecten + id's op.

Geplaatst:

Ik denk dat niemand de id's van alle 18000 objecten uit zn/haar hoofd weet :clown:

Download gewoon MTA Map Editor en zoek daar de objecten + id's op.

dat wil ik best doen maar kan geen een goede krijgen

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...