Fahrzeuge spinnen rum.

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
  • Hallo Leute,


    ich habe derzeit das Problem, dass meine Fahrzeuge scheinbar nicht mit den richtigen Infos gespawnt/bestückt werden.


    Ich lasse die Fahrzeuge der einzellnen Fraktionen über solch einen Stock laden/erstellen:
    stock LoadFrakCars1()
    {
    new Query[128], v, fcarload1;
    mysql_query("SELECT * FROM `frak1_cars`"); mysql_store_result(); while(mysql_fetch_row_format(Query))
    { sscanf(Query, "p<|>e<{i}iiffffii>", FrakCarInfo[v]); SetVehicleNumberPlate(CreateVehicle(FrakCarInfo[v][fcModel], FrakCarInfo[v][fcPosX], FrakCarInfo[v][fcPosY], FrakCarInfo[v][fcPosZ], FrakCarInfo[v][fcPosA], FrakCarInfo[v][fcCol1], FrakCarInfo[v][fcCol2], -1),"LSPD"); v++; fcarload1 = 1; }
    if(fcarload1 != 0) { print("<-| [MYSQL] - [FRAKTION_1] | Alle Fahrzeuge wurden erfolgreich geladen!"); } else { print("<-| [ERROR] - [FRAKTION_1] | Die Fahrzeuge konnten nicht geladen werden!"); }
    mysql_free_result();
    return 1;
    }


    Den Stock starte ich unter OnGameModeInit und lasse die Fahrzeuge direkt nachdem der Stock fertig ist respawnen.
    public OnGameModeInit()
    {
    LoadFrakCars1();
    new v = 0; for(;v < MAX_VEHICLES; v++) { SetVehicleToRespawn(v); }
    return 1;
    }


    Respawnen lasse ich die Fahrzeuge Aufgrund dessen, damit die (jeweils 4) Sultäne des LSPD und der Army Sirenen haben.
    - Derzeit lasse ich nur die Fraktionsfahrzeuge des LSPD's laden/erstellen.
    Siehe da:
    public OnVehicleSpawn(vehicleid)
    {
    if(FrakCarInfo[vehicleid][fcModel] == 560 && FrakCarInfo[vehicleid][fcVehFrak] == 3 || FrakCarInfo[vehicleid][fcModel] == 560 && FrakCarInfo[vehicleid][fcVehFrak] == 1)
    {
    DestroyObject(sirene1[vehicleid]);
    sirene1[vehicleid] = CreateObject(19420,0,0,0,0,0,0,100);
    AttachObjectToVehicle(sirene1[vehicleid],vehicleid,0,0.0,0.8,0,0,0);
    printf("Sirene an Fahrzeug [%i] montiert!", vehicleid);
    }
    return 1;
    ]


    Dem Anschein nach hat alles Funktioniert, printf gibt folgendes aus:

    SQL
    [14:51:34] Sirene an Fahrzeug [21] montiert!
    [14:51:34] Sirene an Fahrzeug [22] montiert!
    [14:51:34] Sirene an Fahrzeug [23] montiert!
    [14:51:34] Sirene an Fahrzeug [24] montiert!


    Wenn ich nun InGame gehe und die Sultäne betrachte, fehlt bei einen der Sultäne die Sirene.
    Die Sirene die eigentlich am Sultan seien sollte, ist an einem Wasserwerfer attached.


    Um zu überprüfen, das dabei schief gelaufen ist, habe ich mir kurz folgenden Befehl gemacht:


    if (strcmp("/test", cmdtext, true, 10) == 0) //TEST
    {
    if(!IsPlayerInAnyVehicle(playerid)) return 1;
    {
    new string[128], v = GetPlayerVehicleID(playerid);
    format(string, sizeof(string), "Fahrzeug VehicleID: %i| Fraktion: %i | Model: %i",v,FrakCarInfo[v][fcVehFrak],FrakCarInfo[v][fcModel]);
    SendClientMessage(playerid,ROT,string);
    }
    return 1;
    }


    Wenn ich nun in den Sultan steige, an dem die Sirene fehlt und '/test' eingebe, erscheint folgende Nachricht:

    SQL
    [14:47:54] Fahrzeug VehicleID: 25| Fraktion: 0 | Model: 0


    Und wenn ich in den Wasserwerfer einsteige und '/test' eingebe, erscheint komischerweise folgende Nachricht:


    SQL
    [14:48:12] Fahrzeug VehicleID: 21| Fraktion: 1 | Model: 560


    Demnach müsste der Sultan eigentlich garnicht da sein und der Wasserwerfer müsste ein Sultan sein. - Was aber nicht so ist!



    Nun weiß ich nicht weiter, vielleicht könntet ihr mir bitte weiter helfen.
    - Ich bedanke mich schonmal für die Hilfe!




    Gruß
    AlphaGen!

    DIVIDE ET IMPERA

  • Das selbe Problem hatte ich auch mal.
    Damals hatte ich die Variable, die die Fahrzeuge Hochzählt (also bei dir v) auf 1 gesetzt.
    Inzwischen hab ich die Informationen die zum erstellen des Fahrzeuges benötigt werden in eine extra Variable geschrieben, das Fahrzeug erstellt, und dann mit der carid des erstellten Fahrzeuges alle Daten geladen.


    Also mach du jetzt am besten:



    stock LoadFrakCars1(){
    new Query[128], v = 1, fcarload1;
    ....


    Mfg,
    UncleSub


  • Vielen Dank, es scheint zu klappen!


    Zwei Fragen stell ich mir aber gerade:
    1. Warum 'v = 1' und nicht 'v = 0' ?
    2. Es ist mir bereits öfter aufgefallen, dass ich durch manche Fahrzeuge durchlaufen kann. - Liegt das am Script oder an der Version (0.3x)?

    DIVIDE ET IMPERA