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

Top Posters In This Topic

Featured Replies

Geplaatst:
comment_860012

Dat is niet zo heel moeilijk. Ik heb een paar voorbeelden uit mijn script hieronder geplaatst, met een kleine toelichting. Dan zou het wel moeten lukken. :)

new Tec9;

Plaats dit stukje helemaal bovenaan je script; boven de 'OnGameModeInit', onder de includes.

	AddStaticPickup(372, 2, X, Y, Z);
Tec9 = CreatePickup(372, 2, X, Y, Z);

Plaats zo'n stukje code bij je 'OnGameModeInit' callback. Dan zal het wapen zelf al spawnen. Probleem is, dat je nu vrij weinig kogels hebt. De X, Y en Z kun je aanpassen naar je eigen coördinaten. Parameters:

CreatePickup(WeaponModel, Type pickup, X, Y, Z);

		if(pickupid == Tec9) {
	   GivePlayerWeapon(playerid, 32, 100000);
	   return 1;
	}

Dit stukje code bepaald het aantal kogels als je dat model wapen oppakt. Zoals je ziet heb ik in het hele voorbeeld de Tec9 genomen. Dit stukje code plaats je bij de 'OnPlayerPickUppickup' callback. Zorg er voor dat je de wapens benoemd op de manier bij het tweede stukje code. Paramaters:

GivePlayerWeapon(playerid, WeaponID, aantal kogels);

Zoals je ziet verschilt er één ding bij Code#2 en Code#3. Bij Code#2 moet je het weaponmodel hebben, en bij Code#3 het weaponID. Houdt deze dus goed uit elkaar. :)

Geplaatst:
comment_860090

oke bedankt!! ^_^

weet ik dat ook weer

wat is het id van een body armor???

ik kan hem nergens op internet vinden :cry:

ik heb bestuurbare vliegtuigjes neergezet maar ik kan er niet in wat kan ik daar tegen doen?

Geplaatst:
comment_860164

Allereerst de Body Armour maar eens. Dat is modelnummer 1242. Je hoet hiervoor alleen maar een AddStaticPickup lijn te maken. Voeg voor de rest weer de zelfde gegevens in. ;)

Het bestuurbare vliegtuigje klopt; hier kun je nooit in. Dit is veel te klein, en zoals je al zei, alleen maar bestuurbaar. Aangezien dat niet lukt, zal het ook nu niet werken. Wel is er met het Filterscript Xtreme Administrator (XAdmin) een RC Bandit te krijgen die je wél kunt besturen. :)

Geplaatst:
comment_860647

ik heb iets gemaakt zodat je je auto kan repareren voor $500 maar er zit een fout in

if(strcmp("/fixcar", cmdtext, true) == 0)

{

GetVehicleHealth(vehicleid,100);

GivePlayerMoney(playerid,-500);

return 1;

}

wat is de fout?

Geplaatst:
  • Auteur
comment_860649
maar er zitten een fouten in

- Je gebruikt GetVehicleHealth inplaats van SetVehicleHealth

- Je hebt 'vehicleid' niet gedefineerd

- Je checkt niet of de speler wel 500 dollar heeft

- VehicleHealth gaat van 1000 tot 0 niet van 100 tot 0 zoals bij spelers.

Ohja, en je code heeft geen goede uitlijning (loose indentation)

Bewerkt: door Sandra18[NL]

Geplaatst:
comment_861008

hij doet het nu nog steeds niet:

if(strcmp("/fixcar", cmdtext, true) == 0)

{

SetVehicleHealth(vehicleid,100000);

GivePlayerMoney(playerid,-500);

GameTextForPlayer(playerid,"je auto is gerepareerd!!!",5000,5);

return 1;

}

en de players krijgen altijd 5000 in het begin dus zit maar niet in over hun geld

maar hij doet het nog steeds niet de rook gaat niet weg

Geplaatst:
comment_861015

Inderdaad, dat kan kloppen. Het repareren van een wagen is meer dan alleen die commands, daar ben je als ik me niet vergis een 'float' voor nodig. Dus dan zet je bij dat stukje command het volgende:

new Float:Carhealth;

Ik weet niet precies hoe het in elkaar steekt, maar zoiets moest het volgens mij zijn... Ik raad je aan om op het SA-MP Forum ook eventjes rond te kijken, want daar lopen veel meer experts rond. ;)

Geplaatst:
  • Auteur
comment_861017

if(strcmp("/fixcar", cmdtext, true) == 0)
{
SetVehicleHealth(GetPlayerVehicleID(playerid),1000.0);
GivePlayerMoney(playerid,-500);
GameTextForPlayer(playerid,"je auto is gerepareerd!!!",5000,5);
return 1;
}

Zullen we vanaf nu dit topic gebruiken voor vragen/problemen met deze Objects Tutorial, en niet voor probleemjes met een /fixcar command?

Zet problemen met codes/commands in het >>Het PAWN scripting problemen topic<<

Bewerkt: door Sandra18[NL]

Geplaatst:
comment_863320

error 010: invalid function or declaration

error 010: invalid function or declaration

error 010: invalid function or declaration

hij zegt opeens nadat ik dat van objecten verplaatsen had toegevoegt dat hier een error in zit:

new giveplayerid, Moneys, idx;

  • 3 maanden later...
Geplaatst:
comment_948365

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)

Bewerkt: door Remcconen

Geplaatst:
  • Auteur
comment_948413
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.

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.