23.04.2012, 04:00 | #1 (permalink) |
setVehicleInit
Hello HX3 Team!
Ich bräuchte mal etwas Professionelle Hilfe! Und zwar würde ich gerne in die setVehicleinit bei einer AI Einheit einem addactions Befehl hinzufügen, was so weit Auch ganz gut funktioniert, nur habe ich das Problem so bald Ein neuer Player Verbinden würde bekommt er die addaction Nicht mehr angezeigt die AI wird über ein Skript erzeugt und anschließend mit! Code:
[_unit] call Follow; Code:
Follow = { private ["_unit","_alpha","_index"]; _unit = _this select 0; _alpha = group _unit; sleep 2; _unit removeAction 0; clearVehicleinit _unit; _unit removeAllMPEventHandlers "mpkilled"; Sleep 2; _index = _unit addMPEventHandler ["mpkilled", {Null = _this execVM "Team_West\Body_dead.sqf";}]; _unit setVehicleInit "this addAction [' Follow Me,'team_west\Follow.sqf']"; processInitCommands; }; Noch mal in die init.sqf rufe funktioniert soweit auch ganz gut nur habe ich anschließend Bei dem Player der schon vorher im Game wahr einen doppelten addactions Eintrag! Code:
{[_x] call Follow}foreach Westunits; Vielleicht könnte mir jemand einen Tipp geben?
__________________
Ghost_AUT Geändert von Ghost_Aut (23.04.2012 um 04:43 Uhr). |
|
23.04.2012, 08:54 | #2 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Die inti.sqf darfst du nicht bei allen Spielern neu aufrufen. Beim Neueinsteiger wird sie ohnehin automatisch aufgerufen. Du musst nur dafür sorgen, dass er dass Array mit den Units hat, welche die Aktion haben sollen.
Dieses Array soll der Server verwalten und über onPlayerConnected mit publicVariable senden. Im Skript beim Client, welches die Aktionen einfügt und von der init.sqf aufgerufen wird, muss eine Pause vorhanden sein, damit das Array sicher vorhanden ist. |
23.04.2012, 11:05 | #3 (permalink) |
Registriert seit: 26.11.2006
Ort: Kiel, S-H
Alter: 57
Beiträge: 3.013
|
Wenn eine Serververwaltete Variable einmal publicvariable'd worden ist, braucht man diese nicht nocheinmal via OnPlayerConnected extra zu publizieren, das geschieht dann immer ganz automatisch mit dem aktuellem Inhalt bei allen JIP Clients !
__________________
Nur ein Beispiel das zeigt wie BI "support" definiert: https://feedback.bistudio.com/T75547 |
23.04.2012, 12:18 | #4 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Tolle Sache!
Um nichts misszuverstehen: Wenn beim Server/Host einmal eine Variable mit publicVariable übertragen wurde, dann wird diese (auch ohne onPlayerConnected) automatisch beim JIP Client mit dem Wert vom Server initialisiert. Kann es da ein Problem geben, wenn diese Variable z.B. auch in der init.sqf beim Client initialisiert wird? |
23.04.2012, 16:09 | #6 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Es ist also angebracht alle publiken Variablen mit dem isNil-Check zu initialisieren. Diese Automatik erspart natürlich für JIP einiges an Programmierung.
Falls der isNil-Check vor der Initialisierung durch den Server erfolgt, ist anzunehmen dass der Inhalt der Variablen dann vom Serverwert überschrieben wird. Es wird vermutlich der Inhalt übertragen den der Server hat. Diese "Automatik" vom Server gilt nur bei JIP? Sonst muss der Server publicVariable verwenden? Wird diese Automatik nur beim JIP-Client wirksam, oder erfolgt eine "Auffrischung" der Variablen dadurch auch bei den anderen Clients? Falls das unklar ist, sollten publike Variable nur als solche verwendet und immer übertragen werden. |
23.04.2012, 17:15 | #8 (permalink) |
...die allerdings sehr kompliziert sein können und bestimmt nicht für den "normalen" Scripter/Missionsbastler anwendbar sind. Und bei Missionen ohne JIP/respawn oder einer Missionslänge von 60min eben sch***egal ist. Das ist nur was für Domi und Co. Und zum Thema: da steht ein sleep in der Funktion. Grüße
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ Geändert von Xeno (03.01.2014 um 08:37 Uhr). |
|
27.04.2012, 17:42 | #10 (permalink) |
Danke für denn einen oder anderen Tipp, ich habe es
Jetzt mal so hinbekommen, dass ich damit leben kann gg! Beim Start des Scripts mit den AI, rufe ich sie mal in die init.sqf dadurch bekommt jeder Player im Game die Action! Falls Jemand später neu verbindet, werden die Aktionen durch eine abfrage Des Bestehens der Units, lokal hinzugefügt ohne setvehicleinit Code! (units publike erstellt) MFG.
__________________
Ghost_AUT |
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|