Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 05.03.2011, 18:34   #1 (permalink)
500 Beiträge
 
Benutzerbild von Anemia
 
Registriert seit: 20.05.2009
Beiträge: 605
Standard Patrouille als Missionsziel

Ich habe mit hilfe von "noobfire" vor einiger zeit mal dieses script erstellt. Hier wird über einen addaction eintrag dem spieler verschiedene wegpunkte gegeben, nach beendigung bekommt er einen geldbonus und supply punkte.

Der Titel ist vielleicht nicht ganz passend gewählt, lässt sich aber nun leider nicht mehr ändern.

Das script funktioniert soweit, allerdings gibt es da ein paar schönheitsfehler.

1.: Alte wegpunkte werde nach beedigung der Patroullie nicht gelöscht oder halt wenn man eine neue patroullie starten will.
2.: Wegpunkte können auf der Map per Maus an eine x beliebige stelle gezogen werden.

Im editor habe ich an verschiedenen stellen versteckte Heli H's plaziert r1 bis r8

Die Patruouille starte ich derzeit über einen addaction eintrag an einem wasserfass in der basis.

Könnt ihr mir ein bisschen weiter helfen ?! es funktioniert ja schon fast

Code:
this addaction ["Patroullie", "missions\get_route.sqf"];
getrout.sqf
Code:
//TODO: Alte Waypoints werdern nicht richtig gelöscht.
_playerGrp = group player;
positions = [position r1, position r2, position r3, position r4, position r5, position r6, position r7, position r8]; // hier die Namen der Heli-H eintragen

_i = ceil random (count positions);
wposition = positions select _i; 
wp1 = _playerGrp addWaypoint [wposition, 0,0];
wp1 setWaypointType "MOVE";

_i = ceil random (count positions);
wposition = positions select _i; 
wp2 = _playerGrp addWaypoint [wposition, 0,1];
wp2 setWaypointType "MOVE";

_i = ceil random (count positions);
wposition = positions select _i; 
wp3 = _playerGrp addWaypoint [wposition, 0,2];
wp3 setWaypointType "MOVE";

wp4 = _playerGrp addwaypoint [position grendpos, 0,3];
wp4 setwaypointtype "MOVE";
wp4 setWaypointStatements ["true", "smp1 sidechat ""You a back in Base + 500 $""; cash = cash + 500"];

Geändert von Anemia (05.03.2011 um 19:49 Uhr).
Anemia ist offline   Mit Zitat antworten
Alt 05.03.2011, 21:08   #2 (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

Für Wegpunkte löschen habe ich einmal eine Funktion geschrieben. Die fügst du ganz am Beginn deines Skripts ein:
Code:
//Funktion alle Wegpunkgte löschen. Aufurf: <Objekt> call _clearAllWP
  _clearAllWP = compile "private['_w'];for[{_w=Count Waypoints _this},{_w>=0},{_w=_w-1}]do{deleteWaypoint[group _this,_w]}";
In deinem Fall rufst du sie zum Löschen der momentanen Wegpunkte des Spielers so auf:
player call _clearAllWP;
z.B. in deinem Skript bevor du die Wegpunkte erstellst.

Auch habe ich eine Funktion zum Wegpunkt erstellen (auch ganz oben im Skript einfügen):
Code:
//Funktion Wegpunkt hinzufügen. Aufruf: [<Objekt>,[<Position>],"Type",<sichtbar "NEVER"/"ALWAYS">] call _addWP;
  _addWP = compile "Private['_w'];_w=group(_this select 0)AddWaypoint[_this select 1,Count Waypoints(_this select 0)];_w SetWaypointType(_this select 2);_w ShowWaypoint(_this select 3);_w";
z.B. Aufruf für einen Wegpunkt in deinem Fall so:
_i = ceil random (count positions);
[player, positions select _i, "MOVE", "NEVER"] call _addWP;

Die Wegpunktnummer brauchst du nicht angeben, die wird automatisch erstellt.

Diese Wegpunkte sind auf der der Karte nicht sichtbar und können daher auch nicht verstellt werden. Sollen sie dort sichtbar sein, dann musst du an ihrer Position einen Marker erstellen.

Noch Hinweise:

Du verwendest in dem Skript globale Variable (jene ohne Unterstrich) die solltest du durch lokale ersetzen.

Du wählst mehrere zufällige Positionen aus. Da könnte es vorkommen, dass es die selben sind.
Vienna ist offline   Mit Zitat antworten
Alt 05.03.2011, 22:18   #3 (permalink)
500 Beiträge
 
Benutzerbild von Anemia
 
Registriert seit: 20.05.2009
Beiträge: 605
Standard

Zitat von Vienna Beitrag anzeigen

Für Wegpunkte löschen habe ich einmal eine Funktion geschrieben. Die fügst du ganz am Beginn deines Skripts ein:

Code:
//Funktion alle Wegpunkgte löschen. Aufurf: <Objekt> call _clearAllWP
  _clearAllWP = compile "private['_w'];for[{_w=Count Waypoints _this},{_w>=0},{_w=_w-1}]do{deleteWaypoint[group _this,_w]}";
In deinem Fall rufst du sie zum Löschen der momentanen Wegpunkte des Spielers so auf:
player call _clearAllWP;
z.B. in deinem Skript bevor du die Wegpunkte erstellst.

Auch habe ich eine Funktion zum Wegpunkt erstellen (auch ganz oben im Skript einfügen):
Code:
//Funktion Wegpunkt hinzufügen. Aufruf: [<Objekt>,[<Position>],"Type",<sichtbar "NEVER"/"ALWAYS">] call _addWP;
  _addWP = compile "Private['_w'];_w=group(_this select 0)AddWaypoint[_this select 1,Count Waypoints(_this select 0)];_w SetWaypointType(_this select 2);_w ShowWaypoint(_this select 3);_w";
z.B. Aufruf für einen Wegpunkt in deinem Fall so:
_i = ceil random (count positions);
[player, positions select _i, "MOVE", "NEVER"] call _addWP;

Die Wegpunktnummer brauchst du nicht angeben, die wird automatisch erstellt.

Diese Wegpunkte sind auf der der Karte nicht sichtbar und können daher auch nicht verstellt werden. Sollen sie dort sichtbar sein, dann musst du an ihrer Position einen Marker erstellen.

Noch Hinweise:

Du verwendest in dem Skript globale Variable (jene ohne Unterstrich) die solltest du durch lokale ersetzen.

Du wählst mehrere zufällige Positionen aus. Da könnte es vorkommen, dass es die selben sind.


Danke deiner hilfe sieht das ganze nun schonmal so aus ...

Code:
//////////////////////////////////////////////////////////////////
// Function file for Armed Assault
// Created by: TODO: Author Name
//////////////////////////////////////////////////////////////////


//Funktion alle Wegpunkgte löschen. Aufurf: <Objekt> call _clearAllWP
  _clearAllWP = compile "private['_w'];for[{_w=Count Waypoints _this},{_w>=0},{_w=_w-1}]do{deleteWaypoint[group _this,_w]}";

player call _clearAllWP;

//TODO: Alte Waypoints werdern nicht richtig gelöscht.
// mit diesem Code geht es halbwegs 

_playerGrp = group player;


positions = [position r1, position r2, position r3, position r4, position r5, position r6, position r7, position r8]; // hier die Namen der Heli-H eintragen


//Funktion Wegpunkt hinzufügen. Aufruf: [<Objekt>,[<Position>],"Type",<sichtbar "NEVER"/"ALWAYS">] call _addWP;
  _addWP = compile "Private['_w'];_w=group(_this select 0)AddWaypoint[_this select 1,Count Waypoints(_this select 0)];_w SetWaypointType(_this select 2);_w ShowWaypoint(_this select 3);_w setWaypointCompletionRadius (_this select 4);_w";


_i = ceil random (count positions);
[player, positions select _i, "MOVE", "ALWAYS",10] call _addWP;

_i = ceil random (count positions);
[player, positions select _i, "MOVE", "ALWAYS",10] call _addWP;

_i = ceil random (count positions);
[player, positions select _i, "MOVE", "ALWAYS",10] call _addWP;

_i = ceil random (count positions);
[player, positions select _i, "MOVE", "ALWAYS",10] call _addWP;


//Back to Base, dieser wegpunkt ist der startpunkt 
_i = ceil random (count positions);
[player, getpos grendpos, "MOVE", "ALWAYS"] call _addWP;
Ich habe versucht deine funktion zu erweitert , aber irgendwie ist es mir nicht gelungen. Ich wollte den radius der WP verringern ... da sie schon auslösen wenn ich noch einen gefühlen kilometer entfernt bin.
Habe zu testzwecken erstmal die WP anzeigen lassen.

wenn man diesen umstand bei seite lässt funktioniert das ding nun super
Anemia ist offline   Mit Zitat antworten
Alt 06.03.2011, 00:59   #4 (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

Den Parameter für den "Endradius" hast du in die Funktion korrekt eingefügt!

Nur hast du beim letzten Wegpunkt vergessen einen Wert dafür einzugeben. Da wird die Zeile dann nicht ausgeführt, oder das Skript überhaupt beendet.
Vienna ist offline   Mit Zitat antworten
Alt 06.03.2011, 08:01   #5 (permalink)
500 Beiträge
 
Benutzerbild von Anemia
 
Registriert seit: 20.05.2009
Beiträge: 605
Standard

Habe das im letzten WP nochmal ergänzt , scheint aber keine wirkung zu haben. es verändert leider nicht das verhalten der WP's. die werden immernoch sehr viel zu früh ausgelößt. Teste das gerade auf einer kleinen insel ...

Und leider ist es wirklich min. 1 km zu früh, wenn ich einen WP an der küste plaziere und der den schon im landesinneren als erledigt kennzeichnet. ????

hast du vielleicht auch noch einen Tipp wie ich es umgehen kann das er mir die gleichen Positionen mehrmals ausgibt ?

EDIT:
Habe nun mal versucht die unsichtbaren Heli H's durch eine Spiellogik zu tauschen, in der hoffnung das es an den H liegt. Leider auch ohne erfolg.

Geändert von Anemia (06.03.2011 um 08:12 Uhr).
Anemia ist offline   Mit Zitat antworten
Alt 06.03.2011, 11:54   #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

Das mit dem Endradius funktioniert nicht! Bug? (bei im Editor erstellten Wegpunkten allerdings schon) Man sieht zwar auf der Karten den eingestellten Radius, aber es wird immer bei 50 Meter Abstand ein Wegpunkt als erreicht angenommen.

Im Anhang eine Mission mit Testaufstellung. Wo zu sehen ist, wie die bereits verwendeten Zielpunkte (Objekte) aus der Liste entfernt sind. Auch ist die Add-Funktion korrigiert. Da war ein Fehler bei der Plazierung des Wegpunktes.

Code:
//////////////////////////////////////////////////////////////////
// Function file for Armed Assault
// Created by: TODO: Author Name
//////////////////////////////////////////////////////////////////

private ["_clearAllWP","_addWP","_basis","_allObj","_sichtbar","_obj","_wp"];

//Funktion alle Wegpunkgte löschen. Aufurf: <Objekt> call _clearAllWP
  _clearAllWP = compile "private['_w'];for[{_w=Count Waypoints _this},{_w>=0},{_w=_w-1}]do{deleteWaypoint[group _this,_w]}";
//Funktion Wegpunkt hinzufügen. Aufruf: [<Objekt>,[<Position>],"Type",<sichtbar "NEVER"/"ALWAYS">] call _addWP;
  _addWP = compile "Private['_w'];_w=group(_this select 0)AddWaypoint[_this select 1,0];_w SetWaypointType(_this select 2);_w ShowWaypoint(_this select 3);_w";

_basis    = getPos grendpos;
_allObj   = [r1, r2, r3, r4, r5, r6, r7, r8]; // hier die Namen der Heli-H eintragen
_sichtbar = "ALWAYS";

player call _clearAllWP;

_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
[player, getPos _obj, "MOVE", _sichtbar] call _addWP;

player groupchat format["%1",_allObj]; // nur zum Testen

_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
[player, getPos _obj, "MOVE", _sichtbar] call _addWP;

player groupchat format["%1",_allObj];  // nur zum Testen

_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
[player, getPos _obj, "MOVE", _sichtbar] call _addWP;

player groupchat format["%1",_allObj];  // nur zum Testen

_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
[player, getPos _obj, "MOVE", _sichtbar] call _addWP;

player groupchat format["%1",_allObj];  // nur zum Testen

//Back to Base, dieser wegpunkt ist der startpunkt 
_wp = [player, _basis, "MOVE", _sichtbar] call _addWP;
// nur zum Testen
cash = 0;
_wp setWaypointStatements ["true", "cash = cash + 500; player sideChat format['cash: %1',cash]"];
Angehängte Dateien
Dateityp: zip Wegpunkte_mit_Skript-utes.zip (1,9 KB, 28x aufgerufen)
Vienna ist offline   Mit Zitat antworten
Alt 06.03.2011, 12:53   #7 (permalink)
500 Beiträge
 
Benutzerbild von Anemia
 
Registriert seit: 20.05.2009
Beiträge: 605
Standard

Habs gerade mal getestet , es funktioniert aufjedenfall schon sehr viel besser. mit den 50 metern kann ich leben .... das ist halb so wild wenn die patroullie dann über die ganze insel verteilt ist machen die paar meter glaub ich nichts.
DANKE !!!!

Die wegpunkte lassen sich wenn sie angezeigt werden zwar verschieben, aber wenn sie nicht angezeigt werden ist auch nichts zum verschieben da

Damit man aber auf der karte trotzdem schauen kann wo man überhaupt hin muss habe ich folgendes probiert


Code:
_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
// WP Marker start
_markerstr = createMarker["WP_1",[getpos _obj]];
_markerstr setMarkerShape "ICON";
_markerstr setMarkerType "DOT";
_markerstr setMarkerPos [_obj];
//WP Marker ende
[player, getPos _obj, "MOVE", _sichtbar] call _addWP;

player groupchat format["%1",_allObj]; // nur zum Testen
Script läuft zwar normal durch , allerdings wird kein marker gesetzt ....
warum muss das alles immer so ein rumgefriemel sein.

Mir ist da gerade noch die idee gekommen..... wenn ich nun aus den erstellten wegpunkten einen für ein "event" nutzen möchte, z.b. das an einem der zufällig ausgewählten WP's feindliche KI einen hinterhalt gelegt hat oder eine IED plaziert ist. müsste ich mir nach erstellung der WP's den inhalt von _allobj ausgeben lassen , und an einer zufällig ausgewählten position aus _allobj dann meine gewünschte gegner KI beamen ?!
Anemia ist offline   Mit Zitat antworten
Alt 06.03.2011, 13:03   #8 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Buliwyf
 
Registriert seit: 11.03.2005
Ort: HH
Alter: 46
Beiträge: 1.927
Standard

Code:
_markerstr setMarkerPos (getPos _obj);
__________________
Buliwyf ist offline   Mit Zitat antworten
Alt 06.03.2011, 13:12   #9 (permalink)
500 Beiträge
 
Benutzerbild von Anemia
 
Registriert seit: 20.05.2009
Beiträge: 605
Standard

Zitat von Buliwyf Beitrag anzeigen

Code:
_markerstr setMarkerPos (getPos _obj);

Danke für die schnelle antwort , allerdings wird trotzdem kein marker erzeugt.
Anemia ist offline   Mit Zitat antworten
Alt 06.03.2011, 13:27   #10 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Buliwyf
 
Registriert seit: 11.03.2005
Ort: HH
Alter: 46
Beiträge: 1.927
Standard

Seh grad schon wieder eckige Klammern... _markerstr = createMarker["WP_1",[getpos _obj]];...

Weg mit den Dingern!

Code:
_markerstr = createMarker["WP_1",getpos _obj];
GetPos gibt Dir schon einen Array mit eckigen Klammern zurück. Somit hättest Du bei Deiner Variante eckige Klammern in eckigen Klammern...

__________________
Buliwyf ist offline   Mit Zitat antworten
Alt 06.03.2011, 13:39   #11 (permalink)
500 Beiträge
 
Benutzerbild von Anemia
 
Registriert seit: 20.05.2009
Beiträge: 605
Standard

Zitat von Buliwyf Beitrag anzeigen

Seh grad schon wieder eckige Klammern... _markerstr = createMarker["WP_1",[getpos _obj]];...

Weg mit den Dingern!

Code:
_markerstr = createMarker["WP_1",getpos _obj];
GetPos gibt Dir schon einen Array mit eckigen Klammern zurück. Somit hättest Du bei Deiner Variante eckige Klammern in eckigen Klammern...

Klasse das wars , irgendwann werde ich auch mal die syntax richtig können ... hoffe ich zumindest , blöde (){[]} ;, . und diese ganzen mist zeichen ...
Anemia ist offline   Mit Zitat antworten
Alt 06.03.2011, 14:44   #12 (permalink)
500 Beiträge
 
Benutzerbild von Anemia
 
Registriert seit: 20.05.2009
Beiträge: 605
Standard

Zitat von Anemia Beitrag anzeigen

Klasse das wars , irgendwann werde ich auch mal die syntax richtig können ... hoffe ich zumindest , blöde (){[]} ;, . und diese ganzen mist zeichen ...


EDIT:

Nun habe ich Marker eingefügt , diese möchte ich nun in richtung des nächsten WP's ausrichten...

Code:
//////////////////////////////////////////////////////////////////
// Function file for Armed Assault
// Created by: TODO: Author Name
//////////////////////////////////////////////////////////////////

private ["_clearAllWP","_addWP","_basis","_allObj","_sichtbar","_obj","_wp"];


//Funktion alle Wegpunkgte löschen. Aufurf: <Objekt> call _clearAllWP
  _clearAllWP = compile "private['_w'];for[{_w=Count Waypoints _this},{_w>=0},{_w=_w-1}]do{deleteWaypoint[group _this,_w]}";
//Funktion Wegpunkt hinzufügen. Aufruf:  [<Objekt>,[<Position>],"Type",<sichtbar  "NEVER"/"ALWAYS">] call _addWP;
  _addWP = compile "Private['_w'];_w=group(_this select  0)AddWaypoint[_this select 1,0];_w SetWaypointType(_this select 2);_w  ShowWaypoint(_this select 3);_w";

_basis    = getPos grendpos;
_allObj   = [r1, r2, r3, r4, r5, r6, r7, r8]; // hier die Namen der Heli-H eintragen
_sichtbar = "ALWAYS";

player call _clearAllWP;
deleteMarker "WP_1";
deleteMarker "WP_2";
deleteMarker "WP_3";
deleteMarker "WP_4";

_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
// WP Marker start
_markerstr = createMarker["WP_1",getpos _obj];
_markerstr setMarkerShape "ICON";
_markerstr setMarkerType "Arrow";
_markerstr setMarkerPos (getPos _obj);
//WP Marker ende
[player, getPos _obj, "MOVE", _sichtbar] call _addWP;

player groupchat format["%1",_allObj]; // nur zum Testen

_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
// WP Marker start
_markerstr = createMarker["WP_2",getpos _obj];
_markerstr setMarkerShape "ICON";
_markerstr setMarkerType "Arrow";
_markerstr setMarkerPos (getPos _obj);
//WP Marker ende
[player, getPos _obj, "MOVE", _sichtbar] call _addWP;

player groupchat format["%1",_allObj];  // nur zum Testen

_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
// WP Marker start
_markerstr = createMarker["WP_3",getpos _obj];
_markerstr setMarkerShape "ICON";
_markerstr setMarkerType "Arrow";
_markerstr setMarkerPos (getPos _obj);
//WP Marker ende
[player, getPos _obj, "MOVE", _sichtbar] call _addWP;

player groupchat format["%1",_allObj];  // nur zum Testen

_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
// WP Marker start
_markerstr = createMarker["WP_4",getpos _obj];
_markerstr setMarkerShape "ICON";
_markerstr setMarkerType "Arrow";
_markerstr setMarkerPos (getPos _obj);
//WP Marker ende
[player, getPos _obj, "MOVE", _sichtbar] call _addWP;

player groupchat format["%1",_allObj];  // nur zum Testen

//Back to Base, dieser wegpunkt ist der startpunkt 
_wp = [player, _basis, "MOVE", _sichtbar] call _addWP; // nur zum Testen

cash = 0;
_wp setWaypointStatements ["true", "cash = cash + 500; player sideChat format['cash: %1',cash]"];


"WP_1" setMarkerDir "WP_2";
"WP_2" setMarkerDir "WP_3";
"WP_3" setMarkerDir "WP_4";
"WP_4" setMarkerDir _basis;
Wie kann ich nun feststellen in welcher richtung der zweiter WP liegt ?! damit ich meinen Pfeil darauf ausrichten kann ?!

Ich habs so versucht
Code:
"WP_1" setMarkerDir "WP_2";
"WP_2" setMarkerDir "WP_3";
"WP_3" setMarkerDir "WP_4";
"WP_4" setMarkerDir _basis;
Auch mit (getpos WP_2) gehts nicht ... ?! kann man das irgendwie auslesen ?!
Anemia ist offline   Mit Zitat antworten
Alt 06.03.2011, 16:30   #13 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Buliwyf
 
Registriert seit: 11.03.2005
Ort: HH
Alter: 46
Beiträge: 1.927
Standard

Kennst Du diese Seite?

Sollte dem nicht so sein, dann solltest Du schleunigst damit anfangen, Dir die Befehle, die Du verwendest, dort vorher mal anzuschauen. In den Beschreibungen steht deutlich beschrieben, wie ein Befehl zu verwenden ist... meistens sind sogar Beispiele dazu vorhanden. Was Du machst hat ziemlich viel mit Rätselraten und Phantasie zu tun...

setMarkerDir zB. dort steht man soll einen Winkel und kein Objekt angeben. Wenn Du keienn Winkel hast, dann musst Du den vorher errechnen. Dazu gibt es zB von BIS erstellte Funktionen die Du nutzen könnstet: >> click <<

__________________
Buliwyf ist offline   Mit Zitat antworten
Alt 06.03.2011, 16:54   #14 (permalink)
500 Beiträge
 
Benutzerbild von Anemia
 
Registriert seit: 20.05.2009
Beiträge: 605
Standard

Zitat von Buliwyf Beitrag anzeigen

Kennst Du diese Seite?

Sollte dem nicht so sein, dann solltest Du schleunigst damit anfangen, Dir die Befehle, die Du verwendest, dort vorher mal anzuschauen. In den Beschreibungen steht deutlich beschrieben, wie ein Befehl zu verwenden ist... meistens sind sogar Beispiele dazu vorhanden. Was Du machst hat ziemlich viel mit Rätselraten und Phantasie zu tun...

setMarkerDir zB. dort steht man soll einen Winkel und kein Objekt angeben. Wenn Du keienn Winkel hast, dann musst Du den vorher errechnen. Dazu gibt es zB von BIS erstellte Funktionen die Du nutzen könnstet: >> click <<


Hatte mir das vorher in der Wiki schon angeschaut ... jaa ... aber probieren kann man ja mal momentan arbeite ich noch viel nach dem try and error prinzip... ich weiß das ist nicht unbedingt die beste methode.

Danke aufjedenfall für die links.... das mit den funktionen werd ich mir mal genauer anschauen... da sind sicherlich noch so 2 - 3 andere interessante dinge drinne. Scripten hat für mich momentan wirklich noch viel mit rätselraten zu tun .... aber mein verständniss wird immer besser ....
Die Community hier auf a-a.de hat auch einen großen teil dazu beigetragen ... man lernt es halt leider nicht vom einen auf den nächsten tag.
Anemia ist offline   Mit Zitat antworten
Alt 06.03.2011, 17:00   #15 (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

Für den Befehl setMarkerDir benötigst du den Winkel zwischen zwei Positionen. Den Winkel errechnet diese Funktion:
Code:
//Funktion Winkel zwischen 2 Positionen: [[Position-VON],[Position-ZU]] call _dir2obj;
_dir2obj=compile "private['_p1','_p2','_d'];_p1=_this select 1;_p2=_this select 0;_d=((_p1 select 0) - (_p2 select 0))atan2((_p1 select 1) - (_p2 select 1));if (_d<0)then{_d=_d+360};_d";
Dabei ist zu beachten VON welcher Position ZU welcher der Winkel gezeigt werden soll. VON ist als erster Parameter anzugeben, ZU als zweiter.

z.B.

"Marker1" setMarkerDir ([waypointPosition [group Player, 1],waypointPosition [group Player, 2]] call _dir2obj)


Der Aktivierungsbreich eines Skript-Wegpunktes kann nicht kleiner als 50m sein. Es gibt aber eine Möglichkeit ihn größer als 50 Meter zu machen (falls benötigt).

Dazu wurde die Funktion für die Wegpunkte entsprechend geändert! Zur (nicht) Sichtbarkeit aller Wegpunkte reicht ein Aufruf beim letzten Wegpunkt. Auch muss ein erster Wegpunkt direkt beim Spieler/KI sein.

Code:
//////////////////////////////////////////////////////////////////
// Function file for Armed Assault
// Created by: TODO: Author Name
//////////////////////////////////////////////////////////////////

private ["_clearAllWP","_addWP","_basis","_allObj","_sichtbar","_obj","_wp"];


//Funktion alle Wegpunkgte löschen. Aufurf: <Objekt> call _clearAllWP
  _clearAllWP = compile "private['_w'];for[{_w=Count Waypoints _this},{_w>=0},{_w=_w-1}]do{deleteWaypoint[group _this,_w]}";

//Funktion Wegpunkt hinzufügen. Aufruf: [<Objekt>,[<Position>],"Type",<Aktivierungsabstand in Meter>] call _addWP;
  _addWP = compile "Private['_w'];_w=group(_this select 0)AddWaypoint[_this select 1,0];_w SetWaypointType(_this select 2);_w setWaypointCompletionRadius(_this select 3);_w setWaypointStatements ['true',''];_w";
  //Der Aktivierungsabstand wird nur berücksichtigt wenn er über 50 Meter ist!!!!
  //Der 1.Wegpunkt ist direkt an der Position des Spielers/KI zu setzen.

_basis    = getPos grendpos;
_allObj   = [r1, r2, r3, r4, r5, r6, r7, r8]; // hier die Namen der Heli-H eintragen
_sichtbar = "ALWAYS"; // oder "NEVER"

player call _clearAllWP; 

// 1.Wegpunkt direkt beim Spieler!!
[player, getPos player, "MOVE", 0] call _addWP;

_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
[player, getPos _obj, "MOVE", 100] call _addWP;

_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
[player, getPos _obj, "MOVE", 100] call _addWP;

_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
[player, getPos _obj, "MOVE",100] call _addWP;

_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
[player, getPos _obj, "MOVE", 100] call _addWP;

//Back to Base, dieser wegpunkt ist der startpunkt 
_wp = [player, _basis, "MOVE", 100] call _addWP;
//beim letzten Wegpunkt hinzufügen ob die Wegpunkte angezeigt werden sollen
_wp ShowWaypoint  _sichtbar;

// nur zum Testen
cash = 0;
_wp setWaypointStatements ["true", "cash = cash + 500; player sideChat format['cash: %1',cash]"];
Vienna ist offline   Mit Zitat antworten
Alt 06.03.2011, 17:59   #16 (permalink)
5000 Beiträge
 
Benutzerbild von Xeno
 
Registriert seit: 03.01.2008
Alter: 77
Beiträge: 6.547
Standard

*deleted*

Xeno
__________________
In arma everything is made of refined explodium, armored with wet paper towels.

Geändert von Xeno (03.01.2014 um 09:59 Uhr). Grund: Anführungszeichen entfernt.
Xeno ist offline   Mit Zitat antworten
Alt 06.03.2011, 21:10   #17 (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

Diese Funktionen sind noch "Altlasten". Ich habe mir darüber eigentlich nicht viel Gedanken gemacht. Dabei bemühe ich mich sonst immer keine "Takte" zu vergeuden. Da geht bei obigem einiges verloren.
Vienna ist offline   Mit Zitat antworten
Alt 07.03.2011, 19:56   #18 (permalink)
500 Beiträge
 
Benutzerbild von Anemia
 
Registriert seit: 20.05.2009
Beiträge: 605
Standard

Danke für eure super Hilfe hier , damit evtl. noch jemand anderes an dem Script sein spass haben kann , poste ich hier dann mal meine momentane fassung.

Für alle die nicht mitgelesen haben.
Dieses Script erstellt zufällig angeordnete Wegpunkte, an vorher definierte Punkte auf der Karte, für den Spieler.
An den jeweiligen Punkten werden Marker in Pfeilform generiert die auf den nächst folgenden WP zeigen.

To Do - Editor
1.: Plaziere eine Spiel-Logik oder Objekt mit Namen : grendpos
Das ist der Punkt an dem jede Patrouille endet.

2.: Zum plazieren der Patrouillen Wegpunkte erstelle fortlaufend benummert
jeweils eine Spiel-Logik an gewünschter Stelle.
Im script sind das r1 - r8 , weitere mögliche WP's sind dort einzutragen.

3.: Plaziere ein Objekt deiner Wahl mit folgender Initzeile
Code:
this addaction ["Patroullie", "missions\get_route.sqf"];
get_route.sqf
Code:
//////////////////////////////////////////////////////////////////
// Welcome to the Jungel - Patrouille
// Created by: Anemia 
// Special Thanks to: Vienna & Buliwyf
// Version 1.0
//////////////////////////////////////////////////////////////////

private ["_clearAllWP","_addWP","_basis","_allObj","_sichtbar","_obj","_wp"];


//Funktion alle Wegpunkgte löschen. Aufurf: <Objekt> call _clearAllWP
 _clearAllWP = compile "private['_w'];for[{_w=Count Waypoints _this},{_w>=0},{_w=_w-1}]do{deleteWaypoint[group _this,_w]}";

//Funktion Wegpunkt hinzufügen. Aufruf: [<Objekt>,[<Position>],"Type",<Aktivierungsabstand in Meter>] call _addWP;
//Der Aktivierungsabstand wird nur berücksichtigt wenn er über 50 Meter ist!!!!
//Der 1.Wegpunkt ist direkt an der Position des Spielers/KI zu setzen.
_addWP = compile "Private['_w'];_w=group(_this select 0)AddWaypoint[_this select 1,0];_w SetWaypointType(_this select 2);_w setWaypointCompletionRadius(_this select 3);_w ShowWaypoint(_this select 4);_w setWaypointStatements ['true',''];_w";



//Funktion Winkel zwischen 2 Positionen: [[Position-VON],[Position-ZU]] call _dir2obj;
_dir2obj=compile "private['_p1','_p2','_d'];_p1=_this select 1;_p2=_this select 0;_d=((_p1 select 0) - (_p2 select 0))atan2((_p1 select 1) - (_p2 select 1));if (_d<0)then{_d=_d+360};_d";

_basis    = getPos grendpos;
_allObj   = [r1, r2, r3, r4, r5, r6, r7, r8];  
_sichtbar = "NEVER"; // oder "NEVER"

player call _clearAllWP;
deleteMarker "WP_1";
deleteMarker "WP_2";
deleteMarker "WP_3";
deleteMarker "WP_4";
deleteMarker "WP_5";

// 1.Wegpunkt direkt beim Spieler!!
[player, getPos player, "MOVE", 0, _sichtbar] call _addWP;
// WP Marker start
_markerstr = createMarker["WP_1",getpos player];
_markerstr setMarkerShape "ICON";
_markerstr setMarkerType "Arrow";
_markerstr setMarkerText "WP 1";
//WP Marker ende

_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
[player, getPos _obj, "MOVE", 50, _sichtbar] call _addWP;
// WP Marker start
_markerstr = createMarker["WP_2",getpos _obj];
_markerstr setMarkerShape "ICON";
_markerstr setMarkerType "Arrow";
_markerstr setMarkerText "WP 2";
//WP Marker ende


_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
[player, getPos _obj, "MOVE", 50, _sichtbar] call _addWP;
// WP Marker start
_markerstr = createMarker["WP_3",getpos _obj];
_markerstr setMarkerShape "ICON";
_markerstr setMarkerType "Arrow";
_markerstr setMarkerText "WP 3";
//WP Marker ende

_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
[player, getPos _obj, "MOVE", 50, _sichtbar] call _addWP;
// WP Marker start
_markerstr = createMarker["WP_4",getpos _obj];
_markerstr setMarkerShape "ICON";
_markerstr setMarkerType "Arrow";
_markerstr setMarkerText "WP 4";
//WP Marker ende

_obj = _allObj select (ceil random (count _allObj) - 1);
_allObj = _allObj - [_obj];
[player, getPos _obj, "MOVE", 50, _sichtbar] call _addWP;
// WP Marker start
_markerstr = createMarker["WP_5",getpos _obj];
_markerstr setMarkerShape "ICON";
_markerstr setMarkerType "Arrow";
_markerstr setMarkerText "WP 5";
//WP Marker ende

//Back to Base, dieser wegpunkt ist der startpunkt 
_wp = [player, _basis, "MOVE", 50] call _addWP;
//beim letzten Wegpunkt hinzufügen ob die Wegpunkte angezeigt werden sollen

_wp ShowWaypoint  _sichtbar;

// nur zum Testen
cash = 0;
_wp setWaypointStatements ["true", "cash = cash + 500; player sideChat format['cash: %1',cash]"];



// Ausrichtung der Wegpunkte , von - zu wegpunkt possition sollten mehr wegpunkte erstellt werden, muss müssen diese hier aufgeführt werden.
"WP_1" setMarkerDir ([waypointPosition [group Player, 0],waypointPosition [group Player, 1]] call _dir2obj);
"WP_2" setMarkerDir ([waypointPosition [group Player, 1],waypointPosition [group Player, 2]] call _dir2obj);
"WP_3" setMarkerDir ([waypointPosition [group Player, 2],waypointPosition [group Player, 3]] call _dir2obj);
"WP_4" setMarkerDir ([waypointPosition [group Player, 3],waypointPosition [group Player, 4]] call _dir2obj);
"WP_5" setMarkerDir ([waypointPosition [group Player, 4],waypointPosition [group Player, 5]] call _dir2obj);
Anemia ist offline   Mit Zitat antworten
Alt 07.03.2011, 22:20   #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

Versuche vielleicht noch einiges eleganter zu lösen.

Die Marker löschen mit forEach:

{...} forEach [....];

Dann eine Funktion zum erstellen der Marker, die so aufzurufen ist:

["Name",Position,"Shape","Type","Text"] call _marker;

Weil Xeno mich gerügt hat eine veraltete Programmierung zu verwenden, zeige ich dir noch wie es sein soll:
Code:
//Funktion .....
_marker = 
  {
    private "_m";
    _m = createMarker[_this select 0, _this select 1];
    _m setMarkerShape _this select 2;
    _m setMarkerType  _this select 3;
    _m setMarkerText  _this select 4;
    _m
  };
Das letzte allein stehende _m (ohne Strichpunkt) dient der Rückgabe aus der Funktion, falls du die MarkerID außerhalb der Funktion noch zu was brauchen solltest.
Keine Kommentare ( // ....) oder Pausen ( sleep 1; ) in eine Funktion schreiben (zwischen den {....}).
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


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