Wenn User offline geht Punkt anzeigen.

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
  • public OnPlayerDisconnect(playerid,reason)
    {
    new NameStr[35],pName[MAX_PLAYER_NAME];
    new Float:x,Float:y,Float:z;
    GetPlayerName(playerid,pName,sizeof(pName));
    GetPlayerPos(playerid,x,y,z);
    format(NameStr,35,"Ka, %s is Offline.",pName);
    Create3DTextLabel(....);
    CreatePickup(.....);
    return 1;
    }

    graphics frontend web

  • Hier, füg es genau so ein, dann geht es ..


    public OnPlayerDisconnect(playerid, reason)
    {
    new Float:posX,Float:posY,Float:posZ,name[32];
    GetPlayerName(playerid,name,32);
    GetPlayerPos(playerid,posX,posY,posZ);
    CreatePickup(1254,1,posX,posY,posZ);
    Create3DTextLabel(name,0xFEFEFEFF,posX,posY,posZ,20.0,0,0);
    return 1;
    }

  • Versuch es mal so ;)


    new disc_pick[MAX_PICKUPS];
    public OnPlayerDisconnect(playerid, reason)
    {
    new Float:posX,Float:posY,Float:posZ,name[32];
    GetPlayerName(playerid,name,32);
    GetPlayerPos(playerid,posX,posY,posZ);
    for(new i=0;i<MAX_PICKUPS;i++) {
    if(disc_pick[i]!=0)continue;
    disc_pick[i] = CreatePickup(1254,1,posX,posY,posZ);
    Create3DTextLabel(name,0xFEFEFEFF,posX,posY,posZ,20.0,0,0);
    SetTimerEx("desPickup",15000,false,"i",i);
    break;
    }
    return 1;
    }
    forward desPickup(pickup);
    public desPickup(pickup)
    {
    DestroyPickup(disc_pick[pickup]);
    return 1;
    }

  • Hallo,


    mit einem Timer kannst du dann hoch zählen lassen, wie lange das Pickup schon da steht und ggf. ab 60 Sekunden das Pickup löschen lassen. Bei meinem GameMode habe ich das so gelöst, dass der Spieler sich solange nicht mehr einloggen kann, bis sein Logout- Pickup nach 60 Sekunden gelöscht wurde.


    Sollte der Spieler sich einloggen während das andere Pickup noch da ist und sich noch gleich ausloggen, kann es sein, dass 2 Pickups vorhanden sind während eines dann immer bestehen bleiben würde. Wie gesagt, versuch das mit dem Timer und der Login "Verweigerungs"- Methode.

  • Hallo,


    mit einem Timer kannst du dann hoch zählen lassen, wie lange das Pickup schon da steht und ggf. ab 60 Sekunden das Pickup löschen lassen. Bei meinem GameMode habe ich das so gelöst, dass der Spieler sich solange nicht mehr einloggen kann, bis sein Logout- Pickup nach 60 Sekunden gelöscht wurde.


    Sollte der Spieler sich einloggen während das andere Pickup noch da ist und sich noch gleich ausloggen, kann es sein, dass 2 Pickups vorhanden sind während eines dann immer bestehen bleiben würde. Wie gesagt, versuch das mit dem Timer und der Login "Verweigerungs"- Methode.


    Wie haste das mit der Login Verweigerung gemacht?

  • Hallo,


    ich habe als allererstes einmal ein ENUM erstellt.

    enum MeinTotalesEnum
    {
    PickupID,
    PickupPlayername[MAX_PLAYER_NAME]
    PickupSeconds,
    };


    new Pickups[200][MeinTotalesEnum];


    Wenn der Spieler offline geht, wird ein Pickup erstellt und im Enum alle Daten festgehalten (aber nur wenn der Spieler eingeloggt ist). Danach mit einem Timer der einen Intervall von 1000 Millisekunden hat, das ganze Array durchgehen und PickupSeconds (sofern PickupID != 0 ist) um 1 erhöhen. Bei 60 angekommen, wird das Pickup im Timer gelöscht. PickupID enthält logischerweise die ID des Pickups.


    Danach bei OnDialogResponse (bei dem Login Dialog) kommt dann folgendes rein:

    new playername[MAX_PLAYER_NAME], find;


    GetPlayerName(playerid, playername, sizeof(playername));


    for (new i = 0; i < sizeof(LogoutPickups); i++)
    {
    if (LogoutPickups[i][PickupID] != 0)
    {
    if (!strcmp(playername, LogoutPickups[i][PickupPlayername], true))
    {
    // pickup wurde noch gefunden
    find = 1;
    break;
    }
    }
    }


    if (find == 1)
    {
    // pickup gefunden meldung
    }
    else
    {
    // spieler halt spawnen und spielerinfos laden
    }


  • Hallo,


    ich habe einfach überprüfen lassen, ob ein Pickup das zu dem Spielernamen gehört, noch vorhanden ist, oder schon gelöscht wurde.




    Ich komme damit nicht wirklich klar :D
    Habe einfach diesen Code bei OnPlayerDisconnect, was muss ich nun tun?
    new stringt[128];
    new Float:posX,Float:posY,Float:posZ,name[32];
    new hour,minuite,second;
    gettime(hour,minuite,second);
    GetPlayerName(playerid,name,32);
    GetPlayerPos(playerid,posX,posY,posZ);
    Diskette[playerid] = CreatePickup(1277,1,posX,posY,posZ);
    format(stringt, sizeof(stringt), "*Offline*\n%s\n%d:%d:%d", name, hour, minuite, second);
    OfflineText[playerid] = Create3DTextLabel(stringt,0xFFFFFFAA,posX,posY,posZ,20.0,0,0);
    SetTimerEx("Offlinegehen", 90000, false, "d", playerid);


    Reicht da nicht die If Abfrage ?