Guest User

Timer Dialoge (c) by Kaliber

a guest
Feb 5th, 2015
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.14 KB | None | 0 0
  1. /* SA-MP Include Timer Dialoge
  2.  *
  3.  * (c) by Kaliber, 2015
  4.  *
  5.  */
  6. #if !defined _samp_included
  7.     #include <a_samp>
  8. #endif
  9. #if defined _samp_timeDialogs
  10.     #endinput
  11. #endif
  12. #define _samp_timeDialogs
  13. forward t_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
  14. #if !defined MAX_DIALOGS
  15.     #define MAX_DIALOGS 100
  16. #endif
  17. #if !defined START_DIALOG
  18.     #define START_DIALOG 2111
  19. #endif
  20. #if !defined MAX_TIME
  21.     #define MAX_TIME 0x3B9ACA00
  22. #endif
  23. enum e_Dialogs {
  24.     d_Time,a_Time,
  25.     d_Header[64],
  26.     d_Body[0xFF],
  27.     d_Button[0xF]
  28. };
  29. static Dialog[MAX_DIALOGS][e_Dialogs],d_idx=-1;
  30. /*
  31.     native ShowPlayerTimeDialog(playerid,time,header[],body[],const button[]);
  32.     native RestartTimeDialog(playerid,id,time=0);
  33. */
  34. stock ShowPlayerTimeDialog(playerid,time,header[],body[],const button[]) {
  35.     if(time < 1 || time >= MAX_TIME) return -1;
  36.     d_idx++;
  37.     if(d_idx >= MAX_DIALOGS) return printf("Maximale Anzahl von Timer-Dialogen überschritten! Bitte Directive ändern!");
  38.     new tmp[0xA];
  39.     valstr(tmp,time),Dialog[d_idx][a_Time]=time;
  40.     ShowPlayerDialog(playerid,START_DIALOG+d_idx,DIALOG_STYLE_MSGBOX,header,body,tmp,"");
  41.     Dialog[d_idx][d_Time] = time,strcat(Dialog[d_idx][d_Header],header,64);
  42.     strcat(Dialog[d_idx][d_Body],body,0xFF),strcat(Dialog[d_idx][d_Button],button,0xF);
  43.     return SetTimerEx("@d_Timer",1000,0,"iii",playerid,d_idx,time),d_idx;
  44. }
  45. stock RestartTimeDialog(playerid,dialogid,time=0) {
  46.     if(time < 0 || time >= MAX_TIME) return -1;
  47.     new tmp[0xA];
  48.     valstr(tmp,time),Dialog[dialogid][a_Time]=(!time)?Dialog[dialogid][d_Time]:time;
  49.     if(time) Dialog[dialogid][d_Time] = time;
  50.     ShowPlayerDialog(playerid,START_DIALOG+dialogid,DIALOG_STYLE_MSGBOX,Dialog[dialogid][d_Header],Dialog[dialogid][d_Body],tmp,"");
  51.     return SetTimerEx("@d_Timer",1000,0,"iii",playerid,dialogid,time),dialogid;
  52. }
  53. @d_Timer(i,dialogid,x);@d_Timer(i,dialogid,x) {
  54.     if(!IsPlayerConnected(i)) return Dialog[dialogid][a_Time]=0;
  55.     Dialog[dialogid][a_Time]--;
  56.     if(!Dialog[dialogid][a_Time]) return ShowPlayerDialog(i,START_DIALOG+dialogid,DIALOG_STYLE_MSGBOX,Dialog[dialogid][d_Header],Dialog[dialogid][d_Body],Dialog[dialogid][d_Button],"");
  57.     new tmp[0xA];
  58.     valstr(tmp,Dialog[dialogid][a_Time]),ShowPlayerDialog(i,START_DIALOG+dialogid,DIALOG_STYLE_MSGBOX,Dialog[dialogid][d_Header],Dialog[dialogid][d_Body],tmp,"");
  59.     return SetTimerEx("@d_Timer",1000,0,"iii",i,dialogid,0);
  60. }
  61. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  62.     for(new i,tmp[0xA]; i<=d_idx; i++) {
  63.         if(dialogid == START_DIALOG+i) {
  64.             if(Dialog[i][a_Time]) return valstr(tmp,Dialog[i][a_Time]),ShowPlayerDialog(playerid,dialogid,DIALOG_STYLE_MSGBOX,Dialog[i][d_Header],Dialog[i][d_Body],tmp,"");
  65.             return CallLocalFunction("OnTimeDialogResponse","ii",playerid,i);
  66.         }
  67.     }
  68.     return t_OnDialogResponse(playerid,dialogid,response,listitem,inputtext);
  69. }
  70. #if defined _ALS_OnDialogResponse
  71.     #undef OnDialogResponse
  72. #else
  73.     #define _ALS_OnDialogResponse
  74. #endif
  75. #define OnDialogResponse t_OnDialogResponse
  76. forward OnTimeDialogResponse(playerid, dialogid);
Advertisement
Add Comment
Please, Sign In to add comment