PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lasertarget/Recon


killshot
15.07.2014, 07:06
Moin, moin!

Ich würde es gerne zu einer Aufgabe machen, ein Objekt oder eine Person aufzuklären (anzulasern).

Alles was ich dazu bisher überhaupt im Netz finden konnte, war dieser Thread von Psychobastard:

http://hx3.de/editing-scripting-167/lasertarget-auslesen-abfragen-18894/

Ich habe für meine Zwecke alles was mit Flugzeug- und GBU-Spawn zu tun hat aus dem Script entfernt und anstelle des Hints eine Publicvariable "recon" auf true schalten lassen.

Anm: Was es mit _target_tracked = false; und _sidep = side _laserunit; auf sich hat und ob die beiden Einträge bestehen bleiben müssen, weiß ich nicht, habe sie aber einfach erstmal drin gelassen.

Ich starte das Script über einen Auslöser, ausgelöst durch Bluefor und mit dem Befehl, den Psychobastard mitgeliefert hat:

psy = [player,shilka1] execVM "CB_laser.sqf";

//by psycho
_laserunit = _this select 0;
_target = _this select 1;
_pos = [0,0,0];
_pos = position _target;
_target_tracked = false;
_sidep = side _laserunit;


_laserunit addweapon "laserdesignator";
_laserunit addmagazine "Laserbatteries";

//warte auf laserziel
while {alive _target} do
{
for [{_loop=0}, {_loop<1}, {_loop=_loop}] do
{
sleep 2;
_pos = position _target;
_laserT = (nearestObject [_pos, "LaserTarget"]);
if (!(isNull _laserT)) then {_loop = 1; recon = true; publicVariable "recon";};
};

sleep 1;
};Auf jeden Fall läuft eigentlich alles wie gewünscht; der Auftrag wird erfüllt, sobald ich den Zivilisten anlasere.

Das einzige Manko ist der Radius, in welchem man die Zielperson anlasern kann, denn es macht nichts, wenn man anstelle dieser einfach ~50m neben sie lasert bzw. Personen in der unmittelbaren Umgebung anlasert.

Von daher nun meine Frage, ob und wie man den Radius verringern kann, sodass man wirklich präzise auf das Objekt oder die Person einlasern muss?


Danke und Grüße

Buliwyf
15.07.2014, 09:19
Versuchs mit einer Änderung der Zeile:
_laserT = (nearestObject [_pos, "LaserTarget"]);
in
_laserT = (nearestObjects (https://community.bistudio.com/wiki/nearestObjects) [_pos, ["LaserTarget"], 1]);

Mit nearestObjects kannst Du zusätzlich einen Radius (bei mir mit 1 angegeben) angeben.

killshot
15.07.2014, 09:34
Danke für deine schnelle Antwort! Werd ich so schnell es geht ausprobieren heute!

Eine Frage hätte ich noch bezüglich des Ausführungskommandos.

psy = [player,shilka1] execVM "CB_laser.sqf";

Bezieht sich player auf jede spielbare Einheit in einer Multiplayermission?

Beziehungsweise wäre es ansonsten auch möglich, es mehreren spielbaren Units zuzuordnen oder auch allen Mitgliedern einer bestimmten Gruppe.

Wäre gut, wenn jeder von beispielweise 6 Spielern die Möglichkeit bekäme, das Zielobjekt/die Zielperson anzulasern und nicht nur eine Person.

Grüße

Buliwyf
15.07.2014, 09:48
Normalerweise kann es so wie Du es ausführst jeder beliebige Spieler sein, da player ja jede von einem Spieler kontrollierte Einheit ist.

killshot
15.07.2014, 14:52
Ok, muss ich dann halt mal testen, wenn ich Zugriff auf dem Server bekomme, danke.

Das mit nearestObjects hat leider nicht funktioniert, hörte sich aber gut an :D

Ich habs nochmal mit ShowScriptErrors gestartet und bekam da folgenden Output:

'...cts [_pos, ["LaserTarget"], 50]);
if (!(isNull _laserT)) then {_loop = 1; recon ...'
Error isnull: Typ Array, erwartet Objekt,Gruppe,Display
(dialog),Control,Network Object,Task,Location
File C:\Users\killshot\Documents\Arma 3 - Other Profiles\killshot\missions\test.stratis\CB_laser.s qf, line 21

Der Fehler wird also auch nicht bei deinem Vorschlag, sondern für die darauffolgende Zeile ausgegeben.

Da tut sich aber leider nichts, auch nicht, wenn ich mit den Werten Spiele 1 oder 5 oder 50, macht keinen Unterschied.

Gruß

Buliwyf
15.07.2014, 16:22
Stimmt natürlich... mein Fehler, weil nearestObjects ein Array auswirft, wo Du das eigentliche Objekt der Begierde rausfischen musst. So sollte der Kram funktionieren:

for [{_loop=0}, {_loop<1}, {_loop=_loop}] do
{
_laserArray = [];
sleep 2;
_pos = position _target;
_laserArray = (nearestObjects [_pos, ["LaserTargetW"], 5]);
_laserT = _laserArray select 0;
if (typeOf _laserT == "LaserTargetW") then {_loop = 1; recon = true; publicVariable "recon";};
};

killshot
15.07.2014, 16:32
Also hab's jetzt ein paar mal im Editor getestet und da funktionierts auf jeden Fall einwandfrei!

Dickes Dankeschön für deine starke Hilfe! :daumen:

So macht das Lasern gleich doppelten Spaß :D

Grüße

Drunken Officer
15.07.2014, 17:53
Da hab ich auch noch ne Frage. Es gibt ja Laser gelenkte bomben. Die zu spawnen kein Ding. Aber wie funktioniert es, den bomben das Ziel zuzuweisen. DoFire funktioniert nur bei Einheiten. Oder muss man ein Flugzeug mit dieser Waffe erzeugen und den Befehl geben, mit der Waffe dort hin zu schiessen?

Buliwyf
15.07.2014, 18:08
Ich denke das Flugzeug zu spawnen ist die einfachere Variante. Die lasergelenkte Rakete allein kannste nur mit komplizierter Scripterei zum fliegen kriegen. Denke da so an Befehle wie setVelocity und setVector etc... :oh: