HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing (https://hx3.de/editing-139/)
-   -   Lebende Feinde mit Nearestobjects (https://hx3.de/editing-139/lebende-feinde-nearestobjects-14730/)

HptmBastardo 20.05.2008 10:48

Lebende Feinde mit Nearestobjects
 
Hallo Zusammen.

evtl. kann mir jemand helfen:

ich habe ein kleines Feindmeldescript, das dem Spieler im Umkreis von 200 meter die Anzahl der lebenden Feind angibt. Nun möchte ich noch für eine kurze Zeit einen Marker auf den Positionen dieser Feinde erscheinen lassen. Das funktioniert ansich auch, nur das Problem dabei ist, dass mit
Code:

_list =  nearestObjects [player, ["soliderEB"], 200]
auch die Leichen angezeigt werden. Weiss jemand wie ich nur die Positionen der lebenden Feinde auslesen kann?

Gruss
Bastardo.

Mr-Murray 20.05.2008 11:04

Servus
Der Grundstein ist doch schon maql nicht so übel!

Code:

_list =  nearestObjects [player, ["soldierEB"], 200]
Wie schaut denn dein Skript/Funktion weiter aus?

Ich würde den Marker nur createn, wenn die Unit lebt!

? alive _Unit : Marker erstellen



Grüße

Mr-Murray

HptmBastardo 20.05.2008 13:47


Danke für die schnelle Antwort. Das Script sieht momentan so aus (bin kein Meisterscripter...sieht also etwas holperig für Profis aus). Dieser Teil funktionert gut, die Feinde werden als Hint angegeben.

Code:

_spieler = _this select 0
_vogler = _this select 1


?!(_vogler == _spieler):goto "dubel"

_spieler removeaction scan

;Feind Auswertung
_feinde = nearestObjects [ _spieler, ["SoldierEB"], 200];

;wieviele
_anzahl = {alive _x} count _feinde

;Ausgabe
hint format["Radius 200m: %1 Feind(e)",_anzahl]
~20
hint ""

~45
scan = _spieler addaction ["Feindscanner 85", "scripts\feindscan.sqs",[],-1,false]
hint "FS85 wieder verfuegbar"
~4
hint ""
exit

;eigene action benutzen
#dubel
hint "eigener FS85 benuetzen"
~4
hint ""
exit

Schön wäre eben Marker, die kurz auf der Karte erscheinen. Ueber Mittag habe ich nun das mal so versucht und den untenstehenden teil in das Script integriert:

Code:

?(alive (_feinde select 0)): _marker1=createmarkerlocal ["marker1", position (_feinde select 0)]
_marker1 setMarkerShapelocal "ICON"
"marker1" setMarkerTypelocal "DOT"



?(alive (_feinde select 1)): _marker2=createmarkerlocal ["marker2", position (_feinde select 1)]
_marker2 setMarkerShapelocal "ICON"
"marker2" setMarkerTypelocal "DOT"

?(alive (_feinde select 2)): _marker3=createmarkerlocal ["marker3", position (_feinde select 2)]
_marker3 setMarkerShapelocal "ICON"
"marker3" setMarkerTypelocal "DOT"

?(alive (_feinde select 3)): _marker4=createmarkerlocal ["marker4", position (_feinde select 3)]
_marker4 setMarkerShapelocal "ICON"
"marker4" setMarkerTypelocal "DOT"

?(alive (_feinde select 4)): _marker5=createmarkerlocal ["marker5", position (_feinde select 4)]
_marker5 setMarkerShapelocal "ICON"
"marker5" setMarkerTypelocal "DOT"

und weiter unten im Script werden die Marker wieder gelöscht. Das Ganze gibt mir aber bei (_feinde select 4) eine Fehlermeldung (Nullteiler). Bin nun etwas Ratlos....

Mr-Murray 20.05.2008 14:06

Über Mittag?
Sollst arbeiten! Ich schaue mal drüber ;)

Buliwyf 20.05.2008 14:17

Auf die schnelle behaupte ich mal, dass Du den Fehler bekommst, weil eben weniger als 5 Gegner in dem Array _feinde erfasst sind. Also wo nix mehr is kann auch nix markiert werden.

Besser wäre:

Code:

_i=0;
while{_i < (count _feinde - 1)} do {
  _unit = _feinde select _i;
  if (alive _unit) then {
    _m=createmarkerlocal ["marker", position _unit];
    _m setMarkerShapelocal "ICON";
    _m setMarkerTypelocal "DOT";
  };
  _i=_i+1;
};


Mr-Murray 20.05.2008 15:01

Das sieht doch schick aus!

HptmBastardo 21.05.2008 13:46


So, bei bei dem Vorschlag von
Buliwyf bekam ich eine Fehlermeldung bei (alive _unit), da ich diesen Fehler nicht lösen konnte, hatte ich die Marker so gelöst (diesmal nicht über Mittag...wobei, Sachen für Arma machen ist ja auch eine ehrbare Arbeit ;)):



Code:


_spieler = _this select 0
_vogler = _this select 1


?!(_vogler == _spieler):goto "dubel"

_spieler removeaction scan

;Feind Auswertung
_feinde = nearestObjects [ _spieler, ["SoldierEB"], 150];
 

;wieviele
_anzahl = {alive _x} count _feinde
_anzahl1 = count _feinde



;marker

?(_anzahl1 == 1): goto "m1";
?(_anzahl1 == 2): goto "m2";
?(_anzahl1 == 3): goto "m3";
?(_anzahl1 == 4): goto "m4";
?(_anzahl1 == 5): goto "m5";
?(_anzahl1 >= 6): goto "zv";



#m1
?(alive (_feinde select 0)): _marker1=createmarkerlocal ["marker1", position (_feinde select 0)]
_marker1 setMarkerShapelocal "ICON"
"marker1" setMarkerTypelocal "DOT"
goto "check"


#m2
?(alive (_feinde select 0)): _marker1=createmarkerlocal ["marker1", position (_feinde select 0)]
_marker1 setMarkerShapelocal "ICON"
"marker1" setMarkerTypelocal "DOT"
?(alive (_feinde select 1)): _marker2=createmarkerlocal ["marker2", position (_feinde select 1)]
_marker2 setMarkerShapelocal "ICON"
"marker2" setMarkerTypelocal "DOT"
goto "check"

((etc. bis #m5))

;Ausgabe
#check

hint format["Radius 150m: %1 Feind(e)",_anzahl]
~20
hint ""
;marker löschen
deletemarkerlocal "marker1"
deletemarkerlocal "marker2"
deletemarkerlocal "marker3"
deletemarkerlocal "marker4"
deletemarkerlocal "marker5"
deletemarkerlocal "marker6"

~120
hint "FS85 wieder verfuegbar"
~4
hint ""
scan = _spieler addaction ["Feindscanner 85", "scripts\feindscan.sqs",[],-1,false]
exit


;eigene action benutzen
#dubel
hint "eigener FS85 benuetzen"
~4
hint ""
exit

#ZV
playsound "fs85re"
hint "Geraet ueberlastet, bitte neu booten"
~4
hint""
~45
hint "FS85 wieder verfuegbar"
~4
hint ""
scan = _spieler addaction ["Feindscanner 85", "scripts\feindscan.sqs",[],-1,false]
exit

und es funktioniert so weit ganz gut, bzw. es gab noch keine Fehler.... Das Ganze kann man sicher noch verfeinern, und schöner scripten, aber meinen Anforderungen genügt es momentan.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:22 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