19.09.2010, 10:39 | #1 (permalink) |
Registriert seit: 19.09.2010
Beiträge: 35
|
Problem: Respawn mit Vor-Tod-Bewaffnung
Hi.
Nachdem ich vergebens nach dem Fehler gesucht habe, hoffe ich hier auf ein bisschen Hilfe. Ich habe eine Einheit mit Namen "P1". In der Init der Einheit ist folgender Eventhandler: Code:
_xhandle = this addEventHandler ["killed", "_this execvm 'weaponRespawn1.sqf'"]; Code:
while {true} do { waitUntil {!alive P1}; _weapons = weapons P1; _magazines = magazines P1; waitUntil {alive P1}; _p = P1; _p setVehicleVarName "P1"; removeAllItems _p; removeAllWeapons _p; {_p addMagazine _x} forEach _magazines; {_p addWeapon _x} forEach _weapons; _primw = primaryWeapon _p; if (_primw != "") then { _p selectWeapon _primw; // Fix for weapons with grenade launcher _muzzles = getArray(configFile>>"cfgWeapons" >> _primw >> "muzzles"); _p selectWeapon (_muzzles select 0); }; }; In der ArmAOA.RPT steht folgendes: Code:
Error in expression <til {!alive P1};_weapons = weapons P1;_magazines = magazines P1;w> Error position: <P1;_magazines = magazines P1;w> Error Missing ; Ich hoffe, mir kann hier jemand helfen. |
19.09.2010, 10:53 | #2 (permalink) |
hallo
du brauchst das script nicht über einen evh killed starten, da es sowieso in einer schleife läuft. starte das script einmal in deiner init.sqf Code:
execVM "weaponrespawn1.sqf"; schreibe dann aber noch bitte diese zeile an den anfang des scriptes: Code:
if (!(local player)) exitWith {}; ...und warum schreibst du überall P1 in das script? ersetze es doch mal durch player. ist das für mp oder sp? mfg
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
19.09.2010, 11:00 | #3 (permalink) |
Registriert seit: 19.09.2010
Beiträge: 35
|
Es ist für MP.
Insgesamt habe ich drei Spieler in meine Mission eingebaut (P1, P2 und P3). Ich hatte für jede Einheit ein eigenes Script, da ich mich unsicher über den Verlauf war, wenn zwei Spieler zeitgleich spawnen. Mit "Player" anstatt "P1" im Script ist der Fehler identisch - nur halt mit "Player" im RPT. EDIT: Code geändert, eingefügt, getestet und Fehler hier nachgetragen: Code:
File mpmissions\__cur_mp.Chernarus\weaponrespawn.sqf, line 4 Error in expression <til {!alive player}; _weapons = weapons player; _magazines = magazines player; w> Error position: <player; _magazines = magazines player; w> Error Missing ; File mpmissions\__cur_mp.Chernarus\weaponrespawn.sqf, line 4 Geändert von Egosa-U (19.09.2010 um 11:13 Uhr). |
19.09.2010, 12:02 | #4 (permalink) |
dann versuchs mal mit folgenden zeilen am anfang des scripts:
Code:
if (!(local player)) exitWith {}; waitUntil {!isNull player}; waitUntil {player == player};
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
19.09.2010, 12:32 | #5 (permalink) |
Registriert seit: 19.09.2010
Beiträge: 35
|
Ich teste das Mal..
Ich denke aber, dass es ein anderes Problem ist, da auch mit dem Eventhandler der Fehler auftaucht. Da ist ja der Spieler auch "schon da". Ist es normal, dass der Fehlercode einen Teil der Codezeile abschneidet? <til ist ja nur ein Teil von waitUntil. Und wo im Code ein Semikolon fehlt, sehe ich auch nicht. Muss ich eventuell die Variablen zuerst irgendwie deklarieren? |
19.09.2010, 12:36 | #6 (permalink) |
Registriert seit: 26.03.2008
Beiträge: 2.822
|
Hier mein Waffenrespawn Skript. Funktioniert auch mit ACE. Könnte evtl. Probleme mit den OA Rucksäcken geben, hab es aber noch nicht ausprobiert.
In meiner Testmission hat ein KilledEH ein respawn-init.sqf Skript ausgelöst und in diesem Skript wurde das Waffenrespawn Skript mit dem Parameter player aufgerufen. Außerdem wird ACM und SOM erneut ausgeführt, sodass es nach einem Respawn wieder funktioniert. Code:
// ACE Weapon Respawn by Cyborg11 private ["_ace", "_unit", "_weapons", "_items", "_magazines", "_currweap", "_hasruck", "_ruckMags", "_ruckWeaps", "_weaponback", "_success", "_muzzles", "_debug"]; _ace = isClass (configFile>>"cfgWeapons" >> "ACE_B61BombLauncher"); // Check if ACE is installed _unit = _this select 0; If (count _this > 1) then {_debug = _this select 1} else {_debug = false}; If (!(isPlayer _unit) || !(local player)) exitWith{}; _weapons = (weapons _unit) - (items _unit); // weapons of the old unit _items = items _unit; // items of old unit _magazines = magazines _unit; // magazines of the old unit _currweap = currentWeapon _unit; // currentWeapon of the old unit If (_ace) then { _hasruck = player call ACE_Sys_Ruck_fnc_hasRuck; If (_hasruck) then { //_ruck = _unit call ACE_Sys_Ruck_fnc_FindRuck; _ruckMags = [_unit] call ACE_fnc_RuckMagazinesList; _ruckWeaps = [_unit] call ACE_fnc_RuckWeaponsList; }; _weaponback = _unit getvariable "ACE_weapononback"; If (_debug) then {player globalchat format ["%1",_weaponback]}; }; If (_debug) then {hint format ["Unit: %1\nWeapons: %2\nMagazines: %3", _unit,_weapons,_magazines]}; WaitUntil {alive player}; _unit = player; removeAllWeapons _unit; {_unit addMagazine _x} forEach _magazines; {_unit addWeapon _x} forEach _weapons; {_unit addWeapon _x} forEach _items; If (_ace) then { If (_hasruck) then { {[_unit, _x select 0, _x select 1] call ACE_fnc_PackWeapon;} forEach _ruckWeaps; {[_unit, _x select 0, _x select 1] call ACE_fnc_PackMagazine;} forEach _ruckMags; }; If (_weaponback != "") then { _unit addWeapon _weaponback; [_unit, _weaponback] call ACE_fnc_PutWeaponOnBack; }; }; // Select the primaryWeapon _unit selectWeapon (primaryWeapon _unit); // Fix for weapons with grenade launcher _muzzles = getArray(configFile>>"cfgWeapons" >> _currweap >> "muzzles"); _unit selectWeapon (_muzzles select 0);
__________________
|
20.09.2010, 02:10 | #7 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Ich denke das Problem ist folgendes: z.B. nach dem Tod der Spielfigur P1 kannst du diese nicht mehr mit P1 ansprechen. Daher musst du noch zu Lebzeiten deren ID sichern. So weit ich mich erinnere z.B. mit P1ID=P1. Wenn P1 tot und neu erstellt ist, kannst du die tote Figur über P1ID ansprechen und deren Bewaffnung auslesen und an die neue P1 übertragen.
|
20.09.2010, 07:43 | #8 (permalink) |
Registriert seit: 19.09.2010
Beiträge: 35
|
@Vienna: Das Script läuft auch nicht, wenn ich anstatt "P1" Player einsetze. Die Errormeldungen kommen immernoch. Das identische Script wurde von mir auch schon in einer pre-OA-Map eingesetzt und lief. auch ist die kompilierte Map aus dieser Zeit in OA noch da und funktioniert mit dem Waffenrespawn. So sah der Code aus, als ich ihn Gestern Vormitag getestet habe. Heute Abend teste ich die zwei extra-Zeilen von Psychobastard.
Code:
if (!(local player)) exitWith {}; while {true} do { waitUntil {!alive player}; _weapons = weapons player; _magazines = magazines player; waitUntil {alive player}; _p = player; _p setVehicleVarName "P1"; removeAllItems _p; removeAllWeapons _p; {_p addMagazine _x} forEach _magazines; {_p addWeapon _x} forEach _weapons; _primw = primaryWeapon _p; if (_primw != "") then { _p selectWeapon _primw; // Fix for weapons with grenade launcher _muzzles = getArray(configFile>>"cfgWeapons" >> _primw >> "muzzles"); _p selectWeapon (_muzzles select 0); }; }; Code:
// ACE Weapon Respawn by Cyborg11 private ["_unit", "_weapons", "_items", "_magazines", "_currweap", "_success", "_muzzles", "_debug"]; _unit = _this select 0; If (count _this > 1) then {_debug = _this select 1} else {_debug = false}; If (!(isPlayer _unit) || !(local player)) exitWith{}; _weapons = (weapons _unit) - (items _unit); // weapons of the old unit _items = items _unit; // items of old unit _magazines = magazines _unit; // magazines of the old unit _currweap = currentWeapon _unit; // currentWeapon of the old unit WaitUntil {alive player}; _unit = player; removeAllWeapons _unit; {_unit addMagazine _x} forEach _magazines; {_unit addWeapon _x} forEach _weapons; {_unit addWeapon _x} forEach _items; // Select the primaryWeapon _unit selectWeapon (primaryWeapon _unit); // Fix for weapons with grenade launcher _muzzles = getArray(configFile>>"cfgWeapons" >> _currweap >> "muzzles"); _unit selectWeapon (_muzzles select 0); |
20.09.2010, 19:37 | #9 (permalink) |
Registriert seit: 19.09.2010
Beiträge: 35
|
Also irgendwas ist bei meiner Mission faul. Auch mit cyborg11's code gibts ohne ende einträge in die rpt.
1,7mb voll mit Code:
File mpmissions\__cur_mp.Chernarus\weaponRespawn2.sqf, line 7 Error in expression <layer)) exitWith{}; _weapons = (weapons _unit) - (items _unit); _items = ite> Error position: <_unit) - (items _unit); _items = ite> Error Missing ) Ich vermute, dass ich irgendwo ein anderer Fehler eingeschlichen hat, der mir die weaponrespawn.sqf zur Fehlerquelle macht - eventuell die Onscreen-effekte? Keine Ahnung - mich regts gerade tierisch auf... |
20.09.2010, 19:57 | #10 (permalink) |
...her damit
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
20.09.2010, 20:05 | #11 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Das sollte jetzt dem "neuen" Spieler die Bewaffnung des toten Spielers zuweisen.
Code:
if (!(local player)) exitWith {}; while {true} do { _alterSpieler = player; waitUntil {!alive player}; _weapons = weapons _alterSpieler; //speichert die Waffen des toten Spielers _magazines = magazines _alterSpieler; //speichert die Magazine des toten Spielers waitUntil {alive player}; _p = player; _p setVehicleVarName "P1"; //removeAllItems _p; // entfernt Karte, Kompass usw. (deaktiviert) removeAllWeapons _p; // entfernt Waffen und Magazine {_p addMagazine _x} forEach _magazines; //lädt die gespeicherten Magazine {_p addWeapon _x} forEach _weapons; //lädt die gespeicherten Waffen //primäre Waffe bestimmen _primw = primaryWeapon _p; if (_primw != "") then { _p selectWeapon _primw; // Fix for weapons with grenade launcher _muzzles = getArray(configFile>>"cfgWeapons" >> _primw >> "muzzles"); _p selectWeapon (_muzzles select 0); }; }; |
23.09.2010, 08:02 | #12 (permalink) |
Registriert seit: 19.09.2010
Beiträge: 35
|
Um das hier mal Aktuell zu halten:
Die Scripte zum waffenrespawn sind alle i.O.. es liegt irgendwo in meinen Scriptanhäufungen ein Fehler vor, der mir die waffenrespawn.sqf zerschießt. Psychobastard und ich haben den Fehler schon eingegrenzt. Es wird wohl ein BIS-Effekt damit zusammenhängen. Näheres folgt.. |
30.09.2010, 15:52 | #13 (permalink) |
Registriert seit: 10.01.2010
Alter: 74
Beiträge: 175
|
Weapon-Respawn
Hier hast du eine Beispielmission die sollte gehen.
Mfg.Mike http://rapidshare.com/files/42231910...n.Zargabad.rar |
30.09.2010, 16:38 | #14 (permalink) |
Registriert seit: 13.04.2003
Ort: Monerica
Alter: 41
Beiträge: 32.968
|
Für Beispielmissionen gerne die Forenanhangfunktion benutzen, die nimmt .zip an!
Bei Rapidshare und ähnlichen Horstern hat man öfter das Problem, daß irgendwann in 1000 Jahren jemand mit demselben Problem auf deine Lösung stösst, aber es wegen ext. Wurst-Hosting Methoden nicht herunterladen kann. Ist mir selber schon oft genug passiert: "Diese Datei wurde nicht mit Premium hochgeladen und somit nach dem 10x Download deaktiviert" ..... es gibt kaum etwas ätzenderes |
30.09.2010, 20:11 | #15 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Ich habe kurz in das WeaponRespawn.sqf Skript rein gesehen. Wundert mich, dass ein SQF Skript mit SQS Syntax läuft. In die "Tiefe" bin ich nicht vorgedrungen, weil mir die Hüpferei mit "goto" zu nervig ist. Du solltest dich dringend mit der SQF-Syntax vertraut machen, womit ein ordentlicher und übersichtlicher Programmablauf möglich ist. |
01.10.2010, 06:59 | #16 (permalink) |
Registriert seit: 10.01.2010
Alter: 74
Beiträge: 175
|
Kenne mich leider auch nur bedingt aus aber es geht fehlerfrei und auch im Multiplayer. Es erfüllt für ein Spiel den Zweck würde ich mal sagen. OK Burns ich habe einen Anhang gemacht habe ich noch gar nicht gesehen das es so was gibt liegt am Alter vielleicht. Mfg.Mike Geändert von CptMike (01.10.2010 um 07:06 Uhr). |
01.10.2010, 07:12 | #17 (permalink) |
Registriert seit: 10.01.2010
Alter: 74
Beiträge: 175
|
Hallo Vienna! Hätte dein Script ausprobiert das geht aber bei mir irgendwie nicht. Muß ich da in die init Zeile vom Spieler auch was schreiben oder in die init.sqf oder beides und vorallem was? Oder hättest eventuel eine Beispielmission für mich Danke. Mfg.Mike Geändert von CptMike (01.10.2010 um 07:14 Uhr). |
01.10.2010, 10:58 | #18 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Aus dem Skript habe ich noch unnötiges entfernt. Dabei ist zu beachten, dass wirklich nur die vorhanden gewesene Bewaffnung zugewiesen wird. Verbrauchte Munition wird nicht ergänzt!
Im Anhang auch eine Beispielmission. Code:
// Weist der neuen Spielfigur nach dem Respawn die vorherige Bewaffnung zu // (keine volle Neubestückung, sondern exakt die vorhanden gewesene Munition!) // // Das Skript ist in der Init.sqf aufzurufen: player execVM "RespawnWaffen.sqf" if (! local player) exitWith {}; private ["_alterSpieler","_weapons","_magazines","_primW","_muzzles",""]; while {true} do { _alterSpieler = player; //Sichert die ID der momentanen Spielerfigur waitUntil {!alive player}; //wartet bis Spielerfigur tot _weapons = weapons _alterSpieler; //speichert die Waffen der toten Spielfigur _magazines = magazines _alterSpieler; //speichert die Magazine der toten Spielfigur waitUntil {alive player}; //wartet bis Spieler neue Figur hat //removeAllItems player; // entfernt Karte, Kompass usw. des Spielers (deaktiviert) removeAllWeapons player; // entfernt Waffen und Magazine des Spielers {player addMagazine _x} forEach _magazines; //lädt die gespeicherten Magazine {player addWeapon _x} forEach _weapons; //lädt die gespeicherten Waffen //primäre Waffe aktivieren _primW = primaryWeapon player; if (_primW != "") then { player selectWeapon _primW; // Falls Waffe einen Granatwerfer hat _muzzles = getArray(configFile>>"cfgWeapons" >> _primW >> "muzzles"); player selectWeapon (_muzzles select 0); }; }; |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Bewaffnung einer ganzen Gruppe ändern | Nischi | Editing & Scripting | 1 | 23.08.2010 00:39 |
Weapon Respawn Script | Anemia | Editing & Scripting | 5 | 12.07.2010 11:36 |
ArmA2 OA Problem | Thunderbird | Technische Fragen & Probleme | 17 | 10.07.2010 19:15 |
description.ext (sound) problem | miromanu | Editing & Scripting | 7 | 07.07.2010 16:40 |
Problem beim entpacken von Pbo's | GER_CJ-187 | Technische Fragen & Probleme | 1 | 17.05.2010 22:03 |