Wenn ich als Beispiel: 1.05 eingebe, erkennt er es als 1.04 ... muss ich also den Wert Manuell erhöhen ?
Ja, da entsteht ein kleiner Rundungsfehler.
So kannst du es lösen:
Wenn ich als Beispiel: 1.05 eingebe, erkennt er es als 1.04 ... muss ich also den Wert Manuell erhöhen ?
Ja, da entsteht ein kleiner Rundungsfehler.
So kannst du es lösen:
Danke ... Leider macht er nun aus 1.04 = 1.05
Ich hab das +FLOAT_ERROR wieder weggemacht und nun macht bei 1.04 und 1.05 die richtigen ergebnisse, nur leider bei 1.49 nicht da kommt 1.5 raus...
MfG
XonarZ
Nimm den else Teil aus der Schleife und schreibe die Nachricht vor das return 1 am Ende des Befehls.
> Hab ich mal gemacht (also eig unter dem if(strcmp(choosed,"duty",true) == 0) > da kam dann die nachricht, dass ich einen schlüssel habe.
> Unter der for new schleife kam der fehler (1029) : error 029: invalid expression, assumed zero
> auch ohne das else
Wie sieht der Code jetzt aus und in welcher Zeile ist der Error?
Darf ich mal fragen, wie deine weiteren Abfragen aussehen und wofür du das brauchst?
Denn es tritt immer bei Floating Operationen ein Fehler auf.
So passt es eigentlich, das else brauchst du ja nicht. So sollte es keinen Fehler geben.
Die Zeile mit GetPlayerVehicleID kannst du vor die Schleife schreiben, das Fahrzeug des Spielers ändert sich ja nicht mit jedem Schleifendurchlauf.
Das Ding ist, diese Nachricht, dass ich Einen schlüssel habe bekomme ich sowohl zufuß, als auch tatsächlich in einem Pilot Vehicle.
Nur wenn ich in einem Normalen Fahrzeug sitze (also keins von >pilotvehs) bekomme ich die fehlermeldung, dass ich in keinem
pilot veh bin
Füge vor die Schleife noch folgendes ein:
if(IsPlayerInAnyVehicle(playerid))
{
//Hier dann die Schleife drin
}
//Hier danach die Meldung lassen
So funktionierts, danke
Darf ich mal fragen, wie deine weiteren Abfragen aussehen und wofür du das brauchst?
Denn es tritt immer bei Floating Operationen ein Fehler auf.
if(!literCount){
new name[64], kraftstoff[64];
GetPVarString(playerid, "kraftstoff", kraftstoff, 64);
format(name, sizeof(name), "%s Tanken", kraftstoff);
format(string, sizeof(string), "Wie viel Liter %s möchtest du Tanken?", kraftstoff);
SPD(playerid, DIALOG_TANKEN_LTR, DIALOG_STYLE_INPUT, name, string, "Tanken", "Abbrechen");
}else{
if(literCount < 1){
return SCM(playerid, COLOR_RED, "Du musst mindestens 1 Liter Tanken");
}else{
format(string, sizeof(string), "Du hast %0.2f Liter eingetragen", literCount);
return SCM(playerid, COLOR_RED, string);
}
}
Alles anzeigen
Ich habe mein Tanksystem so strukturiert, dass mein Tank ein Float ist... wenn der Motor an ist, verliert das Fahrzeug jede Sekunde an gewissen Wert beim Kraftstoff welcher ebenfalls als Float deklariert ist...
Wenn ich jetzt also tanken will, dann soll man auch 1.54 liter als Beispiel tanken können, weil halt nur so viel fehlen.
MfG
XonarZ
Hmm, also da du das nur auf die 2. Stelle genau haben willst, funktioniert das eigentlich perfekt:
//Test-Code:
printf("1.04 == %.02f",floatstr("1.04")+FLOAT_ERROR);
printf("1.50 == %.02f",floatstr("1.5")+FLOAT_ERROR);
printf("1.49 == %.02f",floatstr("1.49")+FLOAT_ERROR);
printf("1.54 == %.02f",floatstr("1.54")+FLOAT_ERROR);
//Output:
1.04 == 1.04
1.50 == 1.50
1.49 == 1.49
1.54 == 1.54
Alles anzeigen
Also bei mir funktioniert das alles perfekt.
Kann es sein, dass du bei der Zuweisung einen Fehler gemacht hast oder so?
Alles anzeigen
Hmm, also da du das nur auf die 2. Stelle genau haben willst, funktioniert das eigentlich perfekt:
CAlles anzeigen//Test-Code: printf("1.04 == %.02f",floatstr("1.04")+FLOAT_ERROR); printf("1.50 == %.02f",floatstr("1.5")+FLOAT_ERROR); printf("1.49 == %.02f",floatstr("1.49")+FLOAT_ERROR); printf("1.54 == %.02f",floatstr("1.54")+FLOAT_ERROR); //Output: 1.04 == 1.04 1.50 == 1.50 1.49 == 1.49 1.54 == 1.54
Also bei mir funktioniert das alles perfekt.
Kann es sein, dass du bei der Zuweisung einen Fehler gemacht hast oder so?
Mein Dialog_response für diesen DIALOG mit dem Inputtext sieht so aus:
if(dialogid == DIALOG_TANKEN_LTR){
if(response == 0) return SCM(playerid, COLOR_BLUE, "[INFO] {FFFFFF}Du hast den Tankvorgang abgebrochen");
if(response == 1){
new string[128];
new Float:literCount = floatstr(inputtext);
if(!literCount){
new name[64], kraftstoff[64];
GetPVarString(playerid, "kraftstoff", kraftstoff, 64);
format(name, sizeof(name), "%s Tanken", kraftstoff);
format(string, sizeof(string), "Wie viel Liter %s möchtest du Tanken?", kraftstoff);
SPD(playerid, DIALOG_TANKEN_LTR, DIALOG_STYLE_INPUT, name, string, "Tanken", "Abbrechen");
}else{
if(literCount < 1){
return SCM(playerid, COLOR_RED, "Du musst mindestens 1 Liter Tanken");
}else{
format(string, sizeof(string), "Du hast %0.2f Liter eingetragen", literCount);
return SCM(playerid, COLOR_RED, string);
}
}
}
Alles anzeigen
Soll ich es nochmal mit dem FLOAT_ERROR probieren ?
MfG
XonarZ
new Float:literCount = floatstr(inputtext);
Ja, schreib mal hier:
new Float:literCount = floatstr(inputtext)+FLOAT_ERROR;
Eigentlich sollte dies funktionieren.
Wenn nicht, gib die Zahlen mal durch
Und mach im format mal aus dem %0.2f ein %.02f.
Alles anzeigenJa, schreib mal hier:
new Float:literCount = floatstr(inputtext)+FLOAT_ERROR;
Eigentlich sollte dies funktionieren.
Wenn nicht, gib die Zahlen mal durch
Und mach im format mal aus dem %0.2f ein %.02f.
Jetzt geht es... Danke dir... Eine frage hab ich noch:
Ich kann doch den literCount mittels SetPVarFloat Speichern und GetPVarFloat aufrufen oder ? weil wenn man SetPVarFloat eingibt kommt ja eine Parameterliste aber bei GetPVarFloat nicht^^
MfG
XonarZ
Ja, ist irgendwie komisch, manche Funktionen buggen und werden nicht angezeigt.
Da hilft ein schneller Blick ins Wiki: [wiki]GetPVarFloat[/wiki] und du weißt, ahh ja die Funktion existiert
Und natürlich, kannst du das damit zwischenspeichern
Hey, habe eine Frage:
Habe ein Öl System für Fahrzeuge.
0.01 Liter Öl werden ungefähr jede Minute abgezogen bei einer Chance von 25 Prozent, da Autos ja auch so nicht immer Öl verlieren.
Jetzt ist es so, dass der Timer immer läuft. Kann ich theoretisch innerhalb der Minute sagen wir bei der Hälfte den Motor neu einschalten oder das Fahrzeug verlassen und wieder reingehen, fängt der Timer dann wieder bei 0 an?
Sonst könnte man das ja umgehen indem man es dann immer macht um Öl zu sparen
Der Timer wird unter public OnGameModeInit() gestartet.
Die Frage klingt kompliziert ich weiß
Und habe mich das schon immer gefragt genauso beim Sprit Abzug.
Prinzipiell ist das so, ja.
Das würde ich aber ganz einfach machen: Ziehe beim Start des Motors 0.01l Sprit ab, dann macht das dafür schon mal niemand. Der Start des Motors braucht ja auch etwas Sprit.
Das gleiche machst du mit dem Öl, nur eben mit der 25% Chance. Somit versucht niemand, dies zu umgehen.
Nabend ich hab mal wieder eine kleine Frage...
Ich habe in der Datenbank als bizinhaber und teilhaber die datenbank id vom spieler drinne ... nun möchte ich die Namen auslesen (auch wenn sie offline sind) ... Leider komme ich gerade nicht so ganz klar...
public getSpielerName(playerid){
new row, query[512], Name[MAX_PLAYER_NAME];
mysql_format(handle, query, sizeof(query), "SELECT * FROM user WHERE id = '%i'", playerid);
mysql_pquery(handle, query);
cache_get_row_count(row);
if(row == 0) return 0;
cache_get_value_name(0, "name", Name);
return Name;
}
und benutzen tu ich es halt so:
Ich habe beim Compilen 2 Errors: