AviaSkins.Forums

AviaSkins.Forums (http://forum.aviaskins.com/index.php)
-   W.I.P. (http://forum.aviaskins.com/forumdisplay.php?f=48)
-   -   "Лучше хоть что-то, чем ничего" (http://forum.aviaskins.com/showthread.php?t=4195)

Molva 22.09.2025 20:24

Вложений: 1

Molva 08.10.2025 19:34

Вложений: 1

Экипаж три человека. А с парашютами выпрыгивают только двое. Почему?

Asura 09.10.2025 09:46

Цитата:

Сообщение от Molva (Сообщение 232392)
[CENTER]Экипаж три человека. А с парашютами выпрыгивают только двое. Почему?

В файле FM сколько прописано?

Код:

Type      2
Crew      4
Wingspan  20.60
Length    13.13


fdelre 09.10.2025 10:21

two could have been killed before being able to bail out

двое могли погибнуть, не успев катапультироваться

Molva 09.10.2025 10:49

Цитата:

Сообщение от Asura (Сообщение 232394)
В файле FM сколько прописано?

Три.

CrewFunction0 1
CrewFunction1 2
CrewFunction2 3

snd-73 09.10.2025 11:20

Хуков тоже должно быть три, я с этим сталкивался.

Molva 09.10.2025 13:47

Хуков тоже три.

snd-73 09.10.2025 15:04

По номерам 01, 02, 03, опечатки нет?

Molva 09.10.2025 17:28

Опечаток нет

_ExternalBail01
_ExternalBail02
_ExternalBail03

snd-73 09.10.2025 20:26

Олег, извини, но на скриншоте пост 1267 не видно третьего члена экипажа, он там есть?

Molva 09.10.2025 22:36

Там ещё не было. С тех пор прошел месяц.

Asura 10.10.2025 08:37

Цитата:

Сообщение от Molva (Сообщение 232396)
Три.

CrewFunction0 1
CrewFunction1 2
CrewFunction2 3

Именно в строке "Crew 4" - сколько?

CrewFunction влияет только на название кабины куда пересаживаешься. Количество определяет параметр "Crew"

Molva 10.10.2025 16:16

Цитата:

Сообщение от Asura (Сообщение 232408)
Именно в строке "Crew 4" - сколько?

G-37.fmd
Код:

[Aircraft]     
  Type 2       
  Crew 3       
  Wingspan 28.813
  Length 19.75 
  Seaplane 0   
  Canard 0     
  Jet 0         
  JetHiV 0     
  CrewFunction0 1
  CrewFunction1 2
  CrewFunction2 3


Asura 11.10.2025 10:14

Тогда надо глубже в код класса смотреть. Нет ли в классах чего нибудь со словом "Bailout"? Парашютистами можно управлять через процедуры класса. Еще вариант просто все перепроверить в названиях хуков и пилотов - возможно просто опечатка. И посмотреть на самолет после прыжка - все кабины пустые или где то фигурка осталась?

Molva 11.10.2025 11:48

Цитата:

Сообщение от Asura (Сообщение 232414)
Нет ли в классах чего нибудь со словом "Bailout"?

Нет.
Цитата:

Еще вариант просто все перепроверить в названиях хуков и пилотов - возможно просто опечатка.
Перепроверил.
Цитата:

И посмотреть на самолет после прыжка - все кабины пустые или где то фигурка осталась?
Кабины пустые. Первый выпрыгивает. Второй пропадает. Третий выпрыгивает.

Переключение только между двумя кабинами. Первый пилот - носовой стрелок.

Pumping_Noise 11.10.2025 14:05

Вложений: 1
:DONT_KNOW:

Molva 11.10.2025 17:10

Цитата:

Сообщение от Pumping_Noise (Сообщение 232419)
:DONT_KNOW:

Красивые картинки. Но каким боком здесь Су-25?

2wildcat3 11.10.2025 17:43

Цитата:

Сообщение от Molva (Сообщение 232421)
Красивые картинки. Но каким боком здесь Су-25?

Олег,ты выше просил фото шасси МиГ-25.Может ответ на твою просьбу.....нууу немного не тот;)

Asura 13.10.2025 09:20

Цитата:

Сообщение от Molva (Сообщение 232415)
Кабины пустые. Первый выпрыгивает. Второй пропадает. Третий выпрыгивает.

Переключение только между двумя кабинами. Первый пилот - носовой стрелок.

Кабины тут не причем... Выложи куда нибудь мод с исходниками классов и ФМ - посмотрю где косяк.

Asura 15.10.2025 17:41

Вложений: 1
Как то так...

Molva 21.10.2025 20:48

Вложений: 1
Гроховский Г-37 WIP



https://disk.yandex.ru/d/RAUb13V7oojpJQ

air.ini
G-37 air.G_37 1 NOINFO r01 SUMMER

Спасибо всем, помогавшим словом и делом.
Отдельное спасибо Дмитрию 'Asura' Шабанову.

fdelre 21.10.2025 21:55

Air.ini?

Vasya 21.10.2025 23:23

Цитата:

Сообщение от Molva (Сообщение 232474)

У нас не скачивается, забанено. :cry:
Может кто положит на гугл-диск???

Toobone 21.10.2025 23:36

Цитата:

Сообщение от Vasya (Сообщение 232476)
У нас не скачивается, забанено. :cry:
Может кто положит на гугл-диск???

https://dropmefiles.com.ua/ua/fhH7MW8

злой 22.10.2025 03:38

Спасибо Олег!

andrey65 22.10.2025 04:30

Красота!

andrey65 22.10.2025 14:36

Вложений: 9
Это нечто! Подвесную кабину сбросить не смог))

Molva 23.10.2025 09:51

Что надо сделать для передачи управления второму пилоту? И чтобы он выполнял функции бомбардира.

Asura 23.10.2025 12:42

Сделать класс кабины бомбардира, в кабине пилота передвинуть камеру на место второго пилота и новый хир хим прицепить в класс кабины бомбардира. Я обычно делаю копию Body (камеры чаще всего именно к этому мешу зацеплены), обзываю например BodyB. В новом меше делаю нужные камеры. Делаю копию хир хим типа hierB.him, внутри переобзываю мешь Body

[Body]
Mesh BodyB

и в классе кабины бомбардира указываю hierB.him. Вобщем то все. Сам класс повторяет класс пилота только в секцию статик надо добавить:

Property.set(CLASS.THIS(), "astatePilotIndx", 1);
Property.set(CLASS.THIS(), "aiTuretNum", BOMBARDIER_INDEX);
Property.set(CLASS.THIS(), "weaponControlNum", 3);

Ну и если класс под 4.13 и выше в начале класса

public class CockpitB_17G_Bombardier extends CockpitBombardier

Molva 24.10.2025 23:53

Цитата:

Сообщение от Asura (Сообщение 232489)
Сделать класс кабины бомбардира...

Спасибо за пояснения. Класс сделал, второй пилот появился. А вот бомбардир прицела не видит. Камера смотрит только вперед как ни крутил хук.

Asura 25.10.2025 11:16

Надо еще добавить обработку "прильнуть к прицелу":

Код:

    protected boolean doFocusEnter()
    {
        if(super.doFocusEnter())
        {
          HookPilot hook = HookPilot.cur();
          hook.doAim(false);
          Point3d p3d = new Point3d();
          p3d.set(0.15F, 0F, -0.10F);
          hook.setTubeSight(p3d);
         
          return true;
        }else {
          return false;
        }
    }
   
    protected void    doFocusLeave()
    {
            if(!isFocused()) return;
        leave();
        super.doFocusLeave();
    }

    private void prepareToEnter()
    {
        HookPilot hook = HookPilot.cur();
        if(hook.isPadlock())
          hook.stopPadlock();
        hook.doAim(true);
        hook.setSimpleAimOrient(0F,-33F,0F);
        enteringAim = true;
    }
     
    private void enter()
    {
        saveFov = Main3D.FOVX;
        CmdEnv.top().exec("fov "+saveBSFov);
        Main3D.cur3D().aircraftHotKeys.enableBombSightFov();
        HookPilot hook = HookPilot.cur();
        hook.setInstantOrient(aAim,tAim,0);
        hook.setSimpleUse(true);
        hook.setStabilizedBSUse(true);
        doSetSimpleUse(true);
        HotKeyEnv.enable("PanView",false);
        HotKeyEnv.enable("SnapView",false);
        bEntered = true;
    }
     
    private void leave()
    {
        if(enteringAim)
        {
          HookPilot hook = HookPilot.cur();
          hook.setInstantOrient(0F,-33F,0F);
          hook.doAim(false);
          hook.setSimpleAimOrient(0.0f, 0.0f, 0.0f);
          return;
        }
       
        if(!bEntered) return;
       
        saveBSFov = Main3D.FOVX;
        Main3D.cur3D().aircraftHotKeys.setEnableChangeFov(true);
        CmdEnv.top().exec("fov "+saveFov);
        HookPilot hook = HookPilot.cur();
        hook.setInstantOrient(0F,-33F,0F);
        hook.doAim(false);
        hook.setSimpleAimOrient(0,0,0);
        hook.setSimpleUse(false);
        hook.setStabilizedBSUse(false);
        doSetSimpleUse(false);
        boolean bEnable = HotKeyEnv.isEnabled("aircraftView");
        HotKeyEnv.enable("PanView",bEnable);
        HotKeyEnv.enable("SnapView",bEnable);
        bEntered = false;
    }
 
    public void destroy()
    {
          super.destroy();
          leave();
    }

    public void doToggleAim( boolean bToggleAim )
    {
        if(!isFocused()) return;
        if(isToggleAim() == bToggleAim) return;
        if(bToggleAim) prepareToEnter();
        else          leave();
    }

    public CockpitXXXXX_Bombardier()
    {
        super("3DO/Cockpit/XXXXX_Bombardier/hier.him", "bf109");   
       
        try {
            Loc l = new Loc();
            Hook hook = new HookNamed(mesh, "CAMERAAIM");
            hook.computePos(this,new Loc(),l);
            aAim = l.getOrient().getAzimut();
            tAim = l.getOrient().getTangage();
          }catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
          }
    }

Хук CAMERAAIM должен смотреть в меш прицела (вниз на сетку). Еслши прицел как то управляется то в в процедуре public void reflectWorldToInstruments(float delta) надо прописать код управления (просто взять из класса самолета где используется аналогичный).

Molva 25.10.2025 15:05

Цитата:

Сообщение от Asura (Сообщение 232492)
Надо еще добавить обработку "прильнуть к прицелу"

Добавил. Переключение к прицелу есть.
Цитата:

Хук CAMERAAIM должен смотреть в меш прицела (вниз на сетку).
CAMERAAIM смотрит всегда вперед, как не крутил хук.

andrey65 26.10.2025 12:52

У Г-37 фм от чего?

Molva 26.10.2025 13:16

Ли-2.

carsmaster 26.10.2025 23:02

Цитата:

Сообщение от Molva (Сообщение 232494)
CAMERAAIM смотрит всегда вперед, как не крутил хук.

Сам хук или его пивот крутить в меше бесполезно, хуки крутятся и выставляется наклон хука в классе, см пост Дмитрия №1311.

Asura 27.10.2025 09:12

Вот этот кусок в часть где хир хим прописан добавил?

Код:

try {
            Loc l = new Loc();
            Hook hook = new HookNamed(mesh, "CAMERAAIM");
            hook.computePos(this,new Loc(),l);
            aAim = l.getOrient().getAzimut();
            tAim = l.getOrient().getTangage();
          }catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
          }


Molva 27.10.2025 21:02

Вложений: 1
Цитата:

Сообщение от Asura (Сообщение 232521)
Вот этот кусок в часть где хир хим прописан добавил?

Добавил. Сейчас получается такая картинка. Прицел брал от ТБ-3. Но прицела не видно.

Asura 29.10.2025 09:26

Тогда надо добавить еще вот что;

Код:

  private float curAlt = 300.0f;
  private float curSpd = 50.0f;

 
  class Interpolater extends InterpolateRef
  {
    public boolean tick() {
      resetYPRmodifier();
      float v = ((G_37)aircraft()).fSightCurSpeed;
      float h = ((G_37)aircraft()).fSightCurAltitude;
      curAlt = (19.0f*curAlt+h)/20.0f;
      curSpd = (19.0f*curSpd+v)/20.0f;
      mesh.chunkSetAngles("zScaleKM", 0.04f*curAlt, 0.0f, 0.0f);
      mesh.chunkSetAngles("zScaleM", 0.36f*curAlt, 0.0f, 0.0f);
      mesh.chunkSetAngles("zScaleKMH", -0.8f*(curSpd-50.0f), 0.0f, 0.0f);
      float m300 = 0.5f*(float)Math.tan(Math.atan( (300.0f/3.6f)*(Math.sqrt(2.0f*curAlt/Atmosphere.g()))/(curAlt) ));
      float m = (float)Math.tan(Math.atan( (curSpd/3.6f)*(Math.sqrt(2.0f*curAlt/Atmosphere.g()))/(curAlt) ));
      xyz[0] = -0.0005f*curAlt;
      xyz[1] = -1.0f*(m300 - m);
      mesh.chunkSetLocate("zScaleCurve", xyz, ypr);

      if (bEntered)
      {
              float tan = aircraft().FM.Or.getTangage();
              if (tan > 5f)
                      tan = 5f;
              else if (tan < -5f)
                      tan = -5f;
              mesh.chunkSetAngles("BlackBox", 0.0f, 0f, tan);
              HookPilot hook = HookPilot.cur();
          hook.setInstantOrient(aAim, tAim-tan, 0f);
      }
     
      return true;
    }
  }
 
    public void reflectWorldToInstruments ( float delta )
        {
                if(bEntered) {
                  mesh.chunkVisible("BlackBox", true);
                  mesh.chunkVisible("zReticle", true);
                  mesh.chunkVisible("zScaleCurve", true);
                  mesh.chunkVisible("zScaleM", true);
                  mesh.chunkVisible("zScaleKM", true);
                  mesh.chunkVisible("zScaleKMH", true);
                }else {
                  mesh.chunkVisible("BlackBox", false);
                  mesh.chunkVisible("zReticle", false);
                  mesh.chunkVisible("zScaleCurve", false);
                  mesh.chunkVisible("zScaleM", false);
                  mesh.chunkVisible("zScaleKM", false);
                  mesh.chunkVisible("zScaleKMH", false);
                }
        }

И в класс самолета добавить если нет:

Код:

        public float fSightCurAltitude = 300.0f; // 300 - 5000 m
        public float fSightCurSpeed = 50.0f; // 50 - 350 km/h

        private Point3d endPoint = new Point3d();
        private Point3d hitPoint = new Point3d();
        private Vector3d vTemp = new Vector3d();
        private Orient oTemp = new Orient();

        public boolean typeBomberToggleAutomation()
        {
                return false;
        }

        public void typeBomberAdjDistanceReset()
        {
        }

        public void typeBomberAdjDistancePlus()
        {
        }

        public void typeBomberAdjDistanceMinus()
        {
        }

        public void typeBomberAdjSideslipReset()
        {
        }

        public void typeBomberAdjSideslipPlus()
        {
        }

        public void typeBomberAdjSideslipMinus()
        {
        }

        public void typeBomberAdjAltitudeReset()
        {
                if (!World.cur().diffCur.RealisticBombSights)
                        return;
                fSightCurAltitude = 300.0f;
        }

        public void typeBomberAdjAltitudePlus()
        {
                if (!World.cur().diffCur.RealisticBombSights)
                        return;
                fSightCurAltitude += 50.0f;
                if (fSightCurAltitude > 5000.0f)
                {
                        fSightCurAltitude = 5000.0f;
                }
                HUD.log(AircraftHotKeys.hudLogWeaponId, "BombsightAltitude",
                                new Object[]
                                { new Integer((int) fSightCurAltitude) });
        }

        public void typeBomberAdjAltitudeMinus()
        {
                if (!World.cur().diffCur.RealisticBombSights)
                        return;
                fSightCurAltitude -= 50.0f;
                if (fSightCurAltitude < 300.0f)
                {
                        fSightCurAltitude = 300.0f;
                }
                HUD.log(AircraftHotKeys.hudLogWeaponId, "BombsightAltitude",
                                new Object[]
                                { new Integer((int) fSightCurAltitude) });
        }

        public void typeBomberAdjSpeedReset()
        {
                if (!World.cur().diffCur.RealisticBombSights)
                        return;
                fSightCurSpeed = 50.0f;
        }

        public void typeBomberAdjSpeedPlus()
        {
                if (!World.cur().diffCur.RealisticBombSights)
                        return;
                fSightCurSpeed += 5.0f;
                if (fSightCurSpeed > 350.0f)
                {
                        fSightCurSpeed = 350.0f;
                }
                HUD.log(AircraftHotKeys.hudLogWeaponId, "BombsightSpeed", new Object[]
                { new Integer((int) fSightCurSpeed) });
        }

        public void typeBomberAdjSpeedMinus()
        {
                if (!World.cur().diffCur.RealisticBombSights)
                        return;
                fSightCurSpeed -= 5.0f;
                if (fSightCurSpeed < 50.0f)
                {
                        fSightCurSpeed = 50.0f;
                }
                HUD.log(AircraftHotKeys.hudLogWeaponId, "BombsightSpeed", new Object[]
                { new Integer((int) fSightCurSpeed) });
        }

        public void typeBomberUpdate(float dt)
        {
                if (!World.cur().diffCur.RealisticBombSights){

                        fSightCurAltitude = (float)World.getPlayerAircraft().FM.getAltitude()-(float)hitPoint.z;
                        fSightCurSpeed = (float)World.getPlayerAircraft().getSpeed(null)*3.6f;
                        double bombDist = getBombDist(fSightCurAltitude,
                                        (double) (fSightCurSpeed / 3.6000000000000001D));

                        //measure the exact ground height at the point where the bombsight is pointing.
                        if (FM.isTick(4, 0))
                        {
                                oTemp.setYaw(FM.Or.getYaw());
                                oTemp.setRoll(0);
                                oTemp.setPitch(30f);
                                vTemp.set(1,0,0);
                                oTemp.transform(vTemp);
                                vTemp.scale(100000);
                                endPoint.set(this.pos.getAbsPoint());
                                endPoint.add(vTemp);
                                Landscape.rayHitHQ(this.pos.getAbsPoint(), endPoint, hitPoint);
                        }
                }
        }

        public void typeBomberReplicateToNet(NetMsgGuaranted out)
                        throws IOException
        {
                if (!World.cur().diffCur.RealisticBombSights)
                        return;
                out.writeFloat(fSightCurAltitude);
                out.writeFloat(fSightCurSpeed);
        }

        public void typeBomberReplicateFromNet(NetMsgInput in) throws IOException
        {
                if (!World.cur().diffCur.RealisticBombSights)
                        return;
                fSightCurAltitude = in.readFloat();
                fSightCurSpeed = in.readFloat();
        }
  }

Весь код под версию 4.13, для 4.12 возможно потребуется поправить.

Molva 29.10.2025 14:02

Вложений: 1
Цитата:

Сообщение от Asura (Сообщение 232545)
Тогда надо добавить еще вот что;

Не получилось сделать класс. Вот такие ошибки:
http://forum.aviaskins.com/attachmen...1&d=1761735716

Molva 29.10.2025 16:09

Вложений: 1
Осталась одна ошибка:
http://forum.aviaskins.com/attachmen...1&d=1761743300


Текущее время: 21:11. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot