PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : JIP - Ausrüstung


killshot
18.01.2014, 22:43
Moin Leute!

Ich habe folgendes Problem:

Es sollten alle Einheiten komplett ohne Klamotten, Waffen und Ausrüstung starten und ein vorgefertigtes Loadout via Actionmenüklick zugeteilt bekommen. Von daher wurde im Editor in jeder Initzeile der playableUnits der dementsprechende Code (removeHeadGear, removeGoggles, removeAllAssignedItems, removeBackpack, removeVest, removeUniform) eingetragen und man ist danach dann zu seinem "Spind" gelaufen und hat sich seine Komplettmontur abgeholt. Dabei kam dann das Problem auf, dass bei jedem JoinInProgress die Bekleidung der Spieler entfernt wurde, alle halt wieder nur in Boxershorts und Unterhemd dastanden.

Wie hier auf dem Feedbacktracker schon reportet wurde.
0015779: Losing clothes as Blufor on Multiplayer. - Arma 3 Feedback Tracker (http://feedback.arma3.com/view.php?id=15779)

Ich habe jetzt die Initialisierungszeilen der Einheiten alle geleert und starte in der init.sqf ein Script mit -> gearless.sqf:

If (local player) then {

{player removeWeapon _x} forEach (weapons player);
removeAllAssignedItems player;
removeAllContainers player;
removeHeadgear player;
removeGoggles player;

};Das Gute vorweg: anscheinend und nach mehrmaligem Testen ist das Problem mit dem Klamottenverlieren dadurch behoben. Weder eine Einheit, die von Anfang an komplett angezogen ist, noch eine, die sich ein Komplettloadout übers Actionmenü zaubert, verliert bei einem JIP ihre Klamotten.

Das Schlechte ist leider noch, dass nur der erste Player, der auf den Server connectet "nackt" spawnt. Bei allen nachfolgenden wird das Script vielleicht nicht ausgeführt!?

Kurz gesagt: ich möchte alle playableUnits "nackt" starten lassen und gleichzeitig unterbinden, dass sie bei einem JoinInProgress ihre Klamotten verlieren!

Danke für eure Hilfe und Gruß

b0rnkilla
20.01.2014, 11:22
Probier mal:
//init.sqf:
if (!isServer) then
{
execVM "gearless.sqf";
};
//gearless.sqf:
{
removeAllWeapons _x;
removeallAssignedItems _x;
removeAllContainers _x;
removeHeadgear _x;
removeGoggles _x;
} forEach playableUnits;


und berichte bitte mal wie sich das o.g. auf ein JIP auswirkt. :daumen:

killshot
20.01.2014, 14:28
Ok, werds nachher mal probieren, danke schonmal soweit!

Im Moment sind wir auf dem Stand, dass wir die gearless.sqf in der Initialisierungszeile jeder im Editor gesetzten playableUnit über nul = [this] execVM "gearless.sqf"; starten.

Die gearless.sqf sieht jetzt bei uns gerade folgendermaßen aus:


private ["_LocalPlayer","_x"];

_LocalPlayer = _this select 0;
waitUntil {!isNull _LocalPlayer};

if (local _LocalPlayer) then {
{_LocalPlayer removeWeapon _x} forEach (weapons _LocalPlayer);
removeAllAssignedItems _LocalPlayer;
removeAllContainers _LocalPlayer;
removeHeadgear _LocalPlayer;
removeGoggles _LocalPlayer;

};


Das hat eigentlich genau den Effekt gehabt, den wir wollten. Jede Einheit wird "nackt" gespawnt zu Beginn und alle bleiben angezogen, wenn jemand nachjoint. Allerdings hatten wir immer nur zu zweit und nur JoinInProgress getestet.

Gestern sind wir dann Mal gleichzeitig connectet und da wurde das Script dann nur für denjenigen, der als erstes connectet hat ausgeführt, der nachfolgende Spieler war angezogen und bewaffnet, etc.

Werden dann Mal die Variante von b0rnkilla testen, gucken was passiert.

Gruß

killshot
20.01.2014, 15:31
Hier die Lösung falls es noch jemand benötigen sollte:

gearless.sqf
private ["_LocalPlayer","_x"];

_LocalPlayer = _this select 0;
waitUntil {!isNull _LocalPlayer};

{_LocalPlayer removeWeapon _x} forEach (weapons _LocalPlayer);
{_LocalPlayer removeMagazine _x} forEach (magazines _LocalPlayer);
removeAllAssignedItems _LocalPlayer;
removeAllContainers _LocalPlayer;

if (local _LocalPlayer) then {
removeHeadgear _LocalPlayer;
removeGoggles _LocalPlayer;
};

JanIs
22.01.2014, 08:51
Danke für die Info, ist sicherlich für den einen oder anderen brauchbar.