HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-187/)
-   -   Funktion Spawn Live (Problem) (https://hx3.de/editing-scripting-187/funktion-spawn-live-problem-25695/)

wolkenstuermer 14.01.2018 07:03

Funktion Spawn Live (Problem)
 
Hola.

Wie immer ein Problem mit dem lieben ArmA.

Ich habe eine Funktion. In der wird ein Objekt von A nach B bewegt.
In mehreren Schritten.

Singleplayer: prima.
Multiplayer: prima.
Dedicated: nix.

Soweit ja eigentlich alles wie immer, am Dedicated klappt nix. Das würde ich ja noch einsehen, und deprimiert wie immer (warum heißt es eigentlich nicht Depressing Server? Würde besser passen.) von dannen ziehen.

Aber jetzt kommts: Wenn ich auf dem Dedi mit Zeus ein neues Objekt "live" erstelle und dann EXAKT die SELBE Funktion innerhalb von Zeus darauf anwende, dann klappt alles wunderbar. Das Objekt wird korrekt von A nach B bewegt.

Was kann denn das sein?
Manchmal verhält sich das Zeuchs einfach so dermaßen irrational, dass man in das Mousepad beißen will (wenn das nicht aus Metall wäre ...)

Es sieht ja irgendwie so aus, als ob er bei der Initialisierung des Objekts irgendeinen Stress hat und damit dann jegliche Bewegung versaut, während er keinerlei Probleme mit einem neuen, frisch eingefügten Objekt hat.

Hilfe?! :ugly: Jemand eine Idee, was das sein kann?

burns 14.01.2018 15:37

Binde die Bewegungs-Aktion mal in einen Trigger ein. Wenn mich Lokalität angepisst hat (also immer), waren Trigger die Rettung, die propagieren anstandsfrei alles an jeden weiter :party:

wolkenstuermer 16.01.2018 04:09

Hi Burns,

ich hab' das aus einem Trigger aus aufgerufen.

Das Ding ist: Wenn ich das Objekt per Skript erzeuge, geht es auch. Ich kann mir nur vorstellen, dass beim Spawnen am Anfang der Mission diese vermalledeite Scheibe (es geht um Zielscheiben) irgendwas internes initialisiert (vielleicht sowas wie Score-Speicherung o.ä.) und dann damit nicht mehr richtig bewegbar ist.

Drunken Officer 16.01.2018 14:30

Wenn du eine Lösung hast, sag bescheid.

Ich lasse auch auf einer Schießbahn eine Zielscheibe von links nach rechts laufen.
Editor, SP, MP (HOST) -> funktioniert
MP (Dedi) funktioniert nicht

wolkenstuermer 17.01.2018 04:47

Hi Drunken,

du meinst vermutlich mit "Lösung" die Situation, dass ALLE Spieler alle Scheiben sehen. Das weiß ich noch nicht, da ich schon als Einzelspieler auf dem Dedi Probleme hatte, dass die Scheiben sich richtig bewegen.

Das läuft inzwischen, aber ich bin noch nicht fit mit RemoteExec und habe nicht so wirklich Plan, wie ich das anstellen soll.

Das Problem ist, dass man die Scheibe NICHT auf dem Server spawnen darf, ich denke das ist das Problem. Ich verwende einen AddAction dafür und wenn ich die Lokalität richtig verstanden habe, spawne ich die Scheibe dann lokal und bewege sie auch lokal.

Ich sehe sie sich dann korrekt bewegen, weiß aber nicht, ob die anderen sie überhaupt sehen (soweit bin ich noch nicht).

In der kalt lächelnden Theorie müsste ein Spieler sie spawnen und dann das Ergebnis allen anderen Spielern mitteilen. Keine Ahnung ob das mit
Code:

[params] remoteExec ['fnc', -2, true]
funktioniert, vermutlich spawnt sie dann je Spieler einmal, oder?

Ich hätte es auch lieber, dass die Scheibe von Anfang an dasteht (Atmo), aber das klappt wie gesagt nicht, da man die im Editor platzierten Objekte ja vermutlich auf dem Server spawnt?

wolkenstuermer 17.01.2018 05:55

Eine Möglichkeit wäre vielleicht, eine Scheibe im Editor zu platzieren, eine globale Variable zu vergeben und diese dann
a) von ihren Werten her zu kopieren: _pos, _dir, _varname, _classname
b) zu löschen
c) an _pos dann eine neue Scheibe zu spawnen

Aber keine Ahnung, wie man einen Variablennamen kopiert. Geht sowas mit get-/setVariable?

Drunken Officer 17.01.2018 12:12

Also das mit dem Addaction ist ist halbe Wahrheit.

Prinzipell wird ein Addaction lokal ausgeführt.
Jetzt kommt es ganz auf den Befehl an. Hat dieser einen globalen Effekt oder nicht.
Bedeutet, das eine Erzeugung eines Objektes einen Globalen Effekt hat, und somit JEDER dieses Objekt sieht. Zur Zeit sind mir nur Lichtpunkte als Ausnahme bekannt.
Würdest du ein Objekt ohne Begrenzung (z.B. isServer) erstellen, dann wird es Server+Anzahl Clienten erstellt.

Auch ist es wichtig, ob das Argument lokal sein muss oder global.

Beliebter Effekt ist z.B. des "Ergeben" eines Gegners. Via Addaction anklicken. Im SP wunderbar im MP nix. Warum, Addaction wird Lokal zum Clienten ausgeführt. Allerdings möchte Playmove das das Kommando lokal zum Besitzer ausgeführt wird, also meistens der Server.

wolkenstuermer 17.01.2018 14:08

- addAction ist global / lokal
- createVehicle global / global
- setPos global / global

Das würde dann ja bedeuten, dass er die Scheibe für alle sichtbar erzeugt und diese dann auch für alle sichtbar verschiebt, und das Ganze nur einmal macht (weil es durch AddAction ausgelöst wird). Richtig?

wolkenstuermer 17.01.2018 17:07

Wie kann ich denn einem frisch erzeugtem Objekt eine globale Variable zuweisen, die in einer lokalen Variable gespeichert ist?

Ich bräuchte sowas:

_varName = globVar;
_trg = "classname" createVehicle _pos;
_varName = _trg;

Sinn der Sache: Ich würde dem frisch erzeugten Objekt gerne eine globale Variable (bzw. einen Variablen-Namen) verpassen, damit ich sie in anderen Skripten ansprechen kann (z.B. das gerade erzeugte Objekt wieder löschen).

Dabei will ich das Skript aber mehrmals nutzen können (um z.B. mehrere Scheiben zu spawnen) - daher scheidet eine globale Variable für alles aus. Vielmehr müsste ich im Funktionsaufruf einen Parameter übergeben, wie die Scheibe heißt, damit ich sie dann ansprechen kann.

Oder ist das wieder viel zu kompliziert gedacht?

Ziel:

- In einem Laptop kann ich pro Schienensystem eine Scheibe spawnen
- Mit einem Trigger (oder weiterem Befehl im Laptop) kann ich sie bewegen
- Mit noch einem Befehl/Trigger kann ich die Scheibe wieder löschen

Das Ganze soll dann z.B. für ein dutzend Scheiben auf dem Platz funktionieren.

wolkenstuermer 17.01.2018 17:24

Habs gefunden:

Code:

missionNamespace setVariable [_varName, _obj];

wolkenstuermer 19.01.2018 11:31

Also ich habe es jetzt soweit, dass auf dem Dedicated der Spieler, der die Aktion (Scheibenbewegung) auslöst, sieht, wie die Scheibe sich bewegt. Das funktioniert wie gewollt.

Problem: Andere Spieler sehen das Übliche: Die Scheibe ruckelt kurz und man sieht sie dann nur in 1-2 Zwischenschritten, wenn überhaupt, meist bei A und B.

Ich schätze mal, dass das schwer daran liegt, dass der AddAction lokal ausgeführt wird. Aber auch RemoteExec bringt momentan keine Abhilfe, wobei ich bei den ganzen mehrfach verschachtelten Lokalitäten langsam anfange, den Überblick zu verlieren :zahn:

Ich habe folgende Befehle:
- createVehicle (global)
- setPos (global / global)
- getPos (global)

die über AddAction (global / lokal) aufgerufen werden.

Damit nun alle Spieler alles sehen und für alle das Gleiche abläuft, bräuchte ich ja mehr oder minder einen Aufruf, der Folgendes tut:

- auf dem Server das Skript starten und das Ergebnis auf jedem Client anzeigen

Denn die Erzeugung und Bewegung sind ja global, sprich: ALLE sehen das Ergebnis, also darf nur eine Maschine die Funktion aufrufen, oder wie muss ich mir das vorstellen?

Sinngemäß wäre das dann der Aufruf im AddAction (lokal zu einem Client eines Spielers):

Code:

object addAction ["Target create and move", "[params] remoteExec ['fnc', 2, true];", "true", 5, false, ""];
Nur klappt das leider nicht wie gewünscht.

Wo liegt denn da der Denkfehler?

burns 19.01.2018 14:16

Ich sehe Ähnlichkeit zur Tontaubenmission die zuerst in ArmA2 super aufm Dedi funktionierte, bis irgendein Patch genau das daraus gemacht hat was du schilderst, nämlich das die Tonscheiben plötzlich in größeren Schritten umherflogen.

Das war der Tontaubenwerfer aus der 1. A2 Kampagnenmission, stand iwo aufm Träger rum. Liess sich einfach rüberkopieren wenn ich nicht spinne, musste nix dran gebastelt werden für die MP Mission.


Möglicherweise ist die ganze Funktion umgerissen worden, wäre ja leider keine Neuheit.

Buliwyf 19.01.2018 17:39

Ich bin ja nun auch schon länger nicht mehr im ArmA-Geschäft, aber ich habe in Erinnerung, das selbst Helikopter übelste Gummibandeffekte auf dedizierten Servern hatten... und da soll jetzt eine Zielscheibe sauber für alle Clients sichtbar moven? Hat irgendwie was vom Glauben an den Weihnachtsmann... :D

Pfandgiraffe 19.01.2018 21:26

Eine Beispielmission würde helfen zu helfen.

Grüße


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