Advertisement
SickAttack

Ignore System - The best way to prevent arguments!

Mar 22nd, 2015
716
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 11.90 KB | None | 0 0
  1. // [ IGNORE SYSTEM ]
  2.  
  3. // INCLUDES:
  4.  
  5. #include <a_samp>
  6. #include <sscanf2>
  7. #include <foreach>
  8. #include <zcmd>
  9.  
  10. // PER-PLAYER VARIABLES:
  11.  
  12. new bool:pIgnoringPlayer[MAX_PLAYERS][MAX_PLAYERS];
  13.  
  14. // CALLBACKS:
  15.  
  16. public OnFilterScriptInit()
  17. {
  18.     return 1;
  19. }
  20.  
  21. public OnFilterScriptExit()
  22. {
  23.     ResetVariables();
  24.     return 1;
  25. }
  26.  
  27. public OnPlayerDisconnect(playerid, reason)
  28. {
  29.     ResetPlayerVariables(playerid);
  30.     return 1;
  31. }
  32.  
  33. public OnPlayerText(playerid, text[])
  34. {
  35.     new string[256];
  36.     format(string, sizeof(string), "{%06x}%s (%d): {FFFFFF}%s", GetPlayerColor(playerid) >>> 8, PlayerName(playerid), playerid, text);
  37.     SendPlayerMessage(110, playerid, 0xFFFFFFFF, string);
  38.     return 0;
  39. }
  40.  
  41. // COMMANDS:
  42.  
  43. CMD:ignore(playerid, params[])
  44. {
  45.     new string[144], lookupid;
  46.     if(sscanf(params, "u", lookupid)) return SendClientMessage(playerid, 0xFF0000FF, "Usage: /ignore (id/name).");
  47.     if(IsPlayerNPC(lookupid)) return SendClientMessage(playerid, 0xFF0000FF, "That player is a NPC, you can't ignore them!");
  48.     if(lookupid == playerid) return SendClientMessage(playerid, 0xFF0000FF, "That player is you, you can't ignore yourself!");
  49.     if(IsPlayerIgnoringPlayer(playerid, lookupid))
  50.     {
  51.         format(string, sizeof(string), "%s (%d) is already on your ignore list!", PlayerName(lookupid), lookupid);
  52.         return SendClientMessage(playerid, 0xFF0000FF, string);
  53.     }
  54.  
  55.     pIgnoringPlayer[playerid][lookupid] = true;
  56.     format(string, sizeof(string), "%s (%d) has been added to your ignore list!", PlayerName(lookupid), lookupid);
  57.     SendClientMessage(playerid, 0x808080FF, string);
  58.     return 1;
  59. }
  60.  
  61. CMD:unignore(playerid, params[])
  62. {
  63.     new string[144], lookupid;
  64.     if(sscanf(params, "u", lookupid)) return SendClientMessage(playerid, 0xFF0000FF, "Usage: /unignore (id/name).");
  65.     if(IsPlayerNPC(lookupid)) return SendClientMessage(playerid, 0xFF0000FF, "That player is a NPC, you can't ignore them!");
  66.     if(lookupid == playerid) return SendClientMessage(playerid, 0xFF0000FF, "That player is you, you can't ignore yourself!");
  67.     if(!IsPlayerIgnoringPlayer(playerid, lookupid))
  68.     {
  69.         format(string, sizeof(string), "%s (%d) isn't on your ignore list!", PlayerName(lookupid), lookupid);
  70.         return SendClientMessage(playerid, 0x808080FF, string);
  71.     }
  72.  
  73.     pIgnoringPlayer[playerid][lookupid] = false;
  74.     format(string, sizeof(string), "%s (%d) has been removed from your ignore list!", PlayerName(lookupid), lookupid);
  75.     SendClientMessage(playerid, 0x808080FF, string);
  76.     return 1;
  77. }
  78.  
  79. CMD:pm(playerid, params[])
  80. {
  81.     new string[256], lookupid, message[128];
  82.     if(sscanf(params, "us[128]", lookupid, message)) return SendClientMessage(playerid, 0xFF0000FF, "Usage: /pm (id/name) (message).");
  83.     if(IsPlayerNPC(lookupid)) return SendClientMessage(playerid, 0xFF0000FF, "That player is a NPC, you can't send a pm to them!");
  84.     if(lookupid == playerid) return SendClientMessage(playerid, 0xFF0000FF, "That player is you, you can't send a pm to yourself!");
  85.     if(IsPlayerIgnoringPlayer(lookupid, playerid) && !IsPlayerAdmin(playerid) && !IsPlayerAdmin(lookupid))
  86.     {
  87.         format(string, sizeof(string), "%s (%d) is currently ignoring you!", PlayerName(lookupid), lookupid);
  88.         return SendClientMessage(playerid, 0x808080FF, string);
  89.     }
  90.     if(IsPlayerIgnoringPlayer(playerid, lookupid) && !IsPlayerAdmin(playerid) && !IsPlayerAdmin(lookupid))
  91.     {
  92.         format(string, sizeof(string), "You are currently ignoring %s (%d), unignore them first!", PlayerName(lookupid), lookupid);
  93.         return SendClientMessage(playerid, 0x808080FF, string);
  94.     }
  95.  
  96.     format(string, sizeof(string), "[PM-SENT] %s (%d): %s", PlayerName(lookupid), lookupid, message);
  97.     SendMessage(100, playerid, 0xFFFF00FF, string);
  98.  
  99.     format(string, sizeof(string), "[PM-FROM] %s (%d): %s", PlayerName(playerid), playerid, message);
  100.     SendMessage(100, lookupid, 0xFFFF00FF, string);
  101.     return 1;
  102. }
  103.  
  104. CMD:w(playerid, params[])
  105. {
  106.     new string[256], message[128];
  107.     if(sscanf(params, "s[128]", message)) return SendClientMessage(playerid, 0xFF0000FF, "Usage: /w (message).");
  108.  
  109.     format(string, sizeof(string), "[WHISPER] %s (%d): %s", PlayerName(playerid), playerid, message);
  110.     SendWhisperMessage(100, 10.0, playerid, 0xFFFF00FF, string);
  111.     return 1;
  112. }
  113.  
  114. CMD:me(playerid, params[])
  115. {
  116.     new string[256], message[128];
  117.     if(sscanf(params, "s[128]", message)) return SendClientMessage(playerid, 0xFF0000FF, "Usage: /me (message).");
  118.  
  119.     if(strcmp(params, "'s", true, 2) == 0) format(string, sizeof(string), "* %s's (%d) %s *", PlayerName(playerid), playerid, message[3]);
  120.     else format(string, sizeof(string), "* %s (%d) %s *", PlayerName(playerid), playerid, message);
  121.     SendPlayerMessage(100, playerid, GetPlayerColor(playerid), string);
  122.     return 1;
  123. }
  124.  
  125. // FUNCTIONS:
  126.  
  127. stock ResetVariables()
  128. {
  129.     for(new i = 0; i < MAX_PLAYERS; i ++)
  130.     {
  131.         if(pIgnoringPlayer[i][i]) pIgnoringPlayer[i][i] = false;
  132.         if(pIgnoringPlayer[i][i]) pIgnoringPlayer[i][i] = false;
  133.     }
  134. }
  135.  
  136. stock ResetPlayerVariables(playerid)
  137. {
  138.     for(new i = 0; i < MAX_PLAYERS; i ++)
  139.     {
  140.         if(pIgnoringPlayer[playerid][i]) pIgnoringPlayer[playerid][i] = false;
  141.         if(pIgnoringPlayer[i][playerid]) pIgnoringPlayer[i][playerid] = false;
  142.     }
  143. }
  144.  
  145. stock PlayerName(playerid)
  146. {
  147.     new name[MAX_PLAYER_NAME];
  148.     GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  149.     return name;
  150. }
  151.  
  152. stock IsPlayerIgnoringPlayer(playerid, lookupid)
  153. {
  154.     if(pIgnoringPlayer[playerid][lookupid]) return true;
  155.     return false;
  156. }
  157.  
  158. stock SendMessage(length, playerid, color, message[])
  159. {
  160.     new len = strlen(message);
  161.     if(len <= length) SendClientMessage(playerid, color, message);
  162.     else
  163.     {
  164.         new string[144], lastspace, escape = floatround(length / 1.2);
  165.         while(len > length)
  166.         {
  167.             format(string, sizeof(string), "%s", message);
  168.             for(new i = 0; i <= len; i ++)
  169.             {
  170.                 if(message[i] == ' ' && i <= length) lastspace = i;
  171.                 if(i > length) i = len;
  172.             }
  173.  
  174.             if(lastspace == 0)
  175.             {
  176.                 strdel(string, length, strlen(string));
  177.                 strdel(message, 0, length);
  178.                 len -= length;
  179.             }
  180.             else if(lastspace < escape)
  181.             {
  182.                 strdel(string, escape, strlen(string));
  183.                 strdel(message, 0, escape);
  184.                 len -= escape;
  185.                 lastspace = 0;
  186.             }
  187.             else
  188.             {
  189.                 strdel(string, lastspace, strlen(string));
  190.                 strdel(message, 0, lastspace + 1);
  191.                 len -= lastspace;
  192.                 lastspace = 0;
  193.             }
  194.  
  195.             SendClientMessage(playerid, color, string);
  196.             if(len < length) SendClientMessage(playerid, color, message);
  197.         }
  198.     }
  199.     return 1;
  200. }
  201.  
  202. stock SendPlayerMessage(length, playerid, color, message[])
  203. {
  204.     new len = strlen(message);
  205.     if(len <= length)
  206.     {
  207.         foreach(new i: Player)
  208.         {
  209.             if(IsPlayerAdmin(playerid) || IsPlayerAdmin(i))
  210.             {
  211.                 SendClientMessage(i, color, message);
  212.             }
  213.             else if(!IsPlayerIgnoringPlayer(playerid, i) && !IsPlayerIgnoringPlayer(i, playerid))
  214.             {
  215.                 SendClientMessage(i, color, message);
  216.             }
  217.         }
  218.     }
  219.     else
  220.     {
  221.         new string[144], lastspace, escape = floatround(length / 1.2);
  222.         while(len > length)
  223.         {
  224.             format(string, sizeof(string), "%s", message);
  225.             for(new i = 0; i <= len; i ++)
  226.             {
  227.                 if(message[i] == ' ' && i <= length) lastspace = i;
  228.                 if(i > length) i = len;
  229.             }
  230.  
  231.             if(lastspace == 0)
  232.             {
  233.                 strdel(string, length, strlen(string));
  234.                 strdel(message, 0, length);
  235.                 len -= length;
  236.             }
  237.             else if(lastspace < escape)
  238.             {
  239.                 strdel(string, escape, strlen(string));
  240.                 strdel(message, 0, escape);
  241.                 len -= escape;
  242.                 lastspace = 0;
  243.             }
  244.             else
  245.             {
  246.                 strdel(string, lastspace, strlen(string));
  247.                 strdel(message, 0, lastspace + 1);
  248.                 len -= lastspace;
  249.                 lastspace = 0;
  250.             }
  251.  
  252.             foreach(new i: Player)
  253.             {
  254.                 if(IsPlayerAdmin(playerid) || IsPlayerAdmin(i))
  255.                 {
  256.                     SendClientMessage(i, color, string);
  257.                     if(len < length) SendClientMessage(i, color, message);
  258.                 }
  259.                 else if(!IsPlayerIgnoringPlayer(playerid, i) && !IsPlayerIgnoringPlayer(i, playerid))
  260.                 {
  261.                     SendClientMessage(i, color, string);
  262.                     if(len < length) SendClientMessage(i, color, message);
  263.                 }
  264.             }
  265.         }
  266.     }
  267.     return 1;
  268. }
  269.  
  270. stock SendWhisperMessage(length, Float:range, playerid, color, message[])
  271. {
  272.     new len = strlen(message);
  273.     if(len <= length)
  274.     {
  275.         foreach(new i: Player)
  276.         {
  277.             if(IsPlayerCloseToPlayer(playerid, i, range))
  278.             {
  279.                 if(IsPlayerAdmin(playerid) || IsPlayerAdmin(i))
  280.                 {
  281.                     SendClientMessage(i, color, message);
  282.                 }
  283.                 else if(!IsPlayerIgnoringPlayer(playerid, i) && !IsPlayerIgnoringPlayer(i, playerid))
  284.                 {
  285.                     SendClientMessage(i, color, message);
  286.                 }
  287.             }
  288.         }
  289.     }
  290.     else
  291.     {
  292.         new string[144], lastspace, escape = floatround(length / 1.2);
  293.         while(len > length)
  294.         {
  295.             format(string, sizeof(string), "%s", message);
  296.             for(new i = 0; i <= len; i ++)
  297.             {
  298.                 if(message[i] == ' ' && i <= length) lastspace = i;
  299.                 if(i > length) i = len;
  300.             }
  301.  
  302.             if(lastspace == 0)
  303.             {
  304.                 strdel(string, length, strlen(string));
  305.                 strdel(message, 0, length);
  306.                 len -= length;
  307.             }
  308.             else if(lastspace < escape)
  309.             {
  310.                 strdel(string, escape, strlen(string));
  311.                 strdel(message, 0, escape);
  312.                 len -= escape;
  313.                 lastspace = 0;
  314.             }
  315.             else
  316.             {
  317.                 strdel(string, lastspace, strlen(string));
  318.                 strdel(message, 0, lastspace + 1);
  319.                 len -= lastspace;
  320.                 lastspace = 0;
  321.             }
  322.  
  323.             foreach(new i: Player)
  324.             {
  325.                 if(IsPlayerCloseToPlayer(playerid, i, range))
  326.                 {
  327.                     if(IsPlayerAdmin(playerid) || IsPlayerAdmin(i))
  328.                     {
  329.                         SendClientMessage(i, color, string);
  330.                         if(len < length) SendClientMessage(i, color, message);
  331.                     }
  332.                     else if(!IsPlayerIgnoringPlayer(playerid, i) && !IsPlayerIgnoringPlayer(i, playerid))
  333.                     {
  334.                         SendClientMessage(i, color, string);
  335.                         if(len < length) SendClientMessage(i, color, message);
  336.                     }
  337.                 }
  338.             }
  339.         }
  340.     }
  341.     return 1;
  342. }
  343.  
  344. stock IsPlayerCloseToPlayer(playerid, lookupid, Float:distance)
  345. {
  346.     new Float:x, Float:y, Float:z;
  347.     GetPlayerPos(lookupid, x, y, z);
  348.     if(IsPlayerInRangeOfPoint(playerid, distance, x, y, z) && GetPlayerInterior(playerid) == GetPlayerInterior(lookupid) && \
  349.     GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(lookupid) && GetPlayerState(playerid) != PLAYER_STATE_SPECTATING && \
  350.     GetPlayerState(lookupid) != PLAYER_STATE_SPECTATING) return true;
  351.     return false;
  352. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement