Fraktionsautos

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, wollte gerade Fraktionsautos erstellen, jedoch werden diese garnicht in der Datenbank abgespeichert.
    Obwohl ich alles fast genau wie beim normalen Carsystem gemacht habe..


    beim erstellen Befehl: createfCar(fID,mID,xc+2,yc,zc,rc,color[0],color[1]);
    createfCar(fID,modelid,Float:x,Float:y,Float:z,Float:r,f1,f2)
    {
    for(new i=0; i<sizeof(fcInfo); i++)
    {
    if(fcInfo[i][fid_x]!=0)continue;
    fcInfo[i][fc_fraktion]=fID;
    fcInfo[i][fc_x]=x;
    fcInfo[i][fc_y]=y;
    fcInfo[i][fc_z]=z;
    fcInfo[i][fc_r]=r;
    fcInfo[i][fcfarbe1]=f1;
    fcInfo[i][fcfarbe2]=f2;
    fcInfo[i][fmodel]=modelid;
    fcInfo[i][fid_x] = CreateVehicle(modelid,x,y,z,r,f1,f2,-1);
    savefCarToDB(i);
    return 1;
    }
    return 1;
    }


    savefCarToDB(carid)
    {
    new query[256];
    format(query,sizeof(query),"INSERT INTO fcars (fraktion,fmodel,farbe1,farbe2,x,y,z,r) VALUES ('%i','%i','%i','%i','%f','%f','%f','%f')",fcInfo[carid][fc_fraktion],fcInfo[carid][fmodel],fcInfo[carid][fcfarbe1],fcInfo[carid][fcfarbe2],fcInfo[carid][fc_x],fcInfo[carid][fc_y],fcInfo[carid][fc_z],fcInfo[carid][fc_r]);
    mysql_function_query(dbverbindung,query,true,"fcarSavedToDB","i",carid);
    return 1;
    }


    public fcarSavedToDB(carid)
    {
    fcInfo[carid][fdb_id]=cache_insert_id(dbverbindung);
    return 1;
    }

    Verstehe jetzt nicht warum das nicht funktioniert..
    Das Auto wird erstellt, aber nicht in der DB gespeichert?




    Was ich in letzter Zeit geändert habe war von glaube R34 auf R39-3 geupdatet.
    Aber das normale Carsystem funktioniert ja auch noch ohne Probleme

  • Beitrag von Jeffry ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • hatte mich nur verschrieben, Danke


    Noch ne kleine Frage zu dem tquery:
    Wenn ich jetzt den cache nicht brauche, wie mache ich dass dann, davor hat man ja dann false geschrieben.
    mysql_tquery(dbverbindung,query,"","")
    So dann?

  • hatte mich nur verschrieben, Danke


    Noch ne kleine Frage zu dem tquery:
    Wenn ich jetzt den cache nicht brauche, wie mache ich dass dann, davor hat man ja dann false geschrieben.
    mysql_tquery(dbverbindung,query,"","")
    So dann?


    mysql_function_query ist in der neuen Version eine define für mysql_tquery daher iat das egal.
    Du nutzst das hier richtig


    //edit Jeffry denk dran er möchte die Datensatzid auslesen , welcher er dem Fahrzeug zuweisst

  • Hätte noch eine weitere Frage:
    bin gerade dabei die Frakcars unter OnGameModeInit spawnen zu lassen.


    format(query,sizeof(query),"SELECT * FROM cars WHERE besitzer='%i'",sInfo[playerid][db_id]);
    Hier werden ja die Cars ausgewählt die der User besitzt.


    Jetzt möchte ich ja bei den Frakcars eigentlich alle auswählen, also die ganze Tabelle fcars.
    Wie mache ich das am besten?

  • Wenn ich dich nicht falsch verstanden habe dann muss die query so aussehen.

    SQL
    SELECT * FROM fcars
  • Ja.


    Habe jetzt ein anderes Problem,
    und zwar habe ich Delete Befehle für normale Veh's und für FrakVeh's eingebaut


    Problem ist jetzt ich kann meistens (nicht immer) mit delveh FrakVeh's löschen und auch mit
    delfveh normale Veh's


    ocmd:delveh(playerid,params[])
    {
    if(!IsPlayerAnAdmin(playerid,3))return SendClientMessage(playerid, ROT, "Du bist kein Admin oder dein Rang ist zu niedrig!");
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, ROT, "Du musst in einem Fahrzeug sitzen!");
    new vID=GetPlayerVehicleID(playerid);
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x]==0)continue;
    if(cInfo[i][id_x]!=vID)continue;
    new query[128];
    format(query,sizeof(query),"DELETE FROM cars WHERE id='%i'",cInfo[i][db_id]);
    mysql_tquery(dbverbindung,query);
    DestroyVehicle(vID);
    }
    return 1;
    }


    ocmd:delfveh(playerid,params[])
    {
    if(!IsPlayerAnAdmin(playerid,3))return SendClientMessage(playerid, ROT, "Du bist kein Admin oder dein Rang ist zu niedrig!");
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, ROT, "Du musst in einem Fahrzeug sitzen!");
    new vID=GetPlayerVehicleID(playerid);
    for(new i=0; i<sizeof(fcInfo); i++)
    {
    if(fcInfo[i][fid_x]==0)continue;
    if(fcInfo[i][fid_x]!=vID)continue;
    new query[128];
    format(query,sizeof(query),"DELETE FROM fcars WHERE id='%i'",fcInfo[i][fdb_id]);
    mysql_tquery(dbverbindung,query);
    DestroyVehicle(vID);
    }
    return 1;
    }







    Und das andere Problem was ich habe, das Fahrzeug kann ich auch parken wenn es kein Frakfahrzeug ist,
    und mir wird die Nachricht Fahrzeug erfolgreich geparkt ca. 10 mal angezeigt?


    ocmd:fparken(playerid,params[])
    {
    new vID = GetPlayerVehicleID(playerid);
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(fcInfo[i][fid_x]==0)continue;
    if(fcInfo[i][fid_x]!=vID)continue;
    GetVehiclePos(fcInfo[i][fid_x],fcInfo[i][fc_x],fcInfo[i][fc_y],fcInfo[i][fc_z]);
    GetVehicleZAngle(fcInfo[i][fid_x],fcInfo[i][fc_r]);
    SendClientMessage(playerid,GRUEN,"Fahrzeug erfolgreich geparkt!");
    new query[128];
    format(query,sizeof(query),"UPDATE fcars SET x='%f', y='%f', z='%f', r='%f' WHERE id='%i'",fcInfo[i][fc_x],fcInfo[i][fc_y],fcInfo[i][fc_z],fcInfo[i][fc_r],fcInfo[i][fdb_id]);
    mysql_tquery(dbverbindung,query);
    }
    return 1;
    }

  • ocmd:fparken(playerid,params[])
    {
    new vID = GetPlayerVehicleID(playerid);
    for(new i=0; i<sizeof(fcInfo); i++)
    {
    if(fcInfo[i][fid_x]==0)continue;
    if(fcInfo[i][fid_x]!=vID)continue;
    GetVehiclePos(fcInfo[i][fid_x],fcInfo[i][fc_x],fcInfo[i][fc_y],fcInfo[i][fc_z]);
    GetVehicleZAngle(fcInfo[i][fid_x],fcInfo[i][fc_r]);
    SendClientMessage(playerid,GRUEN,"Fahrzeug erfolgreich geparkt!");
    new query[128];
    format(query,sizeof(query),"UPDATE fcars SET x='%f', y='%f', z='%f', r='%f' WHERE id='%i'",fcInfo[i][fc_x],fcInfo[i][fc_y],fcInfo[i][fc_z],fcInfo[i][fc_r],fcInfo[i][fdb_id]);
    mysql_tquery(dbverbindung,query);
    }
    return 1;
    }
    Du hast hier sizeof(cInfo) geschrieben, obwohl das ja sizeof(fcInfo) heißen soll.

  • Beitrag von IceWave ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Konnte das Problem noch nicht lösen. Also das Parken funktioniert,
    aber wenn ich mit frakveh ein Car erstelle kann ich es mit normalen delveh löschen


    und wenn ich eins mit normalen veh erstelle kann ich es mit delfrakveh auch löschen


    Hoffe es kann mir wer helfen..
    Das Problem war mir aber bis jetzt nur bekannt wenn ich es direkt nach dem Erstellen mache.
    Wenn die Cars nach einen Restart gespawnt sind, hat alles bis jetzt funktioniert!

  • Ich glaube wenn ich mit /veh ein normales erstellt habe und dann /delfrakveh versucht habe wurde es trotzdem gelöscht
    Und andersrum auch..


    Verstehe aber noch nicht wieso




    Habs zwar jetzt so, dass es funktioniert, aber warum die Befehle einzeln nicht funktioniert haben ka..
    ocmd:delveh(playerid,params[])
    {
    if(!IsPlayerAnAdmin(playerid,3))return SendClientMessage(playerid, ROT, "Du bist kein Admin oder dein Rang ist zu niedrig!");
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, ROT, "Du musst in einem Fahrzeug sitzen!");
    new vID=GetPlayerVehicleID(playerid);
    new frakcar = IsCarFrakCar(vID);
    new normcar = IsCarNormCar(vID);
    new query[128];
    if(frakcar!=0)
    {
    format(query,sizeof(query),"DELETE FROM fcars WHERE id='%i'",fcInfo[frakcar][fdb_id]);
    mysql_tquery(dbverbindung,query);
    SendClientMessage(playerid, GRUEN, "Du hast das Fraktionsfahrzeug erfolgreich gelöscht!");
    DestroyVehicle(vID);
    }
    else if(normcar!=0)
    {
    format(query,sizeof(query),"DELETE FROM cars WHERE id='%i'",cInfo[normcar][db_id]);
    mysql_tquery(dbverbindung,query);
    SendClientMessage(playerid, GRUEN, "Du hast das Normfahrzeug erfolgreich gelöscht!");
    DestroyVehicle(vID);
    }
    return 1;
    }






    IsCarNormCar(vID)
    {
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x]==vID)return i;
    }
    return 0;
    }

    Habe hierzu noch eine kleine Frage:
    Bei dem Befehl IsCarNormCar gibt er doch wenn idx == vID ist kurz das i aus, also wenn i=3 ist steht 3 in IsCarNormCar.
    Aber das ist doch nur ganz kurz oder? Weil dann wird ja return 0 wieder ausgeführt oder?

  • Da wirst du wieder Probleme bekommen, wenn du es in bestimmten Reihenfolgen machst.
    Schreibe es so:
    ocmd:delveh(playerid,params[])
    {
    if(!IsPlayerAnAdmin(playerid,3))return SendClientMessage(playerid, ROT, "Du bist kein Admin oder dein Rang ist zu niedrig!");
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, ROT, "Du musst in einem Fahrzeug sitzen!");
    new vID=GetPlayerVehicleID(playerid);
    new frakcar = IsCarFrakCar(vID);
    new normcar = IsCarNormCar(vID);
    new query[128];
    if(frakcar!=0)
    {
    format(query,sizeof(query),"DELETE FROM fcars WHERE id='%i'",fcInfo[frakcar][fdb_id]);
    mysql_tquery(dbverbindung,query);
    SendClientMessage(playerid, GRUEN, "Du hast das Fraktionsfahrzeug erfolgreich gelöscht!");
    DestroyVehicle(vID);
    fcInfo[i][fid_x] = 0;
    }
    else if(normcar!=0)
    {
    format(query,sizeof(query),"DELETE FROM cars WHERE id='%i'",cInfo[normcar][db_id]);
    mysql_tquery(dbverbindung,query);
    SendClientMessage(playerid, GRUEN, "Du hast das Normfahrzeug erfolgreich gelöscht!");
    DestroyVehicle(vID);
    cInfo[i][id_x] = 0;
    }
    return 1;
    }
    Es ist wichtig die Variablen zurück zu setzen.
    Übrigens, für User ist es so (mit einem Befehl) leichter, sie müssen sich nur einen Befehl merken.


    Zwecks der Frage:
    Nein, bei return wird eine Funktion sofort beendet, es wird nichts mehr ausgeführt, was nach dem return kommt.
    Sprich, du bekommst nur die 0 zurück, wenn es keine Übereinstimmung gibt, ansonsten das i.

  • Vielen Dank



    Aber was bis jetzt immer gedacht habe war:


    Onirgendwas..();
    if(test==0)
    {
    blabla
    return 1;
    }
    SendClientMessage....
    Habe immer gedacht dass dann hier z.b. die if Abfrage nur beendet wird und SendClientMessge oder wenn ich eine 2 if Abfrage hätte trotzdem ausgeführt wird.
    Aber wird dann hier auch das komplette Callback beendet ?