Archiv verlassen und diese Seite im Standarddesign anzeigen : Waffen zuweisen nach dem Respawn
counthash
8. August 2009, 23:29
Hallo,
habe folgendes Problem. Und zwar wollte ich ein simples Skript bauen, welches bestimmte Waffen zuweist nach dem Tod des jeweiligen Soldaten. Dabei orientierte ich mich oder besser übernahm Mr Murrays Beispiel aus dem Editing Guide von Arma1. Das funktionierte leider schonmal nicht ganz. Daraufhin habe ich es in eine Funktion gewandelt, die über einen Trigger Bedingung (not alive chef) Aktivierung d = [chef] execVM "scripts\w_chef.sqf"; ausgelöst wird. Nach einigen Probieren fiel mit auf das anscheinend die Variable für _unit sprich in diesem Fall mein Squadleader mit Bezeichnung chef nicht übernommen wurde. Trage ich chef direkt in die Funktion geht alles wunderbar. Woran liegt das beziehungsweise wo ist denn der Syntaxfehler? Kann ich das so nicht übergeben?
Die zweite Sache die ich gerne einbauen würde ist eine Abfrage, dachte erstmal an eine if then, die prüft wer denn gerade abgelebt ist und den entsprecheden Waffenhaufen zuweist. Also nach dem Motto if(_unit = chef)then{...}. Wie kann man das lösen?
Ach habe den anderen Thread in Bezug auf das selbe Thema schon gelesen. Aber ich verstehe Teile der genutzen Befehle und ihre Funktion nicht. Und ich baue nicht gerne Sachen ein die ich nicht verstehe.
Gruß, Phil
_unit = _this select 0;
sleep playerRespawnTime;
removeallWeapons _unit;
_unit addweapon "Binocular";
_unit addweapon "NVGoggles";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addweapon "M4A1_AIM_SD_camo";
_unit addmagazine "Handgrenade";
_unit addmagazine "Handgrenade";
_unit addmagazine "Handgrenade";
if (true) exitWith {};
[GNC]Lord-MDB
9. August 2009, 05:45
Daraufhin habe ich es in eine Funktion gewandelt, die über einen Trigger Bedingung (not alive chef) Aktivierung d = [chef] execVM "scripts\w_chef.sqf"; ausgelöst wird.
Du hast da die Falsche Zeile ausgewählt dafür,da der Trigger Ausgelöst wird wenn der Spieler stribt,aber wenn der Spieler Respwan stellt er in Arma2 eine andere Person dar als die Tote Einheit,du muss da die Zeile deaktivieren nehmen oder den den Code der Bedingungs Zeile in alive chef ändern und das sleep playerRespawnTime; entfernen
Die zweite Sache die ich gerne einbauen würde ist eine Abfrage, dachte erstmal an eine if then, die prüft wer denn gerade abgelebt ist und den entsprecheden Waffenhaufen zuweist. Also nach dem Motto if(_unit = chef)then{...}. Wie kann man das lösen?
_unit = _this select 0;
if (_unit == chef) then{
removeallWeapons _unit;
_unit addweapon "Binocular";
_unit addweapon "NVGoggles";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addweapon "M4A1_AIM_SD_camo";
_unit addmagazine "Handgrenade";
_unit addmagazine "Handgrenade";
_unit addmagazine "Handgrenade";
};
if (_unit == koch) then{
removeallWeapons _unit;
_unit addweapon "Binocular";
_unit addweapon "NVGoggles";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addweapon "M4A1_AIM_SD_camo";
_unit addmagazine "Handgrenade";
_unit addmagazine "Handgrenade";
_unit addmagazine "Handgrenade";
};
ASSO-Loki
9. August 2009, 07:03
Hallo,
Ach habe den anderen Thread in Bezug auf das selbe Thema schon gelesen. Aber ich verstehe Teile der genutzen Befehle und ihre Funktion nicht. Und ich baue nicht gerne Sachen ein die ich nicht verstehe.
Gruß, Phil
Lord hat Dir ja eigentlich eine Lösung in Deinem Sinn erstellt. Ich stelle Dir nun eine Alternative zu if-then vor, die sich für eine solche Aufgabe anbietet. Die switch - do - case Abfrage. eingedeutscht: wechsle - zu - Auswahl.
Du hast eine Variable (_unit) welche verschiedene Werte annehmen kann (Teammitglieder). Diese Variable übergibst Du nun in runden Klammern an switch (_unit) do. Nach do muss eine geschweifte Klammer hin und ganz am Ende muss das do wieder mit einer geschweiften Klammer - gefolgt vom obligatorischen Strichpunkt - abgeschlossen werden.
Dann folgen die case- Blöcke. Für jedes mögliche Teammitglied erstellst Du nun einen solchen Block. Er beginnt mit case unitname: gefolgt von einer geschweiften Klammer, den gewünschten Anweisungen und einer abschliessenden geschweiften Klammer und Strichpunkt. Am Ende kann man einen Default-Block setzen, welcher ausgeführt wird, wenn der Wert der Variabel mit keinem Case übereinstimmt (neues Teammitglied, für welche Du noch keinen Case-Block erstellt hast). Den default- Block kann man aber auch weglassen. Der default-Block unterscheidet sich auch vom case Block, weil er keinen Doppelpunkt benötigt.
Hier das Beispiel dazu:
_unit = _this select 0;
switch (_unit) do
{
case chef:
{
removeallWeapons _unit;
_unit addweapon "Binocular";
_unit addweapon "NVGoggles";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addweapon "M4A1_AIM_SD_camo";
_unit addmagazine "Handgrenade";
_unit addmagazine "Handgrenade";
_unit addmagazine "Handgrenade";
};
case koch:
{
removeallWeapons _unit;
_unit addweapon "Binocular";
_unit addweapon "NVGoggles";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addweapon "M4A1_AIM_SD_camo";
_unit addmagazine "Handgrenade";
_unit addmagazine "Handgrenade";
_unit addmagazine "Handgrenade";
};
case didel:
{removeallWeapons _unit;
_unit addweapon "Binocular";
_unit addweapon "NVGoggles";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addmagazine "30Rnd_556x45_StanagSD";
_unit addweapon "M4A1_AIM_SD_camo";
_unit addmagazine "Handgrenade";
_unit addmagazine "Handgrenade";
_unit addmagazine "Handgrenade";
};
default {};
};
counthash
10. August 2009, 01:37
Hallo und erstmal vielen Dank für die schnelle Antwort. Hatte heute leider kaum Zeit die Varianten auszuprobieren lediglich die if habe ich zeitlich noch geschafft. Morgen gehe ich dann nochmal bei und versuche die case Anweisung. Allerdings geht es grundsätzlich mit der alive chef Bedingung ganz wunderbar. Merkwürdig ist nur dass die Waffe nicht sofort nutzbar ist. Ich habe dann die Zeile _unit selectweapon (primaryWeapon _unit); eingefügt, dass hat geholfen.
Gruß, Phil
ASSO-Loki
10. August 2009, 18:18
Merkwürdig ist nur dass die Waffe nicht sofort nutzbar ist. Ich habe dann die Zeile _unit selectweapon (primaryWeapon _unit); eingefügt, dass hat geholfen.
Das ist nicht merkwürdig, sondern normal. Du hast das Problem aber genau richtig gelöst. Es gibt mindestens zwei G36-Varianten, bei denen es dann trotzdem so nicht funktionieren wird und man halt zuerst mal die "F"-Taste zum wählen eines Feuermodus drücken muss. Zudem funktioniert "primaryweapon" natürlich nur wenn die Einheit auch eine primäre Waffe hat. Hat die Einheit nur einen Werfer oder eine Pistole, muss man halt auch wieder erst "F" drücken.
Selbstverständlich gibt es Möglichkeiten alle diese Kleinigkeiten auch noch im Script zu lösen, aber das ist halt nicht ganz "Anfängerfreundlich".
vBulletin® v3.8.7, Copyright ©2000-2012, vBulletin Solutions, Inc.