HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Fahrzeug Respawn mit KI (https://hx3.de/editing-scripting-167/fahrzeug-respawn-ki-20670/)

theslyder 12.05.2011 14:43

Fahrzeug Respawn mit KI
 
Hallo,
ich habe das ULB und wollte den "AH-6X" Respawnen Inklusive KI. Zusätzlich wollte ich noch das der "AH-6X" nach dem Respawnen mit dem ULB Modul Syncronisiert wird.

Ich habe einen Auslöser gemacht und das "Funktionsmodul" auf die Karte geplantzt.
Im Auslöser steht dass:

Bediengung: Alive Player

INIT: [getMarkerPos "MARKERNAME", Random 360, "AH6X_EP1", West] call BIS_fnc_spawnVehicle;

Wie stelle ich es ein dass der "AH-6X" Erst Respawnt wird mit dem Auslöder wenn er Zerstört ist und Anschließend wieder Respawnt mit dem Selben Namen. Wie stelle ich es ein das er immer den Gleichen namen hat.

Huch... ich hoffe ihr könnt mir Helfen

theslyder 12.05.2011 23:28

hat keiner eine Idee ???
Bin am Verzweifeln... Also der AH-6X soll einfach nach dem er Zerstört worden ist neu Respawnen damit ich ihn Benutzen kann!

Ghost_Aut 13.05.2011 04:13

Zitat:

Zitat von theslyder (Beitrag 371338)
hat keiner eine Idee ???
Bin am Verzweifeln... Also der AH-6X soll einfach nach dem er Zerstört worden ist neu Respawnen damit ich ihn Benutzen kann!

Hallo du könntest dir mal das vehiclerespawn Skript anschauen, das Skript übernimmt auch den Namen des Zerstörten Fahrzeuges!
Vielleicht hilft es dir weiter !!
http://www.armaholic.com/page.php?id=6080

Vienna 13.05.2011 08:13

Hier zwei einfache Beispiele für einen Fahrzeugrespawn:

http://hx3.de/editing-scripting-167/...92/#post368210

Vienna 13.05.2011 12:54

Du möchtest ja, dass das Fahrzeug nach dem Respawn den gleichen Namen hat. Dazu das 1. Beispiel aus dem Link entsprechend abgeändert. Fz1 ist dabei der Name des Fahrzeuges, den du gleichfalls dem Fahrzeug als Name eingeben musst.

So hat das Respawn Fahrzeug den gleichen Namen. Auch im Multiplayermodus.

Den Code kopierst du so in die Initzeile der Fahrzeuge. Dabei sind die beiden Fz1 durch den jeweiligen Fahrzeugnamen zu ersetzen.

Code:

if (isServer) then
{
 this spawn
 {
  private ["_t","_p"];
  _t = typeOf _this;
  _p = position _this;
  while{true}do
  {
  Fz1 = _this;
  publicVariable "Fz1";
  waitUntil{!alive _this};
  sleep 10;
  deleteVehicle _this;
  sleep 10;
  _this = _t createVehicle _p
  }
 }
}


theslyder 13.05.2011 14:08

Hey,
daaaanke Klapt wunderbar. Das Vehicle Respawnt. Wie stelle ich es an dann beim Respawn Einheiten im Fahrzeug sind es geht um die MQ-9 damit gleich einheiten drin sitzen. Ich habe es per auslöser gemacht funktioniert aber so nicht:

Bediengung: alive MQ-9

Init...: Soldatenname moveindriver MQ-9

Beim Soldaten in der Init habe ich stehen:
if (isServer) then { this spawn { private ["_t","_p"]; _t = typeOf _this; _p = position _this; while{true}do { Soldatenname = _this; publicVariable "Soldatenname"; waitUntil{!alive _this}; sleep 1; deleteVehicle _this; sleep 1; _this = _t createVehicle _p } } }

Der Soldate wird zwar respawn bleibt aber stehen rührt sich nicht und ist auch nicht in der MQ-9 drin

Heeeelp!

theslyder 13.05.2011 16:22

Hmmm,
wenn ich das Hier im Auslöser eingebe

[getMarkerPos "MARKERNAME", Random 360, "Fahrzeugname", West] call BIS_fnc_

wird zwar das Fahrzeug Respawn mit KI aber es respawnt nach dem Zerstören nicht mehr und der Fahrzeug Name Verschwindet ebenfalls...

Also ich verzweifle.......... Habe schon das Forum durchstöbert aber ich bein eben nur ein NEULING....

theslyder 13.05.2011 19:14

keiner eine Idee ???

Vienna 14.05.2011 13:59

Zum Respawn für Soldaten musst du in die Initzeile diesen Code reinkopieren. Beachte auch dabei den jeweiligen Namen (hier z.B. So1):

Code:

if (isServer) then
{
 this spawn
 {
  private ["_t","_p","_g"];
  _t = typeOf _this;
  _p = position _this;
  while{true}do
  {
  So1 = _this;
  publicVariable "So1";
  _g = group _this;
  waitUntil{!alive _this};
  sleep 10;
  deleteVehicle _this;
  sleep 10;
  _this = _g createUnit [_t, _p, [], 0, "FORM"];
  }
 }
}

Ins Fahrzeug reinsetzen geht dann z.B. mit:
So1 moveInDriver Fz1;
So2 moveInGunner Fz1;


Damit ist es aber noch nicht getan. Nun fehlen der KI noch die Befehle. z.B. mit Wegpunkten.

theslyder 25.05.2011 15:27

Testmap Funktioniert Nicht
 
Hallo,
danke nochmals Habe bisher alle Funktionen eingebaut ohne Marker Funktioniert auch bloß leider selten. Meistens Steht UAV (ULB) Zerstört. Ich wäre Froh wenn jemand sich mal die map Anschauen könnte wo ich den Fehler drin habe. Wie gesagt ULB Funktioniert nicht immer.

theslyder 25.05.2011 15:28

Anbei die Testmap
 
Die Testmap:

uploaded.to - where your files have to be uploaded to

theslyder 28.05.2011 20:39

keiner eine Idee ?

Ghost_Aut 29.05.2011 23:13

Liste der Anhänge anzeigen (Anzahl: 1)
Hello ich hätte hir eine kleine test Version erstellt,
ich glaube aber das sie nicht Multyplayer fähig ist da ich beim
testen mit den 2 Player nicht synchronisieren konnte!!
vielleicht weiss jemand anders wie mann das hin bekommt!

Das skript wird über eine Addaction aufgerufen!
Der Manager ist das Modul!
Das Terminal ist das Drohnen_Terminal
UAV.sqf

Code:
private ["_terminal","_player","_manager","_Mq","_pilot "];
_terminal = _this select 0;
_player = _this select 1;
_Manager = Manager;
UAV = true;
publicVariable "UAV";
_Mq = createVehicle ["MQ9PredatorB_US_EP1", position _Terminal, [], 0, "FLY"];
_Bravo = createGroupWest;
"US_Soldier_Pilot_EP1" createUnit [_terminal, _Bravo, "this moveindriver _Mq", 1,"FROM"];
"US_Soldier_Pilot_EP1" createUnit [_terminal, _Bravo, "this moveingunner _Mq", 1,"FROM"];
_pilot = Leader_Bravo;
_Mq flyInHeight 250;
sleep 2;
if (alive _player) then
{
if (true) then {_Manager synchronizeObjectsAdd [_player]};
sleep 1;
if (true) then {_Manager synchronizeObjectsAdd [_terminal]};
sleep 1;
if (true) then {_Manager synchronizeObjectsAdd [_pilot]};
playersideChat "Die UAV Übertragung ist nun Aktive!";
 
_timeout = time + 300;
waitUntil {sleep 2; !alive_pilot or !alive_Mq or! alive_player or _timeout < time};
if (true) then {deleteVehicle_Mq; {deleteVehicle_x} forEachunits_Bravo};
if (true) then {_Manager synchronizeObjectsRemove [_player]};
if (true) then {_Manager synchronizeObjectsRemove [_terminal]};
if (true) then {_Manager synchronizeObjectsRemove [_pilot]};
UAV = false;
publicVariable "UAV";
};
if (true) exitWith {playersideChat "Die UAV Übertragung wurde Unterbrochen!"};

Vienna 30.05.2011 18:58

Funktioniert recht gut. Müsste auch in MP klappen.

Der Namen Manager könnte man noch als Parameter in der Aktion übergeben.

Ich habe das Skript in eine kommentierte Form umgeschrieben:

Code:

//////////////////////////////////////////////////////////////////
// Function file for Armed Assault
// Created by: UAV_Test_Für_Host Ghost [AUT]
//////////////////////////////////////////////////////////////////

private ["_terminal","_player","_manager","_gruppe","_drohne","_timeout"];

_terminal = _this select 0; //Drohnen-Terminal
_player  = _this select 1; //Spieler für die Drohnen-Kontrolle
_manager  = Manager;        //Globaler Name des Drohnen-Managers

UAV = true;                //Globalae Variable, sperrt weiteren Zugriff auf die Aktion des Terminals
publicVariable "UAV";

//Drohne erstellen
_drohne = createVehicle ["MQ9PredatorB_US_EP1", position _Terminal, [], 0, "FLY"];
_gruppe = createGroup West;
"US_Soldier_Pilot_EP1" createUnit [_terminal, _gruppe, "this moveindriver _drohne", 1,"FROM"]; //Dummy-Pilot  für Drohne
"US_Soldier_Pilot_EP1" createUnit [_terminal, _gruppe, "this moveingunner _drohne", 1,"FROM"]; //Dumme-Gunner für Drohne
_drohne flyInHeight 250; //Drohnen Flughöhe

sleep 2;

//Synchronisation mit dem Drohnen-Manager
_manager synchronizeObjectsAdd [_player,_terminal,_drohne];

TitleText["Die UAV Übertragung ist nun Aktiv!\n\nSicht-Aktion beim UVA-Terminal vorhanden!","plain down"];

_timeout = time + 300; //Zeit in Sekunden bis zur Zerstörung der Drohne

//Warten auf Ereignis (ohne sleep 2; spinnt das Programm)
waitUntil {sleep 2;!alive _drohne OR !alive _player OR _timeout < time};

//Synchronisation beenden
_manager synchronizeObjectsRemove [_player,_terminal,_drohne];
//Dummys löschen
{deleteVehicle _x} forEach units _gruppe;

TitleText["Die Drohne ist zerstört!","plain down",2];

sleep 2;

UAV = false;  // Zugriff auf die Drohnen-Aktion wieder freigeben
publicVariable "UAV";


//Drohne nach 60 Sekunden löschen
sleep 60;
deleteVehicle _drohne;

Interessant ist die Zeile mit waitUntil. Wenn man dort das eingebundene sleep 2; weglässt, dann spinnt die Routine.

Ghost_Aut 30.05.2011 20:20

Hello Vienna!

Ich habe mal dass Skript jetzt von dir getestet, ist leider das gleiche problem in Mp, wie ich mit dem 2 Pc verbunden hatte, und das skript
gestartet habe was sich ja problemlos machen lässt, es erzeugt sich auch die Drohne und bei der überprüfung von,

If (true) then {hint "Ja"; _ManagersynchronizeObjectsAdd [_player]}else{hint "Nein"};
If (true) then {hint "Ja"; _ManagersynchronizeObjectsAdd [_terminal]}else{hint "Nein"};
If (true) then {hint "Ja"; _ManagersynchronizeObjectsAdd [_pilot]}else{hint "Nein"};

Wird mir eigentlich alles mit Ja bestätigt, aber leider kommt dann nich die
UAV addachtion! beim Client.

Bei dem spieler als Host klappt alles so wie es sein soll auch nach dem Respawn, aber vielleicht liegt es wirklich an der addaction was auf der karte Plaziert wurde!!

LG.
Ghost

Ghost_Aut 30.05.2011 22:30

Na ja ich hätte es mal mit einem normalen Auslöser zum test versucht
leider geht es auch nicht!

Bedingung:
Local player
Akt:
nul=[terminal, vehicle player, Manager] execVM "UAV.sqf";

vielleicht wenn man das Modul bei skript mit erzeugt, aber bis jetzt habe ich unter google noch nichts gefunden wie man es erstellen könnte!!

Aber so schaut das skript gleich professional aus wie du es erstellt hast Vienna!

Vienna 31.05.2011 01:07

Verstehe ich das richtig bei mehreren Spielern.

a) Ein Spieler, der nicht Host ist, bekommt nach dem Aufruf des Skripts keinen Zugang zur Sicht des UAV-Terminal?

b) Oder haben nur andere Spieler, welche das Skript nicht aufgerufen, keinen Zugang zum UAV-Terminal?


Was willst du mit dieser Zeile prüfen?
If (true) then {hint "Ja"; _ManagersynchronizeObjectsAdd [_player]}else{hint "Nein"};
Hier kann bei dem Spieler, der das Skript aufruft, immer nur Ja angezeigt werden. Spieler, bei denen das Skript nicht aufgerufen wurde, sehen gar keine Anzeige.
Die Abfrage if (true)then{..} ergibt immer "Wahr". Darum kann man sie weglassen und immer gleich den Inhalt von then als Zeile ohne Abfrage belassen.

Ghost_Aut 31.05.2011 01:27

Zitat:

Zitat von Vienna (Beitrag 374060)
Verstehe ich das richtig bei mehreren Spielern.

a) Ein Spieler, der nicht Host ist, bekommt nach dem Aufruf des Skripts keinen Zugang zur Sicht des UAV-Terminal?

b) Oder haben nur andere Spieler, welche das Skript nicht aufgerufen, keinen Zugang zum UAV-Terminal?


Was willst du mit dieser Zeile prüfen?
If (true) then {hint "Ja"; _ManagersynchronizeObjectsAdd [_player]}else{hint "Nein"};
Hier kann bei dem Spieler, der das Skript aufruft, immer nur Ja angezeigt werden. Spieler, bei denen das Skript nicht aufgerufen wurde, sehen gar keine Anzeige.
Die Abfrage if (true)then{..} ergibt immer "Wahr". Darum kann man sie weglassen und immer gleich den Inhalt von then als Zeile ohne Abfrage belassen.

Ja die frage A ist korrekt!
aber im skript wird der Client, erkannt!
if (alive _player) then {hint "player ja"}else{hint "player Nein"};
bei dieser abfrage kommt auch JA, also erkannt wird er! Denke ich mal!

Dann habe ich noch mit alive die anderen Obj. überprüft das Modul & UAV-Terminal & Pilot!
auch bei dieser Abfrage kommt das Ja!

Achso wusste ich nicht das es bei der Abfrage automatisch zu JA kommt! if (true)then{..}

Vienna 31.05.2011 10:55

Ein Spieler, der nicht Host ist, ruft am UAV-Terminal das Skript auf, bekommt aber dann nicht die Aktion um am UAV-Terminal in die Drohnensicht einzusteigen. Richtig???

Wenn Richtig, dann würde das bedeuten, dass das Skript unbedingt beim Server/Host auszuführen ist.

Wenn der Client das Skript aufruft, dann wird er im Skript natürlich erkannt. Falls das Skript aber zwingend beim Server/Host laufen muss, dann ist es dort aufzurufen. Wobei der Name des aufrufenden Spielers als Parameter zu übergeben ist, um ihn in die Synchronisierung einzubinden.

Kann sein, dass die Synchronisierung dabei auch beim aufrufenden Spieler erfolgen muss. Dazu müsste man den Namen der Drohne mit Globaler Variable und publicVariable diesem Spieler mitteilen, damit auch auf seinem PC die Synchronisierung erfolgen kann.

Vienna 31.05.2011 18:30

In der Config.bin des UAV-Moduls steht folgende Zeile:

if (isServer) then {private ["_ok"];_ok = _this execVM "ca\modules\uav\data\scripts\uav.sqf"};

Was sichtlich darauf hinweist, dass das Modul nur auf dem Server/Host läuft.

Teste einmal ob das UAV-Modul überhaupt MP fähig ist.

Dazu einfach direkt im Editor einem spielbaren Soldaten eine Drohne zur Steuerung zuweisen.

Dazu:
.) Besetzte Drohne erstellen.
.) UAV-Terminal erstellen.
.) UAV-Modul erstellen.
.) Dann das Modul mit Drohne, Terminal und dem Soldaten synchronisieren.

Der Spieler der diesen Soldaten besetzt darf nicht Host sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 Uhr.

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 117 118 119