HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Waffenkiste mit zufälligen Inhalt (https://hx3.de/editing-scripting-167/waffenkiste-zufaelligen-inhalt-21306/)

spaccy 13.02.2012 23:30

Waffenkiste mit zufälligen Inhalt
 
Hallo,

ich möchte gerne Zufallskisten mit in eine Mission bauen und habe diesen Link gefunden:

Random weapons crate on MP

Nur leider funktioniert das bei mir nicht, es wird immer nur die erste Pistole created (M9). Kann mir da jemand mal bitte helfen?

Gruß
spaccy

Vienna 14.02.2012 08:06

Soll das für Einzel- oder Mehrspielermodus sein. Dann musst du deine Codezeilen angeben, um den Fehler finden zu können.

spaccy 14.02.2012 10:40

Sorry, ist für Multiplayer gedacht, ich versuch das aber überhaupt erstmal im Editor zum laufen zu kriegen.

spaccy 14.02.2012 20:18

Den Code hab ich 1 zu 1 vom Link benutzt, keine Veränderung. Funktioniert aber nicht.

Vienna 15.02.2012 10:15

Ganz klar ist der Code nicht. Aber du willst das ja eigentlich im Editor anlegen.

Hier ein Beispiel wie du das mit 3 Auslösern verwirklichen kannst. Dabei haben alle Spieler die selbe Waffe in der Munikiste.

Einmalauslöser
Bedingung: true
Bei Akt.:
xplane = -1;
handguns = ["M9","Colt1911","glock17_EP1","revolver_EP1","UZI_ EP1"];
mags = ["15Rnd_9x19_M9","7Rnd_45ACP_1911","17Rnd_9x19_gloc k17","6Rnd_45ACP","30Rnd_9x19_UZI"];

Einmalauslöser
Bedingung: xplane > -1
Bei Akt.:
clearweaponcargo MunikistenName;
clearmagazinecargo MunikistenName;
MunikistenName addweaponcargo [handguns select xplane, 1];
MunikistenName addmagazinecargo [mags select xplane, 10];

Einmalauslöser (auf den spricht nur der Server an)
Zeitverzögerung: 3mal 1 Sekunde
Bedingung: isServer
Bei Akt.:
xplane = floor random (count handguns);
publicVariable "xplane";

spaccy 16.02.2012 17:27

Danke Vienna für deine Mühe :daumen:, funktioniert wunderbar.

Ich hab das ganze jetzt in eine SQF gepackt:

INIT.sqf:
Code:

xplane = -1;
handguns = ["M9","Colt1911","glock17_EP1","revolver_EP1","UZI_EP1"];
mags = ["15Rnd_9x19_M9","7Rnd_45ACP_1911","17Rnd_9x19_glock17","6Rnd_45ACP","30Rnd_9x19_UZI"];


"Zufallskiste.sqf":
Code:

_box = _this select 0;
clearweaponcargo _box;
clearmagazinecargo _box;

if (!isserver) exitwith {};

xplane = floor random (count handguns);
publicVariable "xplane";

_box addweaponcargo [handguns select xplane, 1];
_box addmagazinecargo [mags select xplane, 10];

Muss das ganze noch im Multiplayer testen, bin aber zuversichtlich :ugly:.

Vienna 16.02.2012 20:05

So wie du das meinst wird nur der Server was in der Kiste haben.

init.sqf
Code:

[NameMunikiste] execVM "Zufallskiste.sqf";
Zufallskiste.sqf
Code:

//Skript Zufallskiste.sqf für Server und Clients
//
//Aufruf in der Init.sqf: [NameMunikiste] execVM "Zufallskiste.sqf";

//Lokale Variable
private ["_box","_handguns","_mags"];

//Parameter übernehmen
_box = _this select 0;

//Variable Initialisieren

xplane = -1; //Publike Variable

//Waffen- und Munitionsliste
_handguns = ["M9","Colt1911","glock17_EP1","revolver_EP1","UZI_EP1"];
_mags    = ["15Rnd_9x19_M9","7Rnd_45ACP_1911","17Rnd_9x19_glock17","6Rnd_45ACP","30Rnd_9x19_UZI"];

//Munikiste leeren
clearweaponcargo  _box;
clearmagazinecargo _box;

//Server bestimmt zufällig die Waffe
if (isserver) then
 {
  sleep 5; //allgemeine Initialisierung abwarten 
  xplane = floor random(count _handguns);
  publicVariable "xplane";
 };

//Warten bis Server die Waffe bestimmt hat
waitUntil {xplane > -1};

_box addweaponcargo  [_handguns select xplane,  1];
_box addmagazinecargo [_mags    select xplane, 10];


Pfandgiraffe 16.02.2012 21:31

Er kann auch sein eigenes Script nehmen und muss nur addmagazionecargo & addweapon cargo durch addmagazinecargoglobal & addweaponcargoglobal ersetzen. Ist sogar etwas eleganter und stellt selben Content für alle Spieler sicher.


Grüße

Vienna 16.02.2012 21:45

Bei den Befehlen war ich mir nicht sicher ob sie auch für Munikisten sind. Weiters benötigen sie Arma2 OA.

spaccy 16.02.2012 22:50

Also Arma 2 oa ist vorhanden, ich dachte ich weise die Werte für die Kisten an die Clients schon mit publicVariable zu.

Vienna könntest du bitte nochmal diesen Private Befehl erklären, ich kapier die Funtion trotz Bohemia-Wiki nicht wirklich.

Vienna 17.02.2012 14:46

Wenn man eine Globale-Variable auf einem PC ändert, dann gilt das nur für diesen PC. Mit publicVariable überträgt man den Inhalt dieser Variablen dann zu den anderen PCs.

Du hast mit publicVariable nur den Wert der "Schalter-Variablen" xplane übertragen.

Mach die Munikiste in der Initialisierungszeile der Kiste so leer: clearweaponcargo this; clearmagazinecargo this;

Dann brauchst du keine globale Variable und den Befehl publicVariable, wenn du die Kiste mit addWeaponCargoGlobal und addMagazineCargoGlobal füllst. Das Skript läuft dann nur beim Server.

Code:

//Skript Zufallskiste.sqf (Arma2 OA)
//
//Munikiste leeren in deren Initalisierungszeile der Kiste mit:
//  clearweaponcargo this; clearmagazinecargo this;
//
//Aufruf in der Init.sqf: [NameMunikiste] execVM "Zufallskiste.sqf";

if (!isserver) exitwith {}; //Skript nur für den Server

//Lokale Variable
private ["_box","_handguns","_mags","_wahl"];

//Parameter übernehmen
_box = _this select 0;

//Variable Initialisieren

//Waffen- und Munitionsliste
_handguns = ["M9","Colt1911","glock17_EP1","revolver_EP1","UZI_EP1"];
_mags    = ["15Rnd_9x19_M9","7Rnd_45ACP_1911","17Rnd_9x19_glock17","6Rnd_45ACP","30Rnd_9x19_UZI"];

sleep 5; //allgemeine Initialisierung abwarten 

_wahl = floor random(count _handguns); //Waffe wählen

// Kiste global mit Waffe und Munition bestücken
_box addWeaponCargoGlobal  [_handguns select _wahl,  1];
_box addMagazineCargoGlobal [_mags    select _wahl, 10];

Die letzten beiden Zeilen verwenden die neuen Befehle, welche die Waffe und Munition auf allen PCs in die Munikiste hinzufügen.

spaccy 17.02.2012 14:58

Warum wartest du auf die Initialisierung eigentlich 5 sek?

Vienna 17.02.2012 16:31

Das betrifft nur Skripte welche Daten zu den anderen PCs senden. Wenn der Server den neuen Inhalt sendet und ein Client noch nicht mit seiner Initialisierung fertig ist, dann wird er die Sendung nicht erhalten. Bei sehr schlechter Internetverbindung könnten sogar 5 Sekunden zu gering sein.

Darum ist ein "Vorspann" (z.B. eine Kamerafahrt über die eigene Basis) beim Missionsstart anzuraten, und solche Skripte erst kurz vor Beendigung des Vorspanns starten. Dann kannst du in diesen Skripten so eine Initialisierungs-Pause weglassen.

spaccy 17.02.2012 18:35

Wenns ein wenig länger dauert, ist es nicht so schlimm. Diese Zufallskisten erreicht die Spielmannschaft erst im späteren Spielverlauf.

Danke nochmal für deinen Einsatz!

>Ich jetzt glücklich :ugly:<

TeTeT 18.02.2012 14:35

Zitat:

Zitat von Vienna (Beitrag 405581)
Das betrifft nur Skripte welche Daten zu den anderen PCs senden. Wenn der Server den neuen Inhalt sendet und ein Client noch nicht mit seiner Initialisierung fertig ist, dann wird er die Sendung nicht erhalten. Bei sehr schlechter Internetverbindung könnten sogar 5 Sekunden zu gering sein.

Macht es Sinn hier mit 'waitUntil' auf das Setzen von xplane bei den Clients zu warten?

Vienna 18.02.2012 15:38

Das ist bei der Version ohne die globalen Befehle notwendig. Dort soll ja der Server die Waffe bestimmen und in xplane ist der Index für die Arrays auf den die Clients warten. Andernfalls hätten nicht alle die selbe Waffe in der Kisten.

Bei der Version mit den globalen Befehlen ist die publike Variable xplane nicht notwendig.

-PSY- 16.10.2012 23:55

Servus ich bin neu hier und habe diesen thread hier gefunden ...
ich bin momentan dabei eine map für dayz mit RMod zu basteln, will dort ein paar boxen verstecken und diese befüllen (was auch bis jetzt super funktioniert hat)
läuft bist jetzt auch alles super bis auf das ich halt die kisten zufällig füllen will, das funktioniert irgendwie nicht mit dem script hier (vieleicht mache ich einen fehler)

mein vorgehen bisher :

*Zufallsskiste.sqf erstellt inhalt aus dem post von Vienna vom 17.02.2012 15:46
*[NameMunikiste] execVM "Zufallskiste.sqf" in init.sqf eingefügt
*im map editor [this,1] execVM "Zufallskiste.sqf" bei denn boxen eingefügt.

würde gehn wissen wo mein feher ist,

Vielen dank im vorraus für eure hilfe

-PSY- 17.10.2012 12:57

so hab es nun so halb zumindest zum laufen bekommen !

jetzt gibt es nur noch ein fehler,
kisten die z.b. "this setpos [5501.6597, 1906.6729, -0.43265706];" in der ini zeile haben reagieren dannach nicht mehr auf das script ...
wie kann man das lösen?

(die positions angaben sind weil manche kisten auf gebäuden stehen o.ä.)

Vienna 17.10.2012 15:46

Da scheint in der Initialisierungszeile ein "Befehlsteil" falsch zu sein.

Teil1; Teil2; Teil3; usw.

Gib einmal die einzelnen "Teile" allein ein und schau welcher nicht ausgeführt wird.

-PSY- 17.10.2012 17:39

so danke für deine antwort hatte damit zu tun das irgendwie durch denn 3d editor die boxen immer 3 mal übereinander lagen ...

so nun nen neuen problem ... ich kann keine waffen aus der kiste nehmen?! ... woran könnte das liegen?


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