Afk System

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo Sampler,
    Ich habe mal wieder eine weitere frage.
    Unzwar habe ich ein Afk in meinem Selfmade Script drinne.
    Das funktioniert auch soweit. Nur wenn ich Afk mache dann wird der Spieler gefreezet und es kommt für alle eine meldung das der Spieler sich Afk gemeldet hat. Soweit so gut jetzt würde ich aber noch gerne das Afk system so bauen das wenn der Spieler sich afk gemeldet hat auch über dem Namen in Rot >>>Ich bin Afk steht.
    Wäre echt super wenn ihr mir Helfen könnt.


    So sitt mein Afk System imoment aus.


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    //Afk System
    if(strcmp(cmdtext, "/Afk", true) == 0)
    {
    new str[256], pname[256]; GetPlayerName(playerid, pname, 256);
    format(str, 256, "*%s hat sich Abwesend gemeldet!", pname, cmdtext[4]);
    SendClientMessage(playerid,Carbon,"Wenn du wieder Anwesend bist, Tippe: /Back");
    SendClientMessageToAll(Carbon, str);
    TogglePlayerControllable(playerid, 0);
    return 1;
    }
    if(strcmp(cmdtext, "/Back", true) == 0)
    {
    new str[256], pname[256]; GetPlayerName(playerid, pname, 256);
    format(str, 256, "*%s ist nun wieder Anwesend!", pname, cmdtext[4]);
    SendClientMessageToAll(Carbon, str);
    GameTextForPlayer(playerid,"~w~Willkommen zurueck. :)!",2500,3);
    TogglePlayerControllable(playerid, 1);
    return 1;
    }
    return 0;
    }


    Klick meh !! du

  • würde ich nicht so machen ist sehr buggy wie du es hast. man könnte den befehl /back immer nutzen, zB. wenn man gecufft ist kommt man da raus, oder andere sachen wo man gefreezt wird. wird dir sehr viele probleme berreiten.

  • Ja xD ihr seit meine betsen lehrer hier.
    mein system sitt so aus. ich schreibe mir Abends auf was ich am nästen tag alles machen möchte.
    Dann gehe ich Morgens hier reihn und stelle meine frage wie man das machen könnte.
    Allerdings auch nur wenn ich es auch nicht selber weiß. Und dann versuche ich alles Abzuarbeiten :)



    Edit: Bob wie meinst du das ? Kannst du mir ein anderes geben,empfehlen ?
    denn das wo ich jetzt habe habe ich hier aus den Codeschnipsel


    Klick meh !! du

  • würde ich nicht so machen ist sehr buggy wie du es hast. man könnte den befehl /back immer nutzen, zB. wenn man gecufft ist kommt man da raus, oder andere sachen wo man gefreezt wird. wird dir sehr viele probleme berreiten.


    Oh, seh ich auch grad.
    Ich machs ihm mal schnell.


    Ganz oben im Script:

    new AFK[MAX_PLAYERS];


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    //Afk System
    if(strcmp(cmdtext, "/Afk", true) == 0)
    {
    if(AFK[playerid] == 0)
    {
    new str[256], pname[256]; GetPlayerName(playerid, pname, 256);
    format(str, 256, "*%s hat sich Abwesend gemeldet!", pname, cmdtext[4]);
    SendClientMessage(playerid,Carbon,"Wenn du wieder Anwesend bist, Tippe: /Back");
    SendClientMessageToAll(Carbon, str);
    TogglePlayerControllable(playerid, 0);
    AFK[playerid] = 1;
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFF,"Du bist AFK, nutze /Back!");
    }
    return 1;
    }
    if(strcmp(cmdtext, "/Back", true) == 0)
    {
    if(AFK[playerid] == 1)
    {
    new str[256], pname[256]; GetPlayerName(playerid, pname, 256);
    format(str, 256, "*%s ist nun wieder Anwesend!", pname, cmdtext[4]);
    SendClientMessageToAll(Carbon, str);
    GameTextForPlayer(playerid,"~w~Willkommen zurueck. :)!",2500,3);
    TogglePlayerControllable(playerid, 1);
    AFK[playerid] = 0;
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFF,"Du bist nicht AFK, nutze /AFK!");
    }
    return 1;
    }
    return 0;
    }

  • Nein das noch nicht, ich machs dir jetzt mal schnell Moment.

  • new IsPlayerAFK[MAX_PLAYERS];

    //Afk System
    if(strcmp(cmdtext, "/Afk", true) == 0)
    {
    if(IsPlayerAFK[playerid] == 0)
    {
    new afktime = IsPlayerAFK
    new str[256], pname[256]; GetPlayerName(playerid, pname, 256);
    format(str, 256, "*%s hat sich Abwesend gemeldet!", pname, cmdtext[4]);
    SendClientMessage(playerid,Carbon,"Wenn du wieder Anwesend bist, Tippe: /Back");
    SendClientMessageToAll(Carbon, str);
    IsPlayerAfk[playerid] = 1;
    SetPlayerChatBubble(playerid,"Was willst du machen ich bin nicht da", COLOR_PURPLE, 20.0, afktime);
    TogglePlayerControllable(playerid, 0);
    return 1;
    }
    }


    Is schnell ausm kopf geschrieben, ka obs funzt, aber wie gesagt PlayerFreezen nie dem Spieler überlassen, wird nur ausgenutzt


    //EDIT: Musst halt den /back befehl dann noch so anpassen


    //EDIT 2: Fehler behoben

  • Bob, das würde Errors geben da du den Spieler auf AFK stellst obwohl du oben nur eine leere Variable ohne Spieler gemacht hast.

  • Gott geht die welt unter, ist halt nen flüchtigkeits fehler, aber sowas sieht man ja eigentlich und er kann ja scripten meint er, ich kann dir nochwas sagen einmal hab ich AFK groß und einmal klein geschrieben :P

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ganz oben im Script:

    new Text3D:AFK3D[MAX_PLAYERS];


    Dann das mit deinem AFK System austauschen:

    public OnPlayerCommandText(playerid, cmdtext[])
    {
    //Afk System
    if(strcmp(cmdtext, "/Afk", true) == 0)
    {
    if(AFK[playerid] == 0)
    {
    new str[256], pname[256]; GetPlayerName(playerid, pname, 256);
    format(str, 256, "*%s hat sich Abwesend gemeldet!", pname, cmdtext[4]);
    SendClientMessage(playerid,Carbon,"Wenn du wieder Anwesend bist, Tippe: /Back");
    SendClientMessageToAll(Carbon, str);
    TogglePlayerControllable(playerid, 0);
    AFK[playerid] = Create3DTextLabel("Dieser Spieler ist im AFK Modus!", 0xFF0000, 0.0,0.0,0.0, 0);
    Attach3DTextLabelToPlayer(AFK3D[playerid], playerid, 0.0, 0.0, 0.7);
    AFK[playerid] = 1;
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFF,"Du bist AFK, nutze /Back!");
    }
    return 1;
    }
    if(strcmp(cmdtext, "/Back", true) == 0)
    {
    if(AFK[playerid] == 1)
    {
    new str[256], pname[256]; GetPlayerName(playerid, pname, 256);
    format(str, 256, "*%s ist nun wieder Anwesend!", pname, cmdtext[4]);
    SendClientMessageToAll(Carbon, str);
    GameTextForPlayer(playerid,"~w~Willkommen zurueck. :)!",2500,3);
    TogglePlayerControllable(playerid, 1);
    Delete3DTextLabel(AFK3D[playerid]);
    AFK[playerid] = 0;
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFF,"Du bist nicht AFK, nutze /AFK!");
    }
    return 1;
    }
    return 0;
    }

  • Lass das lieber ^^.
    Es gibt genug Kinder hier die dir dann dein Script abziehen.

  • Hy Leute,
    Ich brauche hilfe bekomme 2 Errors.
    Habe es so gemacht


    {
    //Afk System
    if(strcmp(cmdtext, "/Afk", true) == 0)
    {
    if(AFK[playerid] == 0)
    {
    new str[256], pname[256]; GetPlayerName(playerid, pname, 256);
    format(str, 256, "*%s hat sich Abwesend gemeldet!", pname, cmdtext[4]);
    SendClientMessage(playerid,Carbon,"Wenn du wieder Anwesend bist, Tippe: /Back");
    SendClientMessageToAll(Carbon, str);
    TogglePlayerControllable(playerid, 0);
    AFK[playerid] = Create3DTextLabel("Dieser Spieler ist im AFK Modus!",MRot,0.0,0.0,0.0,0);
    Attach3DTextLabelToPlayer(AFK3D[playerid], playerid, 0.0, 0.0, 0.7);
    AFK[playerid] = 1;
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFF,"Du bist AFK, nutze /Back!");
    }
    return 1;
    }
    if(strcmp(cmdtext, "/Back", true) == 0)
    {
    if(AFK[playerid] == 1)
    {
    new str[256], pname[256]; GetPlayerName(playerid, pname, 256);
    format(str, 256, "*%s ist nun wieder Anwesend!", pname, cmdtext[4]);
    SendClientMessageToAll(Carbon, str);
    GameTextForPlayer(playerid,"~w~Willkommen zurueck. :)!",2500,3);
    TogglePlayerControllable(playerid, 1);
    Delete3DTextLabel(AFK3D[playerid]);
    AFK[playerid] = 0;
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFF,"Du bist nicht AFK, nutze /AFK!");
    }
    return 1;
    }
    return 0;
    }


    Und das sind die Errors


    D:\Programme\Meine Scriptings\German Dream City\gamemodes\German-Roleplay.pwn(481) : warning 202: number of arguments does not match definition
    D:\Programme\Meine Scriptings\German Dream City\gamemodes\German-Roleplay.pwn(481) : warning 213: tag mismatch
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Warnings.


    Klick meh !! du


  • Moin.


    Der erste Fehler ist, Du hast den Wert für die Entfernung vergessen, in der das Label zu sehen sein soll.
    Der zweite, 'AFK[playerid] = 'versucht den AFK-Status auf 'Create3DLabel' zu setzen.
    Versuch mal das:



    if(AFK[playerid] == 0)
    {
    new str[256], pname[256]; GetPlayerName(playerid, pname, 256);
    format(str, 256, "*%s hat sich Abwesend gemeldet!", pname, cmdtext[4]);
    SendClientMessage(playerid,Carbon,"Wenn du wieder Anwesend bist, Tippe: /Back");
    SendClientMessageToAll(Carbon, str);
    TogglePlayerControllable(playerid, 0);
    Create3DTextLabel("Dieser Spieler ist im AFK Modus!",MRot,0.0,0.0,0.0,0,0); // "Message",Farbe,XPos,YPos,ZPos,Sichtbarkeit (Entfernung),VWelt
    Attach3DTextLabelToPlayer(AFK3D[playerid], playerid, 0.0, 0.0, 0.7);
    AFK[playerid] = 1;