HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Zeit ändern während Spiel (https://hx3.de/editing-scripting-167/zeit-aendern-waehrend-spiel-21241/)

Crisis 05.01.2012 01:09

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

Vienna 05.01.2012 02:48

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/...-rejoin-21161/

Vienna 05.01.2012 13:35

Eigentlich müsste bei JIP das aktuelle Datum und die Zeit automatisch übernommen werden. Teste das einmal.

Crisis 05.01.2012 15:24

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.

Vienna 05.01.2012 17:49

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.

Pfandgiraffe 05.01.2012 18:47

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 :) )

Vienna 05.01.2012 19:41

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:

Zitat von Vienna (Beitrag 401133)
Bei Akt.: NeueZeit=date; "NeueZeit" addPublicVariableEventHandler {setDate NeueZeit}

Und nicht die Clients, sondern der Server "feuert" eine Änderung übers Netz.

Zitat:

Zitat von Vienna (Beitrag 401005)
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?

Pfandgiraffe 05.01.2012 23:33

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/a...leEventHandler


Grüße

Vienna 06.01.2012 02:38

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:

Pfandgiraffe 06.01.2012 08:44

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

Xeno 06.01.2012 09:08

*deleted*

Xeno

Pfandgiraffe 06.01.2012 10:15

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

Vienna 06.01.2012 10:47

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.

Xeno 06.01.2012 12:52

Zitat:

Zitat von Vienna (Beitrag 401241)
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:

Zitat von Vienna (Beitrag 401241)
Der Code in {...} anstelle von "..." funktioniert leider nicht bei allen EventHandlern.

*deleted*

Xeno

Pfandgiraffe 06.01.2012 16:10

Zitat:

Zitat von Xeno (Beitrag 401275)
*deleted*

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


Grüße

Crisis 06.01.2012 18:34

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.

Vienna 06.01.2012 20:21

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:

Zitat von Xeno (Beitrag 401275)
*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:

Zitat von Psychobastard (Beitrag 401227)
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.

Buliwyf 06.01.2012 21:41

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...

Vienna 06.01.2012 22:42

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.

Raptile4ever 28.04.2014 09:53

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:37 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