23.05.2010, 11:49 | #1 (permalink) |
Leichen verstecken?
Hallo Leute,
gibt es eine Möglichkeit in Arma2 Leichen via Ziehen oder Tragen (wie bei Verletzten) zu verstecken? Gruß Tod
__________________
Langsam ist präzise.....und präzise ist schnell.... http://www.astore.de http://www.astore-shop.de http://www.voodoo-puppe.net |
|
23.05.2010, 16:23 | #4 (permalink) |
jep, oder einfach eine special-forces spielen... die haben automatisch den action-eintrag leiche verbergen.
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
24.05.2010, 09:24 | #5 (permalink) |
Habs getestet und ist soweit ganz gut aber funktioniert das mit dem Modul auch im Multiplayer? Diese Modulgeschichten gehen doch nur Serverseitig oder?
Wie lautet den der Code für den Hide Body Eintrag im Aktion-Menue? Gruß Tod
__________________
Langsam ist präzise.....und präzise ist schnell.... http://www.astore.de http://www.astore-shop.de http://www.voodoo-puppe.net |
|
25.05.2010, 09:06 | #6 (permalink) |
Ich habs ausprobiert und es funktioniert.
Danke
__________________
Langsam ist präzise.....und präzise ist schnell.... http://www.astore.de http://www.astore-shop.de http://www.voodoo-puppe.net |
|
02.06.2012, 15:35 | #7 (permalink) |
Registriert seit: 19.05.2011
Beiträge: 22
|
Leiche versteckt abfragen!
Hi,
die AlarmCount-Demomission habe ich getestet und fand sie gut. Ich habe noch eine andere (wahrscheinlich nicht neue) Idee, an deren Umsetzung ich gelegentlich schon länger, ohne Erfolg, herumbastele. Folgendes plane ich: Der Spieler (SpecOp) wird im Briefing darüber informiert, das er in der Nähe von Basen oder Camps des Gegners alle Wachen, die er eliminiert, per addaction-Befehl "Leiche verbergen", innerhalb von 2 min verstecken muß, da sonst Alarm ausgelöst wird. Aus der Ferne alles wegsnipen soll damit unterbunden werden. Man muß sich sehr genau überlegen, welche Einheiten man angreift. Problem: Abfrage, ob die eliminierte Einheit per hidebody gelöscht wurde. Das funktioniert im Trigger über eine Distanzabfrage, z.B. player distance _guard > 100000, sehr gut. In einem von einen addeventhandler "killed" ausgelösten Script aber nicht. Per Try and Error habe ich da schon vieles probiert, ohne Erfolg. Vielleicht kann mir jemand helfen? Danke |
03.06.2012, 12:12 | #9 (permalink) |
Registriert seit: 19.05.2011
Beiträge: 22
|
Hi,
Vienna, hast natürlich voll recht. Nur ein komplettes Script habe ich noch nicht geschrieben, da ich immer noch an den Hauptsachen scheitere. Das wäre z.B. die Entfernungsabfrage. Ich poste mal meine Ergebnisse. Ich erstellt einen West-Player, s1, und eine East-KI, r1. Auslösung: In die Init-Zeile von r1 this addMPEventHandler ["MPKilled", {[_this select 0,_this select 1] execVM "takehidebody.sqf"}] "takehidebody.sqf": If (not local player) : exitwith {}; _unit = _this select 0; _player = _this select 1; //Zum Testen ausgeführt und funzt //if (_unit == r1) then {hint "r1"}; //if (player == s1) then {hint "s1"}; /*Frage: In der Wiki las ich, das der Player immer automatisch erkannt wird beim addeventhandler killed, weil Dieser local wäre?*/ //1.Dies wird komplett "überlesen" if (player distance _unit >= 100000) then {hint "Leiche versteckt"}; //2.Funzt auch nicht If (player distance _guard >= 100000) then {titleText ["Leiche versteckt - Kein Alarm", "PLAIN"]} else {titleText ["Alarm ausgelöst", "PLAIN"]}; Ich weiß, das ich noch einen Loop für die 2 min brauche, aber soweit bin ich noch garnicht. Mein Hauptproblem ist die Distanzabfrage. Aber vielleicht ist mein grundsätzlicher Ansatz falsch? |
03.06.2012, 18:18 | #10 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Versuche das als Code in deinem Skript:
Code:
if (! local player) exitwith {}; private ["_unit","_time","_maxZeit"]; _toter = _this select 0; _maxZeit = floor(player distance _toter); //maximale Sekunden um die Leiche zu entfernen player groupChat format ["%1 Sekunden um die Leiche zu entfernen! Entfernung: %1m",floor(player distance _toter)]; //Schleife bis Zeit abgelaufen oder Leiche entfernt _time = time+_maxZeit; while {_time > time and player distance _toter < 10000} do { if (player distance _toter < 3) then { deleteVehicle _toter; hint "" } else { hintSilent format ["Noch %1m und\n%2 Sekunden!",floor(player distance _toter),floor(_time-time)] }; sleep 0.1 }; //Auswertung if (player distance _toter > 10000) then { player groupChat "Leiche versteckt - Kein Alarm!" } else { titleText ["Alarm! Alarm! Alarm! Alarm! Alarm! Alarm!", "PLAIN"]; //MeinAmlarm = true; publicVariable "MeinAmlarm" } Die Leiche wird automatisch beim Eintreffen bei ihr entfernt. Ich würde hier den normalen Event-Handler mit "Killed" nehmen und beim Alarm z.B. mit einer publiken Variablen MeinAlarm einen Auslöser publik für MP aktivieren (siehe die deaktivierte letzte Zeile). Die Variable musst du zuvor z.B. in der init.sqf auf false setzen: MeinAmlarm = false; |
07.06.2012, 17:16 | #12 (permalink) |
Registriert seit: 19.05.2011
Beiträge: 22
|
Funzt!
Hi,
Danke nochmal, das ganze funktioniert. Allerdings habe ich kleine Änderungen vorgenommen. Einiges passte nicht, weil ich meinen Ansatz vielleicht nicht klar genug dargelegt habe. Also, das ganze soll nur bei Nacht bei Geheimmissionen stattfinden. Wenn Alarm ausgelöst wird, soll die Ausführungsmöglichkeiten für die Spieler erheblich erschwert werden. Nur SpecOp haben die Möglichkeit, die Addaction "Leiche verbergen", bzw "Hidebody" durchzuführen. Bekommen also noch eine Sonderrolle (außerdem hat es mich schon immer gestört, daß man mit dieser Addaction nichts anfangen konnte). Gleichzeitig wollte ich auch nichts Kompliziertes machen (Leichen verstecken, wie bei Splintercell, würde viel Arbeit bedeuten, die dem Spieler aber innerhalb von Arma 2 kaum mehr Spielspaß bringt. Auslösung: In die Init-Line der Unit this addEventHandler ["Killed", {[_this select 0,_this select 1,_this select 2] execVM "takehidebody.sqf"}]; Script takehidebody.sqf: if (! local player) exitwith {}; private ["_unit","_time","_maxZeit"]; _toter = _this select 0; _maxZeit = floor(player distance _toter)+120; //maximale Sekunden um die Leiche zu entfernen player groupChat format ["%1 Sekunden um die Leiche zu entfernen! Entfernung: %1m",floor(player distance _toter)]; //Schleife bis Zeit abgelaufen oder Leiche entfernt _time = time+_maxZeit; while {_time > time and player distance _toter < 10000} do { if (player distance _toter < 3) then { hint "" } else { hintSilent format ["Noch %1m und\n%2 Sekunden!",floor(player distance _toter),floor(_time-time)]; //Bei mehreren erschossenen Gegnern nervig }; sleep 0.1 }; //Auswertung if (player distance _toter > 10000) then { player groupChat "Leiche versteckt - Kein Alarm!" } else { titleText ["Alarm! Alarm! Alarm! Alarm! Alarm! Alarm!", "PLAIN"]; //MeinAmlarm = true; publicVariable "MeinAmlarm" } Ich habe einfach die automatische Löschung entfernt und etwas mehr Zeit dazugegeben, da die hidebody-action 30-40 sec lang ist. Der Körper sinkt wohl sehr tief, oder Routinen des Programms, die ablaufen müssen. Störend ist das hintsilent der Meter- und Zeitabfrage, wenn der Player mehrere Gegner erschießt. Aber auszuhalten. Außerdem fehlt noch die Abfrage, ob der Alarm nicht schon ausgelöst wurde. es gibt noch viel zu tun. Frage: Ihr kopiert Eure scripte immer in weiße Felder. Wie macht man das denn? Nochmal Danke Tschüß |
07.06.2012, 17:23 | #13 (permalink) |
User gesperrt
Registriert seit: 20.10.2009
Ort: Jetzt auch im BIF
Alter: 39
Beiträge: 9.163
|
Wenn du links unten auf Antworten klickst kommt eine neue Seite und dort im grauen Feld sind oben Symbole. Du musst das # Symbol anklicken und dann "[cote]"hier"[/code]" den Code rein kopieren. |
07.06.2012, 18:40 | #14 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Das Skript ist ja nur als Beispiel gedacht. Du sollst es natürlich nach deinen Bedürfnissen abändern.
Für die Steuerung des Alarms kannst du die vorhandene Variable MeinAmlarm verwenden. Die ist zur Zeit deaktiviert. |
08.06.2012, 00:53 | #15 (permalink) |
Registriert seit: 19.05.2011
Beiträge: 22
|
Vorläufige Endversion!
//this addEventHandler ["Killed", {[_this select 0,_this select 1,_this select 2] execVM "takehidebody.sqf"}];
if (! local player) exitwith {}; If (MeinAlarm) exitwith {}; private ["_unit","_time","_maxZeit"]; _toter = _this select 0; _maxZeit = floor(player distance _toter)+140; //maximale Sekunden um die Leiche zu entfernen player groupChat format ["%1 Sekunden um die Leiche zu entfernen! ",floor(player distance _toter)+120]; //Schleife bis Zeit abgelaufen oder Leiche entfernt _time = time+_maxZeit; while {_time > time and player distance _toter < 10000} do { if (player distance _toter < 5) then { hint "" } else { }; sleep 0.1 }; //Auswertung if (player distance _toter > 10000) then { player groupChat "Die Leiche ist versteckt - Kein Alarm!";deletevehicle _toter;hint ""; } else { player groupChat "Verdammt, Alarm!"; MeinAlarm = true; publicVariable "MeinAlarm"; } Erklärung: Das hint format war nicht machbar. Die Probleme sind, wenn der player mehrere Einheiten abschießt, das hint format durcheinandergeriet. Auch, wenn ein player _toter erschießt, ein anderer player ihn "verbirgt", gab´s Probleme. Durch das deleten von _toter konnte ich die Arbeitszeit von "hidebody" von 40 auf 15 sec verkürzen. Durch den Unterschied von _maxzeit und der dem Player angegebenen Zeit, konnte ich die Arbeitszeit von hidebody auspuffern. D.H., wenn ein player noch in der letzten Sekunde hidebody auslöst, kann er den Alarm verhindern. Ich bin nicht überzeugt, das das verständlich rüberkommt. Läßt sich auch schwer erklären. Na ja, klappt jetzt aber genauso, wie ich´s wollte. Nochmals Danke, Vienna. Tschüß, ich muß in´s Bett. |
Stichworte |
leichen im keller, leichen verstecken |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|