Advertisement
Guest User

Seif

a guest
Nov 8th, 2008
2,423
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 14.72 KB | None | 0 0
  1. /*x---------------------------------Important-------------------------------------x*/
  2. //**INCLUDES**//
  3. #include <a_samp>
  4. /*x---------------------------------Defining-------------------------------------x*/
  5. //**COLORS*//
  6. #define GREEN           0x21DD00FF
  7. #define RED             0xE60000FF
  8. #define ADMIN_RED       0xFB0000FF
  9. #define YELLOW          0xFFFF00FF
  10. #define ORANGE          0xF97804FF
  11. #define LIGHTRED        0xFF8080FF
  12. #define LIGHTBLUE       0x00C2ECFF
  13. #define PURPLE          0xB360FDFF
  14. #define PLAYER_COLOR    0xFFFFFFFF
  15. #define BLUE            0x1229FAFF
  16. #define LIGHTGREEN      0x38FF06FF
  17. #define DARKPINK        0xE100E1FF
  18. #define DARKGREEN       0x008040FF
  19. #define ANNOUNCEMENT    0x6AF7E1FF
  20. #define COLOR_SYSTEM    0xEFEFF7AA
  21. #define GREY            0xCECECEFF
  22. #define PINK            0xD52DFFFF
  23. #define DARKGREY        0x626262FF
  24. #define AQUAGREEN       0x03D687FF
  25. #define NICESKY         0x99FFFFAA
  26. #define WHITE           0xFFFFFFFF
  27. /*x---------------------------------CallBacks-------------------------------------x*/
  28. stock IsNumeric(const num[])
  29. {
  30.     for (new i = 0, j = strlen(num); i < j; i++)
  31.     if (num[i] > '9' || num[i] < '0')
  32.     return 0;
  33.     return 1;
  34. }
  35.  
  36. ReturnUser(text[], playerid = INVALID_PLAYER_ID)
  37. {
  38.     new pos = 0;
  39.     while (text[pos] < 0x21)
  40.     {
  41.         if (text[pos] == 0) return INVALID_PLAYER_ID;
  42.         pos++;
  43.     }
  44.     new userid = INVALID_PLAYER_ID;
  45.     if (IsNumeric(text[pos]))
  46.     {
  47.         userid = strval(text[pos]);
  48.         if (userid >=0 && userid < MAX_PLAYERS)
  49.         {
  50.             if(!IsPlayerConnected(userid))
  51.                 userid = INVALID_PLAYER_ID;
  52.             else return userid;
  53.         }
  54.     }
  55.     new len = strlen(text[pos]);
  56.     new count = 0;
  57.     new pname[MAX_PLAYER_NAME];
  58.     for (new i = 0; i < MAX_PLAYERS; i++)
  59.     {
  60.         if (IsPlayerConnected(i))
  61.         {
  62.             GetPlayerName(i, pname, sizeof (pname));
  63.             if (strcmp(pname, text[pos], true, len) == 0)
  64.             {
  65.                 if (len == strlen(pname)) return i;
  66.                 else
  67.                 {
  68.                     count++;
  69.                     userid = i;
  70.                 }
  71.             }
  72.         }
  73.     }
  74.     if (count != 1)
  75.     {
  76.         if (playerid != INVALID_PLAYER_ID)
  77.         {
  78.             if (count) SendClientMessage(playerid, COLOR_SYSTEM, "There are multiple users, enter full playername.");
  79.             else SendClientMessage(playerid, COLOR_SYSTEM, "Playername not found.");
  80.         }
  81.         userid = INVALID_PLAYER_ID;
  82.     }
  83.     return userid;
  84. }
  85.  
  86. stock strtok(const str[], &index,seperator=' ')
  87. {
  88.     new length = strlen(str);
  89.     new offset = index;
  90.     new result[128];
  91.     while ((index < length) && (str[index] != seperator) && ((index - offset) < (sizeof(result) - 1)))
  92.     {
  93.         result[index - offset] = str[index];
  94.         index++;
  95.     }
  96.  
  97.     result[index - offset] = EOS;
  98.     if ((index < length) && (str[index] == seperator))
  99.     {
  100.         index++;
  101.     }
  102.     return result;
  103. }
  104.  
  105. stock SendClientMessageToAdmins(color, msg[])
  106. {
  107.     new string[128];
  108.     for(new i = 0; i < MAX_PLAYERS; i++)
  109.     {
  110.         if(IsPlayerConnected(i))
  111.         {
  112.             if (IsPlayerAdmin(i))
  113.             {
  114.                 SendClientMessage(i, color, msg);
  115.                 printf("%s", string);
  116.             }
  117.         }
  118.     }
  119.     return 1;
  120. }
  121.  
  122. stock bigstr(const string[], &idx)
  123. {
  124.     new length = strlen(string);
  125.     while ((idx < length) && (string[idx] <= ' '))
  126.     {
  127.         idx++;
  128.     }
  129.     new offset = idx;
  130.     new result[128];
  131.     while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
  132.     {
  133.         result[idx - offset] = string[idx];
  134.         idx++;
  135.     }
  136.     result[idx - offset] = EOS;
  137.     return result;
  138. }
  139.  
  140. public OnFilterScriptInit()
  141. {
  142.     print("<|-----------------------------------------|>");
  143.     print(" |  .: [  - SeifAdmin Script by Seif -  ] :.  |");
  144.     print("<|-----------------------------------------|>");
  145.     if (!fexist("Bans.txt"))
  146.     {
  147.         new File:open = fopen("Bans.txt",io_write);
  148.         if (open) fclose(open);
  149.     }
  150.     if (!fexist("TempBans.ban"))
  151.     {
  152.         new File:open = fopen("TempBans.ban",io_write);
  153.         if (open) fclose(open);
  154.     }
  155.     return 1;
  156. }
  157.  
  158. public OnPlayerConnect(playerid)
  159. {
  160.     BanCheck(playerid);
  161.     TempBanCheck(playerid);
  162.     return 1;
  163. }
  164.  
  165. public OnPlayerCommandText(playerid, cmdtext[])
  166. {
  167.     new tmp[128],idx;
  168.     new cmd[128];
  169.     new name[MAX_PLAYER_NAME];
  170.     new giveplayer[MAX_PLAYER_NAME];
  171.     new giveplayerid;
  172.     cmd = strtok(cmdtext,idx);
  173.     if (strcmp(cmd,"/ban", true) == 0)
  174.     {
  175.         if (IsPlayerAdmin(playerid))
  176.         {
  177.             new reason[128],str[128],namez[24],name1[24];
  178.             tmp = strtok(cmdtext,idx);
  179.             if(!strlen(tmp))
  180.             {
  181.                 SendClientMessage(playerid,ORANGE,"USAGE: /ban [name/ip] [reason]");
  182.                 SendClientMessage(playerid,ORANGE,"FUNCTION: Will ban the player's name/IP following by a reason. !! DO NOT ENTER THE ID !!");
  183.                 SendClientMessage(playerid,ORANGE,"HELP: Please enter a name or IP. If you're trying to execute a range ban...");
  184.                 SendClientMessage(playerid,ORANGE,"HELP: ...then make sure you got a valid player IP( /ip ) and replace some characters by * (NOT ALL)");
  185.                 return 1;
  186.             }
  187.             new length = strlen(cmdtext);
  188.             while ((idx < length) && (cmdtext[idx] <= ' '))
  189.             {
  190.                 idx++;
  191.             }
  192.             new offset = idx;
  193.             while ((idx < length) && ((idx - offset) < (sizeof(reason) - 1)))
  194.             {
  195.                 reason[idx - offset] = cmdtext[idx];
  196.                 idx++;
  197.             }
  198.             reason[idx - offset] = EOS;
  199.             if(!strlen(reason))
  200.             {
  201.                 SendClientMessage(playerid,ORANGE,"USAGE: /ban [name/ip] [reason]");
  202.                 SendClientMessage(playerid,RED,"ERROR: You must enter a reason for the ban!");
  203.                 return 1;
  204.             }
  205.             new File:file = fopen("Bans.txt",io_append);
  206.             if (file)
  207.             {
  208.                 format(str,128,"%s\r\n",tmp);
  209.                 fwrite(file,str);
  210.                 fclose(file);
  211.             }
  212.             new count = 0;
  213.             new ip[15];
  214.             for(new i=0;i<MAX_PLAYERS;i++)
  215.             {
  216.                 if (IsPlayerConnected(i))
  217.                 {
  218.                     GetPlayerName(i,namez,24);
  219.                     GetPlayerName(playerid,name1,24);
  220.                     GetPlayerIp(i,ip,sizeof(ip));
  221.                     if (strcmp(tmp, namez,true)==0)
  222.                     {
  223.                         format(str,128,"|- Administrator %s banned %s. [Reason: %s] -|",name1,namez,reason);
  224.                         SendClientMessageToAll(ADMIN_RED,str);
  225.                         Kick(i);
  226.                     }
  227.                     else if(strcmp(tmp,ip,true)==0)
  228.                     {
  229.                         format(str,128,"|- Administrator %s banned %s. [Reason: %s] -|",name1,namez,reason);
  230.                         SendClientMessageToAll(ADMIN_RED,str);
  231.                         format(str,128,"|- Banned IP: [ %s ] -|",ip);
  232.                         SendClientMessageToAdmins(ADMIN_RED,str);
  233.                         Kick(i);
  234.                     }
  235.                 }
  236.                 else
  237.                 {
  238.                     GetPlayerIp(i,ip,sizeof(ip));
  239.                     if (!IsPlayerConnected(i) && strfind(tmp,".",true) != -1 && count == 0)
  240.                     {
  241.                         GetPlayerName(playerid,name1,24);
  242.                         format(str,128,"|- Banned IP: [ %s ] by %s. [Reason: %s] -|",tmp,name1,reason);
  243.                         SendClientMessageToAdmins(ADMIN_RED,str);
  244.                     }
  245.                     else if (!IsPlayerConnected(i) && count == 0)
  246.                     {
  247.                         for(new index = 1; index <= 128; index++)
  248.                         if (tmp[index] != '.')
  249.                         {
  250.                             GetPlayerName(playerid,name1,24);
  251.                             format(str,128,"|- Banned Name: [ %s ] by %s. [Reason: %s] -|",tmp,name1,reason);
  252.                             SendClientMessageToAdmins(ADMIN_RED,str);
  253.                             break;
  254.                         }
  255.                     }
  256.                     count++;
  257.                 }
  258.             }
  259.         }
  260.         return true;
  261.     }
  262.     if (strcmp(cmd,"/idban", true) == 0)
  263.     {
  264.         if (IsPlayerAdmin(playerid))
  265.         {
  266.             new reason[128],targetid,target[MAX_PLAYER_NAME],str[128];
  267.             tmp = strtok(cmdtext,idx);
  268.             targetid = ReturnUser(tmp);
  269.             if(!strlen(tmp))
  270.             {
  271.                 SendClientMessage(playerid,ORANGE,"USAGE: /idban [partofname/id] [reason]");
  272.                 SendClientMessage(playerid,ORANGE,"FUNCTION: Will ban the player's IP following by a reason. ID supported and name supported only");
  273.                 return 1;
  274.             }
  275.             if (!IsPlayerConnected(targetid) || targetid == INVALID_PLAYER_ID) return SendClientMessage(playerid,RED,"ERROR: Invalid player or player not connected");
  276.             new length = strlen(cmdtext);
  277.             while ((idx < length) && (cmdtext[idx] <= ' '))
  278.             {
  279.                 idx++;
  280.             }
  281.             new offset = idx;
  282.             while ((idx < length) && ((idx - offset) < (sizeof(reason) - 1)))
  283.             {
  284.                 reason[idx - offset] = cmdtext[idx];
  285.                 idx++;
  286.             }
  287.             reason[idx - offset] = EOS;
  288.             if(!strlen(reason))
  289.             {
  290.                 SendClientMessage(playerid,ORANGE,"USAGE: /idban [partofname/id] [reason]");
  291.                 SendClientMessage(playerid,RED,"ERROR: You must enter a reason for the ban!");
  292.                 return 1;
  293.             }
  294.             new ip[15];
  295.             GetPlayerIp(targetid,ip,sizeof(ip));
  296.             new File:file = fopen("Bans.txt",io_append);
  297.             if (file)
  298.             {
  299.                 format(str,128,"%s\r\n",ip);
  300.                 fwrite(file,str);
  301.                 fclose(file);
  302.             }
  303.             GetPlayerName(playerid,name,24);
  304.             GetPlayerName(targetid,target,24);
  305.             format(str,128,"|- Administrator %s banned %s. [Reason: %s] -|",name,target,reason);
  306.             SendClientMessageToAll(ADMIN_RED,str);
  307.             Kick(targetid);
  308.         }
  309.         return true;
  310.     }
  311.     if(strcmp(cmd, "/ip", true) == 0)
  312.     {
  313.         if (IsPlayerAdmin(playerid))
  314.         {
  315.             tmp = strtok(cmdtext,idx);
  316.             if(!strlen(tmp))
  317.             {
  318.                 SendClientMessage(playerid, ORANGE, "USAGE: /ip [playerid]");
  319.                 SendClientMessage(playerid, ORANGE, "FUNCTION: Will view a player's IP.");
  320.                 return 1;
  321.             }
  322.             giveplayerid = ReturnUser(tmp);
  323.             new string[128];
  324.             if(IsPlayerConnected(giveplayerid))
  325.             {
  326.                 new ip[15];
  327.                 GetPlayerIp(giveplayerid,ip,15);
  328.                 GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
  329.                 format(string, sizeof(string), "-| %s's IP: %s |-", giveplayer,ip);
  330.                 SendClientMessage(playerid,LIGHTBLUE, string);
  331.             }
  332.             else
  333.             {
  334.                 format(string, sizeof(string), "%d is not an active player.", giveplayerid);
  335.                 SendClientMessage(playerid, RED, string);
  336.             }
  337.         }
  338.         else return SendClientMessage(playerid, RED, "You are not an admin.");
  339.         return true;
  340.     }
  341.     if(strcmp(cmd, "/tempban", true) == 0)
  342.     {
  343.         if (IsPlayerAdmin(playerid))
  344.         {
  345.             tmp = strtok(cmdtext,idx);
  346.             if(!strlen(tmp))
  347.             {
  348.                 SendClientMessage(playerid, ORANGE, "USAGE: /tempban [playerid] [day] [reason]");
  349.                 SendClientMessage(playerid, ORANGE, "FUNCTION: Temporarily bans a player. You must enter the month, day and hour numbers. You set them, not add.");
  350.                 return 1;
  351.             }
  352.             giveplayerid = ReturnUser(tmp);
  353.             new string[128];
  354.             if(IsPlayerConnected(giveplayerid))
  355.             {
  356.                 tmp = strtok(cmdtext, idx);
  357.                 if (!strlen(tmp)) return SendClientMessage(playerid, ORANGE, "USAGE: /tempban [playerid] [day] [reason]");
  358.                 new days = strval(tmp);
  359.                 new reason[128];
  360.                 reason = bigstr(cmdtext, idx);
  361.                 if (!strlen(reason)) return SendClientMessage(playerid, ORANGE, "USAGE: /tempban [playerid] [day] [REASON]");
  362.                 new ip[15];
  363.                 GetPlayerIp(giveplayerid,ip,15);
  364.                 GetPlayerName(playerid, name, sizeof name);
  365.                 GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
  366.                 new File:tempban = fopen("TempBans.ban", io_append);
  367.                 if (tempban)
  368.                 {
  369.                     new year,month,day;
  370.                     getdate(year, month, day);
  371.                     day += days;
  372.                     if (IsMonth31(month))
  373.                     {
  374.                         if (day > 31)
  375.                         {
  376.                             month += 1;
  377.                             if (month > 12)
  378.                             {
  379.                                 year += 1;
  380.                                 while(day > 31) day -= 31;
  381.                             }
  382.                             else while(day > 31) day -= 31;
  383.                         }
  384.                     }
  385.                     else if (!IsMonth31(month))
  386.                     {
  387.                         if (day > 30)
  388.                         {
  389.                             month += 1;
  390.                             if (month > 12)
  391.                             {
  392.                                 year += 1;
  393.                                 while(day > 30) day -= 30;
  394.                             }
  395.                             else while(day > 30) day -= 30;
  396.                         }
  397.                     }
  398.                     else if (!IsMonth31(month) && IsMonth29(year) && month == 2)
  399.                     {
  400.                         if (day > 29)
  401.                         {
  402.                             month += 1;
  403.                             if (month > 12)
  404.                             {
  405.                                 year += 1;
  406.                                 while(day > 29) day -= 29;
  407.                             }
  408.                             else while(day > 29) day -= 29;
  409.                         }
  410.                     }
  411.                     else if (!IsMonth31(month) && !IsMonth29(year) && month == 2)
  412.                     {
  413.                         if (day > 28)
  414.                         {
  415.                             month += 1;
  416.                             if (month > 12)
  417.                             {
  418.                                 year += 1;
  419.                                 while(day > 28) day -= 28;
  420.                             }
  421.                             else while(day > 28) day -= 28;
  422.                         }
  423.                     }
  424.                     format(string, sizeof string, "%d|%d|%d|%s\n", day, month, year, ip);
  425.                     fwrite(tempban, string);
  426.                     fclose(tempban);
  427.                 }
  428.                 format(string,128,"|- Administrator %s temporarily banned %s for %d day(s). [Reason: %s] -|",name,giveplayer,days,reason);
  429.                 SendClientMessageToAll(ADMIN_RED,string);
  430.                 Kick(giveplayerid);
  431.             }
  432.             else
  433.             {
  434.                 format(string, sizeof(string), "%d is not an active player.", giveplayerid);
  435.                 SendClientMessage(playerid, RED, string);
  436.             }
  437.         }
  438.         else return SendClientMessage(playerid, RED, "You are not an admin.");
  439.         return true;
  440.     }
  441.     return false;
  442. }
  443.  
  444. stock BanCheck(playerid)
  445. {
  446.     new player[MAX_PLAYER_NAME];
  447.     new ip[15];
  448.     new ban[20];
  449.     new ban2[20];
  450.     new filestr[128];
  451.     GetPlayerName(playerid, player, sizeof player);
  452.     GetPlayerIp(playerid, ip, sizeof ip);
  453.     format(ban,sizeof(ban),"%s",ip);
  454.     strdel(ban,strlen(ban)-2,strlen(ban));
  455.     format(ban2,128,"%s**",ban);
  456.     new File:file = fopen("Bans.txt",io_read);
  457.     if (file)
  458.     {
  459.         while(fread(file,filestr,sizeof(filestr)))
  460.         {
  461.             if (strfind(filestr, player, true) != -1 || strfind(filestr, ip, true) != -1 || strfind(filestr, ban2, true) != -1)
  462.             {
  463.                 SendClientMessage(playerid, ADMIN_RED, "|- You are banned from this server -|");
  464.                 return Kick(playerid);
  465.             }
  466.         }
  467.     }
  468.     return true;
  469. }
  470.  
  471. stock TempBanCheck(playerid)
  472. {
  473.     new ip[15];
  474.     new str[128];
  475.     new load[4][32];
  476.     new ban_day, ban_month, ban_year, ban_ip[15];
  477.     GetPlayerIp(playerid, ip, sizeof ip);
  478.     new year, month, day;
  479.     getdate(year, month, day);
  480.     new File:file = fopen("TempBans.ban",io_read);
  481.     if (file)
  482.     {
  483.         while (fread(file, str, sizeof str))
  484.         {
  485.             split(str, load, '|');
  486.  
  487.             ban_day = strval(load[0]);
  488.             ban_month = strval(load[1]);
  489.             ban_year = strval(load[2]);
  490.             strmid(ban_ip, load[3], 0, strlen(load[3])-1, 15);
  491.             if (!(year >= ban_year && month >= ban_month && day >= ban_day && !strcmp(ban_ip, ip, true)))
  492.             {
  493.                 format(str, sizeof str, "|- You are temporarily banned from this server until: %d/%d/%d -|", ban_day, ban_month, ban_year);
  494.                 SendClientMessage(playerid, ADMIN_RED, str);
  495.                 return Kick(playerid);
  496.             }
  497.         }
  498.     }
  499.     return true;
  500. }
  501.  
  502. stock split(const strsrc[], strdest[][], delimiter)
  503. {
  504.     new i, li;
  505.     new aNum;
  506.     new len;
  507.  
  508.     while(i <= strlen(strsrc)){
  509.         if(strsrc[i]==delimiter || i==strlen(strsrc)){
  510.             len = strmid(strdest[aNum], strsrc, li, i, 128);
  511.             strdest[aNum][len] = 0;
  512.             li = i+1;
  513.             aNum++;
  514.         }
  515.         i++;
  516.     }
  517.     return 1;
  518. }
  519.  
  520. stock IsMonth31(month)
  521. {
  522.     switch (month)
  523.     {
  524.         case 1: return 1;
  525.         case 3: return 1;
  526.         case 5: return 1;
  527.         case 7: return 1;
  528.         case 8: return 1;
  529.         case 10: return 1;
  530.         case 12: return 1;
  531.         default: return 0;
  532.     }
  533.     return 0;
  534. }
  535.  
  536. stock IsMonth29(year)
  537. {
  538.     new y = 2000;
  539.     for(new i = 4; i < 3000; i += 4) if ((y+i) == year) return 1;
  540.     return 0;
  541. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement