Beiträge von Campbell

    Falls du möchtest, dass jemand niemals Leben verliert, dann schau dir mal den OnPlayerShootPlayer include an. Dort kann man sehr gut das Leben erneut setzen.

    Semikolon vergessen und du musst schon definieren, wessen Daten gespeichert werden sollen.



    public OnPlayerDisconnect(playerid, reason)
    {
    SpielerSpeichern(playerid);
    new pname[MAX_PLAYER_NAME], string[39 + MAX_PLAYER_NAME];
    GetPlayerName(playerid, pname, sizeof(pname));
    switch(reason)
    {
    case 0: format(string, sizeof(string), "%s hat den Server verlassen. (Timeout)", pname);
    case 1: format(string, sizeof(string), "%s hat den Server verlassen. (Verlassen)", pname);
    }
    SendClientMessageToAll(BLAU, string);
    return 1;
    }

    Ein ganzer Code wäre sinnvoller als solche Bruchteile, da kann man recht wenig erkennen. Dennoch konnte ich soweit auf Folgendes schließen.


    new idx, sendername[MAX_PLAYER_NAME];

    Der String name ist NULL und du musst schon deine Variable skin verwenden:



    stock Speichern(playerid)
    {
    new name[MAX_PLAYER_NAME], skin = GetPlayerSkin(playerid);
    GetPlayerName(playerid, name, sizeof(name));
    mysql_SetInt("accounts", "Skin", skin, "Name", name);
    return 1;
    }

    Es wird nicht ausgelesen.
    Er gibt dem Spieler immer die Summe die man beim register bekommt -.-


    Wenn dem Spieler Geld gegeben wird, dann muss auch etwas ausgelesen werden. Geh mal ins Spiel, ändere dein Geld und log dich aus. Geh sicher, dass du SpielerSpeichern() in OnPlayerDisconnect hast, damit deine Daten auch gespeichert werden.


    /* Array mit sechs Einträgen:
    1 - 3: Eingangskoordinaten.
    4 - 6: Pay'n'Spray Koordinaten. */
    new Float:PayNSprays[][6] = {
    {1963.0222, 2162.1836, 10.8203, 1974.9702, 2162.5818, 11.0703},
    {1963.0222, 2162.1836, 10.8203, 1974.9702, 2162.5818, 11.0703}
    };


    /* Array für alle Spieler setzen, um Daten des Timers zu
    speichern. - Ansonsten wird der Timer schneller sein,
    wenn mehr Spieler connected sind. */
    new PNSTimerData[MAX_PLAYERS];


    ocmd:repair(playerid, params[])
    {
    for(new i; i < sizeof(PayNSprays); i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 10, PayNSprays[i][0], PayNSprays[i][1], PayNSprays[i][2]))
    {
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, FRot, "Du musst in einem Auto sein, um den Pay'n'Spray zu nutzen.");
    new vehicleid = GetPlayerVehicleID(playerid);
    SetVehiclePos(vehicleid, PayNSprays[i][3], PayNSprays[i][4], PayNSprays[i][5]);
    /* Daten dem Array zuweisen und Timer Starten (Hier: 5 Sekunden). */
    PNSTimerData[playerid] = SetTimerEx("PNSTimer", 5000, false, "dd", playerid, i);
    return 1;
    }
    }
    SendClientMessage(playerid, FRot, "Du bist nicht in der nehe eines PayN Spray's");
    return 1;
    }


    /* Public's müssen ge'forwarded werden. Hier 'playerid' nicht vergessen, da wir die benötigen. */
    forward PNSTimer(playerid, id);
    public PNSTimer(playerid, id) // Callback des Timers deklarieren.
    {
    /* Auto zu den neuen Koordinaten teleportieren. */
    SetVehiclePos(GetPlayerVehicleID(playerid), PayNSprays[id][0], PayNSprays[id][1], PayNSprays[id][2]);
    GivePlayerMoney(playerid, -2000);
    GameTextForPlayer(playerid, "-2000 $", 3000, 3);
    }

    Was du eben machen musst ist eine Variable mitzählen lassen, die den Vorgang bei 20 stoppt und dir den Dialog erstellt. Dabei musst du nun bei dem Dialog in OnDialogResponse die nächsten 20 Mitglieder auslesen und zeigen. Dabei wäre es sinnvoll eine globale Variable mitzählen zu lassen, sodass du alles in einem Dialog handhaben kannst und nicht sehr viele Dialoge erstellen musst. Ein sinnvoller Ansatz wäre hier auch mysql_num_rows() zu verwenden, um zu schauen, wie der Dialog aussehen wird.

    Mein Fehler, so müsste es funktionieren.

    /* Array für alle Spieler setzen, um Daten des Timers zu
    speichern. - Ansonsten wird der Timer schneller sein,
    wenn mehr Spieler connected sind. */
    new PNSTimerData[MAX_PLAYERS];


    ocmd:repair(playerid, params[])
    {
    if(!IsPlayerInRangeOfPoint(playerid, 10, 1963.0222, 2162.1836, 10.8203)) return SendClientMessage(playerid, FRot, "Du bist nicht in der nehe eines PayN Spray's");
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, FRot, "Du musst in einem Auto sein, um den Pay'n'Spray zu nutzen.");
    new vehicleid = GetPlayerVehicleID(playerid);
    SetVehiclePos(vehicleid, 1974.9702, 2162.5818, 11.0703);
    /* Daten dem Array zuweisen und Timer Starten (Hier: 5 Sekunden). */
    PNSTimerData[playerid] = SetTimerEx("PNSTimer", 5000, false, "d", playerid);
    return 1;
    }


    /* Public's müssen ge'forwarded werden. Hier 'playerid' nicht vergessen, da wir die benötigen. */
    forward PNSTimer(playerid);
    public PNSTimer(playerid) // Callback des Timers deklarieren.
    {
    /* Auto zu den neuen Koordinaten teleportieren. */
    SetVehiclePos(GetPlayerVehicleID(playerid), 1963.0222, 2162.1836, 10.8203);
    GivePlayerMoney(playerid, -2000);
    GameTextForPlayer(playerid, "-2000 $", 3000, 3);
    }


    /* Array für alle Spieler setzen, um Daten des Timers zu
    speichern. - Ansonsten wird der Timer schneller sein,
    wenn mehr Spieler connected sind. */
    new PNSTimerData[MAX_PLAYERS];


    ocmd:repair(playerid, params[])
    {
    if(!IsPlayerInRangeOfPoint(playerid, 10, 1963.0222, 2162.1836, 10.8203)) return SendClientMessage(playerid, FRot, "Du bist nicht in der nehe eines PayN Spray's");
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, FRot, "Du musst in einem Auto sein, um den Pay'n'Spray zu nutzen.");
    new vehicleid = GetPlayerVehicleID(playerid);
    SetVehiclePos(vehicleid, 1974.9702, 2162.5818, 11.0703);
    /* Daten dem Array zuweisen und Timer Starten (Hier: 5 Sekunden). */
    PNSTimerData[playerid] = SetTimerEx("PNSTimer", 5000, "d", playerid);
    return 1;
    }


    /* Public's müssen ge'forwarded werden. Hier 'playerid' nicht vergessen, da wir die benötigen. */
    forward PNSTimer(playerid);
    public PNSTimer(playerid) // Callback des Timers deklarieren.
    {
    /* Auto zu den neuen Koordinaten teleportieren. */
    SetVehiclePos(GetPlayerVehicleID(playerid), 1963.0222, 2162.1836, 10.8203);
    GivePlayerMoney(playerid, -2000);
    GameTextForPlayer(playerid, "-2000 $", 3000, 3);
    }

    Benutze return nicht so oft, wenn du es garnicht brauchst. Ebenfalls musst du die Position des Spielers nicht setzen wenn er mit dem Auto teleportiert wird und schon gar nicht musst du ihn ins Auto setzen, wenn er schon drin ist. Ebenfalls solltest du klar deine Variablen definieren und einen Wert zuweisen. Die vehicleid ist die ID des Autos, in dem der Spieler sich befindet. Das wird hier nun zugewiesen, wenn der Spieler in der Nähe des Pay'n'Sprays ist und in einem Auto sitzt.



    ocmd:repair(playerid,params[])
    {
    if(IsPlayerInRangeOfPoint(playerid, 10, 1963.0222, 2162.1836, 10.8203))
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    new vehicleid == GetPlayerVehicleID(playerid);
    SetVehiclePos(vehicleid, 1974.9702, 2162.5818, 11.0703);
    GivePlayerMoney(playerid, -2000);
    GameTextForPlayer(playerid, "-2000 $", 3000, 3);
    }
    }
    else
    {
    SendClientMessage(playerid, FRot, "Du bist nicht in der nähe eines Pay N Spray's.");
    }
    return 1;
    }


    new PlayerText:TextDraw;


    OnPlayerConnect(playerid)
    {
    // Erstelle den TextDraw hier, als Beispiel wird die Variable PlayerText:TextDraw zum Zuweisen der ID benutzt.
    }


    stock SetTextDrawPlayerScore(playerid)
    {
    new score[5];
    valstr(score, GetPlayerScore(playerid));
    PlayerTextDrawHide(playerid, TextDraw);
    PlayerTextDrawSetString(TextDraw, score);
    PlayerTextDrawShow(playerid, TextDraw);
    }

    Es ist nicht einfach xampp abgeschmiert. Da war bisschen mehr dahinter aber jetzt sollte es gehen ;)
    also hinder Alter usw. muss auch noch die länge oder?


    Ein Integer hat keine bestimmte Länge, es hat nur ein Maximum. Daher brauchst du allem, was etwas mit Zahlen zu tun hat, keine Länge zuweisen.