Fahrzeug wird aufgeschlossen gespawnt

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
  • Fahrzeug wird offen gespawnt, obwohl die Variable true ist.
    Habe mir auch die Variable printen lassen, die ist zu 100% true.
    public OnVehicleSpawn(vehicleid)
    {
    new engine, lights, alarm, doors, bonnet, boot, objective;
    if(VehicleInfo[vehicleid][v_Schloss] == true) {
    GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
    doors = 1; // Türen werden geschlossen
    }else{
    GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
    doors = 0; // Türen werden geöffnet
    }
    SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
    return 1;
    }

  • Debug das ganze mal so-

  • Das komische ist das, dass ganze nicht einmal aufgerufen wird, bzw. es wird nichts geprintet.


    //E:


    Naja wenn ich das Fahrzeug respawne ( SetVehicleToRespawn ) wird das geprintet.
    [20:14:42] Schloss: 1 // Wird beim erstellen des Fahrzeugs geprintet - also Schloss ist true


    OnVehicleSpawn
    [20:14:54] Schloss == false
    [20:14:54] Türen: 0

    Einmal editiert, zuletzt von malE ()

  • Habe es provisorisch mit einem Befehl gemacht, weil ich in der Wiki gelesen habe das, dass public OnVehicleSpawn nur Aufgerufen wird wenn ein Fahrzeug respawnt wird.
    ocmd:vehrespawn(playerid,params[])
    {
    if(PlayerInfo[playerid][p_Admin] < 3)return 1;
    new id;
    if(sscanf(params, "i", id))return SendClientMessage(playerid, COLOR_GREY, "Benutze: /vehrespawn [Fahrzeug-ID]");
    if(!IsValidVehicle(id))return SendClientMessage(playerid, COLOR_GREY, " | Ungültige Fahrzeug-ID angegeben.");
    SetVehicleToRespawn(id);
    SendClientMessage(playerid, COLOR_ADMCMD, "[AdmCmd] Fahrzeuge wurde respawnt.");
    return 1;
    }
    Wenn ich damit das Fahrzeug respawne werden mir auch die Infos geprintet, aber das Fahrzeug bleibt halt immer noch aufgeschlossen.

  • Zu diesem public, da lasse ich mir printen ob die Variable wirklich auf true ist, laut dem print schon.
    forward OnPlayerVehiclesLoad(playerid);
    public OnPlayerVehiclesLoad(playerid)
    {
    new num_fields, num_rows;
    cache_get_data(num_rows, num_fields, handle);
    if(!num_rows)return 1;
    for(new i=0; i < num_rows; i++)
    {
    VehicleInfo[i][v_Besitzer] = cache_get_field_content_int(i, "besitzer", handle);
    VehicleInfo[i][v_Model] = cache_get_field_content_int(i, "model", handle);
    VehicleInfo[i][v_Color1] = cache_get_field_content_int(i, "color1", handle);
    VehicleInfo[i][v_Color2] = cache_get_field_content_int(i, "color2", handle);
    VehicleInfo[i][v_X] = cache_get_field_content_float(i, "x", handle);
    VehicleInfo[i][v_Y] = cache_get_field_content_float(i, "y", handle);
    VehicleInfo[i][v_Z] = cache_get_field_content_float(i, "z", handle);
    VehicleInfo[i][v_R] = cache_get_field_content_float(i, "r", handle);
    VehicleInfo[i][v_Schloss] = bool:cache_get_field_content_int(i, "schloss", handle);
    VehicleInfo[i][v_ID] = cache_get_field_content_int(i, "id", handle);
    printf("Schloss: %d", VehicleInfo[i][v_Schloss]);
    if(VehicleInfo[i][v_Model] >= 400 && VehicleInfo[i][v_Model] <= 611) {
    VehicleInfo[i][v_DLID] = CreateVehicle(VehicleInfo[i][v_Model], VehicleInfo[i][v_X], VehicleInfo [i][v_Y], VehicleInfo[i][v_Z], VehicleInfo[i][v_R], VehicleInfo[i][v_Color1], VehicleInfo[i][v_Color2], -1, 0);
    } else{
    printf("[FEHLER] Fahrzeug-Model %d existiert nicht (DB-ID: %d).", VehicleInfo[i][v_Model], i);
    }
    }
    return 1;
    }

  • Um es euch vielleicht etwas einfacher zu machen:


    Zitat

    Description:
    This callback is called when a vehicle respawns.

    Am besten solltest du dir eine Extra Funktion â la CreateVehicleEx o.Ä. erstellen wo du dann nach CreateVehicle das Fahrzeug abschließen lässt, damit du nicht bei jedem Befehl wo du ein Privatfahrzeug spawnst das per Hand einfügen musst.

  • Der Fehler liegt daran, dass du mit der vehicleid auf den Index zugreifst, das beim Laden aber nicht so machst.
    Du musst es bei OnVehicleSpawn so machen, um den richtigen Index (das ist nicht die vehicleid) herauszufinden:
    public OnVehicleSpawn(vehicleid)
    {
    new engine, lights, alarm, doors, bonnet, boot, objective;
    new id = -1;
    for(new i = 0; i < sizeof(VehicleInfo); i++)
    {
    if(vehicleid == VehicleInfo[i][v_DLID])
    {
    id = i;
    break;
    }
    }
    if(id != -1)
    {
    if(VehicleInfo[id][v_Schloss] == true)
    {
    GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
    doors = 1; // Türen werden geschlossen
    print("vSchloss == true");
    }
    else
    {
    GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
    doors = 0; // Türen werden geöffnet
    print("vSchloss == false");
    }
    printf("doors: %d",doors);
    SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
    }
    return 1;
    }

  • @Jeffry dein Code funktioniert, nur dann wenn ich das Fahrzeug schon einmal in dem Fall mit meinem Befehl respawne.


    @Bluescreen sowie ich es getestet habe, wird das Fahrzeug auch nicht direkt nach dem erstellen respawnt.
    stock CreateVehicleEx(model, Float:x, Float:y, Float:z, Float:r, color, color2, respawndelay, siren)
    {
    new id = CreateVehicle(model, x, y, z, r, color, color2, respawndelay, siren);
    SetVehicleToRespawn(id);
    return 1;
    }

  • Dein Code funktioniert nur wenn ich das Fahrzeug mit einem Befehl respawne.
    Also es ist nicht von Anfang an verschlossen, sondern nur wenn ich es mit dem Befehl respawne.


    Ergo: Fahrzeug beim erstellen nicht verschlossen - respawne ich stattdessen ein Privatfahrzeug mit einem Befehl wird das Fahrzeug verschlossen gespawnt, dank dein Code.
    Aber es soll ja von Anfang an verschlossen spawnen.

  • Ah, verstehe. Das liegt daran, dass OnVehicleSpawn beim Erstellen nicht aufgerufen wird. Du müsstest es beim Erstellen so machen:
    forward OnPlayerVehiclesLoad(playerid);
    public OnPlayerVehiclesLoad(playerid)
    {
    new num_fields, num_rows, engine, lights, alarm, doors, bonnet, boot, objective;
    cache_get_data(num_rows, num_fields, handle);
    if(!num_rows)return 1;
    for(new i=0; i < num_rows; i++)
    {
    VehicleInfo[i][v_Besitzer] = cache_get_field_content_int(i, "besitzer", handle);
    VehicleInfo[i][v_Model] = cache_get_field_content_int(i, "model", handle);
    VehicleInfo[i][v_Color1] = cache_get_field_content_int(i, "color1", handle);
    VehicleInfo[i][v_Color2] = cache_get_field_content_int(i, "color2", handle);
    VehicleInfo[i][v_X] = cache_get_field_content_float(i, "x", handle);
    VehicleInfo[i][v_Y] = cache_get_field_content_float(i, "y", handle);
    VehicleInfo[i][v_Z] = cache_get_field_content_float(i, "z", handle);
    VehicleInfo[i][v_R] = cache_get_field_content_float(i, "r", handle);
    VehicleInfo[i][v_Schloss] = bool:cache_get_field_content_int(i, "schloss", handle);
    VehicleInfo[i][v_ID] = cache_get_field_content_int(i, "id", handle);
    printf("Schloss: %d", VehicleInfo[i][v_Schloss]);
    if(VehicleInfo[i][v_Model] >= 400 && VehicleInfo[i][v_Model] <= 611)
    {
    VehicleInfo[i][v_DLID] = CreateVehicle(VehicleInfo[i][v_Model], VehicleInfo[i][v_X], VehicleInfo [i][v_Y], VehicleInfo[i][v_Z], VehicleInfo[i][v_R], VehicleInfo[i][v_Color1], VehicleInfo[i][v_Color2], -1, 0);
    GetVehicleParamsEx(VehicleInfo[i][v_DLID], engine, lights, alarm, doors, bonnet, boot, objective);
    doors = 1; // Türen werden geschlossen
    SetVehicleParamsEx(VehicleInfo[i][v_DLID], engine, lights, alarm, doors, bonnet, boot, objective);
    }
    else
    {
    printf("[FEHLER] Fahrzeug-Model %d existiert nicht (DB-ID: %d).", VehicleInfo[i][v_Model], i);
    }
    }
    return 1;
    }