Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 22.01.2016, 15:56   #1 (permalink)
Newbie
 
Registriert seit: 22.01.2016
Beiträge: 21
Icon5 Bräuchte Hilfe bei Spawnscript

Hallo,

zur Zeit arbeite ich mit der Ryans Zombies and Demons Mod und wollte mir ein einfaches Script schreiben das einige KI Einheiten um den Spieler herum spawnen lässt wenn er einen Trigger auslöst.
Die Mod liefert zwar ein Spawner Modul mit aber das funktioniert leider nur einmal.

Momentan arbeite ich nur mit einem Auslöser und einem Marker. Im Auslöser habe ich folgendes eingetragen:
PHP-Code:
_Group = [getMarkerPos "spawn1"EAST, ["RyanZombieC_man_polo_4_Fslow","RyanZombieC_man_polo_4_Fslow","RyanZombieC_man_polo_4_Fslow","RyanZombieC_man_1slow","RyanZombieC_Orestesmedium","RyanZombieC_man_w_worker_Fslow"],[],[],[],[],[],180call BIS_fnc_spawnGroup
Das ganze funktioniert soweit recht gut doch wie verpacke ich das ganze nun in ein Script sodass die KI z.B.: nach dem aktivieren in einem Radius von 100 Meter um den Spieler herum spawnt?
Ich habe zwar schon einiges versucht aber ich bekomme es absolut nicht hin

Grüße Duke

Geändert von Duke_87 (22.01.2016 um 21:10 Uhr).
Duke_87 ist offline   Mit Zitat antworten
Alt 22.01.2016, 21:09   #2 (permalink)
Newbie
 
Registriert seit: 22.01.2016
Beiträge: 21
Standard

Ich habe nun ein Script mit dem Name zspawn.sqf in dem ich folgendes stehen habe:
PHP-Code:
GroupOne_X = [getPosATL playerEAST, ["RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow"]] call BIS_fnc_spawnGroup
{
_x allowFleeing 0} forEach units GroupOne_X
Die AI spawnt jetzt endlich und auch direkt am Spieler, jetzt muss ich nur noch hin bekommen dass sie random in einem bestimmten Radius um den Spieler spawnt.

Hat hierzu jemand einen Tipp für mich?
Duke_87 ist offline   Mit Zitat antworten
Alt 23.01.2016, 08:41   #3 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 01.07.2006
Ort: Kabul
Alter: 32
Beiträge: 2.665
Standard

PHP-Code:
GroupOne_X = [getPosATL playerEAST, ["RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow"]] call BIS_fnc_spawnGroup
{
_x allowFleeing 0_x setPos [ ((((getPos _xselect 0) + random 20) - random 20), ((((getPos _xselect 1) + random 20) - random 20) ]} forEach units GroupOne_X
gruß
hoschi
__________________


Moerderhoschi ist offline   Mit Zitat antworten
Alt 23.01.2016, 09:54   #4 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.108
Standard

mit BIS eigener Funktion:
Code:
_spawnpos = [player, 90+(random 30), (random 360)] call BIS_fnc_relPos;
GroupOne_X = [_spawnpos , EAST, ["RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow"]] call BIS_fnc_spawnGroup;  
{_x allowfleeing 0} forEach units GroupOne_X;
__________________
Bewegende Momente bei ArmA 3

Geändert von Drunken Officer (23.01.2016 um 09:57 Uhr).
Drunken Officer ist offline   Mit Zitat antworten
Alt 23.01.2016, 14:49   #5 (permalink)
Newbie
 
Registriert seit: 22.01.2016
Beiträge: 21
Standard

Danke für eure Mühe! Beide Versionen funktionieren echt super
Ich habe noch auf eigene Faust versucht eine zweite Gruppe mit Spawn delay einzufügen und habe folgende Syntax eingebaut:
[waitUntil{ time > 50 }]
Aber irgendwie funktioniert das nicht wirklich. Die KI spawnt ganz kurz direkt am Spieler und verschwindet dann auch sofort wieder.
Ist die Syntax von Grund auf falsch oder kommt es auf die Stelle an wo ich sie einbaue?
Duke_87 ist offline   Mit Zitat antworten
Alt 23.01.2016, 15:21   #6 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.108
Standard

Code:
_spawnpos = [player, 90+(random 30), (random 360)] call BIS_fnc_relPos;
GroupOne_X = [_spawnpos , EAST, ["RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow"]] call BIS_fnc_spawnGroup;  
{_x allowfleeing 0} forEach units GroupOne_X;

sleep 40 + (random 20);

_spawnpos = [player, 90+(random 30), (random 360)] call BIS_fnc_relPos;
GroupOne_X = [_spawnpos , EAST, ["RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow"]] call BIS_fnc_spawnGroup;  
{_x allowfleeing 0} forEach units GroupOne_X;
oder

Code:
_spawnpos = [player, 90+(random 30), (random 360)] call BIS_fnc_relPos;
GroupOne_X = [_spawnpos , EAST, ["RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow"]] call BIS_fnc_spawnGroup;  
{_x allowfleeing 0} forEach units GroupOne_X;

waituntil { sleep 1; {alive _x} count units GroupOne_X <= 1};

_spawnpos = [player, 90+(random 30), (random 360)] call BIS_fnc_relPos;
GroupOne_X = [_spawnpos , EAST, ["RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow"]] call BIS_fnc_spawnGroup;  
{_x allowfleeing 0} forEach units GroupOne_X;
oder oder oder
__________________
Bewegende Momente bei ArmA 3
Drunken Officer ist offline   Mit Zitat antworten
Alt 23.01.2016, 21:49   #7 (permalink)
Newbie
 
Registriert seit: 23.01.2016
Beiträge: 20
Standard

Das Script ist toll, ich hab mir die Mod auch vor einiger Zeit runter geladen und das funktioniert alles sehr gut. Ich hab da aber trozdem noch 2 Fragen (sorry bin was skripten angeht ein echter voll Noob)....

1.ich weiß wie ich ein Skript über den Trigger starte aber was muss ich eingeben damit es beim verlassen des Triggers sofort beendet wird?

2. Wenn die Einheiten spawnen, dann spawnen sie für den Bruchteil einer Sekunde direkt am Spieler und verteilen sich dann auf den eingestellten Radius.
Liegt das am Skript oder muss ich irgend etwas anderes ändern damit das nicht mehr passiert?

Danke vorab für alle Antworten.
mfg Niels
niels001 ist offline   Mit Zitat antworten
Alt 23.01.2016, 22:27   #8 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.108
Standard

1. Das Script wird von allein beendet, da kein Loop verbaut wurde

2. Mit dem Bruchteil einer Sekunde liegt am Script. Ich denke du nutzt Hoschi seines. Da wird die Figur am Spieler stellt und dann verteilt,
__________________
Bewegende Momente bei ArmA 3
Drunken Officer ist offline   Mit Zitat antworten
Alt 24.01.2016, 09:31   #9 (permalink)
Newbie
 
Registriert seit: 23.01.2016
Beiträge: 20
Standard

Ja danke, ich hab die beiden Skripte durcheinander geworfen, jetzt sieht der Spawn super ordentlich aus.

Du hast dir schon viel mühe gegeben und ich trau mich ja fast nicht zu fragen aber ist es schwierig ein Loop einzubauen, dass nach und nach immer weiter gespawnt wird?
niels001 ist offline   Mit Zitat antworten
Alt 24.01.2016, 12:24   #10 (permalink)
Newbie
 
Registriert seit: 22.01.2016
Beiträge: 21
Standard

Aaaalso, ich weiß nicht ob das richtig ist was ich gemacht habe aber so funktioniert eine Wiederholung bei mir:
PHP-Code:
while {true} do
{
Hier her kommt der Code

In dem Auslösßer habe ich folgendes bei Aktiviert stehen:
PHP-Code:
nul execVM "spawnTest.sqf"
Bei deaktiviert weiß ich nicht genau was ich reinschreiben soll damit das Script beendet wird wenn man den Trigger verlässt. Hab schon einiges versucht aber geholfen hat nichts.
Duke_87 ist offline   Mit Zitat antworten
Alt 24.01.2016, 16:07   #11 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.108
Standard

Zitat von niels001 Beitrag anzeigen

Du hast dir schon viel mühe gegeben und ich trau mich ja fast nicht zu fragen aber ist es schwierig ein Loop einzubauen, dass nach und nach immer weiter gespawnt wird?

Soll der Loop nur laufen, wenn der Spieler in einem Bereich ist oder immer?

Soll das ganze SP oder MP sein?

Hier ein Code (Singleplayer), der läuft das ganze Spiel über. Es werden, wenn die Zombies bekämpft wurden, neue Zombies spawnen.

Code:
		private ["_spawnpos", "_grp", "_grp2"];		
            
	while {true} do
	{ 
		//--- eine TRUE-Schleife läuft immer, da keine Bedingung abgefragt wird
	 //--- erstes Zombie-Squad

		_spawnpos = [player, 90+(random 30), (random 360)] call BIS_fnc_relPos;
		_grp = [_spawnpos , EAST, ["RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow"]] call BIS_fnc_spawnGroup;  
		{_x allowfleeing 0} forEach units _grp;

	//---- wartet mit dem 2. Squad, 40 sekunden + Zufall 0-20
		sleep 40 + (random 20);

		//--- 2. Zombie-Squad

		_spawnpos = [player, 90+(random 30), (random 360)] call BIS_fnc_relPos;
		_grp2 = [_spawnpos , EAST, ["RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow"]] call BIS_fnc_spawnGroup;  
		{_x allowfleeing 0} forEach units _grp2

	//--- wartet bis beide zombie gruppen jeweils nur noch eins oder null sind
	//--- man kann auch mit einem sleep arbeiten oder andere Bedingung setze 

		waituntil { sleep 1; {alive _x} count units _grp <= 1 && {alive _x} count units _grp2 <= 1};
	}; //--- Ende WHILE-Schleife
Im MP kann man nicht ohne Weiteres mit Player arbeiten.
__________________
Bewegende Momente bei ArmA 3

Geändert von Drunken Officer (24.01.2016 um 16:21 Uhr).
Drunken Officer ist offline   Mit Zitat antworten
Alt 24.01.2016, 16:23   #12 (permalink)
Newbie
 
Registriert seit: 23.01.2016
Beiträge: 20
Standard

Danke sehr, ich wollte dass es mit dem spawn so ist das es startet wenn man in den Trigger geht und dass es aufhört wenn man ihn wieder verlässt. Solange man in dem Trigger steht sollen immer wieder neue Zombies kommen.

Ich dachte man kann das über den Trigger steuern dass eben das Script angeht und einfach wieder aus, aber so ist das wohl leider nicht^^
niels001 ist offline   Mit Zitat antworten
Alt 24.01.2016, 17:56   #13 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.108
Standard

doch, kann man.
Trigger auf MEHRFACH, Aktivierung durch Blau

bei Aktivierung:
Code:
QuarkSahneKuchen= [player, thistrigger] spawn 

  {
		hint "test, Spieler im TriggeR";
		while { (_this select 0) in list (_this select 1) } do   
		{        
					_spawnpos = [player, 90+(random 30), (random 360)] call BIS_fnc_relPos;   
					_grp = [_spawnpos , EAST, ["RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow"]] call BIS_fnc_spawnGroup;  
					{_x allowfleeing 0} forEach units _grp;   
					sleep 10;    

					_spawnpos = [player, 90+(random 30), (random 360)] call BIS_fnc_relPos; 
					_grp2 = [_spawnpos , EAST, ["RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow","RyanZombieB_Soldier_02_f_1_1slow"]] call BIS_fnc_spawnGroup; 
					{_x allowfleeing 0} forEach units _grp2;    

					waituntil { sleep 1; count units _grp <= 1 && count units _grp2 <= 1}; 
					hint "neu Runde Zombies";
		};  
		player sideChat "raus aus dem Trigger";
	};
__________________
Bewegende Momente bei ArmA 3

Geändert von Drunken Officer (24.01.2016 um 18:16 Uhr).
Drunken Officer ist offline   Mit Zitat antworten
Alt 24.01.2016, 19:05   #14 (permalink)
Newbie
 
Registriert seit: 23.01.2016
Beiträge: 20
Standard

Muss ich irgend etwas bestimmtes beachten wenn ich deinen Code benutze?
Also ich habe ihn als test.sqf abgespeichert und im Trigger bei Aktivierung folgendes eingetragen:

nul = execVM "test.sqf";

Wenn ich im Spiel jetzt durch den Trigger laufe bekomme ich zeitgleich als hint: "test, Spieler im TriggeR" und die Sidechat Nachricht: "raus aus dem Trigger" angezeigt aber es spawnt nichts.
niels001 ist offline   Mit Zitat antworten
Alt 24.01.2016, 20:22   #15 (permalink)
Newbie
 
Registriert seit: 22.01.2016
Beiträge: 21
Standard

Zitat:

Muss ich irgend etwas bestimmtes beachten wenn ich deinen Code benutze?

Ja ein klein bisschen schon :-)
Der Code kommt direkt in den Trigger rein.

Das funktioniert alles wirklich erstklassig, von mir auch noch einmal ein Danke für die gemachte Mühe und natürlich auch für die Hilfe!

Grüße Duke
Duke_87 ist offline   Mit Zitat antworten
Alt 24.01.2016, 22:19   #16 (permalink)
Newbie
 
Registriert seit: 23.01.2016
Beiträge: 20
Standard

Da hab ich wohl beim lesen gepennt
Aber ich habe trozdem noch eine Frage zu der Triggermethode:

Ich habe den Code wie folgt unter aktivieren stehen:
PHP-Code:
QuarkSahneKuchen= [playerthistriggerspawn
       
{
       
hint "Spawn Anfang";
       while { (
_this select 0in list (_this select 1) } do
       {
       
       
sleep 22;
       
_spawnpos = [player30+(random 30), (random 360)] call BIS_fnc_relPos;
       
_grp = [_spawnpos EAST, ["RyanZombieC_man_1slow"]] call BIS_fnc_spawnGroup;
       {
_x allowfleeing 0} forEach units _grp;
       
       
sleep 22;
       
_spawnpos = [player30+(random 70), (random 360)] call BIS_fnc_relPos;
       
_grp1 = [_spawnpos EAST, ["RyanZombieC_man_polo_1_Fslow"]] call BIS_fnc_spawnGroup;
       {
_x allowfleeing 0} forEach units _grp1;
       
       
sleep 22 +(random 15);
       
_spawnpos = [player30+(random 100), (random 360)] call BIS_fnc_relPos;
       
_grp2 = [_spawnpos EAST, ["RyanZombieC_man_p_fugitive_Fslow"]] call BIS_fnc_spawnGroup;
       {
_x allowfleeing 0} forEach units _grp2;
       
       
sleep 22;
       
_spawnpos = [player40+(random 90), (random 360)] call BIS_fnc_relPos;
       
_grp3 = [_spawnpos EAST, ["RyanZombieC_man_p_fugitive_Fslow"]] call BIS_fnc_spawnGroup;
       {
_x allowfleeing 0} forEach units _grp3;
       
       };
    
hint "Spawn Ende";
}; 
Wenn ich in den Trigger laufe funktioniert alles sehr gut und auch wenn ich raus gehe stoppt das ganze so wie es soll. Sobald ich aber in einem Fahrzeug in den Trigger fahre wird das ganze übersprungen und es kommt direkt die Nachricht "Spawn Ende".
Ist das normal so oder ist mir ein Schnitzer im Code passiert?
niels001 ist offline   Mit Zitat antworten
Alt 25.01.2016, 05:59   #17 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.108
Standard

ja, da der player geprüft wird. Damit du es verstehst, mal kurz erklärt.
Die While-Schleife prüft eine Bedingung
  • while {true} >> ist immer wahr und rennt los
  • while {alive player} >> läuft so lange, wie der Spieler lebt
  • while {alive einobjekt} >> läuft so lange, wie das Objekt lebt. z.B. ein gegerischer Panzer oder Offizier. Der Panzer muss im Editor so genannt werden oder beim spawnen mit der Variable versehen werden.
  • while { (_this select 0) in list (_this select 1) >> prüft ob das 1. Element des Array sich in der Liste des 2. Elementes befindet. Das 2. Element ist der Trigger.
    [player, thistrigger] spawn... Vor dem Spawn ist ein Array
  • while { {alive _x} count units group player > 3} >> läuft so lange, bis die Anzahl der lebenden Einheiten in der Gruppe des Spielers, weniger als 3 sind (da kann man dann z.B. ein Spawn-Script beenden lassen)
Eine Prüfung der Bedingung muss WAHR sein, ansonsten wird die Schleife beendet oder übergangen.
Du kannst sehr viel mehr prüfen. Du kannst die Seite prüfen, die Anzahl der feindlichen Einheiten, die Distanz zwischen Objekten, die Waffe es Spielers, usw...

Zu deinem "Problem" mit dem Fahrzeug:
Aändere mal 2 Sachen ab.

1. Bei der Bedingung des Trigger, da steht original "this" drinn schreibst du rein
this && (vehicle player) in thislist //--- stellt sicher, dass nur der Spieler den Trigger auslöst und keine KI

2. änder den Spawn-Array
QuarkSahneKuchen = [(vehicle player), thistrigger] spawn ....


Player == die Figur
(vehicle player) == Figur ODER das Fahrzeug in welchem die Figur sich befindet.

! Falls das ganze mal im Multiplayer funktionieren soll, kannst du nicht ohne Weiters mit "Player" arbeiten. Der Server kennt keinen Player !
Dann muss der Trigger lokal ausgeführt werden. Das Script mit einer Public-Variable geblockt werden und die Einheiten durch den Clienten erzeugt werden. Blockt man das Script nicht und 3 Spieler sind im Trigger, zieht das Script 3x an. Denn JEDER lädt die Karte und JEDER hat den Trigger mit der Bedingung.
__________________
Bewegende Momente bei ArmA 3

Geändert von Drunken Officer (25.01.2016 um 06:19 Uhr).
Drunken Officer ist offline   Mit Zitat antworten
Alt 25.01.2016, 08:51   #18 (permalink)
Newbie
 
Registriert seit: 22.01.2016
Beiträge: 21
Standard

puh... das nenne ich mal ausführlich und komplex aber jetzt verstehe ich das ganze auch besser
Ich habe aber mal eine etwas andere Frage zu dem ganzen. Im Prinzip wollte ich das mit dem Spawn ja nur wissen, da das Spawnmodul der Mod nur einmal funktioniert. Gäbe es nicht die Möglichkeit das Modul über ein Auslößer oder ein Script neu zu starten?

Geändert von Duke_87 (25.01.2016 um 09:34 Uhr).
Duke_87 ist offline   Mit Zitat antworten
Antwort

Stichworte
ki spawn


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
Arma III Multiplayer Performance Hilfe ChristianP112 Technische Fragen & Probleme 2 12.03.2015 22:21
Modder/Skripter bietet Hilfe an PrivateJoker2 Rollenspiel & Zombie Ecke 5 10.07.2014 23:48
Suche Hilfe zum einstellen eines ArmA 3 Altis Life Server Icecreamx Rollenspiel & Zombie Ecke 3 27.02.2014 13:11
Brauche hilfe bei ein zwei auslöser Lotos Editing & Scripting 4 18.01.2014 14:41
Bräuchte hilfe - CTD - unsupported sample frequency: 44100 XXSturmXX Technische Fragen & Probleme 1 30.12.2010 13:05


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