Beiträge von Jeffry

    Genau so. Bein abgeben musst du es dann eben so machen:


    if(radbmx[playerid] != 0)
    {
    KillTimer(leihbmxtimer[playerid]);
    leihbmxtimer[playerid]=-1;
    RadbmxTimer(playerid);
    }


    Dann klappt es.

    Wie startest du denn die Timer die du zu beenden versuchst? Der Aufruf ist falsch, aber ich kann dir erst sagen wie es richtig ist, wenn ich weiß wie du sie startest.

    Das liegt an dem return in der Schleife.
    So:
    ocmd:getmycar(playerid,params[])
    {
    if(!isAdmin(playerid,1))return SendClientMessage(playerid,C_Error,"DU hast keine Berechtigung für diesen Befehl!");
    new string[300];
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][besitzer]!=sInfo[playerid][db_id]) continue;
    format(string, sizeof(string), "%s\n%s",string,VehicleName[cInfo[i][model]-400]);
    }
    ShowPlayerDialog(playerid,GetMyCar,DIALOG_STYLE_LIST,"Meine Fahrzeuge",string,"Wählen","Abbrechen");
    return 1;
    }

    Muss ich dann das Textdraw bei OnPlayerStateChange auch noch formatieren ?
    Und was wird bei OnPlayerUpdate gemacht? wird da automatisch jede Sekunde oder sowas das Callback neu ausgeführt?


    1) Wenn es direkt angezeigt werden soll, ja.
    2) Ich würde dir raten es in einen Timer (der jede 100ms aufgerufen wird, oder 200ms) zu packen, denn OnPlayerUpdate wird ca. 30-50 mal pro Sekunde aufgerufen, das ist nicht wirklich sinnvoll.

    EDIT: Es werden ebenfalls die Virtual World und das Interior verändert, liegts vllt daran?


    Nein, es liegt an der Fallschirm-Zu-Animation. Wenn du daraus ein SetPlayerPos machst, dann stirbt der Spieler.


    Lösung:
    Fallschirm entfernen (mit der Funktion von mir).
    Ggf. kurzen Timer setzen (soviel ich weiß braucht es einen kurzen Timer (100ms dürften reichen, das merkt keiner), SetTimerEx)
    SetPlayerPos

    Dann ändere es zu:
    printf("playerid: %d | id: %d", playerid, id);
    printf("ah_id: %d | max: %d", ahCars[id][ah_id], sizeof(ahInfo));
    printf("fcarcreate");
    fcarcreate(sInfo[playerid][fraktion],ahCars[id][model],ahInfo[ahCars[id][ah_id]][s_x],ahInfo[ahCars[id][ah_id]][s_y],ahInfo[ahCars[id][ah_id]][s_z],ahInfo[ahCars[id][ah_id]][s_r],-1,-1);


    Und:
    fcarcreate(fraktionid,modelid,Float:x,Float:y,Float:z,Float:a,color1,color2)
    {
    printf("aufgerufen");
    for(new i=0; i<MAX_FRAC_VEHICLES; i++)
    {
    printf("i: %d | vid: %d", i, fracVehicle[i][e_vID]);
    if(fracVehicle[i][e_vID] == 0)
    {
    fracVehicle[i][e_modelID] = modelid;
    fracVehicle[i][e_x] = x;
    fracVehicle[i][e_y] = y;
    fracVehicle[i][e_z] = z;
    fracVehicle[i][e_a] = a;
    fracVehicle[i][e_color1] = color1;
    fracVehicle[i][e_color2] = color2;
    fracVehicle[i][e_fracID] = fraktionid;
    new query[256];
    format(query, sizeof(query), "INSERT INTO FracVehicles (ID, ModelID, PosX, PosY, PosZ, PosA, Color1, Color2, FracID) VALUES ('%d', '%d', '%f', '%f', '%f', '%f', '%d', '%d', '%d')",
    i, fracVehicle[i][e_modelID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][e_color1], fracVehicle[i][e_color2], fracVehicle[i][e_fracID]);
    mysql_query(dbhandle, query);
    fracVehicle[i][e_vID] = CreateVehicle(fracVehicle[i][e_modelID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][e_color1], fracVehicle[i][e_color2], -1);
    return 1;
    }
    }
    return 1;
    }


    Und poste dann was im Log steht, wenn du ein Fahrzeug kaufst.

    Wenn du es bei OnPlayerStateChange mit newstate und oldstate prüfst, dann wird es ja nur dann gemacht wenn es auch benötigt wird.


    Selbst wenn nicht, das führt zu keinen Lags, auch nicht wenn du 1000 Spieler drauf hast. Voraussetzung ist natürlich, dass du es richtig machst.

    Weil du das so wolltest, ich hatte dich zu Anfang mal danach gefragt. ;)


    Schreibe das Speichern so, dann geht es wie du es jetzt willst:
    format(query, sizeof(query), "%sWanteds = '%d', Knast = '%d', Knastzeit = '%d', KnastzeitBis = '%d', Knastskin = '%d', Sterne = '%d', Verbrechen = '%d', wTot = '%d', Inhaftiert = '%d' WHERE Name = '%s'", query,
    SpielerInfo[playerid][pWanteds], SpielerInfo[playerid][pKnast], SpielerInfo[playerid][pKnastzeitBis]-gettime(),SpielerInfo[playerid][pKnastzeitBis], SpielerInfo[playerid][kSkin], SpielerInfo[playerid][pSterne],SpielerInfo[playerid][pVerbrechen],SpielerInfo[playerid][wTot],SpielerInfo[playerid][pInhaftiert], SpielerInfo[playerid][pName]);//1807
    Wir ziehen einfach von der "ZeitBis" die momentane Zeit (also die vom Speicher-Zeitpunkt) ab, dann wissen wir, wie lange er noch im Knast sein muss.

    Falsch war daran gar nichts, ich habe nur die Reihenfolge etwas geändert und einige Variablen, die unnötig waren, entfernt, manchmal hilft das. Diesmal scheint es so gewesen sein.
    Dann ist ja gut. :)

    Da können wir nur probieren.
    Versuch es mal so:


    Spoiler anzeigen
    public check_taxi(playerid,fahrerid)
    {
    if(!IsPlayerInAnyVehicle(fahrerid) || !IsPlayerInAnyVehicle(playerid))
    {
    if(pay_taxi[playerid] != -1) KillTimer(pay_taxi[playerid]);
    pay_taxi[playerid] = -1;
    player_taxi[playerid]=0;
    payed[playerid]=0;
    oldpayed[playerid]=0;
    player_distance[playerid] = 0.0;
    fkm[playerid] = 0;
    PlayerTextDrawHide(playerid, Textwarn[playerid]);
    PlayerTextDrawHide(playerid, Textstatus[playerid]);
    PlayerTextDrawHide(playerid, Textzustand[playerid]);
    PlayerTextDrawHide(playerid, Job[playerid]);
    PlayerTextDrawHide(playerid, Job1[playerid]);
    PlayerTextDrawHide(playerid, StatusJob[playerid]);
    PlayerTextDrawHide(fahrerid, Textwarn[fahrerid]);
    PlayerTextDrawHide(fahrerid, Textstatus[fahrerid]);
    PlayerTextDrawHide(fahrerid, Textzustand[fahrerid]);
    PlayerTextDrawHide(fahrerid, Job[fahrerid]);
    PlayerTextDrawHide(fahrerid, Job1[fahrerid]);
    PlayerTextDrawHide(fahrerid, StatusJob[fahrerid]);
    return 1;
    }
    if(player_preis[fahrerid] == 0) return 1;
    new say[128], kosten, Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    new Float:dist = floatsqroot(((player_pos[playerid][0]-x)*(player_pos[playerid][0]-x))+((player_pos[playerid][1]-y)*(player_pos[playerid][1]-y))+((player_pos[playerid][2]-z)*(player_pos[playerid][2]-z)));
    player_distance[playerid]+=dist;
    player_pos[playerid][0] = x;
    player_pos[playerid][1] = y;
    player_pos[playerid][2] = z;
    payed[playerid] = floatround(player_distance[playerid]/500.0) * player_preis[fahrerid] + player_preis[fahrerid];
    new geld = GetPlayerMoney(playerid);
    if(geld < kosten) return RemovePlayerFromVehicle(playerid), SendClientMessage(playerid, warn, "Du hast nicht genug Geld!"),SendClientMessage(fahrerid, info, "Spieler hat nicht genug Geld!");
    if(payed[playerid] > oldpayed[playerid])
    {
    kosten = payed[playerid] - oldpayed[playerid];
    oldpayed[playerid] = payed[playerid];
    fkm[playerid] += 1;
    GivePlayerMoney(playerid,-kosten);
    GivePlayerMoney(fahrerid,kosten);
    }
    //________________Passagier____________//
    format(say,sizeof say,"~w~Fahrer: ~y~%s ",SpielerName(fahrerid));
    PlayerTextDrawSetString(playerid,Textwarn[playerid],say);
    printf("say: %s ||| ID: %d", say, _:Textwarn[playerid]);
    format(say,sizeof say,"~w~Kosten: ~r~%d$",payed[playerid]);
    PlayerTextDrawSetString(playerid,Textzustand[playerid],say);
    format(say,sizeof say,"~w~Status: ~y~Taxi-System");
    PlayerTextDrawSetString(playerid,StatusJob[playerid],say);
    format(say,sizeof say,"~w~Kilometer: ~y~%d",fkm[playerid]);
    PlayerTextDrawSetString(playerid,Textstatus[playerid],say);
    PlayerTextDrawShow(playerid, Textwarn[playerid]);
    PlayerTextDrawShow(playerid, Textstatus[playerid]);
    PlayerTextDrawShow(playerid, Textzustand[playerid]);
    PlayerTextDrawShow(playerid, Job[playerid]);
    PlayerTextDrawShow(playerid, Job1[playerid]);
    PlayerTextDrawShow(playerid, StatusJob[playerid]);
    //_______________Fahrer______________//
    format(say,sizeof say,"~w~Gast: ~y~%s",SpielerName(playerid));
    PlayerTextDrawSetString(fahrerid,Textwarn[fahrerid],say);
    format(say,sizeof say,"~w~Gehalt: ~g~%d$",payed[playerid]);
    PlayerTextDrawSetString(fahrerid, Textzustand[fahrerid],say);
    format(say,sizeof say,"~w~Status: ~y~Taxi-System");
    PlayerTextDrawSetString(fahrerid,StatusJob[fahrerid],say);
    format(say,sizeof say,"~w~Kilometer: ~y~%d",fkm[playerid]);
    PlayerTextDrawSetString(fahrerid,Textstatus[fahrerid],say);
    PlayerTextDrawShow(fahrerid, Textwarn[fahrerid]);
    PlayerTextDrawShow(fahrerid, Textstatus[fahrerid]);
    PlayerTextDrawShow(fahrerid, Textzustand[fahrerid]);
    PlayerTextDrawShow(fahrerid, Job[fahrerid]);
    PlayerTextDrawShow(fahrerid, Job1[fahrerid]);
    PlayerTextDrawShow(fahrerid, StatusJob[fahrerid]);
    return 1;
    }


    Wenn das nicht geht, so:

    Spoiler anzeigen
    public check_taxi(playerid,fahrerid)
    {
    if(!IsPlayerInAnyVehicle(fahrerid) || !IsPlayerInAnyVehicle(playerid))
    {
    if(pay_taxi[playerid] != -1) KillTimer(pay_taxi[playerid]);
    pay_taxi[playerid] = -1;
    player_taxi[playerid]=0;
    payed[playerid]=0;
    oldpayed[playerid]=0;
    player_distance[playerid] = 0.0;
    fkm[playerid] = 0;
    PlayerTextDrawHide(playerid, Textwarn[playerid]);
    PlayerTextDrawHide(playerid, Textstatus[playerid]);
    PlayerTextDrawHide(playerid, Textzustand[playerid]);
    PlayerTextDrawHide(playerid, Job[playerid]);
    PlayerTextDrawHide(playerid, Job1[playerid]);
    PlayerTextDrawHide(playerid, StatusJob[playerid]);
    PlayerTextDrawHide(fahrerid, Textwarn[fahrerid]);
    PlayerTextDrawHide(fahrerid, Textstatus[fahrerid]);
    PlayerTextDrawHide(fahrerid, Textzustand[fahrerid]);
    PlayerTextDrawHide(fahrerid, Job[fahrerid]);
    PlayerTextDrawHide(fahrerid, Job1[fahrerid]);
    PlayerTextDrawHide(fahrerid, StatusJob[fahrerid]);
    return 1;
    }
    if(player_preis[fahrerid] == 0) return 1;
    new say[128], kosten, Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    new Float:dist = floatsqroot(((player_pos[playerid][0]-x)*(player_pos[playerid][0]-x))+((player_pos[playerid][1]-y)*(player_pos[playerid][1]-y))+((player_pos[playerid][2]-z)*(player_pos[playerid][2]-z)));
    player_distance[playerid]+=dist;
    player_pos[playerid][0] = x;
    player_pos[playerid][1] = y;
    player_pos[playerid][2] = z;
    payed[playerid] = floatround(player_distance[playerid]/500.0) * player_preis[fahrerid] + player_preis[fahrerid];
    new geld = GetPlayerMoney(playerid);
    if(geld < kosten) return RemovePlayerFromVehicle(playerid), SendClientMessage(playerid, warn, "Du hast nicht genug Geld!"),SendClientMessage(fahrerid, info, "Spieler hat nicht genug Geld!");
    if(payed[playerid] > oldpayed[playerid])
    {
    kosten = payed[playerid] - oldpayed[playerid];
    oldpayed[playerid] = payed[playerid];
    fkm[playerid] += 1;
    GivePlayerMoney(playerid,-kosten);
    GivePlayerMoney(fahrerid,kosten);
    }
    //________________Passagier____________//
    PlayerTextDrawSetString(playerid,Textwarn[playerid],"FAHRER WIRD JETZT ANGEZEIGT");
    printf("say: FAHRER WIRD JETZT ANGEZEIGT ||| ID: %d", say, _:Textwarn[playerid]);
    format(say,sizeof say,"~w~Kosten: ~r~%d$",payed[playerid]);
    PlayerTextDrawSetString(playerid,Textzustand[playerid],say);
    format(say,sizeof say,"~w~Status: ~y~Taxi-System");
    PlayerTextDrawSetString(playerid,StatusJob[playerid],say);
    format(say,sizeof say,"~w~Kilometer: ~y~%d",fkm[playerid]);
    PlayerTextDrawSetString(playerid,Textstatus[playerid],say);
    PlayerTextDrawShow(playerid, Textwarn[playerid]);
    PlayerTextDrawShow(playerid, Textstatus[playerid]);
    PlayerTextDrawShow(playerid, Textzustand[playerid]);
    PlayerTextDrawShow(playerid, Job[playerid]);
    PlayerTextDrawShow(playerid, Job1[playerid]);
    PlayerTextDrawShow(playerid, StatusJob[playerid]);
    //_______________Fahrer______________//
    format(say,sizeof say,"~w~Gast: ~y~%s",SpielerName(playerid));
    PlayerTextDrawSetString(fahrerid,Textwarn[fahrerid],say);
    format(say,sizeof say,"~w~Gehalt: ~g~%d$",payed[playerid]);
    PlayerTextDrawSetString(fahrerid, Textzustand[fahrerid],say);
    format(say,sizeof say,"~w~Status: ~y~Taxi-System");
    PlayerTextDrawSetString(fahrerid,StatusJob[fahrerid],say);
    format(say,sizeof say,"~w~Kilometer: ~y~%d",fkm[playerid]);
    PlayerTextDrawSetString(fahrerid,Textstatus[fahrerid],say);
    PlayerTextDrawShow(fahrerid, Textwarn[fahrerid]);
    PlayerTextDrawShow(fahrerid, Textstatus[fahrerid]);
    PlayerTextDrawShow(fahrerid, Textzustand[fahrerid]);
    PlayerTextDrawShow(fahrerid, Job[fahrerid]);
    PlayerTextDrawShow(fahrerid, Job1[fahrerid]);
    PlayerTextDrawShow(fahrerid, StatusJob[fahrerid]);
    return 1;
    }


    Wird dir dann irgendwas angezeigt?

    Dann ändere zu den zwei gelöschten Zeilen noch
    if(NoobCar[playerid] != 999)
    Zu
    if(NoobCar[playerid] != 0)


    Und
    NoobCar[playerid] = 999;
    Zu
    NoobCar[playerid] = 0;


    Falls es dann noch immer nicht geht, poste den Befehl nochmal wie du ihn dann hast.




    EDIT: (Post unten)
    JohnyDream: Siehe PN. ;)

    Ok, dann mach das mit den Prints und poste dann wieder hier. Nur so (oder mit dem crashdetect Plugin) kannst du genau erkennen an welcher Zeile der Fehler ist. ;)