PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Obj. zu geworfener Granate beamen


hypercop
02.01.2009, 22:43
Hallo

Tut mir leid, dass mir kein besserer Titel für mein Problem eingefallen ist. Ich werd euch mal mein Anliegen schildern.

Ich möchte, dass ein Helipad, nach dem Wurf einer Rauchgranate, auf die Position der abgeworfenen Rauchgranate gesetzt wird.
Ich hab es über einen EH probiert, aber der liest mir die geworfene Granate nicht aus, lediglich die Einheit, welche geworfen hat.

Danke im Voraus,
hypercop

Mr-Murray
03.01.2009, 15:00
Servus
Siehe Anhang. Das Objekt musst du nur noch ändern! Ist derzeit D30, damit du auch was
siehst. Bitte den Heli-Klassennamen is Skript eintragen.


Viele Grüße

Mr-Murray

hypercop
03.01.2009, 19:02
Danke Mr-Murray,

Ich werd es gleich mal checken.

hypercop
03.01.2009, 19:15
Sehr coole Sache. Es funktioniert alles prima. Danke Mr-Murray.

Cyborg11
04.01.2009, 16:12
Mal eine Frage, hab das Skript so erweitert, dass dann auch ein Heli zu der Rauchgranate fliegt und landen soll. Aber mein Heli fliegt nicht 5 Meter vor das Ziel, sondern bleibt bei ungefähr 80 Meter Entfernung einfach in der Luft stehen und will nicht mehr weiterfliegen. Landet tut er auch nicht, da das erst bei einer Entfernung von weniger als 5 Metern passieren soll.

Kann mir da bitte einer helfen und mir sagen was ich jetzt schon wieder falsch gemacht hab? :angel:
_heli = heli1;
_dhh = 5;

_Obj = nearestObject [vehicle(player), _this select 4];
?! (_Obj isKindOf "SmokeshellGreen") : exit;
~4
_HeliH = "HeliHEmpty" createVehicle position _Obj;
_distance = _helih distance _heli;
hint format ["Distanz: %1", _distance];
While {_distance > _dhh} do {_heli domove position _helih};
If (_distance <= _dhh) then {_heli land "land"};
exit;

hypercop
05.01.2009, 10:11
Ich hab es bei mir über Wegpunkte im Editor gemacht:

Der Soldat hat einen EH "Fired". Kurz nachdem die Rauchgranate geworfen wurde, wird dank obigen Script Ein Helipad und die Wegpunkte des Soldaten, "Einsteigen" und der des Heli "Laden" auf das Helipad gesetzt.

Ist natürlich nur ganz grob. Da kommen dann ncoh ein paar Funksprüche etc. hinzu.

Lester
05.01.2009, 10:56
Die 5m dürften den Heli für das Landmanöver nicht genügen und insofern sehr contraproduktiv sein.

Zudem erfolgt die Distanzmessung immer zwischen den Objektmittelpunkten, so das der Objektmittelpunkt nicht zwangsweise auch der Aufsetzpunkt sein muß/wird.

Außerdem wird ein Bewegungsbefehl innerhalb einer bestimmten Entfernung (frag mich nicht wieviel das genau ist :rolleyes:)
zudem überhaupt nicht mehr zur Kenntnis genommen.

burns
05.01.2009, 12:16
Außerdem wird ein Bewegungsbefehl innerhalb einer bestimmten Entfernung (frag mich nicht wieviel das genau ist :rolleyes:)
zudem überhaupt nicht mehr zur Kenntnis genommen.

Zwischen 3-15 Metern kannsde alles inne Tonne kloppen.
Das variiert ganz gerne mal und nimmt immer die Form an die man grade nicht braucht :sds:


*auf ArmA2´s zentimetergenau Waypoints gespannt sei*

Cyborg11
05.01.2009, 14:25
Die 5m dürften den Heli für das Landmanöver nicht genügen und insofern sehr contraproduktiv sein.

Zudem erfolgt die Distanzmessung immer zwischen den Objektmittelpunkten, so das der Objektmittelpunkt nicht zwangsweise auch der Aufsetzpunkt sein muß/wird.

Außerdem wird ein Bewegungsbefehl innerhalb einer bestimmten Entfernung (frag mich nicht wieviel das genau ist :rolleyes:)
zudem überhaupt nicht mehr zur Kenntnis genommen.
Hm ... das ist doof. Der sollte eigentlich genau im Rauch landen ... egal.

Ich hab das jetzt mit Wegpunkten gemacht und mit einem Mapclick verknüpft :) Problem is nur diese Zeile:
onMapSingleClick "_heli move _pos; mapclick=false; ""HeliMoveP"" setMarkerPos _pos";Wenn ich _heli dortstehen lasse, dann fliegt mein Heli nicht weiter. Wenn ich aber anstelle des _heli ein heli1 (Name des Helis) hinschreibe, dann fliegt er auch. Kann man das nicht variabel machen? Denn ganz oben am Anfang des Skripts müsste man dann immer nur die Namen der jeweiligen Einheiten einsetzen und das Skript funktioniert dann völlig problemlos.
Aber wenn ich dort den Namen des helis (heli1) einsetzen muss, dann ist es ja nicht mehr von der Variabel _heli abhängig.

Hier mal mein ganzes Skript:
_heli = heli1;
_man = p1;

_heligrp = group _heli;
_pgrp = group _man;
_Obj = nearestObject [vehicle(_man), _this select 4];
?! (_Obj isKindOf "SmokeshellGreen") : exit;
~4
_HeliH = "HeliHEmpty" createVehicle position _Obj;
_wph = _heligrp addwaypoint [position _helih, 1];
[_heligrp, 1] setwaypointtype "LOAD";
_wpm = _pgrp addwaypoint [position _helih, 1];
[_pgrp, 1] setWaypointType "GETIN";
[_pgrp, 1] synchronizeWaypoint [[_heligrp, 1]];

@(_man in _heli);
mapclick=true;
titletext ["Klicke auf die Karte um den Zielort zu bestimmen!","plain down"];
onMapSingleClick "_heli move _pos; mapclick=false; ""HeliMoveP"" setMarkerPos _pos";
@!mapclick;
onMapSingleClick "";
titleText ["","plain down"];
~1
"HeliMoveP" setMarkerPos [0,0];
exit;

Mr-Murray
05.01.2009, 19:36
Hmm... also ich habe schon mal Ähnliches nur ohne Rauch gemacht.
Dabei sollte ein Heli an eine Position fliegen und wenn er nah genug dran ist auf Höhe 2m
fliegen und dort eine Gruppe absetzen. Hat auch gut funktioniert. Müsste mal schauen,
wo das rumliegt und es nur mit dem Smoke verknüpfen.

Cyborg11
23.01.2009, 21:28
Und Mr-Murray hast du dein Beispiel gefunden?^^

Hab immer noch das Problem, dass ich das iwie nicht in Abhänigkeit von der Variable machen kann =(

Mr-Murray
24.01.2009, 16:17
Richtig! Da war doch was. Lass mich mal schauen ;)

Cyborg11
25.01.2009, 00:58
Hehe wäre nett, wenn du das für mich machen würdest :daumen:

Ist in deinem Beispiel dann auch vorhanden, dass der Heli dann an dem Ort landet?
Ich glaub ich bin zu blöd, denn ich kriege das nicht hin <.< Wieder einen Truppen Entladen Wegpunkt erstellen funzt nicht so wie ich will ^^


Ganzes Skript schaut so aus:
; ************************************************** **************
; Script file for Armed Assault
; Created by: Cyborg11
; Smokeabfrage by: Mr-Murray
; ************************************************** **************

; In Zeile 25 bei OnMapSingleClick den Namen heli1 bitte mit eurem
; Helinamen ersetzen
; Bei _heli bitte den Namen eures Helis einsetzen und bei _man den
; Namen von eurem Spieler / der Einheit, die den Transport anfordern
; kann
; Unbedingt in der Init.sqs folgendes eintragen:
; p1 addEventHandler ["FIRED", {_this exec "Smoke.sqf"}];
; p1 ist hier der Name von eurer Einheit / eurem Spieler
_heli = heli1;
_man = p1;

_heligrp = group _heli;
_pgrp = group _man;
_Obj = nearestObject [vehicle(_man), _this select 4];
?! (_Obj isKindOf "SmokeshellGreen") : exit;
~4
_HeliH = "HeliHEmpty" createVehicle position _Obj;
_wph = _heligrp addwaypoint [position _helih, 0];
[_heligrp, 1] setwaypointtype "LOAD";
_wpm = _pgrp addwaypoint [position _helih, 0];
[_pgrp, 1] setWaypointType "GETIN";
[_pgrp, 1] synchronizeWaypoint [[_heligrp, 1]];

@(_man in _heli);
mapclick=true;
titletext ["Klicke auf die Karte um den Zielort zu bestimmen!","plain down"];
onMapSingleClick "heli1 move _pos; mapclick=false; ""HeliMoveP"" setMarkerPos _pos; _HeliH2 = ""HeliHEmpty"" createVehicle position HeliMoveP;";
_wpu = _heligrp addwaypoint [position _helih2, 0];
_wpu setwaypointtype "TR UNLOAD";
;onMapSingleClick "heli1 move _pos; mapclick=false; ""HeliMoveP"" setMarkerPos _pos";
@!mapclick;
onMapSingleClick "";
titleText ["","plain down"];
~1Relevante Zeile zum Mapclick sind diese:
@(_man in _heli);
mapclick=true;
titletext ["Klicke auf die Karte um den Zielort zu bestimmen!","plain down"];
onMapSingleClick "heli1 move _pos; mapclick=false; ""HeliMoveP"" setMarkerPos _pos; _HeliH2 = ""HeliHEmpty"" createVehicle position HeliMoveP;";
_wpu = _heligrp addwaypoint [position _helih2, 0];
_wpu setwaypointtype "TR UNLOAD";
@!mapclick;
onMapSingleClick "";
titleText ["","plain down"];
~1Und hier ist das Problem. Wenn ich das so schreibe, dann gibt es eine Fehlermeldung, wenn ich im Heli bin und diese lautet:
'_wpu = _heligrp |#|addwaypoint [position _helih2, 0];'
Error 0 Elemente gegeben, 3 erwartetWas ist denn da schon wieder falsch? Es wird doch eigentlich ein zweites Heliport nach dem Mapclick mit dem Namen _helih2 erstellt :(

Xeno
25.01.2009, 14:50
Was ist denn da schon wieder falsch? Es wird doch eigentlich ein zweites Heliport nach dem Mapclick mit dem Namen _helih2 erstellt :(
Du benutzt die nicht initialisierte private Variable _helih2. Daher kommt die Fehlermeldung. Die ist schlicht und ergreifend nil, daher 0 Elemente.

Steig um auf eine globale Variable, die Scriptübergreifend wirkt.
Private lokale Variablen beginnen mit _ und sind nur im Scope des Scriptes wirksam (onMapSingleClick wird außerhalb des Scriptes ausgeführt), globale Variablen sind auf einem Client für ArmA überall sichtbar (wenn sie im MP per publicVariable verschickt werden sogar auch für andere Clients und den Server).

Xeno

Cyborg11
26.01.2009, 16:31
Du benutzt die nicht initialisierte private Variable _helih2. Daher kommt die Fehlermeldung. Die ist schlicht und ergreifend nil, daher 0 Elemente.

Steig um auf eine globale Variable, die Scriptübergreifend wirkt.
Private lokale Variablen beginnen mit _ und sind nur im Scope des Scriptes wirksam (onMapSingleClick wird außerhalb des Scriptes ausgeführt), globale Variablen sind auf einem Client für ArmA überall sichtbar (wenn sie im MP per publicVariable verschickt werden sogar auch für andere Clients und den Server).

Xeno
Ah ok danke für die Info Xeno! :)
Also deswegen bewegt sich mein Heli auch nicht mehr,w enn ich das _heli bei onmapclick drinnen lasse. Ok, dann werde ich das einfach zu einer globalen Variable machen :daumen:

Danke nochmal! :naughty:

_________________________________


Hmpf ... klappt immer noch nicht : /
Habs mal so ausprobiert, geht aber auch nicht. Irgendwie stehe ich grad aufm Schlauch <.<
@(_man in _heli);
mapclick=true;
_heligrp = heligrp;
titletext ["Klicke auf die Karte um den Zielort zu bestimmen!","plain down"];
onMapSingleClick "heli1 move _pos; mapclick=false; ""HeliMoveP"" setMarkerPos _pos;";
;onMapSingleClick "heli1 move _pos; mapclick=false; ""HeliMoveP"" setMarkerPos _pos";
@!mapclick;
helih2 = "HeliHEmpty" createVehicle (position helimovep);
wpu = heligrp addwaypoint [position helih2, 2];
wpu setwaypointtype "UNLOAD";
onMapSingleClick "";
titleText ["","plain down"];
~1
"HeliMoveP" setMarkerPos [0,0];
exit;

Cyborg11
29.01.2009, 16:39
Keiner eine Ahnung? :(

Xeno
30.01.2009, 13:33
Was ist das helimovep in dem createVehicle Befehl (position helimovep) ?

Wenn es der Marker sein soll, dann musst Du markerPos "helimovep" benutzen um die Position des Markers abzufragen.

Xeno

Cyborg11
30.01.2009, 14:46
Was ist das helimovep in dem createVehicle Befehl (position helimovep) ?

Wenn es der Marker sein soll, dann musst Du markerPos "helimovep" benutzen um die Position des Markers abzufragen.

Xeno
Ah ok danke. Ja war ein Marker. Sry, dass ichs nicht dazu geschrieben habe :(

Skript schaut nun so aus (unterer Teil):
@(_man in _heli);
mapclick=true;
heligrp = _heligrp;
titletext ["Klicke auf die Karte um den Zielort zu bestimmen!","plain down"];
onMapSingleClick "mapclick=false; ""HeliMoveP"" setMarkerPos _pos";
;onMapSingleClick "heli1 move _pos; mapclick=false; ""HeliMoveP"" setMarkerPos _pos";
@!mapclick;
helih2 = "HeliHEmpty" createVehicle (markerpos helimovep);
wpu = heligrp addwaypoint [position helih2, 2];
wpu setwaypointtype "MOVE";
onMapSingleClick "";
titleText ["","plain down"];
~1
"HeliMoveP" setMarkerPos [0,0];
exit;Durch markerpos klappt das nun. Doch danach kommt eigentlich die selbe Fehlermeldung wieder wie oben. Nämlich diese hier:
'_wpu = _heligrp |#|addwaypoint [position _helih2, 0];'
Error 0 Elemente gegeben, 3 erwartetHabe es dann mal mit dem ersten Heliport (helih) vergleichen.
hint format ["Position helih2: %1\nhelih2: %2\nPosition helih1: %3\nhelih1: %4", position helih2, helih2, position _helih, _helih]; Hier kommt raus:
Position helih2: array
helih2: 0x100
Position helih1: [2538.75,2443.75,0]
helih1: 3890398# 5207: empty.p3dHm ... kann man denn keinen Heliport an die Position eines Markers setzen?

Xeno
30.01.2009, 15:09
Was auch immer Du da durcheinander gebracht hast, _helih2 ist nicht initialisiert. Daher kommt die Fehlermeldung.

Einmal benutzt Du die lokale Variable _helih2, einmal die globale helih2.

Xeno

Cyborg11
30.01.2009, 16:29
Was meinst du denn mit nicht initalisiert?
Ich benutze nur helih2, also globale Variable. Die Fehlermeldung war von oben eifnach nur kopiert :P Da steht eigentlich helih2 und nicht _helih2.

Ich weiß nicht warum, aber mein Skript erstellt einfach keinen blöden Heliport auf dem Marker o.O

Und wenn ich den Heliport zuerst createn lasse, dann auf die Position des Markers schiebe, dann setzt mir ArmA den auf die Koordinaten -1.25, -1.25, 5.68 o.O
Neuer Heliport heißt jetzt h3.

@(_man in _heli);
mapclick=true;
heligrp = _heligrp;
titletext ["Klicke auf die Karte um den Zielort zu bestimmen!","plain down"];
onMapSingleClick "mapclick=false; ""HeliMoveP"" setMarkerPos _pos"; h3 = "HeliHEmpty" createVehicle [0,0,0]; h3 setpos getmarkerpos helimovep;

@!mapclick;
hint format ["Position helih2: %1\nhelih2: %2\nPosition helih1: %3\nhelih1: %4", position h3, h3, position _helih, _helih];
wpu = heligrp addwaypoint [position h3, 2];
wpu setwaypointtype "MOVE";
onMapSingleClick "";
titleText ["","plain down"];
~5
"HeliMoveP" setMarkerPos [0,0];
exit;

Xeno
31.01.2009, 10:47
h3 setpos getmarkerpos "helimovep";


Xeno

Cyborg11
31.01.2009, 11:37
Argh lol. So ein dummer Anfängerfehler :lol:
Danke Xeno. Klappt jetzt alles wunderbar :cool: