PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nur Schallgedämpfte waffen


Big Fan
22.04.2013, 00:14
Hallo Community

Mir ist da beim rumspielen versch. Ansätze für eine Mission bzw. Auftrag eine Idee gekommen.
Der Spieler soll bzw. kann nur Schallgedämpfte Waffen für diesen Auftrag benutzen ansonsten würde der Alarm losgehen wenn er schießt.

Ich habe versucht das mittels hasWeapon um zu setzen aber musste feststellen das damit leider kein zufriedenstellendes Ergebnis bei raus gekommen ist.


Gibt es eine Möglichkeit mittels Skript oder Befehl abzufragen ob der Spieler eine Schallgedämpfte Waffe hat?

Danke schon mal

Gruß
BF

Vienna
22.04.2013, 00:24
Beim Spielstart (und Respawn) entfernst du den Spielern alle Waffen. Dazu stellst du Munikisten auf die nur die gewünschten Waffen und Munition enthalten.

Big Fan
22.04.2013, 00:46
Danke Vienna, ist nen netter und simpler Ansatz aber, leider, so geht das nicht.

Ist für eine SP Mission gedacht und in dieser Mission bekommt man im laufe der Zeit Aufräge zugeteilt durch die man Geld verdient - D.h das der Spieler in seinem Lager sich alles was er sich so leisten kann, erkaufen kann (einige werden bestimmt den Vorgänger SOF kennen)

Daher suche ich, bei diesem Auftrag, nach einer Lösung das der Spieler bei dem Auftrag nur SD Waffen benutzen kann ohne "entdeckt" zu werden.

Es soll ja nicht einfach nur in der Missionsbeschreibung stehen "Du musst zwingend eine SD Waffe verwenden" und wenn dann der Spieler das nicht tut ist die Konsequenz = 0 :D

Vienna
22.04.2013, 13:52
Im Link ist beschrieben wie man mit einer eigenen Funktion feststellen kann ob jemand unerlaubte Ausrüstungsgegenstände im Inventar hat: Funktion WaffeVorhanden (http://hx3.de/editing-scripting-167/bestimmte-einheiten-feindlich-21016/#post389837). In einer Array-Variablen wird die erlaubte Ausrüstung angeführt.


Mit einem "Fired"-EventHandler ist feststellbar welche Waffe und Munition verwendet wurde.

Zum Testen der Rückgabe von "fired" folgenden Code über einen Auslöser starten (einfach reinkopieren):

temp = vehicle player addEventHandler
[
"Fired",
{
_this spawn
{
hint format
[
"Fired-Array: _this select\n\n0 = %1\n1 = %2\n2 = %3\n3 = %4\n4 = %5\n5 = %6\n6 = %7",
_this select 0,
_this select 1,
_this select 2,
_this select 3,
_this select 4,
_this select 5,
_this select 6
]
}
}
];

Ein Beispiel dazu im Anhang. Der Code eignet sich auch dazu, die Daten von Waffen und Munition fürs Skripten auszulesen.

Big Fan
22.04.2013, 17:49
Danke dir vienna, werde ich mir gleich mal anschauen, die 2 Beispiele.


In der Zwischenzeit habe ich in den Weiten des Netzes ein interessantes sowie recht brauchbares script gefunden welches nicht erlaubte Waffen dem Spieler einfach weg nimmt :D , nicht die feine art aber durchaus brauchbar sowie erweiterbar.

Beim rumtesten mit dem skript habe ich es, soweit meine bescheidenen SQF Kenntnisse reichen, hinbekommen das wenn eine Bedingung (hier zum testen einfach Ready=true) erfüllt ist, die Waffenbeschränkung aufgehoben wird.

Soweit so gut, doch gillt das alles nur für den Spieler selbst - Ich habe da Probleme das auf die Gruppe des Spielers zu erweitern.
Vielleicht hat jemand nen Lösungsansatz den ich übersehen habe.

Hier mal das Skript
_unit=vehicle player;
[_unit]Spawn{
_unit=_this select 0;
while{True}do{
_weapons=weapons _unit;
_allowed_weapons=["RPG7V","Makarov","Binocular","ItemCompass","ItemM ap","ItemWatch","ItemRadio","MakarovSD"];
for "_i" from 0 to count _weapons -1 do{
_weapon=_weapons select _i;
if(!(_weapon in _allowed_weapons))then{_unit removeweapon _weapon;};
};
sleep 1;
if (ready) exitWith {hint"Waffenbeschränkung aufgehoben";}
};

};
exit;

So und jetzt schau ich mir mal die Beispiele an:)

Big Fan
23.04.2013, 18:22
Soo.

Vienna habe mir deine Skripte angeschaut, sehr nützlich aber weder das eine von dir noch das andere was ich gefunden habe führte zu dem ergebnis was ich wollte, leider.



Nun habe ich mich noch etwas genauer mit "hasweapon" befasst und denke das es damit doch realisierbar ist.

Genau genommen möchte ich das so machen das wenn der Spieler und/oder eines der KI mitglieder eine nicht SD waffe hat und die dann in einem bestimmten bereich abgefeuert werden ein alarm los geht.

Problem hier wieder mit hasweapon ist das die teammitglieder keine namen haben und das ab zu fragen.

Gibt's da irgendeine möglichkeit hasweapon auf die ganze gruppe vom spieler an zu wenden?


danke schon mal

Vienna
23.04.2013, 19:19
Mein Beispiel mit dem Fired-EventHandler soll nur aufzeigen wie die abgefeuerte Waffe ermittelt werden kann. Es bedarf natürlich noch einer Routine abzufragen ob es erlaubte Waffe war.

Vielleicht hilft dir dieser Code weiter der diesen EventHandler verwendet:

temp = vehicle player addEventHandler
[
"Fired",
{
_this select 1 spawn
{
_erlaubteWaffen = ["NameWaffe 1","NameWaffe 2"];
if (_this in _erlaubteWaffen) then
{hint "Korrekte Waffe!"}
else
{hint "Falsche Waffe!"}
}
}
];

Hier wird die verwendete Waffe mit einer Liste von erlaubten Waffen verglichen. Anstelle der Text-Ausgabe gibst du dein gewünschtes Ereignis ein.

Der EventHandler sollte auch für KI anwendbar sein. Anstelle von player dann den Namen der KI anführen.


Statt des "spawn-Skripts" ist es dann wahrscheinlich besser ein SQF-Skript zu verwenden.

Der Aufruf im EventHandler sieht dann so aus:

temp = vehicle player addEventHandler
[
"Fired",
{_this select 1 execVM "ErlaubteWaffe.sqf"}
];

Big Fan
23.04.2013, 23:44
Dank dir nochmal.


Was ich villeicht nicht erwähnt habe ist, das es für die KI keine festen namen gibt, die können ebenfalls erworben/gekauft werden und werden dem spieler dann zugeteilt sprich "gespawnt".
Das einzige was existiert ist ein gruppenname, den der spieler hat, doch nach ein wenig herumexperimentieren hab ich das soweit hinbekommen.


Jedenfalls danke nochmal:daumen:


Habe das ganze mal mit nem alarm getestet doch wenn ich die waffen aus ner munikiste nehme die ich eingetragen habe wird die alarmbedingung trotzdem nachdem man schießt auf true gesetzt.

So sieht das jetzt aus


{_x addEventhandler
[
"Fired",
{
_this select 1 spawn
{
_erlaubteWaffen=["M4A1_AIM_SD_CAMO","M4A1_HWS_GL_SD_CAMO","MP5SD"];
if (_this in _erlaubteWaffen) then
{hint"Tarnung ok"}
else
{Alarm=true}
}
}
];} foreach units Gruppe1



und der aufruf


{_x addEventhandler ["Fired",{_this select 1 execVM "ErlaubteWaffe.sqf"}]} foreach units Gruppe1


Hab ich hier was verbockt?


Danke schon mal

Vienna
24.04.2013, 08:04
Lass dir einmal anzeigen ob die Waffennamen stimmen. Füge vor if (... folgende Zeile ein:

hint format["%1 in %2", _this, _erlaubteWaffen];

Big Fan
24.04.2013, 19:41
ok nochmals danke, das hat geholfen den fehler zu finden.

Eingentlich so simpel: hier im bsp musste das Camo klein geschrieben werden anstatt groß:rolleyes: