Guest User

Wanted System by FreshDiddi

a guest
Jun 14th, 2013
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 11.72 KB | None | 0 0
  1. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. //////////////////////////////////// >>WANTEDSYSTEM BY FRESHDIDDI(R)<< ////////////////////////////////////////////////
  3. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  4.  
  5. #include <a_samp>
  6. #include <zcmd>
  7. #include <dini>
  8.  
  9. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  10.  
  11. #define COLOR_GREY          0xAFAFAFAA
  12. #define COLOR_YELLOW        0xFFFF00AA
  13. #define COLOR_RED           0xFF4122FF
  14.  
  15. //#define WANTEDTIMER 1         //Nach 15 Minuten verschwindet ein Wanted / Zum aktivieren des Timers: Einfach den Schrägstrich vor "#define" entfernen!
  16. //#define LOADSAFEWANTEDS       //Wanteds werden gespeichert/geladen / Zum aktivieren des Timers: Einfach den Schrägstrich vor "#define" entfernen!
  17.  
  18. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  19.  
  20. new Text:WantedTextdraw[MAX_PLAYERS];
  21. #if defined WANTEDTIMER
  22. new WantedTimer[MAX_PLAYERS];
  23. #endif
  24.  
  25. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  26.  
  27. public OnFilterScriptInit()
  28. {
  29.     print("\n--------------------------------------");
  30.     print("WantedSystem by FreshDiddi - geladen!");
  31.     print("--------------------------------------\n");
  32.     return 1;
  33. }
  34.  
  35. public OnFilterScriptExit()
  36. {
  37.     for(new i = 0; i < MAX_PLAYERS; i++)
  38.     {
  39.         DeletePVar(i,"Wantedlevel");
  40.         TextDrawDestroy(WantedTextdraw[i]);
  41.         SaveWanteds(i);
  42.         #if defined WANTEDTIMER
  43.         KillTimer(WantedTimer[i]);
  44.         #endif
  45.     }
  46.     return 1;
  47. }
  48.  
  49. public OnPlayerConnect(playerid)
  50. {
  51.     LoadWanteds(playerid);
  52.     WantedTextdraw[playerid] = TextDrawCreate(499.000000, 102.000000, "~y~]: ~w~0");
  53.     TextDrawBackgroundColor(WantedTextdraw[playerid], 255);
  54.     TextDrawFont(WantedTextdraw[playerid], 2);
  55.     TextDrawLetterSize(WantedTextdraw[playerid], 0.480000, 2.000000);
  56.     TextDrawColor(WantedTextdraw[playerid], -1);
  57.     TextDrawSetOutline(WantedTextdraw[playerid], 1);
  58.     TextDrawSetProportional(WantedTextdraw[playerid], 1);
  59.     UpdateWantedDraw(playerid);
  60.     return 1;
  61. }
  62.  
  63. public OnPlayerDisconnect(playerid, reason)
  64. {
  65.     SaveWanteds(playerid);
  66.     return 1;
  67. }
  68. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  69.  
  70. COMMAND:wanted(playerid,params[])
  71. {
  72.     new str[128], pID, wantedlevel;
  73.     if(sscanf(params, "ui", pID, wantedlevel))return SendClientMessage(playerid, COLOR_GREY, "Benutze: /wanted [ID] [Wanteds]");
  74.     if(IsPlayerConnected(pID))
  75.     {
  76.         if(!IsPlayerNPC(pID))
  77.         {
  78.             format(str,sizeof(str),"Du gibst %s [ID: %i] %i Wanted(s).", SpielerName(pID), pID, wantedlevel);
  79.             SendClientMessage(playerid, COLOR_YELLOW, str);
  80.             SetWantedLevel(pID,GetWantedLevel(pID)+wantedlevel);
  81.             format(str,sizeof(str),"Du erhälst %i Wanted(s) von der Polizei. Aktuelles Wantedlevel: %i", wantedlevel, GetWantedLevel(playerid));
  82.             SendClientMessage(pID, COLOR_YELLOW, str);
  83.             return 1;
  84.         }else return SendClientMessage(playerid,COLOR_GREY,"Du kannst einem NPC keine Wanteds geben.");
  85.     }else return SendClientMessage(playerid,COLOR_GREY,"Spieler ist nicht connected.");
  86. }
  87.  
  88. COMMAND:wantedlist(playerid,params[])
  89. {
  90.     new string[64];
  91.     SendClientMessage(playerid, COLOR_RED,"-----Wanted - Liste-----");
  92.     for(new i = 0; i < MAX_PLAYERS; i++)
  93.     {
  94.         if(IsPlayerConnected(i))
  95.         {
  96.             if(!IsPlayerNPC(i))
  97.             {
  98.                 if(GetWantedLevel(i) >=1)
  99.                 {
  100.                     format(string, sizeof(string), "%s - Wanteds: %d", SpielerName(i), GetWantedLevel(i));
  101.                     SendClientMessage(playerid, COLOR_YELLOW,string);
  102.                 }
  103.             }
  104.         }
  105.     }
  106.     return 1;
  107. }
  108.  
  109. COMMAND:clearwanted(playerid,params[])
  110. {
  111.     new str[128], pID;
  112.     if(sscanf(params, "u", pID))return SendClientMessage(playerid, COLOR_GREY, "Benutze: /clearwanted [ID]");
  113.     if(IsPlayerConnected(pID))
  114.     {
  115.         if(!IsPlayerNPC(pID))
  116.         {
  117.             format(str,sizeof(str),"Du clearst die Wanteds von %s [ID: %i].", SpielerName(pID), pID);
  118.             SendClientMessage(playerid, COLOR_YELLOW, str);
  119.             SendClientMessage(pID, COLOR_YELLOW, "Deine Wanteds wurden von der Polizei gecleart.");
  120.             SetWantedLevel(pID,0);
  121.             return 1;
  122.         }else return SendClientMessage(playerid,COLOR_GREY,"Du kannst einem NPC keine Wanteds geben.");
  123.     }else return SendClientMessage(playerid,COLOR_GREY,"Spieler ist nicht connected.");
  124. }
  125.  
  126. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  127.  
  128. forward WantedTimerPublic(playerid);
  129. public WantedTimerPublic(playerid)
  130. {
  131.     if(GetWantedLevel(playerid)>=1)
  132.     {
  133.         SetWantedLevel(playerid,GetWantedLevel(playerid)-1);
  134.         new str[200];
  135.         format(str,sizeof(str),"Du hast ein Wantedlevel verloren. Aktuelles Wantedlevel: %i", GetWantedLevel(playerid));
  136.         SendClientMessage(playerid, COLOR_YELLOW, str);
  137.         return 1;
  138.     }return 1;
  139. }
  140.  
  141. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  142.  
  143. stock LoadWanteds(playerid)
  144. {
  145.     if(!IsPlayerNPC(playerid))
  146.     {
  147.         #if defined LOADSAFEWANTEDS
  148.         new WantedAccount[100];
  149.         format(WantedAccount,sizeof(WantedAccount),"/WantedSystem/%s.ini",SpielerName(playerid));
  150.         if(!dini_Exists(WantedAccount))
  151.         {
  152.             dini_Create(WantedAccount);
  153.         }
  154.         SetPVarInt(playerid,"Wantedlevel",dini_Int(WantedAccount,"Wantedlevel"));
  155.         #endif
  156.         #if defined WANTEDTIMER
  157.         WantedTimer[playerid]=SetTimerEx("WantedTimerPublic", (WANTEDTIMER*1000)*60, true, "i", playerid);
  158.         #endif
  159.         return 1;
  160.     }return 1;
  161. }
  162.  
  163. stock SaveWanteds(playerid)
  164. {
  165.     if(!IsPlayerNPC(playerid))
  166.     {
  167.         #if defined LOADSAFEWANTEDS
  168.         new WantedAccount[100];
  169.         format(WantedAccount,sizeof(WantedAccount),"/WantedSystem/%s.ini",SpielerName(playerid));
  170.         if(!dini_Exists(WantedAccount))
  171.         {
  172.             dini_Create(WantedAccount);
  173.         }
  174.         dini_IntSet(WantedAccount,"Wantedlevel",GetPVarInt(playerid,"Wantedlevel"));
  175.         #endif
  176.         TextDrawDestroy(WantedTextdraw[playerid]);
  177.         #if defined WANTEDTIMER
  178.         KillTimer(WantedTimer[playerid]);
  179.         #endif
  180.         DeletePVar(playerid,"Wantedlevel");
  181.         return 1;
  182.     }return 1;
  183. }
  184.  
  185. stock GetWantedLevel(playerid)
  186. {
  187.     return GetPVarInt(playerid,"Wantedlevel");
  188. }
  189.  
  190. stock SetWantedLevel(playerid,wantedlevel)
  191. {
  192.     SetPVarInt(playerid,"Wantedlevel",wantedlevel);
  193.     UpdateWantedDraw(playerid);
  194.     return 1;
  195. }
  196.  
  197. stock UpdateWantedDraw(playerid)
  198. {
  199.     if(GetWantedLevel(playerid)==0)
  200.     {
  201.         TextDrawHideForPlayer(playerid,WantedTextdraw[playerid]);
  202.     }
  203.     if(GetWantedLevel(playerid)>=1)
  204.     {
  205.         TextDrawHideForPlayer(playerid, WantedTextdraw[playerid]);
  206.         new str[30];
  207.         format(str,sizeof(str),"~y~]: ~w~%d",GetWantedLevel(playerid));
  208.         TextDrawSetString(WantedTextdraw[playerid], str);
  209.         TextDrawShowForPlayer(playerid, WantedTextdraw[playerid]);
  210.     }
  211.     return 1;
  212. }
  213.  
  214. stock SpielerName(playerid)
  215. {
  216.     new name[MAX_PLAYER_NAME];
  217.     GetPlayerName(playerid,name,sizeof(name));
  218.     return name;
  219. }
  220.  
  221. /*>>>>>>>>>>>>>>>>>SSCANF<<<<<<<<<<<<<<<<<<<<<*/
  222. stock sscanf(sstring[], format[], {Float,_}:...)
  223. {
  224.     #if defined isnull
  225.         if (isnull(sstring))
  226.     #else
  227.         if (sstring[0] == 0 || (sstring[0] == 1 && sstring[1] == 0))
  228.     #endif
  229.         {
  230.             return format[0];
  231.         }
  232.     #pragma tabsize 4
  233.     new
  234.         formatPos = 0,
  235.         sstringPos = 0,
  236.         paramPos = 2,
  237.         paramCount = numargs(),
  238.         delim = ' ';
  239.     while (sstring[sstringPos] && sstring[sstringPos] <= ' ')
  240.     {
  241.         sstringPos++;
  242.     }
  243.     while (paramPos < paramCount && sstring[sstringPos])
  244.     {
  245.         switch (format[formatPos++])
  246.         {
  247.             case '\0':
  248.             {
  249.                 return 0;
  250.             }
  251.             case 'i', 'd':
  252.             {
  253.                 new
  254.                     neg = 1,
  255.                     num = 0,
  256.                     ch = sstring[sstringPos];
  257.                 if (ch == '-')
  258.                 {
  259.                     neg = -1;
  260.                     ch = sstring[++sstringPos];
  261.                 }
  262.                 do
  263.                 {
  264.                     sstringPos++;
  265.                     if ('0' <= ch <= '9')
  266.                     {
  267.                         num = (num * 10) + (ch - '0');
  268.                     }
  269.                     else
  270.                     {
  271.                         return -1;
  272.                     }
  273.                 }
  274.                 while ((ch = sstring[sstringPos]) > ' ' && ch != delim);
  275.                 setarg(paramPos, 0, num * neg);
  276.             }
  277.             case 'h', 'x':
  278.             {
  279.                 new
  280.                     num = 0,
  281.                     ch = sstring[sstringPos];
  282.                 do
  283.                 {
  284.                     sstringPos++;
  285.                     switch (ch)
  286.                     {
  287.                         case 'x', 'X':
  288.                         {
  289.                             num = 0;
  290.                             continue;
  291.                         }
  292.                         case '0' .. '9':
  293.                         {
  294.                             num = (num << 4) | (ch - '0');
  295.                         }
  296.                         case 'a' .. 'f':
  297.                         {
  298.                             num = (num << 4) | (ch - ('a' - 10));
  299.                         }
  300.                         case 'A' .. 'F':
  301.                         {
  302.                             num = (num << 4) | (ch - ('A' - 10));
  303.                         }
  304.                         default:
  305.                         {
  306.                             return -1;
  307.                         }
  308.                     }
  309.                 }
  310.                 while ((ch = sstring[sstringPos]) > ' ' && ch != delim);
  311.                 setarg(paramPos, 0, num);
  312.             }
  313.             case 'c':
  314.             {
  315.                 setarg(paramPos, 0, sstring[sstringPos++]);
  316.             }
  317.             case 'f':
  318.             {
  319.  
  320.                 new changestr[16], changepos = 0, strpos = sstringPos;
  321.                 while(changepos < 16 && sstring[strpos] && sstring[strpos] != delim)
  322.                 {
  323.                     changestr[changepos++] = sstring[strpos++];
  324.                     }
  325.                 changestr[changepos] = '\0';
  326.                 setarg(paramPos,0,_:floatstr(changestr));
  327.             }
  328.             case 'p':
  329.             {
  330.                 delim = format[formatPos++];
  331.                 continue;
  332.             }
  333.             case '\'':
  334.             {
  335.                 new
  336.                     end = formatPos - 1,
  337.                     ch;
  338.                 while ((ch = format[++end]) && ch != '\'') {}
  339.                 if (!ch)
  340.                 {
  341.                     return -1;
  342.                 }
  343.                 format[end] = '\0';
  344.                 if ((ch = strfind(sstring, format[formatPos], false, sstringPos)) == -1)
  345.                 {
  346.                     if (format[end + 1])
  347.                     {
  348.                         return -1;
  349.                     }
  350.                     return 0;
  351.                 }
  352.                 format[end] = '\'';
  353.                 sstringPos = ch + (end - formatPos);
  354.                 formatPos = end + 1;
  355.             }
  356.             case 'u':
  357.             {
  358.                 new
  359.                     end = sstringPos - 1,
  360.                     id = 0,
  361.                     bool:num = true,
  362.                     ch;
  363.                 while ((ch = sstring[++end]) && ch != delim)
  364.                 {
  365.                     if (num)
  366.                     {
  367.                         if ('0' <= ch <= '9')
  368.                         {
  369.                             id = (id * 10) + (ch - '0');
  370.                         }
  371.                         else
  372.                         {
  373.                             num = false;
  374.                         }
  375.                     }
  376.                 }
  377.                 if (num && IsPlayerConnected(id))
  378.                 {
  379.                     setarg(paramPos, 0, id);
  380.                 }
  381.                 else
  382.                 {
  383.                     #if !defined foreach
  384.                         #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  385.                         #define __SSCANF_FOREACH__
  386.                     #endif
  387.                     sstring[end] = '\0';
  388.                     num = false;
  389.                     new
  390.                         name[MAX_PLAYER_NAME];
  391.                     id = end - sstringPos;
  392.                     foreach (Player, playerid)
  393.                     {
  394.                         GetPlayerName(playerid, name, sizeof (name));
  395.                         if (!strcmp(name, sstring[sstringPos], true, id))
  396.                         {
  397.                             setarg(paramPos, 0, playerid);
  398.                             num = true;
  399.                             break;
  400.                         }
  401.                     }
  402.                     if (!num)
  403.                     {
  404.                         setarg(paramPos, 0, INVALID_PLAYER_ID);
  405.                     }
  406.                     sstring[end] = ch;
  407.                     #if defined __SSCANF_FOREACH__
  408.                         #undef foreach
  409.                         #undef __SSCANF_FOREACH__
  410.                     #endif
  411.                 }
  412.                 sstringPos = end;
  413.             }
  414.             case 's', 'z':
  415.             {
  416.                 new
  417.                     i = 0,
  418.                     ch;
  419.                 if (format[formatPos])
  420.                 {
  421.                     while ((ch = sstring[sstringPos++]) && ch != delim)
  422.                     {
  423.                         setarg(paramPos, i++, ch);
  424.                     }
  425.                     if (!i)
  426.                     {
  427.                         return -1;
  428.                     }
  429.                 }
  430.                 else
  431.                 {
  432.                     while ((ch = sstring[sstringPos++]))
  433.                     {
  434.                         setarg(paramPos, i++, ch);
  435.                     }
  436.                 }
  437.                 sstringPos--;
  438.                 setarg(paramPos, i, '\0');
  439.             }
  440.             default:
  441.             {
  442.                 continue;
  443.             }
  444.         }
  445.         while (sstring[sstringPos] && sstring[sstringPos] != delim && sstring[sstringPos] > ' ')
  446.         {
  447.             sstringPos++;
  448.         }
  449.         while (sstring[sstringPos] && (sstring[sstringPos] == delim || sstring[sstringPos] <= ' '))
  450.         {
  451.             sstringPos++;
  452.         }
  453.         paramPos++;
  454.     }
  455.     do
  456.     {
  457.         if ((delim = format[formatPos++]) > ' ')
  458.         {
  459.             if (delim == '\'')
  460.             {
  461.                 while ((delim = format[formatPos++]) && delim != '\'') {}
  462.             }
  463.             else if (delim != 'z')
  464.             {
  465.                 return delim;
  466.             }
  467.         }
  468.     }
  469.     while (delim > ' ');
  470.     return 0;
  471. }
Advertisement
Add Comment
Please, Sign In to add comment