Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 07.09.2009, 00:06   #1 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard Luftabwehr Radar

Soo ... wollte mal wieder ein nettes Feature skripten, aber da hab ich ein kleines Problem
Wollte das Luftabwehr Radar funktionstüchtig machen. Alle Flugzeuge im Radius von 1 km sollen auf der Karte markiert werden.
Habe folgendes probiert:
Code:
_radar = _this select 0;
_enemyside = _this select 1;
_i = 0;

While {(alive _radar)} do {
	_air = _radar nearObjects ["AIR",1000];
	hint format ["%1",_air];
	_plane = _air select _i;
	_type = typeOf _plane;
	_max = (count _air) - 1;
	_i = _i + 1;
	
	{
	_m = createMarkerLocal ["planemarker", position _x];
	_m setMarkerTypeLocal "Warning";
	_m setMarkerTextLocal _type;
	} foreach _air;
	
	If (_i > _max) then {_i = 0};
	sleep 1;
	deleteMarkerLocal _m;
};
Aufruf über:
Code:
_handle = [this] execVM "radar.sqf";
Es werden zwar genau die richtige Anzahl an Markern erstellt, aber alle befinden sich an der Position des zuletzt gemeldeten Flugzeuges.
Außerdem funktioniert die Löschung des Markers nicht :/
Cyborg11 ist offline   Mit Zitat antworten
Alt 07.09.2009, 00:10   #2 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von TeRp
 
Registriert seit: 02.04.2003
Ort: San Francisco
Beiträge: 1.919
Standard

Dir fehlt die for-Schleife.

Die while-Schleife läuft solange der Radar lebt; dann fehlt halt noch die Schleife, die für jedes Luftfahrzeug einmal den Marker setzt.

Also im Prinzip in Pseudocode

while (alive)
{
alle_Flugzeuge auslesen
for alle_Flugzeuge do
{ marker erstellen }
}
__________________

TeRp ist offline   Mit Zitat antworten
Alt 07.09.2009, 00:31   #3 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

for ... foreach ... alles das selbe
Code:
_radar = _this select 0;
_enemyside = _this select 1;
_i = 0;

While {(alive _radar)} do {
	_air = _radar nearObjects ["AIR",1000];
	hint format ["%1",_air];
	_plane = _air select _i;
	_type = typeOf _plane;
	_max = (count _air) - 1;
	
	for [{_i = 0},{_i <= _max},{_i = _i + 1}] do {  
		_m = createMarkerLocal ["planemarker", position _plane];
		_m setMarkerTypeLocal "Warning";
		_m setMarkerTextLocal _type;
	};

	_i = _i + 1;
	If (_i > _max) then {_i = 0};	
	sleep 1;
	deleteMarkerLocal _m;
};
Das selbe Problem wie oben ^^
Cyborg11 ist offline   Mit Zitat antworten
Alt 07.09.2009, 00:51   #4 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von TeRp
 
Registriert seit: 02.04.2003
Ort: San Francisco
Beiträge: 1.919
Standard

Na ja, also oben dein Script war gelinde gesagt verwirrend, da war vieles durcheinander geworfen.
Das aktuelle sieht schon strukturierter und durchdachter aus, trotzdem ist hier noch vieles falsch.

1.) _plane verweist immer auf das selbe Flugzeug! Das gehört in die for-Schleife, denn hier läuft die Variable _i und nicht außerhalb.

2.) Die Markernamen müssen natürlich noch dynamisch angepasst werden. Momentan wird jeder Marker mit _m referenziert, d.h., nach einem Ablauf der while-Schleife ist immer nur noch der letzte Marker unter _m abelegt! Also wird auch nur dieser eine gelöscht!

Fix das erstmal, dann schauen wir weiter
__________________


Geändert von TeRp (07.09.2009 um 00:53 Uhr).
TeRp ist offline   Mit Zitat antworten
Alt 07.09.2009, 01:35   #5 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

1. Argh stimmt, hast Recht. Gehört ja in die Forschleife ^^

2. Wie mach ich denn so einen dynamischen Namen? ^^ Steh grad aufm Schlauch. Ist ja auch schon halb 2

Code:
_radar = _this select 0;
_enemyside = _this select 1;
_i = 0;

While {(alive _radar)} do {
	_air = nearestObjects [_radar,["AIR"],1000];
	hint format ["%1",_air];
	_max = (count _air) - 1;
	
	for [{_i = 0},{_i <= _max},{_i = _i + 1}] do {  
		_plane = _air select _i;
		_type = typeOf _plane;
		_m =  createMarkerLocal ["Marker", position _plane];
		_m setMarkerTypeLocal "Warning";
		_m setMarkerTextLocal _type;
	};
	sleep 1;
	deleteMarkerLocal _m;
};
Hab gerade gemerkt, dass die Marker immer nur an der Position des zuerst erscheinenden Flugzeugs im Array _air erscheinen.

Lol ... gerade beim Testen hat sich wohl der KA-52 Pilot überlegt, dass das Radar doch keine so gute Idee ist. Er hat dann gewendet und ist mit Fullspeed in das Radar reingeflogen und hats zerstört. Lol. Der hatte nicht mal einen Wegpunkt und das Radar ist sogar Leer Und da soll mal einer sagen, die KI ist in ArmA 2 nicht gut. Die denkt sogar mit.
Cyborg11 ist offline   Mit Zitat antworten
Alt 08.09.2009, 21:01   #6 (permalink)
50 Beiträge
 
Registriert seit: 26.07.2009
Ort: Baden-Württemberg
Alter: 25
Beiträge: 71
TERMISOLDATOR eine Nachricht über ICQ schicken TERMISOLDATOR eine Nachricht über Skype™ schicken
Standard

und, was macht dein Radar so??? sorgts immernoch dafür dass die dumme ki anfängt zu denken??
mfg
termi
TERMISOLDATOR ist offline   Mit Zitat antworten
Alt 08.09.2009, 22:18   #7 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

In den meisten Fällen ja lol.

Aber es funktioniert jetzt. Feindliche Truppen werden auf der Karte mit einem Marker markiert Dieser bewegt sich dann im 1 Sekunden Takt immer an die aktuelle Position des Feindes.

Baue evtl. noch ein, dass die eigenen verbündeten Lufteinheiten auch auf der Karte mit grünen Markierungen dargestellt werden.
Cyborg11 ist offline   Mit Zitat antworten
Alt 08.09.2009, 23:14   #8 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Hemingway
 
Registriert seit: 31.05.2009
Beiträge: 321
Standard

hast du schon ne angabe, obs sich um jäger, bomber oder helis handelt drin?
__________________
Kickstart fighter launch
Throttle set to full
Speed king race to win
Afterburners roaring
Ghostlike counterstrike
Takes them by surprise
Hemingway ist offline   Mit Zitat antworten
Alt 08.09.2009, 23:54   #9 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

Es wird einfach auf den Feinden der "o_air" Marker erstellt Der NATO Marker für Lufteinheitentruppen

Und neben dem Marker steht der Typ des gesichteten Feindes. Passt doch so oder?
Cyborg11 ist offline   Mit Zitat antworten
Alt 09.09.2009, 00:27   #10 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Hemingway
 
Registriert seit: 31.05.2009
Beiträge: 321
Standard

achso ja, das geht natürlich auch..

ich dachte, du lässt auf der karte nur rote und grüne "bleeps", also punkte, erscheinen^^
__________________
Kickstart fighter launch
Throttle set to full
Speed king race to win
Afterburners roaring
Ghostlike counterstrike
Takes them by surprise
Hemingway ist offline   Mit Zitat antworten
Alt 17.09.2009, 17:19   #11 (permalink)
50 Beiträge
 
Benutzerbild von Althalus
 
Registriert seit: 22.08.2008
Beiträge: 95
Standard

und wann wird das script final? klingt gut für ein paar missions ideen die ich habe
Althalus ist offline   Mit Zitat antworten
Alt 17.09.2009, 18:16   #12 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

Wenn ich jetzt noch rausfinden würde, wie ich den Marker nur für die jeweilige Seite des zugehörigen Radars anzeigen lassen könnte.
Cyborg11 ist offline   Mit Zitat antworten
Alt 17.09.2009, 21:57   #13 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Hemingway
 
Registriert seit: 31.05.2009
Beiträge: 321
Standard

ich würd mal sagen, so wie es in den warfare-missionen auch gelöst ist. also das nur die eigene seite marker, die für truppenteile stehen, sehen kann
__________________
Kickstart fighter launch
Throttle set to full
Speed king race to win
Afterburners roaring
Ghostlike counterstrike
Takes them by surprise
Hemingway ist offline   Mit Zitat antworten
Alt 18.10.2009, 22:30   #14 (permalink)
Newbie
 
Registriert seit: 18.10.2009
Beiträge: 30
Icon6

Bitte schicke doch mal deinen aktuellen Quellcode soweit Du bist. Bisher scheint mir der Code der hier drin ist so halb fertig, die letzten Änderungen sind leider nicht sonderlich dokumentiert.
baumeister ist offline   Mit Zitat antworten
Alt 18.10.2009, 22:33   #15 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

Code:
// ********************************************
// Script File for ArmA2
// Made by: Cyborg11
// Version: 1.0
// Usage: 
// _handle = [radarname, enemyside, radius, minheight, maxheight] execVM "radar.sqf";
// Example:
// _handle = [this,east,1500,30,600] execVM "radar.sqf";
// ********************************************

_radar = _this select 0;
_enemyside = _this select 1;
_radius = _this select 2;
_minheight = _this select 3;
_maxheight = _this select 4;
_i = 0;
_markers = [];

While {(alive _radar)} do {
	_air = nearestObjects [_radar,["AIR"],_radius];
	_max = (count _air) - 1;
	
	for [{_i = 0},{_i <= _max},{_i = _i + 1}] do {  
		_plane = _air select _i;
		_type = typeOf _plane;
		_m = createMarkerLocal [format ["%1_%2", _type, _plane], position _plane];
		_height = (getPosASL _plane) select 2;
		If (((side _plane) == _enemyside && _enemyside == east) && ((_height > _minheight) && (_height < _maxheight))) then {	
			_m setMarkerTypeLocal "o_air";
			_m setMarkerColorLocal "ColorRed";
			_m setMarkerTextLocal (format ["%1",_type]);
		};
		If (((side _plane) == _enemyside && _enemyside == west) && ((_height > _minheight) && (_height < _maxheight))) then {
			_m setMarkerTypeLocal "b_air";
			_m setMarkerColorLocal "ColorRed";
			_m setMarkerTextLocal (format ["%1",_type]);
		};
		_markers = _markers + [_m];
	};
	sleep 1;
	{deleteMarkerLocal _x} foreach _markers;
};
Funktioniert auch prima. Müsste man jetzt nur noch für mehrere Seiten erweitern und dass nur Seite die Markierungen sieht, die das Radar benutzt
Also wäre im Moment eher was für Coop.

Test für 2 Seiten schaut so aus:
Code:
// ********************************************
// Script File for ArmA2
// Made by: Cyborg11
// Version: 1.0
// Usage: 
// _handle = [radarname, enemyside, radius, minheight, maxheight] execVM "radar.sqf";
// Example:
// _handle = [this,east,1500,30,600] execVM "radar.sqf";
// ********************************************

_radar = _this select 0;
_ownside = _this select 1;
_radius = _this select 2;
_minheight = _this select 3;
_maxheight = _this select 4;
_i = 0;
_markers = [];

While {(alive _radar)} do {
	_air = nearestObjects [_radar,["AIR"],_radius];
	_max = (count _air) - 1;
	
	for [{_i = 0},{_i <= _max},{_i = _i + 1}] do {  
		_plane = _air select _i;
		_type = typeOf _plane;
		_m = createMarkerLocal [format ["%1_%2", _type, _plane], position _plane];
		_height = (getPosASL _plane) select 2;
		If ((_height > _minheight) && (_height < _maxheight)) then {	
			If (_ownside == west && (side _plane) == _ownside) then {
				_m setMarkerTypeLocal "b_air";
				_m setMarkerColorLocal "ColorGreen";
				_m setMarkerTextLocal (format ["%1",_type]);
			} else {
				_m setMarkerTypeLocal "o_air";
				_m setMarkerColorLocal "ColorRed";
				_m setMarkerTextLocal (format ["%1",_type]);
			};
			
			If (_ownside == east && (side _plane) == _ownside) then {
				_m setMarkerTypeLocal "o_air";
				_m setMarkerColorLocal "ColorGreen";
				_m setMarkerTextLocal (format ["%1",_type]);
			} else {
				_m setMarkerTypeLocal "b_air";
				_m setMarkerColorLocal "ColorRed";
				_m setMarkerTextLocal (format ["%1",_type]);
			};
		};
		_markers = _markers + [_m];
	};
	sleep 1;
	{deleteMarkerLocal _x} foreach _markers;
};
Klappt aber nicht ganz
Cyborg11 ist offline   Mit Zitat antworten
Alt 18.10.2009, 23:02   #16 (permalink)
Newbie
 
Registriert seit: 18.10.2009
Beiträge: 30
Standard

Great Dude! Ich hoffe hiermit klappen die Gehversuche auf meiner Seite besser. Das mit der zweiten Schleife hatte ich auch schon nachgebaut.

UPDATE: Supercool. Wollte noch einen Kreis auf die Map zeichen (dachte DrawMapEllipse macht das ^^) aber das ging dann schief weil ich irgendwie eine referenz auf die map brauche. Das ist zuviel des guten gerade bei so wenig offizieller Dokumentaion.

Geändert von baumeister (18.10.2009 um 23:39 Uhr).
baumeister ist offline   Mit Zitat antworten
Alt 23.10.2009, 20:09   #17 (permalink)
Newbie
 
Registriert seit: 18.10.2009
Beiträge: 30
Standard

Im Artillerie Modul (SOM) gibts einen Radius auf der Karte. Mal schaun ob ich da abgucken kann, wie man den zeichnet.
baumeister ist offline   Mit Zitat antworten
Alt 24.01.2011, 11:48   #18 (permalink)
Newbie
 
Benutzerbild von WolDraDes
 
Registriert seit: 12.01.2010
Beiträge: 8
Standard

Sorry das ich hier das ganze nochmal aufwährme. Aber funzt das Radar inzwischen für beide Seiten???
Bräuchte das für unser Event. Und die sache klingt sehr gut. Das können wir echt gebrauchen.
__________________
WolDraDes ist offline   Mit Zitat antworten
Alt 24.01.2011, 21:15   #19 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Hier ein Radar welches unbekannte Flugobjekte blau, feindliche rot und eigene grün anzeigt.

Dazu auch im Anhang eine Beispielmission.

Code:
// Radar zeigt Flugobjekte          [Vienna, 24.01.2011]
// Unbekannte Flugobjekte sind blau, eigene grün, feindliche rot.
// Aufruf: [Radarobjekt, Radarradius, minimale Flugobjekthöhe] execVM "Radar.sqf"
// Beispiel für Auslöser: temp = [player,2000,10] execVM "Radar.sqf"

private ["_radar","_radius","_hoehe","_marker","_m","_c","_t"];

_radar  = _this select 0;
_radius = _this select 1;
_hoehe  = _this select 2;

while {alive _radar} do
  {
    //Map offen?
    if (visibleMap) then 
      {
        _marker = [];
         //Durchlauf aller Flugobjekte im Radarbereich 
        {
          if (getPos _x select 2 > _hoehe) then
            {
              //Marker für Flugobjekte erstellen
              _m = createMarkerLocal [str _x, position _x];
              _m setMarkerTypeLocal "b_air";
              if(player countUnknown[_x]==1)then{_t=" ?";_c="ColorBlue"}
              else{_t=typeOf _x;if(player countFriendly[_x]==1)then{_c="ColorGreen"}
                                else{_c="ColorRed"}};
              _m setMarkerTextLocal str _t;
              _m setMarkerColorLocal _c;
              _marker = _marker + [_m]
            }
        } forEach nearestObjects [_radar,["AIR"],_radius];
         sleep 2;
        //alle Flugobjektmarker löschen
        {deleteMarkerLocal _x} foreach _marker 
      }
    else
      {
        sleep 2
      }
   }
Angehängte Dateien
Dateityp: zip FlugRadar.utes.zip (3,0 KB, 96x aufgerufen)
Vienna ist offline   Mit Zitat antworten
Alt 03.02.2011, 23:47   #20 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

In dieser Version wird der Radarbereich durch eine blinkende Kreislinie angezeigt (nicht ident mit dem zweiten Skript in obiger Beispielmission, das den Radarbereich als blinkende Fläche anzeigt).
Code:
// Lokales Radar zeigt Flugobjekte          [Vienna, 03.02.2011]
// Unbekannte Flugobjekte sind blau, freundliche grün, feindliche rot.
// Aufruf: [Radarobjekt, Radarradius, minimale Flugobjekthöhe] execVM "Radar.sqf"
// Beispiel für Auslöser: temp = [player,2000,10] execVM "Radar.sqf"

private ["_radar","_radius","_hoehe","_r","_marker","_m","_c","_t"];

_radar  = _this select 0;
_radius = _this select 1;
_hoehe  = _this select 2;

while {alive _radar} do
  {
    //Map offen?
    if (visibleMap) then 
      {
        //Durchlauf aller Flugobjekte im Radarbereich 
        _marker = [];
        {
          if (getPos _x select 2 > _hoehe) then
            {
              //Marker für Flugobjekte erstellen
              _m = createMarkerLocal [str _x, position _x];
              _m setMarkerTypeLocal "b_air";
              if(player countUnknown[_x]==1)then{_t="  ?";_c="ColorBlue"}
              else{_t=typeOf _x;if(player countFriendly[_x]==1)then{_c="ColorGreen"}
                                else{_c="ColorRed"}};
              _m setMarkerTextLocal str _t;
              _m setMarkerColorLocal _c;
              _marker = _marker + [_m]
            }
        } forEach nearestObjects [_radar,["AIR"],_radius];
        sleep 2.7;
        //Marker für Radarreichweite erstellen
        _r = createMarkerLocal ["FlugobjektRadar4711", position _radar];
        _r setMarkerShapeLocal "ELLIPSE";
        _r setMarkerBrushLocal "BORDER";
        _r setMarkerSizeLocal  [_radius,_radius];
        _r setMarkerColorLocal "ColorOrange";
        sleep 0.3;
        //Reichweitenmarker löschen
        deleteMarkerLocal _r; 
        //alle Flugobjektmarker löschen
        {deleteMarkerLocal _x} foreach _marker 
      }
    else
      {
        sleep 2
      }
   }
Vienna ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Radar/Aircontroller Al Simmons Mod und Addon Ecke 5 15.06.2006 19:50


Kontakt - HX3.de - Archiv - Nach oben

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