Results 1 to 9 of 9

Thread: Wer hat wen getroffen ?

  1. #1
    Supporting Member varrattu's Avatar
    Join Date
    Aug 2012
    Posts
    285
    Post Thanks / Like
    Total Downloaded
    192.44 MB

    Wer hat wen getroffen ?

    Hallo liebe Freunde und Förderer gepflegter Flugkunststücke,

    der kurzweilige Sommer ist Geschichte und wir haben wieder Zeit für sinnlose Freizeitbeschäftigungen zum Beispiel: IL2 Cliffs of Dover...

    Vielleicht passt dazu dieses kleine Script für Single-Player Missionen. DUI, Ihr kennt DUI vom JG4, hatte die Idee dazu.

    Also. Jedes Mal, wenn Ihr oder eure Crew-Mitglieder mit MG oder Kanone ein anderes Flugzeug trefft, bekommt Ihr im Server-Info Fenster so eine Meldung:

    (Blenheim IV) getroffen von (Pilot) in (Bf 109 E-4/N), Entfernung: (151m), insgesamt [79] Treffer

    Das Script funktioniert mit jeder Single-Player Mission.

    Kopiert den Code in eine Textdatei, unformatiert, Endung .txt, speichert die Datei.
    Bennent die Datei um und übernehmt den Namen der Single-Mission Datei.
    Ändert die Dateiendung *.txt in *cs
    Verschiebt die cs-Datei in den Ordner der Eure Mission enthält.
    Die SinglePlayer Missionen findet Ihr im Order

    ....\Documents\1C SoftClub\il-2 sturmovik cliffs of dover\missions\Single

    Beispiel: Wenn die Datei mit der Mission <BomberInterceptShips.ms> laufen soll heisst heisst die neue Script-Datei <BomberInterceptShips.cs>.

    Für die Trefferanzeige muss das Server-Info Fenster aktiviert sein. Wollt Ihr Eure Treffer für die Ewigkeit konservieren, dann aktiviert in der

    conf.ini
    LOG=0 in LOG=1
    LOGFILE=log.txt
    LOGKEEP=0 // überschreibt log.txt mit Beginn der nächsten Single-Player Mission
    LOGKEEP=1 // erweitert log.txt mit jeder neuen Mission.

    Viel Spass beim Testen...

    ~V~

    Code:
    /// @author Varrattu
    /// @version 1.0
    /// @date 2019-11-20
    
    using maddox.game;
    using maddox.game.world;
    using maddox.GP;
    using part;
    
    public class Mission : AMission
    {
        int Hits = 0;
    
        public override void OnAircraftDamaged(
        int missionNumber,
        string shortName,
        AiAircraft aircraft,
        AiDamageInitiator DamageFrom,
        part.NamedDamageTypes WhatDamaged)
        {
            base.OnAircraftDamaged(missionNumber, shortName, aircraft, DamageFrom, WhatDamaged);
    
            if ((DamageFrom.Player != null) && (aircraft != DamageFrom.Actor))
            {
                ShowDamgeEvent((DamageFrom.Actor as AiAircraft), (DamageFrom.Person as AiPerson), aircraft);
            }
        }
    
        public override void OnAircraftLimbDamaged(
            int missionNumber,
            string shortName,
            AiAircraft aircraft,
            AiLimbDamage limbDamage)
        {
    
            base.OnAircraftLimbDamaged(missionNumber, shortName, aircraft, limbDamage);
    
            if ((limbDamage.Initiator.Player != null) && (aircraft != limbDamage.Initiator.Actor))
            {
                ShowDamgeEvent((limbDamage.Initiator.Actor as AiAircraft), (limbDamage.Initiator.Person as AiPerson), aircraft);
            }
        }
    
        public override void OnAircraftCutLimb(
            int missionNumber,
            string shortName,
            AiAircraft aircraft,
            AiDamageInitiator initiator,
            LimbNames limbName)
        {
    
            base.OnAircraftCutLimb(missionNumber, shortName, aircraft, initiator, limbName);
    
            if ((initiator.Player != null) && (aircraft != initiator.Actor))
            {
                ShowDamgeEvent((initiator.Actor as AiAircraft), (initiator.Person as AiPerson), aircraft);
            }
        }
    
        public override void OnPersonHealth(
            AiPerson person,
            AiDamageInitiator initiator,
            float deltaHealth)
        {
    
            base.OnPersonHealth(person, initiator, deltaHealth);
    
            if ((initiator.Player != null)
                && (person != initiator.Actor)
                && (person != initiator.Person))
            {
                Hits++;
                GamePlay.gpLogServer(
                   null,
                   "\n" +
                   "({0}) getroffen von " +
                   "({1}) in " +
                   "({2}), " +
                   "insgesamt [{3}] Treffer" +
                   "\n",
                   new object[] {
                    person,
                    initiator.Person,
                    initiator.Actor,
                    Hits
                   }
                   );
            }
        }
    
        public void ShowDamgeEvent(AiAircraft playerAircraft, AiPerson person, AiAircraft targetAircraft)
        {
            Point3d playerAircraftPoint3d = playerAircraft.Pos();
            Point3d targetAircraftPoint3d = targetAircraft.Pos();
    
            Hits++;
    
            GamePlay.gpLogServer(
                    null,
                    "\n" +
                    "({0}) getroffen " +
                    "von ({1}) " +
                    "in ({2}), " +
                    "Entfernung: ({3}m), " +
                    "insgesamt [{4}] Treffer" +
                    "\n",
                    new object[] {
                    targetAircraft,
                    person,
                    playerAircraft,
                    string.Format("{0:0}", DistanceP2P3d(playerAircraftPoint3d, targetAircraftPoint3d)),
                    Hits
                    }
                    );
        }
    
        ///  Find the Distance Between Two Points
        public double DistanceP2P3d(Point3d pointA, Point3d pointB)
        {
    
            double d = pointA.distance(ref pointB); return d;
        }
    }
    Last edited by varrattu; Nov-20-2019 at 19:50.
    "... Nützt nichts zu drängeln. Es geht ja weiter wie man lesen kann. ..."
    (JG2Funkmech, Dec-10-2019)

  2. #2
    Supporting Member DUI's Avatar
    Join Date
    Nov 2012
    Location
    Germany
    Posts
    1,416
    Post Thanks / Like
    Total Downloaded
    0

    Re: Wer hat wen getroffen ?

    Hallo varrattu,

    schon einmal vielen Dank für das Skript!

    Ich habe mir eine kleine Single Player-Mission im Mission Builder gebaut, in der die KI-Bordschützen einer vom Spieler gesteuerten Heinkel auf eine langsam vorbeifliegende Hurricane schießen können. In diesem Fall werden die Treffer leider nicht gezählt.

    Sobald ich die Heinkel jedoch durch eine vom Spieler zu fliegende 109 ersetze und als Pilot auf die Hurricane schieße, klappt es hingegen einwandfrei. Ich kann im Anschluss wunderschön im Log-File sehen, wann ich getroffen habe.

    Ganz spannend wäre jetzt auch noch zu wissen, was ein ermittelter "Treffer" genau aussagt:
    - entspricht 1 im Log-File erfasster Treffer 1 Kugel, die die Feindmaschine getroffen hat, oder...
    - kann es auch sein, dass 1 Kugel mehrere Komponenten der Feindmaschine beschädigt und dann 1, 2, 3,... Treffer von dieser spezifischen Kugel erfasst werden.

    Viele Grüße
    DUI

  3. #3
    Supporting Member varrattu's Avatar
    Join Date
    Aug 2012
    Posts
    285
    Post Thanks / Like
    Total Downloaded
    192.44 MB

    Re: Wer hat wen getroffen ?

    Quote Originally Posted by DUI View Post
    ... Ich habe mir eine kleine Single Player-Mission im Mission Builder gebaut, in der die KI-Bordschützen einer vom Spieler gesteuerten Heinkel auf eine langsam vorbeifliegende Hurricane schießen können. In diesem Fall werden die Treffer leider nicht gezählt.

    Sobald ich die Heinkel jedoch durch eine vom Spieler zu fliegende 109 ersetze und als Pilot auf die Hurricane schieße, klappt es hingegen einwandfrei....
    DUI
    Danke DUI, da hast Du mich erwischt Grundsätzlich werden die Schadenereignisse immer dann aktiv wenn irgendein Flugzeug, egal ob Freund oder Feind, beschädigt wird. Vermutlich auch durch FLAK, habe ich nicht getestet. Egal.

    Um dieses Feuerwerk von Schadenereignissen zu ordnen habe ich Bedingungen formuliert... und Deine Crew "ausgesperrt" mit <if (DamageFrom.Player != null>.

    Dieses Script sollte jetzt aber funktionieren.

    ~V~

    Code:
    /// @author Varrattu
    /// @version 1.10
    /// @date 2019-11-22
    
    using maddox.game;
    using maddox.game.world;
    using maddox.GP;
    using part;
    
    public class Mission : AMission
    {
        int Hits = 0;
    
        public override void OnAircraftDamaged( int missionNumber, string shortName, AiAircraft aircraft, AiDamageInitiator DamageFrom, part.NamedDamageTypes WhatDamaged)
        {
            base.OnAircraftDamaged(
                missionNumber, 
                shortName, aircraft, 
                DamageFrom, 
                WhatDamaged
            );
    
            if (aircraft != (AiAircraft)GamePlay.gpPlayer().Place()
                && (aircraft != DamageFrom.Actor))
            {
                ShowDamgeEvent((DamageFrom.Actor as AiAircraft), (DamageFrom.Person as AiPerson), aircraft);
            }
        }
    
        public override void OnAircraftLimbDamaged( int missionNumber, string shortName, AiAircraft aircraft, AiLimbDamage limbDamage)
        {
            base.OnAircraftLimbDamaged(
                missionNumber, 
                shortName, 
                aircraft, limbDamage
            );
    
            if (aircraft != (AiAircraft)GamePlay.gpPlayer().Place()
                && (aircraft != limbDamage.Initiator.Actor))
            {
                ShowDamgeEvent((limbDamage.Initiator.Actor as AiAircraft), (limbDamage.Initiator.Person as AiPerson), aircraft);
            }
        }
    
        public override void OnAircraftCutLimb( int missionNumber, string shortName, AiAircraft aircraft, AiDamageInitiator initiator, LimbNames limbName) {
    
            base.OnAircraftCutLimb(
                missionNumber, 
                shortName, 
                aircraft, 
                initiator, 
                limbName);
    
            if (aircraft != (AiAircraft)GamePlay.gpPlayer().Place()
                && (aircraft != initiator.Actor))
            {
                ShowDamgeEvent((initiator.Actor as AiAircraft), (initiator.Person as AiPerson), aircraft);
            }
        }
    
        public override void OnPersonHealth( AiPerson person, AiDamageInitiator initiator, float deltaHealth) {
    
            base.OnPersonHealth(
                person, 
                initiator, 
                deltaHealth
            );
    
            if (initiator.Actor == (AiAircraft)GamePlay.gpPlayer().Place()
                && person.Cart() != initiator.Actor)
            {
                Hits++;
                GamePlay.gpLogServer(
                   null,
                   "({0}) in " +
                   "({1}) getroffen von " +
                   "({2}) in " +
                   "({3}), " +
                   "insgesamt [{4}] Treffer" +
                   "\n",
                   new object[] {
                    person,
                    person.Cart(),
                    initiator.Person,
                    initiator.Actor,
                    Hits
                   }
                   );
            }
        }
    
        public void ShowDamgeEvent( AiAircraft playerAircraft, AiPerson person, AiAircraft targetAircraft) {
    
            Point3d playerAircraftPoint3d = playerAircraft.Pos();
            Point3d targetAircraftPoint3d = targetAircraft.Pos();
    
            Hits++;
    
            GamePlay.gpLogServer(
                    null,
                    "({0}) getroffen " +
                    "von ({1}) " +
                    "in ({2}), " +
                    "Entfernung: ({3}m), " +
                    "insgesamt [{4}] Treffer" +
                    "\n",
                    new object[] {
                    targetAircraft,
                    person,
                    playerAircraft,
                    string.Format("{0:0}", DistanceP2P3d(playerAircraftPoint3d, targetAircraftPoint3d)),
                    Hits
                    }
                    );
        }
    
        ///  Find the Distance Between Two Points
        public double DistanceP2P3d(Point3d pointA, Point3d pointB) {
    
            double d = pointA.distance(ref pointB); return d;
        }
    }
    Last edited by varrattu; Nov-22-2019 at 18:29.
    "... Nützt nichts zu drängeln. Es geht ja weiter wie man lesen kann. ..."
    (JG2Funkmech, Dec-10-2019)

  4. #4
    Supporting Member varrattu's Avatar
    Join Date
    Aug 2012
    Posts
    285
    Post Thanks / Like
    Total Downloaded
    192.44 MB

    Re: Wer hat wen getroffen ?

    Quote Originally Posted by DUI View Post
    - kann es auch sein, dass 1 Kugel mehrere Komponenten der Feindmaschine beschädigt und dann 1, 2, 3,... Treffer von dieser spezifischen Kugel erfasst werden.
    DUI
    Ich vermute, dass 1 Geschoss mehrere Schadenereignisse auslösen kann.

    ~V~
    "... Nützt nichts zu drängeln. Es geht ja weiter wie man lesen kann. ..."
    (JG2Funkmech, Dec-10-2019)

  5. #5
    Supporting Member DUI's Avatar
    Join Date
    Nov 2012
    Location
    Germany
    Posts
    1,416
    Post Thanks / Like
    Total Downloaded
    0

    Re: Wer hat wen getroffen ?

    Sehr goil varrattu! Wird bei nächster Gelegenheit intensiv getestet.

    Edit: Jetzt klappt es mit den eigenen KI-Bordschützen!
    Last edited by DUI; Nov-22-2019 at 19:51.

  6. #6
    Manual Creation Group ATAG_Noofy's Avatar
    Join Date
    Feb 2019
    Location
    Zulu +2
    Posts
    737
    Post Thanks / Like
    Total Downloaded
    771.83 MB

    Re: Wer hat wen getroffen ?

    Danke varratu für dieses fantastische Script.
    Getestet in einem G50.
    Es funktioniert tip top
    Gigabyte Z390 UD | i7 9700K @3.60GHz | 16.0 GB | Windows 10 Pro 64-Bit | NVIDIA GeForce GTX 1070 Ti
    T16000M FCS HOTAS | CH_PRO Pedals | TrackIR 5 | TeamSpeak 3.3.0 | TS Notifier 1.6.0h

  7. #7
    Supporting Member DUI's Avatar
    Join Date
    Nov 2012
    Location
    Germany
    Posts
    1,416
    Post Thanks / Like
    Total Downloaded
    0

    Re: Wer hat wen getroffen ?

    varrattu, wenn ich mich nicht irre, meintest du, dass man sogar erfassen kann, welcher Bordschütze getroffen hat. Wäre das noch möglich?

    Im Moment heißt es bei allen Bordschützen "Gunner".

  8. #8
    Supporting Member varrattu's Avatar
    Join Date
    Aug 2012
    Posts
    285
    Post Thanks / Like
    Total Downloaded
    192.44 MB

    Re: Wer hat wen getroffen ?

    Moin DUI,
    daran "bastele" ich gerade. Gib' mir noch ein paar Minuten Zeit.

    ~V~


    Quote Originally Posted by DUI View Post
    varrattu, wenn ich mich nicht irre, meintest du, dass man sogar erfassen kann, welcher Bordschütze getroffen hat. Wäre das noch möglich?

    Im Moment heißt es bei allen Bordschützen "Gunner".
    "... Nützt nichts zu drängeln. Es geht ja weiter wie man lesen kann. ..."
    (JG2Funkmech, Dec-10-2019)

  9. #9
    Supporting Member varrattu's Avatar
    Join Date
    Aug 2012
    Posts
    285
    Post Thanks / Like
    Total Downloaded
    192.44 MB

    Re: Wer hat wen getroffen ?

    Also ...

    He111H-2 und He111P-2 unterscheiden im aktuell vorliegenden patch 4.57 die Positionen Pilot, Bombmardier u. Gunner.

    In Ju88A-1 und BR.20M sind die Informationen genauer.

    ~V~


    (He 111 H-2).CrewFunctionPlace(0/8): ( Pilot )
    (He 111 H-2).CrewFunctionPlace(1/8): ( Bombardier )
    (He 111 H-2).CrewFunctionPlace(2/8): ( Gunner )
    (He 111 H-2).CrewFunctionPlace(3/8): ( Gunner )
    (He 111 H-2).CrewFunctionPlace(4/8): ( Gunner )
    (He 111 H-2).CrewFunctionPlace(5/8): ( Gunner )
    (He 111 H-2).CrewFunctionPlace(6/8): ( Gunner )
    (He 111 H-2).CrewFunctionPlace(7/8): ( Gunner )

    (He 111 P-2).CrewFunctionPlace(0/7): ( Pilot )
    (He 111 P-2).CrewFunctionPlace(1/7): ( Bombardier )
    (He 111 P-2).CrewFunctionPlace(2/7): ( Gunner )
    (He 111 P-2).CrewFunctionPlace(3/7): ( Gunner )
    (He 111 P-2).CrewFunctionPlace(4/7): ( Gunner )
    (He 111 P-2).CrewFunctionPlace(5/7): ( Gunner )
    (He 111 P-2).CrewFunctionPlace(6/7): ( Gunner )


    (BR.20M).CrewFunctionPlace(0/7): ( Pilot )
    (BR.20M).CrewFunctionPlace(1/7): ( CoPilot )
    (BR.20M).CrewFunctionPlace(2/7): ( Bombardier )
    (BR.20M).CrewFunctionPlace(3/7): ( NoseGunner )
    (BR.20M).CrewFunctionPlace(4/7): ( TopGunner )
    (BR.20M).CrewFunctionPlace(5/7): ( Observer )
    (BR.20M).CrewFunctionPlace(6/7): ( VentralGunner )

    (Ju 88 A-1).CrewFunctionPlace(0/5): ( Pilot )
    (Ju 88 A-1).CrewFunctionPlace(1/5): ( Bombardier )
    (Ju 88 A-1).CrewFunctionPlace(2/5): ( NoseGunner )
    (Ju 88 A-1).CrewFunctionPlace(3/5): ( TopGunner )
    (Ju 88 A-1).CrewFunctionPlace(4/5): ( VentralGunner )

    (Blenheim IV).CrewFunctionPlace(0/3): ( Pilot )
    (Blenheim IV).CrewFunctionPlace(1/3): ( Bombardier )
    (Blenheim IV).CrewFunctionPlace(2/3): ( Gunner )

    (Beaufighter IF).CrewFunctionPlace(0/2): ( Pilot )
    (Beaufighter IF).CrewFunctionPlace(1/2): ( Bombardier )

    (Bf 110 C-2).CrewFunctionPlace(0/2): ( Pilot )
    (Bf 110 C-2).CrewFunctionPlace(1/2): ( Gunner )

    (Ju 87 B-2).CrewFunctionPlace(0/2): ( Pilot )
    (Ju 87 B-2).CrewFunctionPlace(1/2): ( Gunner )
    "... Nützt nichts zu drängeln. Es geht ja weiter wie man lesen kann. ..."
    (JG2Funkmech, Dec-10-2019)

  10. Likes ATAG_Noofy liked this post

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •