PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Patrone mit Cam im Bullet Mode verfolgen


feldhase
15.07.2008, 23:14
Ich könnte Eure Hilfe bei folgendem Problem gebrauchen: In meiner Mission muss unter anderem ein Sniper böse Buben ausknipsen was ja vorkommen soll :lol:
Nun wollte ich einen Effekt einbauen der mir aus OFP Zeiten im AddOn ~Planet of War~ begegnet ist---der Schuss fällt---Patrone wird gezeigt----Patrone bewegt sich im Bullet Mode auf das Ziel und wird dabei ständig von der Cam begleitet,bis ca. 3 sek. nach auftreffen der Patrone auf das Ziel.
Kann ich das in ARMA realisieren oder ist es nicht möglich?

S4mmy
16.07.2008, 02:05
das würde mich auch mal interessieren klingt cool so für ne sniper mission :ugly:

MarcusErgalla
16.07.2008, 07:29
Natürlich ist das möglich, nur das die Kugel ziemlich mistig aussieht, da es dann nur ein Kugel ist, also ein gelber Strich, da die Patronen kein eigenes Model haben. In meiner Kampagne hab ich etwas derartiges verbaut, allerdings sitzt die Kamera dort nicht hinter der Kugel, sondern vor ihr, wodurch das ganze etwas besser aussieht, als wenn der gelbe oder rote Tracerstrich zu sehen ist.

Um die abgefeuerte Kugel per Skript zu erfassen, benötigst du folgende Abfrage:
(Wichtig, ist alles in SQF geschrieben, da ich ausschließlich in SQF-Editiere, für SQS müstest du eben entsprechend unterschiedliche Befehle ändern!)

Red4_Squad06_Sergeant01 Fire "SVD";
WaitUntil {Red4_Squad06_Sergeant01 Ammo "SVD" < _Variable02};
_Variable03 = NearestObject [Red4_Squad06_Sergeant01, "B_762x54_noTracer"];

Der Schütze wird angewiesen zu feuern, dann wird gewartet bis er dies getan hat und mit der dritten Zeile wird die abgefeuerte Kugel erfasst.

_ZuerfassendeKugel = NearestObject [Schuetze, "Kugel"]

Im Falle eines M24 würde das bspw so aussehen:

_Kugel = NearestObject [Sniper01, "B_762x51_Ball"]

Anschließend kannst du in gewohnter Manier via Kameraloop die Kamera an der Kugel festmachen.

Vienna
16.07.2008, 07:58
Soweit ich mich erinnern kann, wird mit addEventHandler unter "Fired" die abgefeuerte Munition genannt. Damit kann man die Funktion starten, wenn ein Abschuß erfolgt und auch die Bezeichnung des Geschoßes für die Funktion ermitteln.

Fired
Triggered when the unit fires a weapon.
This EH will not trigger if a unit fires out of a vehicle. For those cases an EH has to be attached to that particular vehicle.

Passed array: [unit, weapon, muzzle, mode, ammo]

unit: Object - Object the event handler is assigned to
weapon: String - Fired weapon
muzzle: String - Muzzle which was used
mode: String - Current mode of the fired weapon
ammo: String - Ammo used

feldhase
16.07.2008, 09:43
danke für die schnelle Antwort,ich habe jetzt die besagte Missi von POW nochmal rausgekramt und hier das Skript dazu (BulletCam)

_sniper = _this select 0
_acctime = 0.3
_i = 180
;setacctime _acctime
#loop
_near= nearestobject [_sniper,"BulletSniperW"]
? (alive _near && _near distance _sniper > 4):setacctime _acctime;goto "CreateCam"
;_near2= nearestobject [_sniper,"Bullet7_6E"]
;?_near2 distance player <10: setacctime _acctime; _near2 exec "delete.sqs"
?getdammage player>=.9:goto "tot"
~0.0000001
;?getdammage player>=.9:goto "tot"
goto "loop"

#CreateCam

_camera= "camera" camCreate [0,0,0]
_camera cameraEffect ["internal","back"]

#camloop
_x=(getpos _near select 0) + ((sin (getdir _near+_i))*0.1)
_y=(getpos _near select 1) + ((cos (getdir _near+_i))*0.1)
_z=getpos _near select 2

?(not alive _near or (_near distance player) > 600):goto "end"
_camera camSetTarget _near
;_camera camSetBank 40
_camera camSetPos [_x,_y,_z]
_camera camSetFOV 1.500
_camera camCommit 0
?getdammage player>=.9:goto "tot"
@camCommitted _camera
~.000000000001
?(not alive _near or (_near distance player) > 600):goto "end"
?(not isnull (nearestobject [_near,"SoldierEMG"])):_a= nearestobject [_near,"SoldierEMG"]
_z = _a distance _near

goto "camloop"

#end

?_a==player:goto "p"
~.01
;player sidechat format ["dammage %1, z %2", getdammage _a,_z]
?(getdammage _a)<0.1 or (_z>2.5):goto "w"
_x=(getpos _a select 0) - ((sin (getdir player))*1)
_y=(getpos _a select 1) - ((cos (getdir player))*1)
_z=(getpos _a select 2) +1
_camera camSetTarget _a
;_camera camSetPos [_x,_y,_z]
_camera camSetFOV .300
_camera camCommit 0
;player sidechat "Got one !"
~0.5
#w
~.1
setacctime 1
_camera cameraEffect ["terminate","back"]
camDestroy _camera
goto "loop"
exit


#tot
_x=(getpos player select 0) + ((sin (getdir player+180))*3)
_y=(getpos player select 1) + ((cos (getdir player+180))*3)
_z=getpos player select 2

_camera= "camera" camCreate [0,0,0]
_camera cameraEffect ["internal","back"]


_camera camSetTarget player
_camera camSetPos [_x,_y,_z]
_camera camSetFOV 0.50
_camera camCommit 0

~1
setacctime 1
_camera cameraEffect ["terminate","back"]
camDestroy _camera


Ehrlich gesagt hab ich nicht die große Ahnung vom Skripten,bin schon froh wenn ich das mit der cam und dem Bulettmode gerafft habe ,aber in so einer komplexen Verbindung :ugly:

Vienna
16.07.2008, 19:11
Hier eine Beispielmission für den "Fired" EventHandler.

feldhase
16.07.2008, 20:42
Oh Vienna da danke ich Dir,so wollte ich es sehen :)

Cyborg11
05.08.2008, 01:00
Hier eine Beispielmission für den "Fired" EventHandler.
Ich hab das jetzt mal getestet und ich finde es sehr gut :) Wollte aber das Skript bzw. die Missi so bearbeiten, dass man per Actionmenü bei Snipergewehren wählen kann, ob man die Bulletcam aktivieren oder deaktivieren will.

Ich hab erstmal ein Auslöser erstellt:
Bedingung: (animationState player == "AMOVPERCMSTPSRASWRFLDNON" OR animationState player == "AMOVPKNLMSTPSRASWRFLDNON" OR animationState player == "AMOVPPNEMSTPSRASWRFLDNON") AND (player hasweapon "M107" OR player hasweapon "MK12SPR" OR player hasweapon "M24" OR player hasweapon "SVD" OR player hasweapon "KSVK")
Aktivierung: bcam = player addaction ["Bulletcam aktivieren", "bcam.sqs"]
Deaktivierung: player removeaction bcam

bcam.sqs
player removeaction bcam;
player addEventHandler ["Fired", {_this execVM "GeschossCam.sqf"}];
bcam2 = player addaction ["Bulletcam deaktivieren", "bcam2.sqs"];

bcam2.sqs
player removeeventhandler fired
player removeaction bcam2

Nur leider funktioniert das so nicht :(
Es gibt 2 Probleme:
1. Wenn ich dann Bulletcam deaktivieren wähle, dann passiert nichts. Also ich behalte einfach die Bulletcam :o
2. Irgendwie bekomme ich überhaupt keine Action, wenn ich mit meiner MK12SPR ausgerüstet bin, obwohl das ja auch eine Bedingung ist.

Könntest du mir da weiterhelfen Vienna? Wäre nett, danke schonmal im Voraus :)

Vienna
05.08.2008, 19:26
Ich habe dir das in eine Beispielmission gepackt.

Das Kameraskript muß in eine Variable abgelegt werden, da es sonst vorkommt dass das Skript nicht schnell genug von der Festplatte geladen und der Schuss nicht angezeigt wird. Auch war für das Ein- und Ausschalten der Kamerasicht ein Skript erforderlich.

Es funktioniert mit der West- und Ostsniperwaffe, egal welcher Seite der Spieler angehört.

Cyborg11
05.08.2008, 19:43
Ok danke :)

Nun noch eine letzte Frage: Wie kann ich jetzt neue Waffen hinzufügen?
Ich hab die M107 und die KSVK mit in die Bedingung geschrieben, nur wird die Aktion bei den beiden Waffen einfahc nicht angezeigt! :o

So schaut die Bedingung bei mir jetzt aus:
primaryWeapon player IN ["M24","SVD","KSVK","M107"] AND alive player

Sind die Waffen irgendwo noch im Skript mit verankert?

Vienna
05.08.2008, 20:29
Nein, nur im Auslöser. Du dort jede Waffe reinschreiben.

Du mußt dir -wie ich es dir gezeigt habe- immer die korrekten Waffennamen anzeigen lassen und auf die Groß- und Kleinschreibung achten!

primaryWeapon player IN ["M24","SVD","kskv","m107"] AND alive player

Cyborg11
05.08.2008, 20:31
Ach die Waffen werden klein geschrieben. Danke! :)


Aber wenn man sich eine der beiden Waffen hinzufügen will (player addweapon "M107"), dann ist es ja egal, ob man es dort groß oder klein schreibt. Wieso ist es dort egal?

Vienna
05.08.2008, 20:45
In Programmen wird intern oft alles in Groß- oder Kleinschreibung umgewandelt. Das könnte man auch bei der Abfrage durchführen, aber ich weiß nicht, ob es in ArmA extern eine solche "Umwandlungsfunktion" gibt.

.kju
05.08.2008, 21:10
Kronzky's Code Snippets (http://kronzky.info/snippets/strings/index.htm)

Adds several string manipulation functions.

Functions include:

* toArray: Converts string into an array of characters
* Length: Returns length of string
* Left: Returns leftmost characters of string
* Right: Returns rightmost characters of string
* Mid: Returns substring
* InStr: Tests for presence of search string
* Index: Returns the position of a search string
* Replace: Replaces every sub-string occurrence
* Upper: Converts string to uppercase
* Lower: Converts string to lowercase
* findFlag: Finds a specific string in a mixed array
* getArg: Returns an argument value from a mixed array
* getArgRev: Returns a qualifyer from a mixed array
* Compare: Compares two strings
* ArraySort: Sorts multi-dimensional arrays

Vienna
05.08.2008, 22:20
Gute Funktionen. Als ich sie mir ansah stellte ich fest, dass es seit der V1.09 schon die Umwandlungsbefehle gibt (toUpper, toLower).


Cyborg11, wenn du das so abfragst und für die Waffenbezeichnungen nur Großbuchstaben nimmst, dann brauchst du dich um die Groß- und Kleinschreibung nicht mehr kümmern.

toUpper(primaryWeapon player) IN ["M24","SVD","KSVK","M107"] AND alive player

Probier das gleich einmal aus.

Cyborg11
06.08.2008, 12:05
Ok, danke :)

Also so funktioniert es und es ist egal ob man es groß oder klein schreibt :)

RUS_ALFA
06.08.2008, 19:35
wo kann man denn im skript die zeitlupe ändern?? also dass das ganze langsamer abläuft.
Danke

Vienna
06.08.2008, 21:05
Das geht nur in Echtzeit!

RUS_ALFA
06.08.2008, 21:10
hmm. ok trotzdem danke.:daumen:

Hannibal
13.08.2008, 00:40
gibt es ne möglichkeit das diese kamera auch mit waffen von fahrzeugen funktioniert

Vienna
13.08.2008, 13:27
Das Ein- und Ausschalten der Kamera in Fahrzeugen ist etwas komplizierter als beim Spieler. Auch darf die Aktion nicht mehrmals vorhanden sein.

Das Geschoß beim Panzer ist so schnell, dass es fast nicht verfolgt werden kann. Ich mußte dafür das Skript umschreiben.

Im Beispiel kann als Infanterist oder in Fahrzeugen die Geschoßsicht ein- und ausgeschaltet werden.

Hannibal
14.08.2008, 11:13
danke da wäre noch etwas wäre es möglich verschiedene ansichten nur für bestimmte projektile zu erstellen
also z.b. camSetRelPos [0,-30,5]; für die gbu
und camSetRelPos [2.5,-10,2]; für raketen
im geschosscam skript haste geschrieben das nur eine kameraansicht aktiv sein darf also ist das dann wohl nicht möglich?
eine sache wär da noch^^ ich möchte gerne die kamera per druck auf die escape taste oder auf irgendeine taste beenden
schätze mal es geht mit finddisplay(1) displayseteventhandler ["Keydown","if.......weiter weiß ich leider nicht :(

Vienna
19.08.2008, 16:51
Hannival, das ist sicher möglich. Nur eine Kamera aktiv bedeutet, dass sich Kamerasichten nicht überlagern dürfen.

Lester hat auf den Befehl "modelToWorld" aufmerksam gemacht. Der ersetzt die bisherigen Sinus Kosinus Berechung und hat den Vorteil, dass mit der Kamera verfolgte Objekte nicht mehr auf- und abschaukeln.

Der Befehl wunde in diese Version eingebunden. Die Geschosse fliegen jetzt ganz stabil!