sry natürlich muss da ein != invalid hin.
#Handy
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");
Das ist doch wieder ein völlig anderer Dialog, das ist doch kein DIALOG_LIST...da kannst du auch kein listitem nutzen.
Was hast du bitte erwartet was da rauskommt bei listitem? Das richtige listitem? Wie soll das bitte funktionieren?
Du verstehst den Code doch, wo soll der plötzlich eine 0-4 herbekommen? Wenn es nur einen Button und nichts zum auswählen gibt.
#Rage
Du musst das listitem, was er zuvor ausgewählt hat z.B. in einer PVar speichern, dann kannst du das da wiederverwenden.
Wie haste es denn geschafft auf ein leeres nicht vorhandenes Feld zu klicken?
Kannst du mal ein Bild vom Dialog machen und zeigen, was du ausgewählt hast?
Ja...sowas wie: vehicleid = PrivateVehicle[playerid][id][veh_ID] ;
Das liegt daran, dass deine Variable vehicleid immer 0 ist. Du setzt da keinen Wert.
Deshalb wenn GetVehicleModel(0) aufgerufen wird und da 0 keine gültige vehicleid ist, wird hier auch immer 0 zurückgegeben und 0-400 = -400 und dann greifst du auf diesen index zu, der natürlich nicht existiert.
Also vehicleid einen Wert zuweisen und sicher sein, dass das Auto auch existiert ![]()
Interessant wäre die vollständige Debug Meldung...
Da steht ja nicht einmal ein Fehler..
Schau mal hier rein: Schneller & strukturierter skripten
Das könnte dir helfen, dann kannst du dir einiges schenken, wie mehrere Strings, die isLoggedIn Abfrage in jedem Befehl und eine einzelne Auflistung, da solltest du eine Schleife verwenden.
Wie zum teufel, hast du modelid deklariert bzw wie verwendest du das da, so wird das nicht funktionieren.
Und zu deiner Frage, du kannst dann einfach listitem verwenden und dann weißt du, auf welches Fahrzeug er geklickt hat, nämlich:
PrivateVehicle[playerid][listitem][modelid]
Du machst dir das viel zu kompliziert.
Die innere Schleife mit dem mInfo ist komplett unnötig, da du ja durch GetVehicleModel doch schon weißt, um welches Model es sich handelt.
public tankLostTimer()
{
for(new i=GetVehiclePoolSize(); i!=0; i--)
{
if(!motor[i]) continue;
if(tank[i] <= 0)
{
tank[i] = motor[i] = 0;
SetVehicleParamsEx(i, 0, 0, 0, 0, 0, 0, 0);
}
else tank[i] -= cInfo[i][lpm] / 60;
}
for(new i=GetPlayerPoolSize(),v,m,string[24]; i!=-1; i--)
{
if(IsPlayerNPC(i) || !IsPlayerInAnyVehicle(i)) continue;
v = GetPlayerVehicleID(i), m = GetVehicleModel(v);
format(string,sizeof(string),"%.02f / %.02f",tank[v],mInfo[m][maxTank]);
PlayerTextDrawSetString(i, Tacho_TD[i][15], string);
}
return 1;
}
Alles anzeigen
Ich glaube so macht das mehr Sinn.
So brauchst du auch keine Schleifen schachteln..weil ja sonst deine Laufzeit extremst wäre..du müsstest ja jedes mal MAX_VEHICLES*MAX_VEHICLES*MAX_PLAYERS durchlaufen...das ist ja Irrsinn.
Nimm das ganze Skript und pack es in Notepad++.
Dann klicke oben bei Kodierung Konvertiere zu ANSI.
Und dann klick oben auf UTF-8 und fertig, dann sollte das wieder normal sein ![]()
so gibt es ein Fehler
Weil das Strings sind, dafür musst du [wiki]strcmp[/wiki] benutzen ![]()
if(strcmp(inputtext, Spieler[playerid][pPersoCode]) != 0)
Wichtig ist noch, dass weder inputtext noch Spieler[playerid][pPersoCode] leer sind ![]()
Hab ich doch geschrieben, einfach in der Funktion menuIsActive ganz nach oben.
Und wie auch schon erwähnt, kannst du echo benutzen, wenn dir das zu doof ist mit der Konsole.
bei deiner funktion kommt das in den logs
Du hast das aber unter das mysql_format gepackt oder? ![]()
Zu dem anderen, wie gesagt, mysql_log: https://wiki.sa-mp.com/wiki/MySQL/R33#mysql_log
Das sagt eigentlich, dass die Download.php Seite gar nicht geladen werden soll.
Und schreib mal in die Funktion menuIsActive :
echo '<script>console.log("'.$filename.'", "'. basename($_SERVER['SCRIPT_FILENAME']).'");</script>';
Kannst aber eben auch wie gesagt echo benutzen und kannst im Quellcode dann schauen, was dir ausgegeben wird.
Dann kannst du F12 drücken und in der Console, sollte dann was stehen wie downloads.php
Ich weiß nicht was du da tun willst. Weil das die() sorgt dafür, dass die Seite aufhört zu laden.
Also die ist immer Leer.
damals hat es auch funktioniert mit der länge des strings
Dann printe dir doch einfach den String, dann findest du es doch raus:
printf("%s | %d",DB_Query, strlen(DB_Query));
Der Error Log ist der mysql_log.
Wenn du diesen aktiviert hast mit mysql_log dann werden dir dort alle mysql Aufrufe angezeigt und eben auch Errors oder Warnings.