06.05.2014, 13:55 | #1 (permalink) |
Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
|
Ausrüstung im Multiplayer zuweisen geht nicht
Hallo zusammen
Aaaaah, ich dreh jetzt bald durch... In A2 konnte man die spielbaren Figuren für eine gehostete Coop noch per Initzeile ausrüsten. Mit Arma3 funktioniert das nicht mehr richtig. Ein paar Dinge (Items z.B.) kann man gar nicht global adden (der Editor verweigert das). Andere muss man! Alles was in den Rucksack muss, muss z.B. global added werden, sonst hat es der Spieler bei Missionsbeginn nicht drin. Und so weiter und so fort - extrem mühsam und eine Regel ist nicht zu erkennen! Ausserdem merkt man das ganze erst, wenn man ein MP-Spiel hostet mit mindestens einem Client. Testet man es als MP-Spiel, indem nur der Host teilnimmt, ist das Verhalten anders (was soll das denn bitte schön? Wie soll man da als Missionsbauer vernünftig testen können?) Beispiele gefällig (mir völlig unerklärliche)? Wenn ich den Spielbaren Figuren per simplem Init-Befehl ein Magazin gebe mit this addMagazine "Classname", dann funktioniert das nur sofern es in der Uniform Platz hat. Sobald es von der Engine in die Weste verschoben wird, ist es weg... jedenfalls beim Host und bei der KI. Die KI rennt dann sogar zur nächsten Waffenkiste, weil sie keine Munition mehr hat (ein Camp mit KI-Soldaten zu schmücken, die Wache stehen, kannst Du vergessen). Gut, sag ich mir: Dann machste halt this addMagazineGLOBAL "Classname". --> Jetzt bleibt die KI im Lager stehen und ich habe die Magazine.... aber mein Client nicht mehr... Ich sag' euch: Ich bin nah dran, den ganzen Sch..., ich meine das Missionen bauen aufzugeben. Wenn ich das nicht hinkriege, spiele ich wieder Guildwars2! Es kann doch nicht sein, das es einem die Entwickler so schwer machen, oder? Es gibt schliesslich nicht nur IT-Fachleute auf dieser Welt, die Missionen bauen wollen. Gut, gut, gut... wie sagt man? "Und bist Du nicht willig, so brauch' ich Gewalt". Mein neuster Ansatz wird so aussehen: Ich schreibe erstmal NICHTS in die Initzeile, von NIEMANDEM. Dann, wenn alle Spieler bereit sind und die Mission läuft, starte ich eine Reihe von Scripts z.B. mit Funkcode Alpha. Mit diesen Scripts werden dann sämtliche Einheiten (wo nötig) ab- und wieder ausgerüstet. Und damit diese SICHER DURCHGÄNGIG AUF ALLEN TEILNEHMERN (Client, Host und Hamster) ausgeführt werden, habe ich vor die Scripts so zu starten, dass sie auf jeder Maschine durchgeführt werden. Wenn's sein muss mehrfach, bis die blöde Ausrüstung auf Mann ist. Ich nehme dabei in Kauf, dass es... - Unter Umständen auf einer Maschine mehrfach ausgeführt wird - Unter Umständen eine Weile dauert, bis alles durch ist - die Spieler auf magische Weise nach Missionsbeginn Ausrüstung bekommen Die alles entscheidende Frage ist: Wie muss ich ein Script starten, dass es ÜBERALL (am besten mehrfach, für eine Dauer von ca. 20 Sekunden, verd%*// ¢|°¬#@@@¦§¬!!!!) und GANZ SICHER ausgeführt wird? @BIS: Warum macht euer Programm solch essentiellen Dinge nicht einfach grundsätzlich global? Geändert von Wolkenbeisser (06.05.2014 um 14:16 Uhr). |
06.05.2014, 17:41 | #2 (permalink) |
Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
|
Hier haben ein paar dasselbe Problem:
Added Uniform Disappears in Multiplayer - Page 3 Diese Posts hier melden genau mein Problem: 22 27 29 --> passiert bei mir aber auch, beim Start, wenn alle schon zu Beginn dabei sind. 34 35 --> Vermutlich eben, weil der KI Zeugs im Inventar fehlt! 54 Dann beginnen sie von functions zu reden, was ich nicht richtig verstehe... dann gehts wieder weiter mit den Posts... 72 82 85 Post 131 tönt nicht schlecht. Aber auch hier wieder die Rede von functions. Noch grösseres Problem: Habe keine Ahnung, wie ich diese Lösung abändern müsste, dass ich jeder Einheit, die einen Namen hat eine eigene Ausrüstung verpassen kann. 151 zerlegt die Lösung aus Post 131 zum Teil wieder.... Dann, Post 162 Dann post 168 mit komplett neuer Lösung, die nocht besser tönt (ich verstehe sie jedenfalls besser als die aus 131). Ich glaube ich probiere mal die Lösung aus Post 168. Es gibt da aber noch ein Problem. Die KI leidet auch, wenn man ihr custom loadout gibt. Offenbar fehlen die Magazine in deren Westen dann auch und sie verlanssen ihre Posten um sich aufzumunitionieren. Und 'attachTo' möchte ich für die KI in der freundlichen Basis nicht verwenden. Wie müsste ich die Lösung aus Post 168 umbauen, dass auch die KI ganz sicher für alle (Client und Host) alles hat, was ich ihr geben will? ...bin echt ein bisschen am Anschlag mit dieser Sache. Hach war das noch einfach in A2... |
06.05.2014, 20:18 | #3 (permalink) |
Registriert seit: 13.04.2003
Ort: Monerica
Alter: 41
Beiträge: 32.968
|
Weiss ja nicht obs in A3 helfen würde, aber der Xeno hatte mir für A2 vor langer Zeit ein Konstrukt für die init.sqf gebaut, womit alles zumindest annähernd ordentlich funktionierte/initialisierte ... bisschen blöd zu erklären wenn man keine Ahnung davon hat
vllt. kann Xeno was dazu sagen? |
06.05.2014, 22:32 | #4 (permalink) |
Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
|
Ok, ich habe mich wieder ein wenig beruhigt und versuche konkrete Lösungsansätze. Ich habe den im letzten Post erwähnten Ansatz getestet und leider hat der Client bei 9 von 10 Versuchen immer noch nicht die richtige Ausrüstung.
Das habe ich bisher: 1. Gehostete Coop für 8 Spieler 2. Acht Spielbare Einheiten (AL1 bis AL8) mit entweder dieser Init-Zeile: Code:
null = [this] execVM "inventar\inventar_AL1.sqf" Code:
temp = [this,Basisfahne] spawn {private "_time", _time = 60; while {_time > time} do {if (player == _this select 0) then {player setPos getPos (_this select 1); if (player distance Basisfahne < 10) then {_time = 0}}; sleep 1}}; null = [this] execVM "inventar\inventar_AL1.sqf"; 3. Acht verschiedene Scripts (inventar_AL1.sqf bis inventar_AL8.sqf), wobei z.B. die inventar_AL1.sqf so aussieht: Code:
// Füge in die Init-Zeile der zu bewaffnenden Einheit den nachfolgenden Code ein ('scriptname' muss aber Name des Scripts sein!) // null = [this] execVM "inventar\scriptname.sqf" // Nachfolgend der Code des Scripts, welches MP-Probleme mit Ausrüstung und 'join in progress' verhindern sollte // Nachtsichtbrille kann bei Bedarf mit _unit linkItem "NVGoggles" zugefügt werden (aber Rangefinder geht nicht) waitUntil {!isNull player}; _unit = _this select 0; if (local _unit) then { Removeuniform _unit; removeallcontainers _unit; removeAllWeapons _unit; removeGoggles _unit; removeHeadgear _unit; removeVest _unit; removeAllAssignedItems _unit; removebackpack _unit; _unit addUniform "U_B_CombatUniform_mcam"; _unit addHeadgear "H_MilCap_mcamo"; _unit addVest "V_PlateCarrier1_rgr"; _unit addBackpack "B_Kitbag_mcamo"; _unit linkItem "ItemMap"; _unit linkItem "ItemCompass"; _unit linkItem "ItemWatch"; _unit linkItem "ItemRadio"; _unit linkItem "ItemGPS"; _unit addMagazine "16Rnd_9x21_Mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addWeapon "arifle_MX_F"; _unit addWeapon "hgun_P07_F"; _unit addPrimaryWeaponItem "optic_aco"; _unit addItem "FirstAidKit"; _unit addItem "FirstAidKit"; _unit addItem "FirstAidKit"; _unit addItem "FirstAidKit"; _unit addItem "FirstAidKit"; _unit addMagazine "16Rnd_9x21_Mag"; _unit addMagazine "16Rnd_9x21_Mag"; _unit addMagazine "16Rnd_9x21_Mag"; _unit addMagazine "16Rnd_9x21_Mag"; _unit addMagazine "16Rnd_9x21_Mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "SmokeShellGreen"; _unit addMagazine "SmokeShellRed"; _unit addItem "Medikit"; _unit addItem "Rangefinder"; }; if(true) exitWith{}; Bei 10 Versuchen gehen mindestens 9 schief. Und zwar insofern, als dass die Clients die im Script enthaltene Ausrüstung nicht haben. Bei mir als Host funktioniert es immer. Die Frage: Was muss ich ändern, damit die Clients die Ausrüstung immer erhalten? Vielen Dank, jetzt schon für die geschätzte Hilfe. |
07.05.2014, 00:15 | #5 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Edit: Ich habe dem Skript wieder die Bedingung "if (local _unit) then ..." eingefügt, da es sonst nicht in der Initzeile aufrufbar ist.
Code:
// Füge in die Init-Zeile der zu bewaffnenden Einheit den nachfolgenden Code ein ('scriptname' muss aber Name des Scripts sein!) // null = [this] execVM "inventar\scriptname.sqf" // Nachfolgend der Code des Scripts, welches MP-Probleme mit Ausrüstung und 'join in progress' verhindern sollte // Nachtsichtbrille kann bei Bedarf mit _unit linkItem "NVGoggles" zugefügt werden (aber Rangefinder geht nicht) // Das sleep zu Beginn blockt das Skript bis die Initialisierung abgeschlossen ist !? sleep 0.1; waitUntil {!isNull player}; private "_unit"; _unit = _this select 0; if (local _unit) then { Removeuniform _unit; removeallcontainers _unit; removeAllWeapons _unit; removeGoggles _unit; removeHeadgear _unit; removeVest _unit; removeAllAssignedItems _unit; removebackpack _unit; _unit addUniform "U_B_CombatUniform_mcam"; _unit addHeadgear "H_MilCap_mcamo"; _unit addVest "V_PlateCarrier1_rgr"; _unit addBackpack "B_Kitbag_mcamo"; {_unit linkItem _x} forEach ["ItemMap","ItemCompass","ItemWatch","ItemRadio","ItemGPS"]; {_unit addItem _x} forEach {"Medikit","Rangefinder"}; for "_i" from 1 to 5 do {_unit addItem "FirstAidKit"}; _unit addMagazine ["16Rnd_9x21_Mag" , 6]; _unit addMagazine ["30Rnd_65x39_caseless_mag",10]; {_unit addMagazine _x} forEach ["SmokeShellGreen","SmokeShellRed"]; {_unit addWeapon _x} forEach ["arifle_MX_F","hgun_P07_F"]; _unit addPrimaryWeaponItem "optic_aco"; }; Geändert von Vienna (07.05.2014 um 23:23 Uhr). |
07.05.2014, 23:48 | #6 (permalink) |
Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
|
Hallo Vienna. ja, der Sleep-Befehl hat's gebracht. Wir haben heute zu viert die Mission etwa 10 x gestartet. Und immer war die Ausrüstung erfolgreich auf Mann.
Vielen dank für den Tipp... Ich denke, damit hat sich die Sache erledigt. Hier zur Sicherheit nochmals das Script, wie es bei mir jetzt funktioniert: Code:
// Füge in die Init-Zeile der zu bewaffnenden Einheit den nachfolgenden Code ein ('scriptname' muss aber Name des Scripts sein!) // null = [this] execVM "inventar\scriptname.sqf" // Nachfolgend der Code des Scripts, welches MP-Probleme mit Ausrüstung und 'join in progress' verhindern sollte // Nachtsichtbrille kann bei Bedarf mit _unit linkItem "NVGoggles" zugefügt werden (aber Rangefinder geht nicht) sleep 1; waitUntil {!isNull player}; _unit = _this select 0; if (local _unit) then { removeuniform _unit; removeallcontainers _unit; removeAllWeapons _unit; removeGoggles _unit; removeHeadgear _unit; removeVest _unit; removeAllAssignedItems _unit; removebackpack _unit; _unit addUniform "U_B_CombatUniform_mcam"; _unit addHeadgear "H_MilCap_mcamo"; _unit addVest "V_PlateCarrier1_rgr"; _unit addBackpack "B_Kitbag_mcamo"; _unit linkItem "ItemMap"; _unit linkItem "ItemCompass"; _unit linkItem "ItemWatch"; _unit linkItem "ItemRadio"; _unit linkItem "ItemGPS"; _unit addMagazine "16Rnd_9x21_Mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addWeapon "arifle_MX_F"; _unit addWeapon "hgun_P07_F"; _unit addPrimaryWeaponItem "optic_aco"; _unit addItem "FirstAidKit"; _unit addItem "FirstAidKit"; _unit addItem "FirstAidKit"; _unit addItem "FirstAidKit"; _unit addItem "FirstAidKit"; _unit addMagazine "16Rnd_9x21_Mag"; _unit addMagazine "16Rnd_9x21_Mag"; _unit addMagazine "16Rnd_9x21_Mag"; _unit addMagazine "16Rnd_9x21_Mag"; _unit addMagazine "16Rnd_9x21_Mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "30Rnd_65x39_caseless_mag"; _unit addMagazine "SmokeShellGreen"; _unit addMagazine "SmokeShellRed"; _unit addItem "Medikit"; _unit addItem "Rangefinder"; }; if(true) exitWith{}; |
08.05.2014, 10:02 | #7 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Damit hat sich wieder bestätigt, dass bestimmte Befehle nicht während der Initialisierungszeit für den Missionseinstieg ausgeführt werden dürfen.
Der sleep-Befehl stoppt offensichtlich das Skript (unabhängig der Zeiteinstellung!?) bis die Initialisierung abgeschlossen ist. Das kann man erforderlichen Falls auch bei unmittelbar beim Spielstart auslösenden Auslösern berücksichtigen, indem man deren Countdown auf 1 -1 -1 einstellt. |
08.05.2014, 10:49 | #8 (permalink) |
Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
|
...und dann heisst es immer Sekundenschlaf sei nichts gutes. Dabei rettet es meine Missionen.
Was mich bei meinem Script jetzt unsicher macht: Wenn ich z.B. die FirstAidKits in den Rucksack packen will, muss ich dann 'addItemCargoGlobal' verwenden, oder reicht 'addItemCargo'? Ich frage mich, weil das Script zwar offenbar lokal auf jedem Teilnehmer läuft, aber Rucksäcke ja Container sind, die auch von aussen (sprich von anderen Teilnehmern) bedient werden können. Wie muss der Befehl im obigen Script also konkret heissen? So? --> Code:
(unitBackpack _unit) additemCargo ["FirstAidKit",5]; Code:
(unitBackpack _unit) additemCargoGlobal ["FirstAidKit",5]; Geändert von Wolkenbeisser (08.05.2014 um 11:28 Uhr). Grund: Schreibfehler |
08.05.2014, 19:07 | #9 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Durch diese Bedingung if (local _unit) then ... wird das Skript nur auf dem PC des Players == _unit fertig ausgeführt.
Ich habe kein Arma3, aber sollte man bei dem nicht diesen Befehl verwenden: https://community.bistudio.com/wiki/addItemToBackpack |
08.05.2014, 22:39 | #12 (permalink) |
Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
|
Ja, das funktioniert tadellos. Hatte soeben Glück, dass ich einen meiner Clankumpels zu einem Kurztest aufbieten konnte.
Denke, damit ist die Sache vom Tisch. Alles funktioniert nun wie gewünscht. Dank allen, die geholfen haben. |
09.05.2014, 23:14 | #13 (permalink) |
Registriert seit: 22.01.2014
Beiträge: 55
|
Ich versteh dich gut...
...ich hab mich auch schon übelst aufgeregt...
Ich hab mir Scripte gemacht mit denen es läuft: while {pubcust == 1} do { {if ((( _x isKindOf "O_Soldier_F") OR ( _x isKindOf "O_Soldier_TL_F") OR ( _x isKindOf "O_Soldier_SL_F")) AND NOT (uniform _x == "U_CAF_AG_ME_ROBES_01")) then { _uni = 0; while {_uni == 0} do {if (!(uniform _x == "U_CAF_AG_ME_ROBES_01")) then { removeUniform _x; _x addUniform "U_CAF_AG_ME_ROBES_01"; if (uniform _x == "U_CAF_AG_ME_ROBES_01") then {_uni = 1};};}; };} forEach allunits; _num = _num + 1; if (_num > 66) exitWith { //Hint "Umgezogen"; cust = 0; }; sleep 1; }; die 66 ist bei mir bei 12 Typen das Minimum...sonst geht Unterwäsche spazieren im Multiplayer. (Script bei bedarf und bei jedem Client und Server ausführen. danach ebenfalls bei jedem Client etwas in der Art: {if (_x isKindOf "O_Soldier_F") then { removeallWeapons _x; removeBackpack _x; removeVest _x; removeHeadgear _x; removeallitemswithmagazines _x; _x addVest "V_BandollierB_oli"; _x unassignItem "NVGoggles_OPFOR"; _x removeItem "NVGoggles_OPFOR"; _x unassignItem "ItemRadio"; _x removeItem "ItemRadio"; _x addweapon "Binocular"; _x assignitem "Binocular"; _x additemtoUniform "FirstAidKit"; _x additemtoUniform "SmokeShell"; _x additemtoVest "Chemlight_yellow"; _x additemtoVest "HandGrenade"; _x addheadgear "H_CAF_AG_PAKTOL"; _x additemtoVest "CAF_30RND_762x39_AK"; _x additemtoVest "CAF_30RND_762x39_AK"; _x additemtoVest "CAF_30RND_762x39_AK"; _x additemtoVest "CAF_30RND_762x39_AK"; _x additemtoVest "CAF_30RND_762x39_AK"; _x additemtoVest "CAF_30RND_762x39_AK"; _x addweapon "CAF_AK47"; //_x addPrimaryWeaponItem "acc_flashlight"; _x allowFleeing 0.4; _x enableGunLights "forceOn"; };} forEach allunits; das hilft zumindest bei der KI ist dann alles paletti. Gruß Cyborg |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Ausrüstung hinzufügen (insbesondere Kampagne Adapt) | Seven | Offizielle Missionen & Kampagnen | 4 | 02.02.2014 18:07 |
Briefing in Multiplayer exportieren | Sheepdog | Editing & Scripting | 8 | 11.01.2014 19:48 |
Riesiges Problem mit der Lokalität im MP (Ausrüstung) | Drunken Officer | Editing & Scripting | 4 | 22.12.2013 14:25 |
Auslösende Einheit ermitteln und Player im Multiplayer | Zakath | Editing & Scripting | 5 | 30.07.2011 09:54 |
arma 2 op oa multiplayer an einem pc | Benn1000 | Community | 3 | 23.01.2011 15:33 |