PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verwundeter Pilot als Objekt


Paspertou
03.11.2013, 16:47
hi werte Arma-Gemeinde.

Ich hoffe eigtl., dass dieser Punkt nicht weiter problematisch ist. Leider komm ich aber nicht vorwärts. In einer PvP-Mission (angelehnt an die Map SF CSAR aus Americas Army 2) soll es neben der Zerstörung eines abgestützten Helis auch einen verwundeten Piloten als Objekt geben.
D.h. ich möchte gern eine Figur auf „verletzt“ an einem bestimmten Ort platzieren. Da die Runde enden soll, wenn beide Objekte gemacht sind, braucht diese Figur nicht spielbar zu sein und muss an sich nicht einmal aufstehen.
Leider kann ich aber auch mit dem =BTC= Revive Figuren nur tot oder lebendig angeben. Es gibt doch aber eine Art zwischenzustand. Die Figur soll also weder angeschossen rumlaufen, noch reglos am Boden liegen. In einigen Missionen online konnte ich schon sehen, dass es dieses "am Boden winden" gibt.


Hat jemand eine Idee wie ich diesen einstellen kann?

Besten Dank

Paspertou

PS: vielleicht noch eine weitere Frage: ich wollte gern einen Laptop auf den Tisch stellen. Leider fällt der aber immer durch. Selbst mit der entsprechenden Höhenangabe und auch dem Eintrag
laptop setPos [(getPos this select 0),(getPos this select 1),1.0] fällt er immer zu Boden, wie bekomme ich das teil schwebend?

Drunken Officer
03.11.2013, 21:14
Pilotenname: wasweißich

Init des Piloten: this setDammage 0.6 ( 0 = fit wie ein Turnschuhe; 1 = Ruhe sanft)
Rufst du seinen Schaden wo anders auf:
wasweißich setDammage 0.6;

Darf der Pilot getötet werden?
Falls nein: this allowDammage false; << unverwundbar

das Winden ist eine Loop funktion in der immer wieder eine Animation abgespielt wird:
http://community.bistudio.com/wiki/playAction

Den loop erzeugst du mit while {true} do {...}; und einer sleep Funktion
Statt true kannst du auch eine andere bedingung nehmen.#

Du kannst ihn auch mit der Animation ablegen und dann "einfrieren";
Dann in die Init:

this allowDammage false; this setDammage 0.7; this playerAction "PlayerProne"; this disableAI "anim";
erzeugt:
unverwundbar
setzt Schaden auf 0.7 (da sieht man definitv blut am körper)
spielt eine Aktion ab, kA was Player Prone ist
friert die Puppe ein

zum Laptop:
http://community.bistudio.com/wiki/attachTo

Clausewitz
03.11.2013, 23:58
Die Animationen kannst du im Pausenmenü des Editors anschauen und dir die passende raussuchen. Dieser Animation Viewer ist ne nützliche Erfindung...

romans
04.11.2013, 00:27
Den Laptop auf die gewünschte Höhe setzen und "this enableSimulation false" in die Initzeile geht auch.

Paspertou
04.11.2013, 01:27
Besten Dank für die schnelle Hilfe!
Vieles hat schon wunderbar geklappt aber leider stell ich mich wohl doch etwas dumm an.

"this allowDammage false;" (brauche ich tatsächlich) und "this setDammage 0.7;" funtionieren super. Ich habe der Figur noch alle Items weggenommen, weil sie sich sonst immer sofort selbst geheilt hat. Der Eintrag:
"this playerAction "PlayerProne";" klappt so leider nicht. Kann es sein, dass es "playAction" heißen muss? Aber auch dann macht er leider nichts. Auf den Befehl "setUnitPos "down";" legt er sich zwar hin aber, wenn ich mir dann die gewünschte Animation raussuche und statt "down" einsetze (hier: "AinjPpneMstpSnonWnonDnon_injuredHealed") passiert leider nichts. Wie und wo ich den loop erzeuge habe ich wohl auch noch nicht verstanden. In der Init-Zeile oder als Bewegung klappen meine Einträge (z.B: "while {true} do {JumpOff};" jedenfalls nicht.

Auch die Sache mit dem Laptop klingt zwar wie eine große Hilfe, leider tue ich mich aber schwer den Befehl "SuitcaseObject attachTo [FoldingTableObject, [0,0,0]];" auf meinen Fall zu übertragen. Wo trage ich das eigtl. ein und woher kenne ich die korrekten Namen für Laptop und Tisch? Im Konfig-Viewer hab ich mich schon wund gesucht.

Sorry, wenn ich mich so anstelle aber falls ihr mir hier nochmal helfen könnt wäre das super. Danke.

Paspertou
04.11.2013, 01:36
Den Laptop auf die gewünschte Höhe setzen und "this enableSimulation false" in die Initzeile geht auch.

super - ja, besten dank

Jekko
04.11.2013, 09:46
Dem Trigger für die Pilotenanimation schreibste z.B. das in die Aktivierungszeile:
Pilot setDamage 0.8;
Pilot playMove "AinjPpneMstpSnonWrflDnon_rolltofront";
Pilot playMove "AinjPpneMstpSnonWrflDnon_rolltoback";
Pilot playMove "AinjPpneMstpSnonWnonDnon_injuredHealed"

Erst dreht und wendet er sich, dann bleibt er verwundet liegen.

Jekko
04.11.2013, 09:52
sorry Doppelpost

JeeperCreeper
04.11.2013, 10:52
Wo trage ich das eigtl. ein und woher kenne ich die korrekten Namen für Laptop und Tisch? Im Konfig-Viewer hab ich mich schon wund gesucht.

Die Namen der Dinge findest am schnellsten und einfachsten, wenn du ihnen erstmal im Editor einen Namen gibst und sie dann in der mission.sqm suchst. Durch den gegebenen Namen findet man die Sachen recht zügig.

class Vehicles
{
items=2;
class Item0
{
position[]={1670.2821,5.5,5566.4346};
azimut=100.378;
id=1;
side="EMPTY";
vehicle="Land_TableDesk_F";
skill=0.60000002;
text="Tisch";
};
class Item1
{
position[]={1670.3402,5.5,5566.4409};
azimut=99.940598;
offsetY=2;
id=2;
side="EMPTY";
vehicle="Land_Laptop_unfolded_F";
skill=0.60000002;
text="Laptop";
};
};

Das Rot ist der Classname den du suchst und das Blau ist der Name den du im Editor angegeben hast.
Und wie du sehen kannst gehören die beiden Sachen zu der Oberklasse Vehicles, also kannst Du sie jetzt auch im Konfigbrowser unter CfgVehicles finden.

Paspertou
04.11.2013, 11:04
toll - so klappt alles,
1000 Dank
:daumen:

Drunken Officer
04.11.2013, 13:47
Ah, doch nicht so kompliziert. Du kannst den Objekten einen Namen geben und damit direkt ansprechen.
laptop = schleppi
tisch = tisch
Für attachto reicht der Name völlig aus, er will es doch nicht spawnen lassen, sondern setzt es bereits im Editor.

schleppi Attachto [tisch,[x,y,z]]
Mit 0 0 0 wird das Ding in die Geometrische Mitte des Objekts gesetzt und kann somit "unsichtbar" werden.

Du mit mit den Zahlen spielen und dir deinen Laptop zurecht schieben.

Paspertou
10.11.2013, 20:49
liebe Arma-Gemeinde,

besten Dank für die Hilfe. Dieses Problem ist somit gelöst.
Nun ergeben sich noch Details:
Der Pilot liegt nun rum und windet sich. Ich habe eine Action daruf gelegt und so kann der Pilot als Objekt "gemacht" werden.
Allerdings ist er noch "heilbar". D.h. wenn ihn jemand mit einem Sanipack aufmuntert, läuft er einfach fröhlich los. Das würde ich gern verhindern:

Frage 1: Kann ich die Heilung einer Figur deaktivieren?

Zudem soll den Pilot nur eine der beiden Seiten "machen" können (genau wie ein anderes Objekt, dass zur Endauslösung führt).

Frage 2: Wie kann ich definieren, dass nur Blue bzw. Red ein Objekt machen darf?

Und zuletzt: ich habe als "Objekt machen" die Angaben
this addAction ["Objekt machen", {Objekt=true},0, 3, true, true, "", "(_this distance _target)< 1"]; geschrieben. Leider ist dazu aber "nur" ein kurzer Klick nötig.

Frage 3: Kann ich eine Art Prozess (z.B.: halte die Leertaste 3 Sekunden) im Ideal mit einer Fortschrittsanzeige vergeben oder wenigstens eine Prozess (z.B. nach Druck auf die Leertaste beginnt ein sichtbarer Prozess von x Sekunden) starten?

Vielleicht hat jemand von euch wieder so eine tolle Idee.
Danke Pasper

Drunken Officer
12.11.2013, 04:24
Frage 3:
Der Balken wäre ein Dialog. Viel Spaß dabei...
Alternativ könntest du aber über cuttext [format ["Text %1 ",_variable],"PLAIN",1];
eine Zeit einblenden lassen.
Die Variable mußt du natürlich vorher definieren.

Rufe ein Script auf oder schreibe den Code in den addaction-befehl

private ["_zeit"];
_zeit = 20;
while {_zeit != 0} do
{cuttext [format ["Ärztliche Versorgung daurt an. \n Warten sie %1 Sekunden",_zeit],"PLAIN",1];
_zeit = _zeit - 1;
sleep 1;};
cutText ["Versorgung abgeschlossen","Plain Down",0.5];


Frage 2:
Wie meinst du das mit Objekt machen darf?
Ansonsten hänge einen Auslöser 4/4 über den Piloten. Ausgelöst durch Blau / Einmal.
Bedingung: this
Akt: pilot addaction .....

Frage 1:
Das kann ich fir nicht benatworten. Ich wüßte nur, dass du den Wert wieder anders setzt. Aber das ist glaube ich nicht die saubere Lösung.

while {alive pilot} do
{
_dam = getDammage Pilot;
waitUntil {_dam < 0.1};
Pilot setDammage 0.7;
};

Paspertou
12.11.2013, 21:49
Hi Drunken Officer,

vielen Dank für deine Hilfe. Noch habe ich ein paar Problem in der Umsetzung.
Meine Bemühungen die Zeitangabe in den addAction-Befehl einzutragen sind bislang nicht erfolgreich gewesen. So sieht es aktuell bei mir aus:

addAction private ["_zeit"]; _zeit = 20; while {_zeit != 0} do {cutText [format["Ärztliche Versorgung dauert an. \n Warten sie %1 Sekunden","Plain Down",1],_varibable]; _zeit = _zeit - 1; sleep 1;}; cutText ["Versorgung abgeschlossen","Plain Down",0.5]; ["rescue the pilot", {pil1=true},0, 3, true, true, "", "(_this distance _target)< 5"];

Dabei mache ich wohl aber was verkehrt.

Zu meiner Frage zwei: Alle Funktionen die ich einbringe (also so wie der o.g. "rescue the pilot" sind ja zunächst nicht auf eine Seite begrenzt. Also praktisch könnte auch ein Spieler der Gegenseite das Objekt machen. Kann ich festlegen, das ein Objekt nur druch eine Seite "machbar" ist?

Dein Tipp für meine Frage 1 ist erstmal ganz gut. Zwar verschwindet das Blut, aber das ist mir nicht so wichtig. Hauptsache der Gute bleibt liegen. Fall es mal hitzig wird, wäre es natürlich noch besser man könnte diese (Heilen)-Option aus dem Kontextmenü ganz entfernen.

Lieben Dank
Pasper

JanIs
12.11.2013, 22:01
private ["_zeit"];
_zeit = 20;
while {_zeit != 0} do
{ cutText [format["Ärztliche Versorgung daurt an. \n Warten sie %1 Sekunden","Plain Down",1],_varibable];
_zeit = _zeit - 1;
sleep 1;};
cutText ["Versorgung abgeschlossen","Plain Down",0.5];

Nimm mal statt "_varibable" den Eintrag "_zeit"

LG
Jan

Drunken Officer
13.11.2013, 08:17
Sorry, für den Fehler mit Variable und Zeit. Ich hatte mein Post abgeändert und vergessen diesen Wert zu ändern.

Aus dem BIS Forum:

this addaction ["interact",{hint "Give me a ride"},0,0,true,true,"","(side _this == blufor)"];
mußt mal probieren

Drunken Officer
13.11.2013, 10:02
Gerade getest:
Hänge das auf den Piloten drauf:

tod = this addaction["gefunden",{ [15,2]spawn {_zeit = _this select 0; while {_zeit != 0} do {cuttext [format ["Ärztliche Versorgung daurt an. \n Warten sie %1 Sekunden",_zeit],"PLAIN",1]; sleep (_this select 1); _Zeit = _zeit - 1};cutText ["Versorgung abgeschlossen","PLAIN",0.5];};},"",0,true,true,"","(side _this == blufor)" ];

Allerding verschwindet der ActionEintrag nicht obwohl er es müßte. Hide ist auf true. :komisch: Einfach mit RemoveAction arbeiten, falls du es nicht hinbekommst.

Der Actioneintrag ist nur für Blau sichtbar. Das mit der Distanze kleiner 5 ist egal, weil der Eintrag eh erst auf 5 Meter erscheint. Wäre nur interessant, wenn es kleiner 2 oder 1 Meter sein soll.

Paspertou
14.11.2013, 15:27
Hi DrunkenOfficer,

super - das klappt toll soweit.
Nun hab ich (dank meiner nicht vorhandenen Programmierungskünste) noch ein kleines Problem. Ich habe überall versucht in deinen Code den Hinweis für den Auslöser "{pil1=true}" einzufügen. leider aber ohne Erfolg. Entweder bleibt die Funktion ganz aus, zählt bis 1 und stoppt oder es passiert einfach nichts im Anschluss. Nach dem Prozess soll ja aber der Auslöser mit der Bedingung "pil1" aktiviert werden. Wo füge ich das innerhalb deines Codes den ein?
Wäre super, wenn du mir damit nocheinmal behilflich sein kannst.
Thx Pasper

JanIs
14.11.2013, 20:39
Na ganz einfach:
tod = this addaction["gefunden",{ [15,2]spawn {_zeit = _this select 0; while {_zeit != 0} do {cuttext [format ["Ärztliche Versorgung daurt an. \n Warten sie %1 Sekunden",_zeit],"PLAIN",1]; sleep (_this select 1); _Zeit = _zeit - 1}; pil1=true; cutText ["Versorgung abgeschlossen","PLAIN",0.5];};},"",0,true,true,"","(side _this == blufor)"];

Greetz
Jan

Drunken Officer
14.11.2013, 20:43
Sobald der addAction Befehl aufgerufen wird, ist der wert true.
tod = this addaction["gefunden",{ [15,2]spawn {_zeit = _this select 0; pil1 = true; while {_zeit != 0} do {cuttext [format ["Ärztliche Versorgung daurt an. \n Warten sie %1 Sekunden",_zeit],"PLAIN",1]; sleep (_this select 1); _Zeit = _zeit - 1};cutText ["Versorgung abgeschlossen","PLAIN",0.5];};},"",0,true,true,"","(side _this == blufor)" ];

Willst du es erst am Ende haben:
tod = this addaction["gefunden",{ [15,2]spawn {_zeit = _this select 0; while {_zeit != 0} do {cuttext [format ["Ärztliche Versorgung daurt an. \n Warten sie %1 Sekunden",_zeit],"PLAIN",1]; sleep (_this select 1); _Zeit = _zeit - 1};cutText ["Versorgung abgeschlossen","PLAIN",0.5]; pil1 = true};},"",0,true,true,"","(side _this == blufor)" ];

Ach ja der aufruf [15,2] gibt an:
15 Sekunden bis 0
2 Sekunden Pause
tod ist einfach nur eine Varibale. Kannst auch Apfelkuchen nehmen.
Setze den Wert Pil1 in der init.sqf auf pil1 = false;

Paspertou
14.11.2013, 21:08
super - ganz herzlichen Dank für die Hilfe und die Gelegenheit das alles Stück für Stück zu lernen! tolle Communitie!

Paspertou
15.11.2013, 11:37
Hallo DrunkenOfficer,

ich habe eben ein Video (offenbar von dir) gefunden (http://www.youtube.com/watch?v=_cVT19DNvLE).
Darin scheint es so, als hättest du die Pflanzen eigenst dort plaziert.
Ich suche schon länger nach einer Mod um auch Plfanzen und Bäume zu plazieren.
Kannst du mir sagen wo ich eine solche finden kann?
Thx Pasper

Drunken Officer
15.11.2013, 13:08
Jo die Pflanzen sind von mir.

Schau mal auf Armaholic, ob da ein Mod draussen ist. Aber ich glaube, mit Pflanzen gibt sich kaum einer ab.