08.07.2009, 13:23 | #1 (permalink) |
Registriert seit: 27.06.2009
Beiträge: 105
|
Skripting und JIP
Hi,
Ich bins mal wieder tut mir leid, dass ich immer nur Frage und bis jetzt noch nicht anderen Helfen konnte. Aber hab mir in der letzten Zeit ein großes Wissen angeignet und werde Bald auch anderen Helfen können. 1. Skripting: Also, ich möchte ein Skript erstellen, das bei Aktivierung (Ich habe einen Auslöser auf der Map, der als Bedingung Prüft ob das Fahrzeug besetzt ist) mehrere Dinge in einer bestimmten Reihenfolge ausführt. Ich habs bis jetzt so versucht: Also er soll dem Heli den Sprit rausnehmen, damit man den Motor nicht starten kann, dann soll der Mann eine Animation über "skript2" ausführen und dann den Tank wieder auffüllen. > Hat allerdings in meiner Form nicht funktioniert. Aber war ja klar 2. JIP Also, dass die Taskstates nach einem respawn bzw. einem JIP stimmen hab ich noch nicht rausgefunden, aber ich denke, da wird sich schon irgendwann eine Lösung finden. Jetzt mal was Anderes: Habe auf der Map, sagen wir mal z.B. einen Auslößer, der wenn der Airport feindleer ist, Auslöst, dass neue Truppen nach einer bestimmten Zeit von außen auf den Airport nachrücken. Macht das Spiel das selbst, dass der Spieler bei einem JIP, dann die gleichen Positionen der AI hat, wie ein Spieler, der die Mission schon von Anfang an Spielt ? Danke schonmal Gruß Max Geändert von N939 (08.07.2009 um 15:25 Uhr). |
08.07.2009, 15:26 | #2 (permalink) |
Registriert seit: 27.06.2009
Beiträge: 105
|
EDIT: zu 1.
Skript sieht jetzt so aus : und funktioniert, allerdings hält er die Delays nicht ein welche nötig wären, somit wird der Treibstoff auch nicht auf 0 gesetzt, da setFuel 0 und setFuel1 gleichzeitig ausgeführt werden und somit nichts nützen. Der Auslöser ist wie folgt konfiguriert: Aktivierung: Mehrfach Bedingung: ! isNull driver heli2 Aktivierung: [heli2,man1] exec "heli1.sqs" Habt ihr da noch einen Tipp für mich, 2. ist noch ungeklärt |
08.07.2009, 15:34 | #3 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
Einen Tipp hab ich da aufjedenfall: Wenn du schon gerade beim lernen bist, dann lern umhimmelswillen SQF anstatt SQS. Damit tust du dir leichter und hast mehr Möglichkeiten. zu 2. Wenn jemand joint bekommt er solche sämtliche Daten bezüglich auf der Map vorhandener Objekte/Einheiten vom Server übermittelt. Problematisch ist JIP nur in Bezug auf laufende Scripte und deren Variablen.
__________________
|
08.07.2009, 15:49 | #4 (permalink) |
Registriert seit: 27.06.2009
Beiträge: 105
|
Ok ja hab ich allerding ist bei mir immer das prob. wenn ich eine SQF mache und dann in die initZeile des Objekts [heli2,man1] execVM "heli1.sqf" eingebe, dann sagt er immer Typ Script erwartet nichts oder so. Ich glaube das hängt damit zusammen, dass man XXX = [heli2,man1] execVM "heli1.sqf" eingeben muss allerdings ist mir noch nicht ganz klar was bei XXX reinkommt.
Ansonsten hast du eine idee warum er die Delays nich annimmt. Sobald ich in den heli steige führt der Soldat sofort die Anim aus und der heli startet die motoren Zu 2. Ok gut zu Wissen, dann passt das. ja mit dem Briefing kämpf ich auch garede, wie viele andere auch und schaffe es einfach nicht, dass alle den selben Task Status bekommen egal ob respawn oder JIP. aber gut zurück zum thema und vielen dnak Gruß Max Geändert von N939 (08.07.2009 um 15:52 Uhr). |
08.07.2009, 17:06 | #5 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
bei XXX kannst du reinschreiben was du willst. XXX ist dann eine Variable in der ein Verweis auf das Script abgespeichert wird das du gerade gestartet hast. Das erlaubt dir z.b. zu überprüfen ob das Script fertig abgelaufen ist und es erlaubt dir auch ein script von ausserhalb zu unterbrechen. Was die Delays angeht. "sleep" ist ein SQF Befehl und funktioniert in SQS nicht. SQF: Code:
sleep 10; Code:
~10
__________________
|
08.07.2009, 17:27 | #6 (permalink) |
Registriert seit: 27.06.2009
Beiträge: 105
|
Skript sieht so aus und is ne SQF:
in der Ini das Auslösers steht: Aber irgendwie funktioniert das nicht. Nach meiner meinung sollte er ja nun zuerst Fuel auf null setzen, dann warten, dann die Animation ausführen und dann wieder Fuel reinhauen, dann warten, dann Engine Aund dann, warten und, dann den man seine Animation beenden lassen. oder ? |
08.07.2009, 17:50 | #7 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
Ah ok dachte es wäre immernoch SQS. Wie dem auch sei, bei SQF musst du im gegensatz zu SQS drauf achten das du jede Zeile mit einem ; beendest Also vielleicht so: Code:
_heli=_this select 0; _man=_this select 1; _heli setFuel 0.0; sleep 5; [_man] exec "skript2.sqs"; sleep 5; _heli setFuel 1; sleep 2; _heli action ["EngineOn",heli2]; sleep 10; _man enableAI "Anim";
__________________
|
08.07.2009, 17:59 | #8 (permalink) |
Registriert seit: 27.06.2009
Beiträge: 105
|
in der skript2.sqs ist die Animation gespeichert in einem loop muss ich dir nacher mal raussuchen is auf dem anderen PC, ja muss das mal testen is mir auch gerade aufgefallen, dass ja gar nicht überall das ; ist vielen Dank schonmal
|
09.07.2009, 13:32 | #10 (permalink) |
Registriert seit: 27.06.2009
Beiträge: 105
|
So hab noch ne Frage es geht um folgendes ich habe einige Fahrzeuge, die ein Skript ausführen (bsp. Tajin dein C130 Cargoskript) wenn ich die Fahrzeuge dann mit dem simple vehicle respawn Tool wieder spawnen lasse, dann gehen natürlich die Skripte auch nimmer. Hab schon alles versucht (Auslöser gesetzt, der Überprüft ob Fahrzeug noch lebt (!alive C130) und dann nochmal das Ausführt was bei der C130 in der Init steht) hat aber alles nicht funktioniert. bräuchte da wahrscheinlich ein skript, oder ?
Gruß Max |
09.07.2009, 16:30 | #11 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
Hängt von dem Respawnscript ab das du benutzt, die wenigsten sind umfassend genug um die Objektnamen zu übernehmen, von der init-zeile ganz zu schweigen.
Wenn du willst probier dashier mal, ist allerdings nicht getestet hab ich gerade auf gut Glück zusammengeschrieben. t-respawn.sqf Code:
if (isServer) then { _obj = _this select 0; _time = _this select 1; _delay = _this select 2; _count = _this select 3; _init = _this select 4; _name = vehicleVarName _obj; _pos = getPos _obj; _dmg = getDamage _obj; _vup = vectorUp _obj; _vdir = vectorDir _obj; _fuel = fuel _obj; _fire = canFire _obj; _type = typeOf _obj; _count = 0; for [{_loop=0},{(_count >= _delay)},{_loop=_loop}] do { if ({alive _x} count crew _obj > 0) then { _count = 0; } else { if (!canMove _obj) then { _count = _count + 2; }; if ((getPos _obj distance _pos) > 10) then { _count = _count + 1; }; if (_fire != canFire _obj) then { _count = _count + 1; }; if (damage _obj > 0.95) then { _count = _count + 3; }; }; sleep 1; }; deleteVehicle _obj; sleep _time; if (_count != 0) then { _count = _count - 1; _new = _type createVehicle _pos; _new setPos _pos; _new setVectorDirAndUp [_vdir,_vup]; _new setDamage _dmg; _new setFuel _fuel; _new setVehicleInit format ["nul=[this,%1,%2,%3,%4] execVM 't-respawn.sqf';%5 = this;%4",_time,_delay,_count,_init,_name]; processInitCommands; }; }; nul=[this,respawnzeit,verzögerung,anzahlrespawns,init] execVM "t-respawn.sqf"; respawnzeit: Wieviel Zeit zwischen dem Löschen des alten Objekts und dem Erstellen des neuen vergeht. verzögerung: Toleranzwert, wie schnell der Respawn stattfindet. z.B. wie lange das Fahrzeug herrenlos herumstehen muss bis der Respawn aktiviert wird. Überprüft Besatzung, Fahrtauglichkeit, Kampftauglichkeit, Schaden und Entfernung zum Startpunkt. Je mehr davon zutreffen, desto schneller erfolgt der Respawn. anzahlrespawns: selbsterklärend, gibt an wie oft das Fahrzeug respawnen kann. Negativer Wert = unendlich. init: hier kannst du Initbefehle reinschreiben die nach dem Respawn ausgeführt werden sollen Hoffe es funktioniert :P
__________________
Geändert von Tajin (09.07.2009 um 17:16 Uhr). |
09.07.2009, 18:47 | #13 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
Nicht so voreilig.
Es wird deswegen an alle geschickt weil dort auch init-befehle enthalten sein können, die nicht nur den server betreffen. Ich fand es sinniger das script je objekt laufen zu lassen. Wenn das alte Objekt verschwindet, endet auch sein script und für das neu respawnte Objekt wird ein neues gestartet. Kann man machen wie man will, ich hab mich diesmal für diese methode entschieden. Es ist unkompliziert, leicht editierbar/erweiterbar und sollte JIP-kompatibel sein. Kleinigkeiten ändern sich vielleicht noch.
__________________
Geändert von Tajin (09.07.2009 um 18:49 Uhr). |
09.07.2009, 18:51 | #14 (permalink) |
Registriert seit: 03.01.2008
Alter: 84
Beiträge: 6.552
|
*deleted* Xeno
__________________
In arma everything is made of refined explodium, armored with wet paper towels. Geändert von Xeno (03.01.2014 um 09:30 Uhr). |
09.07.2009, 20:23 | #15 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
Naja, dann eben so:
Code:
if (isServer) then { _obj = _this select 0; _time = _this select 1; _delay = _this select 2; _times = _this select 3; _vinit = _this select 4; _pos = getPos _obj; _dmg = getDammage _obj; _vup = vectorUp _obj; _vdir = vectorDir _obj; _fuel = fuel _obj; _fire = canFire _obj; _type = typeOf _obj; _count = 0; for [{_loop=0},{(_count <= _delay)},{_loop=_loop}] do { if ({alive _x} count crew _obj > 0) then { _count = 0; } else { if (!canMove _obj) then { _count = _count + 2; }; if ((getPos _obj distance _pos) > 10) then { _count = _count + 1; }; if (_fire && !canFire _obj) then { _count = _count + 1; }; if (damage _obj > 0.95) then { _count = _count + 3; }; }; sleep 1; }; _name = vehicleVarName _obj; if (_name == "") then { _name = "nul"; }; deleteVehicle _obj; sleep _time; if (_times != 0) then { _times = _times - 1; _new = _type createVehicle _pos; _new setPos _pos; _new setVectorDirAndUp [_vdir,_vup]; _new setDamage _dmg; _new setFuel _fuel; nul=[_new,_time,_delay,_times,_vinit] execVM "t-respawn.sqf"; _new setVehicleInit format["%1 = this;%2;this setVehicleVarName '%1'",_name,_vinit]; processInitCommands; }; };
__________________
Geändert von Tajin (09.07.2009 um 20:49 Uhr). |
13.07.2009, 09:35 | #18 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
Doch, funktioniert. Schau mal hier rein: Vehicle Respawn with Name & Init - Bohemia Interactive Forums
__________________
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|