Fraktcars Kaufproblem

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 Breadfish,


    bin dann auch mal auf den Trichter gekommen, ein eigenen Thread aufzumachen anstatt Kleine Scripting Fragen vollzuspammen. Hier ist das Problem etwas größer.
    Ich habe ein Fraktautohaus gescriptet, was teils auch wunderbar funktioniert. Allerdings immer nur für ein Fahrzeug, was nämlich das Police Car (596) ist.
    Hier erstmal das Array, wo alle Fraktautos drin sind.

    new fahCars[][fchInfoEnum] = {
    {596,2148.3457,-1148.2457,24.0449,268.3922,50}, // POLICE LSPD CAR PLATZ: 22
    {599,2148.1140,-1143.2367,24.5964,269.6135,50}, // POLICE RANGER PLATZ: 24
    {523,2148.1277,-1138.4258,25.1168,267.9870,50}, // POLICE HPV PLATZ: 25
    {497,2148.8813,-1133.8751,25.1917,267.8968,50}, // POLICE MAVERICK PLATZ: 26
    {411,2147.9229,-1203.5190,23.4772,269.6615,50} // INFERNUS PLATZ: 1
    };

    Werden auch alle erstellt, alles super. Jetzt fahre ich zum Platz hin, steige in das Police Car ein, kaufe es, es wird erstellt, kann es fparken usw. Gehe ich jetzt in irgendein anderes Fahrzeug rein, spuckt er mir in der Konsole folgende Meldung aus:


    Es geht also, warum auch immer, nur mit dem einem Fahrzeug.
    Alles weitere, was ihr (denke ich mal) braucht:


    Danke für jede Hilfe.


    mfg.

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht


  • new fcInfo[64][fcEnum];

    Das dazugehörige Enum:

    enum fcEnum
    {
    id_x,
    fbesitzer,
    fmodel,
    ffarbe,
    Float:fc_x,
    Float:fc_y,
    Float:fc_z,
    Float:fc_r,
    fdb_id
    }

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

  • Das passt.
    Der Fehler ist in OnDialogResponse, und zwar in der Zeile 3731. Kannst du diese mal posten, und etwas Code drum herum?


    Falls du den Code verändert hast, lass dir die Fehlermeldung mit der aktuellen Zeile nochmal ausgeben.

  • Besagte Zeile + Code drum herum:



    if(dialogid==DIALOG_CHFRAKTS)
    {
    if(response)
    {
    printf("1");
    new fID=pInfo[playerid][fraktion];
    printf("2");
    new id=GetPVarInt(playerid,"buyFCarID");
    printf("3");
    if(fInfo[fID][f_kasse]<fahCars[id][fc_preis])
    {
    printf("4");
    SendClientMessage(playerid,CLR_RED,"In eurer Fraktionskasse befindet sich nicht genuegend Geld fur dieses Auto!");
    RemovePlayerFromVehicle(playerid);
    return 1;
    }
    printf("5");
    fInfo[fID][f_kasse]-=fahCars[id][fc_preis];
    printf("6");
    saveFrakKasse(fID);
    printf("7");
    createFrakCar(fID,fahCars[id][fmodel],fahInfo[id][fs_x],fahInfo[id][fs_y],fahInfo[id][fs_z],fahInfo[id][fs_r],fcInfo[id][ffarbe]); //Die böse Zeile
    printf("fID ist %i",fID);
    SendClientMessage(playerid,CLR_YELLOW,"Glueckwunsch zum Erwerb eures neuen Fraktautos! Als Leader kannst du mit /fpark euer Fahrzeug umparken.");
    RemovePlayerFromVehicle(playerid);
    }
    else
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,CLR_RED,"Autoverkauf abgebrochen.");
    SendClientMessage(playerid,CLR_RED,"Gehe wieder in das Auto, fals du dich verdrueckt hast.");
    return 1;
    }
    }


    Von den 1sen usw nicht stören lassen, waren nur ein paar Lösungsansätze.


    mfg.

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

  • War oben im Post schon drin, hier nochmal:



    createFrakCar(frakid,modelid,Float:x,Float:y,Float:z,Float:r,f_farbe)
    {
    print("1");
    for(new i=0;i<sizeof(fcInfo);i++)
    {
    if(fcInfo[i][id_x]!=0)continue;
    print("2");
    fcInfo[i][fbesitzer]=frakid;
    print("3");
    fcInfo[i][fc_x]=x;
    print("4");
    fcInfo[i][fc_y]=y;
    print("5");
    fcInfo[i][fc_z]=z;
    print("6");
    fcInfo[i][fc_r]=r;
    print("7");
    fcInfo[i][fmodel]=modelid;
    print("8");
    switch(frakid)
    {
    case 1:
    {
    f_farbe=-1;
    }
    case 2:
    {
    f_farbe=252;
    }
    }
    print("11");
    fcInfo[i][ffarbe]=f_farbe;
    print("12");
    fcInfo[i][id_x]=CreateVehicle(modelid,x,y,z,r,f_farbe,-1,60);
    print("13");
    saveFrakCarToDB(frakid,i);

    return 1;
    }
    return 1;
    }

    Werde ich machen, danke.


    //Edit:
    Er kommt nicht mal zur 1, scheint also als würde die Funktion nicht einmal aufgerufen werden.

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

    Einmal editiert, zuletzt von #S. ()

  • Sorry, hatte ich nicht gesehen.
    Ich vermute mal stark, dass der Code - wenn du die prints einfügst - bis zur saveFrakCarToDB Zeile kommt.


    Teste das mal aus und poste, falls die Vermutung stimmt, deine saveFrakCarToDB Funktion.


  • saveFrakCarToDB(frakid,fcarid)
    {
    new query[256];
    format(query,sizeof(query),"INSERT INTO fraktautos (besitzer,ffarbe,model,x,y,z,r) VALUES ('%i','%i','%i','%f','%f','%f','%f')",frakid,fcInfo[fcarid][ffarbe],fcInfo[fcarid][fmodel],fcInfo[fcarid][fc_x],fcInfo[fcarid][fc_y],fcInfo[fcarid][fc_z],fcInfo[fcarid][fc_r]);
    mysql_function_query(dbhandle,query,true,"frakCarSavedToDB","i",fcarid);
    print(query);
    return 1;
    }


    Wird nicht in der Konsole wiedergegeben. Weder die prints 1-13 noch die query von saveFrakCarToDB.


    Zum Vergleich nochmal hier die Konsole, wo ich das LSPD Car (596) kaufe und alles funktioniert, und dann halt der Screen von oben (wobei es da egal ist welches Auto es ist, alle 4 anderen funktionieren nicht außer diese VehicleID).
    Ziemlich merkwürdiger Fehler, allerdings nichts was sich nicht lösen lässt. ;)

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht


  • Lösche ich die Include allerdings aus dem Script (vFunc.inc benutzt dies impl.inc, mit vFunc kann man u.a. die VehicleColors auslesen, brauche ich aber sowieso nicht mehr), bleibt nur noch die eine Fehlermeldung mit der createFrakCar Zeile.

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

  • Ändere das mal zu:
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    /*P:2("Hooks_OnDialogResponse called: %d, %d, %d, %d, \"%s\"", playerid, dialogid, response, listitem, inputtext);
    new
    end = _:YSI_g_sCallbackEnd[ALS_OnDialogResponse],
    start = _:YSI_g_sCallbackStart[ALS_OnDialogResponse],
    ret = ALS_R_DialogResponse;
    while (start++ != end)
    {
    #emit PUSH.S inputtext
    #emit PUSH.S listitem
    #emit PUSH.S response
    #emit PUSH.S dialogid
    #emit PUSH.S playerid
    #emit PUSH.C 20
    #emit CONST.alt YSI_g_sCallbackAddresses
    #emit LOAD.S.pri start
    //#emit INC.pri
    //#emit STOR.S.pri start
    #emit LIDX
    #emit MOVE.alt
    #emit LCTRL 6
    #emit ADD.C 24
    #emit PUSH.pri
    #emit MOVE.pri
    #emit SCTRL 6
    #emit MOVE.alt
    #emit CONST.pri 0xFFFFFFFE
    #emit AND
    #emit PUSH.pri
    #emit LOAD.S.pri ret
    #emit AND
    #emit POP.alt
    #emit OR
    #emit STOR.S.pri ret
    if (ret < 0) return ret + 1;
    }
    return ret;*/
    return 0;
    }


    Keine Ahnung was der Sinn davon ist.
    Klappt es dann? Dann sollte auch beim kompilieren kein Fehler kommen.

  • Keiner meiner Dialoge reagiert dann mehr ^^
    Sobald ich aber die vFunc.inc (die diese impl.inc braucht) oben aus meinem Script rausmache, bleibt nur noch der 1ne Error mit OnDialogResponse at:3971. Also der andere Error in der Konsole ist dann weg.

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

  • Dann bekomme ich ganz normal die Nachricht "Glückwunsch zum Erwerb eures neuen Fraktauto! [...]", also es wird halt der ganze Code unter dem createFrakCar Befehl ausgeführt.

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

  • Gut, setze vor oder nach der kommentierten Zeile das hier hin:
    CallLocalFunction("createFrakCar", "ddffffd", fID,fahCars[id][fmodel],fahInfo[id][fs_x],fahInfo[id][fs_y],fahInfo[id][fs_z],fahInfo[id][fs_r],fcInfo[id][ffarbe]);


    Und ändere die Funktion zu einem public:
    forward createFrakCar(frakid,modelid,Float:x,Float:y,Float:z,Float:r,f_farbe);
    public createFrakCar(frakid,modelid,Float:x,Float:y,Float:z,Float:r,f_farbe)
    {
    print("1: createFrakCar wurde aufgerufen.");
    for(new i=0;i<sizeof(fcInfo);i++)
    {
    if(fcInfo[i][id_x]!=0)continue;
    print("2");
    fcInfo[i][fbesitzer]=frakid;
    print("3");
    fcInfo[i][fc_x]=x;
    print("4");
    fcInfo[i][fc_y]=y;
    print("5");
    fcInfo[i][fc_z]=z;
    print("6");
    fcInfo[i][fc_r]=r;
    print("7");
    fcInfo[i][fmodel]=modelid;
    print("8");
    switch(frakid)
    {
    case 1:
    {
    f_farbe=-1;
    }
    case 2:
    {
    f_farbe=252;
    }
    }
    print("11");
    fcInfo[i][ffarbe]=f_farbe;
    print("12");
    fcInfo[i][id_x]=CreateVehicle(modelid,x,y,z,r,f_farbe,-1,60);
    print("13");
    saveFrakCarToDB(frakid,i);
    return 1;
    }
    return 1;
    }


    Zeigt er dann den ersten print an? Bzw. läuft die Funktion dann?

  • Immer noch der 1:1 gleiche Fehler.



    (Zeile 3981 ist CallLocalFunction Zeile)
    Kann doch nicht sein, dass der Code nur für einen Wagen, und dann auch noch ausgerechnet für den LSPD Wagen funktioniert. Ist ein wenig banal.
    Aber vielen Dank für deine bisherige Mühe, weiß ich zu schätzen.


    mfg.

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

  • Das ist wirklich komisch.
    Kannst du mir via PN deinen ganzen Server Ordner schicken, dann würde ich es bei mir mal ausprobieren, ob der Fehler dort auch auftritt und falls ja, dann kann ich es direkt testen und im besten Fall beheben.


    EDIT:
    Ok, das Problem habe ich gefunden, allerdings weiß ich nicht genau, was du mit dem Code bezwecken willst.
    new fahInfo[][fchEnum] = {
    {2144.3640,-1215.9510,23.5110,90.0}
    };
    Dies hat nur einen Datensatz, du greifst in deinem Kauf-Dialog aber auf weiteres Indizes (id > 0) zu, daher geht es nur bei id = 0.


    Für was stehen denn die Koordinaten aus fahInfo?

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Das sind die Koordinaten, wo das gekaufte Auto gespawnt werden soll. Man kauft es also quasi, und am Rand (falls du es getestet hast) wird es dann gespawnt. Bei createFrakCar siehst du ja fahInfo[id] usw. und im Callback Float:x usw., das sind halt die Koordinaten wo das Auto nach dem Kauf gespawnt wird.

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen