Advertisement
Guest User

TimerSys v1 by Templer

a guest
Sep 10th, 2010
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 13.24 KB | None | 0 0
  1. /*                   TimerSys Include by Templer
  2.                        (for SAMP 0.3 / or higher)
  3.         Dieses Script darf von jedermann verändert und benutzt werden!
  4.     Mir ist es sogar egal, wenn Ihr was von hier für euren Vorteil rauskopiert!
  5.     Was jedoch nicht Geduldet wird, dass das Copyright entfernt wird vom Script!
  6.  
  7.                     Credits:
  8.                         -Double-O-Seven : Für das Zeigen wie Include und GM am besten kommunizieren!
  9.                         -Samp-Team : Die es überhaupt ermöglicht haben sowas Programmierbar für GTA zu machen!*/
  10.  
  11. #define COPYRIGHT_BY_TEMPLER
  12. #define MAX_TIMERS (30) //Die maximale Anzahl an Timer die verwendet werden. (Default: 20 Timer)
  13. #define MIN_FT_TIME_PERIOD (50) //Die kürzeste Zeit von einem Timer der sich wiederholen soll (Default: 700ms)
  14. #define MAX_PUBLIC_NAME_LENGTH (64) //Die maximale Bezeichnungslänge eines public´s. (Default: 32 Charakter)
  15. #define MAX_ARGUMENT_LENGTH (25) //Wieviele Argumente SA-MP Unterstützt. (Default: 25 Char)
  16. #define ALLOW_REMOTE_CALL (true) //Ob die Timerfunktion die Funktionen außerhalb des Scriptes abrufen soll. (Default: true)
  17.  
  18. enum timerinfoenum
  19. {
  20.     bool:tmAktiv,
  21.     tmName[MAX_PUBLIC_NAME_LENGTH],
  22.     tmTime,
  23.     tmCurrentTime,
  24.     bool:tmRepeat,
  25.     bool:tmPassed,
  26.     tmEndTime,
  27.     tmExVersion,
  28.     tmExString[MAX_ARGUMENT_LENGTH],
  29. };
  30. enum timerexenum
  31. {
  32.     tmTyp,
  33.     tmInteger,
  34.     Float:tmFloat,
  35.     tmString[MAX_PUBLIC_NAME_LENGTH],
  36. }
  37. new gTimerInfo[MAX_TIMERS][timerinfoenum];
  38. new gTimerInfoEx[MAX_TIMERS][MAX_ARGUMENT_LENGTH][timerexenum];
  39. new static gTimerCount = 0;
  40. new gTimerString[256];
  41.  
  42. forward FT_OnGameModeInit();
  43. forward FT_OnGameModeExit();
  44. forward FT_FastTimerCheck();
  45.  
  46. stock floatval(Float:var)
  47. {
  48.     new str[32];
  49.     format(str, sizeof(str), "%f", var);
  50.     return strval(str);
  51. }
  52.  
  53. stock SendErrorMsg(errormsg[sizeof gTimerString])
  54. {
  55.     printf("[FastTimer]: %s", errormsg);
  56.     return false;
  57. }
  58.    
  59. stock GetFastTimerID(timername[])
  60. {  
  61.     new tcount = 0;
  62.     if(strlen(timername) >= MAX_PUBLIC_NAME_LENGTH) return -1;
  63.     while(tcount != gTimerCount)
  64.     {
  65.         if(!strcmp(timername, gTimerInfo[tcount][tmName], false)) return tcount;
  66.         tcount++;
  67.     }
  68.     return -1;
  69. }
  70.  
  71. stock ReturnType(timer, arg, type)
  72. {
  73.     switch(type)
  74.     {
  75.         case 97: return gTimerInfoEx[timer][arg][tmInteger];
  76.         case 98: return _:gTimerInfoEx[timer][arg][tmFloat];
  77.         case 99: return gTimerInfoEx[timer][arg][tmString];
  78.         default: return false;
  79.     }
  80.     return true;
  81. }
  82.  
  83. stock ClearTimerExArguments(timerid)
  84. {
  85.     new arg = 0;
  86.     for(; arg < (MAX_ARGUMENT_LENGTH-1); arg++)
  87.     {
  88.         gTimerInfoEx[timerid][arg][tmTyp] = 0;
  89.         gTimerInfoEx[timerid][arg][tmInteger] = 0;
  90.         gTimerInfoEx[timerid][arg][tmFloat] = 0.0;
  91.         strdel(gTimerInfoEx[timerid][arg][tmString], 0, MAX_PUBLIC_NAME_LENGTH);
  92.     }
  93.     return true;
  94. }
  95.  
  96. #if ALLOW_REMOTE_CALL == true
  97.     #define Call_Function CallRemoteFunction
  98. #else
  99.     #define Call_Function CallLocalFunction
  100. #endif
  101.  
  102. #if !defined COPYRIGHT_BY_TEMPLER
  103.     #error "Removing Copyrights vom Script is not allowed"
  104. #endif
  105.  
  106. stock SetFastTimer(startname[], time, repeat = 0, endtimer = 0)
  107. {
  108.     if(strlen(startname) >= MAX_PUBLIC_NAME_LENGTH) {
  109.     format(gTimerString, sizeof gTimerString, "Der zu löschende TimerName %s ist ungültig bzw. zu Lang!", startname);
  110.     return SendErrorMsg(gTimerString); }
  111.     if(gTimerCount == MAX_TIMERS) return SendErrorMsg("Maximale Timer Anzahl erreicht! Erhöhen Sie bitte den Wert in der timersys.inc");
  112.     if(GetFastTimerID(startname) != -1) {
  113.     format(gTimerString, sizeof gTimerString, "Nochmalige Ausführung von %s geblockt! Bitte vorher Zerstören!", startname);
  114.     return SendErrorMsg(gTimerString); }
  115.     if(time < 0) {
  116.     format(gTimerString, sizeof gTimerString, "Timerzeit bei %s ist ungültig!", startname);
  117.     return SendErrorMsg(gTimerString); }
  118.     format(gTimerInfo[gTimerCount][tmName], MAX_PUBLIC_NAME_LENGTH, startname);
  119.     gTimerInfo[gTimerCount][tmTime] = time; gTimerInfo[gTimerCount][tmExVersion] = 0;
  120.     gTimerInfo[gTimerCount][tmCurrentTime] = GetTickCount()+time;  gTimerInfo[gTimerCount][tmRepeat] = (repeat != 0 ? true : false);
  121.     gTimerInfo[gTimerCount][tmEndTime] = (endtimer != 0 ? GetTickCount()+endtimer : 0); gTimerInfo[gTimerCount][tmAktiv] = true; gTimerInfo[gTimerCount][tmPassed] = false;
  122.     gTimerCount++;
  123.     return true;
  124. }
  125.  
  126. stock SetFastTimerEx(startname[], time, repeat = 0, const params[], {Float,_}:...)
  127. {
  128.     if(strlen(startname) >= MAX_PUBLIC_NAME_LENGTH) {
  129.     format(gTimerString, sizeof gTimerString, "Der zu löschende TimerName %s ist ungültig bzw. zu Lang!", startname);
  130.     return SendErrorMsg(gTimerString); }
  131.     if(strlen(params)+4 != numargs()) {
  132.     format(gTimerString, sizeof gTimerString, "Die Format-Params stimmen nicht überein vom Timer %s!", startname);
  133.     return SendErrorMsg(gTimerString); }
  134.     if(gTimerCount == MAX_TIMERS) return SendErrorMsg("Maximale Timer Anzahl erreicht! Erhöhen Sie bitte den Wert in der timersys.inc");
  135.     if(GetFastTimerID(startname) != -1) {
  136.     format(gTimerString, sizeof gTimerString, "Nochmalige Ausführung von %s geblockt! Bitte vorher Zerstören!", startname);
  137.     return SendErrorMsg(gTimerString); }
  138.     if(time < 0) {
  139.     format(gTimerString, sizeof gTimerString, "Timerzeit bei %s ist ungültig!", startname);
  140.     return SendErrorMsg(gTimerString); }
  141.     new arg = 4, cache[2][128], index = 0;
  142.     while(arg != strlen(params)+4)
  143.     {
  144.         strdel(cache[0], 0, 128); strdel(cache[1], 0, 128);
  145.         switch(params[arg-4])
  146.         {
  147.             case 'i','d','b','c':
  148.             {
  149.                 gTimerInfoEx[gTimerCount][arg-4][tmInteger] = getarg(arg);
  150.                 gTimerInfoEx[gTimerCount][arg-4][tmTyp] = 97;
  151.             }
  152.             case 'f':
  153.             {
  154.                 format(cache[0], 128, "%f", getarg(arg));
  155.                 gTimerInfoEx[gTimerCount][arg-4][tmFloat] = floatstr(cache[0]);
  156.                 gTimerInfoEx[gTimerCount][arg-4][tmTyp] = 98;
  157.             }
  158.             case 's':
  159.             {
  160.                 new chari = 1;
  161.                 while(chari != 0)
  162.                 {
  163.                     chari = getarg(arg, index);
  164.                     format(cache[1], 128, "%s", getarg(arg, index++));
  165.                     strcat(cache[0], cache[1]);
  166.                 }
  167.                 format(gTimerInfoEx[gTimerCount][arg-4][tmString], MAX_PUBLIC_NAME_LENGTH, cache[0]);
  168.                 gTimerInfoEx[gTimerCount][arg-4][tmTyp] = 99;
  169.             }
  170.             default:
  171.             {
  172.                 ClearTimerExArguments(gTimerCount);
  173.                 format(gTimerString, sizeof gTimerString, "Argumenten Mismatch Fehl-Unterstützung!", startname);
  174.                 return SendErrorMsg(gTimerString);
  175.             }
  176.         }
  177.         arg++;
  178.     }
  179.     format(gTimerInfo[gTimerCount][tmName], MAX_PUBLIC_NAME_LENGTH, startname);
  180.     format(gTimerInfo[gTimerCount][tmExString], MAX_ARGUMENT_LENGTH, params);
  181.     gTimerInfo[gTimerCount][tmTime] = time; gTimerInfo[gTimerCount][tmExVersion] = strlen(params);
  182.     gTimerInfo[gTimerCount][tmCurrentTime] = GetTickCount()+time;  gTimerInfo[gTimerCount][tmRepeat] = (repeat != 0 ? true : false);
  183.     gTimerInfo[gTimerCount][tmEndTime] = (getarg(numargs(), 0) > 0 ? GetTickCount()+getarg(numargs(), 0) : 0); gTimerInfo[gTimerCount][tmAktiv] = true;
  184.     gTimerInfo[gTimerCount][tmPassed] = false;
  185.     gTimerCount++;
  186.     return true;
  187. }
  188.  
  189. stock KillFastTimer(killname[])
  190. {
  191.     if(strlen(killname) >= MAX_PUBLIC_NAME_LENGTH) {
  192.     format(gTimerString, sizeof gTimerString, "Der zu löschende TimerName %s ist ungültig bzw. zu Lang!", killname);
  193.     return SendErrorMsg(gTimerString); }
  194.     if(GetFastTimerID(killname) == -1) {
  195.     format(gTimerString, sizeof gTimerString, "Der zu löschende Timer %s wurde nicht gefunden!", killname);
  196.     return SendErrorMsg(gTimerString); }
  197.     new tcount = GetFastTimerID(killname);
  198.     format(gTimerInfo[tcount][tmName], MAX_PUBLIC_NAME_LENGTH, "%s", "Nichts");
  199.     format(gTimerInfo[tcount][tmExString], MAX_PUBLIC_NAME_LENGTH, "%s", "Nichts");
  200.     gTimerInfo[tcount][tmTime] = 0;
  201.     gTimerInfo[tcount][tmCurrentTime] = 0; gTimerInfo[tcount][tmRepeat] = false;
  202.     gTimerInfo[tcount][tmEndTime] = 0; gTimerInfo[tcount][tmAktiv] = false; gTimerInfo[gTimerCount][tmExVersion] = 0;
  203.     ClearTimerExArguments(tcount);
  204.     if(tcount != gTimerCount)
  205.     {
  206.         while(tcount != gTimerCount)
  207.         {
  208.             if(tcount >= (gTimerCount-1)) {
  209.             format(gTimerInfo[tcount][tmName], MAX_PUBLIC_NAME_LENGTH, "%s", "Nichts");
  210.             format(gTimerInfo[tcount][tmExString], MAX_PUBLIC_NAME_LENGTH, "%s", "Nichts");
  211.             gTimerInfo[tcount][tmTime] = 0; gTimerInfo[gTimerCount][tmExVersion] = 0;
  212.             gTimerInfo[tcount][tmCurrentTime] = 0; gTimerInfo[tcount][tmRepeat] = false;
  213.             gTimerInfo[tcount][tmEndTime] = 0; gTimerInfo[tcount][tmAktiv] = false;
  214.             ClearTimerExArguments(tcount); }
  215.             else {
  216.             format(gTimerInfo[tcount][tmName], MAX_PUBLIC_NAME_LENGTH, gTimerInfo[tcount+1][tmName]);
  217.             if(gTimerInfo[tcount+1][tmExVersion]) format(gTimerInfo[tcount][tmExString], 256, gTimerInfo[tcount+1][tmExString]);
  218.             gTimerInfo[tcount][tmTime] = 0; gTimerInfo[tcount][tmExVersion] = gTimerInfo[tcount+1][tmExVersion];
  219.             gTimerInfo[tcount][tmCurrentTime] = gTimerInfo[tcount+1][tmCurrentTime]; gTimerInfo[tcount][tmRepeat] = gTimerInfo[tcount+1][tmRepeat];
  220.             gTimerInfo[tcount][tmEndTime] = gTimerInfo[tcount+1][tmEndTime]; gTimerInfo[tcount][tmAktiv] = gTimerInfo[tcount+1][tmAktiv];
  221.             for(new arg = 0; arg < (MAX_ARGUMENT_LENGTH-1); arg++)
  222.             {
  223.                 gTimerInfoEx[tcount][arg][tmTyp] = gTimerInfoEx[tcount+1][arg][tmTyp];
  224.                 gTimerInfoEx[tcount][arg][tmInteger] = gTimerInfoEx[tcount+1][arg][tmInteger];
  225.                 gTimerInfoEx[tcount][arg][tmFloat] = gTimerInfoEx[tcount+1][arg][tmFloat];
  226.                 format(gTimerInfoEx[tcount][arg][tmString], MAX_PUBLIC_NAME_LENGTH, gTimerInfoEx[tcount+1][arg][tmString]);
  227.             }}
  228.             ++tcount;
  229.         }
  230.     }
  231.     gTimerCount--;
  232.     return true;
  233. }
  234.  
  235. public OnGameModeInit()
  236. {
  237.     for(new count = 0; count < (MAX_TIMERS-1); count++)
  238.     {
  239.         format(gTimerInfo[count][tmName], MAX_PUBLIC_NAME_LENGTH, "%s", "Nichts");
  240.         format(gTimerInfo[count][tmExString], MAX_PUBLIC_NAME_LENGTH, "%s", "Nichts");
  241.         gTimerInfo[count][tmTime] = 0;
  242.         gTimerInfo[count][tmCurrentTime] = 0; gTimerInfo[count][tmRepeat] = false;
  243.         gTimerInfo[count][tmEndTime] = 0; gTimerInfo[count][tmAktiv] = false; gTimerInfo[gTimerCount][tmExVersion] = 0;
  244.         ClearTimerExArguments(count);
  245.     }
  246.     SetTimer("FT_FastTimerCheck", MIN_FT_TIME_PERIOD, true);
  247.     return CallLocalFunction("FT_OnGameModeInit", "");
  248. }
  249.  
  250. public OnGameModeExit()
  251. {
  252.     for(new count = 0; count < (MAX_TIMERS-1); count++)
  253.     {
  254.         format(gTimerInfo[count][tmName], MAX_PUBLIC_NAME_LENGTH, "%s", "Nichts");
  255.         format(gTimerInfo[count][tmExString], MAX_PUBLIC_NAME_LENGTH, "%s", "Nichts");
  256.         gTimerInfo[count][tmTime] = 0;
  257.         gTimerInfo[count][tmCurrentTime] = 0; gTimerInfo[count][tmRepeat] = false;
  258.         gTimerInfo[count][tmEndTime] = 0; gTimerInfo[count][tmAktiv] = false; gTimerInfo[gTimerCount][tmExVersion] = 0;
  259.         ClearTimerExArguments(count);
  260.     }
  261.     return CallLocalFunction("FT_OnGameModeExit", "");
  262. }
  263.  
  264. public FT_FastTimerCheck()
  265. {
  266.     new tcount = -1;
  267.     while(tcount != gTimerCount)
  268.     {
  269.         tcount++;
  270.         if(!gTimerInfo[tcount][tmAktiv] || gTimerInfo[tcount][tmCurrentTime] > GetTickCount() || gTimerInfo[tcount][tmCurrentTime] <= GetTickCount() && gTimerInfo[tcount][tmPassed]) continue;
  271.         gTimerInfo[tcount][tmPassed] = true;
  272.         new tick = GetTickCount();
  273.         if(gTimerInfo[tcount][tmExVersion]) Call_Function(gTimerInfo[tcount][tmName], gTimerInfo[tcount][tmExString],
  274.         ReturnType(tcount, 0, gTimerInfoEx[tcount][0][tmTyp]),
  275.         ReturnType(tcount, 1, gTimerInfoEx[tcount][1][tmTyp]),
  276.         ReturnType(tcount, 2, gTimerInfoEx[tcount][2][tmTyp]),
  277.         ReturnType(tcount, 3, gTimerInfoEx[tcount][3][tmTyp]),
  278.         ReturnType(tcount, 4, gTimerInfoEx[tcount][4][tmTyp]),
  279.         ReturnType(tcount, 5, gTimerInfoEx[tcount][5][tmTyp]),
  280.         ReturnType(tcount, 6, gTimerInfoEx[tcount][6][tmTyp]),
  281.         ReturnType(tcount, 7, gTimerInfoEx[tcount][7][tmTyp]),
  282.         ReturnType(tcount, 8, gTimerInfoEx[tcount][8][tmTyp]),
  283.         ReturnType(tcount, 9, gTimerInfoEx[tcount][9][tmTyp]),
  284.         ReturnType(tcount, 10, gTimerInfoEx[tcount][10][tmTyp]),
  285.         ReturnType(tcount, 11, gTimerInfoEx[tcount][11][tmTyp]),
  286.         ReturnType(tcount, 12, gTimerInfoEx[tcount][12][tmTyp]),
  287.         ReturnType(tcount, 13, gTimerInfoEx[tcount][13][tmTyp]),
  288.         ReturnType(tcount, 14, gTimerInfoEx[tcount][14][tmTyp]),
  289.         ReturnType(tcount, 15, gTimerInfoEx[tcount][15][tmTyp]),
  290.         ReturnType(tcount, 16, gTimerInfoEx[tcount][16][tmTyp]),
  291.         ReturnType(tcount, 17, gTimerInfoEx[tcount][17][tmTyp]),
  292.         ReturnType(tcount, 18, gTimerInfoEx[tcount][18][tmTyp]),
  293.         ReturnType(tcount, 19, gTimerInfoEx[tcount][19][tmTyp]),
  294.         ReturnType(tcount, 20, gTimerInfoEx[tcount][20][tmTyp]),
  295.         ReturnType(tcount, 21, gTimerInfoEx[tcount][21][tmTyp]),
  296.         ReturnType(tcount, 22, gTimerInfoEx[tcount][22][tmTyp]),
  297.         ReturnType(tcount, 23, gTimerInfoEx[tcount][23][tmTyp]),
  298.         ReturnType(tcount, 24, gTimerInfoEx[tcount][24][tmTyp]));
  299.         else Call_Function(gTimerInfo[tcount][tmName], "");
  300.         if((GetTickCount()-tick) > gTimerInfo[tcount][tmTime] && gTimerInfo[tcount][tmRepeat]) {
  301.         gTimerInfo[tcount][tmTime] = (GetTickCount()-tick);
  302.         format(gTimerString, sizeof gTimerString, "TimerZeit von %s wurde optimiert auf %d!", gTimerInfo[tcount][tmName], (GetTickCount()-tick));
  303.         SendErrorMsg(gTimerString); }
  304.         gTimerInfo[tcount][tmCurrentTime] = GetTickCount()+gTimerInfo[tcount][tmTime];
  305.         gTimerInfo[tcount][tmPassed] = false;
  306.         if(!gTimerInfo[tcount][tmRepeat] || gTimerInfo[tcount][tmEndTime] && gTimerInfo[tcount][tmEndTime] >= GetTickCount()) KillFastTimer(gTimerInfo[tcount][tmName]);
  307.     }
  308.     return true;
  309. }
  310.  
  311. #if defined _ALS_OnGameModeInit
  312.     #undef OnGameModeInit
  313. #else
  314.     #define _ALS_OnGameModeInit
  315. #endif
  316. #define OnGameModeInit FT_OnGameModeInit
  317.  
  318. #if defined _ALS_OnGameModeExit
  319.     #undef OnGameModeExit
  320. #else
  321.     #define _ALS_OnGameModeExit
  322. #endif
  323. #define OnGameModeExit FT_OnGameModeExit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement