![]() |
#1 (permalink) |
![]() ![]() Registriert seit: 15.05.2011
Beiträge: 1.110
|
![]()
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 ??? |
![]() |
![]() |
#2 (permalink) |
![]() ![]() ![]() Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
|
![]()
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. ![]() Geändert von Wolkenbeisser (28.01.2013 um 08:18 Uhr). Grund: Die üblichen Fehlerlein |
![]() |
![]() |
#4 (permalink) |
![]() ![]() ![]() Registriert seit: 16.07.2010
Beiträge: 305
|
![]()
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"]; _suv = _this select 0; _opfer = _this select 1; _radius = _this select 2; if (isServer) then { _suvs = nearestObjects [getPos _suv, typeOf _suv, _radius]; _suv = _suvs select (floor (random (count _suvs))); _opfer moveInCargo _suv; _opfer assignAsCargo _suv; }; Du darfst die Lokalität nicht vergessen. Bei deinem Beispiel würde das Opfer bei 10 Spieler auch 11 mal umplaziert werden, da moveInCargo global wirkt. Geändert von Rockhount (28.01.2013 um 11:38 Uhr). |
![]() |
![]() |
#5 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
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 { private ["_unit","_befehl","_vehicleListe","_i"]; _unit = _this select 0; _befehl = _this select 1; _vehicleListe = _this select 2; if (! local _unit) exitWith {}; moveOut _unit; _i = count _vehicleListe; _i = floor (random _i); _befehl = format [ "%1 %2 %3", _unit, _befehl, _vehicleListe select _i ]; call compile _befehl; player groupChat "Befehl: " + _befehl }; |
![]() |
![]() |
#6 (permalink) |
![]() ![]() Registriert seit: 15.05.2011
Beiträge: 1.110
|
![]()
1. Ich habe mir vom Moerderhoschi die TUT-Mission runtergeladen. (Super Ding zum lernen
![]() 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? |
![]() |
![]() |
#7 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
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. |
![]() |
![]() |
#8 (permalink) |
![]() ![]() ![]() ![]() ![]() Registriert seit: 01.07.2006
Ort: Kabul
Alter: 39
Beiträge: 2.666
|
![]()
@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 Geändert von Moerderhoschi (30.01.2013 um 19:19 Uhr). |
![]() |
![]() |
#9 (permalink) |
![]() ![]() Registriert seit: 15.05.2011
Beiträge: 1.110
|
![]()
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. |
![]() |
![]() |
#10 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
Das wurde erst kürzlich behandelt: Einheiten spawnen/ löschen script
|
![]() |
![]() |
#11 (permalink) |
![]() ![]() Registriert seit: 15.05.2011
Beiträge: 1.110
|
![]()
Puh, da bin ich noch meilen weit von entfernt...
![]() 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. |
![]() |
![]() |
#12 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 13.04.2003
Ort: Monerica
Alter: 43
Beiträge: 32.989
|
![]() Dynamic-AI-Creator (DAC) V3.0 released ![]() |
![]() |
![]() |
#13 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]() Mein Skript betrifft nur Objekte (Autos, Panzer usw.). Hier ein neues Beispiel wie das mit Auslösern zu verwirklichen ist: Einheiten spawnen/ löschen script - HX3 Foren Für Soldaten verwende das von Burns vorgeschlagene Programm. |
![]() |
![]() |
#14 (permalink) |
![]() ![]() Registriert seit: 15.05.2011
Beiträge: 1.110
|
![]()
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; { if (side _x == east) then { _x setSkill (paramsArray select 4)}; } forEach allUnits; 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ß |
![]() |
![]() |
#15 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
Einfachstes Beispiel: {if (side _x == EAST) then {_x setSkill 0}} forEach allUnits;
Hier gibt es Genaueres: Stärke der KI-Einheiten Geändert von Vienna (17.02.2013 um 09:11 Uhr). |
![]() |
![]() |
#16 (permalink) |
![]() ![]() Registriert seit: 15.05.2011
Beiträge: 1.110
|
![]()
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 ![]() |
![]() |
![]() |
#17 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
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). |
![]() |
![]() |
#18 (permalink) |
![]() ![]() Registriert seit: 15.05.2011
Beiträge: 1.110
|
![]()
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 |
![]() |
![]() |
#19 (permalink) |
![]() ![]() |
![]()
Benutze Kompositionen, dann ist es einfacher.
https://community.bistudio.com/wiki/...t_Compositions
__________________
Niemand hat die Absicht eine Tüte zu bauen! ![]() ___<<<A3 Wounding System>>>___ |
![]() |
![]() |
#20 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
Hier findest du ein Beispiel, wie man eine Gruppe von Objekten an eine andere Position verlegen kann. Die Aufstellung der Objekte zueinander wird beibehalten.
Camps an zufälliger Position |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
![]() |
||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Scripting - viele Fragen | Drunken Officer | Editing & Scripting | 83 | 22.10.2013 07:35 |
2 Fragen zum Little Bird "MH-6J" | Sol.LrMartyn | Editing & Scripting | 6 | 30.01.2013 16:42 |
Anfänger hat Fragen für den Multiplayer | funky-destroy | Multiplayer | 7 | 23.11.2010 16:39 |
Diverse Fragen.... | Mafmaf | Editing & Scripting | 52 | 21.11.2010 20:29 |
Einige Fragen | gedanke. | Editing & Scripting | 4 | 31.08.2010 18:53 |