16.10.2012, 19:48 | #1 (permalink) |
Registriert seit: 16.10.2012
Beiträge: 63
|
Einheiten/ Objekte während der Mission entfernen
Hallo, und zwar möchte ich bestimmte Einheiten in einem Bereich entfernen, da sie für die Mission nicht mehr relevant sind. Dabei sollen die nicht getötet werden, sonst liegen da soviele Leichen rum..
Ich hab da an einen Auslöser gedacht, der alle "Lebewesen" innerhalb des Kreises verschwinden lässt. Natürlich kommt man aber ums Scripten nicht herum, weshalb ich eure Hilfe brauche. Wie kann ich das anstellen?? Hintergrund: US-Soldaten befreien in Cherno n paar Geiseln, danach machen sich die Soldaten auf in die nächste Stadt. Die Geiseln brauch ich ja nicht mehr, deswegen können sie verschwinden. Oder habt ihr einen anderen Vorschlag? |
16.10.2012, 21:01 | #2 (permalink) |
Registriert seit: 02.07.2006
Ort: Kabul
Alter: 39
Beiträge: 2.666
|
Willkommen hier im Forum,
das Ganze laesst sich auf verschiedene Arten realisieren. Die Beginnerfreundlichste ist Variante ist wahrscheinlich mit 2-3 Ausloesern und dem Befehl Deletevehicle zu arbeiten. Ich habe dir mal ein Beispiel gebaut und am ende dieses Beitrages angehangen. Bei weiteren Fragen melde Dich einfach nochmal. gruß hoschi |
16.10.2012, 23:55 | #3 (permalink) |
Registriert seit: 16.10.2012
Beiträge: 63
|
Erst mal vielen Dank für deine schnelle Hilfe! Dein Beispiel hat mir sehr geholfen.
Ein kleines Problem gibts dennoch, die Fahrzeuge verschwinden zwar, allerdings nicht die Insassen. Die verbleiben halt auf der Map. Hab in einem Tutorial den Befehl: deleteCollection tank1 gefunden, hab den dann eingebaut. {deleteCollection _x} foreach thislist; Allerdings scheint das nicht zu funktionieren. Könntest du mir da eben helfen. PS: Wie müsste das Script eigentlich aussehen, wenn nur Menschen und keine Fahrzeuge verschwinden müssten? Das wäre dann ne passende Geisterstadt. Ich habe dazu nichts passendes im Manual gefunden. |
17.10.2012, 18:38 | #5 (permalink) |
Registriert seit: 16.10.2012
Beiträge: 63
|
okay hat sich geklärt, hab einfach zwei Auslöser benutzt die zeitversetzt losgehen.
Bleibt aber immer noch die Frage, wie ich die Personen in und um den Fahrzeugen löschen kann OHNE die Fahrzeuge zu löschen, möglichst auf globale Weise, also ohne jeder Einheit n Namen zu verpassen. |
17.10.2012, 18:57 | #6 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
In den Fahrzeugen ist ja in meinem vorherigen Post schon beschrieben. Um das Fahrzeug herum geht unter Verwendung von http://community.bistudio.com/wiki/nearestObjects
|
23.10.2012, 16:04 | #9 (permalink) |
Registriert seit: 16.10.2012
Beiträge: 63
|
Hallo, hier sind nochmal zwei Probleme aufgetreten.
Damit nur die Soldaten und nicht deren Fahrzeuge verschwinden hab ich das etwas umgeändert: statt: {deleteVehicle _x} foreach thislist; -> {_x setDamage 1} foreach thislist; {_x setVehicleArmor 1} foreach thislist; hideBody this; Dadurch sterben alle Einheiten, damit die Fahrzeuge wieder funktionieren, sind sie anschließend wieder repariert. Problem: -Die Fahrzeuge brennen immernoch -Die Leichen verschwinden nicht (hab dazu MrMurrays Script verwendet, siehe unten) ? !(local server):exit; _W=_this select 0; _L=[]+thislist; _A=[]; _G=[]; _T="Man"; { if (_T counttype [_x] == 1) then {_G=_G+[_x]} } foreach _L; #Again { if (not alive _x) then {_A=_A+[_x]} } forEach _G; _G=_G-_A; ? count _A > _W :_P=_A select 0;_A=_A-[_P] ; (Gravedigger) action ["Hidebody",_P] ; ~10 deleteVehicle _P; ? count _A == _W and count _G == 0 :exit; goto "Again" Die Besonderheit an dem Skript ist, dass Soldaten bevor sie gelöscht werden, dank dieser Zeile: (Gravedigger) action ["hidebody",_P] erst im Boden versinken. Dazu braucht man einen Dummy, der im Skript Gravedigger benannt wurde. Dieser macht es dann erst möglich, dass die toten Soldaten zunächst im Boden versinken, bevor sie gelöscht werden. Diesen setzt man einfach irgendwo weit weg vom Geschehen auf eine Insel, damit ihm nichts passiert. "Error nicht definierte Variable im Ausdruck" hab eine Einheit mit dem Namen "Gravedigger" eingefügt, kann aber nicht nachvollziehen, wofür man sie benötigt und weshalb das nicht funktioniert. |
23.10.2012, 21:16 | #10 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Es gibt Probleme, wenn ein Objekt 100% zerstört wurde und man es wieder herstellen will.
HideBody als Befehl oder Aktion scheint nicht zu funktionieren. Wie du die Soldaten im Fahrzeug löschen sollst, habe ich in einem Post oben schon beschrieben. |
24.10.2012, 17:27 | #11 (permalink) |
Registriert seit: 16.10.2012
Beiträge: 63
|
{deleteVehicle _x} forEach crew Tank1;
.. funktioniert nicht {deleteVehicle _x} foreach crew (thislist select 0); ..auch nicht {_x setDamage 1} foreach crew (thislist select 0); das hingegen schon. ist aber erstmal egal... ich lösch einfach erst das fahrzeug und dann 5 Sekunden später alle noch vorhandenen Einheiten. Ich komm aber nicht mit dem anderen Problem weiter. Wie sieht das script aus welches alle soldaten, die sich außerhalb der Fahrzeuge befinden, tötet? AllUnits1 = nearestObjects [Fahrzeug1, Vehicles, 40]; {_x setDamage 1} foreach units AllUnits1; Wie muss ich dann "nearestiobject" einbauen? *Wichtig: Fahrzeug1 soll ein Array sein, soll also mehrere Autos enthalten, die sich in einem Auslöser befinden. |
24.10.2012, 21:12 | #12 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Wie ich gesehen habe gibt es ein Problem in einem Fahrzeug einen Soldaten zu löschen.
Das geht dann nur in Verbindung mit folgendem Auslöser (den du wo im Abseits aufstellst): Name: Entfernen Radius: 50 Aktivierung: Jeder Mehrfach Bedingung: this Zeitverzögerung: 3x 1 Sekunde einstellen Bei Akt: {deleteVehicle _x} forEach thislist Die Crew löscht du nicht, sondern du versetzt sie zu diesem Auslöser: {_x setPos position Entfernen} forEach crew Tank1 Dadurch werden die Insassen in den Auslöserbereich versetzt und dort gelöscht. |
25.10.2012, 16:30 | #13 (permalink) |
Registriert seit: 16.10.2012
Beiträge: 63
|
wie kann ich statt
Tank1 -> thislist benutzen? Will halt sämtliche Fahrzeuge (im Triggerradius) "entleeren". Jetzt wirst du wahrscheinlich wieder das nearestObject Beispiel ansprechen, aber wie muss ich das integrieren? Siehe meinen vorherigen Post. |
26.10.2012, 01:42 | #14 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Mit thislist ist das problematisch, sondern du verwendest list AuslöserName
Du erstellst folgenden Auslöser für einen bestimmten Bereich: Aktivierung: Jeder Einmal Vorhanden Name z.B. A1 Aufruf nun über anderen Auslöser: { {_x setPos position Entfernen} forEach crew _x } forEach list A1 Es werden auch alle Soldaten aus diesem Bereich entfernt, welche nicht in einem Fahrzeug sind! |
26.10.2012, 07:09 | #15 (permalink) |
Hallo, ich denke mit dem addEventHandler ginge es einfacher!
Diesen code, in die Init der Einheit eintragen! Code:
this addEventHandler ["killed", {handle = [_this select 0] execVM "clean.sqf"}] Code:
if (! isServer) exitWith {}; _unit = _this select 0; //Vehicle if (not (_unit isKindOf "Man")) then { {deleteVehicle _x} forEach crew _unit; sleep 60; deletevehicle _unit; }; //Soldiers if (_unit isKindOf "Man") then { if(not ((vehicle _unit) isKindOf "Man")) then {_unit setpos (position vehicle _unit)} ; sleep 10; hideBody _unit; sleep 4; deletevehicle _unit; };
__________________
Ghost_AUT |
|
26.10.2012, 10:02 | #16 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Man müsste den eventHandler in jeder KI initialisieren.
Aber was noch wesentlicher ist, der Befehl deleteVehicle funktioniert nicht bei Einheiten in Fahrzeugen. hideBody gar nicht. Nimm man deleteVehicle vehicle _x, dann wird anstelle eines der Soldaten das Fahrzeug gelöscht. Darum die Lösung mit dem Rausversetzen der Soldaten aus den Fahrzeugen und dann löschen. Die Action mit "eject" geht auch nicht. Vermutlich sind das wieder einmal Bugs. |
26.10.2012, 18:26 | #17 (permalink) |
Registriert seit: 16.10.2012
Beiträge: 63
|
okay. sie verlassen das Fahrzeug.
Angenommen im Auslöser befinden sich Fußsoldaten und Fahrzeuge in denen Soldaten sitzen. Wie kann ich es machen, das nur die Fußsoldaten gelöscht werden. DieFahrzeuge sollen unbeschädigt bleiben. Notfalls kann auch die Crew sterben Hauptsache das Fahrzeug bleibt halt ganz. Wichtig, man sollte das halt im Auslöser / per Script hinbekommen. Nicht jeder Einheit nen Namen verpassen usw. |
Stichworte |
arma editor, auslöser, deletevehicle, hilfe, modding |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Patch 1.60! | Xeno | Community | 69 | 11.01.2012 13:41 |
1.60 rc | Dieter66 | Community | 47 | 22.12.2011 16:49 |
Einheiten in Gruppe löschen | Brubaker | Editing | 6 | 26.05.2011 18:44 |
Addons aus Mission entfernen | Neuling | Technische Fragen & Probleme | 2 | 19.12.2010 18:39 |
Heal/Repair Script / Einheiten in einem Radius zufällig generieren lassen | Noobfire | Editing & Scripting | 8 | 06.08.2010 16:22 |