Advertisement
Guest User

TimerSys v1.1 by Templer

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