Befehl auf einem Dedicated server ausführen
-
- Sonstiges
-
KillerEsel -
14. Februar 2021 um 16:27 -
Erledigt
-
-
Was meinst du damit konkret?
Vielleicht das alle den Alarm mitkriegen?
Dann schau mal in den Post davor, da hab ich das ganze schon beschrieben.
geheim
psst... remoteExec
Mit freundlichen Grüßen
Joe Barbaro
-
Was meinst du damit konkret?
Vielleicht das alle den Alarm mitkriegen?
Dann schau mal in den Post davor, da hab ich das ganze schon beschrieben.
geheim
psst... remoteExec
Mit freundlichen Grüßen
Joe Barbaro
Muss das dann so in die Init?
-
schau dir doch mal das WIKI an... So kann das gar nicht funktionieren.
Also du brauchst erstmal ne CfgRemoteExec. Diese definierst du entweder in einer Extra File oder direkt in der Description.ext.
Was hällst du denn davon:
Code{[_x,"alarm",RANGE,PITCH] remoteExecCall ["DEINE_fnc_Say3d",-2]}foreach(synchronizedObjects t1);
und die Funktion kannst du aus Altis Life nehmen.
https://github.com/AsYetUntitled/…rk/fn_say3D.sqf
Mit freundlichen Grüßen
Joe Barbaro
-
Ist das wirklich so umständlich ein Befehl auszuführen?
-
Nein ist es nicht. Grundsätzlich funktioniert es genauso wie beim Client.
Also <OBJECT> say3D "alarm" würde vollkommen reichen. Siehe hier -> https://community.bistudio.com/wiki/say3D
Aber, wie in der Dokumentation zu erkennen ist, darf das Argument (das Object) global sein, hingegen der Effekt (der Sound) nur lokal ist.
Bedeutet, wenn du das auf dem Server ausführst, wird auf dem Server der Sound abgespielt. Da der Server aber weder eine Position auf der Karte, noch eine Soundausgabe hat, hört man es nunmal nicht.
Also muss der Sound dort abgespielt werden, wo er zu hören sein soll. Das sind nunmal die Clients. Also muss der Code bei den Clients ausgeführt werden.
Da du es aber vom Server aus steuern möchtest, muss der Server allen Client mitteilen, dass sie jetzt von der Quelle einen Sound abspielen sollen.
Um Code bei anderen (in diesem Fall den Clients) ausführen zu lassen, benötigt man remoteExecCall, remoteExec oder eine andere Möglichkeit.
Das schaut dann so aus: [<OBJECT>, "alarm"] remoteExecCall ["say3D", -2]
Das wars auch schon. Mit weiteren Parametern lässt sich das ganze noch verfeinern.
Auch ist die Funktion komplett unnötig.
Um an mehreren Objekten den Sound abzuspielen, wird ein forEach benötigt und das ganze sieht dann so aus:
{[<OBJECT>, "alarm"] remoteExecCall ["say3D", -2]} forEach (<ARRAY OF OBJECTS>)
Um das ganze lässt sich noch auf viele andere Weiße lösen, die mit Sicherheit einige Vorteile haben.
Ich wollte es jetzt aber nur so einfach wie möglich halten.
Was ich noch nicht ganz verstanden habe, ist deine Frage, ob es in die Init muss.
Grundsätzlich ist es so, dass der Sound dann abgespielt wird, wenn der Code ausgeführt wird.
Wenn es in der initServer.sqf ist, dann wird der Sound beim starten der Mission abgespielt. Wenn zu dem Zeitpunkt noch kein Spieler auf dem Server ist, dann wird niemand den Sound hören. Auch werden nachjoinende Spieler keinen Sound hören.
Wenn du davon redest, es in eine Object Init zu packen, ist es so, dass der Code bei jedem ausgeführt wird, wenn die Mission geladen wird. Also sagt jeder Spieler, zu allen Spielern spiel diesen Sound ab.
Ich weiß nicht was du bezwecken möchtest, aber du musst dir vermutlich erstmal Gedanken machen, wann soll was genau passieren.
-
Erst mal vielen Danke für die Antwort, ich werde das gleich mal ausprobieren.
Zu deiner Frage, ich habe das so gemacht wenn die Einheit stirbt, wird ein Alarm ausgelöst. Das Klappt auch alles, aber das Problem ist halt das wenn ich mehrere Variablen in einem Befehl habe das es dann nur im Singelplayer geht aber nicht auf dem Server.
Ich werde das aber mal ausprobieren.
Danke