Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 19.03.2014, 23:11   #1 (permalink)
10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Duke49th
 
Registriert seit: 06.10.2006
Ort: Manila
Alter: 37
Beiträge: 7.938
Standard Waffencheck/Angriffshubschrauber limitieren/JIP...

So...ich hole kurz aus...

Ich habe ein Script, was checkt ob eine Launcher-Waffe (Nlaw, Titan usw.) abgeschossen wurde.

waffencheck.sqf:

Code:
waitUntil {!isNull player};
Waffencheck = {
    private ["_launcher"];
    _weaponFired = _this select 1;
    _weaponItems = ["launch_NLAW_F","launch_RPG32_F","launch_I_Titan_short_F","launch_O_Titan_short_F","launch_Titan_short_F"];
    _launcher = false;

    {
        if (_weaponFired == _x)  then {
            _launcher = true;
        };
    } forEach _weaponItems;

 

    _launcher
};
player addEventHandler["fired", {if (_this call Waffencheck) then {execVM "attackhelo.sqf"}}];
Dann lasse ich einen Attackheli spawnen und auf SAD - also Suche und Zerstöre.

attackhelo.sqf:

Code:
waitUntil {!isNull player};
_marker = createMarkerLocal ["attack", position player];
_marker setMarkerShapeLocal "ICON";
_marker setMarkerTypeLocal "mil_objective";
_marker setMarkerAlphaLocal 1;

_markerpos = getMarkerPos "attack";

_grp = createGroup East;

_heli = createVehicle ["O_Heli_Attack_02_black_F",[10500,28000], [], 0, "FLY"];
_heli flyInHeight 100;

_pilot1 = _grp createUnit ["O_Pilot_F",_heli, [], 0, "FORM"];
_pilot2 = _grp createUnit ["O_Pilot_F",_heli, [], 0, "FORM"];
_pilot1 moveInDriver _heli;
_pilot2 moveInGunner _heli;



_wp1 =_grp addWaypoint [_markerpos, 75];
_wp1 setWaypointType "MOVE";
_wp1 setWaypointSpeed "NORMAL";
_wp1 setWaypointCombatMode "RED";
_wp1 setWaypointType "SAD";
_wp1 setWaypointTimeout [1200, 1200, 1200];
_grp setcurrentWaypoint _wp1;
Meine beiden Fragen sind:

Ist der JIP in der ersten Zeitle korrekt? Habs aus dem Biki kopiert.
Edit: Ist dieser Aufruf in der Initzeile des Players JIP tauglich und optimal? "nul=execVM "waffencheck.sqf";"

Und wie mache ich es nun das er den Heli nur einmal spawnen lässt und nicht jedesmal, wenn die Launcher-Waffe abgefeuert wurde - solange der Heli noch lebt?

P.s.: Ich weiss übrigens das der MarkerAlpha auf 1 und somit sichtbar gesetzt ist...dient nur zum Testen...später isser unsichtbar...

P.p.s.: Herrje ist das alles kompliziert
__________________

Intel Board | Intel i3 2100 |Dell 8GB DDR-3 1600 | AMD HD7770 1GB | Creative Audigy EX Platinum | TrackIR 5 | Win 10 Pro x64 | Linux Mint x64 | Coolermaster Modular 620W

Geändert von Duke49th (20.03.2014 um 00:49 Uhr).
Duke49th ist offline   Mit Zitat antworten
Alt 20.03.2014, 00:45   #2 (permalink)
10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Duke49th
 
Registriert seit: 06.10.2006
Ort: Manila
Alter: 37
Beiträge: 7.938
Standard

Ich hab nochmal bisschen rumgebastelt...:

attackhelo.sqf:

Code:
waitUntil {!isNull player};

attackhelo=true;

_marker = createMarkerLocal ["attack", position player];
_marker setMarkerShapeLocal "ICON";
_marker setMarkerTypeLocal "mil_objective";
_marker setMarkerAlphaLocal 1;

_markerpos = getMarkerPos "attack";

_grp = createGroup East;

_heli = createVehicle ["O_Heli_Attack_02_black_F",[10000,25500], [], 0, "FLY"];
_heli flyInHeight 50;

_pilot1 = _grp createUnit ["O_Pilot_F",_heli, [], 0, "FORM"];
_pilot2 = _grp createUnit ["O_Pilot_F",_heli, [], 0, "FORM"];
_pilot1 moveInDriver _heli;
_pilot2 moveInGunner _heli;

_marker = createMarkerLocal ["attack2", _heli];
_marker setMarkerShapeLocal "ICON";
_marker setMarkerTypeLocal "mil_objective";
_marker setMarkerAlphaLocal 1;

_markerpos2 = getMarkerPos "attack2";


_wp1 =_grp addWaypoint [_markerpos, 0];
_wp1 setWaypointType "MOVE";
_wp1 setWaypointSpeed "NORMAL";
_wp1 setWaypointCombatMode "RED";
_wp1 setWaypointType "SAD";
_wp1 setWaypointCompletionRadius 50;
_wp1 setWaypointTimeout [12, 12, 12];
_wp1 setWaypointStatements  ["true",""];
_wp2 =_grp addWaypoint [_markerpos2, 1];
_wp2 setWaypointType "MOVE";
_wp2 setWaypointSpeed "NORMAL";
_wp2 setWaypointCombatMode "RED";
_wp2 setWaypointType "MOVE";
_wp2 setWaypointStatements ["true", "attackhelo = false;"];

_grp setcurrentWaypoint _wp1;

waitUntil{(!attackhelo) or (!alive _heli)};
if((!attackhelo) and (alive _heli))then{deleteVehicle _heli;};
if(alive _pilot1)then{deleteVehicle _pilot1};
if(alive _pilot2)then{deleteVehicle _pilot2};
deleteMarkerLocal "attack";
deleteMarkerLocal "attack2";

if(true)exitWith{player execVM "waffencheck.sqf"};
Aber die Abfrage nach dem zweiten Helo brauche ich immer noch.

Ausserdem scheint das mit der letzten Zeile nicht zu funzen...jedenfalls klappt das mit dem "waffencheck" dann nicht mehr, nachdem der Heli bzw. die Helis deleted wurden. Ich kann schiessen so lange ich will...da kommt kein neuer Heli mehr.

Ich gebs auf für heute. Ich hoffe mir kann einer helfen
__________________

Intel Board | Intel i3 2100 |Dell 8GB DDR-3 1600 | AMD HD7770 1GB | Creative Audigy EX Platinum | TrackIR 5 | Win 10 Pro x64 | Linux Mint x64 | Coolermaster Modular 620W

Geändert von Duke49th (20.03.2014 um 00:49 Uhr).
Duke49th ist offline   Mit Zitat antworten
Alt 20.03.2014, 07:45   #3 (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

Zur letzten Zeile: die Bedingung ist immer wahr. Da kannst du das gleich so schreiben:

player execVM "waffencheck.sqf";
Vienna ist offline   Mit Zitat antworten
Alt 20.03.2014, 08:07   #4 (permalink)
10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Duke49th
 
Registriert seit: 06.10.2006
Ort: Manila
Alter: 37
Beiträge: 7.938
Standard

Siehste mal..so wenig verstehe ich davon. Dachte das true bezieht sich darauf das er wartet bis das restliche Script abgearbeitet ist...also die "if then" Sachen fertig sind...

Aber wenn es eh true ist, dann müsste es doch auch so gehen...oder? Wäre ja dann nur doppelt gemoppelt. Aber er fürht es dann nicht aus.

Ich muss jetzt leider los...werde das heute Abend alles testen...auch das andere (anderer Thread) habe ich noch garnicht alles ausführlich getestet...


Stimmt denn das JIP in der ersten Zeile?

Vor allem...ich muss das doch garnicht in beide Scripte schreiben...oder? Reicht doch im "waffenscheck.sqf" - da dieses ja dann erst das "attackhelo.sqf" ausführt.

Muss leider los....
__________________

Intel Board | Intel i3 2100 |Dell 8GB DDR-3 1600 | AMD HD7770 1GB | Creative Audigy EX Platinum | TrackIR 5 | Win 10 Pro x64 | Linux Mint x64 | Coolermaster Modular 620W
Duke49th ist offline   Mit Zitat antworten
Alt 22.03.2014, 01:28   #5 (permalink)
10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Duke49th
 
Registriert seit: 06.10.2006
Ort: Manila
Alter: 37
Beiträge: 7.938
Standard



So funzt es nun..:

Code:
attackheli=true;
attackhelo=true;
{
if (typeof _x == "O_Heli_Attack_02_black_F") then {
attackhelo = false;
};
} foreach vehicles;

 If (attackhelo) then {
_marker = createMarkerLocal ["attack", position player];
_marker setMarkerShapeLocal "ICON";
_marker setMarkerTypeLocal "mil_objective";
_marker setMarkerAlphaLocal 0;

_markerpos = getMarkerPos "attack";

_grp = createGroup East;

_heli = createVehicle ["O_Heli_Attack_02_black_F",[10000,25000], [], 0, "FLY"];
_heli flyInHeight 50;

_pilot1 = _grp createUnit ["O_Pilot_F",_heli, [], 0, "FORM"];
_pilot2 = _grp createUnit ["O_Pilot_F",_heli, [], 0, "FORM"];
_pilot1 moveInDriver _heli;
_pilot2 moveInGunner _heli;

_marker = createMarkerLocal ["attack2", _heli];
_marker setMarkerShapeLocal "ICON";
_marker setMarkerTypeLocal "mil_objective";
_marker setMarkerAlphaLocal 0;

_markerpos2 = getMarkerPos "attack2";


_wp1 =_grp addWaypoint [_markerpos, 0];
_wp1 setWaypointSpeed "FULL";
_wp1 setWaypointCombatMode "RED";
_wp1 setWaypointType "SAD";
_wp1 setWaypointCompletionRadius 50;
_wp1 setWaypointTimeout [1200, 1200, 1200];
_wp1 setWaypointStatements  ["true",""];

_wp2 =_grp addWaypoint [_markerpos2, 1];
_wp2 setWaypointType "MOVE";
_wp2 setWaypointSpeed "FULL";
_wp2 setWaypointCombatMode "RED";
_wp2 setWaypointType "MOVE";
_wp2 setWaypointStatements ["true", "attackheli = false;"];

_grp setcurrentWaypoint _wp1;

waitUntil{(!attackheli) or (!alive _heli)};
if((!attackheli) and (alive _heli))then{deleteVehicle _heli;};
publicVariable "_heli";
if(alive _pilot1)then{deleteVehicle _pilot1};
if(alive _pilot2)then{deleteVehicle _pilot2};
deleteMarkerLocal "attack";
deleteMarkerLocal "attack2";
attackheli=false;
};
Also der Teil..:

Code:
attackhelo=true;
{
if (typeof _x == "O_Heli_Attack_02_black_F") then {
attackhelo = false;
};
} foreach vehicles;

 If (attackhelo) then {
Hätte ich aber ohne meinen Staffelkollegen der gerade studiert und bissl programmieren gelernt hat, nicht geschafft. (genau genommen war er es...wir hatten uns die halbe Nacht um die ohren geschlagen..) Danke Firebird
__________________

Intel Board | Intel i3 2100 |Dell 8GB DDR-3 1600 | AMD HD7770 1GB | Creative Audigy EX Platinum | TrackIR 5 | Win 10 Pro x64 | Linux Mint x64 | Coolermaster Modular 620W
Duke49th ist offline   Mit Zitat antworten
Alt 22.03.2014, 07:32   #6 (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

_pilot1 = _grp createUnit ["O_Pilot_F",_heli, [], 0, "FORM"];
_marker = createMarkerLocal ["attack2", _heli];
_heli enthält ein Objekt, verlangt wird eine Position.
https://community.bistudio.com/wiki/createUnit_array
https://community.bistudio.com/wiki/createMarkerLocal

publicVariable "_heli";
Mit einer lokalen Variablen wird das nicht klappen.
https://community.bistudio.com/wiki/publicVariable

Hast du die Anzeige von Skriptfehlern beim Aufruf von Arma nicht aktiviert? (Arma3 ?)

".....\xxx.exe" -showscripterrors

https://community.bistudio.com/wiki/...tup_Parameters
Vienna ist offline   Mit Zitat antworten
Alt 22.03.2014, 09:14   #7 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 24.02.2014
Beiträge: 100
Standard

Zitat von Duke49th Beitrag anzeigen

Code:
attackhelo=true;
{
if (typeof _x == "O_Heli_Attack_02_black_F") then {
attackhelo = false;
};
} foreach vehicles;

 If (attackhelo) then {

Kann mir einer erklären was das bringt? Also den Teil in die {} zu setzen ohne wirklich was davor steht wie if oder co?

mfg
Sajiki
Sajiki ist offline   Mit Zitat antworten
Alt 22.03.2014, 10:22   #8 (permalink)
10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Duke49th
 
Registriert seit: 06.10.2006
Ort: Manila
Alter: 37
Beiträge: 7.938
Standard

Zitat von Vienna Beitrag anzeigen

_pilot1 = _grp createUnit ["O_Pilot_F",_heli, [], 0, "FORM"];
_marker = createMarkerLocal ["attack2", _heli];
_heli enthält ein Objekt, verlangt wird eine Position.
https://community.bistudio.com/wiki/createUnit_array
https://community.bistudio.com/wiki/createMarkerLocal

publicVariable "_heli";
Mit einer lokalen Variablen wird das nicht klappen.
https://community.bistudio.com/wiki/publicVariable

Hast du die Anzeige von Skriptfehlern beim Aufruf von Arma nicht aktiviert? (Arma3 ?)

".....\xxx.exe" -showscripterrors

https://community.bistudio.com/wiki/...tup_Parameters

Doch. Und das Script arbeitet verlässlich Der Marker wird bei der Position gesetzt, wo der Heli spawnt.

Scripterror werden mir nur bei den BIS Modulen angezeigt

Die Position ist ja der Heli. Und es funzt..egal was BIS da schreibt

Darfst es gerne testen, wenn Du dich davon überzeugen möchtest:

Waffencheckhelo.zip

Edit: Setze den Alpha des Marker auf 1 und schau es dir an...geht wirklich.. Wir haben ja gestern die Mission von mir gespielt. UNd wie gesagt..beim Testen kamen keine Fehler und es ging alles genau so wie es sollte.










Zitat von Sajiki Beitrag anzeigen

Kann mir einer erklären was das bringt? Also den Teil in die {} zu setzen ohne wirklich was davor steht wie if oder co?

mfg
Sajiki

Ist überflüssig, wenn ich das (Prinzip + Scriptguide) richtig verstanden habe. Aber mein Kumpel hat es so geschrieben. Fällt mir jetzt auch erst auf, wo Du es sagst
Ne Klammer oder Semikolon zu viel ist in den meisten Fällen kein Problem...vielleicht überflüssig, aber kein Problem.

Z.B.: Kann man schreiben _Drei = 1+2;
Aber genauso auch _Drei = (1+2);
__________________

Intel Board | Intel i3 2100 |Dell 8GB DDR-3 1600 | AMD HD7770 1GB | Creative Audigy EX Platinum | TrackIR 5 | Win 10 Pro x64 | Linux Mint x64 | Coolermaster Modular 620W

Geändert von Duke49th (22.03.2014 um 11:39 Uhr).
Duke49th ist offline   Mit Zitat antworten
Alt 22.03.2014, 11:47   #9 (permalink)
10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Duke49th
 
Registriert seit: 06.10.2006
Ort: Manila
Alter: 37
Beiträge: 7.938
Standard

Habe mir gerade nochmal Gedanken darüber gemacht.

Im Grunde enthält ja _heli auch die Information der Position des Heli. Statt aber position _heli zu schreiben, habe ich einfach nur _heli geschrieben.

Da player auch nur ein Object ist, daß die Positionsangaben enthält, denke ich man könnte hier genauso das "position" weg lassen.

Aber ganz ehrlich...bin zu faul das jetzt zu testen^^

Ich denke der nimmt sich automatisch aus einem schon erstellten, also vorhandenen Object, die nötige Info..in dem Fall die Position.
__________________

Intel Board | Intel i3 2100 |Dell 8GB DDR-3 1600 | AMD HD7770 1GB | Creative Audigy EX Platinum | TrackIR 5 | Win 10 Pro x64 | Linux Mint x64 | Coolermaster Modular 620W
Duke49th ist offline   Mit Zitat antworten
Alt 22.03.2014, 12:13   #10 (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

Zitat von Duke49th Beitrag anzeigen


Edit 2: Da stehts doch sogar im Link den Du gepostet hast^^

_marker= createMarkerLocal [Marker1, position player ]

Es wird der Player (object) übernommen. ;

Lass dir zum Testen einmal diese Zeile ausgeben.

hintC format["1 = %1 \n\n2 = %2", player, position player];

Sie zeigt dir den Unterschied zwischen player und position player an.

Die Beschreibungen von createMarkerLocal und createUnit sind nicht mehr aktuell, es kann eine Position oder ein Objekt angeführt werden, vom Objekt wird automatisch die Position übernommen.
Vienna ist offline   Mit Zitat antworten
Alt 22.03.2014, 13:33   #11 (permalink)
10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Duke49th
 
Registriert seit: 06.10.2006
Ort: Manila
Alter: 37
Beiträge: 7.938
Standard

Zitat von Vienna Beitrag anzeigen

Lass dir zum Testen einmal diese Zeile ausgeben.

hintC format["1 = %1 \n\n2 = %2", player, position player];

Sie zeigt dir den Unterschied zwischen player und position player an.

Die Beschreibungen von createMarkerLocal und createUnit sind nicht mehr aktuell, es kann eine Position oder ein Objekt angeführt werden, vom Objekt wird automatisch die Position übernommen.

Ich schaus mir mal an.

Zitat von Vienna Beitrag anzeigen

Die Beschreibungen von createMarkerLocal und createUnit sind nicht mehr aktuell, es kann eine Position oder ein Objekt angeführt werden, vom Objekt wird automatisch die Position übernommen.

Aber dann passt es doch
__________________

Intel Board | Intel i3 2100 |Dell 8GB DDR-3 1600 | AMD HD7770 1GB | Creative Audigy EX Platinum | TrackIR 5 | Win 10 Pro x64 | Linux Mint x64 | Coolermaster Modular 620W
Duke49th 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


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