Armed-Assault.de Twitter


Editing The world is a Script - write it!

Antwort
 
Themen-Optionen Ansicht
Alt 22.03.2010, 10:36   #1 (permalink)
Newbie
 
Benutzerbild von Langer
 
Registriert seit: 23.05.2008
Ort: Hamburg / Norderstedt
Alter: 45
Beiträge: 44
Icon5 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";
arrays.sqf

Code:
respawnClasses = ["Truck5tRepair","Truck5tReammo","Truck5tRefuel"];
respawnClasses = respawnClasses + ["HMMWV","HMMWV50","HMMWVTOW","HMMWVMK"];
respawnClasses = respawnClasses + ["UH60MG"];
fahrzeuge_init.sqf

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;
eigFahrzeugKill.sqf

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;
            };
        };
der respawn funktioniert, aber nur solang wie ich dieses Fahrzeug nicht benutzt hab. (einsteigen -> aussteigen + in Luft jagen = nix, wird auch nicht gelöscht)

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
Langer ist offline   Mit Zitat antworten
Alt 20.05.2010, 10:44   #2 (permalink)
Newbie
 
Benutzerbild von Langer
 
Registriert seit: 23.05.2008
Ort: Hamburg / Norderstedt
Alter: 45
Beiträge: 44
Standard

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).
Langer ist offline   Mit Zitat antworten
Alt 27.05.2010, 11:35   #3 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Tajin
 
Registriert seit: 17.01.2008
Beiträge: 267
Standard

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 ^^
__________________
Tajin ist offline   Mit Zitat antworten
Alt 27.05.2010, 13:19   #4 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 12.06.2006
Beiträge: 1.252
Standard

Code:
    if (!(_x in respawnClasses)) then
    {
    temp_list2 = temp_list2 - [_x];
    };
Für was ist den das?

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
.kju ist offline   Mit Zitat antworten
Alt 27.05.2010, 14:43   #5 (permalink)
Newbie
 
Benutzerbild von Langer
 
Registriert seit: 23.05.2008
Ort: Hamburg / Norderstedt
Alter: 45
Beiträge: 44
Standard

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).
Langer ist offline   Mit Zitat antworten
Alt 29.05.2010, 10:42   #6 (permalink)
Newbie
 
Benutzerbild von Langer
 
Registriert seit: 23.05.2008
Ort: Hamburg / Norderstedt
Alter: 45
Beiträge: 44
Standard

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
BierAIG\eh_killed_dazu.sqf
Code:
_fahrzeug = _this select 0;
_fahrzeug addEventHandler ["killed", {_wert = [_this] execVM "BierAIG\vehicle_killed.sqf";}];
BierAIG\nachrichtvomclient.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";
BierAIG\nachrichtvomserver.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
BierAIG\vehicle_killed.sqf
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
BierAIG\fahrzeugneuspawn.sqf
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 hoch auf den publicVariable-EH
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
Angehängte Dateien
Dateityp: rar dedi_vehiclerespawn_test.Intro.rar (1,8 KB, 46x aufgerufen)
Langer ist offline   Mit Zitat antworten
Alt 29.05.2010, 11:09   #7 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 12.06.2006
Beiträge: 1.252
Standard

Code:
            NachrichtvomServer = "";
            "NachrichtvomServer" addPublicVariableEventHandler 
                {
                    _nachricht = [_this] execVM "BierAIG\nachrichtvomserver.sqf";
                };//end addPublicVari-EH
Statt im Loop musst du es nur 1x definieren. Insofern:

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
.kju ist offline   Mit Zitat antworten
Alt 29.05.2010, 11:14   #8 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 12.06.2006
Beiträge: 1.252
Standard

Zum Vergleich / für Ideen das VehicleRespawn.sqf von AAS:
pastebin - collaborative debugging tool
__________________
PvPscene
.kju ist offline   Mit Zitat antworten
Antwort

Stichworte
fahrzeug respawn


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ä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


Kontakt - HX3.de - Archiv - Nach oben

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias



SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119