Ga naar hoofdinhoud

Menu Guide

Een korte guide over het menu-systeem van de game. Dit systeem verschilt van SA-MP-dialogs en sluit beter aan bij de traditionele UI van de originele game.

Menus lijken complex, maar dat valt mee. We maken een simpel teleportmenu.

Eerste stappen

We declareren een menuvariabele. De prefix Menu: geeft de juiste tag.

new Menu:teleportmenu;

Maak nu het menu aan (bijv. in OnGameModeInit) en wijs de variabele toe:

teleportmenu = CreateMenu("Teleportmenu", 2, 200.0, 100.0, 150.0, 150.0);

Argumenten van CreateMenu:

ParameterBetekenis
titleKop van het menu
columnsAantal kolommen (max 2)
Float:xHorizontale positie (links-rechts)
Float:yVerticale positie (omhoog-omlaag)
Float:col1widthBreedte kolom 1
Float:col2widthBreedte kolom 2

Items toevoegen

Voeg items toe direct onder CreateMenu:

AddMenuItem(teleportmenu, 0, "LS");
AddMenuItem(teleportmenu, 0, "LS");
AddMenuItem(teleportmenu, 0, "SF");
AddMenuItem(teleportmenu, 0, "SF");
AddMenuItem(teleportmenu, 0, "LV");
AddMenuItem(teleportmenu, 0, "LV");

AddMenuItem(teleportmenu, 1, "Grove Street");
AddMenuItem(teleportmenu, 1, "Starfish Tower");
AddMenuItem(teleportmenu, 1, "Wheel Arch Angels");
AddMenuItem(teleportmenu, 1, "Jizzys");
AddMenuItem(teleportmenu, 1, "4 Dragons");
AddMenuItem(teleportmenu, 1, "Come-a-Lot");

Uitleg AddMenuItem:

menuidMenu-ID waar het item getoond wordt
columnKolomindex
textItemtekst

Actie bij selectie

Wanneer een speler een item kiest, wordt OnPlayerSelectedMenuRow aangeroepen. Gebruik GetPlayerMenu om te controleren of het ons menu is, en switch(row) voor de keuze.

public OnPlayerSelectedMenuRow(playerid, row)
{
new Menu:CurrentMenu = GetPlayerMenu(playerid);
if (CurrentMenu == teleportmenu)
{
switch (row)
{
case 0: { // Grove Street
SetPlayerPos(playerid, 2493.9133, -1682.3986, 13.3382);
SetPlayerInterior(playerid, 0);
SendClientMessage(playerid, 0xFFFFFFFF, "Welcome to Grove Street");
}
case 1: { // Starfish Tower
SetPlayerPos(playerid, 1541.2833, -1362.4741, 329.6457);
SetPlayerInterior(playerid, 0);
SendClientMessage(playerid, 0xFFFFFFFF, "Welcome to the top of Starfish Tower");
}
case 2: { // Wheel Arch Angels
SetPlayerPos(playerid, -2705.5503, 206.1621, 4.1797);
SetPlayerInterior(playerid, 0);
SendClientMessage(playerid, 0xFFFFFFFF, "Welcome to the Wheel Arch Angels tuning-shop");
}
case 3: { // Jizzys
SetPlayerPos(playerid, -2617.5156, 1390.6353, 7.1105);
SetPlayerInterior(playerid, 0);
SendClientMessage(playerid, 0xFFFFFFFF, "Welcome to Jizzy's Nightclub!");
}
case 4: { // 4Dragons
SetPlayerPos(playerid, 2028.5538, 1008.3543, 10.8203);
SetPlayerInterior(playerid, 0);
SendClientMessage(playerid, 0xFFFFFFFF, "Welcome to the Four Dragons Casino");
}
case 5: { // Come-a-Lot
SetPlayerPos(playerid, 2169.1838, 1122.5426, 12.6107);
SetPlayerInterior(playerid, 0);
SendClientMessage(playerid, 0xFFFFFFFF, "Welcome to the Come-a-Lot casino!");
}
}
}
return 1;
}

Maak een simpele command om het menu te tonen, bijv. in OnPlayerCommandText:

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

Tips

Je kunt TogglePlayerControllable op false zetten na ShowMenuForPlayer en op true aan het einde van OnPlayerSelectedMenuRow, zodat de speler niet kan bewegen tijdens browsen.

Succes met je eigen menu’s! Vragen? Stel ze op de forums/Discord.


title: Menu Guide sidebar_label: Menu Guide

Een korte tutorial over het gebruiken van het menusysteem van de game. Dit systeem verschilt van SA-MP dialogs en lijkt meer op de klassieke UI van de originele game.

Menus ogen ingewikkeld, maar dat valt mee. We maken een simpel teleportmenu.

Eerste menustappen

Maak eerst een menuvariabele. De prefix Menu: geeft de juiste tag:

new Menu:teleportmenu;

Nu maken we het menu aan en wijzen het toe in OnGameModeInit:

teleportmenu = CreateMenu("Teleportmenu", 2, 200.0, 100.0, 150.0, 150.0);

Uitleg CreateMenu-argumenten:

ParameterBetekenis
titleDe titel van het menu
columnsAantal kolommen (max. 2)
Float:xX-positie op het scherm (links-rechts)
Float:yY-positie op het scherm (boven-onder)
Float:col1widthBreedte van kolom 1
Float:col2widthBreedte van kolom 2

Items toevoegen

Voeg items toe onder de CreateMenu-aanroep:

AddMenuItem(teleportmenu, 0, "LS");
AddMenuItem(teleportmenu, 0, "LS");
AddMenuItem(teleportmenu, 0, "SF");
AddMenuItem(teleportmenu, 0, "SF");
AddMenuItem(teleportmenu, 0, "LV");
AddMenuItem(teleportmenu, 0, "LV");

AddMenuItem(teleportmenu, 1, "Grove Street");
AddMenuItem(teleportmenu, 1, "Starfish Tower");
AddMenuItem(teleportmenu, 1, "Wheel Arch Angels");
AddMenuItem(teleportmenu, 1, "Jizzys");
AddMenuItem(teleportmenu, 1, "4 Dragons");
AddMenuItem(teleportmenu, 1, "Come-a-Lot");

Uitleg AddMenuItem:

ParameterBetekenis
menuidIn welk menu het item komt
columnIn welke kolom het item komt
textDe tekst van het item

Actie bij selectie

Als een speler een menu-item kiest, wordt OnPlayerSelectedMenuRow aangeroepen. Check eerst of het ons menu is met GetPlayerMenu en gebruik dan een switch op row:

public OnPlayerSelectedMenuRow(playerid, row)
{
new Menu:CurrentMenu = GetPlayerMenu(playerid);
if (CurrentMenu == teleportmenu)
{
switch (row)
{
case 0: { SetPlayerPos(playerid, 2493.9133, -1682.3986, 13.3382); SetPlayerInterior(playerid, 0); }
case 1: { SetPlayerPos(playerid, 1541.2833, -1362.4741, 329.6457); SetPlayerInterior(playerid, 0); }
case 2: { SetPlayerPos(playerid, -2705.5503, 206.1621, 4.1797); SetPlayerInterior(playerid, 0); }
case 3: { SetPlayerPos(playerid, -2617.5156, 1390.6353, 7.1105); SetPlayerInterior(playerid, 0); }
case 4: { SetPlayerPos(playerid, 2028.5538, 1008.3543, 10.8203); SetPlayerInterior(playerid, 0); }
case 5: { SetPlayerPos(playerid, 2169.1838, 1122.5426, 12.6107); SetPlayerInterior(playerid, 0); }
}
}
return 1;
}

Maak een command om het menu te tonen (of gebruik je eigen command-processor):

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

Tip: je kunt TogglePlayerControllable op false zetten na ShowMenuForPlayer en weer true in OnPlayerSelectedMenuRow zodat spelers niet bewegen terwijl ze het menu browsen.