Fahrzeug wird offen gespawnt, obwohl die Variable true ist.
Habe mir auch die Variable printen lassen, die ist zu 100% true.
public OnVehicleSpawn(vehicleid)
{
new engine, lights, alarm, doors, bonnet, boot, objective;
if(VehicleInfo[vehicleid][v_Schloss] == true) {
GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
doors = 1; // Türen werden geschlossen
}else{
GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
doors = 0; // Türen werden geöffnet
}
SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
return 1;
}
Fahrzeug wird aufgeschlossen gespawnt
- malE
- Geschlossen
- Erledigt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Möglicherweise klappt das bei OnVehicleSpawn nicht direkt.
Hast du mal versucht, es bei http://wiki.sa-mp.com/wiki/OnVehicleStreamIn einzufügen?[wiki]OnVehicleStreamIn[/wiki]
-
Gerade eben getestet, funktioniert leider auch nicht.
-
Code
Alles anzeigenpublic OnVehicleSpawn(vehicleid) { new engine, lights, alarm, doors, bonnet, boot, objective; if(VehicleInfo[vehicleid][v_Schloss] == true) { GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective); doors = 1; // Türen werden geschlossen print("vSchloss == true"); }else{ GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective); doors = 0; // Türen werden geöffnet print("vSchloss == false"); } printf("doors: %d",doors); SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective); return 1; }
Debug das ganze mal so-
-
Das komische ist das, dass ganze nicht einmal aufgerufen wird, bzw. es wird nichts geprintet.
//E:
Naja wenn ich das Fahrzeug respawne ( SetVehicleToRespawn ) wird das geprintet.
[20:14:42] Schloss: 1 // Wird beim erstellen des Fahrzeugs geprintet - also Schloss ist trueOnVehicleSpawn
[20:14:54] Schloss == false
[20:14:54] Türen: 0 -
Wie respawnst du das Fahrzeug denn? (Code)
-
Habe es provisorisch mit einem Befehl gemacht, weil ich in der Wiki gelesen habe das, dass public OnVehicleSpawn nur Aufgerufen wird wenn ein Fahrzeug respawnt wird.
ocmd:vehrespawn(playerid,params[])
{
if(PlayerInfo[playerid][p_Admin] < 3)return 1;
new id;
if(sscanf(params, "i", id))return SendClientMessage(playerid, COLOR_GREY, "Benutze: /vehrespawn [Fahrzeug-ID]");
if(!IsValidVehicle(id))return SendClientMessage(playerid, COLOR_GREY, " | Ungültige Fahrzeug-ID angegeben.");
SetVehicleToRespawn(id);
SendClientMessage(playerid, COLOR_ADMCMD, "[AdmCmd] Fahrzeuge wurde respawnt.");
return 1;
}
Wenn ich damit das Fahrzeug respawne werden mir auch die Infos geprintet, aber das Fahrzeug bleibt halt immer noch aufgeschlossen. -
Füge mal unter dem SetVehicleToRespawn das hier ein, möglicherweise ruft die Funktion das Callback gar nicht auf:
OnVehicleSpawn(id); -
[00:09:41] Schloss: 1
[00:09:51] Schloss == false
[00:09:51] Türen: 0
[00:09:51] Schloss == false
[00:09:51] Türen: 0Fahrzeug bleibt weiterhin offen.
-
Ok, aufgerufen wird es wohl, daher ist es doppelt da. Dann kannst du die Zeile wieder entfernen.
Wozu gehört denn der erste Print?
-
Zu diesem public, da lasse ich mir printen ob die Variable wirklich auf true ist, laut dem print schon.
forward OnPlayerVehiclesLoad(playerid);
public OnPlayerVehiclesLoad(playerid)
{
new num_fields, num_rows;
cache_get_data(num_rows, num_fields, handle);
if(!num_rows)return 1;
for(new i=0; i < num_rows; i++)
{
VehicleInfo[i][v_Besitzer] = cache_get_field_content_int(i, "besitzer", handle);
VehicleInfo[i][v_Model] = cache_get_field_content_int(i, "model", handle);
VehicleInfo[i][v_Color1] = cache_get_field_content_int(i, "color1", handle);
VehicleInfo[i][v_Color2] = cache_get_field_content_int(i, "color2", handle);
VehicleInfo[i][v_X] = cache_get_field_content_float(i, "x", handle);
VehicleInfo[i][v_Y] = cache_get_field_content_float(i, "y", handle);
VehicleInfo[i][v_Z] = cache_get_field_content_float(i, "z", handle);
VehicleInfo[i][v_R] = cache_get_field_content_float(i, "r", handle);
VehicleInfo[i][v_Schloss] = bool:cache_get_field_content_int(i, "schloss", handle);
VehicleInfo[i][v_ID] = cache_get_field_content_int(i, "id", handle);
printf("Schloss: %d", VehicleInfo[i][v_Schloss]);
if(VehicleInfo[i][v_Model] >= 400 && VehicleInfo[i][v_Model] <= 611) {
VehicleInfo[i][v_DLID] = CreateVehicle(VehicleInfo[i][v_Model], VehicleInfo[i][v_X], VehicleInfo [i][v_Y], VehicleInfo[i][v_Z], VehicleInfo[i][v_R], VehicleInfo[i][v_Color1], VehicleInfo[i][v_Color2], -1, 0);
} else{
printf("[FEHLER] Fahrzeug-Model %d existiert nicht (DB-ID: %d).", VehicleInfo[i][v_Model], i);
}
}
return 1;
} -
Um es euch vielleicht etwas einfacher zu machen:
ZitatDescription:
This callback is called when a vehicle respawns.Am besten solltest du dir eine Extra Funktion â la CreateVehicleEx o.Ä. erstellen wo du dann nach CreateVehicle das Fahrzeug abschließen lässt, damit du nicht bei jedem Befehl wo du ein Privatfahrzeug spawnst das per Hand einfügen musst.
-
Der Fehler liegt daran, dass du mit der vehicleid auf den Index zugreifst, das beim Laden aber nicht so machst.
Du musst es bei OnVehicleSpawn so machen, um den richtigen Index (das ist nicht die vehicleid) herauszufinden:
public OnVehicleSpawn(vehicleid)
{
new engine, lights, alarm, doors, bonnet, boot, objective;
new id = -1;
for(new i = 0; i < sizeof(VehicleInfo); i++)
{
if(vehicleid == VehicleInfo[i][v_DLID])
{
id = i;
break;
}
}
if(id != -1)
{
if(VehicleInfo[id][v_Schloss] == true)
{
GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
doors = 1; // Türen werden geschlossen
print("vSchloss == true");
}
else
{
GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
doors = 0; // Türen werden geöffnet
print("vSchloss == false");
}
printf("doors: %d",doors);
SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
}
return 1;
} -
@Jeffry dein Code funktioniert, nur dann wenn ich das Fahrzeug schon einmal in dem Fall mit meinem Befehl respawne.
@Bluescreen sowie ich es getestet habe, wird das Fahrzeug auch nicht direkt nach dem erstellen respawnt.
stock CreateVehicleEx(model, Float:x, Float:y, Float:z, Float:r, color, color2, respawndelay, siren)
{
new id = CreateVehicle(model, x, y, z, r, color, color2, respawndelay, siren);
SetVehicleToRespawn(id);
return 1;
} -
@Jeffry dein Code funktioniert, nur dann wenn ich das Fahrzeug schon einmal in dem Fall mit meinem Befehl respawne.
Ich verstehe nicht wirklich was du meinst, sorry. Kannst du bitte genauers erklären, wann es geht und wann nicht?
-
Dein Code funktioniert nur wenn ich das Fahrzeug mit einem Befehl respawne.
Also es ist nicht von Anfang an verschlossen, sondern nur wenn ich es mit dem Befehl respawne.Ergo: Fahrzeug beim erstellen nicht verschlossen - respawne ich stattdessen ein Privatfahrzeug mit einem Befehl wird das Fahrzeug verschlossen gespawnt, dank dein Code.
Aber es soll ja von Anfang an verschlossen spawnen. -
Ah, verstehe. Das liegt daran, dass OnVehicleSpawn beim Erstellen nicht aufgerufen wird. Du müsstest es beim Erstellen so machen:
forward OnPlayerVehiclesLoad(playerid);
public OnPlayerVehiclesLoad(playerid)
{
new num_fields, num_rows, engine, lights, alarm, doors, bonnet, boot, objective;
cache_get_data(num_rows, num_fields, handle);
if(!num_rows)return 1;
for(new i=0; i < num_rows; i++)
{
VehicleInfo[i][v_Besitzer] = cache_get_field_content_int(i, "besitzer", handle);
VehicleInfo[i][v_Model] = cache_get_field_content_int(i, "model", handle);
VehicleInfo[i][v_Color1] = cache_get_field_content_int(i, "color1", handle);
VehicleInfo[i][v_Color2] = cache_get_field_content_int(i, "color2", handle);
VehicleInfo[i][v_X] = cache_get_field_content_float(i, "x", handle);
VehicleInfo[i][v_Y] = cache_get_field_content_float(i, "y", handle);
VehicleInfo[i][v_Z] = cache_get_field_content_float(i, "z", handle);
VehicleInfo[i][v_R] = cache_get_field_content_float(i, "r", handle);
VehicleInfo[i][v_Schloss] = bool:cache_get_field_content_int(i, "schloss", handle);
VehicleInfo[i][v_ID] = cache_get_field_content_int(i, "id", handle);
printf("Schloss: %d", VehicleInfo[i][v_Schloss]);
if(VehicleInfo[i][v_Model] >= 400 && VehicleInfo[i][v_Model] <= 611)
{
VehicleInfo[i][v_DLID] = CreateVehicle(VehicleInfo[i][v_Model], VehicleInfo[i][v_X], VehicleInfo [i][v_Y], VehicleInfo[i][v_Z], VehicleInfo[i][v_R], VehicleInfo[i][v_Color1], VehicleInfo[i][v_Color2], -1, 0);
GetVehicleParamsEx(VehicleInfo[i][v_DLID], engine, lights, alarm, doors, bonnet, boot, objective);
doors = 1; // Türen werden geschlossen
SetVehicleParamsEx(VehicleInfo[i][v_DLID], engine, lights, alarm, doors, bonnet, boot, objective);
}
else
{
printf("[FEHLER] Fahrzeug-Model %d existiert nicht (DB-ID: %d).", VehicleInfo[i][v_Model], i);
}
}
return 1;
} -
So kann man es auch machen. Dann werde ich einfach alle Fahrzeuge direkt verschlossen spawnen, danke dir.
-
breadfish.de
Hat das Thema geschlossen.