Skip to content
View in the app

A better way to browse. Learn more.

GTAGames.nl - De Nederlandse Grand Theft Auto Community!

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[TUT][SA-MP 0.3]Dialog Box

Let op dit werkt pas vanaf SAMP 0.3!

Dialog Box

Inleiding

Ik heb van Remi-X de toestemming gekregen om een volledige tutorial te schrijven over dialog boxes omdat de vorige te onvolledig was.

Dialog boxes werken enkel in SAMP 0.3 en zijn erg handig.

Soorten Dialog Boxes

Er zijn 3 soorten dialog boxes:

Text Box: Hierin staat simpelweg tekst:

text.png

Input Box: Handig voor een inlog systeem waar je dan een wachtwoord moet invoeren:

input.png

Selectie Box: Handig voor een wapen menu of voertuigen lijst, ...:

Screen komt...

Dialog Maken

Nu je weet welke soorten er zijn kan je beginnen met dialogs te maken.

We zullen beginnen met een simpele tekst box:

ShowPlayerDialog(playerid,dialogid,style,"title","text","button1","button2");

Playerid: de id van de speler die de dialog moet zien.

Dialogid: het id dat je de dialog wil hebben en je later zal moeten gebruiken.

Style: hier komen we nog op terug.

Title: de tite die vanboven staat.

Text: de tekst.

Button1: de eerste knop waar meestal "OK" staat.

Button2: de tweede knop waar meestal "CANCEL" staat.

Ik geef een voorbeeld van een volledige tekst dialog:

ShowPlayerDialog(playerid,2,DIALOG_STYLE_MSGBOX,"Rules","United Roleplay have the follow rules:\n\n 1. No Cheating\n 2.No Spamming \n 3.No Flooding \n 4. No Killing without reason. \n 5. No Reclame","OK","Cancel");

Het bovenstaande is een tekst dialog die de regels laat zien van de komende United Roleplay.

Nu gaan we de input dialog bespreken:

ShowPlayerDialog(playerid,dialogid,style,"title","text","Button1","Button2");

Je ziet het is hetzelfde, alleen de style moet anders zijn.

Een voorbeeld van het inloggen in United Roleplay:

ShowPlayerDialog(playerid,0,DIALOG_STYLE_INPUT,"Login in United Roleplay","Welcome to United Roleplay.\nThis account exist, please log in.\n\nPassword:","Login","Cancel");

Nu een selectie box, dit is al wat moeilijker en anders dan de vorige dialogs:

new listitems[] = "1\tEerste keuze\n2\tTweede\n3\tDerde enzoverder";
ShowPlayerDialog(playerid,dialogid,style,"Title",listitems,"Button1","Button2");

Je merkt Text is veranderd in listitems die erboven staat het is zo opgedeeld:

de eerste keuze begint zo: 1\tKeuze de rest is zo \n2\tTweede\n3\tDerde enzoverder.

Een voorbeeld van de eerste pagina van het wapen menu in Water States:

 	new listitems[] = "1\tMelee\n2\tPistols\n3\tSub-Machine Guns\n4\tShotguns\n5\tAssault\n6\tRifles\n7\tHeavy Assault\n8\tProjectile\n9\tSpecial";
ShowPlayerDialog(playerid,2,DIALOG_STYLE_LIST,"Wapens:",listitems,"Open","Annuleer");

Styles

Er zijn 3 styles die bepalen wat voor dialog het moet zijn zijn je zag het al in de voorbeelden:

DIALOG_STYLE_MSGBOX : Style voor tekst box.

DIALOG_STYLE_INPUT : Style voor input box.

DIALOG_STYLE_LIST : Style voor selectie box.

Verwerking

Nu gaan we zorgen dat je keuze of wat je invult verwerkt word.

Dat doe je in de public: OnDialogResponse.

De public "OnDialogResponse" bestaat uit dit:

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])<BR>{<BR><BR>return 1;<BR>}

playerid = id van de speler

dialogid = id van de dialog die je zelf invoerde.

response = welke knop. (1= eerste, 0= tweede)

listitem = voor selectie dialog geeft de id van de geselecteerde item aan (begint bij 0).

inputtext = tekst dat je invoerde bij input dialog.

Text Dialog: deze heeft geen deel nodig in de OnDialogResponse, maar het kan wel bij bijvoorbeeld regels:

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 0){
new string[128];
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, sizeof(playername));
if(response){
format(string, sizeof(string), "player %s has accepted the rules", playername);
} else {
format(string, sizeof(string), "player %s won't accept the rules and is kicked", playername);
Kick(playerid);
}
}
SendClientMessageToAll(COLOR_YELLOW, string);
return 1;
}
return 1;
}

Selectie Dialog: zoals ik uitlegde gebruikt deze listitem en begint dit bij 0, een voorbeeldje:

	
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 2 && response == 1)
{
   	if(listitem == 0)
   	{
   	GivePlayerWeapon(playerid, 25, 9999);
   	SendClientMessage(playerid, COLOR_YELLOW, "Je kreeg een Shotgun!");
}
   	if(listitem == 1)
   	{
   	GivePlayerWeapon(playerid, 26, 9999);
   	SendClientMessage(playerid, COLOR_YELLOW, "Je kreeg een Sawnoff Shotgun!");
}
   	if(listitem == 2)
   	{
   	GivePlayerWeapon(playerid, 27, 9999);
   	SendClientMessage(playerid, COLOR_YELLOW, "Je kreeg een Combat Shotgun!");
}
   	return 1;
}
   	return 1;
}

De dialogid heb ik als 2 ingesteld bij ShowDialog dus hier dan ook. (let op indeling klopt niet meer met de showdialog.), ik zet ook een check als response 1 is en dus de eerste button voert hij dat uit en krijg je het wapen, als je de andere kiest gebeurd er niets en sluit de dialog ook gewoon.

Input Dialog: dit valt eigenlijk ook wel mee, deze keer gebruiken we inputtext, een voorbeeldje:

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 0)
 {
  if(response) 
   {
     new message[128];

     password[playerid] = dini_Int(accountfile, "password");
     job[playerid] = dini_Int(accountfile, "job");
     adminlevel[playerid] = dini_Int(accountfile, "adminlevel");

     if(password[playerid] != udb_hash(inputtext))
     {
		SendClientMessage(playerid, COLOR_RED, "The password is wrong.");
		ShowPlayerDialog(playerid,0,DIALOG_STYLE_INPUT,"Login in United Roleplay","Welcome to United Roleplay.\nThis account exist, please login.\n\nPassword:","Login","Cancel");
     } else {
		format(message, sizeof(message), "%s you have succesfully logged in.", playername, inputtext);
		SendClientMessage(playerid, COLOR_YELLOW, message);
		logged[playerid] = 1;
     }
 } else {
SendClientMessage(playerid, COLOR_RED, "You cannot enter the server without login or registering!");
format(kickmessage, sizeof(kickmessage), "UnitedBot kicked %s (reason: no login, no enter.)", playername);
SendClientMessageToAll(COLOR_RED, kickmessage);
Kick(playerid);
 }
 return 1;
}
return 1;
}

De dialogid is als 0 ingesteld bij ShowDialog, hij checkt als response true is en dus 1 is de eerste button aangeduid, en zal hij je inloggen, er staat ook een } else { als de andere button dus de Cancel is aangeduid zal de server je kicken omdat je moet inloggen.

Heb je nog vragen stel ze dan zeker!

Edited by megadreams

  • Replies 50
  • Views 18.3k
  • Created
  • Last Reply

Top Posters In This Topic

Featured Replies

Nice tut.

No reclame :7

Verder is het wel een mooie tut, al wil ik wel een paar opmerkingen geven.

Alles in het vet zetten leest niet echt makkelijk. Bovendien is deze tut beter te begrijpen als alles goed uitgelijnd is.

Dus op deze manier:

 if(dialogid == 0) // Our example inputbox
 {
   if(response) 
   {
     new message[128]; // dit kan trouwens maar max 128 zijn

     password[playerid] = dini_Int(accountfile, "password");
     job[playerid] = dini_Int(accountfile, "job");
     adminlevel[playerid] = dini_Int(accountfile, "adminlevel");

     if(password[playerid] != udb_hash(inputtext))
     {
        SendClientMessage(playerid, COLOR_RED, "The password is wrong.");
        ShowPlayerDialog(playerid,0,DIALOG_STYLE_INPUT,"Login in United Roleplay","Welcome to United Roleplay.\nThis account exist, please login.\n\nPassword:","Login","Cancel");
     } 
     else 
     {
        format(message, sizeof(message), "%s you have succesfully logged in.", playername, inputtext);
        SendClientMessage(playerid, COLOR_YELLOW, message);
        logged[playerid] = 1;
     }
 } 
 // no response
 else 
 {
    SendClientMessage(playerid, COLOR_RED, "You cannot enter the server without login or registering!");
    format(kickmessage, sizeof(kickmessage), "UnitedBot kicked %s (reason: no login, no enter.)", playername);
    SendClientMessageToAll(COLOR_RED, kickmessage);
    Kick(playerid);
 }
 return 1; // we processed it.
}

  • Author

Ik zal ze beter uitlijnen en dat vetgedrukt was echt niet de bedoeling maar dat kwam door die text editor (die werkt al beter dan de vorige xd)

En als ik nu een text dialog wil maken die verschijnd als iemand de server binnenkomt.

met regels erop als hij accept klikt staat er player %s has accepted the rules, of bij cancel

player %s won't accept the rules and is kicked.

dan heb je toch wel ondiaglogrespns nodig voor die text dialog.

en hoe laat ik die dialog komen als de speler de server binnenkomt?

  • Author

Je gebruikt daarvoor de ShowDialog en dat gedeelte in OnDialogResponse is ook niet erg moeilijk.

if(dialogid == 0){
   	new string[128];
   	new playername[MAX_PLAYER_NAME];
       GetPlayerName(playerid, playername, sizeof(playername));
   	if(response){
   	format(string, sizeof(string), "player %s has accepted the rules", playername);
   	} else {
       format(string, sizeof(string), "player %s won't accept the rules and is kicked", playername);
   	Kick(playerid);
   	}
   	SendClientMessageToAll(COLOR_YELLOW, string);
   	}
   	return 1;
       }

ik zet dat wel even in de tut knipoog.gif

Edited by megadreams

zeer leuk. en waar in vredesnaam moet je dit in je script zetten? (showplayerdialog enzo)

zeer leuk. en waar in vredesnaam moet je dit in je script zetten? (showplayerdialog enzo)

In je command.

zo dus:

       if (strcmp("/dialog", cmdtext, true, 9) == 0)
{
	ShowPlayerDialog(playerid,dialogid,style,"title","text","Button1","Button2");
	return 1;
}

Edited by rickie505

zeer leuk. en waar in vredesnaam moet je dit in je script zetten? (showplayerdialog enzo)

In je command.

zo dus:

       if (strcmp("/dialog", cmdtext, true, 9) == 0)
{
	ShowPlayerDialog(playerid,dialogid,style,"title","text","Button1","Button2");
	return 1;
}

Ah, bedankt ^^. Zal ik zeker gebruiken :puh:.

  • 2 weeks later...

Je gebruikt daarvoor de ShowDialog en dat gedeelte in OnDialogResponse is ook niet erg moeilijk.

new string[128];
   	new playername[MAX_PLAYER_NAME];
       GetPlayerName(playerid, playername, sizeof(playername));
   	if(response){
   	format(string, sizeof(string), "player %s has accepted the rules", playername);
   	} else {
       format(string, sizeof(string), "player %s won't accept the rules and is kicked", playername);
   	Kick(playerid);
   	}
   	SendClientMessageToAll(COLOR_YELLOW, string);
   	return 1;
       }

ik zet dat wel even in de tut knipoog.gif

ik heb nu een andere dialog erbij gedaan maar wat is ook klik er komt nu te staan player blabla had accepted the rules

denk dat je ifdialogid bent vergeten ofzo ?

EDIT: zo dus volgens mij

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
  if(dialogid == 2 && response == 1)
  {
  new string[128];
  new playername[MAX_PLAYER_NAME];
  GetPlayerName(playerid, playername, sizeof(playername));
  if(response){
  format(string, sizeof(string), "player %s has accepted the rules", playername);
  }
  else
  {
  format(string, sizeof(string), "player %s won't accept the rules and is kicked", playername);
  Kick(playerid);
  }
  SendClientMessageToAll(COLOR_YELLOW, string);
  return 1;
  }
  return 0;
}

Edited by rickie505

  • Author

Inderdaad ben ik die vergeten ik pas het nog wel aan;)

Voor wie dit leest als je dat deel gebruikt vergeet dus de if van dialogid niet ;)

  • 1 month later...

Ik zit met het volgende script gedoe:

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 2)
{
	if(response)
	{
		ShowPlayerDialog(playerid,3,DIALOG_STYLE_INPUT,"Login;","You can now login\n Please fill in your password:","Login","Cancel");
	}
}
else
{
		ShowPlayerDialog(playerid,4,DIALOG_STYLE_INPUT,"Register;","In order to register\n Fill in a password:","Next","Back");
}

if(dialogid == 3)
{
    if(response)
    {
   		new message[256];
		new password[MAX_PLAYER_NAME];
			password[playerid] = dini_Int(UserFile, "password");
     		money[playerid] = dini_Int(UserFile, "money");
     		adminlevel[playerid] = dini_Int(UserFile, "adminlevel");
		if(password[playerid] != udb_hash(inputtext))
		{
 				SendClientMessage(playerid, COLOR_RED, "The password is wrong.");
 				ShowPlayerDialog(playerid,3,DIALOG_STYLE_INPUT,"Login;","You can now login\n Please fill in your password:","Login","Cancel");
		}
		else
		{
 				format(message, sizeof(message), "Welcome back %s!", playername, inputtext);
    			SendClientMessage(playerid, COLOR_YELLOW, message);
    			logged[playerid] = 1;
     		}
	}
}
if(dialogid == 4)
{
    if(dini_Exists(UserFile))
    {
        SendClientMessage(playerid, COLOR_YELLOW, "This account is already registered");
        ShowPlayerDialog(playerid,2, DIALOG_STYLE_MSGBOX,"Welcome!","Chose one of the following options:","LOGIN","ReGiSTER");
	}
	else
	{
		if(response)
		{
	    	dini_Set(UserFile, "password", inputtext);
		}
		else
		{
               ShowPlayerDialog(playerid,2, DIALOG_STYLE_MSGBOX,"Welcome!","Chose one of the following options:","LOGIN","ReGiSTER");
		}
	}
}
return 1;
}

Uitleg:

Ik wil dat als de mensen op LOGIN klikken, dat ze bij het volgende dialog box komen (Dialog box #3) zelfde bij registreren dialog box #4.

Dit werkt echter niet, als ik op een van de twee opties klik, kom ik bij de spawn bar uit.

Kan iemand mij helpen?

Edited by 1112rutger

  • Author

Verschijnen zo volledig niet, het is in ieder geval normaal dat als je de eerste dialog box afsluit het spawn gedeelte er al staat maar normaal kan je dan nog niets doen ;)

Hoe maak je restricties voor input boxes?

Bijv:

if(response <= 25)

of if(response = NIKS INGEVULD]

?

  • Author

response is een bool en geeft alleen, true en false terug om na te checken welke van de 2 buttons zijn gebruikt, ik een selectie box gebruik je listitem in zo,n input box gebruik je: inputtext ;)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

Recently Browsing 0

  • No registered users viewing this page.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.