⚡ Neueste Beiträge

Zeit ändern während Spiel

05.01.2012, 01:09 #1 (Permalink)
Crisis
10 Jahre hx3
500 Beiträge
Registriert seit: 20.11.2006
Ort: Hannover
Alter: 62
Beiträge: 902
Zeit ändern während Spiel

Kann mir jemand sagen was ich in einen Auslöser schreiben muss um diese
"skiptime" Funktion MP funktionsfähig zu machen.
Lt. kju auf BIS Scripting Command Seite solls wohl für JIP-ler und auch Client-Server seitig Probleme geben ?
Zitat:
kju:

I cannot confirm this for OA 1.60 beta (85889):
Zitat:
BIS:
MP: Even though the immediate effect of skipTime is only local, the new time will propagate through the network after 30 seconds or so.
Instead the date, which includes time, is synced automatically for new JIP clients - NOT for present instances. So one has to apply skipTime on all instances in MP (server + all present clients).
(Das fett hervorgehobene könnte auch Suaheli sein. Wüsste nichtmal ansatzweise wie.)
Schönen Dank
05.01.2012, 02:48 #2 (Permalink)
Vienna
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
Avatar von Vienna
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Erstelle einen PublicVariableEventHandler für die Variable NeueZeit:

"NeueZeit" addPublicVariableEventHandler {setDate NeueZeit}

Im Editor für den Server/Host einen Auslöser um z.B. nach 10 Minuten die Zeit um 1,5 Stunden vorzustellen:

Bedingung: isServer and time > 600

Bei Akt: skipTime 1.5; NeueZeit = date

date enthält das Datum und die aktuelle Zeit! Ändert sich die Variable NeueZeit, dann wird das vom EventHandler an die PCs übertragen und dort mit setDate synchronisiert.

http://community.bistudio.com/wiki/date


Für JIP musst du dafür sorgen dass date vom Server an den Neueinsteiger übertragen wird. Das geschieht über onPlayerConnected. Müsste genügen wenn du dort im Skript NeueZeit = date anführst, dann wird gleich bei allen Spieler die aktuelle Zeit neu "aufgefrischt".

Mehr über onPlayerConnected kannst du hier nachlesen: http://hx3.de/editing-scripting-167/variablenwert-rejoin-21161/
05.01.2012, 13:35 #3 (Permalink)
Vienna
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
Avatar von Vienna
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Eigentlich müsste bei JIP das aktuelle Datum und die Zeit automatisch übernommen werden. Teste das einmal.
05.01.2012, 15:24 #4 (Permalink)
Crisis
10 Jahre hx3
500 Beiträge
Registriert seit: 20.11.2006
Ort: Hannover
Alter: 62
Beiträge: 902
Danke dir, Vienna. Habe allerdings mit dem Wort "erstelle" so meine Probs.

Ist "erstelle==setze gamelogic uind schreibs dort in die init" ? Steht auch oft im "Guide"; genau das gleiche Fragezeichen.

Platziere, setze dies/jenes..ist ja im Editor zu finden, auswählbar, was Handfestes. Aber dieses erstelle ist für mich meist nebulös.

Wenns für dieses "erstelle" ne immergültige Aussage gibt, gehört die in jede Editinghilfe gepinnt. Eine Aussage dahingehend fürn Doofen wäre hilfreich.

Danke schön, und fühl dich bitte nicht angemault. Nicht liegt mir ferner.
05.01.2012, 17:49 #5 (Permalink)
Vienna
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
Avatar von Vienna
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Ich dachte du weißt bereits wofür z.B. die init.sqf ist. Lade dir einmal diese Anleitung runter und arbeite sie durch:
Armaholic - Basic SQF-Scripting guide - Editing References


Jetzt zu deinem Zeitsprung

Wie du einen Auslöser für skipTime für den Server/Host erstellst, habe ich ja schon beschrieben.

Wie folgt kannst du auch den Eventhandler mit einem Auslöser initialisieren:

Aktivierung: Keine Einmal

Bedingung: true

Bei Akt.: NeueZeit=date; "NeueZeit" addPublicVariableEventHandler {setDate NeueZeit}

Diese beiden Auslöser sollten reichen, wenn du einen Zeitsprung für MP erstellen willst. Wenn die Zeit bei JIP automatisch angepasst wird, dann wars das schon.

Für einen weiteren Zeitsprung bauchst du nur einen weiteren skipTime Auslöser erstellen. Das geht mit dem üblichen Kopieren und Einfügen. Dann ist in der Kopie nur noch die Zeit zu ändern.
05.01.2012, 18:47 #6 (Permalink)
Pfandgiraffe
500 Beiträge1000 Beiträge
Avatar von Pfandgiraffe
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 40
Beiträge: 1.737
Um mich hier mal einzumischen:
Das funktioniert so nicht. Damit der pb evh gefeuert wird muss deine Variable erstmal public gemacht werden. Und ein JIP wird damit auch nicht versorgt. Und bedenke das der Code bei jedem Client aber nicht beim Server ausgelöst wird! (JIP)

Einem JIP'ler kannst du dagegen die Zeit dann recht einfach übergeben indem die Variable bei connecten einfach erneut Public gemacht wird.


Grüße

p.s.: sollte deine Variante getestet bereits funktionieren betrachte meinen Einwurf als hinfällig und das BIS Wiki als lückehaft :) )
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___
05.01.2012, 19:41 #7 (Permalink)
Vienna
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
Avatar von Vienna
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Das ist logisch gedacht, wie es eigentlich funktionieren müsste.

Publik ist die Variable, weil sie über den Auslöser bei allen initialisiert wird. (wobei bei dieser Initialisierung anstelle date auch 0 genommen werden könnte).
Zitat von Vienna
Bei Akt.: NeueZeit=date; "NeueZeit" addPublicVariableEventHandler {setDate NeueZeit}

Und nicht die Clients, sondern der Server "feuert" eine Änderung übers Netz.
Zitat von Vienna
Bedingung: isServer and time > 600
Bei Akt: skipTime 1.5; NeueZeit = date


Ich verstehe den PublicVariableEventHandler so, dass der EventHandler auf einen PC, bei dem die Variable geändert wird, diese Änderung wie mit publicVariable übers Netz sendet. Bei den Empfänger PCs wird diese Variable aktualisiert und der Codeteil ausgeführt.

Verstehe ich da was falsch?
05.01.2012, 23:33 #8 (Permalink)
Pfandgiraffe
500 Beiträge1000 Beiträge
Avatar von Pfandgiraffe
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 40
Beiträge: 1.737
Zitat:
Verstehe ich da was falsch?

Nachdem eine Variable public gemacht wurde wird der pb evh gefeuert (von wem auch immer, das bestimmst du).
Wenn der pb evh gefeuert wurde wird bei allen Maschinen der Code abgearbeitet außer bei der Maschine welche den pb evh gefeuert hat. In dem Code werden üblicherweise natürlich auch die Variablenänderungen übergeben. (hätte sonst auch wenig Sinn).

http://community.bistudio.com/wiki/addPublicVariableEventHandler


Grüße
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___
06.01.2012, 02:38 #9 (Permalink)
Vienna
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
Avatar von Vienna
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Danke für die Information. Dann ist der PublicVariableEventHandler nur ein "Empfänger". Ich war der Meinung, er "sendet" auch, sobald die Variable einen neuen Wert hat.

So muss wie üblich die Variable nach dem Ändern mit publicVariable übertragen werden.


Der Auslöser aus Post #2 muss nun so aussehen:

Aktivierung: Keine Einmal
Bedingung: isServer and time > 600
Bei Akt: skipTime 1.5; NeueZeit = date; publicVariable "NeueZeit"


Dass beim JIP das aktuelle Datum und die Zeit vom Server/Host nicht automatisch vom Neueinsteiger übernommen wird, ist schon seltsam.

Dann sieht der Initialisierungs-Auslöser jetzt so aus:

Aktivierung: Keine Einmal
Bedingung: true
Bei Akt.: NeueZeit=date; "NeueZeit" addPublicVariableEventHandler {setDate NeueZeit}; if (isServer) then {onPlayerConnected "NeueZeit = date; publicVariable ""NeueZeit"" "}

Ist jetzt recht verwirrend, darum nochmals die beiden Auslöser:
06.01.2012, 08:44 #10 (Permalink)
Pfandgiraffe
500 Beiträge1000 Beiträge
Avatar von Pfandgiraffe
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 40
Beiträge: 1.737
Der 2. Auslöser sollte so aussehen:

Aktivierung: Keine, Einmal
Bedingung: isServer
Bei Akt.: "NeueZeit" addPublicVariableEventHandler {setDate NeueZeit}; onPlayerConnected "NeueZeit = date; publicVariable ""NeueZeit"" ";

Der pb evh muß nur einmal (vom Server) gefeuert werden.

Grüße
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___
06.01.2012, 09:08 #11 (Permalink)
Xeno
10 Jahre hx3
5000 Beiträge
Avatar von Xeno
Registriert seit: 03.01.2008
Alter: 86
Beiträge: 6.552
*deleted*

Xeno
__________________
In arma everything is made of refined explodium, armored with wet paper towels.
06.01.2012, 10:15 #12 (Permalink)
Pfandgiraffe
500 Beiträge1000 Beiträge
Avatar von Pfandgiraffe
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 40
Beiträge: 1.737
Zitat:
*deleted*

Das mach ja nicht ich sondern Vienna zum besseren Verständniss für Crisis. ;) Und ich schreibe das auch als Code. Aber im Bis Wiki steht es als String und beides funzt und man muss ja nicht mehr verwirren als nötig.

Zitat:
*deleted*
Das stimmt auch. Aber du weist doch: sicher ist sicher bei armA! :ugly:


Grüße
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___
06.01.2012, 10:47 #13 (Permalink)
Vienna
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
Avatar von Vienna
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Also überträgt der publicEventHandler nicht nur den Wert der Variablen zu den PCs, sondern er initialisiert dort die Variable und führt auch den Code aus, ohne dass die anderen PCs den publicEventHandler oder die Variable haben müssen. Das ist von Vorteil, weil so Variableerstellen und Codeändern mit diesem EventHandler einfach ist.

Der Code in {...} anstelle von "..." funktioniert leider nicht bei allen EventHandlern.

Crisis kann ja testen, ob man den zweiten Auslöser überhaupt weglassen kann oder ob er nur noch für skipTime bzw. für onPlayerConnected notwendig ist.

Sollte der zweite Auslöser überflüssig sein, dann braucht der erste nur noch so aussehen:

Aktivierung: Keine Einmal
Bedingung: isServer and time > 600
Bei Akt: skipTime 1.5

Das ist das Irre an Arma, dass man oft ernst über Versuch und Irrtum weiß wie was richtig anzuwenden ist.
06.01.2012, 12:52 #14 (Permalink)
Xeno
10 Jahre hx3
5000 Beiträge
Avatar von Xeno
Registriert seit: 03.01.2008
Alter: 86
Beiträge: 6.552
Zitat von Vienna
Also überträgt der publicEventHandler nicht nur den Wert der Variablen zu den PCs, sondern er initialisiert dort die Variable und führt auch den Code aus, ohne dass die anderen PCs den publicEventHandler oder die Variable haben müssen. Das ist von Vorteil, weil so Variableerstellen und Codeändern mit diesem EventHandler einfach ist.
*deleted*
Zitat von Vienna
Der Code in {...} anstelle von "..." funktioniert leider nicht bei allen EventHandlern.
*deleted*

Xeno
__________________
In arma everything is made of refined explodium, armored with wet paper towels.
06.01.2012, 16:10 #15 (Permalink)
Pfandgiraffe
500 Beiträge1000 Beiträge
Avatar von Pfandgiraffe
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 40
Beiträge: 1.737
Zitat von Xeno
*deleted*

Ja, und auch alle Hohei Evos! :lol:
zu { } vs. " ".
@Vienna, Xeno meinte damit den Befehl onplayerconnected, nicht die evh's.


Grüße
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___
06.01.2012, 18:34 #16 (Permalink)
Crisis
10 Jahre hx3
500 Beiträge
Registriert seit: 20.11.2006
Ort: Hannover
Alter: 62
Beiträge: 902
Die Bedingung isServer and time > 600 kann ich aber auch auf this lassen, wenn ichs so nicht brauche ?Oder dann was Spezielles , if is server oder sowas ?Der Auslöser wird durch Anwesenheit ausgelöst. Kann mich da hinbeamen, dank VTS.
06.01.2012, 20:21 #17 (Permalink)
Vienna
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
Avatar von Vienna
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Crisis, ein Auslöser mit Bedingung this ist natürlich auch möglich. Bei Akt.: dann z.B. skipTime 1.5


Psychobastard und Xeno, irgendwas stimmt hier nicht.
Zitat von Xeno
*deleted*

Also muss der PvEH auf allen PCs vorhanden sein, bei denen der Code ausgeführt werden soll. Beim auslösenden PC müsste die Codeausführung separat erfolgen.
Zitat von Psychobastard
Der 2. Auslöser sollte so aussehen:

Aktivierung: Keine, Einmal
Bedingung: isServer
Bei Akt.: "NeueZeit" addPublicVariableEventHandler {setDate NeueZeit}; onPlayerConnected "NeueZeit = date; publicVariable ""NeueZeit"" ";

Der pb evh muß nur einmal (vom Server) gefeuert werden.

Grüße

So ist ja der PvEH nur beim Server vorhanden? Um den PvEH auf allen PCs zu installieren, ist für diesen Initialisierungs-Auslöser als Bedingung true erforderlich.
06.01.2012, 21:41 #18 (Permalink)
Buliwyf
10 Jahre hx3
500 Beiträge1000 Beiträge
Avatar von Buliwyf
Registriert seit: 11.03.2005
Ort: HH
Alter: 55
Beiträge: 1.931
Ich würde den addPublicVariableEventHandler in die init.sqf schreiben. So haben ihn alle Clients und der Server. Und die entsprechende Publicvariable dann auf dem Server auslösen... zack das wars...
__________________
06.01.2012, 22:42 #19 (Permalink)
Vienna
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
Avatar von Vienna
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Der "Initialisierungs-Auslöser" ersetzt in diesem Beispiel die Init.sqf. Ich wollte das ohne Skript lösen. Dein Vorschlag entspricht dem meinen aus Post #9.
28.04.2014, 09:53 #20 (Permalink)
Raptile4ever
Newbie
Avatar von Raptile4ever
Registriert seit: 20.03.2008
Ort: Karlsruhe
Alter: 42
Beiträge: 46
Hallo Leute,

ich habe ein Server mit DayZ Epoch Mod und auch das Admintool vom Phönix und möchte da gerne im Menü die Zeit im Spiel als Admin ändern. Das Menü ist schon vorhanden nur habe ich keine Ahnung bzw. unter Google finde ich auch nicht wirklich ein Script das Funktioniert.

Nun meine frage hier bei euch, weiss jemand wie das genauer funkioniert und hat auch ein Time Change SQF für mich vorhanden und würde es mir freiwillig überreichen ? :)



MfG
RaPiD
HX3 Foren · Startseite · Archiv · Impressum · Datenschutz