KI soll Waffe senken

  • Wahrscheinlich ist die Lösung ganz einfach...
    Wie kann ich die KI die Waffe senken lassen...

    Ach jaaa, in der Init Zeile der Einheit steht folgendes:


    this disableAI "move";
    comment "Remove existing items";
    removeAllWeapons this;
    removeAllItems this;
    removeAllAssignedItems this;
    removeUniform this;
    removeVest this;
    removeBackpack this;
    removeHeadgear this;
    removeGoggles this;
    comment "Add containers";
    this forceAddUniform "U_B_CTRG_Soldier_2_F";
    for "_i" from 1 to 3 do {this addItemToUniform "9Rnd_45ACP_Mag";};
    this addHeadgear "H_Cap_oli";
    comment "Add weapons";
    this addWeapon "hgun_ACPC2_F";
    this addWeapon "Binocular";
    comment "Add items";
    this linkItem "ItemMap";
    this linkItem "ItemCompass";
    this linkItem "ItemWatch";
    this linkItem "ItemRadio";
    this linkItem "ItemGPS";

  • Wenn du auf die "Fahne" über der Einheit doppelklickst kannst du in 3Den sogar das Verhalten "sicher" also Behaviour "safe" direkt im Editor einstellen.


    Ich kann dir auch ans Herz legen, die Einheit direkt in 3Den umzuziehen. Rechtsklick auf die Einheit, "Edit Loadout" =) Dann ist dein Init-Feld frei von Befehlen und alles wird "Multiplayer-sicher" direkt in die Mission reingeschrieben.


    Hoffe, ich konnte dir weiterhelfen.


    LG


    Ben.

  • Warum, wenn scon Animationen, nicht die BIS Funktion nutzen? https://community.bistudio.com/wiki/BIS_fnc_ambientAnim
    Pistolen werden nicht gesenkt! Pistole weg und Gewehr in die Hand drücken, das klappt


    Hier mal der gute alte Schranken Trigger mit Animation der Wache (ist aus meiner Bornhomserie und klappt auf dem Dedi)- Vielleicht gefällt dir das Ergebnis.
    Trigger im Bereich der Schranke platzieren. Vorhanden/Mehrfach.
    -->Schranke als Schranke bezeichnen und die Puppe als Wache.


    Bei Aktivierung:

    Code
    1. schranke animate ["Door_1_rot",1]; wache switchMove "AmovPercMstpSnonWnonDnon_Salute"; wache disableAI "ANIM";

    Bei De-Aktivierung:

    Code
    1. schranke animate ["Door_1_rot",0]; wache playMove "AmovPercMstpSnonWnonDnon_SaluteOUT"; wache enableAI "ANIM";
  • Warum schwer machen, wenn es auch einfach geht ? ^^


    noch ein kleiner Nachtrag:
    Wenn die Animation im MP genutzt werden sollte, dann nutze bitte folgendes (damit das ganze dann auch funktioniert):
    [this, "AidlPercMstpSlowWpstDnon_AI"] remoteExec ["switchMove", 0, true];


    Alternativ würde ich der KI auch eine normale Waffe geben und dann das Bsp. von Drunken Officer nutzen (sieht halt einfach toll aus :thumbup: ).

    "You only live once
    But if you do it right
    Once is enough"

  • Ich würde noch folgendes hinzufügen, weil sonst die Einheit im toten Zustand immer wieder aufsteht und die Animation "teilweise" abspielt, bis sie wieder stirbt... ;)


    Bei Aktivierung:


    Code
    1. schranke01 animate ["Door_1_rot",1];
    2. if (alive wache01) then {
    3. wache01 switchMove "AmovPercMstpSnonWnonDnon_Salute"
    4. };
    5. wache01 disableAI "ANIM";

    Bei Deaktivierung wird auch einfach nur das aus dem Zitat genommen und mit "if bestückt"

  • Aber nicht wenn er es im Trigger hat! Den Trigger kennt jeder, damit sieht jeder den Effekt. RemoteExec bitte nur benutzen, wenn der Befehl auf einem Clienten oder dem SErver ausgeführt wird, es aber public werden muss.


    ... da scheint wohl jemand was falsch verstanden zu haben und/oder ich hab mich etwas zu "schwammig" ausgedrückt ...
    Der "Nachtrag" war auf meine Antwort davor bezogen, nicht auf deine "Trigger"-Lösung.
    Und um das nochmal richtig zu stellen, das was du da gesagt hast war nicht falsch (zumindest auf einen Trigger bezogen) ABER wenn man den Befehl in das Init-Feld einer Einheit einfügt, dann sollte man bei der Benutzung von switchMove den remoteExec (früher: BIS_fnc_mp) Befehl nutzen.


    Wenn man dies nicht macht, dann wird im MP wahrscheinlich keiner (außer dem Server) die Animation sehen. Und das ist ja auch nicht Sinn der Sache.

    "You only live once
    But if you do it right
    Once is enough"

  • Die Init-Box vom Editor wird auf allen Maschinen ausgeführt. Da gehört kein remoteExec hin.
    Allerdings funktioniert switchMove während der Initialisierungsphase des Soldatenobjektes auch nicht.
    Mit remoteExec könnte man das Umgehen, da mit Netwerkverzögerung alle anderen verbundenen Maschinen zu allen anderen verbunden Maschinen mit n^2-Aufwand den Befehl schicken, aber wesentlich effizienter wäre es, wenn man das einfach mit einem spawn-Befehl verzögert.

  • Die Init-Box vom Editor wird auf allen Maschinen ausgeführt. Da gehört kein remoteExec hin.

    Ja und sie wird nun beim Initialisieren ausgeführt. Folglich sind Clients welche nachträglich (JIP) in dem Spiel beitreten davon ausgeschlossen. Da findet zb. remoteExec Anwendung um das zu umgehen.
    Wenn es da noch andere Möglichkeiten gibt, dann immer raus damit :)



    Allerdings funktioniert switchMove während der Initialisierungsphase des Soldatenobjektes auch nicht.

    Also kurz gesagt: switchMove funktioniert nicht ,wenn man es via das Init-Feld nutzt? Das stimmt dann aber auch nicht.
    Ich glaub da verstehe ich etwas falsch. Könntest du das bitte etwas genauerer erklären?

    "You only live once
    But if you do it right
    Once is enough"

  • Ja und sie wird nun beim Initialisieren ausgeführt. Folglich sind Clients welche nachträglich (JIP) in dem Spiel beitreten davon ausgeschlossen. Da findet zb. remoteExec Anwendung um das zu umgehen.

    Das ist falsch. Jedes Objekt muss auf jeder Maschine auf der es existiert initialisiert werden. Es spielt dabei keine Rolle, ob das Objekt lokal oder "remote" ist. Das kann man mit einem einfachen "diag_log this" in der Init-Box nachprüfen. Auf der JIP-Maschine wird das Objekt logischerweise erst nach dem Verbinden mit dem Server ("joinen") initialisiert.


    Also kurz gesagt: switchMove funktioniert nicht ,wenn man es via das Init-Feld nutzt? Das stimmt dann aber auch nicht.Ich glaub da verstehe ich etwas falsch. Könntest du das bitte etwas genauerer erklären?

    Es wird nicht funktionieren, das haben andere schon ausprobiert. Es gibt ein paar dieser Befehle. setSpeaker zum Beispiel. Warum es nicht geht - dafür gibt es keinen wirklichen Grund. Vielleicht setzt das Spiel die erste Animation erst nach dem Ausführen der Init-Box? Wer weiß.


    Benutzt man spawn oder remoteExec, dann verlässt man den Scope der Init-Box und startet einen Pseudo-Thread, der vom Scheduler ausgeführt wird. Das passiert dann frühestens einen Frame nach dem Ausführen des spawn bzw. remoteExec-Befehls. Das reicht für die meisten Befehle wie setSpeaker oder switchMove schon, um mit frisch erstellten Objekten zu funktionieren.

  • es funktioniert im Init-Feld, aber mit einem kleinen Umweg. Wie ich bereits schrieb, remoteExec ist Quatsch, weil jeder Kenntnis von dem Trigger hat
    Kannst du mit sideChat probieren. Normalerweise nur auf den Client. Pack es in den Trigger und jeder sieht's.


    Das switchmove Ding kannst du lösen mit
    Ver=this spawn { sleep 1; this switchmove "...." }


    Oder wenn du mehrere Personen hast, einen Trigger setzen und eine Zeitverzögerung einbauen. Aus diesem heraus die Animation ausführen. Jeder kennt den Trigger, jeder sieht es. Nachteil ist, die Sache ist nicht JIP günstig. Kommt einer nach, führt er den Trigger erneut aus. Sollte man eh im Hinterkopf behalten, diesen JIP Effekt bei Triggern