HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Script nur auf dem Server bzw. Client ausführen ! (https://hx3.de/editing-scripting-167/script-nur-server-bzw-client-ausfuehren-19285/)

N939 13.07.2010 13:01

Script nur auf dem Server bzw. Client ausführen !
 
Hi Jungs,
ich brauche mal wieder eure Hilfe !
Es geht um die Sache Scripte nur auf dem Server bzw. nur auf dem Client (also auf allen Rechnern) auszuführen.

Ich will es an einem Beispiel erklären !
Ich habe eine Mission mit zufällig ausgewählten Missionen wenn ich nun meine Mission starte dann hat jeder Spieler ein anderes Missionsziel, das hängt dann warscheinlich damit zusammen, dass jeder dieses Script ausführt und somit jeder eine andere Zufallsvariable hat !
Danach wird das Briefing ausgeführt in dem geprüft wird welche Mission aktiv ist
Code:

if (zone1_m1_activated) then {...};
So, wie schaffe ich es, dass ich die Zufallsauswahl nur über den Server laufen lasse und das Briefing dann aber wieder auf jedem rechner ausführe ?

Hoffe ist nicht zu kompliziert :stupid:

Gruß
Max

Cyborg11 13.07.2010 13:05

So gehts:

Code:

If (isServer) then {...};  // wird nur auf dem Server ausgeführt
Code:

If (!isServer) then {...}; // wird nur auf den Clients ausgeführt
Code:

If (isDedicated) then {...}; // wird nur auf einem Dedicated Server ausgeführt
Code:

If (isMultiplayer) then {...}; // wird nur im MP ausgeführt
Code:

If (!isMultiplayer) then {...}; // wird nur im SP ausgeführt

N939 13.07.2010 13:15

Hey Cyborg suuper schnell ! :D

Danke funktioniert !
Noch 2 Fragen:- Wie ist das mit publicVariable muss ich den Befehl auf Server oder auf Client Seite ausführen oder ist das egal ?

- Was ist der Unterschied zwischen isDedicated und isServer, wann nehm ich was ?

Gruß
Max

Pfandgiraffe 13.07.2010 13:59

wer eine publicvariable ausführt ist eigentlich egal, es sollte i.d.r. aber der server sein.



unterschied:



wenn du ein spiel selber im mp hostest werden bei...

isServer - die befehle von dir als host (server) ausgeführt
isDedicated - die befehle bei niemandem mehr ausgeführt


wenn das spiel auf einem dedicated gehostet ist...

werden sowohl als auch auf dem dedi-server ausgeführt

Cyborg11 13.07.2010 16:25

Wenn du ingame ein Spiel hostest, dann bist du als Host Server und Client zugleich :)
Also ist in dem Fall isServer und !isServer true.

Einen Dedicated Server kannst du über die arma2OAserver.exe starten ;)
Dort ist isServer und isDedicated true.

publicVariable kannst du auf jedem Client und auf dem Server verwenden.
Die Clients / der Server übertragen dann die Variable im Netzwerk auf alle anderen PCs.

Und generell ein Tipp: Auf einem Dedicated Server existiert kein player Objekt! ;)

N939 13.07.2010 18:33

Jo hab nen Dedi am laufen !
Vielen dank Jungs :daumen:
Habt mir sehr geholfen jetzt blick ich des mit der Lokalität auch mal :p

Gruß
Max

N939 19.07.2010 13:36

No ne Frage:

Darf ich in einem Skript, dass nur auf dem Server ausgeführt wird, nur globale Variablen verwenden ?

Gruß
Max

.kju 19.07.2010 13:49

Das hat nichts miteinander zu tun.

Globale Variablen sind überfall verfügbar auf eine Instanz (Client X oder am Server).
Lokale Variable sind nur innerhalb ihres Kontexts (Scopes).

Am Besten lies ma bei Wikipedia/einem Buch zu Programmieren n Kapitel zu dem Thema.

Xeno 19.07.2010 16:02

Zitat:

Zitat von Cyborg11 (Beitrag 321899)
Wenn du ingame ein Spiel hostest, dann bist du als Host Server und Client zugleich :)
Also ist in dem Fall isServer und !isServer true.

*deleted*

Xeno

NumPad 20.07.2010 08:46

Das ist ja nett beschrieben. Danke :daumen:

Mich würde nur mal interessieren, was wo ausgeführt werden muss?

Also - Effekte werden lokal oder auf dem Server oder überall erstellt?
Was ist mit Einheiten und Objekten? Erstelle ich die nur auf dem Server,
auf jedem Client oder auch überall? Ich weiß, dass es den Befehl creatVehicleLocal gibt, aber wieso darf es nicht mit createVehicle auf
allen erstellt werden?

Gibt es da eine allgemeine Regel, wo was erstellt werden muss, soll, darf?

Und - wann muss ich den Befehl publicVariable verwenden?

Alles so verwirrend :confused:

Xeno 20.07.2010 09:12

*deleted*

Xeno

NumPad 20.07.2010 09:22

Ok, ich glaube das habe ich jetzt verstanden. Danke Xeno :)

Wenn ich aber jetzt eine GBU mit einem Random erstelle, würde die GBU ja auf jedem Client an anderer Stelle erzeugt werden. Dazu müsste ich doch den Randomwert erst auf dem Server errechnen lassen und dann an die Clients verteilen oder?

Muss ich sonst noch irgendwas wissen, um eine funktionell einwandfreie MP-Mission zu erstellen? Wie ist das mit den Missionszielen im MP?
Das hat sich doch auch alles verändert.

N939 20.07.2010 13:01

Zitat:

Das hat nichts miteinander zu tun.

Globale Variablen sind überfall verfügbar auf eine Instanz (Client X oder am Server).
Lokale Variable sind nur innerhalb ihres Kontexts (Scopes).

Am Besten lies ma bei Wikipedia/einem Buch zu Programmieren n Kapitel zu dem Thema.
So ein blutiger Anfänger bin ich dann auch nicht :D hab ja schon einiges gemacht.
Ich muss bloß jetzt gerade richtig mit dem isServer command arbeiten und ich hab so das Gefühl, dass der nur funktioniert, wenn innerhalb des isServer bereichs nur globale Variablen vorkommen !

PS: Was globale vars sind weiß ich ;)

Noch etwas: kommt z.B.
Zitat:

player sideChat "...."
wenn es auf dem Server ausgeführt wird beim Client an ?

Gruß
Max

Xeno 20.07.2010 13:26

*deleted*

Xeno

N939 20.07.2010 14:52

Zitat:

Zitat von Xeno (Beitrag 323256)
*deleted*

das heißt, Stichwort
Zitat:

private []
oder ?

Cyborg11 20.07.2010 20:22

Richtig, denn dann ist die lokale Variable auch im Mainscope definiert, obwohl du sie vllt. erst in einem anderen Scope definieren würdest. :daumen:

N939 21.07.2010 16:56

Also ich werd langsam verrückt ! :stupid:

Hier mein Code zum auswählen einer Zufälligen Mission:
Zitat:

/* (c) by Max */

if (isServer) then
{

// SELECT RANDOM MISSION =======================================

_count = (count zone1_missions) - 1;
_rand = random _count;
_round = round _rand;
select = zone1_missions select _round;
publicVariable "select";
};
Aber der wählt egal wie ichs probier ger keine random Mission aus und wenn ich die Veriablen abfrage kommt nur "any" zurück !

Wahrscheinlich überseh ich bloß wieder was vom stundenlangen anstarren dieses kleinen Codeschnipsels :D

Hoffe ihr seht da mehr !

PS: zone1_missions = array

Cyborg11 21.07.2010 17:27

Zeig mal wie auf dem Client die Missionen ausgewählt werden.
Könnte sein, dass zu diesem Zeitpunkt deine Variable select noch gar nicht zugewiesen ist.
Das heißt, dass die Clients schneller sind als der Server. :D

Probier mal das bei den Clients ins Skript zuschreiben:
Code:

WaitUntil {!isNil "select"};

Xeno 21.07.2010 18:00

*deleted*

Xeno

.kju 21.07.2010 18:23

Select wäre ein sehr schlechter Variablename.
Das ist ein Systemkommando.

Deshalb immer globable Variable mit deinem Tag versehen:
Zitat:

MyTag_Select


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