22.03.2010, 10:36 | #1 (permalink) |
Registriert seit: 23.05.2008
Ort: Hamburg / Norderstedt
Alter: 45
Beiträge: 44
|
Fahrzeugrespawn nach Fahrzeugbenutzung
Moin,
ich hab ein Problem mit meinem Fahrzeug-Respawn, es funktioniert nur solange wie ich nicht in ein Fahrzeug eingestiegen bin.. hier die scripte.. init.sqf Code:
arrays = [] execVM "BierAIG\arrays.sqf"; eigFahrzeuge = [] execVM "BierAIG\fahrzeugRespawn\fahrzeuge_init.sqf"; Code:
respawnClasses = ["Truck5tRepair","Truck5tReammo","Truck5tRefuel"]; respawnClasses = respawnClasses + ["HMMWV","HMMWV50","HMMWVTOW","HMMWVMK"]; respawnClasses = respawnClasses + ["UH60MG"]; Code:
if (!isServer) exitWith{}; sleep 2.0; temp_list2 = vehicles; _types = []; { if (!(_x in respawnClasses)) then { temp_list2 = temp_list2 - [_x]; }; _pos = position _x; _startpos = position _x; _startdir = getdir _x; _name = typeOf _x; _x addEventHandler ["killed",{handle = [(_this select 0),(_this select 1),_startpos,_startdir] execVM "BierAIG\fahrzeugRespawn\eigFahrzeugKill.sqf"}]; switch (_name) do { case "Truck5tReammo": { _x setAmmoCargo 0; }; case "Truck5tRefuel": { _x setFuelCargo 0; }; case "Truck5tRepair": { _x setRepairCargo 0; }; }; //switch-close } foreach temp_list2; Code:
if (!isServer) exitWith{}; _toter = _this select 0; _killer = _this select 1; _startpos = _this select 2; _startdir = _this select 3; _todespos = position _toter; _toter removealleventhandlers "killed"; sleep 5; //Explosion und rauch abwarten _typetoter = typeof _toter; _dirToter = getdir _toter; deleteVehicle _toter; sleep 0.5; _neu = _typetoter createVehicle _todespos; _neu setpos _todespos; _neu setDir _dirToter; _neu addEventHandler ["killed",{handle = [(_this select 0),(_this select 1),_startpos,_startdir] execVM "BierAIG\fahrzeugRespawn\eigFahrzeugKill.sqf"}]; switch (_typetoter) do { case "Truck5tReammo": { _x setAmmoCargo 0; }; case "Truck5tRefuel": { _x setFuelCargo 0; }; case "Truck5tRepair": { _x setRepairCargo 0; }; }; für nen Fingerzeig warum , wieso , weshalb wäre ich dankbar die .rpt geben nix an Fehlern raus.. Mfg Langer P.S. ich teste aufn Dedi server |
20.05.2010, 10:44 | #2 (permalink) |
Registriert seit: 23.05.2008
Ort: Hamburg / Norderstedt
Alter: 45
Beiträge: 44
|
keiner mehr da?
also das Problem liegt anscheinend daran das per script erstellte Fahrzeuge Local aufm Server sind , sobald nen Client einsteigt wird des Fahrzeug local auf selbigen, nur wird der Eventhandler nicht "übernommen"... ne Möglichkeit dies zu umgehen wäre es per getin-Eventhandler ,auf dem Client einen zusätzlichen killed-EH "anzubringen", nur sollte darauf geachtet werden diese uU. meheren EH's mit _unit removeAllEventhandlers "killed"; zu entfernen Mfg Langer P.S. falls ich daneben liegen sollte , und hier noch jemand liest, berichtigt mich bitte P.P.S. die suche funzt nicht mehr Geändert von Langer (20.05.2010 um 11:33 Uhr). |
27.05.2010, 11:35 | #3 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
Das einfachste aus meiner Sicht wäre, das init-script global auszuführen (so das jeder den eventhandler hat) und dann erst bei Auslösen des Events die Lokalität des Fahrzeugs zu überprüfen anstelle von (!isServer).
Das sollte eigl. vollkommen ausreichen. Mit dem GetIn würde es nur unnötig komplex und fehleranfällig. Das Einzige was zählt, ist auf welchem Rechner das Fahrzeug lokal ist. Wenn z.B. jemand einsteigt und dann vom Server geht, dann wird mit Sicherheit kein GetOut ausgelöst. Das Fahrzeug wäre dann wieder beim Server lokal und dein Script wüsste nichts davon. Dumm gelaufen ^^
__________________
|
27.05.2010, 13:19 | #4 (permalink) |
Registriert seit: 12.06.2006
Beiträge: 1.252
|
Code:
if (!(_x in respawnClasses)) then { temp_list2 = temp_list2 - [_x]; }; Zudem n Array zu modifizieren über welches du gerade iterierst könnte n Problem sein. Es müsste so heißen: Code:
} forEach vehicle;
__________________
PvPscene |
27.05.2010, 14:43 | #5 (permalink) |
Registriert seit: 23.05.2008
Ort: Hamburg / Norderstedt
Alter: 45
Beiträge: 44
|
erstmal danke für die antworten
@.kju temp_list2 = temp_list2 - [_x]; löscht Fahrzeuge ausm Array welche nicht respawnen sollen, oder was meinst? mmh ich dachte bisher das der codeblock innerhalb von den Klammern, {codeblock;} foreach arraywert; ausgeführt wird, der arraywert nur vor der "erledigung" eingelesen wird und während der Laufzeit unangetastet bleibt .. hast aber recht, so: {}foreach vehicles; , is besser.. @Tajin irgendwie "hängt" sich mein gedankengang dabei auf... ich müsste also ,theoretisch, nur das eigentliche spawnen (und löschen) der Fahrzeuge in if (isServer) then {respawn,löschen}; packen, danach auf allen Clients und dem Server EHs "verteilen".. ?? nur schlägt ja der Server-EH nicht an weils Fahrzeug auf nem Client lokal wird, nachm einsteigen.. heisst Server führt das script net aus.. oder?? ich kann des leider erst heut abend testen... daher theorie ich geb Meldung wenn ichs "raushab"... Notfals hau ich dem Server das mit addPublicVariable-EH und publicVariable um die Ohren Mfg Langer Geändert von Langer (27.05.2010 um 14:52 Uhr). |
29.05.2010, 10:42 | #6 (permalink) |
Registriert seit: 23.05.2008
Ort: Hamburg / Norderstedt
Alter: 45
Beiträge: 44
|
so habs nun so umgebaut das es funzt
hier die scripte: init.sqf Code:
if (isServer) then { { _serverEH = [_x] execVM "BierAIG\eh_killed_dazu.sqf"; NachrichtVomClient = ""; "NachrichtVomClient" addPublicVariableEventHandler { _nachricht = [_this] execVM "BierAIG\nachrichtvomclient.sqf"; };//end addPublicVari-EH } foreach vehicles; };//end if-then if (!(isServer)) then { Debug = False; { _clientEH = [_x] execVM "BierAIG\eh_killed_dazu.sqf"; NachrichtvomServer = ""; "NachrichtvomServer" addPublicVariableEventHandler { _nachricht = [_this] execVM "BierAIG\nachrichtvomserver.sqf"; };//end addPublicVari-EH } foreach vehicles; };//end if-then Code:
_fahrzeug = _this select 0; _fahrzeug addEventHandler ["killed", {_wert = [_this] execVM "BierAIG\vehicle_killed.sqf";}]; Code:
_wert = _this select 0; _array = _wert select 1; _toter = _array select 0; _killer = _array select 1; _neuspawn = [_toter,_killer] execVM "BierAIG\fahrzeugneuspawn.sqf"; Code:
_wert = _this select 0; _array = _wert select 1; _toter = _array select 0; _killer = _array select 1; _neuesFahrzeug = _array select 2; if (!(isNull _neuesFahrzeug)) then { _clientEH = [_neuesFahrzeug] execVM "BierAIG\eh_killed_dazu.sqf"; }else{ if (Debug) then { hint format ["_wert = %1\n----_array = %2\n----\n_toter = %3\n----\n_killer = %4\n----\n_neuesFahrzeug = %5",_wert,_array,_toter,_killer,_neuesFahrzeug]; [West,"HQ"] sideChat format["Server:_toter = %1 --- _killer = %2",(typeof _toter),(name _killer)]; };//end if-then };//end if-then-else Code:
_wert = _this select 0; _toter = _wert select 0; _killer = _wert select 1; if (!(isServer)) then { if (Debug) then { [West,"HQ"] sideChat format["Client:_toter = %1 --- _killer = %2",(typeof _toter),(name _killer)]; };//end if-then NachrichtVomClient = [_toter,_killer]; publicVariable "NachrichtVomClient"; };//end if-then if (isServer) then { _fahrzeugneuspawn = [_toter,_killer] execVM "BierAIG\fahrzeugneuspawn.sqf"; NachrichtVomServer = [_toter,_killer,objNull]; publicVariable "NachrichtVomServer"; };//end if-then Code:
_toter = _this select 0; _killer = _this select 1; sleep 5.0;//rauch und explosionen abwarten _typetoter = typeof _toter; _position = position _toter; _richtung = getdir _toter; _toter removealleventhandlers "killed"; deleteVehicle _toter; _neuesFahrzeug = _typetoter createVehicle _position; _neuesFahrzeug setpos _position; _neuesFahrzeug setDir _richtung; _serverEH = [_neuesFahrzeug] execVM "BierAIG\eh_killed_dazu.sqf"; NachrichtVomServer = [_toter,_killer,_neuesFahrzeug]; publicVariable "NachrichtVomServer"; ein buuuuuh auf EH's die nur lokal laufen (beste wäre wählbar ob lokal/global wie bei Variablen) vielen Dank für eure Hilfe Mfg Langer P.S. im anhang eine Test.pbo zum anguggn auf nem dedi-server |
29.05.2010, 11:09 | #7 (permalink) |
Registriert seit: 12.06.2006
Beiträge: 1.252
|
Code:
NachrichtvomServer = ""; "NachrichtvomServer" addPublicVariableEventHandler { _nachricht = [_this] execVM "BierAIG\nachrichtvomserver.sqf"; };//end addPublicVari-EH Code:
"NachrichtVomClient" addPublicVariableEventHandler { if (isServer) then { _nachricht = [_this] execVM "BierAIG\nachrichtVomClient.sqf"; } else { _nachricht = [_this] execVM "BierAIG\nachrichtVomServer.sqf"; }; }; { _nil = _x addEventHandler ["killed",{_nil = [_this] execVM "BierAIG\vehicle_killed.sqf";}]; } forEach vehicles;
__________________
PvPscene |
29.05.2010, 11:14 | #8 (permalink) |
Registriert seit: 12.06.2006
Beiträge: 1.252
|
Zum Vergleich / für Ideen das VehicleRespawn.sqf von AAS:
pastebin - collaborative debugging tool
__________________
PvPscene |
Stichworte |
fahrzeug respawn |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Fahrzeugrespawn | rocker | Editing | 6 | 28.01.2010 16:01 |
Brauche Tipp bei Fahrzeugrespawn | rocker | Mods & Addons | 1 | 20.01.2010 19:14 |
einheit soll nach und nach geheilt werden, nicht aufeinmal | Virility92 | Editing | 2 | 18.05.2009 20:00 |
Suche nach.... | Malkav | Mod und Addon Ecke | 5 | 07.07.2004 15:05 |
Nach OFP(1)??? | xezon | Veteranen Stammtisch | 9 | 30.07.2003 14:27 |