Beiträge von Jeffry

    stock mysql_GetInttoo(Table[], Field[], Where[], check){
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    format(query, 128, "SELECT %s FROM %s WHERE %s = '%d'", Field, Table, Where, check);
    mysql_query(query);
    mysql_store_result();
    new sqlint = mysql_fetch_int();
    mysql_free_result();
    return sqlint;
    }


    public LoadCoupons()
    {
    for(new i = 0; i < MAX_GUTSCHEINE; i++)
    {
    Gutschein[i][gOwner] = mysql_GetInttoo("gutscheine", "gOwner", "DatensatzID",i);
    Gutschein[i][gCode] = mysql_GetInttoo("gutscheine", "gCode", "DatensatzID",i);
    Gutschein[i][gUsed] = mysql_GetInttoo("gutscheine", "gUsed", "DatensatzID",i);
    Gutschein[i][gUsedBy] = mysql_GetInttoo("gutscheine", "gUsedBy", "DatensatzID",i);
    Gutschein[i][gAktion] = mysql_GetInttoo("gutscheine", "gAktion", "DatensatzID",i);
    }
    return 1;
    }

    Und wie ist "mysql_GetInttoo" definiert? Poste die Funktion auch noch.
    Falls darin wieder eine Funktion verschachtelt ist, die du selbst gemacht hast, poste die auch dazu (usw.).


    Was ich dir schon sagen kann ist, dass du das "i" nicht in die Abfrage mit gibst, sprich es funktioniert nicht. Wie man es behebt, dazu brauche ich den restlichen Code.

    Manche PayDay Draws überspielen sich oder wenn ein anderer User auf den Server kommt überlappt sich das z.B PayDay: 6/60 und ein User kommt on steht über der 6/60 z.B 12/60


    Das würde nur passieren, wenn du das PlayerTextdraw für den gleichen Spieler mehrmals erstellen lässt, vielleicht hast du es in einer Schleife?
    Poste ggf. nochmal den Code, mit dem du das Textdraw erstellst.

    Dann sollte es so aussehen müssen, wenn ich dein enum richtig interpretiere:
    for(new i=0;i<GetMaxPlayers();i++)
    {
    for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++)
    {
    if(vehicleid == PrivateVehicle[i][slot][vehID])
    {
    new pname[MAX_PLAYER_NAME];
    GetPlayerName(i, pname, MAX_PLAYER_NAME);
    if(strcmp(pname, PrivateVehicle[i][slot][vehBesitzer]) != 0 && PrivateVehicle[i][slot][vehFraktion] != SpielerInfo[i][Fraktion])
    {
    SendClientMessage(i, 0xFF0000FF, "Fahrzeug gehört nicht dir, oder deiner Fraktion.");
    return 1;
    }
    if(Vehicle[PrivateVehicle[i][slot][vehID]][vehMotor] == false)
    {
    Vehicle[PrivateVehicle[i][slot][vehID]][vehMotor] = true;
    GetVehicleParamsEx(PrivateVehicle[i][slot][vehID], engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(PrivateVehicle[i][slot][vehID], VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
    GameTextForPlayer(playerid, "~w~Motor ~g~gestartet", 1000, 6);
    Vehicle[PrivateVehicle[i][slot][vehID]][VehicleTimer] = SetTimerEx("OnVehicleTimer", 1136, 1, "i", PrivateVehicle[i][slot][vehID]);
    return 1;
    }
    else if(Vehicle[PrivateVehicle[i][slot][vehID]][vehMotor] == true)
    {
    Vehicle[PrivateVehicle[i][slot][vehID]][vehMotor] = false;
    GetVehicleParamsEx(PrivateVehicle[i][slot][vehID], engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(PrivateVehicle[i][slot][vehID], VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
    GameTextForPlayer(playerid, "~w~Motor ~r~ausgeschaltet", 1000, 6);
    KillTimer(Vehicle[PrivateVehicle[i][slot][vehID]][VehicleTimer]);
    return 1;
    }
    }
    }
    }

    Problem 1:
    Wo speicherst du den Wert der Fraktion, der das Fahrzeug angehört?
    Hast du da sowas wie:
    PrivateVehicle[i][slot][FrakID]
    das Selbe für den Beseitzer. Poste am besten mal das enum welches zu "PrivateVehicle" gehört.


    Problem 2:
    Wenn du Fraktion 0 - 4 hast, musst du MAX_FRAKS auf 5 setzen.

    Das habe ich dir doch im Post drüber erklärt.
    Suche einfach nach den beiden Zeilen, und füge jeweils drunter das ein, was ich dazugeschrieben habe.


    Erstellen kannst du das Textdraw ja gleich mit "Payday: 0/60", oder du machst bei OnPlayerConnect noch:
    PlayerTextDrawSetString(playerid, Payday[playerid], "Payday: 0/60");

    Nein, du hast es nur bei 2'en gemacht.


    Geld2[playerid] = CreatePlayerTextDraw(playerid,500.000000, 81.000000, "100,00 $");
    PlayerTextDrawBackgroundColor(Geld2[playerid], 255); //10881
    PlayerTextDrawFont(playerid,Geld2[playerid], 1);
    PlayerTextDrawLetterSize(Geld2[playerid], 0.320000, 1.400000);
    PlayerTextDrawColor(Geld2[playerid], -1);
    PlayerTextDrawSetOutline(Geld2[playerid], 0);
    PlayerTextDrawSetProportional(Geld2[playerid], 1);
    PlayerTextDrawSetShadow(Geld2[playerid], 1);
    PlayerTextDrawUseBox(Geld2[playerid], 1);
    PlayerTextDrawBoxColor(Geld2[playerid], 255);
    PlayerTextDrawTextSize(Geld2[playerid], 609.000000, 2.000000);
    PlayerTextDrawSetSelectable(Geld2[playerid], 0); //10891


    zu:
    Geld2[playerid] = CreatePlayerTextDraw(playerid,500.000000, 81.000000, "100,00 $");
    PlayerTextDrawBackgroundColor(playerid,Geld2[playerid], 255); //10881
    PlayerTextDrawFont(playerid,Geld2[playerid], 1);
    PlayerTextDrawLetterSize(playerid,Geld2[playerid], 0.320000, 1.400000);
    PlayerTextDrawColor(playerid,Geld2[playerid], -1);
    PlayerTextDrawSetOutline(playerid,Geld2[playerid], 0);
    PlayerTextDrawSetProportional(playerid,Geld2[playerid], 1);
    PlayerTextDrawSetShadow(playerid,Geld2[playerid], 1);
    PlayerTextDrawUseBox(playerid,Geld2[playerid], 1);
    PlayerTextDrawBoxColor(playerid,Geld2[playerid], 255);
    PlayerTextDrawTextSize(playerid,Geld2[playerid], 609.000000, 2.000000);
    PlayerTextDrawSetSelectable(playerid,Geld2[playerid], 0); //10891

    Du hast doch da sicher einen Timer, der jede Minute prüft, ob ein Spieler einen PayDay bekommen darf. In diesem Timer wäre es sinnvoll, wenn man dort direkt das Textdraw einbaut, und es so minütlich aktualisiert.
    Ansonsten, falls du das nicht posten willst:


    Textdraw als PlayerTextdraw erstellen: http://wiki.sa-mp.com/wiki/CreatePlayerTextDraw
    Und dann bei der Aktualisierung: http://wiki.sa-mp.com/wiki/PlayerTextDrawSetString



    EDIT: @toniyo:
    PayDay-Timer in PM gesendet.


    Textdraw mit CreatePlayerTextDraw erstellen, bei OnPlayerConnect, und bei OnPlayerDisconnect natürlich wieder entfernen.


    Dann dort, wo du:
    PlayerInfo[i][pPlayMinutes]++;
    machst:


    new str[64];
    format(str, sizeof(str), "Payday: %d/60", PlayerInfo[i][pPlayMinutes]);
    PlayerTextDrawSetString(i, PayDayTD[i], str);



    Und dort wo du
    PlayerInfo[i][pPlayMinutes] = 0;
    machst:
    PlayerTextDrawSetString(i, PayDayTD[i], "Payday: 0/60");



    Kommst du mit dem Erstellen der Textdraws zu Recht?

    new Text:Geld2[MAX_PLAYERS];
    Zu
    new PlayerText:Geld2[MAX_PLAYERS];


    Und in den Anweisungen oben jeweils noch ein playerid als ersten Parameter einfügen.


    Beispiel:
    PlayerTextDrawBoxColor(Geld2[playerid], 255);
    Zu
    PlayerTextDrawBoxColor(playerid, Geld2[playerid], 255);