Advertisement
Guest User

AFK-System1.1 by K4biX

a guest
Oct 24th, 2011
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.76 KB | None | 0 0
  1. /*
  2. AFK-System by K4biX. 23.10.2011 | Update1.1 24.10.2011
  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. new string[128];
  10. new bool:SpielerIstAFK[MAX_PLAYERS];
  11. new bool:IstSpielerGespawnt[MAX_PLAYERS];
  12. new AFKTimer[MAX_PLAYERS];
  13. new TextDrawUpdate[MAX_PLAYERS];
  14. new Text:Textdraw0[MAX_PLAYERS];
  15. new Text3D:AFK3DTextLabel[MAX_PLAYERS];
  16. new Float:AlteSpielerPos[MAX_PLAYERS][3];
  17.  
  18. #define COLOR_WHITE 0xFFFFFFFF
  19. #define COLOR_GRAU 0xBEBEBEFF
  20. #define COLOR_ROT 0xFF6347AA
  21. #define AFK_3DTextLabel 0x00FF00FF // <-- Farbcode des 3DTextLabel's über dem Spieler.
  22.  
  23. #define AntiAFK_Timer 60000*30 // <-- Timer wann Spieler gekickt werden sollen, wenn sie nicht mehr am Spiel teilnehmen.
  24.  
  25. main()
  26. {
  27.     print("\n-----------------------------------");
  28.     print("    -----------------------------    ");
  29.     print("    | K4biX's AFK-System Loaded |    ");
  30.     print("    -----------------------------    ");
  31.     print("             VERSION 1.0             ");
  32.     print("    -----------------------------    ");
  33.     print("------------------------------------\n");
  34. }
  35.  
  36. public OnFilterScriptInit()
  37. {
  38.     SetTimer("AlleSpielerKontrollieren", AntiAFK_Timer, 0);
  39.     return 1;
  40. }
  41.  
  42. public OnFilterScriptExit()
  43. {
  44.     return 1;
  45. }
  46.  
  47. public OnPlayerConnect(playerid)
  48. {
  49.     AFKTimer[playerid] = 0;
  50.     SpielerIstAFK[playerid] = false;
  51.     IstSpielerGespawnt[playerid] = false;
  52.    
  53.     Textdraw0[playerid] = TextDrawCreate(502.000000,121.000000," ");
  54.     TextDrawAlignment(Textdraw0[playerid],0);
  55.     TextDrawBackgroundColor(Textdraw0[playerid],0x00000066);
  56.     TextDrawFont(Textdraw0[playerid],2);
  57.     TextDrawLetterSize(Textdraw0[playerid],0.199999,1.000000);
  58.     TextDrawColor(Textdraw0[playerid],0xffff00ff);
  59.     TextDrawSetOutline(Textdraw0[playerid],1);
  60.     TextDrawSetProportional(Textdraw0[playerid],1);
  61.     TextDrawSetShadow(Textdraw0[playerid],10);
  62.     return 1;
  63. }
  64.  
  65. public OnPlayerDisconnect(playerid, reason)
  66. {
  67.     KillTimer(TextDrawUpdate[playerid]);
  68.     TextDrawDestroy(Textdraw0[playerid]);
  69.     return 1;
  70. }
  71.  
  72. public OnPlayerSpawn(playerid)
  73. {
  74.     IstSpielerGespawnt[playerid] = true;
  75.     return 1;
  76. }
  77.  
  78. public OnPlayerDeath(playerid)
  79. {
  80.     IstSpielerGespawnt[playerid] = false;
  81.     return 1;
  82. }
  83.  
  84. public OnPlayerText(playerid, text[])
  85. {
  86.     if(SpielerIstAFK[playerid] == true)
  87.     {
  88.         SendClientMessage(playerid,COLOR_GRAU,"Im AFK-Modus kannst du den Chat nicht verwenden!");
  89.         return 0;
  90.     }
  91.     return 1;
  92. }
  93.  
  94. public OnPlayerCommandText(playerid, cmdtext[])
  95. {
  96.     if(!strcmp(cmdtext, "/AFK", true))
  97.     {
  98.         if(IsPlayerConnected(playerid))
  99.         {
  100.             if(SpielerIstAFK[playerid] == false)
  101.             {
  102.                 new str[MAX_PLAYER_NAME+25];
  103.                 SpielerIstAFK[playerid] = true;
  104.                 TogglePlayerControllable(playerid,0);
  105.                 AFK3DTextLabel[playerid] = Create3DTextLabel("Spieler ist AFK\nSekunden: 0", AFK_3DTextLabel, 30.0, 40.0, 50.0, 40.0, 0);
  106.                 Attach3DTextLabelToPlayer(AFK3DTextLabel[playerid], playerid, 0.0, 0.0, 0.7);
  107.                 format(string,sizeof(string),"~y~AFK Status~w~: ~w~Aktiviert~n~~y~Sekunden~w~: 0");
  108.                 TextDrawSetString(Textdraw0[playerid], string);
  109.                 TextDrawShowForPlayer(playerid,Textdraw0[playerid]);
  110.                 TextDrawUpdate[playerid] = SetTimerEx("AFKTextDraw", 1000, 1, "i", playerid);
  111.                 SendClientMessage(playerid,COLOR_GRAU,"Du hast dich in den AFK-Modus begeben!");
  112.                 format(str, sizeof(str), "** %s ist nun abwesend. **", SpielerName(playerid));
  113.                 SendClientMessageToAll(COLOR_WHITE, str);
  114.             }
  115.             else
  116.             {
  117.                 SendClientMessage(playerid,COLOR_GRAU,"Du befindest dich schon im AFK-Modus!");
  118.                 return 1;
  119.             }
  120.         }
  121.         return 1;
  122.     }
  123.     if(!strcmp(cmdtext, "/BACK", true))
  124.     {
  125.         if(IsPlayerConnected(playerid))
  126.         {
  127.             if(SpielerIstAFK[playerid] == true)
  128.             {
  129.                 new str[MAX_PLAYER_NAME+25];
  130.                 SpielerIstAFK[playerid] = false;
  131.                 AFKTimer[playerid] = 0;
  132.                 TogglePlayerControllable(playerid,1);
  133.                 TextDrawHideForPlayer(playerid,Textdraw0[playerid]);
  134.                 KillTimer(TextDrawUpdate[playerid]);
  135.                 Delete3DTextLabel(AFK3DTextLabel[playerid]);
  136.                 SendClientMessage(playerid,COLOR_GRAU,"Du bist aus dem AFK-Modus zurückgekehrt!");
  137.                 format(str, sizeof(str), "** %s ist nun wieder anwesend. **", SpielerName(playerid));
  138.                 SendClientMessageToAll(COLOR_WHITE, str);
  139.             }
  140.             else
  141.             {
  142.                 SendClientMessage(playerid,COLOR_GRAU,"Du befindest dich nicht im AFK-Modus!");
  143.                 return 1;
  144.             }
  145.         }
  146.         return 1;
  147.     }
  148.     return 0;
  149. }
  150.  
  151. forward AFKTextDraw(playerid);
  152. public AFKTextDraw(playerid)
  153. {
  154.     new Text3D[40];
  155.     AFKTimer[playerid] ++;
  156.     format(string,sizeof(string),"~y~AFK Status~w~: ~w~Aktiviert~n~~y~Sekunden~w~: %d", AFKTimer[playerid]);
  157.     TextDrawSetString(Textdraw0[playerid], string);
  158.     format(Text3D, sizeof(Text3D), "Spieler ist AFK\nSekunden: {FFFFFF}%d", AFKTimer[playerid]);
  159.     Update3DTextLabelText(AFK3DTextLabel[playerid], AFK_3DTextLabel, Text3D);
  160. }
  161.  
  162. forward AlleSpielerKontrollieren();
  163. public AlleSpielerKontrollieren()
  164. {
  165.     for(new i = 0; i < MAX_PLAYERS; i++)
  166.     {
  167.         if(IsPlayerConnected(i) && IstSpielerGespawnt[i] == true)
  168.         {
  169.             if(!IsPlayerNPC(i))
  170.             {
  171.                 new Float:PositionX, Float:PositionY, Float:PositionZ;
  172.                 GetPlayerPos(i, PositionX, PositionY, PositionZ);
  173.                 if(PositionX == AlteSpielerPos[i][0] && PositionY == AlteSpielerPos[i][1] && PositionZ == AlteSpielerPos[i][2])
  174.                 {
  175.                     SendClientMessage(i, COLOR_ROT, "AntiAFK: Du wirst in 10 Sekunden gekickt, wenn du nicht wieder am Spiel teilnimmst."); // Rot
  176.                     SetTimerEx("SpielerKontrollieren", 10000, 0, "i", i); //10000 ms = 10 Sekunden
  177.                 }
  178.                 AlteSpielerPos[i][0] = PositionX;
  179.                 AlteSpielerPos[i][1] = PositionY;
  180.                 AlteSpielerPos[i][2] = PositionZ;
  181.             }
  182.         }
  183.     }
  184.     return 1;
  185. }
  186.  
  187. forward SpielerKontrollieren(playerid);
  188. public SpielerKontrollieren(playerid)
  189. {
  190.     if(IsPlayerConnected(playerid) && IstSpielerGespawnt[playerid] == true)
  191.     {
  192.         if(!IsPlayerNPC(playerid))
  193.         {
  194.             new AntiAFKMessage[128];
  195.             new Float:PositionX, Float:PositionY, Float:PositionZ;
  196.             GetPlayerPos(playerid, PositionX, PositionY, PositionZ);
  197.             if(PositionX == AlteSpielerPos[playerid][0] && PositionY == AlteSpielerPos[playerid][1] && PositionZ == AlteSpielerPos[playerid][2])
  198.             {
  199.                 SendClientMessage(playerid, COLOR_ROT, "AntiAFK: Wegen Untätigkeit gekickt!");
  200.                 format(AntiAFKMessage, sizeof(AntiAFKMessage), "AntiAFK: %s wurde wegen Untätigkeit gekickt!", SpielerName(playerid));
  201.                 SendClientMessageToAll(COLOR_ROT, AntiAFKMessage);
  202.                 Kick(playerid);
  203.             }
  204.         }
  205.     }
  206.     return 1;
  207. }
  208.  
  209. forward SpielerName(id);
  210. SpielerName(id)
  211. {
  212.     new Name[MAX_PLAYER_NAME];
  213.     GetPlayerName(id, Name, sizeof(Name));
  214.     return Name;
  215. }
  216.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement