[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • Du musst für floats auch %f nehmen. :)

    Okay. Nun werden allerdings zu viele nullen angezeigt, kann man das auch irgendwie reduzieren ? Ich würde das ganz gerne dann so auch fürs Tacho übernehmen haha^^


    Und noch etwas ... ich hab mich mal eben versucht, dass Fahrzeuge aus der Datenbank geladen und erstellt werden ... Dazu habe ich folgendes gemacht:


    Enum:


    OnGameModeInit:

    Code
    LoadCars();


    und nun der stock:

    Ich hab das gefühl, dass ich irgendwas falsch verstanden habe haha^^ ... Ich habe mit absicht erstmal nur die paar sachen ausgelesen, damit ich testen kann ob es klappt :whistling:


    Mit freundlichen Grüßen
    XonarZ

  • So wie du das machst ist es nicht ganz falsch.
    Aber alles nach dem MySQL_pquery muss in eine Public Funktion die du mit MySQL_pquery aufrufst.
    Denn mit mysql_pquery kannst du die Ergebnisse vom query an eine Public Funktion weitergeben und verarbeiten.
    Also machst du es zu;_
    mysql_pquery(handle,query, "OnLoadCars");


    Dann erstellt du die neue Public Funktion:
    public OnLoadCars()
    {
    }
    Und kopierst dann den ganzen Code unter dem pquery den du gerade hast einfach in die Funktion rein.

  • Also brauche ich sozusagen 2 Callbacks / stocks um die Funktion für die Fahrzeuge zu machen oder kann ich den Query auch unter OnGameModeInit ausführen und dann an LoadCars geben ?

  • Okay. Nun werden allerdings zu viele nullen angezeigt, kann man das auch irgendwie reduzieren ? Ich würde das ganz gerne dann so auch fürs Tacho übernehmen haha^^

    %0.2f
    Damit kannst du zum Beispiel 2 Nachkommastellen anzeigen.



    Also brauche ich sozusagen 2 Callbacks / stocks um die Funktion für die Fahrzeuge zu machen oder kann ich den Query auch unter OnGameModeInit ausführen und dann an LoadCars geben ?

    Das SELECT Query kannst du bei OnGameModeInit ausführen und darüber das Callback mit den Cache Funktionen aufrufen.

  • Ja, du kannst den Query auch direkt unter OnGamemodeInit ausführen. Das macht keinen Unterschied.

    Okay. Ich habs jetzt mal einfach probiert erstmal mit 2 Stocks ... Leider hab ich anscheinend noch einen Fehler ... die Autos werden trotzdem nicht erstellt.


    Ich weiß auch leider nicht woran es liegt. Ich kann mir zwar vorstellen, dass die zuweisung mit vInfo[i] ... nicht ganz stimmt... muss ich noch irgendwie beim enum MAX_VEHICLES oder so eintragen ?


    PS: wegen dem Float hast du noch nix gesagt, kann man die iwie auf 2 Stellen hinterm Komma begrenzen ? ^^<3


    //EDIT Jeffry hat mir das mit dem Float nun schon gesagt (nicht reloaded gehabt)

  • Wie sieht dein Code jetzt aus, und wie sieht die Datenbank aus?

    Enum und new vInfo:




    OnGameModeInit:

    Code
    //LADEN
    	new query[256];
    	mysql_format(handle, query, sizeof(query), "SELECT * FROM cars WHERE laden = '1'");
    	mysql_pquery(handle, query, "OnLoadCars");


    stock OnLoadCars


    Datenbank:


    Wusste jetzt nicht ganz wie ich sonst mysql einbinden sollte ... Halt Tabelle "cars" und gleich halt ein paar einträge^^

  • new vInfo[][vehData];

    zu:
    new vInfo[50][vehData];


    Die Anzahl der Fahrzeuge musst du einmal definieren, sonst weiß der Code nicht, wie viel Speicher er reservieren soll.


    Die ID des Fahrzeugs würde ich beim Erstellen noch speichern, die wirst du sicher brauchen:
    vInfo[i][vehVID] = CreateVehicle(vInfo[i][vehMID], vInfo[i][vehX], vInfo[i][vehY], vInfo[i][vehZ], vInfo[i][vehA], vInfo[i][vehColor1], vInfo[i][vehColor2], -1);


    EDIT:
    Plus das, was LeonMrBonnie sagte. Das über mysql_pquery aufgerufene Callback muss ein public sein, sprich auch mit forward Zeile.
    stock OnLoadCars(){
    zu:
    forward OnLoadCars();
    public OnLoadCars(){


    EDIT 2:
    Und die ID ebenfalls auslesen:
    cache_get_value_name_int(i, "id", vInfo[i][vehID]);
    Die brauchst du später beim Speichern.

  • Also alle änderungen getätigt. Leider keiner Wirkung...


    vielleicht eine info von mir ... vInfo[i][vehID] soll die DBID sein, das vehMID soll das Model sein, damit ich besser abfragen kann welches Auto das ist um mit dem maximalen Tank (meinem anderem enum halt) zu vergleichen^^

  • Sollte so eigentlich klappen.
    Kannst du den Code nochmal posten?


    Gibt dir der MySQL Log etwas aus?

    ich habe zwar mysql_log(); drinne allerdings erstellt der keine mysql log^^


    forwards (hab ich ganz oben im script)

    Code
    //FORWARDS
    forward OnUserCheck(playerid);
    forward OnUserRegister(playerid);
    forward OnUserLogin(playerid);
    forward KickTimer(playerid);
    forward OnLoadCars();
    forward checkVehHealth(vehicleid);




    Enum und new vInfo

    OnGameModeInit

    Code
    //LADEN
    	new query[256];
    	mysql_format(handle, query, sizeof(query), "SELECT * FROM cars WHERE laden = '1'");
    	mysql_pquery(handle, query, "OnLoadCars");


    public OnloadCars():

  • Schau mal im Ordner /logs/plugins/mysql.txt
    Der Code sieht gut aus.

    Okay...



    Code
    [22:59:37] [ERROR] mysql_format: invalid connection handle '0'
    [22:59:37] [ERROR] mysql_pquery: invalid connection handle '0'

    das sind die zwei fehler, die nur durch den Start auftreten (ich denke mal halt wenn OnGameModeInit(); aufgerufen wird)

  • Das sieht so aus, als rufst du erst das Query zum Laden der Fahrzeuge auf und stellst danach erst die Verbindung zur MySQL Datenbank her.
    Stelle die Verbindung ganz als erstes bei OnGameModeInit her.

    WoW man bin ich dumm ... ja das ist die Lösung... Allerdings muss ich sagen, dass er nur das erste Auto geladen hat, das zweite wurde nicht gespawnt.