Dann ändere bitte mal
if(IsPlayerInAnyVehicle(playerid))
zu:
if(IsPlayerInAnyVehicle(playerid) && !IsPlayerNPC(playerid))
Beiträge von Jeffry
-
-
Entferne die AUTO_INCREMENT (A_I) Einstellung bei der Spalte "id".
Dann kannst du mit einem INSERT INTO die Zeile mit der ID 3 einfügen (id im Query angeben).
-
Scheint so als sind da zwei Spieler online, einer hat die Tankart 3 und der andere keine Tankart (somit wird nichts angezeigt).
Du kannst dir ja mal die playerid mit ausgeben lassen, wie sieht es dann aus?
printf("Tankart: %d -> %s (playerid: %d)", PlayerInfo[playerid][ptankart], str5, playerid);
-
Möglicheweise ist die Query-Variable zu klein.
Aber: Mach das bitte nicht so. Das geht völlig am Sinn einer Datenbank vorbei.
Erstelle eine Tabelle mit:
- RaceID (PRIMARY KEY)
- Name
- fID (was auch immer das ist)
- rmode
Und die zweite Tabelle mit
- RaceID (PRIMARY KEY)
- CheckpointID (PRIMARY KEY)
- x
- y
- z
- cp_typ
- cp_size
Dann sparst du dir so eine Monster-Tabelle, die komplett unübersichtlich ist, sondern hast schön jeden Checkpoint für sich stehen.
-
Hast du denn bereits Fraktionen in deinem Code?
Wenn ja, poste bitte mal einen Beispielcode zu deinen Fraktionen, am besten einen aussagekräftigen Befehl oder ähnliches. -
C:\Program Files\Google\German Next Era Life - v2.5\pawno\include\zcmd.inc(118) : warning 201: redefinition of constant/macro (symbol "OnPlayerCommandText")
OnPlayerCommandText wird hier überschrieben, das solltest du prüfen warum. Möglicherweise wird es doppelt oder falsch gehookt, den genauen Grund kann man aus der Warnung aber nicht erkennen.
C:\Program Files\Google\German Next Era Life - v2.5\gamemodes\FutureStunt.pwn(205) : warning 201: redefinition of constant/macro (symbol "DIALOG_SUPMOBIL")
Der #define DIALOG_SUPMOBIL existiert zwei mal im Code, entfernen einen davon.
C:\Program Files\Google\German Next Era Life - v2.5\gamemodes\FutureStunt.pwn(5818) : warning 202: number of arguments does not match definition
C:\Program Files\Google\German Next Era Life - v2.5\gamemodes\FutureStunt.pwn(5819) : warning 202: number of arguments does not match definition
C:\Program Files\Google\German Next Era Life - v2.5\gamemodes\FutureStunt.pwn(5820) : warning 202: number of arguments does not match definitionHier stimmt die Anzahl der Parameter nicht. Poste gegebenenfalls den Code dazu.
C:\Program Files\Google\German Next Era Life - v2.5\gamemodes\FutureStunt.pwn(54722) : warning 225: unreachable code
Diese Zeile wird nie erreicht, da zuvor ein oder mehrere returns stehen, die es unmöglich machen, dass diese Zeile (und nachfolgender Code auf entsprechender Ebene) nie erreicht wird.
C:\Program Files\Google\German Next Era Life - v2.5\gamemodes\FutureStunt.pwn(63322) : warning 203: symbol is never used: "frak"
Du hast irgendwo ein "new frak;" deklariert. Dies wird nie verwendet und kann entfernt werden.
-
Das sieht korrekt aus.
Was wird dir, wenn du es so schreibst, im Server Log ausgegeben, wenn du es so ausprobierst?
public Speedometer(playerid)
{
if(IsPlayerInAnyVehicle(playerid))
{
//TextDrawHideForPlayer(playerid, Profico[playerid]);
//TextDrawHideForPlayer(playerid, punkenun[playerid]);
new vehicleid,Float:speed_x,Float:speed_y,Float:speed_z,Float:final_speed,speed_string[256],final_speed_int, Float:chealth, str5[128];
vehicleid = GetPlayerVehicleID(playerid);
if(GetVehicleModel(vehicleid) == 0) return 1;
GetVehicleVelocity(vehicleid,speed_x,speed_y,speed_z);
final_speed = floatsqroot(((speed_x*speed_x)+(speed_y*speed_y))+(speed_z*speed_z))*175; // 136.666667 = kmph // 85.4166672= mph
final_speed_int = floatround(final_speed,floatround_round);
GetVehicleHealth(vehicleid, chealth);
new LocationZone[MAX_ZONE_NAME];
GetPlayer2DZone(playerid, LocationZone, MAX_ZONE_NAME);
if(PlayerInfo[playerid][ptankart] == 1)
{
format(str5,sizeof(str5),"~B~Tankart: ~W~Benzin");
}
else if(PlayerInfo[playerid][ptankart] == 2)
{
format(str5,sizeof(str5),"~B~Tankart: ~W~Diesel");
}
else if(PlayerInfo[playerid][ptankart] == 3)
{
format(str5,sizeof(str5),"~B~Tankart: ~W~Biogas");
}
else if(PlayerInfo[playerid][ptankart] == 4)
{
format(str5,sizeof(str5),"~B~Tankart: ~W~Kerosin");
}
printf("Tankart: %d -> %s", PlayerInfo[playerid][ptankart], str5);
format(speed_string,sizeof(speed_string),"~B~Fahrzeug: ~W~%s~n~~B~Km/h: ~W~%d km/h~n~~B~Treibstoff: ~W~%dl/%dl~n~~B~GPS: ~W~%s~n~%s ",VehicleName[GetVehicleModel(vehicleid)-400], final_speed_int, Gas[vehicleid],GetGasMax(GetVehicleModel(vehicleid)), LocationZone, str5);
TextDrawSetString(Speedo[playerid], speed_string);
}
return 1;
} -
Für das Register und Login System verweise ich dich an dieses Tutorial:
[jTuT] Fraktions-Fahrzeug-System mit MySQL R39-2Das wird dir sicher weiterhelfen, in allen Belangen.
-
Poste diesen Code bitte mal, bei dem die Abfrage geht.
-
Poste bitte mal deinen Befehl zum Tanken eines Fahrzeugs.
Dort müsste ja die Tankart auch berücksichtigt werden, oder? -
Theoretisch schon, aber es würde mehr Sinn machen, wenn die Tankart mit dem Fahrzeug verbunden ist, anstatt mit dem Spieler.
Außerdem könntest du einen Switch nutzen, falls noch mehr Tankarten hinzu kommen.
-
GetVehicleModel gibt 0 zurück.
Füge, um das abzufangen, nach
vehicleid = GetPlayerVehicleID(playerid);
das ein:
if(GetVehicleModel(vehicleid) == 0) return 1; -
1) Entferne die Spalte "id", die darf nicht vorhanden sein.
2) Entferne das Häkchen bei "A_I" bei beiden Spalten (Spielername & Grund). -
Kannst du den Code posten, mit dem du die Tabelle versuchst zu erstellen?
Oder einen Screenshot von der grafischen Oberfläche, falls du sowas nutzt. -
Du kannst den Actor an der Position des Interiors erstellen, er ist dann automatisch drin.
Du kannst dem Actor aber kein spezielles Interior zuweisen, also wenn eine Position (z.B. Haus) von zwei Interior IDs verwendet wird, dann steht er in beiden Interior IDs drin.
-
Wenn du keine Meldung haben willst ist es relativ einfach:
new query1[256];
format(query1, sizeof(query1), "INSERT INTO log (Spielername, Grund) VALUES('%s', 'Test');", SpielerName(playerid));
print(query1);
mysql_function_query(dbhandle, query1, false, "", "");
Für Testzwecke kannst du ja direkt in der Datenbank schauen, ob es drin steht.Nur eines musst du beachten:
Setze sowohl Spielername als auch Grund in der Datenbank als PRIMARY KEY. Dann kann eine Kombination nur einmal existieren. -
Soll eine Meldung ausgegeben werden, wenn die Kombination bereits existiert?
-
Schreibe vor der Abfrage Zeile:
new count;
for(new i=0; i<strlen(inputtext); i++) if(inputtext[i] >= '0' && inputtext[i] <= '9') count++;Und ersetze das IsNumeric(inputtext) in der Abfrage mit count.
-
Die Zeile ist zu lang.
Teile den Text des Dialoges mit format auf zwei Zeilen Code in eine Variable auf. -
Frage lautet: Ist es möglich in der MySQL abfrage einzubauen das er prüft ob der Spieler bereits einen Dateneinsatz hat?
Je nach dem was du vor hast, kannst du - anstatt 2 Statements (SELECT -> INSERT / UPDATE) - das Ganze mit einem Statement erledigen:
http://dev.mysql.com/doc/refma…/insert-on-duplicate.html