Fragen zum Missionsbau
So nachdem ich meine Grundkenntisse im scripten durch das Addon-Bauen gewonnen habe und hier lese, was im Missionsbau so möglich ist, reizt mich der Missionsbau.
Dazu habe ich schonmal die erste Frage. Ich will einen Auftragskill machen. 5 SUV fahren von a nach b. Die Zielperson soll in einem der SUV sitzen. Aber per Zufallprinzip. Person: Opfer SUV heißen: car_suv_1 (-5) Code:
opfer moveincargo ??? |
Ich als 'Nicht-so-gut-skripter' würde das wie folgt lösen:
1. Opfer abseits an den Kartenrand stellen 2. 4 Marker in der Nähe des Opfers platzieren 3. Die Marker mit dem Opfer Gruppieren (F2) --> Resultat: Bei jedem Missionsstart ist das Opfer - zufällig - entweder an der Startposition, oder bei einem der Marker. 4. Um jeden Marker und um die Originalstartposition des Opfers einen Auslöser (= total 5 Auslöser): Aktivierung: Jeder Radius: ca. 6m Zeitverzögerung: 2 Sek. Bedingung: this and Opfer in thislist Aktivierung: Opfer moveInCargo car_suv_1 5. In der Aktivierungszeile eines jeden Auslösers jeweils einen anderen SUV als Ziel angeben (siehe fettgedruckte Zahl oben). Ich weiss, es geht eleganter. Das wäre einfach mal die 'kommt mir als Erstes in den Sinn' Variante ohne Script. :D |
In die Initialisierungszeile des Opfers schreibst du folgendes rein:
this moveInCargo([car1,car2,car3,car4,car5]select(floor(random 5))); Anstelle von car1 - car5 nimmst du die Namen deiner Fahrzeuge. |
oder, wenn man es ein wenig dynamischer haben möchte:
In die Initzeile des mittleren SUV's: Code:
temp = [this,Opfer,50] execVM "MoveInSUV.sqf"; 50 = Entfernung vom mittleren SUV bis zum entferntesten SUV MoveInSUV.sqf: Code:
private ["_this","_suv","_opfer","_radius","_suvs"]; Zitat:
|
Richtig Rockhount, für MP muss dass in der Initzeile dann so aussehen: if (local this) then {....}
Das ist auch ein gutes Beispiel um aufzuzeigen wie man das mit einem spawn-Skript lösen kann. Dabei soll es auch möglich sein anstelle von "moveInCargo" auch "moveInDriver" oder "moveInGunner" zu verwenden. Das Beispiel zeigt gleichzeitig auf, wie mit dem Befehl "format" ein Code zusammengestellt wird, welcher dann mit "call compile" auszuführen ist. Der Code der Routine könnte stark verkürzt werden. Er ist aber zur besseren Verständlichkeit umfangreicher gestaltet. Die Textausgabe des Befehls dient nur der Information. Paramter: [UnitName,"Befehl",[Array mit Fahrzeugnamen]] Code:
temp = [Opfer,"moveInCargo",[car1,car2,car3,car4,car5]] spawn |
1. Ich habe mir vom Moerderhoschi die TUT-Mission runtergeladen. (Super Ding zum lernen :daumen: )Er arbeitet mit einem Funktionsmanger für die Random-Patrol.
Ich möchte zivilisten ebenfalls per Zufall durch die Stadt laufen lassen. Muß ich da einen neuen Funktionsmanger einfügen? So richtig habe ich das noch nicht geschnackelt. 2. Gibt es ne Möglichkeit sich die Koordinaten für Positionen im Editor anzeigen zu lassen. z.B. soll ein Marker gelöscht werden (bekomme ich hin) und ein 2. soll gesetzt werden (neue Zielzone). Ich arbeite momentan ohne Missionseinträge, da ich mich erstmal einfuchsen muß. Erreichen würde ich dies mit setMarker so wie in der Anleitung vom Mr-Murry. Aber ich bekomme nur die genaue Position, wenn ich da was platziere -> rein in die Mission .sqm -> copy&paste -> und zurück. Gibt es da einen einfacheren Weg um an die Koordinaten zu kommen? |
Zu 2.
copyToClipboard format["%1",position player]; z.B. über einen Funkauslöser aufrufen. Du kannst jetzt die Position im Editor z.B. in den Code eines Auslösers mit Tasten Strg+V einfügen oder mit Tasten Alt+Esc raus aus Arma und die Position z.B. in ein Skript einfügen. |
@Drunken Officer
Das Funktionsmanager Modul muss nur einmal erstellt werden. Wenn du moechtest das auch Zivilisten mit dem ArmA eigenen Random Waypoint System durch die Gegend marschieren musst Du ihnen einen Waypoint geben mit Code:
0=[group this, position this, 50] call BIS_fnc_taskPatrol; €dit: wobei die letze Angabe, in diesem Beispiel 50, die Distanz zwischen den Random Waypoints festlegt. gruß hoschi |
Mal ne generelle Frage.
Meine Mission soll wie so viele Andere auch nach dem Motto: "rein - zuschlagen - raus" aussehen. Ist glaube ich das Beste zum lernen. Nun wäre es ja Quatsch, die ganze Karte mit Einheiten zu übersähen. Wie machen es die "alten Hasen"? Einheiten setzen, postion speichern, löschen und später abrufen? Oder innerhalb eines definierten Bereich setzen, wenn die Zeit gekommen ist? Ich frage deshalb, weil Ziel 1: ist die Störung der Funkverbindung (Türme wegsprengen gekomme ich hin) Ziel 2: Strand von MG-Nestern beräumen Allerdings laufe ich Gefahr das die MG-Nester zuflällig im 1 Durchlauf entdeckt würden und es alles net mehr hinhaut. |
Das wurde erst kürzlich behandelt: http://hx3.de/editing-scripting-167/...-script-22011/
|
Puh, da bin ich noch meilen weit von entfernt... :ugly:
Ich würde es vlt erstmal so probieren, dass ich einen Marker für das nächste Zielgebiet erstelle. Dies kann ich ja über den Auslöser machen, wenn das 1. ziel erreicht wurde. Kannst du mir verraten, wie der Code aussieht, wenn ich dann in dem Bereich zufällig Einheiten haben will. Das Problem ist, dass ich zwar die Befehle kenne (createUnit, creategroup, createMarker usw.) aber ich tue mich schwer diese richtig zu verpacken. :( das erstllen würde ich vielleicht irgendwann mal hinbekommen, aber wie hänge ich z.B. der Einheit den Wegpunkt an, wo ich die Einheiten mit dem scriptbeispiel von Moerderhoschi laufen lasse. |
Zitat:
|
Zitat:
Für Soldaten verwende das von Burns vorgeschlagene Programm. |
Ich möchte über die Parameter den Skill-Wert der feindlichen Einheiten festlegen.
Mein setskill.sqf sieht so aus Code:
//{_x setSkill (paramsArray select 4)} forEach units east; Ich rufe den Wert via Funkauslöser von "Testkeule" >> (sk= skill testkeule; hint format ["%1", sk]; << hab. Ich starte des Script in der Init.sqf mittels execVM "scripte\setskill.sqf"; *** Mal angenommen, ich mache es komlpett quer-feld-ein, ohne Parameter denne, müßte es heißen {_x setSkill (random 1)}; forEach allUnits? Gruß |
Einfachstes Beispiel: {if (side _x == EAST) then {_x setSkill 0}} forEach allUnits;
Hier gibt es Genaueres: http://hx3.de/editing-scripting-167/...nheiten-20470/ |
Hm, dein Code ist identisch zu meinem, außer das du ein ; weniger hast.
Also müßte es eigentlich funktionieren!? Muß ich beim setzen der Einheiten den Schieber auf null stellen? Ich werde es ebenfalls mal mit einem Auslöser probieren, so wie in deinem Thread. Nur Ein Auslöser ruft das Script auf. Wenn das script in der Init.sqf aufgerufen, wird es doch auch aufgerufen :ugly: |
Der Code bei setSkill war in meinen Beispiel falsch! Ich habe das jetzt ausgebessert (fett hervorgehoben).
Auf Spieler wirkt der Befehl nicht, nur auf KI. Mit hint str skill UnitName kannst du dir den Wert anzeigen lassen (natürlich von einer KI der richtigen Seite). |
Problem.
Ich habe ein kleines Zeltlager. 4 Zelte, eine Feuerstelle. Damit das Lager nicht jedesmal an der gleichen Stelle ist, habe ich 3 Marker. Wenn ich die Objekte jetzt mit dem Marker verbinde, macht Arma2 das, was es machen soll. Jedem Objekt wird zufällig eine Postion an den 3 Markern gegeben. Wie also kann ich die Objekte als "Gruppe" behandeln, damit das gesamte Zeltlager zufällig an einem der 3 Marker spawnt? Mit F2 kann man keine Objekte verbinden. f5 bringt auch keinen Erfolg |
Benutze Kompositionen, dann ist es einfacher.
https://community.bistudio.com/wiki/...t_Compositions |
Hier findest du ein Beispiel, wie man eine Gruppe von Objekten an eine andere Position verlegen kann. Die Aufstellung der Objekte zueinander wird beibehalten.
http://hx3.de/editing-scripting-167/...14/#post431110 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:53 Uhr. |
Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias