HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Einheiten/ Objekte während der Mission entfernen (https://hx3.de/editing-scripting-167/einheiten-objekte-waehrend-mission-entfernen-21942/)

sandmanGER 16.10.2012 18:48

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?

Moerderhoschi 16.10.2012 20:01

Liste der Anhänge anzeigen (Anzahl: 1)
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

sandmanGER 16.10.2012 22:55

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.

Vienna 17.10.2012 17:11

Lösche zuvor alle Insassen: {deleteVehicle _x} forEach crew Tank1;

Anschließend dann das Fahrzeug: deleteVehicle Tank1;

sandmanGER 17.10.2012 17:38

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.

Vienna 17.10.2012 17:57

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

sandmanGER 17.10.2012 18:11

Dein post bezieht sich auf meinen anderen Thread.

Vienna 17.10.2012 18:20

Im Post #4 hier ist beschrieben wie die Insassen eines Fahrzeuges zu löschen sind. Außerhalb siehe den Link aus vorherigem Post.

sandmanGER 23.10.2012 15:04

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.

Vienna 23.10.2012 20:16

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.

sandmanGER 24.10.2012 16:27

{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.

Vienna 24.10.2012 20:12

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.

sandmanGER 25.10.2012 15:30

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.

Vienna 26.10.2012 00:42

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!

Ghost_Aut 26.10.2012 06:09

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"}]
Ein sqf script erstellen, mit dem Namen 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;
};

LG. Ghost

Vienna 26.10.2012 09:02

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.

sandmanGER 26.10.2012 17:26

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:D Hauptsache das Fahrzeug bleibt halt ganz.

Wichtig, man sollte das halt im Auslöser / per Script hinbekommen. Nicht jeder Einheit nen Namen verpassen usw.

Vienna 26.10.2012 23:05

Für einen Auslöserbereich nach Post #14:

{ if {_x isKindOf "Man"} then {deleteVehicle _x} } forEach list A1;

Das sollte nur die Soldaten im außerhalb von Fahrzeugen in den Bereich löschen.

sandmanGER 27.10.2012 13:36

Mache da wohl was falsch:

Error if: type code, erwartet bool

Buliwyf 27.10.2012 14:40

Code:

{ if (_x isKindOf "Man") then {deleteVehicle _x} } forEach list A1;
;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr.

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias


SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119