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:
comment_892421

Duidelijke tut !

Hij werkt overduidelijk goed ;p, alleen heb ik het anders gemaakt door er autos mee te kunnen laten spawnen :)

Welk stukje van het menu bepaalt de breedte van het menu, hoe kan ik die inkorten :)?

Geplaatst:
comment_892428

Dat doe je gelijk bij de 'CreateMenu' functie, in de tutorial zie je allerlei cijfers erachter staan; dit is de grootte van de box, deze kun je naar eigen wens uitbreiden / inkorten. :)

Geplaatst:
  • Auteur
comment_893911
TeleportMenu = CreateMenu("Kies een stad uit:",3,200,200,400,35);

Rood is het aantal menu items

Blauw is de groote van het menu.

Sorry, ik heb een fout gemaakt.

Dat rode getal (in dit geval de '3') is het aantal kolommen, niet het aantal items.

Ik zal het zo snel mogelijk veranderen in de beginpost ;)

Uitleg van de rest van de getallen:

die 1e '200' is de afstand vanaf de linkerkant van het scherm.

de 2e '200' is de afstand vanaf de bovenkant van het scherm.

de '400' is de breedte van de 1e kolom.

de '35' is de breedte van de 2e kolom.

Bewerkt: door =>Sandra<=

  • 4 weken later...
Geplaatst:
comment_912241

Vraagje...

Ik heb nu zo'n handig menuutje staan waarmee je met een zogenaamde priester kunt praten, maar als ik dan in het menu ga, zie ik dat mijn vragen worden afgekapt... Oftewel als ik

"Could you tell me something about this town, Father?" heb staan in het script

dan staat er in het menu

"Could you tell me something abo".

Kan de zin simpelweg niet langer zijn, of kan ik dat ergens aanpassen? De kolom is breed genoeg, die is nu pas voor de helft vol..

Geplaatst:
comment_917859

Ik zie nog een foutje in je 1e post:

//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");

Daar moet toch het aantal menu-item's komen? maar waarom staat er dan ''1''?

Bewerkt: door WackoX

Geplaatst:
comment_917864
Hoe maak je 2 menu's in 1 gamemode?

Dat doe je door allereerst een nieuw menu te definiëren (new Menu2; bijv.), en dan een nieuw menu aan te maken op dezelfde manier zoals je één menu aanmaakt.

  • 2 weken later...
Geplaatst:
comment_932757
Kan je iemand zodra die spawnt ook een menutje geven waar die wilt spawnen? Dus je hebt een poppetje gekozen en dan krijg je zon menu?

---------Nick--------

Ja hoor, gewoon bij OnPlayerSpawn zetten wat je normaal bij het command zet. Zoiets dus:

public OnPlayerSpawn(playerid)
{
	 TogglePlayerControllable(playerid, 0);  // zorg ervoor dat de speler niet meer kan bewegen
	 ShowMenuForPlayer(TeleportMenu,playerid); // laat het menu 'TeleportMenu' zien
	 return 1;
}

Geplaatst:
  • Auteur
comment_933087
Ik wil nu in mijn menu dat ze ook Close kunnen kiezen alleen wat moet ik er dan van maken?
case 0: {EN HIER?};

Als je de speler hebt 'gefrozen' (TogglePlayerControllable(playerid, 0); hebt gebruikt).

Dan hoef je het alleen maar weer op '1' te zetten.

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.