04.10.2010, 20:13 | #21 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Das ist ja erstmal zum Testen, für Anfänger und "kleinere" Missionen gedacht.
Zum Verhindern des EH auf allen Clients sollte z.B. reichen: if(this==player)then{...} EH Dammaged ist gut, der kann im ersten Beispiel Hit und Killed ersetzen. Das Eintragungen in der Initialisierungszeile auch beim Respawn gelten hatte ich auch so ähnlich in Erinnerung. Mit der Geschwindigkeit von spawn bin ich nicht zufrieden. Möglicherweise wäre es besser ein Skript in eine Variable zu laden. Dann ist es aber nicht mehr so einfach zu handhaben. Oder vielleicht läuft while direkt im EH? |
04.10.2010, 23:23 | #23 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Es friert nichts ein! while ist auf 10000 Durchläufe begrenzt, die sind so schnell durch, dass ein Gewehrprojektil erst 2m geflogen ist.
Es gab Versionen von Arma, wo nach überschreiten der 10000 das Programm einfrohr. Jetzt wird bei 10000 Durchläufen automatisch die Schleife beendet. Ohne sleep geht nichts, weil man dann nur auf 2m den Flug eines Geschosses kontrollieren kann. Wer es nicht glaubt, im Anhang die Testmission für Arma2. |
06.10.2010, 11:20 | #24 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Interessant ist bei der while Bedingung im EventHandler folgendes:
... this addEventHandler ["Fired", {...; while {alive _p}do{...;if(...)then{deleteVehicle _p};...}}] Das Geschoss wird beim ersten Durchlauf gelöscht, ist nicht mehr sichtbar und macht auch keinen Schaden. Trotzdem wird die while Schleife 10000 Mal durchlaufen. ... this addEventHandler ["Fired", {...; while {alive _p}do{...;if(...)then{_p setDamage 1;deleteVehicle _p};...}}] Gibt man _p setDamage 1 hinzu, dann ist die Schleife nach dem 1. Durchlauf beendet. ... this addEventHandler ["Fired", {...; while {alive _p}do{...;if(...)then{_p setDamage 1};...}}] Hier wurde jetzt deleteVehicle _p entfernt. Die Schleife wird nach dem 1. Durchlauf beendet, aber dass Geschoss fliegt weiter und hat auch die entsprechende Trefferwirkung. ... this addEventHandler ["Fired", {...; while {true}do{...;if(...)then{...};...}}] Diese Schleife wird zwingend 10000 Mal durchlaufen. Das Geschoss wird nicht zerstört oder entfernt. Das Geschoss ist nach den 10000 Durchläufen keine 2 Meter geflogen. |
06.10.2010, 15:55 | #26 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Die Befehlsfolge direkt im EventHandler unbrauchbar und mit "Skript" in aufwendigen Missionen zu langsam. Also ist der Basisschutz aus Post #10 die Lösung.
Eine Frage zu den globalen Effekten der EventHandler. Wenn nach unterer Zeile der EH nur bei S1 aktiv ist, wird dann z.B. die Meldung auf allen PCs ausgegeben? Ich denke eher nicht. Aber wenn ja, in beiden Varianten? 1: S1 addEventHandler [ "Dammaged", " hint '.......' " ] 2: S1 addEventHandler [ "Dammaged", { hint "....." } ] |
29.07.2013, 10:46 | #27 (permalink) |
Registriert seit: 16.07.2013
Beiträge: 18
|
Guten Morgen, Mittag, Abend die Herren und evt Damen :-) Ich habe da ein kleines Problem. Das Script von Vienna verwende ich momentan in einer leicht abgeänderten Version auf einem DayZ Epoch Chernarus Server. Es funktioniert soweit alles bis auf die Tatsache das Fahrzeuge beim verlassen der SafeZone weder Schießen noch Schaden nehmen können... und das die Anzeige eingefroren ist (die anzeige von Blut, Durst, Essen usw vom spieler) Habt ihr eine Idee wie ich den Fahrzeugen über den trigger oder das Skript die Eventhandler wieder weg nehmen kann ? (Noch offen!) Und ob es eine Möglichkeit gibt das einfrieren der Anzeige zu verhindern ? (Noch offen!) Diese variante verwende ich momentan Code:
Private ["_Basis","_EH_Fired","_EH_Test"]; _Basis = _this select 0; while {true} do { waitUntil {(vehicle player in list _Basis)}; _EH_Fired = vehicle player addEventHandler ["Fired", { NearestObject [_this select 0,_this select 4] setPos[0,0,0]}]; _EH_Test = vehicle player addEventHandler ["HandleDamage", {}]; waitUntil {! (vehicle player in list _Basis)}; vehicle player removeEventHandler ["Fired", _EH_Fired]; vehicle player removeEventHandler ["HandleDamage", _EH_Test]; } Edit: ein weiteres kleines Problem das ich habe ist wenn sich in dem Trigger stehend einer ausloggt mit ALT+F4 und wieder rein kommt greift der Trigger bei demjenigen nicht! da wäre noch die Frage gibt es eine möglichkeit dafür zu sorgen das jemand der sich dort drin EINLOGGT zu einer bestimten position geportet wird ? (z.b. vor den Trigger) aber er soll nur geportet werden wenn er sich dort einloggt nicht wenn er rein läuft! Geändert von SniperIce (29.07.2013 um 11:27 Uhr). |
29.07.2013, 19:38 | #28 (permalink) |
Registriert seit: 11.03.2005
Ort: HH
Alter: 52
Beiträge: 1.930
|
Drollig.. Dir ist aber schon bewusst, dass die DayZ Mod über einen Haufen Scripte verfügt, die dem Spieler erstmal alle EventHandler entzieht, um dann DayZ-eigene zu verwenden? Und wie siehts aus, wenn man z.B. die Kleidung wechselt? Dann wird ja das alte Spielerobjekt gelöscht und ein der Spieler wird in eine neu generierte KI "gebeamt"... dann hat man ja im Grunde wieder ein anderes Objekt, als man es zu Beginn hatte. Sind dann da noch die von Dir verwendeten EventHandler drauf? Und wie Du schon sagst, gibt es ein Problem beim JIP... also ich sehe da ohne imensen Aufwand keine größere Chance das stabil zum Laufen zu kriegen...
|
29.07.2013, 22:26 | #29 (permalink) |
Registriert seit: 16.07.2013
Beiträge: 18
|
Naja es wird ja wohl dennoch eine abfrage dafür geben wie zb.
befindet sich ein spieler / character / fahrzeug in diesem trigger dann darf der weder feuern noch schaden nehmen. verlässt er diesen wird alles wieder auf standard gesetzt (in diesem fall gilt als verlassen und betreten auch das anziehen einer anderen kleidung) und das skript an sich funktioniert ja bis auf bei fahrzeugen da dort der eventhandler nicht mehr entfernt wird. was deinen angesprochenen punkt angeht das eventhandler entzogen werden stimmt dieser beim standard Epoch Chernarus nicht da dort extra alle eventhandler freigegeben sind, und ohne probleme freigegeben werden können. wie gesagt es ist und bleibt nur eine mod von Arma 2 OA und unterliegt somit der programmierung dieser ! Edit: zum thema in neuen körper beamen ( das ist richtig jedoch greift der eventhandler handledamage dennoch auch wenn ich mich mit admin tool in den bereich beame ! ) |
02.08.2013, 14:29 | #30 (permalink) |
Registriert seit: 16.07.2013
Beiträge: 18
|
Da mir da wohl keiner helfen kann stelle ich wenigstens noch eine andere Frage und hoffe da auf Hilfe.
Gibt es eine Möglichkeit die Anwesenheit eines Fahrzeuges in einem trigger abfragen zu lassen (gerne auch via Script) also momentan lasse ich ein Skript für einen Spieler ausführen in der Init.Sqf mit: if (playerSide == WEST) then {[Triggername] execVM "Godmode.sqf"}; Welches folgendes Skript ausführt: HTML-Code:
Private ["_Basis","_EH_Test"]; _Basis = _this select 0; while {true} do { waitUntil {(player in list _Basis)}; _EH_Test = player addEventHandler ["HandleDamage", {}]; danke schonmal vor ab |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|