Jump to content
Geplaatst:
comment_805528

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
  • Bezichtigingen 12k
  • Created
  • Laatste reactie

Top Posters In This Topic

Featured Replies

Geplaatst:
comment_948417
Ik heb hem ook gebruikt voor een FS van mij. Ik gebruik wel xObjects. Ik heb nu alleen nog 26error's. Opgelost. Nu alleen 1 andere error:
ProGear\filterscripts\MajorIsland.pwn(705) : error 030: compound statement not closed at the end of file (started at line 576)

Je bent nog een } vergeten.

Had ook al aan een vriend gevraagt. Hij zag het ook al meteen. een } en return 0"vergeten :$

  • 2 weken later...
  • 2 weken later...
Geplaatst:
comment_976900

ik probeer een gate bij lspd te maken maar

Mijn gate doet het niet het bericht komt er wel te staan maar de gate verplaats niet

Poort = CreateObject(974,1589.2201,-1639.6141,13.2855,6.5951);

if (strcmp("/open", cmdtext, true, 10) == 0) 
{
MoveObject(Poort, 1589.2201,-1639.6141,13.2855,6.5951, 3);
SendClientMessage(playerid, COLOR_GREEN, "De poort is nu geopend.");
return 1;
}

if (strcmp("/close", cmdtext, true, 10) == 0)
{
MoveObject(Poort, 1589.2201,-1639.6141,18.2855,6.5951, 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;
}

Geplaatst:
comment_976923

Heej,

Volgens mij zit het erin dat de coordinaten bij zowel CreateObject als bij /open en /close nagenoeg hetzelfde zijn.

Bij /open zullen coordinaten moeten staan van de plaats waar het hek bij gebruik van die command /open naar toe moet.

Geplaatst:
comment_977138

Volgens mij zit die fout in de commands zelf.

Ik heb van bovenaan geteld naar regels 40,45 en 47, als ik goed geteld heb kom ik uit op de plaats waar deze code's staan:

{if (strcmp("/open", cmdtext, true, 10) == 0) //Invoer van het commando
if (strcmp("/close", cmdtext, true, 10) == 0)
if (strcmp("/destroy", cmdtext, true, 10) == 0)

Dit moet worden:

if(strcmp(cmd, "/open", true) == 0)
if(strcmp(cmd, "/close", true) == 0)
if(strcmp(cmd, "/destroy", true) == 0)

Bij regels 45 en 52 staat loose indentation, dit betekend dat het script niet goed uitgelijnt is.

geef die regels een tabje (of spatie) meer of minder zodat alles netjes staat en je zult er vanaf zijn.

Als je wilt zien hoe je goed uitlijnt: bekijk de scripts van Sandra

Bewerkt: door Ymosky

Geplaatst:
comment_977203
nu geeft hij bij alle bij dit aan

C:\Documents and Settings\erryn de vries\Mijn documenten\Sa mp server\pawno\lol.pwn(56) : error 017: undefined symbol "cmd"

sorry, kleinigheidje vergeten:

Plaats hieronder:

public OnPlayerCommandText(playerid, cmdtext[])
{

Het volgende:

new cmd[256];

En deze evt. ook, weet ik niet meer 100% zeker, kzou zeggen probeer ff uit.

cmd = strtok(cmdtext, idx);

Dan zou hij het moeten doen.

Bewerkt: door Ymosky

  • 1 maand later...
Geplaatst:
comment_1017834

Dat zul je zelf toch moeten gaan zoeken. Het is niet de bedoeling dat je hier object id's gaat vragen. Er zijn er duizenden van en als je een id van een object moet weten en iedereen dat hier zou vragen zou het een grote chaos worden.

O ja en ik weet niet zeker maar van alleen water is er geloof ik geen id. Heb het in ieder geval nog nooit gezien.

Bewerkt: door Juwayri

  • 4 maanden later...

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

Recent actief 0

  • Er zijn hier geen geregistreerde gebruikers aanwezig.