Beiträge von ElDiabolo

    Heyho,
    ich wollte heute mal das Ticketssystem von Scriptor so umschreiben, dass es in einem Dialog in mehreren Zeilen angezeigt wird.
    Das ist der Code. Also immer wenn ein neues Ticket erstellt wird, soll es nicht das alte ersetzen, sondern in die nächste Zeile gehen. Wie mache ich dies?
    Bei diesem Code wird der Dialog ja immer nur mehrmals hinterinander abgesendet, sodass das letzte angezeigt wird...
    ocmd:tickets(playerid, params[])
    {
    #pragma unused params
    if(isPlayerAnAdmin(playerid, 1))
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(SupportTicket[i] == 1)
    {
    if(TicketAngenommen[i] == 0)
    {
    new string[128], DerSpieler[MAX_PLAYER_NAME];
    GetPlayerName(i, DerSpieler, sizeof(DerSpieler));
    format(string, sizeof(string), "[%d] %s\n", i, DerSpieler);
    ShowPlayerDialog(playerid, Tickets, DIALOG_STYLE_LIST, "Tickets", string, "Okay", "");
    }
    }
    }
    }
    return 1;
    }


    edit 13.02: Komplett neu geschrieben

    Moin liebe Brotfische,
    da ich immer wieder sehe, dass viele Leute fragen, wie man denn NUR die gespawnten Fahrzeuge entfernen kann und ich es selber bis vor kurzem nicht hinbekommen habe, dachte ich mir, zeig ich mal allen, wie es denn nun geht.
    Nun denn, es ist einfacher, als man denkt.


    Zuerst erstellt man eine neue Variable. Diese nennen wir nun "spawnedcar".
    new bool:spawnedcar[MAX_VEHICLES];


    Als nächstes geht man zu seinem Spawnbefehl. Bei mir ist dort das Vehicle als "car" definiert. Das heißt, wir fügen das Vehicle nun der Variable hinzu:
    spawnedcar[car] = true; Einfach unter den Spawn schreiben.


    Nun ist es hinzugefügt. Das können wir bei allen weiteren Spawnbefehlen auch einfügen, oder jeweils eine neue Variable erstellen.
    Wie löschen wir es? Genau, wir fragen alle Fahrzeuge ab und schauen, welche mit der Variable versehen sind.
    for(new i=0; i<MAX_VEHICLES; i++)
    {
    if(spawnedcar[i] == true)


    Soweit so gut. Ich finde, es sollte nur gelöscht werden, wenn niemand im Vehicle sitzt. Das machen wir wie folgt:
    if(IsVehicleEmpty(i))
    Dazu braucht ihr den Stock:
    stock IsVehicleEmpty(vehicleid)
    {
    for(new i =0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(IsPlayerInVehicle(i,vehicleid)) return 0;
    }
    return 1;
    }


    Okay, was wollen wir machen, wenn das Vehicle mit der Variable versehen ist? Ich möchte es löschen. Also füge ich hinzu:
    DestroyVehicle(i);



    Das wars eigentlich schon. Hier nochmal der ganze Code von der Löschung der Fahrzeuge:
    ocmd:vehremall(playerid, params[])
    {
    //Adminabfrage
    {
    for(new i=0; i<MAX_VEHICLES; i++)
    {
    if(spawnedcar[i] == true)
    {
    if(IsVehicleEmpty(i))
    {
    DestroyVehicle(i);
    }
    }
    }
    SendClientMessage(playerid, Farbe, "Die gespawnten Fahrzeuge wurden erfolgreich gelöscht.");
    }
    return 1;
    }


    Ich hoffe, mein Tutorial konnte euch helfen. ;)


    Mit freundlichen Grüßen,
    ElDiabolo.


    edit: Code verbessert.

    Also wenn einer Disconnected, funktioniert es...
    for(new i=1;i<MAX_PLAYERS;i++)
    {
    OnPlayerDisconnect(i, 1);
    return 1;
    }
    Unter ongamemodeexit funktioniert nicht. Genauso wenig wie SavePlayer(i);