fxShowPlayerDialog no dialog id event only
#1

Hello!

The is too much complex for me to create DIALOG_ID for each dialog in my mode. So wrapped Showplayedialog with some trick.

The main idea is that player can't view more than 1 dialog at the same time.
Just want to share. Comments are welcome:

First declare fxShowPlayerDialog
PHP код:
new PlayerDialogFunc[MAX_PLAYERS][90];
new 
PlayerDialogStyle[MAX_PLAYERS];
fxShowPlayerDialog(playeridcallback[], dialogStyleheader[], text[], button1[], button2[]) {
    new 
fxCallback[32];
    
format(fxCallbacksizeof(fxCallback), "%s"callback);
    
PlayerDialogFunc[playerid] = fxCallback;
    
PlayerDialogStyle[playerid] = dialogStyle;
    
ShowPlayerDialog(playeridplayeriddialogStyleheadertextbutton1button2);

Next implement OnDialogResponse
PHP код:
public OnDialogResponse(playeriddialogidresponselistiteminputtext[]) {
    switch (
PlayerDialogStyle[playerid]) {
        case 
DIALOG_STYLE_MSGBOX: {
            return 
CallLocalFunction(PlayerDialogFunc[playerid], "ii"playeridresponse);
        }
        case 
DIALOG_STYLE_INPUTDIALOG_STYLE_PASSWORD: {
            new 
formatedInput[256];
            
format(formatedInputsizeof(formatedInput), "%s"inputtext);
            if (
isnull(formatedInput)) {
                
printf("FormattedInput is null: |%s|"formatedInput);
                return 
CallLocalFunction(PlayerDialogFunc[playerid], "iis"playeridresponse"\1");
            }
            
printf("Input: |%s|"formatedInput);
            return 
CallLocalFunction(PlayerDialogFunc[playerid], "iis"playeridresponseformatedInput);
        }
        default: {
            return 
CallLocalFunction(PlayerDialogFunc[playerid], "iii"playeridresponselistitem);
        }
    }
    return 
0;

After that in some part of your code you may use fxShowPlayerDialog
PHP код:
...
fxShowPlayerDialog(playerid"sampnet_onDialogAgreement"DIALOG_STYLE_MSGBOXAgreement[CurAgreementPage[playerid]][agreement_title], Agreement[CurAgreementPage[playerid]][agreement_text], "Next""");
...
forward sampnet_onDialogAgreement(playeridresponse);
public 
sampnet_onDialogAgreement(playeridresponse) {
    
CurAgreementPage[playerid]++;
    
sampnet_gamemode_showAgreement(playerid);

So you don't need to create DIALOG_ID for each dialog. You don't need to add code into OnDialogResponse too.
Just call dialog and implement callback.
BTW:
For different styles of dialog you should implement different type of callbacks.
Hope it helps somebody.

UPDATE: Fix issue with empty input
Reply


Messages In This Thread
fxShowPlayerDialog no dialog id event only - by diclofoss - 10.01.2016, 16:01
Re: fxShowPlayerDialog no dialog id event only - by PrO.GameR - 10.01.2016, 19:07
Re: fxShowPlayerDialog no dialog id event only - by diclofoss - 10.01.2016, 19:28

Forum Jump:


Users browsing this thread: 2 Guest(s)