Nein, nicht das, das hat nichts mit dem Besitzername zu tun.
Aber versuche es alternativ mal so:
ocmd:carinfo(playerid,params[])
{
if(!params[0]) return SendClientMessage(playerid, 0xFF0000FF, "Benutze: /carinfo [id]");
new carid = strval(params), string[145];
if(carid < 1 || carid >= MAX_VEHICLES)return SendClientMessage(playerid, 0xFF0000FF, "Ungültige ID.");
for(new i = 0; i < MAX_PLAYERS; i++)
{
for(new j = 0; j < MaxVeh; j++)
{
if(PlayerCar[i][j][CarId] == carid)
{
GetPlayerName(i, string, MAX_PLAYER_NAME);
format(string,sizeof(string),"Besitzer: %s | Tankinhalt: %d",string,PlayerCar[i][j][Benzin]);
return SendClientMessage(playerid,0xFFFFFFFF,string);
}
}
}
return SendClientMessage(playerid, 0xFF0000FF, "Error: Dieses Fahrzeug gehört keinem Spieler.");
}
Beiträge von Jeffry
-
-
Und wo bzw. wie wird dem CarOwner ein Wert zugewiesen? Bei der Erstellung bzw. beim Laden? Poste davon bitte auch den Code.
-
Funktioniert es dann so wie du es möchtest?
Wenn ja, dann sehe ich trotzdem noch einen Fehler, und zwar weist du der Variable "engine" in dem Befehl nie einen Wert zu, sprich du kannst den Motor nicht mehr ausschalten. Das musst du noch via GetVehicleParamsEx abfragen. -
Poste dann bitte mal dein ganzes OnDialogResponse wie es momentan ist, mit den Errors, und markiere die Fehlerzeilen.
-
Ah, jetzt seh ichs. Du hast die Abfrage vergessen, ob strcmp 0 zurück gibt.
if (strcmp
Zu
if (!strcmpstrcmp gibt 0 zurück, wenn beide Strings identisch sind.
-
Versuche es mit "cmdtext" anstatt "cmd" im strcmp.
-
Speicherst du in PlayerAuto[i][vkey] den Spielername dem das Fahrzeug gehört? Die Bezeichnung scheint mir nicht passend.
Wenn nein, wo speicherst du den Besitzer des Fahrzeugs, und wie? -
Nicht ganz unten im Gamemode.
Ganz unten in OnDialogResponse, so:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
//Andere Dialoge...
//...
//...
//Hier dein Dialog:
if(dialogid == DIALOG_INVITE)
{
if(response) // If they clicked 'Yes' or pressed enter
{
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Du hast die Einladung angenommen.");
}
else // Pressed ESC or clicked cancel
{
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Du hast die Einladung abgelehnt!");
}
return 1; // We handled a dialog, so return 1. Just like OnPlayerCommandText.
}
//Bleibt stehen.
return 0;
}Oder auch ganz oben in OnDialogResponse, wie du willst. Oder, wenn du weißt wo, geht es auch irgendwo zwischen zwei Dialogen drin.
-
Dann setzt du das Interior nicht mehr, bzw. nicht mehr zurück zu 0, je nach dem wo du spawnen willst.
Poste gegebenenfalls mal den Teil von OnPlayerSpawn. -
sollte eigentlich auf einem Objekt sein, welches an der Wand hängt!
Also das Objekt (18454), das du erstellst, sieht so aus, im Original:

Sicher, dass du die richtige ID (18454) angegeben hast und dieses (??) Objekt nutzen willst?
EDIT: (Post unten)
@Wetschi
Passiert
Gerne! -
[19:35:46] [ERROR] CMySQLQuery::Execute[] - (error #1452) Cannot add or update a child row: a foreign key constraint fails (`samp5662_prp`.`RM_account_banksafe`, CONSTRAINT `RM_account_banksafe_ibfk_1` FOREIGN KEY (`_id`) REFERENCES `RM_account_main` (`id`) ON DELETE CASCADE)
Also der Fehler ist dieser hier.
So wie es aussieht können die Datensätze auf Grund fehlender oder falscher Verbindungen nicht eingefügt werden.
Da ich aber deine Datenbank-Struktur nicht kenne, kann ich dir auch nicht sagen, wie sie richtig aufgebaut sein muss, bzw. wie die Queries korrekt aussehen sollten.Am besten du wendest dich an den Ersteller des Codes (bietet er ja auch an) bzw. der Datenbank, der soll sich um das Problem kümmern, bzw. kennt es vielleicht schon, oder du schaust, ob du auch die korrekte Datenbank hast, die zum Code passt.
-
Wie hast du CarOwner im Enum definiert, und welchen Wert weist du dem zu? (Name, ID, ...?)
-
Ah, stimmt, der Befehl war ja anders gemacht, da hab ich nicht drauf geschaut.
Gut, da dein MaxVeh nur 5 ist, ändere im Befehl das MaxVeh bei der if Abfrage die die Nachricht ausgibt zu MAX_VEHICLES. Dann sollte es passen.
-
Du musst die Schlüssel Nummer deines Fahrzeugs eingeben, also von 1 bis 5 eine Zahl.
-
Was gibst du denn ein?
-
Drehe das Objekt um 180° nach vorne, dann sollte es richtig herum da stehen.
-
Im oberen Teil greifst du mit der vehicleid (vID) auf den Index zu, das geht nicht.
Im unteren Teil ist es genau andersherum, da greifst du mit dem Index auf Parameter zu, die die vehicleid (f_vID aus dem enum) verlangen.Versuche es so:
ocmd:flock(playerid,params[])
{
if(!IsPlayerOnline(playerid))return SendClientMessage(playerid,Rot,NotOnlineMSG);
if(!GetPlayerFrak(playerid))return SendClientMessage(playerid,Rot,"Error"#cWeiß": You ar not in any Fraction.");
new engine,lights,alarm,doors,bonnet,boot,objective;
if(IsPlayerInAnyVehicle(playerid))
{
new vID = GetPlayerVehicleID(playerid);
GetVehicleParamsEx(vID,engine,lights,alarm,doors,bonnet,boot,objective);
for(new i = 0; i < MAX_FRAC_VEHICLES; i++)
{
if(vID != FracVehicle[i][f_vID])continue;
if(FracVehicle[i][f_fracID] == GetPlayerFrak(playerid))
{
if(!LockState[vID])
{
SetVehicleParamsEx(vID,engine,lights,alarm,VEHICLE_PARAMS_ON,bonnet,boot,objective);
LockState[vID] = true;
SendClientMessage(playerid,Weiß,"["#cGelb"SInfo"#cWeiß"] You have locked your Vehicle.");
return 1;
}
else
{
SetVehicleParamsEx(vID,engine,lights,alarm,VEHICLE_PARAMS_OFF,bonnet,boot,objective);
LockState[vID] = false;
SendClientMessage(playerid,Weiß,"["#cGelb"SInfo"#cWeiß"] You have unlocked your Vehicle.");
return 1;
}
}
else return SendClientMessage(playerid,Rot,"Error"#cWeiß": This Car doesn't belong to your Fraction.");
}
return 1;
}
else
{
new Float:x,Float:y,Float:z;
for(new f=0;f<MAX_FRAC_VEHICLES;f++)
{
GetVehiclePos(FracVehicle[f][f_vID],x,y,z);
printf("1");
printf("FracVehicleID = %i |PosX: %f |PosY: %f |PosZ: %f",FracVehicle[f][f_vID],x,y,z);
if(!IsPlayerInRangeOfPoint(playerid,3.00,x,y,z))continue;
if(FracVehicle[f][f_fracID] != GetPlayerFrak(playerid)) continue;
new vID = FracVehicle[f][f_vID];
if(!LockState[vID])
{
printf("5.1");
SetVehicleParamsEx(vID,engine,lights,alarm,VEHICLE_PARAMS_ON,bonnet,boot,objective);
LockState[vID] = true;
SendClientMessage(playerid,Weiß,"["#cGelb"SInfo"#cWeiß"] You have locked your Vehicle.");
return 1;
}
else
{
printf("5.2");
SetVehicleParamsEx(vID,engine,lights,alarm,VEHICLE_PARAMS_OFF,bonnet,boot,objective);
LockState[vID] = false;
SendClientMessage(playerid,Weiß,"["#cGelb"SInfo"#cWeiß"] You have unlocked your Vehicle.");
return 1;
}
}
}
return SendClientMessage(playerid,Rot,"Error"#cWeiß": You aren't close to any Fraction Vehicle.");
} -
SetPlayerWantedLevel(playerid,GetPlayerWantedLevel(playerid)+1);
zu:
SetPlayerWantedLevel(killerid,wanted); -
Dort wird nirgends SetPlayerWantedLevel verwendet, daran sollte es also nicht liegen.
-
Zudem ist ein switch immer schneller als eine if-Abfrage..da per jumptable direkt an die Stelle gesprungen wird..
Nein, nicht immer. Bei einer Abfrage ist die if-Variante - da korrigiere ich mich - zum Teil schneller, auch nicht immer. Es kommt drauf an, wie man die Abfrage macht. Interessanterweise, das ist mir grade aufgefallen, ist eine Abfrage if(x < 10) langsamer als if(x < 1).
Hier aber zum Beispiel ist die if-Abfrage schneller:
new a;
a = 1;
new t = GetTickCount();
for(new i = 0; i < 10000000; i++)
{
if(a == 0) { }
else { }
}
printf("if: %dms", GetTickCount()-t);
t = GetTickCount();
for(new i = 0; i < 10000000; i++)
{
switch(a)
{
case 0: { }
default: { }
}
}
printf("switch: %dms", GetTickCount()-t);Tatsächlich kommt es aber dann darauf an, wie viel Prozent Differenz er nimmt, ob es performanter ist oder nicht, daher würde ich sagen beide Varianten sind in Ordnung, wobei ich trotzdem die if-Variante bevorzuge, da sie schneller zu schreiben ist und der Performanceunterschied irrelevent gering ist.