Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- AFK-System by K4biX. 23.10.2011 | Update1.2.1 | 14.01.2012
- < http://forum.sa-mp.de/index.php?page=User&userID=15070 >
- Credits müssen drinnen bleiben.
- Editieren sowie verwenden dieses scriptes ist natürlich erlaubt.
- */
- #include <a_samp>
- forward AFKTextDraw(playerid);
- forward AlleSpielerKontrollieren();
- forward SpielerKontrollieren(playerid);
- forward SpielerName(id);
- new GlobalTimer;
- new astring[128];
- new bool:SpielerIstAFK[MAX_PLAYERS];
- new bool:IstSpielerGespawnt[MAX_PLAYERS];
- new AFKTimer[MAX_PLAYERS];
- new TextDrawUpdate[MAX_PLAYERS];
- new Text:Textdraw0[MAX_PLAYERS];
- new Text3D:AFK3DTextLabel[MAX_PLAYERS];
- new Float:AlteSpielerPos[MAX_PLAYERS][3];
- #define AFK_3DTextLabel 0x00FF00FF // <-- Farbcode des 3DTextLabel's über dem Spieler.
- #define AntiAFK_Timer 60000*30 // <-- Timer wann abgefragt werden sollen, ob der Spieler noch am Spiel teilnimmt.
- #define COLOR_WHITE 0xFFFFFFFF
- #define COLOR_GRAU 0xBEBEBEFF
- #define COLOR_ROT 0xFF6347AA
- #define DIALOG_AFKLIST 1000
- main()
- {
- print("\n-----------------------------------");
- print(" ----------------------------- ");
- print(" | K4biX's AFK-System Loaded | ");
- print(" ----------------------------- ");
- print(" VERSION 1.2.1 ");
- print(" ----------------------------- ");
- print("------------------------------------\n");
- }
- public OnFilterScriptInit()
- {
- GlobalTimer = SetTimer("AlleSpielerKontrollieren", AntiAFK_Timer, true);
- return 1;
- }
- public OnFilterScriptExit()
- {
- KillTimer(GlobalTimer);
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- AFKTimer[playerid] = 0;
- SpielerIstAFK[playerid] = false;
- IstSpielerGespawnt[playerid] = false;
- Textdraw0[playerid] = TextDrawCreate(502.000000,121.000000," ");
- TextDrawAlignment(Textdraw0[playerid],0);
- TextDrawBackgroundColor(Textdraw0[playerid],0x00000066);
- TextDrawFont(Textdraw0[playerid],2);
- TextDrawLetterSize(Textdraw0[playerid],0.199999,1.000000);
- TextDrawColor(Textdraw0[playerid],0xffff00ff);
- TextDrawSetOutline(Textdraw0[playerid],1);
- TextDrawSetProportional(Textdraw0[playerid],1);
- TextDrawSetShadow(Textdraw0[playerid],10);
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- KillTimer(TextDrawUpdate[playerid]);
- TextDrawDestroy(Textdraw0[playerid]);
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- IstSpielerGespawnt[playerid] = true;
- return 1;
- }
- public OnPlayerDeath(playerid)
- {
- IstSpielerGespawnt[playerid] = false;
- return 1;
- }
- public OnPlayerText(playerid, text[])
- {
- if(SpielerIstAFK[playerid] == true)
- {
- SendClientMessage(playerid,COLOR_GRAU,"Im AFK-Modus kannst du den Chat nicht verwenden!");
- return 0;
- }
- return 1;
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- new idx, cmd[25];
- cmd = strtok(cmdtext, idx);
- if(strcmp(cmd, "/afk", true) == 0)
- {
- if(IsPlayerConnected(playerid))
- {
- new length = strlen(cmdtext);
- while ((idx < length) && (cmdtext[idx] <= ' '))
- {
- idx++;
- }
- new offset = idx;
- new result[26];
- while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
- {
- result[idx - offset] = cmdtext[idx];
- idx++;
- }
- result[idx - offset] = EOS;
- if(!strlen(result))
- {
- SendClientMessage(playerid, COLOR_GRAU, "FEHLER: /AFK [Grund]");
- return 1;
- }
- if(SpielerIstAFK[playerid] == false)
- {
- new str[128];
- SpielerIstAFK[playerid] = true;
- TogglePlayerControllable(playerid, 0);
- AFK3DTextLabel[playerid] = Create3DTextLabel("Spieler ist AFK\nSekunden: 0", AFK_3DTextLabel, 30.0, 40.0, 50.0, 40.0, 0);
- Attach3DTextLabelToPlayer(AFK3DTextLabel[playerid], playerid, 0.0, 0.0, 0.7);
- format(astring,sizeof(astring),"~y~AFK Status~w~: ~w~Aktiviert~n~~y~Sekunden~w~: 0");
- TextDrawSetString(Textdraw0[playerid], astring);
- TextDrawShowForPlayer(playerid,Textdraw0[playerid]);
- TextDrawUpdate[playerid] = SetTimerEx("AFKTextDraw", 1000, 1, "i", playerid);
- SendClientMessage(playerid,COLOR_GRAU,"Du hast dich in den AFK-Modus begeben!");
- format(str, sizeof(str), "** %s ist nun abwesend. [Grund: %s] **", SpielerName(playerid), (result));
- SendClientMessageToAll(COLOR_WHITE, str);
- }
- else
- {
- SendClientMessage(playerid,COLOR_GRAU,"Du befindest dich schon im AFK-Modus!");
- return 1;
- }
- }
- return 1;
- }
- if(!strcmp(cmdtext, "/back", true))
- {
- if(IsPlayerConnected(playerid))
- {
- if(SpielerIstAFK[playerid] == true)
- {
- new str[MAX_PLAYER_NAME+25];
- SpielerIstAFK[playerid] = false;
- AFKTimer[playerid] = 0;
- TogglePlayerControllable(playerid,1);
- TextDrawHideForPlayer(playerid,Textdraw0[playerid]);
- KillTimer(TextDrawUpdate[playerid]);
- Delete3DTextLabel(AFK3DTextLabel[playerid]);
- SendClientMessage(playerid,COLOR_GRAU,"Du bist aus dem AFK-Modus zurückgekehrt!");
- format(str, sizeof(str), "** %s ist nun wieder anwesend. **", SpielerName(playerid));
- SendClientMessageToAll(COLOR_WHITE, str);
- }
- else
- {
- SendClientMessage(playerid,COLOR_GRAU,"Du befindest dich nicht im AFK-Modus!");
- return 1;
- }
- }
- return 1;
- }
- if(!strcmp(cmdtext, "/afklist", true))
- {
- new count = 0, stri[1024], pName[MAX_PLAYER_NAME];
- for(new i = 0; i < MAX_PLAYERS; i++)
- {
- if(GetPlayerName(i, pName,sizeof(pName)))
- {
- if(SpielerIstAFK[i] == true)
- {
- format(stri, sizeof(stri), "%s[%d]{99EE22}%s\n", stri, i, pName);
- count++;
- }
- }
- if(count == 0)
- {
- SendClientMessage(playerid, COLOR_GRAU, "Niemand befindet sich im AFK-Modus!");
- }else ShowPlayerDialog(playerid,DIALOG_AFKLIST,DIALOG_STYLE_LIST,"Folgende Spieler befinden sich im AFK-Modus:",stri,"Schließen","");
- return 1;
- }
- }
- return 0;
- }
- public AFKTextDraw(playerid)
- {
- new Text3D[40];
- AFKTimer[playerid] ++;
- format(astring,sizeof(astring),"~y~AFK Status~w~: ~w~Aktiviert~n~~y~Sekunden~w~: %d", AFKTimer[playerid]);
- TextDrawSetString(Textdraw0[playerid], astring);
- format(Text3D, sizeof(Text3D), "Spieler ist AFK\nSekunden: {FFFFFF}%d", AFKTimer[playerid]);
- Update3DTextLabelText(AFK3DTextLabel[playerid], AFK_3DTextLabel, Text3D);
- }
- public AlleSpielerKontrollieren()
- {
- for(new i = 0; i < MAX_PLAYERS; i++)
- {
- if(IsPlayerConnected(i) && IstSpielerGespawnt[i] == true)
- {
- if(!IsPlayerNPC(i))
- {
- new Float:PositionX, Float:PositionY, Float:PositionZ;
- GetPlayerPos(i, PositionX, PositionY, PositionZ);
- if(PositionX == AlteSpielerPos[i][0] && PositionY == AlteSpielerPos[i][1] && PositionZ == AlteSpielerPos[i][2])
- {
- SendClientMessage(i, COLOR_ROT, "AntiAFK: Du wirst in 10 Sekunden gekickt, wenn du nicht wieder am Spiel teilnimmst."); // Rot
- SetTimerEx("SpielerKontrollieren", 10000, 0, "i", i); //10000 ms = 10 Sekunden
- }
- AlteSpielerPos[i][0] = PositionX;
- AlteSpielerPos[i][1] = PositionY;
- AlteSpielerPos[i][2] = PositionZ;
- }
- }
- }
- return 1;
- }
- public SpielerKontrollieren(playerid)
- {
- if(IsPlayerConnected(playerid) && IstSpielerGespawnt[playerid] == true)
- {
- if(!IsPlayerNPC(playerid))
- {
- new AntiAFKMessage[128];
- new Float:PositionX, Float:PositionY, Float:PositionZ;
- GetPlayerPos(playerid, PositionX, PositionY, PositionZ);
- if(PositionX == AlteSpielerPos[playerid][0] && PositionY == AlteSpielerPos[playerid][1] && PositionZ == AlteSpielerPos[playerid][2])
- {
- SendClientMessage(playerid, COLOR_ROT, "AntiAFK: Wegen Untätigkeit gekickt!");
- format(AntiAFKMessage, sizeof(AntiAFKMessage), "AntiAFK: %s wurde wegen Untätigkeit gekickt!", SpielerName(playerid));
- SendClientMessageToAll(COLOR_ROT, AntiAFKMessage);
- Kick(playerid);
- }
- }
- }
- return 1;
- }
- SpielerName(id)
- {
- new Name[MAX_PLAYER_NAME];
- GetPlayerName(id, Name, sizeof(Name));
- return Name;
- }
- strtok(const string[], &index)
- {
- new length = strlen(string);
- while ((index < length) && (string[index] <= ' '))
- {
- index++;
- }
- new offset = index;
- new result[20];
- while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
- {
- result[index - offset] = string[index];
- index++;
- }
- result[index - offset] = EOS;
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement