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:
Schönen Dank |
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/ |
Eigentlich müsste bei JIP das aktuelle Datum und die Zeit automatisch übernommen werden. Teste das einmal.
|
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. |
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. |
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 :) ) |
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:
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? |
Zitat:
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 |
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: |
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 |
*deleted*
Xeno |
Zitat:
Zitat:
Grüße |
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. |
Zitat:
Zitat:
Xeno |
Zitat:
zu { } vs. " ". @Vienna, Xeno meinte damit den Befehl onplayerconnected, nicht die evh's. Grüße |
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.
|
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:
|
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...
|
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.
|
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