Hey,
ich habe so ziemlich alles versucht um das oben genannte zu erreichen, jedoch erfolglos. Ich bin nun mit meinem Latein ziemlich am Ende.
Kann mir nun jemand ein Beispiel machen, wie man alle gespawnten Autos am besten mittels einer Variable abfragt und löschen kann?
Wäre sehr nett!
Gespawnte Vehicles entfernen?
- ElDiabolo
- 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
-
-
Du meinst einen Art /delveh oder /delv Befehl?
-
new car = CreateVehicle(blub
DestroyVehicle(car); -
Oder nen array wäre hier angebracht.
-
Schon klar, jedoch möchte ich ja ALLE löschen.
-
Dann brauchst du am besten ne Schleife,
-
Macht bitte mal ein Beispiel.
hab bei dem Spawnbefehl:
new spawnedcar;spawnedcar = CreateVehicle(id,x,y,z,a,-1,-1,-1);
//Und der Delete:
for(new i=0; i<sizeof(spawnedcar); i++)
{
if(!IsVehicleEmpty(i))
{
DestroyVehicle(i);
}
}stock IsVehicleEmpty(vehicleid)
{
for(new i =0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
if(IsPlayerInVehicle(i,vehicleid)) return 0;
}
return 1;
}edit: Ausgebessert
-
Also die sollen gelöscht werden wenn niemand im Fahrzeug sitzt habe ich das richtig verstanden?
-
Willst du jetzt eigentlich ALLE löschen?
Dann mach doch einfach so:
for(new i = 0; i <= MAX_VEHICLES; i++)
{
DestroyVehicle(i);
} -
for(new i=0;i<MAX_PLAYERS;i++)
{
for(new v=0;v<MAX_VEHICLES;v++)
{
if(!IsPlayerInAnyVehicle(i))
{
DestroyVehicle(v);
}
}
}Keine Garantie dass es klappt.
-
-
Nene, nicht alle. Nur die Gespawnten.... das ist es ja gerade...
-
Wo gibts bitte eine Fahrzeug das noch nicht gespawnt ist aber doch existiert und auch noch eine CarID besitzt die man mit MAX_VEHICLES aufrufen kann.
Also ich verstehe nicht was du gezielt willst^^
Vill. denke ich auch zu kompliziert. -
Hab ich doch niemals behauptet....
Also....
Man spawnt sich ein Vehicle mit /veh oder sonst was. Daraufhin soll dieses Vehicle eine Variable bekommen, dass ich es mit einem Befehl wieder löschen kann, wenn ich außerhalb des Vehicles bin. Soweit kein Problem. Allerdings wird ja nicht immer nur ein Vehicle gespawnt, sondern andere Admins spawnen ebenfalls welche. Nun möchte ich eben mit einem Befehl alle GESPAWNTEN Vehicles in denen niemand sitzt, entfernen. Dabei dürfen aber nicht die anderen Vehicles, die beim Gamemode gespawnt wurden, entfernt werden. -
Ich denke mal Fraktionsautos sollen nicht gelöscht werden sonder nur sowas wie die Noob-Faggios, Adminwagen...
-
Dann brauchst du das hier garantiert:
new SpawnVehicle[MAX_PLAYERS];
// Beim erstellen:
SpawnVehicle[playerid] = CreateVehicle( ... )
// Beim löschen
for(new i=0;i<MAX_PLAYERS;i++) {
if(!IsPlayerInVehicle(i, SpawnVehicle[i])) {
DestroyVehicle(SpawnVehicle[i]);
}
} -
funzt nicht
habe bei allen Befehlen, bei denen ein fahrzeug gespawnt wird, folgendes eingefügt:
spawnedcar[playerid] = CreateVehicle//bla
Wenn ich den Befehl nun durchführe:
ocmd:destroyallveh(playerid,params[])
{
#pragma unused params
//Adminabfrage
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(!IsPlayerInVehicle(i, spawnedcar[i]))
{
DestroyVehicle(spawnedcar[i]);
SendClientMessage(playerid, cRot, "Erfolgreich respawnt!");
}
}
}
return 1;
}Wird der ganze Chat mit dem erfolgreich respawnt zugespammt, aber kein einziges auto wird gelöscht!
edit: Wenn ich dann aus einem Veh aussteige und den Befehl erneut eingebe, wird nur das Veh gelöscht und der Chat wieder vollgespammt.
-
Wenn ich dich richtig verstehe:
Weise jedem von einem Administrator gespawnten Fahrzeug einen Boolean zu, der auf "true" ist.new bool:Spawned[MAX_VEHICLES];
Spawned[vehicleid] = true;Dann kannst du in einer Schleife abfragen, ob es gespawnt ist - wenn ja, lässt du es zerstören.
Grüße
-
funzt nicht
habe bei allen Befehlen, bei denen ein fahrzeug gespawnt wird, folgendes eingefügt:
spawnedcar[playerid] = CreateVehicle//bla
Wenn ich den Befehl nun durchführe:
ocmd:destroyallveh(playerid,params[])
{
#pragma unused params
//Adminabfrage
{
for(new i=0;i {
if(!IsPlayerInVehicle(i, spawnedcar[i]))
{
DestroyVehicle(spawnedcar[i]);
SendClientMessage(playerid, cRot, "Erfolgreich respawnt!");
}
}
}
return 1;
}Wird der ganze Chat mit dem erfolgreich respawnt zugespammt, aber kein einziges auto wird gelöscht!
edit: Wenn ich dann aus einem Veh aussteige und den Befehl erneut eingebe, wird nur das Veh gelöscht und der Chat wieder vollgespammt.
ocmd:destroyallveh(playerid,params[])
{
#pragma unused params
//Adminabfrage
{
for(new i=0;i {
if(!IsPlayerInVehicle(i, spawnedcar))
{
DestroyVehicle(spawnedcar);
}
}
SendClientMessage(playerid, cRot, "Erfolgreich respawnt!");
}
return 1;
}
So solltest du nicht mehr zugespammt werden -
Klappt nich @SpySpy.
PS: Wir sind hier in Scriptwünsche. Da könntet ihr auchmal nen Beispiel Code postenedit: PS
-
ElDiabolo:
Ganz oben ins Script:
new ErstellteAutos[100];
new ErstelltesAuto = 0;Dann bei deinem /veh Befehl, wo Du ein Fahrzeug erstellst, schreibst Du noch das hier rein:
ErstellteAutos[ErstelltesAuto] = carid(oder wie Du dein auto auch definiert hast);
ErstelltesAuto++;Dann bei deinem /destroycar Befehl, wo nur die gespawnten Fahrzeuge gelöscht werden sollen, das hier schreiben:
if(strcmp(cmd, "/destroycars", true) == 0)
{
if(IsPlayerConnected(playerid))
{
for(new i = 0; i < sizeof(ErstellteAutos); i++)
{
if(i != 0)
{
DestroyVehicle(i);
}
}
SendClientMessage(playerid, FARBE, " Die gespawnten Fahrzeuge erfolgreich gelöscht");
}
return 1;
}Sollte klappen