Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 15.11.2013, 07:39   #1 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 03.07.2012
Beiträge: 118
Standard Random Distance

Hey,

ich würde eine Gruppe gerne innerhalb eines zufälligen Radius zum SpawnMarker erstellen lassen. Gibt es da eine Möglichkeit, die mit dem Script hier kompatibel ist? In etwa wie das Rotmarkierte, nur in funktionierend sozusagen ^^

Code:
if (!isServer) exitWith {};

_grp1patr = [markerPos "Wald" + (Random 100), EAST, ["TK_Commander_EP1",  "TK_Soldier_EP1", "TK_Soldier_MG_EP1", "TK_Soldier_GL_EP1",  "TK_Soldier_Medic_EP1", "TK_Soldier_AR_EP1"]] call BIS_fnc_spawnGroup;
[_grp1patr,"area2","Spawned","Combat","delete:",30] execVM "scripts\upsmon.sqf";
Ich konnte da leider nichts Brauchbares ergooglen..

Danke und Gruß
killshot ist offline   Mit Zitat antworten
Alt 15.11.2013, 08:58   #2 (permalink)
50 Beiträge
 
Benutzerbild von [GNC]JamesRyan
 
Registriert seit: 04.11.2009
Ort: Ober-Ramstadt
Beiträge: 79
[GNC]JamesRyan eine Nachricht über ICQ schicken [GNC]JamesRyan eine Nachricht über MSN schicken [GNC]JamesRyan eine Nachricht über Skype™ schicken
Standard

Ja das ist doch so ok warum sollte das nicht gehen? Allerdings dachte ich, der Befehl heißt getMarkerPos "markerName"...naja, jedenfalls machst du darum einmal runde Klammern und kannst dann random 100 gerne benutzen, allerdings erzeugt dir das beliebige Kommazahlen, daher kannst du, musst du aber nicht, mit round ceil oder floor runden.
__________________
~[3.JgKp]James~
Kompaniechef | Autor SQF-Handbuch | 3.Jägerkompanie
[GNC]JamesRyan ist offline   Mit Zitat antworten
Alt 15.11.2013, 09:58   #3 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 03.07.2012
Beiträge: 118
Standard

Danke schonmal!

Ob MarkerPos oder GetMarkerPos scheint nicht relevant zu sein, funktioniert zumindest augenscheinlich beides gleichwertig.

Ich hab jetzt nochmal

...[(markerPos "Wald" + random 100),...
...[(getMarkerPos "Wald" + random 100),...
...[(markerPos "Wald") + random 100,...
...[(getMarkerPos "Wald") + random 100,...

probiert, aber das Script läuft bei allen Varianten nicht durch, sprich es werden keine Einheiten gespawnt, geschweige denn in zufälliger Distanz zum Marker
killshot ist offline   Mit Zitat antworten
Alt 15.11.2013, 17:11   #4 (permalink)
50 Beiträge
 
Benutzerbild von [GNC]JamesRyan
 
Registriert seit: 04.11.2009
Ort: Ober-Ramstadt
Beiträge: 79
[GNC]JamesRyan eine Nachricht über ICQ schicken [GNC]JamesRyan eine Nachricht über MSN schicken [GNC]JamesRyan eine Nachricht über Skype™ schicken
Standard

Zunächst: Wenn du mit Skripten arbeitest, IMMER mit -showScripterrors starten, nur dann werden dir Compilerfehler angezeigt, sonst suchst du zu Tode. Ich denke ,es liegt nur an den falschen Klammern. Markerpos erwartet 1 Parameter, du hast danach aber noch einen, daher probier mal (getMarkerPos "Wald") + random 100. Geht das nicht, probier ichs nachher selbst

Edit: Sorry sehe erst jetzt, dass du 4 Varianten probiert hast.

Ich habe leider völlig geschlafen. Das skript möchte ja eine POSITION. Das ist aber vom Typ position, also ein 2D-Array mit [x,y]-Koordinate.

Natürlich ist es daher nicht möglich, auf markerPos "wald" irgendwie + 100 zu rechnen, was du machen musst ist folgendes:

(markerpos "Wald" select 0) + random 1oo // für x-Koord.
(markerpos "Wald" select 1) + random 100 // für y-Koord.

Das wären jetzt aber 2 Zahlenwerte, das Skript erwartet aber den Datentyp POSITION, also wieder das ganze in ein Array schreiben (daher am besten AUßERHALB deines Funktionsaufrufes als Hilfsvariable anlegen...

[[(markerPos "Wald" select 0) + random 100, (markerPos "Wald" select 1) + random 100)], ...]
__________________
~[3.JgKp]James~
Kompaniechef | Autor SQF-Handbuch | 3.Jägerkompanie

Geändert von [GNC]JamesRyan (15.11.2013 um 17:15 Uhr).
[GNC]JamesRyan ist offline   Mit Zitat antworten
Alt 15.11.2013, 21:29   #5 (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

Eine Funktion welche eine zufällige Position im Bereich einer Position zurückgibt:
Code:
//Funktion:       Rückgabe einer Position mit Bereich des 2. Parameters um die Position im 1. Parameter
//Aufrufbeispiel: ([Eine Position,Bereich um die Position] call Funktion_Bereich);
Funktion_Bereich =
 {
  [
   ((_this select 0)select 0) - (_this select 1)/2 + random(_this select 1),
   ((_this select 0)select 1) - (_this select 1)/2 + random(_this select 1)
  ]
 };
 
//Testaufruf welche den Spieler um seinen Standort herum im Bereich von 100m versetzt: 
player setPos ([position player,100] call Funktion_Bereich);
Von der Position wird vorerst die Hälfte es Bereichs abgezogen und dann der zufällige Bereich dieser Position wieder hinzugefügt.
Vienna ist offline   Mit Zitat antworten
Alt 16.11.2013, 04:31   #6 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 03.07.2012
Beiträge: 118
Standard

Danke nochmals für Eure Hilfe, auch wenn das wie staubtrockener Zement für mein Gehirn ist!

Zumindest Viennas Lösung konnte ich schonmal zum Laufen bringen.

Code:
if (!isServer) then exitWith {};

_grp1patr = [getMarkerPos "Wald", EAST, ["TK_Commander_EP1", "TK_Soldier_EP1", "TK_Soldier_MG_EP1", "TK_Soldier_GL_EP1", "TK_Soldier_Medic_EP1"]] call BIS_fnc_spawnGroup;
[_grp1patr,"area2","Spawned","Combat","delete:",30] execVM "scripts\upsmon.sqf";

//Viennas Random-Distance-Funktion
Funktion_Bereich =
 {
  [
   ((_this select 0)select 0) - (_this select 1)/2 + random(_this select 1),
   ((_this select 0)select 1) - (_this select 1)/2 + random(_this select 1)
  ]
 };

//(leader _grp1patr) setPos ([MarkerPos "Wald",100] call Funktion_Bereich); 
{_x setPos ([MarkerPos "Wald",100] call Funktion_Bereich)} foreach units _grp1patr;
Wobei jetzt natürlich entweder nur der Leader oder aber jede einzelne Einheit der Gruppe ihre eigene Zufallsposition zugewiesen bekommt.

Das sind aber beides auf jeden Fall gute Lösungen, da die Gruppe sich relativ zügig zum Leader begibt oder aber es im zweiten Fall auch gut aussieht, wenn die Gruppe erstmal verstreut spawned.

Gibt es da auch einen Weg, der gesamten Gruppe den selben Zufallspunkt zuweisen zu lassen?


Was JamesRyan gesagt hat, leuchtet mir zwar irgendwie ein, aber ich habe leider keine Ahnung, wie ich das bewerkstellige.

Das sah dann in etwa so aus

Code:
if (!isServer) exitWith {};

_array = [[(markerPos "Wald" select 0) + random 100, (markerPos "Wald" select 1) + random 100]];

_grp1patr = [getPos _array, EAST, ["TK_Commander_EP1", "TK_Soldier_EP1", "TK_Soldier_MG_EP1", "TK_Soldier_GL_EP1", "TK_Soldier_Medic_EP1"]] call BIS_fnc_spawnGroup;
[_grp1patr,"area2","Spawned","Combat","delete:",30] execVM "scripts\upsmon.sqf";
oder

Code:
if (!isServer) exitWith {};

_array setVariable [[(markerPos "Wald" select 0) + random 100, (markerPos "Wald" select 1) + random 100]];

_grp1patr = [getPos _array,  EAST, ["TK_Commander_EP1", "TK_Soldier_EP1", "TK_Soldier_MG_EP1",  "TK_Soldier_GL_EP1", "TK_Soldier_Medic_EP1"]] call BIS_fnc_spawnGroup;
[_grp1patr,"area2","Spawned","Combat","delete:",30] execVM "scripts\upsmon.sqf";
Damit schieße ich wahrscheinlich um Unlängen am Ziel vorbei

Gruß
killshot ist offline   Mit Zitat antworten
Alt 16.11.2013, 08:28   #7 (permalink)
50 Beiträge
 
Benutzerbild von [GNC]JamesRyan
 
Registriert seit: 04.11.2009
Ort: Ober-Ramstadt
Beiträge: 79
[GNC]JamesRyan eine Nachricht über ICQ schicken [GNC]JamesRyan eine Nachricht über MSN schicken [GNC]JamesRyan eine Nachricht über Skype™ schicken
Standard

Wenn Viennas Lösung funktioniert, ist doch gut Ist ja meine Lösung nur mit einem gemittelten Abstand.

Noch ein wort zu deinem letzten Code: So kann es nicht funktionieren. _array ist bei dir schon vom Typ Position, warum dann noch ein getpos davor? Geht sowieso nicht ,da getPos ein SPIELOBJEKT erwartet, _array aber eine lokale Variable ist. Einfach getpos weglassen und der Code. Allerdings hast du auch zu viele eckige Klammern. Eine Position ist vom Typ pos = [x,y], also bitte keine zwei Eckigen Klammern. Dann sollte auch das gehen. SetVariable macht da allerdings gar keinen Sinn, gleich streichen ^^
__________________
~[3.JgKp]James~
Kompaniechef | Autor SQF-Handbuch | 3.Jägerkompanie
[GNC]JamesRyan ist offline   Mit Zitat antworten
Alt 16.11.2013, 08:44   #8 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 03.07.2012
Beiträge: 118
Standard

War auch auf gar keinen Fall mit nem scharfen Unterton von mir gemeint

Ganz im Gegenteil, deine Lösung find ich sehr interessant und das ist auch eigentlich eher das, was ich gesucht hatte!

Hab es dann jetzt auch nach deinem letzten Post gerade, zu meiner Überraschung, im ersten Versuch zum Laufen gebracht!

Code:
if (!isServer) exitWith {};

_randomDistance = [(markerPos "group" select 0) + random 100, (markerPos "group" select 1) + random 100];

_grp1patr = [_randomDistance, EAST, ["TK_Commander_EP1", "TK_Soldier_EP1", "TK_Soldier_MG_EP1", "TK_Soldier_GL_EP1", "TK_Soldier_Medic_EP1", "TK_Soldier_AR_EP1"]] call BIS_fnc_spawnGroup;
[_grp1patr,"area2","Spawned","Combat","delete:",30] execVM "scripts\upsmon.sqf";
Richtig geil!

Also großen Dank nochmal an euch beide!
killshot ist offline   Mit Zitat antworten
Alt 16.11.2013, 09:18   #9 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 03.07.2012
Beiträge: 118
Standard

Finale Version (sonst spawnen die Gruppen nur NordWest/SüdOst etc. vom Marker). Also doch eine Mischung aus beiden Antworten.

Code:
if (!isServer) exitWith {};


_randomDistance = [(markerPos "group" select 0) - 100/2 + random 100, (markerPos "group" select 1) - 100/2 + random 100];

_grp1patr = [_randomDistance, EAST, ["TK_Commander_EP1", "TK_Soldier_EP1", "TK_Soldier_MG_EP1", "TK_Soldier_GL_EP1", "TK_Soldier_Medic_EP1"]] call BIS_fnc_spawnGroup;
[_grp1patr,"area2","Spawned","Combat","delete:",30] execVM "scripts\upsmon.sqf";
Problem zu 100% gelöst! Danke euch!
killshot ist offline   Mit Zitat antworten
Alt 16.11.2013, 09:39   #10 (permalink)
50 Beiträge
 
Benutzerbild von [GNC]JamesRyan
 
Registriert seit: 04.11.2009
Ort: Ober-Ramstadt
Beiträge: 79
[GNC]JamesRyan eine Nachricht über ICQ schicken [GNC]JamesRyan eine Nachricht über MSN schicken [GNC]JamesRyan eine Nachricht über Skype™ schicken
Standard

Natürlich, wir hatten ja nur random (eine Zahl), was nix anderes als immer + rechnet. Möchtest du eine Variable Distanz in beide Richtung, ist meine Lösung hier immer einen cos davorzusetzen, denn der cos nimmt nur werte zwischen -1 und 1 an, also genau eine Vorzeichenmöglichkeit. So kann man gut mit cos(random 360) beliebige Werte erzeugen, die gleichzeitig auch einen Nachfaktor bbeliebig skalieren, also z.B: (cos(random 360)*random 100) sollte alle Werte zwischen -100 und + 100 annehmen
__________________
~[3.JgKp]James~
Kompaniechef | Autor SQF-Handbuch | 3.Jägerkompanie
[GNC]JamesRyan ist offline   Mit Zitat antworten
Alt 16.11.2013, 11:57   #11 (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

Bei [GNC]JamesRyans Variante erfolgt die Plazierung um den Mittelpunkt eines Kreises, bei meiner Variante um den Mittelpunkt eines Quadrates.

Hier nochmals beide Varianten zur Übersicht.

Kreisförmig
Code:
//Funktion:       Rückgabe einer Position mit Bereich des 2. Parameters um die Position im 1. Parameter
//Aufrufbeispiel: [Eine Position,Bereich um die Position] call Funktion_Bereich
Funktion_Bereich =
 {
  [
   ((_this select 0)select 0) + cos(random 360)*(random (_this select 1)/2),
   ((_this select 0)select 1) + cos(random 360)*(random (_this select 1)/2)
  ]
 };
Quadratisch
Code:
//Funktion:       Rückgabe einer Position mit Bereich des 2. Parameters um die Position im 1. Parameter
//Aufrufbeispiel: [Eine Position,Bereich um die Position] call Funktion_Bereich
Funktion_Bereich =
 {
  [
   ((_this select 0)select 0)-(_this select 1)/2+random(_this select 1),
   ((_this select 0)select 1)-(_this select 1)/2+random(_this select 1)
  ]
 };
Testaufruf zur Funktion, welche den Spieler um einen Marker-Mittelpunkt im Bereich von 100m im Sekundentakt versetzt.
Code:
temp = [player, getMarkerPos "MarkerName"] spawn
 {
  while{true}do
   {
    _this select 0 setPos ([_this select 1,100] call Funktion_Bereich);
    sleep 1
   }
 };
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
Distance Sounds JSR Editing & Scripting 14 21.11.2013 18:55
Random Weaponscript laden @ Respawn zerogott Editing & Scripting 2 24.10.2013 15:43
[Modsuche] Suicide Bombers and Random IED Mod JSR Mods & Addons 1 07.12.2012 12:00
Arti eine gewisse Zeitlang in ein Gebiet schießen lassen Bruklin Editing & Scripting 10 25.08.2010 16:44
Random Funktion in Evo WickerMan Editing & Scripting 6 15.06.2010 16:40


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