Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- easyDialog.inc - Dialogs made easier!
- With this useful include, scripters can easily create
- dialogs and show them to players.
- This include will prevent dialog spoofing, ID collision
- and a lot more.
- Created by Emmet on Friday, January 24, 2014.
- */
- #if !defined isnull
- #define isnull(%1) \
- ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
- #endif
- #define Dialog:%0(%1) \
- forward dialog_%0(%1); public dialog_%0(%1)
- #define Dialog_Show(%0,%1, \
- Dialog_Open(%0, #%1,
- #define Dialog_Opened(%0) \
- (CallRemoteFunction("Dialog_IsOpened", "i", (%0)))
- static
- s_DialogName[MAX_PLAYERS][32 char],
- s_DialogOpened[MAX_PLAYERS]
- ;
- forward OnDialogPerformed(playerid, dialog[], response, success);
- forward @dialog_format(); @dialog_format() {
- format("", 0, "");
- }
- forward Dialog_IsOpened(playerid);
- public Dialog_IsOpened(playerid)
- {
- return (s_DialogOpened[playerid]);
- }
- stock Dialog_Close(playerid)
- {
- s_DialogName[playerid]{0} = 0;
- s_DialogOpened[playerid] = 0;
- return ShowPlayerDialog(playerid, -1, DIALOG_STYLE_MSGBOX, " ", " ", " ", "");
- }
- stock Dialog_Open(playerid, function[], style, caption[], info[], button1[], button2[], {Float,_}:...)
- {
- static
- string[4096],
- args
- ;
- if (!strlen(info))
- {
- return 0;
- }
- if ((args = numargs()) > 7)
- {
- while (--args >= 7)
- {
- #emit LCTRL 5
- #emit LOAD.alt args
- #emit SHL.C.alt 2
- #emit ADD.C 12
- #emit ADD
- #emit LOAD.I
- #emit PUSH.pri
- }
- #emit PUSH.S info
- #emit PUSH.C 4096
- #emit PUSH.C string
- #emit LOAD.S.pri 8
- #emit CONST.alt 16
- #emit SUB
- #emit PUSH.pri
- #emit SYSREQ.C format
- #emit LCTRL 5
- #emit SCTRL 4
- ShowPlayerDialog(playerid, 32700, style, caption, string, button1, button2);
- }
- else
- {
- ShowPlayerDialog(playerid, 32700, style, caption, info, button1, button2);
- }
- s_DialogOpened[playerid] = 1;
- strpack(s_DialogName[playerid], function, 32 char);
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- static
- s_Public = cellmax;
- if (s_Public == cellmax)
- {
- s_Public = funcidx("OnDialogPerformed");
- }
- // Sanitize inputs.
- for (new i = 0, l = strlen(inputtext); i < l; i ++)
- {
- if (inputtext[i] == '%')
- {
- inputtext[i] = '#';
- }
- }
- if (dialogid == 32700 && strlen(s_DialogName[playerid]) > 0)
- {
- new
- string[40];
- strcat(string, "dialog_");
- strcat(string, s_DialogName[playerid]);
- Dialog_Close(playerid);
- if ((s_Public == -1) || (CallLocalFunction("OnDialogPerformed", "dsdd", playerid, string[7], response, funcidx(string) != -1)))
- {
- CallLocalFunction(string, "ddds", playerid, response, listitem, (!inputtext[0]) ? ("\1") : (inputtext));
- }
- }
- #if defined DR_OnDialogResponse
- return DR_OnDialogResponse(playerid, dialogid, response, listitem, inputtext);
- #else
- return 0;
- #endif
- }
- #if defined _ALS_OnDialogResponse
- #undef OnDialogResponse
- #else
- #define _ALS_OnDialogResponse
- #endif
- #define OnDialogResponse DR_OnDialogResponse
- #if defined DR_OnDialogResponse
- forward DR_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
- #endif
Add Comment
Please, Sign In to add comment