[Include] easyDialog.inc - Dialogs made easier! 1.0.0

   (0 avis)

À propos de ce fichier

Je post ici cette include car elle n'est plus disponible sur le forum officiel. 

 

Voici le post original de : Emmet_

 

http://forum.sa-mp.com/showthread.php?t=475838

 

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.
 

Feature OnDialogResponse easyDialog.inc
Crash Proof No Yes
Named Dialogs No Yes
Calling a dialog manually No Yes
Custom callback for handling No Yes


This code:
 

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;
}


Turns into this code:
 

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;
}


I think the second example is much more neater, especially for larger scripts.

Callback
This script introduces a new callback:
 

Code:
public OnDialogPerformed(playerid, dialog[], response, success)
{
    return 1;
}


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.
 

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;
}


Very simple, isn't it?

Functions
This include introduces several new useful functions:
 

Code:
Dialog_Show(playerid, dialog, style, caption[], info[], button1[], button2[]);


Shows a dialog to a player.
 

Code:
Dialog_Close(playerid);


Closes any opened dialogs.
 

Code:
Dialog_Opened(playerid);


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. 
 

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");


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.





Retour utilisateur

Vous pouvez donner un avis uniquement après avoir téléchargé le fichier.

Aucun avis à afficher.