23.11.2010, 20:18 | #1 (permalink) |
Registriert seit: 23.11.2010
Beiträge: 5
|
Hilfe bei Funktion um Gegnerspawns zu erstellen
Hi liebes Forum!
Hab jetzt mal nach langer Überlegung angefangen für ARMA 2 Missionen zu baschteln. Bin grad an ner Mission, da sollen an verschiedenen Markern jeweils Gegner spawnen. Damit das einfacher geht, rufe ich einfach eine Funktion mit paar Parametern auf, dass spart mir viel Arbeit. Denkste... Häng schon den ganzen Tag an dieser Funktion, ich krieg die Krise langsam Code:
createcenter RESISTANCE; gegner1 = Creategroup RESISTANCE; _spawnpunkt = _this select 0; //woher kommen die einheiten _angriffpunkt = _this select 1; // wohin rennen sie _radius = _this select 2; // in welchem radius stürmen die daher _einheit = _this select 3; //was für ne einheit soll spawnen hint format["Ubergabe: %1 Angriffpunkt %2", _einheit, _angriffpunkt]; switch (_einheit) do { case 1: { // LEICHTE INFANTERIE //_soldat1 = gegner1 createUnit ["TK_INS_Soldier_3_EP1", getMarkerPos _spawnpunkt, [], 0, "FORM"]; //_soldat2 = gegner1 createUnit ["TK_INS_Soldier_2_EP1", getMarkerPos _spawnpunkt, [], 0, "FORM"]; //_soldat3 = gegner1 createUnit ["TK_INS_Soldier_EP1", getMarkerPos _spawnpunkt, [], 0, "FORM"]; _soldat1 = "TK_INS_Soldier_3_EP1" createUnit [getMarkerPos _spawnpunkt, gegner1, "", 0.3, "CORPORAL"]; _soldat2 = "TK_INS_Soldier_2_EP1" createUnit [getMarkerPos _spawnpunkt, gegner1,"",0.3, "PRIVATE"]; _soldat3 = "TK_INS_Soldier_EP1" createUnit [getMarkerPos _spawnpunkt, gegner1,"gegner1 = group this;",0.3, "PRIVATE"]; }; case 2: { // MEDIUM INFANTERIE + MG _soldat1 = "TK_INS_Soldier_3_EP1" createUnit [getMarkerPos _spawnpunkt,gegner1,"gegner1=this", 0.3, "CORPORAL"]; _soldat2 = "TK_INS_Soldier_AR_EP1" createUnit [getMarkerPos _spawnpunkt, gegner1,"gegner1=this",0.3, "PRIVATE"]; _soldat3 = "TK_INS_Soldier_EP1" createUnit [getMarkerPos _spawnpunkt, gegner1,"gegner1=this",0.3, "PRIVATE"]; }; case 3: { // SCHWER + RPG _soldat1 = "TK_INS_Soldier_3_EP1" createUnit [getMarkerPos _spawnpunkt,gegner1,"gegner1=this", 0.3, "CORPORAL"]; _soldat2 = "TK_INS_Soldier_AR_EP1" createUnit [getMarkerPos _spawnpunkt, gegner1,"gegner1=this",0.3, "PRIVATE"]; _soldat3 = "TK_INS_Soldier_EP1" createUnit [getMarkerPos _spawnpunkt, gegner1,"gegner1=this",0.3, "PRIVATE"]; _soldat4 = "TK_INS_Soldier_AT_EP1" createUnit [getMarkerPos _spawnpunkt, gegner1,"gegner1=this",0.3, "PRIVATE"]; }; case 4: { // JEEP MIT MG _fahrzeug = createVehicle ["Offroad_DSHKM_INS", getMarkerPos _spawnpunkt, [], 0, "NONE"]; _fahrer = gegner1 createUnit ["TK_INS_Soldier_3_EP1", getMarkerPos _spawnpunkt, [], 0, "FORM"]; _gunner = gegner1 createUnit ["TK_INS_Soldier_3_EP1", getMarkerPos _spawnpunkt, [], 0, "FORM"]; _fahrer moveInDriver _fahrzeug; _gunner moveInGunner _fahrzeug; }; default { hint "KEINE SWITCHPARAMETER UEBERGEBEN"; }; ;} // WEGPUNKT _WP1 = (group gegner1) addWaypoint [getMarkerPos _angriffpunkt, _radius]; _WP1 setWaypointBehaviour "AWARE"; _WP1 setWaypointType "SAD"; gegner1 doMove (getMarkerPos _angriffpunkt); exit; Ich finde das alles ziemlich verwirrend. Es gibt ja zwei verschiedene createUnits (OFP + ARMA) genauso wie createVehicles. in der OFP Version, welche ich nutze, kann man viel mehr einstellen als in der arma Version (lt. BI API createUnit ARRAY). Wieso ist die Methode createUnit von OFP "besser" als die von ARMA? Naja, jedenfalls spawnen alle ganz fleissig. Das klappt auch. Aber die wollen nicht zum WP1 rennen. Wär lieb wenn vllt. jemand mal über die Funktion fliegen könnt und mir die Fehler rauspickt oder mich aufklärt Thx im Voraus! Schönen Abend noch! Ich geh jetzt zocken, das Scripten hängt mir momentan zum Hals raus |
23.11.2010, 20:26 | #2 (permalink) |
Registriert seit: 13.04.2003
Ort: Monerica
Alter: 42
Beiträge: 32.977
|
Code:
if (!isServer) exitWith {}; _pos = getmarkerPos "spawn1s"; _skill = [0.5, 0.9]; _side = WEST; _units = ["AFR_Officer", "AFR_Rifleman", "AFR_Soldier_MG", "AFR_Soldier_Engineer", "AFR_Soldier_AT", "AFR_Medic", "AFR_Soldier_GL"]; afrgrp1 = [_pos, _side, _units, [], [], _skill] call BIS_fnc_spawnGroup; sleep 3; _ewp1 = afrgrp1 addWaypoint [getMarkerpos "spawn1d", 10]; _ewp1 setWaypointType "SAD"; _ewp1 setWaypointSpeed "NORMAL"; _ewp1 setWaypointFormation "LINE"; _ewp1 setWaypointCombatMode "RED"; Hiermit latschen´se vom Spawnpunkt (spawn1s) zum Wegpunkt (spawn1d), musst das Funktionsmodul auf die Karte setzen damits läuft. Allerdings wirfts im MP gerne Fehler weil _ewp1 wohl undefinierte Variablen sind, keine Ahnung was er mir damit sagen will, hab mir das Script aus allen Ecken der Welt zusammengeklaut und generell keinen Plan von sowas. Finds ja schon gemein das jemand der sich "mal ebent" entschlossen hat Missionen zu bauen hier ankommt und schon scripten kann |
23.11.2010, 21:00 | #3 (permalink) |
hallo,
zeig mal deine kommandozeile mit der du dein script startest. und beim ersten überfliegen: das "exit" am ende ist .sqs und hat in deinem .sqf nichts zu suchen. was gibt dein kontroll-hint aus? (hint format["Ubergabe: %1 Angriffpunkt %2", _einheit, _angriffpunkt] werden die gegner gespawnt? mfg
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
23.11.2010, 21:08 | #4 (permalink) |
Registriert seit: 23.11.2010
Beiträge: 5
|
Hi,
danke für die Antworten. @Burns: das skript blickt doch kein Mensch Die vorgegebenen Units werden ja in dem Array gespeichert. Für meinen Einsatz leider nicht verwendbar. @psycho: Der trigger schaut so aus: Code:
position[]={5536.9653,333.49664,821.78033}; a=150; b=150; activationBy="WEST"; interruptable=1; age="UNKNOWN"; expCond="true"; expActiv="_d = [""spawn2"",""gue_attack_1"",20,1] execVM ""skripte\contact_1.sqf"";"; class Effects { }; den hint hab ich mir eingebaut weil ich nicht sicher war ob die Parameter in der Funktion ankommen. So quasi als Debug Ach, das Exit.. Wusste ich nicht. Befasse mich mit der Thematik erst seid 2 Tagen. Ja, die Gegner spawnen. Bewegen sich aber keinen milimeter. Als ich folgendes nutzte: Code:
//_soldat3 = gegner1 createUnit ["TK_INS_Soldier_EP1", getMarkerPos _spawnpunkt, [], 0, "FORM"]; Deshalb sind die auskommentiert im case 1. Thx! PS: ich vermut mal das haperts mit der gruppe gegner1. Aber ich versteh das ganze noch nicht so ganz |
24.11.2010, 16:54 | #5 (permalink) |
Registriert seit: 23.11.2010
Beiträge: 5
|
So jetzt geht's
Ein Semikolon falsch gesetzt und die Initialisierung der Gruppe gegner1 mal in die init.sqs gesetzt. Ich weiss nicht ob die Gruppe nach Funktionsende gelöscht wird (sollte ja eig. nicht sein, da es keine lokale Gruppe _gegner1 ist sondern gegner1. Das gleiche mit _WP1. _WP1 wird aber nach Funktionsende trotzdem anerkannt und die gruppe rennt hin. Versteh ich nicht... ). Es läuft jedenfalls: Code:
_spawnpunkt = _this select 0; _angriffpunkt = _this select 1; _radius = _this select 2; _einheit = _this select 3; //hint format["Ubergabe: %1 Angriffpunkt %2", _einheit, _angriffpunkt]; switch (_einheit) do { case 1: { // LEICHTE INFANTERIE //_soldat1 = gegner1 createUnit ["TK_INS_Soldier_3_EP1", getMarkerPos _spawnpunkt, [], 0, "FORM"]; //_soldat2 = gegner1 createUnit ["TK_INS_Soldier_2_EP1", getMarkerPos _spawnpunkt, [], 0, "FORM"]; //_soldat3 = gegner1 createUnit ["TK_INS_Soldier_EP1", getMarkerPos _spawnpunkt, [], 0, "FORM"]; _soldat1 = "TK_INS_Soldier_3_EP1" createUnit [getMarkerPos _spawnpunkt, gegner1, "gegner1=this", 0.3, "CORPORAL"]; _soldat2 = "TK_INS_Soldier_2_EP1" createUnit [getMarkerPos _spawnpunkt, gegner1,"gegner1=this",0.3, "PRIVATE"]; _soldat3 = "TK_INS_Soldier_EP1" createUnit [getMarkerPos _spawnpunkt, gegner1,"gegner1=this",0.3, "PRIVATE"]; }; case 2: { // MEDIUM INFANTERIE + MG _soldat1 = "TK_INS_Soldier_3_EP1" createUnit [getMarkerPos _spawnpunkt,gegner1,"gegner1=this", 0.3, "CORPORAL"]; _soldat2 = "TK_INS_Soldier_AR_EP1" createUnit [getMarkerPos _spawnpunkt, gegner1,"gegner1=this",0.3, "PRIVATE"]; _soldat3 = "TK_INS_Soldier_EP1" createUnit [getMarkerPos _spawnpunkt, gegner1,"gegner1=this",0.3, "PRIVATE"]; }; case 3: { // SCHWER + RPG _soldat1 = "TK_INS_Soldier_3_EP1" createUnit [getMarkerPos _spawnpunkt,gegner1,"gegner1=this", 0.3, "CORPORAL"]; _soldat2 = "TK_INS_Soldier_AR_EP1" createUnit [getMarkerPos _spawnpunkt, gegner1,"gegner1=this",0.3, "PRIVATE"]; _soldat3 = "TK_INS_Soldier_EP1" createUnit [getMarkerPos _spawnpunkt, gegner1,"gegner1=this",0.3, "PRIVATE"]; _soldat4 = "TK_INS_Soldier_AT_EP1" createUnit [getMarkerPos _spawnpunkt, gegner1,"gegner1=this",0.3, "PRIVATE"]; }; case 4: { // JEEP MIT MG _fahrzeug = createVehicle ["Offroad_DSHKM_INS", getMarkerPos _spawnpunkt, [], 0, "NONE"]; _fahrer = gegner1 createUnit ["TK_INS_Soldier_3_EP1", getMarkerPos _spawnpunkt, [], 0, "FORM"]; _gunner = gegner1 createUnit ["TK_INS_Soldier_3_EP1", getMarkerPos _spawnpunkt, [], 0, "FORM"]; _fahrer moveInDriver _fahrzeug; _gunner moveInGunner _fahrzeug; }; default { hint "KEINE SWITCHPARAMETER UEBERGEBEN"; }; }; // WEGPUNKT _WP1 = (group gegner1) addWaypoint [getMarkerPos _angriffpunkt, _radius]; _WP1 setWaypointBehaviour "AWARE"; _WP1 setWaypointType "SAD"; |
24.11.2010, 17:01 | #6 (permalink) |
Registriert seit: 23.11.2010
Beiträge: 5
|
Das ist echt zum Haare rausreissen
Infanterie funktioniert, nur der scheiss Jeep will nicht zufahren: Code:
case 4: { // JEEP MIT MG _fahrzeug = createVehicle ["Offroad_DSHKM_INS", getMarkerPos _spawnpunkt, [], 0, "NONE"]; //_fahrer = "TK_INS_Soldier_3_EP1" createUnit [getMarkerPos _spawnpunkt,gegner1,"gegner1=this", 0.3, "CORPORAL"]; //_gunner = "TK_INS_Soldier_3_EP1" createUnit [getMarkerPos _spawnpunkt,gegner1,"gegner1=this", 0.3, "CORPORAL"]; _fahrer = gegner1 createUnit ["TK_INS_Soldier_3_EP1", getMarkerPos _spawnpunkt, [], 0, "FORM"]; _gunner = gegner1 createUnit ["TK_INS_Soldier_3_EP1", getMarkerPos _spawnpunkt, [], 0, "FORM"]; _fahrer moveInDriver _fahrzeug; _gunner moveInGunner _fahrzeug; }; default { hint "KEINE SWITCHPARAMETER UEBERGEBEN"; }; }; // WEGPUNKT _WP1 = (group gegner1) addWaypoint [getMarkerPos _angriffpunkt, _radius]; _WP1 setWaypointBehaviour "AWARE"; _WP1 setWaypointType "SAD"; _fahrer = gegner1 createUnit ["TK_INS_Soldier_3_EP1", getMarkerPos _spawnpunkt, [], 0, "FORM"]; erstelle, hockt der zwar im Jeep, will aber nicht zufahren. WEnn ich den Fahrer / gunner mit _fahrer = "TK_INS_Soldier_3_EP1" createUnit [getMarkerPos _spawnpunkt,gegner1,"gegner1=this", 0.3, "CORPORAL"]; erstelle, will er sich nicht in den Jeep setzen sondern rennt direkt zum _WP1. EDIT: noch schöner wär es ja das ich ganz dynamisch die units spawnen lasse. Sprich ich rufe die SQF auf und übergebe ein ARRAY(spawnpunkte). Somit können die spawnpunkte dann als übergabewert mit _this select 0 in ein switch case rein. Dann ein random für die case und schwupps spawnen die einheiten variabel. ich will nämlich das von zwei Flanken angegriffen wird BIS eine Bedingung erfüllt wurde. Daher meine Frage: Ich kann ja ein Array festlegen: _array = ["spawn_marker_1", "spawn_marker_2"]; so, nun rufe ich die SQF auf mit: _dummy = [_array, bla, blubb] exec "funktion.sqf"; FRAGE: wie kann ich in der funktion.sqf auf den inhalt von _array (sprich spawn_marker1 und spawn_marker_2) zugreifen??? Geändert von Ante G. (24.11.2010 um 18:33 Uhr). |
24.11.2010, 18:30 | #7 (permalink) |
schreib das mal so:
Code:
_drivers = grpNull; _drivers = createGroup (east); "TK_INS_Soldier_3_EP1" createUnit [getmarkerpos _spawnpunkt, _drivers];Sleep 0.1; "TK_INS_Soldier_3_EP1" createUnit [getmarkerpos _spawnpunkt, _drivers];Sleep 0.1; _fahrzeug = createVehicle ["Offroad_DSHKM_INS", getMarkerPos _spawnpunkt, [], 0, "NONE"]; (units _drivers select 0) assignAsDriver _fahrzeug; (units _drivers select 1) assignAsGunner _fahrzeug; (units _drivers select 0) moveInDriver _fahrzeug; (units _drivers select 1) moveInGunner _fahrzeug; _drivers setCombatMode "RED"; _wp1 = _drivers addWaypoint [getMarkerpos _angriffpunkt, _radius]; _wp1 setWaypointBehaviour "AWARE"; _wp1 setWaypointType "SAD"; (units _drivers select 0) commandFollow (units _drivers select 0); das problem ist das du deine variablen überschreibst: erklärung... Code:
_fahrer = gegner1 createUnit ["TK_INS_Soldier_3_EP1", getMarkerPos _spawnpunkt, [], 0, "FORM"]; Code:
_WP1 = (group gegner1) addWaypoint [getMarkerPos _angriffpunkt, _radius]; Code:
_fahrer = "TK_INS_Soldier_3_EP1" createUnit [getMarkerPos _spawnpunkt,gegner1,"gegner1=this", 0.3, "CORPORAL"]; mfg
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
24.11.2010, 18:42 | #8 (permalink) |
random spawnpunkt:
schreibe deine spawnpunkte mal manuel in dein script... Code:
_angriffpunkt = _this select 0; _radius = _this select 1; _einheit = _this select 2; _spawnpunkt = ["pos1","pos2","pos3"]; _spawnpos = count _spawnpunkt; _poscreate = getmarkerpos (_spawnpunkt select ((round random _spawnpos)-1)); //hint format["Ubergabe: %1 Angriffpunkt %2", _einheit, _angriffpunkt]; switch (_einheit) do { case 1: { // LEICHTE INFANTERIE _soldat1 = "TK_INS_Soldier_3_EP1" createUnit [getMarkerPos _poscreate, gegner1, "gegner1=this", 0.3, "CORPORAL"]; _soldat2 = "TK_INS_Soldier_2_EP1" createUnit [getMarkerPos _poscreate, gegner1,"gegner1=this",0.3, "PRIVATE"]; _soldat3 = "TK_INS_Soldier_EP1" createUnit [getMarkerPos _poscreate, gegner1,"gegner1=this",0.3, "PRIVATE"]; }; die punkte pos1, pos2 und pos3 sind marker auf deiner map. anschließend wird der inhalt deines arrays gezählt. (also 3). dann wird per random eine position aus dem array gewählt. dabei wird gesagt: wähle zufällig eine zahl zwischen 1 und 3 (da bis 3 gezählt wurde). die positionen im array beginnen aber mit 0. (also 0,1,2,...) daher die -1, die da sagt gehe von gewählter position eine zurück. wird also die zahl 3 gewählt nimmt er die position 2 im array die pos3 darstellt an 3. stelle im array. ;-) ...na verwirrt?! mfg p.s.: _dummy = [_array, bla, blubb] execVM "funktion.sqf"; !!!
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ Geändert von Pfandgiraffe (24.11.2010 um 18:45 Uhr). |
|
24.11.2010, 18:53 | #9 (permalink) |
Registriert seit: 23.11.2010
Beiträge: 5
|
wow cool! Danke PsychoB.
Werde das gleich mal inhalieren, brauch aber ersma ne Pause. Mein Kopf qualmt. Danke nochmals! PS: ne bin net verwirrt. Habe Grundkenntnisse was Entwicklung angeht. Die Syntax macht mir bisschen zu schaffen. PPS : Ist es nun möglich übergebene Arrays in der SQF anzusprechen? Sonst muss ich für jede Position auf der Map eigene SQFs erstellen (wegen der - in der Funktion - deklarierten Markerpositionen). Geändert von Ante G. (24.11.2010 um 19:38 Uhr). |
25.11.2010, 12:14 | #10 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Die Parameter sind in der Variablen _this vorhanden. Wenn du ein Array übergibst, dann wie üblich array select index.
this - Bohemia Interactive Community select - Bohemia Interactive Community Array - Bohemia Interactive Community Function - Bohemia Interactive Community call - Bohemia Interactive Community Script (File - Bohemia Interactive Community) Category:Scripting Topics - Bohemia Interactive Community Category:Scripting Commands ArmA2 - Bohemia Interactive Community SQF syntax - Bohemia Interactive Community Control Structures - Bohemia Interactive Community usw. |
25.11.2010, 17:26 | #11 (permalink) |
die antwort auf deine frage zu den arrays steckt schon hier drin:
Code:
_spawnpunkt = ["pos1","pos2","pos3"]; _spawnpos = count _spawnpunkt; _poscreate = getmarkerpos (_spawnpunkt select ((round random _spawnpos)-1));
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Neuling brauch Hilfe | Joghurt | Multiplayer Community | 1 | 02.11.2010 22:42 |