Hier auch noch mal die Frage, die ich bei Facebook bei Armaworld gestellt hab:
Skripting-Frage: Ich möchte eine eigene ACE-Interaktion für ein Objekt machen. Dazu habe ich in einer .sqf die entsprechenden Befehle gesetzt. Das funktioniert auch. Nur wenn ich die .sqf dann über BIS_fnc_MP und BIS_fnc_execVM auf dem Server starte (die .sqf wird in der init.sqf angesprochen), dann erscheint die Aktion doppelt, wenn ich sie auf dem Server teste. Und das Skript selbst funktioniert gar nicht. Worauf muss ich achten? Hat jemand einen Rat?
Anbei der Code in der init.sqf und der Code in dem angesprochenen Skript:
(wie man dann wohl an dem Code sieht, bin ich nicht gut im scripten, vieles ist in mühsamer Kleinarbeit zusammengeklaut; lokal funktioniert das Skript aber, jetzt muss es nur wieder mp-tauglich gemacht werden)
- //if (!isServer && (player != player)) then { waitUntil {player == player}; waitUntil {time > 10}; };
- _code = {
- //if(isServer)then{
- _pos= getPos ausgabe; //"ausgabe" ist bei mir ein Tisch, auf dem die Ausrüstung erscheint
- //hint format ["debug pos ausgabe:%1", _pos]; //nur zu debug-Zwecken
- _pos0= _pos select 0;
- _pos1= _pos select 1;
- _pos2= _pos select 2;
- _holder = createVehicle ["groundweaponholder",[_pos0,_pos1,_pos2+0.95], [], 0, "can_Collide"];
- _primaryZahl = 1; //Waffenanzahl
- _magazinZahl = 6; //Magazinanzahl
- _player = _this select 0; //=der Spieler, der die Aktion ausführt
- _weapon = primaryWeapon _player;
- _magazineClass = getArray (configfile >> "CfgWeapons" >> _weapon >> "magazines");
- _magazines = _magazineClass select 0;
- if (count _weapon <= 0) then {
- hint "Keine Primärwaffe ausgerüstet";
- } else {
- _holder addWeaponCargoGlobal [_weapon, _primaryZahl];
- _holder addMagazineCargoGlobal [_magazines, _magazinZahl];
- _player removeWeaponGlobal _weapon;
- };
- };
- };
- _action = ["WaffeAusgeben", "Waffe ausgeben", "", _code, {true}, {}, [], {getPos ausgabe}, 100] call ace_interact_menu_fnc_createAction;
- [ausgabe, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject;
- //if (!isServer && (player != player)) then { waitUntil {player == player}; waitUntil {time > 10}; };
- _code = {
- //if(isServer)then{
- private [
- "_pos",
- "_pos0",
- "_pos1",
- "_pos2",
- "_magazinZahlGL",
- "_player",
- "_holder",
- "_weapon",
- "_muzzles",
- "_muzzlecount",
- "_magazineClass",
- "_count",
- "_countmag",
- "_currentmag",
- "_mun",
- "_mun2",
- "_mod",
- "_modnamearr",
- "_modname"];
- _player = _this select 0;
- _mun = ["rhs_mag_M441_HE",
- "CUP_1Rnd_HE_M203"]; //Klassennamen für GL-Munition
- _munmod = for [{_b=1},{_b<=(count _mun)},{_b=_b+1}] do { //Abfrage der verwendeten Mods
- _muni = _mun select _b;
- _modname = _muni splitString "_";
- _modname = _modname select 0;
- };
- _weapon = primaryWeapon _player;
- _pos= getPos ausgabe_grn; //Position des Tischs
- _pos0= _pos select 0; //X-Koordinate
- _pos1= _pos select 1; //Y-Koordinate
- _pos2= _pos select 2; //Z-Koordinate
- _magazinZahlGL = 10; //Granatwerfer-Granaten
- _holder = createVehicle ["groundweaponholder",[_pos0,_pos1,_pos2+0.95], [], 0, "can_Collide"];
- //_player sideChat format ["%1", _weaponmod]; //debug
- //_player sideChat format ["%1", _munmod]; //debug
- _muzzles = getArray (configfile >> "CfgWeapons" >> _weapon >> "muzzles");
- _muzzlecount = count _muzzles;
- if (count _weapon <= 0) then {
- hint "Keine Primärwaffe ausgerüstet";
- } else {
- for "_i" from 0 to _muzzlecount do {
- if ([
- "GL",
- format["%1", [_muzzles select _i]joinString ""],
- true
- ] call BIS_fnc_inString) then {
- //_player sideChat format ["%1", _muzzles select _i]; //debug
- for "_a" from 0 to (count _mun) do {
- _ammo = _mun select _a;
- _modname = _mun select _a;
- _modname = _modname splitString "_";
- _modname = _modname select 0;
- _weaponmod = _weapon splitString "_";
- _weaponmod = _weaponmod select 0;
- if ([
- str _modname,
- str _weaponmod,
- true
- ] call BIS_fnc_inString) then {
- _holder addMagazineCargoGlobal [_ammo, _magazinZahlGL];
- _player sideChat format ["Ausgabe von %1 erfolgreich", _ammo];
- }; /*else {_player sideChat format ["Andere: %1", _ammo]}; *///debug
- };
- };
- };
- };
- };
- };
- _action = ["GranatenAusgeben", "UL-Granaten ausgeben", "", _code, {true}, {}, [], {getPos ausgabe_grn}, 100] call ace_interact_menu_fnc_createAction;
- [ausgabe_grn, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject;