15.11.2013, 10:52
(
Last edited by Emmet_; 04/04/2015 at 11:23 PM.
)
easyDialog.inc
Introduction
I've released this include a little over a year ago. However, it didn't have many features and it wasn't crash proof, so I've decided to scrap it and rewrite the whole include from scratch.
Purpose
The purpose of this include is to make dialogs easier to use in general.
Imagine having over 100 dialog checks under OnDialogResponse. It's just too messy and most of the time, it's unorganized and harder to look for certain dialogs for future editing, and remembering certain dialog ID's can be a pain in the ass.
However, easyDialog.inc fixes that by introducing a "named dialog feature" which allows scripters to declare a dialog by name, rather than ID.
This code:
Turns into this code:
I think the second example is much more neater, especially for larger scripts.
Callback
This script introduces a new callback:
This callback is called before a dialog is shown to a player (using Dialog_Show, that is). Returning 0 under this callback will prevent the dialog from working.
Very simple, isn't it?
Functions
This include introduces several new useful functions:
Shows a dialog to a player.
Closes any opened dialogs.
Returns 1 if the dialog is opened for the specified player.
Download
easyDialog.inc (Pastebin)
easyDialog.inc (Solidfiles)
Example Script (Pastebin)
Example Script (Solidfiles)
This include doesn't work...
a) Update to the newest version
easyDialog was originally released in 2012, and the latest stable version was released on March 31, 2015. You must update to the latest version for the latest features and bug fixes.
easyDialog works in parallel with OnDialogResponse, so you can use both at the same time. Older versions do not support this.
b) Includes and filterscripts
Returning 0 under OnDialogResponse will pass the dialog to other scripts containing the callback. However, certain filterscripts and third-party libraries might return 1 instead. This interferes with the inner workings of easyDialog and causes the dialogs to not work.
Simply return 0 instead to fix the issue.
Introduction
I've released this include a little over a year ago. However, it didn't have many features and it wasn't crash proof, so I've decided to scrap it and rewrite the whole include from scratch.
Purpose
The purpose of this include is to make dialogs easier to use in general.
Imagine having over 100 dialog checks under OnDialogResponse. It's just too messy and most of the time, it's unorganized and harder to look for certain dialogs for future editing, and remembering certain dialog ID's can be a pain in the ass.
However, easyDialog.inc fixes that by introducing a "named dialog feature" which allows scripters to declare a dialog by name, rather than ID.
Feature | OnDialogResponse | easyDialog.inc |
Crash Proof | No | Yes |
Named Dialogs | No | Yes |
Calling a dialog manually | No | Yes |
Custom callback for handling | No | Yes |
pawn Code:
#define DIALOG_WEAPON (1337)
CMD:weapons(playerid, params[])
{
ShowPlayerDialog(playerid, DIALOG_WEAPON, DIALOG_STYLE_LIST, "Weapon Menu", "9mm\nSilenced 9mm\nDesert Eagle\nShotgun\nSawn-off Shotgun\nCombat Shotgun", "Select", "Cancel");
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if (dialogid == DIALOG_WEAPON)
{
if (response)
{
new str[64];
format(str, 64, "You have selected the '%s'.", inputtext);
GivePlayerWeapon(playerid, listitem + 22, 500);
SendClientMessage(playerid, -1, str);
}
}
return 1;
}
pawn Code:
CMD:weapons(playerid, params[])
{
Dialog_Show(playerid, WeaponMenu, DIALOG_STYLE_LIST, "Weapon Menu", "9mm\nSilenced 9mm\nDesert Eagle\nShotgun\nSawn-off Shotgun\nCombat Shotgun", "Select", "Cancel");
return 1;
}
Dialog:WeaponMenu(playerid, response, listitem, inputtext[])
{
if (response)
{
new str[64];
format(str, 64, "You have selected the '%s'.", inputtext);
GivePlayerWeapon(playerid, listitem + 22, 500);
SendClientMessage(playerid, -1, str);
}
return 1;
}
Callback
This script introduces a new callback:
pawn Code:
public OnDialogPerformed(playerid, dialog[], response, success)
{
return 1;
}
pawn Code:
public OnDialogPerformed(playerid, dialog[], response, success)
{
if (!strcmp(dialog, "WeaponMenu") && IsPlayerInAnyVehicle(playerid))
{
SendClientMessage(playerid, -1, "You must be on-foot to spawn a weapon.");
return 0;
}
return 1;
}
Functions
This include introduces several new useful functions:
pawn Code:
Dialog_Show(playerid, dialog, style, caption[], info[], button1[], button2[]);
pawn Code:
Dialog_Close(playerid);
pawn Code:
Dialog_Opened(playerid);
Download
easyDialog.inc (Pastebin)
easyDialog.inc (Solidfiles)
Example Script (Pastebin)
Example Script (Solidfiles)
This include doesn't work...
a) Update to the newest version
easyDialog was originally released in 2012, and the latest stable version was released on March 31, 2015. You must update to the latest version for the latest features and bug fixes.
pawn Code:
// easyDialog v1.0 Syntax:
ShowDialog(playerid, Show:MyDialog, DIALOG_STYLE_LIST, "List", "Items", "Select", "Cancel");
// easyDialog v2.0 Syntax:
Dialog_Show(playerid, MyDialog, DIALOG_STYLE_LIST, "List", "Items", "Select", "Cancel");
b) Includes and filterscripts
Returning 0 under OnDialogResponse will pass the dialog to other scripts containing the callback. However, certain filterscripts and third-party libraries might return 1 instead. This interferes with the inner workings of easyDialog and causes the dialogs to not work.
Simply return 0 instead to fix the issue.