Creating a simple Menu NL
From SA-MP Wiki
Contents |
Menu's in Pawn
Menu's lijken ingewikkeld, en moeilijk om te scripten voor de meesten, maar dat zijn ze niet! Hier zal ik uitleggen hoe je een simpel menu maakt. Aan het einde van deze tutorial zal je een simpel teleport menu hebben.
Important | Sinds 0.3 kan je een menu's maken met dialogs, zie ShowPlayerDialog. |
Eerste stappen
Eerst moeten we het menu maken. Zet dit onder de #includes, #defines, forwards etc:
new Menu:teleportmenu;
Ok, we hebben onze variabele voor het menu. Nu gaan we het menu maken in die variabele. Zet dit onder OnGameModeInit() of OnFilterScriptInit (afhankelijk wat je maakt):
teleportmenu = CreateMenu("Teleportmenu", 2, 200.0, 100.0, 150.0, 150.0);
Even de argumenten van CreateMenu uitleggen:
CreateMenu(title, columns, Float:x, Float:y, Float:col1width, Float:col2width);
title: De titel columns: Aantal kolommen dat het menu zal hebben. Float:x: De X positie waar het menu moet komen. Float:y: De Y positie waar het menu moet komen. Float:col1width: Breedte van de eerste kolom. Float:col2width: Breedte van de tweede kolom.
Een aantal menu items toevoegen
We hebben het menu nu. Maar we hebben een aantal items nodig waaruit je kan kiezen in het menu. Dit doe je met AddMenuItem. Dus zetten we dit bij 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 over AddMenuItem:
AddMenuItem(menuid, column, text);
menuid: Het menuid waarin de keuzes moeten komen column: De kolom waar het item in moet komen text: De tekst van het item
De effecten voor het menu maken
Ok. In de vorige stappen hebben we een compleet menu met items aangemaakt. Maar wat moet er nu gebeuren als je een item kiest? In dit voorbeeld maken we een teleport menu, Dus moeten we worden geteleporteerd naar de positie die we kiezen. Dit gaan we doen in de callback public OnPlayerSelectedMenuRow(playerid, row). De beste manier om dit te doen is met een switch. De eerste stap is om het menuid te achterhalen om de effecten in ons menu te limiteren. Hiervoor moet je een nieuwe menu variabele aanmaken. In dit voorbeeld:
new Menu:CurrentMenu = GetPlayerMenu(playerid);
Als iemand nu het menu opent, zal het menuid worden opgeslagen in CurrentMenu.
Nu gaan we checken of CurrentMenu hetzelfde is als ons menu:
if (CurrentMenu == teleportmenu) { ... }
Nu gaan we onze switch er in zetten. Dat moet er ongeveer zo uit zien:
if(CurrentMenu == teleportmenu) { switch(row) { case 0: //Grove Street { SetPlayerPos(playerid, 2493.9133, -1682.3986, 13.3382); SetPlayerInterior(playerid, 0); SendClientMessage(playerid, 0xFFFFFFFF, "Welkom in Grove Street!"); } case 1: //Starfish Tower { SetPlayerPos(playerid, 1541.2833, -1362.4741, 329.6457); SetPlayerInterior(playerid, 0); SendClientMessage(playerid, 0xFFFFFFFF, "Welkom op de top van de Starfish Tower"); } case 2: //Wheel Arch Angels { SetPlayerPos(playerid, -2705.5503, 206.1621, 4.1797); SetPlayerInterior(playerid, 0); SendClientMessage(playerid, 0xFFFFFFFF, "Welkom bij de Wheel Arch Angels tuning-shop"); } case 3: //Jizzys { SetPlayerPos(playerid, -2617.5156, 1390.6353, 7.1105); SetPlayerInterior(playerid, 0); SendClientMessage(playerid, 0xFFFFFFFF, "Welkom bij Jizzy's Nacht Club!"); } case 4: //4Dragons { SetPlayerPos(playerid, 2028.5538, 1008.3543, 10.8203); SetPlayerInterior(playerid, 0); SendClientMessage(playerid, 0xFFFFFFFF, "Welkom bij het Four Dragons Casino"); } case 5: //Com-a-Lot { SetPlayerPos(playerid, 2169.1838, 1122.5426, 12.6107); SetPlayerInterior(playerid, 0); SendClientMessage(playerid, 0xFFFFFFFF, "Welkom bij het Come-a-Lot casino!"); } } }
Als je alles goed hebt gedaan, zoals ik heb laten zien in dit voorbeeld, zijn de effecten nu met succes aangemaakt.
Laatste stappen
Nu willen we nog een command om het menu te tonen. Dit is de makkelijkste stap. Gewoon een vergelijking met strcmp en ShowMenuForPlayer. Zoals je wellicht weet, zet je dit onder OnPlayerCommandText
if(strcmp(cmdtext, "/teleport", true) == 0) { ShowMenuForPlayer(teleportmenu,playerid); return 1; }
Heel makkelijk, niet waar?
Laatste woorden
Ok, nadat je dit gelezen EN begrepen hebt, probeer om je eigen menu te maken. Zoals je kan zien is het niet zo moeilijk, maar het zal des te meer indruk maken bij de spelers op je server. Je kan hier heel coole effecten mee maken. Het is ook heel geschikt voor winkels voor dingen die je kan kopen. Dan kan je wat geld nemen van de speler en de prijs wordt getoond in een andere kolom van het menu. Maar werk nu aan je eigen menu :).
Ik hoop dat je wat geleerd hebt uit deze tutorial. Voor vragen kan je in het forum terecht (in het Engels, uiteraard).