Beiträge von XonarZ

    Mach das

    in Zeile 14 weg.
    Außerdem musst du KMTimer auch mit [playerid] als Array schreiben, sonst wird es für den nächsten Spieler überschrieben und du kannst den Timer für den ersten Spieler nicht mehr beenden.

    Also muss ich


    Code
    KMTimer[MAX_PLAYERS]


    statt



    Code
    KMTimer


    Das mit dem Return hab ich dann gerade durchs probieren auch festgestellt xD


    MfG
    XonarZ

    Dort speicherst du den Tank in der Float "cInfo[id][c_tank]" aber in der Abfrage verwendest du "tank[cInfo[id][id_x]]"Ich denke mal das im Vehicleenum ist das richtige, also ersetz einfach das "tank[cInfo[id][id_x]]" mit "cInfo[id][c_tank]"

    Okay also das mit dem tank habe ich gefixxt ... Ich lasse es erst in c_tank auslesen, damit ich die variable habe weil ich für tank ja die FahrzeugID brauche (wegen MAX_VEHICLES) und weise dann dem tank[MAX_VEHICLES] den wert zu der in c_tank steht...


    Mein /motor befehl:


    Als erstes print bekomme ich die ID in der ich sitze und als motorwert -1 raus ... Warum kann er dann aber nicht motor[vID]; auf 1 setzen bzw. warum geht der motor nicht an? das Textdraw wird auch grün.


    //EDIT Der Print mit dem motorvar kommt auch nicht ... also joa ... ich steh aufm schlauch


    //EDIT2 @Jeffry ja ist. wie gesagt das mit dem Tank auslesen hat nun funktioniert


    MfG
    XonarZ

    Du liest es als Float aus aber erstellst es nicht als Float.


    new Float:tank[MAX_VEHICLES];

    Ich hab mal eine weitere frage dazu ... Warum erkennt er dann allerdings tank als 0.00 an obwohl in der Datenbank 3.00 (3) steht...



    Code
    cache_get_value_name_float(i, "tank", cInfo[id][c_tank]);
    cache_get_value_name_float(i, "lpm", cInfo[id][lpm]);
    cache_get_value_name_float(i, "kmstand", cInfo[id][kmstand]);
    cInfo[id][id_x] = CreateVehicle(cInfo[id][model], cInfo[id][c_x], cInfo[id][c_y], cInfo[id][c_z], cInfo[id][c_r], cInfo[id][c_color1], cInfo[id][c_color2], -1);
    tank[cInfo[id][id_x]] = cInfo[id][c_tank];
    printf("VehicleID: %i hat %0.2f Liter", cInfo[id][id_x], tank[cInfo[id][id_x]]);

    Da kommt dann als VehicleID die ID raus, in der ich gerade sitze (2) aber dann steht 0.00 liter... Obwohl in der Datenbank 3 Liter stehen.


    MfG
    XonarZ

    Moin Leute ... Ich steh gerade mal (wie so oft) auf dem schlauch ...


    ich schreibe gerade mein Motor & Tanksystem um ... Ich möchte, den Tank des jeweiligen Fahrzeugs aus der Datenbank auslesen... Leider funktioniert das nicht so wie ich das will...


    Was ich habe:


    Code
    new tank[MAX_VEHICLES];
    
    
    cache_get_value_name_int(i, "color2", cInfo[id][c_color2]);
    ZEILE 996: cache_get_value_name_float(i, "tank", tank[cInfo[id][id_x]]);

    Leider kommt beim Compilen folgender Warning:



    Code
    ...selfmade.pwn(996) : warning 213: tag mismatch
    Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    1 Warning.

    MfG
    XonarZ

    Sehr geehrte Community,


    ich habe mal eine frage bzw. ein kleines Problem...


    Ich bekomme folgenden CrashDetectFehler:


    Code
    [10:14:13] [debug] Run time error 4: "Array index out of bounds"
    [10:14:13] [debug]  Attempted to read/write array element at index 16 in array of size 16
    [10:14:13] [debug] AMX backtrace:
    [10:14:13] [debug] #0 000085c0 in public E@_OnPlayerStateChange (0, 2, 1) in selfmade.amx
    [10:14:13] [debug] #1 native CallLocalFunction () in samp-server.exe
    [10:14:13] [debug] #2 00006e14 in public OnPlayerStateChange (0, 2, 1) in selfmade.amx



    Mein OnPlayerStateChange Welches dies verursacht ist folgendes:


    Code
    for(new j = 0; j < sizeof(Tacho_TD); j++){
       PlayerTextDrawShow(playerid, Tacho_TD[playerid][j]);
    }

    Wenn ich das sizeof(Tacho_TD) einfach nur zu 16 änder sprich:


    Code
    j < 16

    Dann kommt kein Fehler... Tacho_TD wird wie folgt definiert:

    Code
    new PlayerText:Tacho_TD[MAX_PLAYERS][16];

    Insgesamt werden allerdings nur die Textdraws bis [15] geladen (mehr gibt es auch nicht)..



    Jemand eine Idee ? @Jeffry vielleicht ? ^^ Ich will ungern die 16 als feste Zahl eintragen, falls noch etwas zum Tacho hinzukommt.


    MfG
    XonarZ

    Dann gibt die Funktion das falsch zurück. Was hast du denn in der Include noch angepasst? Nicht, dass dadurch ein falscher Wert zustande kommt.

    Ich habe nix angepasst, habe nur bei den Zeilen die als "Loose Identation" angegeben wurden, eingerückt. Allerdings nix entfernt oder bearbeitet. Ansonsten nur das was du sagtest mit dem ResetMetersTraveled... Das lustige ist ja: wenn ich es als %0.2f mache ... dann kommen Werte wie: 0.01, 0.02, 0.03 usw. raus.


    Code
    public setKiloMeter(playerid){
    	new vID = getCarID(playerid), string[256];
    	if(vID == INVALID_VEHICLE_ID)return 0;
    	cInfo[vID][kmstand] += GetKilometers(GetPlayerVehicleID(playerid));
    	format(string, sizeof(string), "%i km", cInfo[vID][kmstand]);
    	TextDrawSetString(Tacho_TD[6], string);
    	printf("%0.2f", GetKilometers(GetPlayerVehicleID(playerid)));
    	ResetMetersTraveled(GetPlayerVehicleID(playerid));
    	return 1;
    }

    //EDIT ich habe das Problem gelöst... Lösung:


    Ich habe in meinem Enum für cInfo bei kmstand ein Float: vor geschrieben. Nun lasse ich die Werte auch als Float in die Datenbank speichern und nun funktioniert auch das Addieren.


    MfG
    XonarZ

    Printe bitte das GetKilometers direkt, nicht das Array.

    Das ergebnis: 1012202996


    Das ist komisch irgendwie ... Das Callback wird jede Sekunde aufgerufen.


    Code
    public setKiloMeter(playerid){
    	new vID = getCarID(playerid), string[256];
    	if(vID == INVALID_VEHICLE_ID)return 0;
    	cInfo[vID][kmstand] += GetKilometers(GetPlayerVehicleID(playerid));
    	format(string, sizeof(string), "%i km", cInfo[vID][kmstand]);
    	TextDrawSetString(Tacho_TD[6], string);
    	printf("%i", GetKilometers(GetPlayerVehicleID(playerid)));
    	ResetMetersTraveled(GetPlayerVehicleID(playerid));
    	return 1;
    }

    Die Include arbeitet nicht mit Floats, nur mit ganzen Zahlen.Lass dir mal mit %i den Wert von GetKilometers direkt printen.


    Das ist richtig so. Dein vID ist in dem Fall ja der Index, mit dem auf cInfo zugegriffen wird, um auf die richtige vehicleid zu kommen


    Also leider gehts auch nicht mit %i ... da kommt halt in der Console folgendes raus: 1318926965


    Ich hab folgenden callback nun:


    Code
    public setKiloMeter(playerid){
    	new vID = getCarID(playerid), string[256];
    	if(vID == INVALID_VEHICLE_ID)return 0;
    	cInfo[vID][kmstand] += GetKilometers(GetPlayerVehicleID(playerid));
    	format(string, sizeof(string), "%i km", cInfo[vID][kmstand]);
    	TextDrawSetString(Tacho_TD[6], string);
    	printf("%i", cInfo[vID][kmstand]);
    	ResetMetersTraveled(GetPlayerVehicleID(playerid));
    	return 1;
    }

    In der Include:#define ResetMetersTraveled(%0) E@_R[%0] = 0;
    zu:
    #define ResetMetersTraveled(%0) E@_R[%0] = 0

    Vielen Dank :)


    Ich habe jetzt folgendes "Problem" ... Ich komme gerade nicht auf die Lösung ...


    Sobald ich den Motor anschalte (/motor) startet ein Timer ... das dazugehörige Callback sieht wie folgt aus:

    Das Problem ist jetzt, dass der Float wert der raus kommt (cInfo[vID][kmstand]) ... wie folgt aussieht: 1316049920.00


    Was mir noch aufgefallen ist: Ich sitze im Spiel im Fahrzeug mit der ID: 5 ... Ich lasse ja cInfo[vID][id_x] printen und vID ... cInfo[vID][id_x] gibt in der Konsole eine 5 aus ... vID jedoch gibt eine 3 aus... Woran liegt das ?


    GetCarID:


    Code
    stock getCarID(playerid){
    	for(new i = 0; i < sizeof(cInfo); i++){
         new vID = GetPlayerVehicleID(playerid);
         if(cInfo[i][id_x] == vID) return i;
    	}
    	return INVALID_VEHICLE_ID;
    }


    Ich hoffe das ist eine "kleine" Scripting frage :?:

    Moin,


    ich habe mir das Include https://forum.sa-mp.com/showthread.php?t=404367 nun mal angeschaut. Ich habe auch die Warnings entfernt die man durch dieses Include erhält.


    Nun ist es so, dass ich einen Timer Starte, sobald der Motor an geschaltet wird:

    Code
    SetTimerEx("setKiloMeter", 1000, true, "ii", playerid, vID);


    ganz oben bei meinen forwards hab ich natürlich auch den Forward:


    Code
    forward setKiloMeter(playerid, vehicleid);

    Die Funktion setKiloMeter sieht wie folgt aus:


    Code
    public setKiloMeter(playerid, vehicleid){
        printf("%d",GetKilometers(GetPlayerVehicleID(playerid)));
        ResetMetersTraveled(vehicleid); //ZEILE 738
    	return 1;
    }

    Nun bekomme ich allerdings beim Compilen immer folgenden Fehler:



    Code
    ...selfmade.pwn(738) : error 036: empty statement

    Zeile 738 habe ich Markiert


    //EDIT //EDIT ENTFERNT DA DOPPELT


    MfG
    XonarZ

    Moin


    ich bin langsam am verzweifeln...


    Ich möchte gerne abfragen ob der Tank leer ist vom Auto... Der sagt mir die ganze zeit, dass der Tank leer ist obwohl laut DB 5.00 Liter drinne stehen. Der Tank wird auch in die Variable (siehe OnPlayerCarsLoad) geladen...



    Nun versuche ich mein Motor Befehl wie folgt zu gestalten:

    mein Stock GetVehicleID (für cID):



    Code
    getCarID(playerid){
    	new vID = GetPlayerVehicleID(playerid);
    	for(new i = 0; i < sizeof(cInfo); i++){
    	    if(cInfo[i][id_x] != vID) continue;
    	    return cInfo[i][id_x];
    	}
    	return 0;
    }

    //EDIT habe eine Lösung gefunden, aber muss ich wirklich jedes mal, wenn ich auf die Info von dem Fahrzeug in dem man sitzt, zugreifen will, muss ich dann echt jedes mal die Schleife machen?:



    Moin :D


    ich mal wieder^^


    Ich wollte mal fragen, wie ich am besten eine Flüssige Geschwindigkeitsanzeige realisiere ? Ich würde ungern jede Sekunde updaten ... Sondern halt wirklich flüssig. Mir würde als Funktion nur nen Timer einfallen ...


    Ansonsten habe ich die Funktion OnPlayerUpdate entdeckt und frage mich wann die so aufgerufen wird ? Kann man die benutzen um eine Flüssige Geschwindigkeit anzuzeigen ?


    //EDIT also ich würde mit nem Timer jede Millisekunde nen Public aufrufen, glaube aber, dass die Performance drunter leidet


    MfG
    XonarZ

    LOAD gehört zur SQL Syntax, daher der Fehler.
    Schreibe es so:
    mysql_format(handle, query, sizeof(query), "SELECT * FROM cars WHERE owner = '%i' AND `load` = '1'", pInfo[playerid][db_id]);


    LOAD wird damit sozusagen "escaped" und kann verwendet werden.

    Danke :) ... Hab mich erst gewundert, warum der nicht lädt. Ich hab natürlich in der Datenbank "load" als int ... Daher hab ich noch die '' weggemacht und nun klappts haha


    (für die leute die evt. ein ähnliches Problem haben :D )

    Moin,


    ich hab mal eine Frage, ist es nicht möglich einen Query mit 2 WHERE Clauseln zu schreiben ?


    Ich habe nämlich folgenden Query:

    Code
    mysql_format(handle, query, sizeof(query), "SELECT * FROM cars WHERE owner = '%i' AND load = '1'", pInfo[playerid][db_id]);


    Als MySQL Error bekomme ich allerdings:


    Code
    [16:05:40] [ERROR] error #1064 while executing query "SELECT * FROM cars WHERE owner = '1' AND load = '1'": You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'load = '1'' at line 1

    Ich bin das irgendwie noch son bisschen durch php gewöhnt, da kann man ja sowas machen.

    for(new i = 0; i < sizeof(rows); i++)
    zu:
    for(new i = 0; i < rows; i++)


    Das hast du gut versteckt ;)

    Danke :D


    Spaß haha ... Oh man ist eig. nicht ziel der sache aber nun draus gelernt.


    Ich habe jetzt die Funktion aus dem Kopf geschrieben gehabt, naja son bisschen die SpielerInfo aus deinem Tutorial halt umgesetzt. Dafür, dass ich jetzt erst angefangen habe, doch bestimmt nicht schlecht oder? :D


    haha gut jetzt gehts :D


    Vielen Dank

    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.

    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)