Fahrzeug ID verschiebung

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hi,
    ich habe mal wieder ein Problem. Undzwar habe ich nun ein System eingebaut das man den Motor eines Fahrzeuges mit /motor einschalten muss aber dies nur funktioniert wenn einem das fahrzeug gehört. Wem das Fahrzeug gehört speicher ich in meinem Player enum via VehicleID. Jetzt habe ich aber festgestellt das, wenn ich ein Fahrzeug lösche das danach beim nächsten mal mit einer anderen ID spawnt und das Fahrzeug gehört laut script nicht mehr dem eigentlichen besitzer.
    Hier einmal Codes die ich für nützlich finde:

    public LadeFahrzeug(carid) //Wird im onGameModeInit mit dieser for-Schleife (new i = 1; i < MAX_VEHICLES; i++) aufgerufen
    {
    new str[25];
    format(str, sizeof(str), "/Vehicles/%d.car", carid);

    if(carid == 0)
    {
    return 1;
    }
    if(fexist(str))
    {
    CarInfo[carid][cID] = dini_Int(str, "cID");
    CarInfo[carid][cX] = dini_Float(str, "cX");
    CarInfo[carid][cY] = dini_Float(str, "cY");
    CarInfo[carid][cZ] = dini_Float(str, "cZ");
    CarInfo[carid][cR] = dini_Float(str, "cR");
    CarInfo[carid][cModel] = dini_Int(str, "cModel");
    //tuning
    CarInfo[carid][tuning_0] = dini_Int(str, "tuning_0");
    CarInfo[carid][tuning_1] = dini_Int(str, "tuning_1");
    CarInfo[carid][tuning_2] = dini_Int(str, "tuning_2");
    CarInfo[carid][tuning_3] = dini_Int(str, "tuning_3");
    CarInfo[carid][tuning_4] = dini_Int(str, "tuning_4");
    CarInfo[carid][tuning_5] = dini_Int(str, "tuning_5");
    CarInfo[carid][tuning_6] = dini_Int(str, "tuning_6");
    CarInfo[carid][tuning_7] = dini_Int(str, "tuning_7");
    CarInfo[carid][tuning_8] = dini_Int(str, "tuning_8");
    CarInfo[carid][tuning_9] = dini_Int(str, "tuning_9");
    CarInfo[carid][tuning_10] = dini_Int(str, "tuning_10");
    CarInfo[carid][tuning_11] = dini_Int(str, "tuning_11");
    CarInfo[carid][tuning_12] = dini_Int(str, "tuning_12");
    CarInfo[carid][tuning_13] = dini_Int(str, "tuning_13");
    CarInfo[carid][color_1] = dini_Int(str, "color_1");
    CarInfo[carid][color_2] = dini_Int(str, "color_2");
    CarInfo[carid][paintjob] = dini_Int(str, "paintjob");
    }
    return 1;
    }


    public sellCarInShop(playerid, carPrice, carName[], carID){ //Hier wird ein Fahrzeug erstellt und eingetragen wenn es im Shop gekauft wird (also wenn der Shop ein Auto an den Spieler verkauft)


    if(GetPlayerMoney(playerid) >= carPrice){
    if(PlayerInfo[playerid][pCar1] == 0 || PlayerInfo[playerid][pCar2] == 0 || PlayerInfo[playerid][pCar3] == 0 || PlayerInfo[playerid][pCar4] == 0){


    new car = CreateVehicle(carID, -1917.0745, 296.8005, 41.0469, 178.7229, 0, 0, 0);
    PutPlayerInVehicle(playerid, car, 0);
    new id = GetPlayerVehicleID(playerid);

    CarInfo[id][cID] = id;
    CarInfo[id][cModel] = 411;
    CarInfo[id][cX] = 0;
    CarInfo[id][cY] = 0;
    CarInfo[id][cZ] = 10;
    CarInfo[id][cR] = 0;

    if(PlayerInfo[playerid][pCar1] == 0){
    PlayerInfo[playerid][pCar1] = CarInfo[car][cID];


    } else if(PlayerInfo[playerid][pCar2] == 0){
    PlayerInfo[playerid][pCar2] = CarInfo[car][cID];


    } else if(PlayerInfo[playerid][pCar3] == 0){
    PlayerInfo[playerid][pCar3] = CarInfo[car][cID];


    } else if(PlayerInfo[playerid][pCar4] == 0){
    PlayerInfo[playerid][pCar4] = CarInfo[car][cID];
    }

    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid, PlayerInfo[playerid][pGeld] - carPrice);


    PlayerInfo[playerid][pGeld] = GetPlayerMoney(playerid);


    new string[128];
    format(string, sizeof(string), "Du hast dir erfolgreich einen %s gekauft.", carName);
    SendClientMessage(playerid, COLOR_GREEN, string);

    } else {
    SendClientMessage(playerid, COLOR_RED, "[SHOP] Du hast keinen Fahrzeug Slot mehr frei!");
    }
    } else {
    SendClientMessage(playerid, COLOR_RED, "[SHOP] Du hast nicht genug Geld dabei!");
    }
    return 1;
    }


    public SpeicherFahrzeug(carid) //Im OnGameModeExit wieder mit dieser for-Schleife: for(new i = 1; i < MAX_VEHICLES; i++)
    {
    if(carid <= 0)
    {
    return 1;
    }
    CarInfo[carid][cModel] = GetVehicleModel(CarInfo[carid][cID]);
    if(CarInfo[carid][cModel] == 0) return 1;
    new str[25];
    format(str, sizeof(str), "/Vehicles/%d.car", carid);
    dini_Create(str);


    dini_IntSet(str,"cID",CarInfo[carid][cID]);
    dini_FloatSet(str,"cX", CarInfo[carid][cX]);
    dini_FloatSet(str,"cY", CarInfo[carid][cY]);
    dini_FloatSet(str,"cZ", CarInfo[carid][cZ]);
    dini_FloatSet(str,"cR", CarInfo[carid][cR]);
    dini_IntSet(str,"cModel",CarInfo[carid][cModel]);
    //tuning
    dini_IntSet(str, "tuning_0", CarInfo[carid][tuning_0]);
    dini_IntSet(str, "tuning_1", CarInfo[carid][tuning_1]);
    dini_IntSet(str, "tuning_2", CarInfo[carid][tuning_2]);
    dini_IntSet(str, "tuning_3", CarInfo[carid][tuning_3]);
    dini_IntSet(str, "tuning_4", CarInfo[carid][tuning_4]);
    dini_IntSet(str, "tuning_5", CarInfo[carid][tuning_5]);
    dini_IntSet(str, "tuning_6", CarInfo[carid][tuning_6]);
    dini_IntSet(str, "tuning_7", CarInfo[carid][tuning_7]);
    dini_IntSet(str, "tuning_8", CarInfo[carid][tuning_8]);
    dini_IntSet(str, "tuning_9", CarInfo[carid][tuning_9]);
    dini_IntSet(str, "tuning_10", CarInfo[carid][tuning_10]);
    dini_IntSet(str, "tuning_11", CarInfo[carid][tuning_11]);
    dini_IntSet(str, "tuning_12", CarInfo[carid][tuning_12]);
    dini_IntSet(str, "tuning_13", CarInfo[carid][tuning_13]);
    dini_IntSet(str, "color_1", CarInfo[carid][color_1]);
    dini_IntSet(str, "color_2", CarInfo[carid][color_2]);
    dini_IntSet(str, "paintjob", CarInfo[carid][paintjob]);


    return 1;
    }


    dcmd_motor(playerid, params[]) {//motor befehl
    #pragma unused params


    if(GetPlayerVehicleSeat(playerid) == 0)
    {
    new carID = GetPlayerVehicleID(playerid);
    if(PlayerInfo[playerid][pCar1] == carID || PlayerInfo[playerid][pCar2] == carID || PlayerInfo[playerid][pCar3] == carID || PlayerInfo[playerid][pCar4] == carID)
    {
    new car = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(car) == 509 || GetVehicleModel(car) == 481 || GetVehicleModel(car) == 510)
    {
    SendClientMessage(playerid, COLOR_RED, "Du sitzt auf einem Fahrrad. Das hat keinen Motor!");
    }


    else if (Tank[car] < 1)
    {
    SendClientMessage(playerid, COLOR_RED, "Der Tank ist leer. Du musst erst /tanken.");
    }


    else if (Motor[car] == false )
    {
    GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(car,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
    Motor[car] = true; // Setzt den Bool Motor auf true
    }


    else
    {
    GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(car,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[car] = false; // Setzt den Bool wieder auf falsch zurück.
    }
    }else{
    SendClientMessage(playerid, COLOR_RED, "Dein Schlüssel passt hier nicht!");
    }
    }
    return 1;
    }

    Ich höffe ihr könnt mir helfen :)


    Vielen Dank

    2 Mal editiert, zuletzt von ciaxx ()

  • Ändere die for-Schleifen jeweils zu:
    for(new i = 0; i < MAX_VEHICLES; i++)


    Das hier zu:
    public LadeFahrzeug(idx)
    {
    new str[25];
    format(str, sizeof(str), "/Vehicles/%d.car", idx);


    if(idx < 0)
    {
    return 1;
    }
    if(fexist(str))
    {
    CarInfo[idx][cX] = dini_Float(str, "cX");
    CarInfo[idx][cY] = dini_Float(str, "cY");
    CarInfo[idx][cZ] = dini_Float(str, "cZ");
    CarInfo[idx][cR] = dini_Float(str, "cR");
    CarInfo[idx][cModel] = dini_Int(str, "cModel");
    //tuning
    CarInfo[idx][tuning_0] = dini_Int(str, "tuning_0");
    CarInfo[idx][tuning_1] = dini_Int(str, "tuning_1");
    CarInfo[idx][tuning_2] = dini_Int(str, "tuning_2");
    CarInfo[idx][tuning_3] = dini_Int(str, "tuning_3");
    CarInfo[idx][tuning_4] = dini_Int(str, "tuning_4");
    CarInfo[idx][tuning_5] = dini_Int(str, "tuning_5");
    CarInfo[idx][tuning_6] = dini_Int(str, "tuning_6");
    CarInfo[idx][tuning_7] = dini_Int(str, "tuning_7");
    CarInfo[idx][tuning_8] = dini_Int(str, "tuning_8");
    CarInfo[idx][tuning_9] = dini_Int(str, "tuning_9");
    CarInfo[idx][tuning_10] = dini_Int(str, "tuning_10");
    CarInfo[idx][tuning_11] = dini_Int(str, "tuning_11");
    CarInfo[idx][tuning_12] = dini_Int(str, "tuning_12");
    CarInfo[idx][tuning_13] = dini_Int(str, "tuning_13");
    CarInfo[idx][color_1] = dini_Int(str, "color_1");
    CarInfo[idx][color_2] = dini_Int(str, "color_2");
    CarInfo[idx][paintjob] = dini_Int(str, "paintjob");
    }
    return 1;
    }


    Hier müssen wir einen freien Slot (Index) finden, daher die Funktion GetFreeVehSlot:
    public sellCarInShop(playerid, carPrice, carName[], model)
    {
    //Hier wird ein Fahrzeug erstellt und eingetragen wenn es im Shop gekauft wird (also wenn der Shop ein Auto an den Spieler verkauft)


    if(GetPlayerMoney(playerid) >= carPrice)
    {
    if(PlayerInfo[playerid][pCar1] == 0 || PlayerInfo[playerid][pCar2] == 0 || PlayerInfo[playerid][pCar3] == 0 || PlayerInfo[playerid][pCar4] == 0)
    {


    new vehID = CreateVehicle(model, -1917.0745, 296.8005, 41.0469, 178.7229, 0, 0, 0);
    PutPlayerInVehicle(playerid, vehID, 0);
    new idx = GetFreeVehSlot();
    if(idx == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Limit erreicht.");


    CarInfo[idx][cID] = vehID;
    CarInfo[idx][cModel] = 411;
    CarInfo[idx][cX] = 0;
    CarInfo[idx][cY] = 0;
    CarInfo[idx][cZ] = 10;
    CarInfo[idx][cR] = 0;


    if(PlayerInfo[playerid][pCar1] == 0){
    PlayerInfo[playerid][pCar1] = CarInfo[idx][cID];

    } else if(PlayerInfo[playerid][pCar2] == 0){
    PlayerInfo[playerid][pCar2] = CarInfo[idx][cID];


    } else if(PlayerInfo[playerid][pCar3] == 0){
    PlayerInfo[playerid][pCar3] = CarInfo[idx][cID];


    } else if(PlayerInfo[playerid][pCar4] == 0){
    PlayerInfo[playerid][pCar4] = CarInfo[idx][cID];
    }


    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid, PlayerInfo[playerid][pGeld] - carPrice);


    PlayerInfo[playerid][pGeld] = GetPlayerMoney(playerid);


    new string[128];
    format(string, sizeof(string), "Du hast dir erfolgreich einen %s gekauft.", carName);
    SendClientMessage(playerid, COLOR_GREEN, string);


    }
    else
    {
    SendClientMessage(playerid, COLOR_RED, "[SHOP] Du hast keinen Fahrzeug Slot mehr frei!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_RED, "[SHOP] Du hast nicht genug Geld dabei!");
    }
    return 1;
    }


    Das hier so:
    public SpeicherFahrzeug(idx)
    {
    if(idx < 0)
    {
    return 1;
    }
    CarInfo[idx][cModel] = GetVehicleModel(CarInfo[idx][cID]);
    if(CarInfo[idx][cModel] == 0) return 1;
    new str[25];
    format(str, sizeof(str), "/Vehicles/%d.car", idx);
    dini_Create(str);


    dini_FloatSet(str,"cX", CarInfo[idx][cX]);
    dini_FloatSet(str,"cY", CarInfo[idx][cY]);
    dini_FloatSet(str,"cZ", CarInfo[idx][cZ]);
    dini_FloatSet(str,"cR", CarInfo[idx][cR]);
    dini_IntSet(str,"cModel",CarInfo[idx][cModel]);
    //tuning
    dini_IntSet(str, "tuning_0", CarInfo[idx][tuning_0]);
    dini_IntSet(str, "tuning_1", CarInfo[idx][tuning_1]);
    dini_IntSet(str, "tuning_2", CarInfo[idx][tuning_2]);
    dini_IntSet(str, "tuning_3", CarInfo[idx][tuning_3]);
    dini_IntSet(str, "tuning_4", CarInfo[idx][tuning_4]);
    dini_IntSet(str, "tuning_5", CarInfo[idx][tuning_5]);
    dini_IntSet(str, "tuning_6", CarInfo[idx][tuning_6]);
    dini_IntSet(str, "tuning_7", CarInfo[idx][tuning_7]);
    dini_IntSet(str, "tuning_8", CarInfo[idx][tuning_8]);
    dini_IntSet(str, "tuning_9", CarInfo[idx][tuning_9]);
    dini_IntSet(str, "tuning_10", CarInfo[idx][tuning_10]);
    dini_IntSet(str, "tuning_11", CarInfo[idx][tuning_11]);
    dini_IntSet(str, "tuning_12", CarInfo[idx][tuning_12]);
    dini_IntSet(str, "tuning_13", CarInfo[idx][tuning_13]);
    dini_IntSet(str, "color_1", CarInfo[idx][color_1]);
    dini_IntSet(str, "color_2", CarInfo[idx][color_2]);
    dini_IntSet(str, "paintjob", CarInfo[idx][paintjob]);


    return 1;
    }


    Und den Motor Befehl so, wobei ich davon ausgehe, dass du Motor und Tank nicht speicherst:
    dcmd_motor(playerid, params[])
    {
    //motor befehl
    #pragma unused params


    if(GetPlayerVehicleSeat(playerid) == 0)
    {
    new vehID = GetPlayerVehicleID(playerid);
    if(PlayerInfo[playerid][pCar1] == vehID || PlayerInfo[playerid][pCar2] == vehID || PlayerInfo[playerid][pCar3] == vehID || PlayerInfo[playerid][pCar4] == vehID)
    {
    if(GetVehicleModel(vehID) == 509 || GetVehicleModel(vehID) == 481 || GetVehicleModel(vehID) == 510)
    {
    SendClientMessage(playerid, COLOR_RED, "Du sitzt auf einem Fahrrad. Das hat keinen Motor!");
    }


    else if (Tank[vehID] < 1)
    {
    SendClientMessage(playerid, COLOR_RED, "Der Tank ist leer. Du musst erst /tanken.");
    }


    else if (Motor[vehID] == false )
    {
    GetVehicleParamsEx(vehID,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vehID,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
    Motor[vehID] = true; // Setzt den Bool Motor auf true
    }


    else
    {
    GetVehicleParamsEx(vehID,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vehID,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[vehID] = false; // Setzt den Bool wieder auf falsch zurück.
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_RED, "Dein Schlüssel passt hier nicht!");
    }
    }
    return 1;
    }


    Diese beiden Funktionen brauchst du noch. Letztere haben wir bis hier hin zwar noch nicht verwendet, aber die wirst du sicher mal brauchen, wenn du von der vehicleid (das was GetPlayerVehicleID zurück gibt) auf den Index (Slot) zugreifen willst.
    stock GetFreeVehSlot()
    {
    for(new i=0; i<sizeof(CarInfo); i++)
    {
    if(CarInfo[i][cID] == 0) return i;
    }
    return -1;
    }


    stock GetVehSlot(vehID)
    {
    for(new i=0; i<sizeof(CarInfo); i++)
    {
    if(CarInfo[i][cID] == vehID) return i;
    }
    return -1;
    }


    Das Prinzip dahinter ist eben, dass du es über den Slot (Index) speicherst und nicht den Index gleich der Vehicle ID setzt.

  • Okay vielen Dank schonmal.
    Ich habe das jetzt geändert und natürlich direkt ein Auto gekauft. Das Fahrzeug wird in der Datei gespeichert aber wenn ich den Server wieder starte erscheint es ingame nicht. Es müsste eigentlich an der Farm oben rechts stehen (Koordinaten 0, 0, 0) aber dort ist nichts.


  • for(new i = 0; i < MAX_VEHICLES; i++)//Im OnGamemodeInit
    {
    new string[32];
    format(string, sizeof(string), "/Vehicles/%d.car", i);
    if(dini_Int(string, "cID") > 0)
    {
    LadeFahrzeug(i);
    CarInfo[i][cID] = CreateVehicle(CarInfo[i][cModel], CarInfo[i][cX], CarInfo[i][cY], CarInfo[i][cZ], CarInfo[i][cR],0, 0, -1);


    new vehicleid = CarInfo[i][cID];


    if(CarInfo[i][tuning_1] > 999){
    AddVehicleComponent(vehicleid, CarInfo[i][tuning_1]);
    }
    if(CarInfo[i][tuning_2] > 999){
    AddVehicleComponent(vehicleid, CarInfo[i][tuning_2]);
    }
    if(CarInfo[i][tuning_3] > 999){
    AddVehicleComponent(vehicleid, CarInfo[i][tuning_3]);
    }
    if(CarInfo[i][tuning_4] > 999){
    AddVehicleComponent(vehicleid, CarInfo[i][tuning_4]);
    }
    if(CarInfo[i][tuning_5] > 999){
    AddVehicleComponent(vehicleid, CarInfo[i][tuning_5]);
    }
    if(CarInfo[i][tuning_6] > 999){
    AddVehicleComponent(vehicleid, CarInfo[i][tuning_6]);
    }
    if(CarInfo[i][tuning_7] > 999){
    AddVehicleComponent(vehicleid, CarInfo[i][tuning_7]);
    }
    if(CarInfo[i][tuning_8] > 999){
    AddVehicleComponent(vehicleid, CarInfo[i][tuning_8]);
    }
    if(CarInfo[i][tuning_9] > 999){
    AddVehicleComponent(vehicleid, CarInfo[i][tuning_9]);
    }
    if(CarInfo[i][tuning_10] > 999){
    AddVehicleComponent(vehicleid, CarInfo[i][tuning_10]);
    }
    if(CarInfo[i][tuning_11] > 999){
    AddVehicleComponent(vehicleid, CarInfo[i][tuning_11]);
    }
    if(CarInfo[i][tuning_12] > 999){
    AddVehicleComponent(vehicleid, CarInfo[i][tuning_12]);
    }
    if(CarInfo[i][tuning_13] > 999){
    AddVehicleComponent(vehicleid, CarInfo[i][tuning_13]);
    }
    if(CarInfo[i][paintjob] > 0){
    ChangeVehiclePaintjob(vehicleid, CarInfo[i][paintjob]);
    }
    ChangeVehicleColor(vehicleid, CarInfo[i][color_1], CarInfo[i][color_1]);
    }
    }



    public LadeFahrzeug(idx)
    {
    new str[25];
    format(str, sizeof(str), "/Vehicles/%d.car", idx);


    if(idx < 0)
    {
    return 1;
    }
    if(fexist(str))
    {
    CarInfo[idx][cX] = dini_Float(str, "cX");
    CarInfo[idx][cY] = dini_Float(str, "cY");
    CarInfo[idx][cZ] = dini_Float(str, "cZ");
    CarInfo[idx][cR] = dini_Float(str, "cR");
    CarInfo[idx][cModel] = dini_Int(str, "cModel");
    //tuning
    CarInfo[idx][tuning_0] = dini_Int(str, "tuning_0");
    CarInfo[idx][tuning_1] = dini_Int(str, "tuning_1");
    CarInfo[idx][tuning_2] = dini_Int(str, "tuning_2");
    CarInfo[idx][tuning_3] = dini_Int(str, "tuning_3");
    CarInfo[idx][tuning_4] = dini_Int(str, "tuning_4");
    CarInfo[idx][tuning_5] = dini_Int(str, "tuning_5");
    CarInfo[idx][tuning_6] = dini_Int(str, "tuning_6");
    CarInfo[idx][tuning_7] = dini_Int(str, "tuning_7");
    CarInfo[idx][tuning_8] = dini_Int(str, "tuning_8");
    CarInfo[idx][tuning_9] = dini_Int(str, "tuning_9");
    CarInfo[idx][tuning_10] = dini_Int(str, "tuning_10");
    CarInfo[idx][tuning_11] = dini_Int(str, "tuning_11");
    CarInfo[idx][tuning_12] = dini_Int(str, "tuning_12");
    CarInfo[idx][tuning_13] = dini_Int(str, "tuning_13");
    CarInfo[idx][color_1] = dini_Int(str, "color_1");
    CarInfo[idx][color_2] = dini_Int(str, "color_2");
    CarInfo[idx][paintjob] = dini_Int(str, "paintjob");
    }
    return 1;
    }