Jump to content

[Tutorial]Menu's maken


Sandra

Recommended Posts

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<=
Link to comment
Delen op andere websites

  • Reacties 63
  • Created
  • Laatste reactie

Top Posters In This Topic

  • Sandra

    17

  • WackoX

    6

  • opacool6

    6

  • Remcconen

    5

Wil ik even kijken of er nog iets is in het scripting gedeelte, zie ik weer een tutorial. Meteen even doorgelezen, en mijn gamemode geopend. Alles toegepast, nadat ik klaar was uitgetest. Ziet er erg goed uit, mijn complimenten. :)

Ga zo door.

Link to comment
Delen op andere websites

Die krijg ik inderdaad ook.

Het zijn trouwens geen errors maar warnings.

warning 217: loose indentation

Deze warnings geven aan bepaalde regels niet goed uitgelijnd zijn.

Door een bepaalde code toe te voegen aan het script, zorg je ervoor dat Pawno deze warnings negeerd:

#pragma tabsize 0

Zet dit bovenaan het script, maar wel onder de includes.

Edit:

Wahaha nice! maar 10 error's, ik heb alle 10 gefixed en nu vraag ik aan jou of ik de nieuwe code dan aan jou mag geven (die zonder 10 error's)

Ligt eraan, als jij het script helemaal hebt uitgelijnd mag je die wel op www.pastebin.ca zetten en de link hier plaatsen...

...als jij alleen #pragma tabsize 0 hebt toegevoegd, hoeft het niet ;)

Bewerkt: door Sandra18[NL]
Link to comment
Delen op andere websites

Echt super goed maar nu heb ik dus nòg een menu gemaakt en heb daarbij alles ook moeten aanpassen maar nu heb ik een probleem, ik heb dus nu als menu (met een streep er onder betekend heb ik toegevoegt):

Los Santos

San Fierro

Las Venturas

Overig

Alles werk priema enzo maar als ik dan ''Las Venturas'' ga, dan zie ik opeens òòk de teleport van ''overig'' er tussen staan, terwijl ik daar echt een apart menu voor heb gemaakt.

En wat nog vreemder is, als ik dus naar die teleport ga die ''opeens'' in de teleports van Las Venturas zitten, gebeurt er niks, en als ik dan naar de categorie ''overig'' ga, dan staat daar niks tussen, en als ik dan tòch op spatie druk dan ga ik naar mouth chilliad?

Hier mijn script onderdelen:

new Menu:TeleportMenu;
new Menu:LsTeleports;
new Menu:SfTeleports;
new Menu:LvTeleports;
new Menu:OtherTeleports;

TeleportMenu = CreateMenu("Choose a category",4,200,200,400,35);
AddMenuItem(TeleportMenu, 0, "Los Santos");
AddMenuItem(TeleportMenu, 0, "San Fiero");
AddMenuItem(TeleportMenu, 0, "Las Venturas");
AddMenuItem(TeleportMenu, 0, "Other");

LsTeleports = CreateMenu("Los Santos Teleports:",3,200,200,400,35);
AddMenuItem(LsTeleports, 0, "Grove Street");
AddMenuItem(LsTeleports, 0, "Airport");
AddMenuItem(LsTeleports, 0, "Hight bilding");

SfTeleports = CreateMenu("San Fiero Teleports:",3,200,200,400,35);
AddMenuItem(SfTeleports, 0, "Work place");
AddMenuItem(SfTeleports, 0, "Airport");
AddMenuItem(SfTeleports, 0, "Hight bilding");

LvTeleports = CreateMenu("Las Venturas Teleports:",3,200,200,400,35);
AddMenuItem(LvTeleports, 0, "PirateShip");
AddMenuItem(LvTeleports, 0, "Airport");
AddMenuItem(LvTeleports, 0, "Factory");

OtherTeleports = CreateMenu("Other Teleports:",3,200,200,400,35);
AddMenuItem(LvTeleports, 0, "Chilliad");
AddMenuItem(LvTeleports, 0, "Airport Graveyard");
AddMenuItem(LvTeleports, 0, "Geheim");

public OnPlayerSelectedMenuRow(playerid, row)
{
TogglePlayerControllable(playerid, 1);
SetCameraBehindPlayer(playerid);
new Menu:Current = GetPlayerMenu(playerid);


if (Current == TeleportMenu)
{
  switch(row) {
  case 0: {ShowMenuForPlayer(LsTeleports, playerid); TogglePlayerControllable(playerid, 0);}
  case 1: {ShowMenuForPlayer(SfTeleports, playerid); TogglePlayerControllable(playerid, 0);}
  case 2: {ShowMenuForPlayer(LvTeleports, playerid); TogglePlayerControllable(playerid, 0);}
  case 3: {ShowMenuForPlayer(OtherTeleports, playerid); TogglePlayerControllable(playerid, 0);}
			  }
  	}

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, -2029.6158,178.0648,28.8359); SetPlayerFacingAngle(playerid, 231.8575); }
  case 1: {SetPlayerPos(playerid, -1231.8430,38.8787,14.1387); SetPlayerFacingAngle(playerid, 330.6251); }
  case 2: {SetPlayerPos(playerid, -1753.5303,885.9994,295.8750); 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, 1689.6973,1612.2306,10.8203); SetPlayerFacingAngle(playerid, 104.1312); }
  case 2: {SetPlayerPos(playerid, 2501.3540,2780.1321,17.0073); SetPlayerFacingAngle(playerid, 90.9229); }
			  }
  	}

if (Current == OtherTeleports)
{
  switch(row) {
  case 0: {SetPlayerPos(playerid, -2330.8442,-1629.8027,483.7022); SetPlayerFacingAngle(playerid, 342.4077); }
  case 1: {SetPlayerPos(playerid, 347.8295,2537.1104,16.7504); SetPlayerFacingAngle(playerid, 104.1312); }
  case 2: {SetPlayerPos(playerid, 0.0, 0.0, 0.0); SetPlayerFacingAngle(playerid, 90.9229); }
	 		}
  	}

return 1;
}

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

Sandra weet jij oplossing?

Bewerkt: door Danny_k
Link to comment
Delen op andere websites

Ja, ik zie de fout al:

Het zit in dit stukje:

OtherTeleports = CreateMenu("Other Teleports:",3,200,200,400,35);
AddMenuItem(LvTeleports, 0, "Chilliad");
AddMenuItem(LvTeleports, 0, "Airport Graveyard");
AddMenuItem(LvTeleports, 0, "Geheim");

Hier 'geef je aan' dat die 3 items in het menu 'LvTeleports' moet.

Je moet dat veranderen naar 'OtherTeleports'

Dus:

OtherTeleports = CreateMenu("Other Teleports:",3,200,200,400,35);
AddMenuItem(OtherTeleports, 0, "Chilliad");
AddMenuItem(OtherTeleports, 0, "Airport Graveyard");
AddMenuItem(OtherTeleports, 0, "Geheim");

Ik heb het voor je getest, het werkt nu prima :)

Succes ermee.

Grtz Sandra

Link to comment
Delen op andere websites

  • 2 weken later...

Super toffe tutorial!! Ik heb jouw account systeem tutorial ook al gebruikt en ben ze nu even aant mengen!

alleen ik krijg nu dit uit de compile:

C:\Users\Gebruiker\Desktop\SAMP server\gamemodes\test.pwn(146) : error 021: symbol already defined: "OnPlayerRequestClass"

C:\Users\Gebruiker\Desktop\SAMP server\gamemodes\test.pwn(169) : error 021: symbol already defined: "OnPlayerCommandText"

Even naar regels 144 t/m 148 en regels 167 t/m 171:

public OnPlayerRequestClass(playerid, classid)

{

SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);

SetPlayerCameraPos(playerid, 1968.3783, 1345.1572, 17.3746);

en nu 167 t/m 171

public OnPlayerCommandText(playerid, cmdtext[])

{

new cmd[256],tmp[256], tmp2[256];

new idx;

Kan iemand mij nu helpen?? Ik ben nieuw in scripten voor SA:MP en heb dus een beetje hulp nodig.

Alvast bedankt!! _O_

Joman

Link to comment
Delen op andere websites

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