PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Script Vereinfachung, wie angehen?


Sajiki
07.09.2017, 18:45
Hallo Leute,

ich bräuchte da mal einen Tipp von euch.

Folgendes:

Ich habe eine Grund Datei in mein Script durch läuft. Nun nutze ich eine weitere die mit #include hinzugefügt wird und Arrys enthaltet.

In meiner Grund Datei habe ich ein Switch laufen und in diesem Switch so einen Code:

if (_gewand == "mtp") then {_arry1 = _aC1 select 0; _arry2 = _aC1 select 1; _arry3 = _aC1 select 2; _arry4 = _aC1 select 3; _arry5 = _aC1 select 4; _arry6 = _aC1 select 5;};
if (_gewand == "wtp") then {_arry1 = _aC1 select 6; _arry2 = _aC1 select 7; _arry3 = _aC1 select 8; _arry4 = _aC1 select 9; _arry5 = _aC1 select 10; _arry6 = _aC1 select 11;};
if (_gewand == "jtp") then {_arry1 = _aC1 select 12; _arry2 = _aC1 select 13; _arry3 = _aC1 select 14; _arry4 = _aC1 select 15; _arry5 = _aC1 select 16; _arry6 = _aC1 select 17;};
if (_gewand == "tda") then {_arry1 = _aC1 select 18; _arry2 = _aC1 select 19; _arry3 = _aC1 select 20; _arry4 = _aC1 select 21; _arry5 = _aC1 select 22; _arry6 = _aC1 select 23;};

Am Ende vom Case läuft das dann so ab:

player forceAddUniform _arry1;
player addVest _arry2;
player addHeadgear _arry3;
player addBackpack _arry4;
player addGoggles _arry5;
player linkItem _arry6;


Meine Überlegung nun war ob man den oberen Code nicht vereinfachen kann? Also das man im case die variable _aC1 ändert und später unten ausgibt?

In etwa so im case:
_v = format ["_a%1", _player];

und danach unten in etwa so:
if (_gewand == "mtp") then {_arry1 = _v select 0; _arry2 = _v select 1; _arry3 = _v select 2; _arry4 = _v select 3; _arry5 = _v select 4; _arry6 = _v select 5;};
if (_gewand == "wtp") then {_arry1 = _v select 6; _arry2 = _v select 7; _arry3 = _v select 8; _arry4 = _v select 9; _arry5 = _v select 10; _arry6 = _v select 11;};
if (_gewand == "jtp") then {_arry1 = _v select 12; _arry2 = _v select 13; _arry3 = _v select 14; _arry4 = _v select 15; _arry5 = _v select 16; _arry6 = _v select 17;};
if (_gewand == "tda") then {_arry1 = _v select 18; _arry2 = _v select 19; _arry3 = _v select 20; _arry4 = _v select 21; _arry5 = _v select 22; _arry6 = _v select 23;};

Mein Problem das er dann nicht den Inhalt mit übernimmt wie ich es gerne hätte, gibt es da eine Möglichkeit das select von meinem Arry dort rein zu tragen?

Mein Gedanke war das ich mir das ganze im Case vereinfachen würde falls mal was dazu kommt oder änderungen kommen.

Danke schon mal für eure Hilfe und Gedanken Gänge

Mfg
Sajiki

Drunken Officer
09.09.2017, 16:42
Alles arg kompliziert.

Was soll am Ende rauskommen und was sind die Startparameter?

Sajiki
10.09.2017, 18:00
Hi danke erstmal!

Also es startet ja mit einem Switch:

switch (_player) do {
case c1: {
if (_debug) then {hint "FTL C1"; sleep 2;};
if (_gewand == "mtp") then {_arry1 = _aC1 select 0; _arry2 = _aC1 select 1; _arry3 = _aC1 select 2; _arry4 = _aC1 select 3; _arry5 = _aC1 select 4; _arry6 = _aC1 select 5;};
if (_gewand == "wtp") then {_arry1 = _aC1 select 6; _arry2 = _aC1 select 7; _arry3 = _aC1 select 8; _arry4 = _aC1 select 9; _arry5 = _aC1 select 10; _arry6 = _aC1 select 11;};
if (_gewand == "jtp") then {_arry1 = _aC1 select 12; _arry2 = _aC1 select 13; _arry3 = _aC1 select 14; _arry4 = _aC1 select 15; _arry5 = _aC1 select 16; _arry6 = _aC1 select 17;};
if (_gewand == "tda") then {_arry1 = _aC1 select 18; _arry2 = _aC1 select 19; _arry3 = _aC1 select 20; _arry4 = _aC1 select 21; _arry5 = _aC1 select 22; _arry6 = _aC1 select 23;};
};
case c2: {

c1, c2, usw sind meine Spieler also Unit Einheiten.

die Variable _gewand wird über einen Button gesetzt und dem entsprechend MTP, WTP, usw.

_aC1 ist in einer eigenen Datei als Arry gesetzt wo die Ausrüstung definiert wird die dann vergeben werden soll. Das sieht so aus:

_aC1 = [
//MTP
"MTP_V3_Neck",
"milgp_v_marciras_teamleader_belt_RGR",
"milgp_h_airframe_02_RGR_hexagon",
"8th_Falcon_FTL_Green",
"",
"",
//WTP
"WTP_V1_Neck",
"milgp_v_marciras_tl_cbelt_WTP",
"OpsC_WTP_v1",
"8th_Kitbag_FTL_WTP",
"",
"",
//JTP
"JTP_V1_Neck",
"milgp_v_marciras_teamleader_belt_RGR",
"milgp_h_airframe_02_RGR_hexagon",
"8th_Falcon_FTL_JTP",
"",
"",
//TDA
"U_B_CombatUniform_mcam",
"V_Rangemaster_belt",
"TITAN_Beret_CPT",
"",
"G_Tactical_Black",
""
];

Und zum schluss füge ich das dann hinzu:

player forceAddUniform _arry1;
player addVest _arry2;
player addHeadgear _arry3;
player addBackpack _arry4;
player addGoggles _arry5;
player linkItem _arry6;

So bekommt jeder Spieler die Ausrüstung die ich vorher definiert habe. Nur würde mich es interessieren ob es auch eine einfachere Möglichkeit dafür gibt was es sicher gibt nur bin ich nicht so gut genug ^^

Ne Idee?

Mfg
Sajiki

Drunken Officer
11.09.2017, 18:57
ja, gibt es.
Wenn du von Button schreibst, handelt es sich bestimmt um einen Dialog. Der läuft lokal.

Ich würde mir aus der onload heraus MTP, WTP, JTP usw. Blöcke erstellen.

also

WTP =
{
_this forceUniform "...";
_this addWeapon "..";
};

MTP = { ..... };
WTP = {... };

Dein Ausrüstungs-Loadout kannst du dann so aufrufen (im Button definiert [hier der MTP Button]): action = "player spawn MTP";
Wird der Dialog geschlossen kannst du die Variablen wieder löschen, indem du diese auf NIL setzt

Weißt du ungefähr was ich meine?

Sajiki
12.09.2017, 06:39
Nicht 100% aber ein wenig verstehe ich dich schon.

Ja ein Dialog existiert mit dem setze ich als erstes nur die Uniformen und schalte dann weitere Button frei die für die Ausrüstung zuständig sind.

Mit den Uniformen Buttons liefere ich gerade eben das "MTP" usw mit.


Das mit den Blöcken verstehe ich schon aber hätte ich da nicht das Problem das ich dann die importierte Datei nicht mehr verwenden kann?

Beispiel:

WTP =
{
_this forceUniform _arry1;
_this addWeapon _arry2;
usw.
};

Dann müsste ich ja trotzdem in der case die arry's definieren.

Ich glaub ich habs doch nicht so ganz kapiert xD

Drunken Officer
13.09.2017, 09:03
du nimmst keine Arrays, sondern gibst in den Blöcken gleich das entsprechende Teil an.
Der Array würde Sinn machen, wenn zufällig etwas aus diesem genommen wird oder mehrere Zugriffe auf diesen erfolgen.

Du nimmst packst alles rein, und läßt das einzeln die Sachen zuweisen. Da kann man es auch gleich direkt zuweisen.