Beiträge von Jeffry

    Eine deiner Includes hat wahrscheinlich noch einen alten Hook für OnPlayerGiveDamage drin, schau dir die mal durch, ob du da ein OnPlayerGiveDamage ohne den bodypart findest.


    Übrigens, wenn du den Quellcode Reiter über der Schriftart verwendest, anstatt dem Editor, dann klappt das mit den PWN-Tag.

    Dann kannst das new hackTimer wieder hinzufügen und beim Befehl das hier einfügen:
    if(hackTimer > gettime()) return SendClientMessage(playerid, 0xFF0000FF, "Error: Nur einmal pro Stunde!");
    hackTimer = gettime() + 86400;
    //Rest hier...

    Wenn du nirgends KillTimer verwendest um den Timer zu beenden, dann kannst du das new und
    hackTimer =
    löschen, die Variable brauchst du dann nicht.


    (Nicht das SetTimer löschen, nur die Variable davor!)

    Also funktioniert alles?
    Doch, eine Änderung habe ich gemacht bevor ich es dir gegeben habe:
    for(new i = 0; i < sizeof(AutohausVehicle); i++)
    zu:
    for(new i = 0; i < sizeof(ShowCars); i++)


    Anscheinend war das das Problem.

    Hm, das passt eigentlich alles.
    Debugge den Code bitte mal so:
    if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER)
    {
    printf("Spieler %d in Fahrzeug", playerid);
    for(new i = 0; i < sizeof(ShowCars); i++)
    {
    printf("i: %d | vehicleid: %d | ShowCars: %d", i, vehicleid, ShowCars[i]);
    if(vehicleid == ShowCars[i])
    {
    printf("Level: %d", PlayerInfo[playerid][pLevel]);
    if(PlayerInfo[playerid][pLevel] < 2)
    {
    SendClientMessage(playerid,COLOR_GREY,"Du musst Level 3 sein um dir ein Fahrzeug kaufen zu können!");
    return RemovePlayerFromVehicle(playerid);
    }
    printf("Model: %d", GetVehicleModel(vehicleid));
    printf("Name: %s", VehicleName[GetVehicleModel(vehicleid)-400]);
    printf("Preis: %d", AutohausVehicle[i][AhPreis]);
    format(string,sizeof(string),"Möchten Sie das Fahrzeug: {FF8200} %s\n{FFFFFF}Für {FF8200} %d$ {FFFFFF}kaufen?",VehicleName[GetVehicleModel(vehicleid)-400],AutohausVehicle[i][AhPreis]);
    printf("string: %s", string);
    ShowPlayerDialog(playerid,DIALOG_AUTOHAUS_KAUF,DIALOG_STYLE_MSGBOX,"{FF8200}Autohaus{FFFFFF}",string,"Kaufen","Abbruch");
    printf("Angezeigt.");
    return true;
    }
    }
    printf("Ende");
    }


    Was steht dann im Log, wenn du in ein solches Fahrzeug einsteigst?

    Wie erstellst du diese Autohaus-Fahrzeuge?
    Der Code, mit dem du ShowCars[ i ] einen Wert zuweist. Möglicherweise zählst du da den Index nicht hoch, weil an der Schleife sieht soweit alles gut aus.

    Für so kurze Codes brauchst du keinen pastebin Link zu schicken, dafür kannst du einfach den PWN-Tag verwenden (Quellcode-Reiter über der Schriftart nutzen).


    Mit dem Array alleine können wir dir allerdings nicht helfen, poste bitte den Code mit dem du den Dialog anzeigen lässt.

    Hiermit:
    hasVehicleDriver(vID)
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && GetPlayerState(i) == PLAYER_STATE_DRIVER)
    {
    if(GetPlayerVehicleID(i) == vID) return 1;
    }
    }
    return 0;
    }


    Und dann bei
    if(!hatAutoMotor(i)) continue;
    if(!isMotorOn(i)) continue;
    das hinzufügen:
    if(!hasVehicleDriver(i)) continue;

    Ändere diese Funktion zu:
    hatAutoMotor(vID)
    {
    new vModel = GetVehicleModel(vID);
    for(new i=0; i<sizeof(autosOhneMotor); i++)
    {
    if(autosOhneMotor[i] == vModel) return 0;
    }
    return 1;
    }


    Und diese zu:
    isMotorOn(vID)
    {
    new tmp_engine,tmp_lights,tmp_alarm,tmp_doors,tmp_bonnet,tmp_boot,tmp_objective;
    GetVehicleParamsEx(vID,tmp_engine,tmp_lights,tmp_alarm,tmp_doors,tmp_bonnet,tmp_boot,tmp_objective);
    return tmp_engine;
    }

    if(!hatAutoMotor(i)) continue;
    if(!isMotorOn(i)) continue;
    Diese beiden scheinen immer 0 zurück zu geben, daher kommt der folgende Print nicht.


    Poste die beiden Funktionen mal.

    1.) Das mit dem Passwort passt ja jetzt, da ist kein ÿ-Zeichen vorhanden. Kannst du dich trotzdem noch mit jedem x-beliebigen Kennwort anmelden?


    2.) Was steht im Server Log? Poste bitte den Log dazu, wie vorhin. Eben wenn du in einem Fahrzeug bist.

    1.) Hast du dich neu registriert? Wenn nicht, das musst du natürlich machen, sonst bringt es nichts.
    Falls du das gemacht hast und es noch immer nicht geht, was steht in der User-Datei an erster Stelle?


    2.) Was sagt der Log, wenn du in einem Fahrzeug bist, welches Sprit verlieren soll?

    Problem 1 lässt sich mit einem simplen Trick beheben:
    Beim Register:
    dini_Create(Spielerdatei);
    dini_Set(Spielerdatei,"Passwort",key);
    zu:
    dini_Create(Spielerdatei);
    dini_Set(Spielerdatei,"DUMMY","DUMMY");
    dini_Set(Spielerdatei,"Passwort",key);
    Somit kommt dieses ÿ-Zeichen maximal vor das DUMMY, was ja dann nichts aus macht.


    Zu Problem 2:
    Debugge den Code mal so und poste dann was im Server Log steht.
    public sekunde()
    {
    printf("sekunde aufgerufen.");
    new string[128];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(!IsPlayerInAnyVehicle(i)) continue;
    new vID = GetPlayerVehicleID(i);
    format(string,sizeof(string),"%i km/h~n~Tank: %i~n~%s",getPlayerSpeed(i),tank[vID],getVehicleName(GetVehicleModel(vID)));
    PlayerTextDrawSetString(i,tankLabel_,string);
    printf("playerid: %d -> string: %s -> ||%d||", i, string, vID);
    }
    tanktimer++;
    printf("tanktimer: %d", tanktimer);
    if(tanktimer == 5)
    {
    printf("tanktimer ist 5");
    tanktimer = 0;
    for(new i=1; i<sizeof(tank); i++)
    {
    if(!hatAutoMotor(i)) continue;
    if(!isMotorOn(i)) continue;
    tank[i]--;
    printf("reduziere %d: %d", i, tank[i]);
    if(tank[i] > 0) continue;
    stopMotor(i);
    }
    }
    return 1;
    }

    Ja, OnPlayerEnterVehicle wäre die schonendere Variante, sofern das richtig klappt und erkannt wird. Am besten du probierst beide Varianten aus, und schaust, welche der beiden Varianten am ehesten auf dein Vorhaben zutrifft.