Advertisement
Guest User

AFK-System1.2.1 by K4biX

a guest
Jan 14th, 2012
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 8.35 KB | None | 0 0
  1. /*
  2. AFK-System by K4biX. 23.10.2011 | Update1.2.1 | 14.01.2012
  3. < http://forum.sa-mp.de/index.php?page=User&userID=15070 >
  4. Credits müssen drinnen bleiben.
  5. Editieren sowie verwenden dieses scriptes ist natürlich erlaubt.
  6. */
  7. #include <a_samp>
  8.  
  9. forward AFKTextDraw(playerid);
  10. forward AlleSpielerKontrollieren();
  11. forward SpielerKontrollieren(playerid);
  12. forward SpielerName(id);
  13.  
  14. new GlobalTimer;
  15. new astring[128];
  16.  
  17. new bool:SpielerIstAFK[MAX_PLAYERS];
  18. new bool:IstSpielerGespawnt[MAX_PLAYERS];
  19. new AFKTimer[MAX_PLAYERS];
  20. new TextDrawUpdate[MAX_PLAYERS];
  21. new Text:Textdraw0[MAX_PLAYERS];
  22. new Text3D:AFK3DTextLabel[MAX_PLAYERS];
  23. new Float:AlteSpielerPos[MAX_PLAYERS][3];
  24.  
  25. #define AFK_3DTextLabel 0x00FF00FF // <-- Farbcode des 3DTextLabel's über dem Spieler.
  26. #define AntiAFK_Timer 60000*30 // <-- Timer wann abgefragt werden sollen, ob der Spieler noch am Spiel teilnimmt.
  27.  
  28. #define COLOR_WHITE 0xFFFFFFFF
  29. #define COLOR_GRAU 0xBEBEBEFF
  30. #define COLOR_ROT 0xFF6347AA
  31.  
  32. #define DIALOG_AFKLIST 1000
  33.  
  34.  
  35.  
  36. main()
  37. {
  38.     print("\n-----------------------------------");
  39.     print("    -----------------------------    ");
  40.     print("    | K4biX's AFK-System Loaded |    ");
  41.     print("    -----------------------------    ");
  42.     print("           VERSION 1.2.1             ");
  43.     print("    -----------------------------    ");
  44.     print("------------------------------------\n");
  45. }
  46.  
  47. public OnFilterScriptInit()
  48. {
  49.     GlobalTimer = SetTimer("AlleSpielerKontrollieren", AntiAFK_Timer, true);
  50.     return 1;
  51. }
  52.  
  53. public OnFilterScriptExit()
  54. {
  55.     KillTimer(GlobalTimer);
  56.     return 1;
  57. }
  58.  
  59. public OnPlayerConnect(playerid)
  60. {
  61.     AFKTimer[playerid] = 0;
  62.     SpielerIstAFK[playerid] = false;
  63.     IstSpielerGespawnt[playerid] = false;
  64.    
  65.     Textdraw0[playerid] = TextDrawCreate(502.000000,121.000000," ");
  66.     TextDrawAlignment(Textdraw0[playerid],0);
  67.     TextDrawBackgroundColor(Textdraw0[playerid],0x00000066);
  68.     TextDrawFont(Textdraw0[playerid],2);
  69.     TextDrawLetterSize(Textdraw0[playerid],0.199999,1.000000);
  70.     TextDrawColor(Textdraw0[playerid],0xffff00ff);
  71.     TextDrawSetOutline(Textdraw0[playerid],1);
  72.     TextDrawSetProportional(Textdraw0[playerid],1);
  73.     TextDrawSetShadow(Textdraw0[playerid],10);
  74.     return 1;
  75. }
  76.  
  77. public OnPlayerDisconnect(playerid, reason)
  78. {
  79.     KillTimer(TextDrawUpdate[playerid]);
  80.     TextDrawDestroy(Textdraw0[playerid]);
  81.     return 1;
  82. }
  83.  
  84. public OnPlayerSpawn(playerid)
  85. {
  86.     IstSpielerGespawnt[playerid] = true;
  87.     return 1;
  88. }
  89.  
  90. public OnPlayerDeath(playerid)
  91. {
  92.     IstSpielerGespawnt[playerid] = false;
  93.     return 1;
  94. }
  95.  
  96. public OnPlayerText(playerid, text[])
  97. {
  98.     if(SpielerIstAFK[playerid] == true)
  99.     {
  100.         SendClientMessage(playerid,COLOR_GRAU,"Im AFK-Modus kannst du den Chat nicht verwenden!");
  101.         return 0;
  102.     }
  103.     return 1;
  104. }
  105.  
  106. public OnPlayerCommandText(playerid, cmdtext[])
  107. {
  108.     new idx, cmd[25];
  109.     cmd = strtok(cmdtext, idx);
  110.     if(strcmp(cmd, "/afk", true) == 0)
  111.     {
  112.         if(IsPlayerConnected(playerid))
  113.         {
  114.             new length = strlen(cmdtext);
  115.             while ((idx < length) && (cmdtext[idx] <= ' '))
  116.             {
  117.                 idx++;
  118.             }
  119.             new offset = idx;
  120.             new result[26];
  121.             while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
  122.             {
  123.                 result[idx - offset] = cmdtext[idx];
  124.                 idx++;
  125.             }
  126.             result[idx - offset] = EOS;
  127.             if(!strlen(result))
  128.             {
  129.                 SendClientMessage(playerid, COLOR_GRAU, "FEHLER: /AFK [Grund]");
  130.                 return 1;
  131.             }
  132.             if(SpielerIstAFK[playerid] == false)
  133.             {
  134.                 new str[128];
  135.                 SpielerIstAFK[playerid] = true;
  136.                 TogglePlayerControllable(playerid, 0);
  137.                 AFK3DTextLabel[playerid] = Create3DTextLabel("Spieler ist AFK\nSekunden: 0", AFK_3DTextLabel, 30.0, 40.0, 50.0, 40.0, 0);
  138.                 Attach3DTextLabelToPlayer(AFK3DTextLabel[playerid], playerid, 0.0, 0.0, 0.7);
  139.                 format(astring,sizeof(astring),"~y~AFK Status~w~: ~w~Aktiviert~n~~y~Sekunden~w~: 0");
  140.                 TextDrawSetString(Textdraw0[playerid], astring);
  141.                 TextDrawShowForPlayer(playerid,Textdraw0[playerid]);
  142.                 TextDrawUpdate[playerid] = SetTimerEx("AFKTextDraw", 1000, 1, "i", playerid);
  143.                 SendClientMessage(playerid,COLOR_GRAU,"Du hast dich in den AFK-Modus begeben!");
  144.                 format(str, sizeof(str), "** %s ist nun abwesend. [Grund: %s] **", SpielerName(playerid), (result));
  145.                 SendClientMessageToAll(COLOR_WHITE, str);
  146.             }
  147.             else
  148.             {
  149.                 SendClientMessage(playerid,COLOR_GRAU,"Du befindest dich schon im AFK-Modus!");
  150.                 return 1;
  151.             }
  152.         }
  153.         return 1;
  154.     }
  155.    
  156.     if(!strcmp(cmdtext, "/back", true))
  157.     {
  158.         if(IsPlayerConnected(playerid))
  159.         {
  160.             if(SpielerIstAFK[playerid] == true)
  161.             {
  162.                 new str[MAX_PLAYER_NAME+25];
  163.                 SpielerIstAFK[playerid] = false;
  164.                 AFKTimer[playerid] = 0;
  165.                 TogglePlayerControllable(playerid,1);
  166.                 TextDrawHideForPlayer(playerid,Textdraw0[playerid]);
  167.                 KillTimer(TextDrawUpdate[playerid]);
  168.                 Delete3DTextLabel(AFK3DTextLabel[playerid]);
  169.                 SendClientMessage(playerid,COLOR_GRAU,"Du bist aus dem AFK-Modus zurückgekehrt!");
  170.                 format(str, sizeof(str), "** %s ist nun wieder anwesend. **", SpielerName(playerid));
  171.                 SendClientMessageToAll(COLOR_WHITE, str);
  172.             }
  173.             else
  174.             {
  175.                 SendClientMessage(playerid,COLOR_GRAU,"Du befindest dich nicht im AFK-Modus!");
  176.                 return 1;
  177.             }
  178.         }
  179.         return 1;
  180.     }
  181.    
  182.     if(!strcmp(cmdtext, "/afklist", true))
  183.     {
  184.         new count = 0, stri[1024], pName[MAX_PLAYER_NAME];
  185.         for(new i = 0; i < MAX_PLAYERS; i++)
  186.         {
  187.             if(GetPlayerName(i, pName,sizeof(pName)))
  188.             {
  189.                 if(SpielerIstAFK[i] == true)
  190.                 {
  191.                     format(stri, sizeof(stri), "%s[%d]{99EE22}%s\n", stri, i, pName);
  192.                     count++;
  193.                 }
  194.             }
  195.             if(count == 0)
  196.             {
  197.                 SendClientMessage(playerid, COLOR_GRAU, "Niemand befindet sich im AFK-Modus!");
  198.             }else ShowPlayerDialog(playerid,DIALOG_AFKLIST,DIALOG_STYLE_LIST,"Folgende Spieler befinden sich im AFK-Modus:",stri,"Schließen","");
  199.             return 1;
  200.         }
  201.     }
  202.     return 0;
  203. }
  204.  
  205. public AFKTextDraw(playerid)
  206. {
  207.     new Text3D[40];
  208.     AFKTimer[playerid] ++;
  209.     format(astring,sizeof(astring),"~y~AFK Status~w~: ~w~Aktiviert~n~~y~Sekunden~w~: %d", AFKTimer[playerid]);
  210.     TextDrawSetString(Textdraw0[playerid], astring);
  211.     format(Text3D, sizeof(Text3D), "Spieler ist AFK\nSekunden: {FFFFFF}%d", AFKTimer[playerid]);
  212.     Update3DTextLabelText(AFK3DTextLabel[playerid], AFK_3DTextLabel, Text3D);
  213. }
  214.  
  215. public AlleSpielerKontrollieren()
  216. {
  217.     for(new i = 0; i < MAX_PLAYERS; i++)
  218.     {
  219.         if(IsPlayerConnected(i) && IstSpielerGespawnt[i] == true)
  220.         {
  221.             if(!IsPlayerNPC(i))
  222.             {
  223.                 new Float:PositionX, Float:PositionY, Float:PositionZ;
  224.                 GetPlayerPos(i, PositionX, PositionY, PositionZ);
  225.                 if(PositionX == AlteSpielerPos[i][0] && PositionY == AlteSpielerPos[i][1] && PositionZ == AlteSpielerPos[i][2])
  226.                 {
  227.                     SendClientMessage(i, COLOR_ROT, "AntiAFK: Du wirst in 10 Sekunden gekickt, wenn du nicht wieder am Spiel teilnimmst."); // Rot
  228.                     SetTimerEx("SpielerKontrollieren", 10000, 0, "i", i); //10000 ms = 10 Sekunden
  229.                 }
  230.                 AlteSpielerPos[i][0] = PositionX;
  231.                 AlteSpielerPos[i][1] = PositionY;
  232.                 AlteSpielerPos[i][2] = PositionZ;
  233.             }
  234.         }
  235.     }
  236.     return 1;
  237. }
  238.  
  239. public SpielerKontrollieren(playerid)
  240. {
  241.     if(IsPlayerConnected(playerid) && IstSpielerGespawnt[playerid] == true)
  242.     {
  243.         if(!IsPlayerNPC(playerid))
  244.         {
  245.             new AntiAFKMessage[128];
  246.             new Float:PositionX, Float:PositionY, Float:PositionZ;
  247.             GetPlayerPos(playerid, PositionX, PositionY, PositionZ);
  248.             if(PositionX == AlteSpielerPos[playerid][0] && PositionY == AlteSpielerPos[playerid][1] && PositionZ == AlteSpielerPos[playerid][2])
  249.             {
  250.                 SendClientMessage(playerid, COLOR_ROT, "AntiAFK: Wegen Untätigkeit gekickt!");
  251.                 format(AntiAFKMessage, sizeof(AntiAFKMessage), "AntiAFK: %s wurde wegen Untätigkeit gekickt!", SpielerName(playerid));
  252.                 SendClientMessageToAll(COLOR_ROT, AntiAFKMessage);
  253.                 Kick(playerid);
  254.             }
  255.         }
  256.     }
  257.     return 1;
  258. }
  259.  
  260. SpielerName(id)
  261. {
  262.     new Name[MAX_PLAYER_NAME];
  263.     GetPlayerName(id, Name, sizeof(Name));
  264.     return Name;
  265. }
  266.  
  267. strtok(const string[], &index)
  268. {
  269.     new length = strlen(string);
  270.     while ((index < length) && (string[index] <= ' '))
  271.     {
  272.         index++;
  273.     }
  274.     new offset = index;
  275.     new result[20];
  276.     while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
  277.     {
  278.         result[index - offset] = string[index];
  279.         index++;
  280.     }
  281.     result[index - offset] = EOS;
  282.     return result;
  283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement