Jump to content
Geplaatst:
comment_811488

Tutorial Menu's



Gemaakt door Sandra18[NL]

**Dit is een voorbeeld script dat menu's bevat.

Wat heb je nodig:

- Gta:Sa-mp

- Sa-mp 0.2.* Script-tools

- Basis scriptkennis

Beknopte uitleg:

In dit script bevat een menu waarmee je een teleport-locatie kan uitzoeken.

Er zijn 10 verschillende locaties verdeeld over de 3 steden:

Het menu kan je openen door /teleport in te typen.

In dat menu kan je kiezen uit de 3 steden (Ls, Sf & Lv)

Als je een stad kiest, opent er een nieuw menu die je locaties in de betreffende stad toont:

Los Santos:

-GroveSteet

-Ls Vliegveld

-Hoogste gebouw

San Fiero:

-Wang Cars

-Sf Vliegveld

-Pier 69

Las Venturas:

-Piratenschip

-Lv Vliegveld

-4 Dragons Casino

-Parkeergarage

In dit script gebruiken we 7 hoofd-functies:

- CreateMenu("tekst-in-header", aantal-keuzes, x, y, kolom-breedte, kolom-hoogte);

- AddMenuItem(naam-doel-menu, kolom, "tekst");

- TogglePlayerControllable(playerid, waarde); waarde: 1=aan 0 =uit

- ShowMenuForPlayer(menu, playerid);

- SetPlayerPos(playerid, x, y, z);

- SetPlayerFacingAngle(playerid, hoek);

- SetCameraBehindPlayer(playerid);

Uitgebreidere uitleg komt misschien later.

Voorlopig zal je gewoon goed het script moeten doorlezen en proberen te begrijpen wat elke functie doet.

(Zo heb ik ook leren scripten :roll:

#include <a_samp>

//defineren van de 4 menu's:
new Menu:TeleportMenu;
new Menu:LsTeleports;
new Menu:SfTeleports;
new Menu:LvTeleports;

public OnGameModeInit()
{
SetGameModeText("TutorialGM by Sandra18[NL]");

//Karakters plaatsen
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
AddPlayerClass(93, 2494.4888, -1675.5619, 13.3359, 55.9011, 0, 0, 0, 0, 0, 0);

//Het maken van de menu's:
//eerst maak je een nieuw menu aan met CreateMenu	
TeleportMenu = CreateMenu("Kies een stad uit:",1,200,200,400,35);  
//Vervolgens maak je de keuzes met AddMenuItem:
AddMenuItem(TeleportMenu, 0, "Los Santos"); // 1e keuze
AddMenuItem(TeleportMenu, 0, "San Fiero");  //2e keuze
AddMenuItem(TeleportMenu, 0, "Las Venturas");  //3e keuze

LsTeleports = CreateMenu("Los Santos Teleports:",1,200,200,400,35);
AddMenuItem(LsTeleports, 0, "GroveStreet");
AddMenuItem(LsTeleports, 0, "Ls Vliegveld");
AddMenuItem(LsTeleports, 0, "Hoogste Gebouw");

SfTeleports = CreateMenu("San Fiero Teleports:",1,200,200,400,35);
AddMenuItem(SfTeleports, 0, "Wang Cars");
AddMenuItem(SfTeleports, 0, "Sf Vliegveld");
AddMenuItem(SfTeleports, 0, "Pier 69");

LvTeleports = CreateMenu("Las Venturas Teleports:",1,200,200,400,35);
AddMenuItem(LvTeleports, 0, "PirateShip");
AddMenuItem(LvTeleports, 0, "Lv Vliegveld");
AddMenuItem(LvTeleports, 0, "4 Dragons Casino");
AddMenuItem(LvTeleports, 0, "Parkeergarage");

return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid,-812.0018,-1949.3617,9.3004);
SetPlayerCameraPos(playerid,-816.4528,-1945.0082,9.0269);
SetPlayerCameraLookAt(playerid,-812.0018,-1949.3617,9.3004);
SetPlayerFacingAngle(playerid, 0.0);
return 1;
}


public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/teleport", cmdtext, true) == 0)
{
TogglePlayerControllable(playerid, 0);  // zorg ervoor dat de speler niet meer kan bewegen
ShowMenuForPlayer(TeleportMenu,playerid); // laat het menu 'TeleportMenu' zien
return 1;
}
return 0;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
TogglePlayerControllable(playerid, 1);  // laat de speler weer bewegen
SetCameraBehindPlayer(playerid); // zet de camera achter de speler
new Menu:Current = GetPlayerMenu(playerid); 

if (Current == TeleportMenu) // check in welke menu je zit
{
switch(row) {
case 0: {ShowMenuForPlayer(LsTeleports, playerid); TogglePlayerControllable(playerid, 0);} //keuze 1
case 1: {ShowMenuForPlayer(SfTeleports, playerid); TogglePlayerControllable(playerid, 0);} //keuze 2
case 2: {ShowMenuForPlayer(LvTeleports, playerid); TogglePlayerControllable(playerid, 0);} //keuze 3
}
}

if (Current == LsTeleports)
{
switch(row) {
case 0: {SetPlayerPos(playerid, 2481.5010,-1662.1470,13.3438); SetPlayerFacingAngle(playerid, 241.3432); }
case 1: {SetPlayerPos(playerid, 1928.6345,-2457.9893,13.5391); SetPlayerFacingAngle(playerid, 129.8487); }
case 2: {SetPlayerPos(playerid, 1563.1281,-1346.2808,330.0572); SetPlayerFacingAngle(playerid, 301.3620); }
}}

if (Current == SfTeleports)
{
switch(row) {
case 0: {SetPlayerPos(playerid, -1975.4209,291.0956,35.1719); SetPlayerFacingAngle(playerid, 231.8575); }
case 1: {SetPlayerPos(playerid, -1191.5640,-400.4661,14.1484); SetPlayerFacingAngle(playerid, 330.6251); }
case 2: {SetPlayerPos(playerid, -1713.7914,1334.8519,7.0468); SetPlayerFacingAngle(playerid, 294.0418); }
}}

if (Current == LvTeleports)
{
switch(row) {
case 0: {SetPlayerPos(playerid, 1999.9935,1521.5145,17.0625); SetPlayerFacingAngle(playerid, 342.4077); }
case 1: {SetPlayerPos(playerid, 1724.4902,1610.0110,10.1314); SetPlayerFacingAngle(playerid, 104.1312); }
case 2: {SetPlayerPos(playerid, 2037.3230,1007.3141,10.8203); SetPlayerFacingAngle(playerid, 90.9229); }
case 3: {SetPlayerPos(playerid, 2058.1492,2446.1331,10.8203); SetPlayerFacingAngle(playerid, 212.6783); }
}}

return 1;
}

public OnPlayerExitedMenu(playerid)
{ 
new Menu:Current = GetPlayerMenu(playerid);
if (Current == LsTeleports || SfTeleports || LvTeleports)
{		  
TogglePlayerControllable(playerid, 0); 
ShowMenuForPlayer(TeleportMenu, playerid);
}

else {
TogglePlayerControllable(playerid, 0);
}

return 1;
}

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

Hier nog een filmpje waarin ik de menu's van dit script laat zien:

Omdat ik dit allemaal op een laptop doe (die nog maar net gta-sa aankan) en ook nog eens Fraps gebruik, is de fps errug laag en spawnen de objecten vreselijk langzaam.

Edit: In het filmpje zit nog een fout:

Bij het Los Santos-menu staat "Lv Vliegveld" dit moest "Ls Vliegveld" zijn.

Als je nog vragen hebt, mag je ze gerust in dit topic stellen.

Grtz San

>>> Door Azer: De lijst met tutorials blijft maar groeien, toegevoegd aan het PAWN Tutorial List topic<<<

Bewerkt: door =>Sandra<=

  • Reacties 63
  • Bezichtigingen 19.9k
  • Created
  • Laatste reactie

Top Posters In This Topic

Featured Replies

Geplaatst:
  • Auteur
comment_821151

Klopt wat VWO-er zegt.

Ik zal het nog even toelichten met een voorbeeld:

Als je als in je script het volgende hebt staan:

public OnPlayerCommandText(playerid, cmdtext[])
{
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;
}
 return 0;
}

Dan mag je niet nogmaals de regel

public OnPlayerCommandText(playerid, cmdtext[])

{

toevoegen.

Je moet dan het nieuwe commando achter het vorige commando zetten:

public OnPlayerCommandText(playerid, cmdtext[])
{
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;
}

if (strcmp("/teleport", cmdtext, true) == 0)
{
	TogglePlayerControllable(playerid, 0);  
	ShowMenuForPlayer(TeleportMenu,playerid);
	return 1;
}

return 0;
}

Probeer anders eens wat basis-tutorials te vinden op internet.

De meesten zijn engels, maar als je slecht bent in engels, dan moet je maar ff je emailadres naar mij toe pm'en

Dan stuur ik een nederlandse tutorial die ik gemaakt heb naar je toe.

Daarin staat in 17 pagina's de meeste basis-dingen uitgelegd.

Grtz Sandra

Bewerkt: door Sandra18[NL]

  • 2 weken later...
Geplaatst:
comment_831173

ja dat heb ik ook ik heb dit:D: error 021: symbol already defined: "OnPlayerRequestClass"

: error 021: symbol already defined: "OnGameModeInit"

: error 021: symbol already defined: "OnPlayerCommandText"

  • 2 weken later...
Geplaatst:
  • Auteur
comment_839399

Download >>dit<<

Dit is de Nederlandse Tutorial die ik tijdje geleden gemaakt heeft.

Het is een 17-pagina's-tellende words-document.

Hierin staan alle basis-dingetjes uitgelegd hoe je moet scripten.

Lees dat maar eens goed door ;)

Groetjes Sandra

P.s. Ik heb er lang overna gedacht of ik hem wel op internet wilde zetten, ik heb dat toch maar gedaan aangezien velen het goed kunnen gebruiken.

Je mág de tutorial gebruiken, maar waag het niet om je eigen naam erop te zetten en hem uit te brengen.

Dat geldt trouwens voor iedereen ;)

Anyway, veel plezier ermee :)

Geplaatst:
comment_840151

Hey, is het mogelijk om het menu aan te passen dat er geen submenus nodig zijn. Maar dat je als je bv. Mount Chilliad hebt als je /teleport hebt gedaan dat er geen sub menus nodig zijn maar gewoon als je Mt. Chilliad pakt je er naar toe word geteleport?

Geplaatst:
  • Auteur
comment_840488
Hey, is het mogelijk om het menu aan te passen dat er geen submenus nodig zijn. Maar dat je als je bv. Mount Chilliad hebt als je /teleport hebt gedaan dat er geen sub menus nodig zijn maar gewoon als je Mt. Chilliad pakt je er naar toe word geteleport?

Tuurlijk.

- Je maakt gewoon 1 menu

- Bij je commando zorg je dat het menu geopend wordt.

- Bij de OnPlayerSelectedRow-callback check je of de speler in dat menu is.

- Case 0: { SetPlayerPos(blablabla1); }

- Case 1: { SetPlayerPos(blablabla2); }

enzovoort.

  • 4 weken later...
Geplaatst:
comment_856036

ik heb het menu toegevoegt maar krijg een beetje veel errors:

warning 225: unreachable code

error 029: invalid expression, assumed zero

error 004: function "OnPlayerDisconnect" is not implemented

warning 225: unreachable code

error 029: invalid expression, assumed zero

error 004: function "OnPlayerDeath" is not implemented

error 017: undefined symbol "killerid"

error 017: undefined symbol "reason"

error 017: undefined symbol "killerid"

error 017: undefined symbol "killerid"

error 017: undefined symbol "killerid"

error 030: compound statement not closed at the end of file (started at line 625)

maar die "error 017" heeft heel ergens anders mee te maken kan iemand mischien vertellen wat ik hier tegen kan doen

Geplaatst:
comment_856067

het probleem is verholpen

maar ik heb een teleport dat je kan parachute springen en als ik daar naartoe teleporteer dan krijg ik geen parachute. ik heb er iets tussen gezet dat staat in dit geval tussen // kan dat

if (Current == lol teleports)

{

switch(row)

{

case 0: {SetPlayerPos(playerid, -261.0289,2353.6287,108.7114); SetPlayerFacingAngle(playerid, 231.8575); }

case 1: {SetPlayerPos(playerid, 1556.1941,1221.7146,214.8965);///GivePlayerWeapon(playerid, 46, 1);///SetPlayerFacingAngle(playerid, 330.6251); }

case 2: {SetPlayerPos(playerid, 1573.2145,1336.0040,524.5526); SetPlayerFacingAngle(playerid, 294.0418); }

case 3: {SetPlayerPos(playerid, 1619.2776,1376.0470,816.5378); SetPlayerFacingAngle(playerid, 231.8575); }

case 4: {SetPlayerPos(playerid, 214.3570,1872.1749,13.1406); SetPlayerFacingAngle(playerid, 330.6251); }

case 5: {SetPlayerPos(playerid, 2225.7920,1471.8967,26.5230); SetPlayerFacingAngle(playerid, 294.0418); }

}

}

Geplaatst:
  • Auteur
comment_856082

Als je ergens // in een regel zet, word alles daarachter als 'commentaar' opgevat door Pawno en zal genegeerd worden.

(Als een code groen is, dan is het commentaar.)

Je moet die 2 slashes dus weghalen.

Nog even korte uitleg over het maken van commentaar.

Als je // gebruikt, dan word alles op diezelfde regel (achter de //) commentaar.

Om hele stukken code als commentaar te maken:

/*
hier de code die commentaar moet worden
*/

Geplaatst:
comment_860354

tof script hij doet het bij mij :tu:

maar nu kan iedereen in mijn server dit gebruiken, denk ik :? .

maar is het ook mogelijk om het alleen voor de admins te maken.

maar in ieder geval het werkt perfect.

Geplaatst:
  • Auteur
comment_860364

Dat kan, dan moet je even het commando aanpassen:

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/teleport", cmdtext, true) == 0)
{
if(IsPlayerAdmin(playerid))
{
	TogglePlayerControllable(playerid, 0); 
	ShowMenuForPlayer(TeleportMenu,playerid); 
}
return 1;
}

// De rest van je commando's 

return 0;
}

Nu moet je rcon-admin zijn.

Bewerkt: door Sandra18[NL]

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.