Nein, nur bei s also Strings musst du das angeben.
Aber das hat nichts mit dem Fehler zu tun, das sollte eigentlich funktionieren.
Kannst du mal den ganzen server_log zeigen? ![]()
Nein, nur bei s also Strings musst du das angeben.
Aber das hat nichts mit dem Fehler zu tun, das sollte eigentlich funktionieren.
Kannst du mal den ganzen server_log zeigen? ![]()
Also unabhängig von der Fehlermeldung solltest du jetzt die Länge der Strings angeben:
isfffd zu is[24]fffd
Nutzt du auch sicher das neuste Include? https://github.com/maddinat0r/sscanf/releases
Du musst hier sizeof (tInfo) verwenden ![]()
#Handy
Ist schon n bisschen her, aber ich hatte sowas auch mal geschrieben gehabt: Kilometer Anzeige / Berechnung
Da wird das automatisch in SQLite (gespeichert + geladen) & berechnet ![]()
Dort brauchst du nur über die jeweilige Funktion dem Spieler das anzeigen lassen ![]()
Dann brauchste aber kein eigenes Schnick Schnack ![]()
Naja, einfach aus %d im format überall %.02f machen ![]()
Und eben entsprechend den Typ der Variable dann auf Float: ändern.
kmstand[vID] += GetKilometers(vID);
setVehicleKM(playerid, vID);
Da setzt du das doch jeweils...wieso?
Wieso +=?
Das erhöht sich doch schon automatisch.
new vID = GetPlayerVehicleID(i);
if(!IsPlayerInVehicle(i, vID)) continue;
Das ist übrigens auch eine sehr komische Abfrage ![]()
Schreib da einfach if(!vID) continue;
Ehh wieso setzt du die Kilometer nochmal?
Du kannst doch einfach mit GetKilometers diese Verwenden, die werden doch automatisch gesetzt :o
Mir wird hier nur der erste Bann je nachdem wie oft der Spieler gebannt wird angezeigt,
Schau dir nochmal ein paar MySQL Tutorials an.
Du musst hier einen Callback verwenden, damit du dort dann die cache Funktionen verwenden kannst.
Du kannst (bzw solltest) das nicht direkt darunter nutzen.
So solltest du das machen:
ocmd:checkban(playerid, params[])
{
// if(!IsPlayerAdmin(playerid)) return 0;
if(IsNull(params)) return SendClientMessage(playerid, USAGE,"Usage: /checkban [Name]");
new str[128];
mysql_format(handle, str, sizeof(str), "SELECT * FROM Banned WHERE BannedUser = '%e'",params);
mysql_tquery(handle, str, "CheckBans", "i", playerid);
return 1;
}
forward CheckBans(playerid);
public CheckBans(playerid)
{
new count = cache_num_rows();
if(!count) return SendClientMessage(playerid, RED, "There are currently no Bans!");
SendClientMessage(playerid, USAGE, "Banlist:");
new BanAdmin[25], BannedUser[25], BanID, BannedOn[25], BannedWhy[25],BanDuration[25], shosbans[145];
for(new i; i < count; i++)
{
cache_get_value_name_int(0, "BanID", BanID);
cache_get_value_name(0, "BanAdmin", BanAdmin);
cache_get_value_name(0, "BannedUser", BannedUser);
cache_get_value_name(0, "BannedOn", BannedOn);
cache_get_value_name(0, "BannedWhy", BannedWhy);
cache_get_value_name(0, "BanDuration", BanDuration);
format(shosbans, sizeof(shosbans), "[#%d] (%s) %s has banned %s, for: %s! [Reason: %s]", BanID, BannedOn, BanAdmin, BannedUser, BanDuration,BannedWhy);
SendClientMessage(playerid, COOLRED, shosbans);
}
}
Alles anzeigen
Danke dir Kaliber
Dafür gibt es die Like Funktion ![]()
Um es noch zu erwähnen, lösche das else aus der Schleife, das ist falsch, da es dann bei dem Ersten falschen Ergebnis false returnt.
#Handy
Es gibt so viele Tutorials da draußen ![]()
Nutze sowas ![]()
Aber hier mal ein Beispiel:
$number = 10765;
$stmt = $conn->prepare("SELECT `name` FROM `users` WHERE `Number` = ?");
$stmt->bind_param('i', $number);
$stmt->execute();
if (!($res = $stmt->get_result())) {
//Nix gefunden
var_dump("Keinen Wert für Nummer $number gefunden.");
} else {
// Ausgabe aller Namen
var_dump($res->fetch_all());
}
$conn->close();
Alles anzeigen
Solltest immer Querys preparen, damit keine MySQL-Injection möglich ist ![]()
Ich versteh die Schilder nicht ![]()
Rechts quer durch die Fahrbahn zu fahren ist okay, links aber nicht? ![]()
Joa das Gestrüpp links sieht so aus, als wäre es lange nicht gegossen worden, macht jetzt nicht den Besten Eindruck für eine Stadt ![]()
Ansonsten joa, sind Bäume und grüne Sträucher und 2 Laternen ![]()
PrivateVehicle[slot][veh][vehNumberPlate]
Da hattest du dich wohl vertippt gehabt...
Das muss natürlich PrivateVehicle[VehicleOwner][slot][vehNumberPlate] heißen...
if(VehicleOwner == INVALID_PLAYER_ID)
Da ein != hin.
Hab meinen alten Code bearbeitet gehabt.
sry natürlich muss da ein != invalid hin.
#Handy
stock IsStaatsFrak(playerid)
{
switch(Spieler[playerid][pFraktion])
{
case 1,2,3,13: return 1;
}
return 0;
}
stock GetVehicleHealthIni(vehicleid)
{
new Float:CarHealth;
GetVehicleHealth(vehicleid, CarHealth);
return floatround((CarHealth - 250.0) / 7.5, floatround_floor);
}
stock GetPrivateVehicleOwner(vehicleid)
{
for(new i=GetPlayerPoolSize(),slot; i!=-1; i--)
{
for(slot=0; slot<MAX_PLAYER_VEHICLES; slot++)
{
if(vehicleid == PrivateVehicle[i][slot][vehID]) return i;
}
}
return INVALID_PLAYER_ID;
}
stock GetPrivateVehicleOwnerSlot(vehicleid,i)
{
for(new slot; slot<MAX_PLAYER_VEHICLES; slot++)
{
if(vehicleid == PrivateVehicle[i][slot][vehID]) return slot;
}
return -1;
}
ocmd:carinfo(playerid, params[])
{
if(!IsStaatsFrak(playerid)) return SendClientMessage(playerid, COLOR_WHITE, ERROR_FRAKTION);
new veh;
if(sscanf(params, "i", veh)) return SendClientMessage(playerid, COLOR_WHITE, "{3592D7}* Benutze {00CC00}/carinfo [vehicleid]");
if(veh > GetVehiclePoolSize() || veh <= 0) return SendClientMessage(playerid, COLOR_WHITE, "Ungültige Vehicleid!");
new Float:Pos[3];
GetVehiclePos(veh, Pos[0], Pos[1], Pos[2]);
if(!IsPlayerInRangeOfPoint(playerid, 30.0, Pos[0], Pos[1], Pos[2])) return SendClientMessage(playerid, COLOR_WHITE, "Du befindest dich nicht an diesem Auto!");
new string[256], CarHealthIni = GetVehicleHealthIni(veh),VehicleOwner=GetPrivateVehicleOwner(veh);
if(VehicleOwner != INVALID_PLAYER_ID)
{
new slot = GetVehicleOwnerSlot(veh, VehicleOwner);
format(string, sizeof(string), "Allgemeines:\tBesitzer: %s (ID: %d)\n\t\tFahrgestellnummer: %d\n\t\tKennzeichen: %s\n\t\tModel: %s\n\t\tFarbe: %d / %d\n\nSonstiges:\tZustand: %d Prozent\n\t\tTank: %.1f L\n\t\tKilometerstand: %.1f km",
PrivateVehicle[VehicleOwner][slot][vehBesitzer], VehicleOwner, PrivateVehicle[VehicleOwner][slot][vehFahrgestell], PrivateVehicle[slot][veh][vehNumberPlate], VehicleName[GetVehicleModel(veh)-400], PrivateVehicle[VehicleOwner][slot][vehColor1], PrivateVehicle[VehicleOwner][slot][vehColor2], CarHealthIni,
Vehicle[veh][vehFuel], Vehicle[veh][vehKMStand]);
ShowPlayerDialog(playerid, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
}
else if((VehicleOwner = IsAFraktionsVeh(veh)) != INVALID_PLAYER_ID)
{
format(string, sizeof(string), "Allgemeines:\tBesitzer: %s\n\t\tFahrgestellnummer: %d\n\t\tKennzeichen: %s\n\t\tModel: %s\n\t\tFarbe: %d / %d\n\nSonstiges:\tZustand: %d Prozent\n\t\tTank: %.1f L\n\t\tKilometerstand: %.1f km",
GetVehicleFraktionName(veh), fVehicle[VehicleOwner][vehFahrgestell], fVehicle[VehicleOwner][vehNumberPlate], VehicleName[GetVehicleModel(veh)-400], fVehicle[VehicleOwner][vehColor1], fVehicle[VehicleOwner][vehColor2], CarHealthIni, Vehicle[veh][vehFuel], Vehicle[veh][vehKMStand]);
ShowPlayerDialog(playerid, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "Dieses Fahrzeug hat keinen Besitzer.");
}
return 1;
}
Alles anzeigen
So sollte das schon eher funktionieren, vorrausgesetzt IsAFraktionsVeh gibt dir eine eindeutige ID zurück und nicht nur 0 oder INVALID_PLAYER_ID.
Pack eventuell unter das PlayerTextDrawSetString mal ein PlayerTextDrawShow.
Danke dir für die Mühe, nur leider passiert nix ...
Dann lade mal 1. crashdetect und schaue ob irgendwelche Fehler auftreten ![]()
2. Hau in den Timer mal ein print, damit du sicher bist, dass das auch aufgerufen wird ![]()
Was ein Messi Code...
der stimmt vorne und hinten nicht.
Ja...oben im DIALOG_CARKEYS nutzt du z.B.:
SetPVarInt(playerid, "carkey_listitem", listitem);
und unten im DIALOG_FAHRZEUG sagst du:
new id = GetPVarInt(playerid, "carkey_listitem");
DeletePVar(playerid, "carkey_listitem");