HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Nur Schallgedämpfte waffen (https://hx3.de/editing-scripting-167/nur-schallgedaempfte-waffen-22516/)

Big Fan 22.04.2013 00:14

Nur Schallgedämpfte waffen
 
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

Liste der Anhänge anzeigen (Anzahl: 1)
Im Link ist beschrieben wie man mit einer eigenen Funktion feststellen kann ob jemand unerlaubte Ausrüstungsgegenstände im Inventar hat: Funktion WaffeVorhanden. 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):
Code:

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
Zitat:

_unit=vehicle player;
[_unit]Spawn{
_unit=_this select 0;
while{True}do{
_weapons=weapons _unit;
_allowed_weapons=["RPG7V","Makarov","Binocular","ItemCompass","I temM 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öglichkeithasweapon 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:
Code:

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:
Code:

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

Code:

{_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

Code:

{_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:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 Uhr.

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