OnPlayerDisconnect

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 Breadfish,
    Wenn ein Spieler den Server verlässt, egal auf welche Art (Timeout/Crash/Task Manger, Kick/Ban, Offline gehen) wird immer nur angezeigt, dass er ganz normal offline gegangen ist. Aber das soll ja nicht passieren.
    Wenn ein Spieler eine Exe bekommt, soll da stehen: "(Timeout/Crash/Task Manager)....
    Kann mir da jemand weiter helfen?


    {
    new str[128];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    if(reason == 0)
    {
    format(str, sizeof(str), "%s hat den Server verlassen (Timeout/Crash/Task Manager).", name);
    SendClientMessageToAll(COLOR_GREY, str);
    }
    else if(reason == 1)
    {
    format(str, sizeof(str), "%s hat den Server verlassen (Offline).", name);
    SendClientMessageToAll(COLOR_GREY, str);
    }
    else if(reason == 2)
    {
    format(str, sizeof(str), "%s hat den Server verlassen (Ban/Kick).",name);
    SendClientMessageToAll(COLOR_GREY, str);
    }
    return 1;
    }

  • nimm mal das


    new string[100], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    switch(reason)
    {
    case 0: format(string, sizeof(string), "[Timeout] %s hat den Server verlassen.", name);
    case 1: format(string, sizeof(string), "[Leave] %s hat den Server verlassen.", name);
    case 2: format(string, sizeof(string), "[Kick/Ban] %s hat den Server verlassen.", name);
    }
    SendClientMessageToAll(cRed,string);

  • ja das ist ja auch normal da du GTA Beendet hast Timeout = Verbindung unterbrochen KICK/Ban = wenn du einen kickst oder bannst

  • Und warum soll dann case 0 ausgelöst werden?
    Offlineflucht leicht gemacht? xD Find ich richtig so, dass dann [Leave] angezeigt wird...


    Gut, bei Standbildern oder wie auch immer ist das was anderes, aber dann kann man ein oder mehrere Screenshots machen und im Nachhinein klarstellen.


    Schließlich unterbricht doch nicht die Verbindung, wenn du GTA übern Taskmanager beendest...

  • Ich habn GTA Prozess Killer das heißt wen ich "F7" drücke wird GTA beendet und case 0 wird ausgelöst. Muss beim Taskmanager auch so sein da der Taskmanager GTA beendet d.h. die Verbindung wird auch beendet.


    ich habs so ein meinem Script.
    new string[128];
    switch(reason){
    case 0: format(string,sizeof(string),"%s hat den Server verlassen.(Timeout/Crash)",SpielerName(playerid));
    case 1: format(string,sizeof(string),"%s hat den Server verlassen.",SpielerName(playerid));
    case 2: format(string,sizeof(string),"%s wurde vom Server gekickt/gebannt.",SpielerName(playerid));
    }
    SMessage(playerid,GRAU,string,20);

  • Schließlich unterbricht doch nicht die Verbindung, wenn du GTA übern Taskmanager beendest...


    Nicht direkt wenn du den über den Taskmananger machst ist es als wenn du /q eingibst da du den Prozess so beendest als wenn du Schließen drückst
    Verbindung unterbrechen ist auch nur möglich, wenn du die Internetverbindung während des spiel unterbrichst dann gibt er Timeout aus
    das kannst du am besten mit 2 rechnern testen die du local oder via Gameserver verbindest und bei einen die verbindung abbrichst

  • Du willst also, dass man über den Taskmanager einen Crash vortäuschen kann, wenn man off gehen will?
    Ich versteh den Sinn dahinter absolut nicht...
    Bei RL Servern wärs ja große Klasse. Keine Lust auf knast -> Taskmanager -> ''huch, hatte crash, kann nix dafür...''


    Zitat

    Egal wie ich offline gehe, es zeigt immer case 1 an.

    Auch wenn du dein Lan-Kabel ziehst?
    Auch wenn du dich kickst?


    Naja, dann halte ich mich mal hier raus, da ich nichts mache wo ich keinen Sinn drin sehe.

  • Okay, lassen wir das mit dem per Task Manager mal aus dem Spiel.
    Ich hab das mit dem Ban auch versucht.
    Kollege und ich waren auf dem Server.
    Ich hab mich für 1Minute gebannt, trotzdem stand da per case 1...Da sollte ja aber case 2 stehen...

  • Versuch den Code aus dem Wiki mal
    public OnPlayerDisconnect(playerid, reason)
    {
    new
    string[64],
    name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    switch(reason)
    {
    case 0: format(string,sizeof string,"%s left the server. (Timed out)",name);
    case 1: format(string,sizeof string,"%s left the server. (Leaving)",name);
    case 2: format(string,sizeof string,"%s left the server. (Kicked/Banned)",name);
    }
    SendClientMessageToAll(0xFFFFFFAA,string);
    return 1;
    }

  • Es gibt noch eine letzte möglichkeit bei in jedem "Case" ein "Printf" ein dann kannst dus in der Serverlog lesen ;)


    #edit
    also
    public OnPlayerDisconnect(playerid, reason)
    {
    new
    string[64],
    name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    switch(reason)
    {
    case 0: format(string,sizeof string,"%s left the server. (Timed out)",name);
    case 1: format(string,sizeof string,"%s left the server. (Leaving)",name);
    case 2: format(string,sizeof string,"%s left the server. (Kicked/Banned)",name);
    }
    SendClientMessageToAll(0xFFFFFFAA,string);
    printf(string,name);
    return 1;
    }


    #edit bane zu --> name