AviaSkins.Forums

AviaSkins.Forums (http://forum.aviaskins.com/index.php)
-   Авиация (http://forum.aviaskins.com/forumdisplay.php?f=73)
-   -   ДБ-3ТП (http://forum.aviaskins.com/showthread.php?t=3864)

goga 21.01.2015 17:33

Ура! Полетел в варианте https://yadi.sk/d/hVTryygEe8rdA
Причем без SAS_Flyable AI Aircraft
Спасибо большое!

Molva 21.01.2015 19:02

Полетел. Установил SAS Common Utils и самолет полетел.
Цитата:

Сообщение от andrey65 (Сообщение 136431)
но не работают пулеметы штурмана и нижнего стрелка.

Ага, стрелять они отказываются.

Vasya 21.01.2015 22:55

Цитата:

Сообщение от Molva (Сообщение 136450)
Полетел. Установил SAS Common Utils и самолет полетел.

Ага, стрелять они отказываются.

В классе самолёта пулемёты для стрелков должны быть только такого типа, например - MGunUBt., так же к ним должна писаться цыфры 10, 11, 12., типа так:
a_lweaponslot[0] = new Aircraft._WeaponSlot(10, "MGunShKASt", 960);
a_lweaponslot[1] = new Aircraft._WeaponSlot(10, "MGunShKASt", 960);
a_lweaponslot[2] = new Aircraft._WeaponSlot(11, "MGunShKASt", 1000);
a_lweaponslot[3] = new Aircraft._WeaponSlot(12, "MGunShKASt", 800);
Для десятого патча в классах стрелкового вооружения не должно быть двойки в записи пропертиса, типа такого:
gunproperties.bullet[3].traceTrail = "effects/Smokes/SmokeBlack_BuletteTrail2.eff";
Иначе пулемёт ломаеться и не стреляет - пишет: оружие, нет боеприпасов.
Желаю как нибуть пригодиться и помочь. :ups:

The Radge 22.01.2015 10:20

Вася, спасибо! Но это достаточно известные вещи.
Тем более, что вооружение самолёт использует дефолтное, т.е. в 4.10.1 он будет использовать вооружение 4.10.1; в 4.12.2 - от 4.12.2.

Проблема в цепочке класс_кокпита => вооружение => 3Д модель (хуки).
Мы сейчас её порешаем.

И кстати, вооружение я прописываю в коде, поэтому то, что у вас выглядит как...

Код:

a_lweaponslot[0] = new Aircraft._WeaponSlot(10, "MGunShKASt", 960);
a_lweaponslot[1] = new Aircraft._WeaponSlot(10, "MGunShKASt", 960);
a_lweaponslot[2] = new Aircraft._WeaponSlot(11, "MGunShKASt", 1000);
a_lweaponslot[3] = new Aircraft._WeaponSlot(12, "MGunShKASt", 800);

...у меня будет выглядеть так:

Код:

default,10 MGunShKASt 960,10 MGunShKASt 960,11 MGunShKASt 1000, 12 MGunShKASt 800

The Radge 22.01.2015 11:16

Я помню, что мне удалось наладить работу всех турелей... Но к сожалению не помню, как. Сейчас вся проблема в хуках, так как классы и вооружение я уже много раз проверил и переписал...
Например, не могу найти хуки _MGUN02 и _MGUN03 в:

3do/Cockpit/DB-3early-TGunner/...
3do/Cockpit/DB-3early-BGunner/...

Ни в одном из меш-файлов их нет... Хотя TGunner (турель) лично у меня работает...
Где заковырка? Бог - весть...

tarakan67 22.01.2015 14:27

Заковырка может быть SFS-ках. Как я понял, у тебя работает в 4.12.2. С каждым патчем DT не только делает что-то новое, но и (бывает) правит старые "косяки". Вполне вероятно, что твои турели используют некоторые меши от дефолтной игры, которые естественно запакованы в SFS-архивы. В то же время в ранних версиях игры может не быть тех мешей, которые используют твои турели, либо они отличаются от тех, что есть в 4.12.2.
Думаю стоит "проинспектировать" все hier.him турелей на предмет отыскания дефолтных мешей

Vasya 22.01.2015 17:44

ДА - Игорь прав!
Я тоже вчера про такое думал, но вечером не написал(тестил кабины Мессеров с правленными классами кокпитов) и пошёл спать. Я недавно пересобирал класс Супер-Джипа - там хуки пулемёта на турели прописаны в меше Turret1B_D0_00.msh., я искал по цепочке от прописи в классе до мешей кокпита и самой модели., выправлял поворот турели для патча 4.12.2, хотел ракеты прописать через пробел(рокетгуннул), но не пришлось - ракеты стреляют по отдельности и так.
Для бомбёра - думаю - стоит вытянуть часть мешей из патча 4.12.2 и сделав свой хиер-хим, вкинуть недостающее для мода ДБ-3 в десятку. Некоторые турели из двенадцатого патча имеют свойство стрелять криво - МБ-174 я так и не настроил полностью как нужно летом.
Там в кокпите стрелка Джипа ещё такая команда есть:
protected void interpTick()
{
if(isRealMode())
{
if(super.emitter == null || !super.emitter.haveBullets() || !aiTurret().bIsOperable)
super.bGunFire = false;
((FlightModelMain) (super.fm)).CT.WeaponControl[weaponControlNum()] = super.bGunFire;
if(super.bGunFire)
{
if(hook1 == null)
hook1 = new HookNamed(aircraft(), "_MGUN01");
doHitMasterAircraft(aircraft(), hook1, "_MGUN01");
}
}
}

public void doGunFire(boolean flag)
{
if(isRealMode())
{
if(super.emitter != null && super.emitter.haveBullets() && aiTurret().bIsOperable)
super.bGunFire = flag;
else
super.bGunFire = false;
((FlightModelMain) (super.fm)).CT.WeaponControl[weaponControlNum()] = super.bGunFire;
}
}
Я так понял - она именно для контроля вооружения - то есть для того что бы турель стреляла.
Я бы конечно открыл и посмотрел что и как в моде ДБ происходит на десятом патче, но поскольку он в доработке автора, то мне стыдно будет перебивать чужие старания.
Для десятки адаптировать кокпиты - марудное дело., легче с нуля сделать в среде десятки.
=========================================
Извините! :uh-e:
Ну не удержался свои пять копеек вставить... :ups:

The Radge 23.01.2015 10:37

:I'm_thinking:
 
Цитата:

Сообщение от tarakan67 (Сообщение 136484)
Заковырка может быть SFS-ках. Как я понял, у тебя работает в 4.12.2. С каждым патчем DT не только делает что-то новое, но и (бывает) правит старые "косяки". Вполне вероятно, что твои турели используют некоторые меши от дефолтной игры, которые естественно запакованы в SFS-архивы. В то же время в ранних версиях игры может не быть тех мешей, которые используют твои турели, либо они отличаются от тех, что есть в 4.12.2.
Думаю стоит "проинспектировать" все hier.him турелей на предмет отыскания дефолтных мешей

Нет. Стрелки этого самолёта используют турели, которых нет в дефолтной игре. Посмотрите ещё раз на названия папок - в дефолтной игре нет летабов ДБ-3. Это - фича ХСФикс... которую Майк запаковал в .sfs и назвал SAS_AI_Flyables, включив в модакт (с его слов). Только F-Gunner (передний стрелок) использует 3Д нового Пе-8, хотя тоже модифицированную - вместо двух пулемётов там один. И чтобы не вынуждать пользователей устанавливать SAS_AI_Flyables на другие версии игры (там у них другая реализация нелетабов, вряд ли им нужен лишний груз), эти файлы вложены в папку _files_for_4.09-4.10! Но передний стрелок работает (в 4.12 использует файлы из fb_3do25.sfs, в 4.09-4.10 из мода Пе-8 из 4.11)! Меня интересует, где хук _MGUN03??? Почему не работает B-Gunner (нижний стрелок)??? Все его меши проинспектированы...

ЗЫ: находил я решение проблемы, находил... Только забыл и не могу вспомнить :cry:

ЗЗЫ: Вася, если ты допишешь классы так, что всё будет работать - я буду только рад ;)

The Radge 23.01.2015 13:09

Господа, я вразумил, что за оказия происходит.
Уведомлю, что в версии 2.0 классы работают безотказно в плане управления стрелками.
А не получается управлять нижним стрелком по той причине, что он неразрывно связан с верхним. Ими как бы управляет один человек. Если вы отключили автопилот у них обоих, то какой-то из них работать не будет, а если при переходе с верхнего на нижний вернули верхнему автопилот, то нижний при отключении у последнего автопилота работать будет.

Вопрос: удалить ли элемент кода, который за это отвечает или нет?

Насчёт хуков я тоже понял: используются хуки только внешней 3Д модели, их вполне достаточно.

The Radge 23.01.2015 13:44

ПС: все эти косяки с турелями из-за радиста...
Он вообще нужен на этом самолёте?..
В принципе, это рудимент аж от Ил-4.. Пытаются его разными образами впихнуть во все турели...
PHP код:

    public void onAircraftLoaded()
    {
        
super.onAircraftLoaded();
        
setRadist(00);
        
setRadist(10);
        
setRadist(20);
        
hierMesh().chunkVisible("Turret3a_D0"false);
    } 

PHP код:

    public void update(float f)
    {
        if(
Time.current() > tme)
        {
            
tme Time.current() + World.Rnd().nextLong(1000L5000L);
            if(
FM.turret.length != 0)
            {
                
Object obj null;
                if(
FM.turret[0].bIsOperable != (radist[1] == 0))
                {
                    
Actor actor FM.turret[0].target;
                    if(
actor != null)
                    {
                        
setRadist(11);
                    } else
                    {
                        
Actor actor1 FM.turret[1].target;
                        if(
actor1 == null)
                            
actor1 FM.turret[2].target;
                        if(
actor1 != null)
                        {
                            
setRadist(11);
                            
FM.turret[0].target actor1;
                        } else
                        {
                            
setRadist(10);
                        }
                    }
                }
                if(
FM.turret[1].bIsOperable)
                {
                    
Actor actor2 FM.turret[1].target;
                    if(
actor2 != null && Actor.isValid(actor2))
                    {
                        
pos.getAbs(tmpLoc2);
                        
actor2.pos.getAbs(tmpLoc3);
                        
tmpLoc2.transformInv(tmpLoc3.getPoint());
                        if(
tmpLoc3.getPoint().0.0D)
                            
setRadist(21);
                    }
                } else
                if(
FM.turret[2].bIsOperable)
                {
                    
Actor actor3 FM.turret[2].target;
                    if(
actor3 != null && Actor.isValid(actor3))
                    {
                        
pos.getAbs(tmpLoc2);
                        
actor3.pos.getAbs(tmpLoc3);
                        
tmpLoc2.transformInv(tmpLoc3.getPoint());
                        if(
tmpLoc3.getPoint().0.0D)
                            
setRadist(20);
                    }
                }
            }
        }
        
super.update(f);
    } 

PHP код:

    private void setRadist(int iint j)
    {
        
radist[i] = j;
        if(
FM.AS.astatePilotStates[i] > 90)
            return;
        switch(
i)
        {
        default:
            break;
        case 
1// '\001'
            
hierMesh().chunkVisible("Pilot2_D0"false);
            
hierMesh().chunkVisible("Pilot2a_D0"false);
            
hierMesh().chunkVisible("HMask2_D0"false);
            
hierMesh().chunkVisible("HMask2a_D0"false);
            
FM.turret[0].bIsOperable false;
            switch(
j)
            {
            case 
0// '\0'
                
hierMesh().chunkVisible("Pilot2_D0"true);
                
hierMesh().chunkVisible("HMask2_D0"FM.Loc.3000D);
                break;
            case 
1// '\001'
                
hierMesh().chunkVisible("Pilot2a_D0"true);
                
hierMesh().chunkVisible("HMask2a_D0"FM.Loc.3000D);
                
FM.turret[0].bIsOperable true;
                break;
            }
            break;
        case 
2// '\002'
            
hierMesh().chunkVisible("Pilot3_D0"false);
            
hierMesh().chunkVisible("Pilot3a_D0"false);
            
hierMesh().chunkVisible("HMask3_D0"false);
            
hierMesh().chunkVisible("HMask3a_D0"false);
            
FM.turret[1].bIsOperable false;
            
FM.turret[2].bIsOperable false;
            switch(
j)
            {
            case 
0// '\0'
                
hierMesh().chunkVisible("Pilot3_D0"true);
                
hierMesh().chunkVisible("HMask3_D0"FM.Loc.3000D);
                
FM.turret[1].bIsOperable true;
                break;
            case 
1// '\001'
                
hierMesh().chunkVisible("Pilot3a_D0"true);
                
hierMesh().chunkVisible("HMask3a_D0"FM.Loc.3000D);
                
FM.turret[2].bIsOperable true;
                break;
            }
            break;
        }
    } 

Не доходит до меня, на кой это всё нужно...
Но можно считать, что проблема решена.
Эти элементы я удалю из класса, мне лишь интересно, кто будет против.
Спасибо за внимание.

Vasya 23.01.2015 14:12

:I'm_thinking: Дааа..., дела., интересно. эта функция радиста в десятке актуальна? Да и на двенадцатом - так же: насколько актуальна?

The Radge 23.01.2015 14:23

Не знаю, посмотри в классах IL_4 и IL_4_42 (второго в десятке, скорее всего, нет...)

Vasya 23.01.2015 16:32

Я имею в виду - как можно использовать такую функцию простому вирпилу. как ей пользоваться если она вставлена в класс? Может где читал? Морзе вибивать на клаве 99,9 проц летунов не могут - не учились на это. А переговоры в Иле только с помощью команд на консоле.

tarakan67 23.01.2015 16:38

Цитата:

Сообщение от The Radge (Сообщение 136540)
ПС: все эти косяки с турелями из-за радиста...
Он вообще нужен на этом самолёте?..
В принципе, это рудимент аж от Ил-4.. Пытаются его разными образами впихнуть во все турели...
PHP код:

    public void onAircraftLoaded()
    {
        
super.onAircraftLoaded();
        
setRadist(00);
        
setRadist(10);
        
setRadist(20);
        
hierMesh().chunkVisible("Turret3a_D0"false);
    } 

PHP код:

    public void update(float f)
    {
        if(
Time.current() > tme)
        {
            
tme Time.current() + World.Rnd().nextLong(1000L5000L);
            if(
FM.turret.length != 0)
            {
                
Object obj null;
                if(
FM.turret[0].bIsOperable != (radist[1] == 0))
                {
                    
Actor actor FM.turret[0].target;
                    if(
actor != null)
                    {
                        
setRadist(11);
                    } else
                    {
                        
Actor actor1 FM.turret[1].target;
                        if(
actor1 == null)
                            
actor1 FM.turret[2].target;
                        if(
actor1 != null)
                        {
                            
setRadist(11);
                            
FM.turret[0].target actor1;
                        } else
                        {
                            
setRadist(10);
                        }
                    }
                }
                if(
FM.turret[1].bIsOperable)
                {
                    
Actor actor2 FM.turret[1].target;
                    if(
actor2 != null && Actor.isValid(actor2))
                    {
                        
pos.getAbs(tmpLoc2);
                        
actor2.pos.getAbs(tmpLoc3);
                        
tmpLoc2.transformInv(tmpLoc3.getPoint());
                        if(
tmpLoc3.getPoint().0.0D)
                            
setRadist(21);
                    }
                } else
                if(
FM.turret[2].bIsOperable)
                {
                    
Actor actor3 FM.turret[2].target;
                    if(
actor3 != null && Actor.isValid(actor3))
                    {
                        
pos.getAbs(tmpLoc2);
                        
actor3.pos.getAbs(tmpLoc3);
                        
tmpLoc2.transformInv(tmpLoc3.getPoint());
                        if(
tmpLoc3.getPoint().0.0D)
                            
setRadist(20);
                    }
                }
            }
        }
        
super.update(f);
    } 

PHP код:

    private void setRadist(int iint j)
    {
        
radist[i] = j;
        if(
FM.AS.astatePilotStates[i] > 90)
            return;
        switch(
i)
        {
        default:
            break;
        case 
1// '\001'
            
hierMesh().chunkVisible("Pilot2_D0"false);
            
hierMesh().chunkVisible("Pilot2a_D0"false);
            
hierMesh().chunkVisible("HMask2_D0"false);
            
hierMesh().chunkVisible("HMask2a_D0"false);
            
FM.turret[0].bIsOperable false;
            switch(
j)
            {
            case 
0// '\0'
                
hierMesh().chunkVisible("Pilot2_D0"true);
                
hierMesh().chunkVisible("HMask2_D0"FM.Loc.3000D);
                break;
            case 
1// '\001'
                
hierMesh().chunkVisible("Pilot2a_D0"true);
                
hierMesh().chunkVisible("HMask2a_D0"FM.Loc.3000D);
                
FM.turret[0].bIsOperable true;
                break;
            }
            break;
        case 
2// '\002'
            
hierMesh().chunkVisible("Pilot3_D0"false);
            
hierMesh().chunkVisible("Pilot3a_D0"false);
            
hierMesh().chunkVisible("HMask3_D0"false);
            
hierMesh().chunkVisible("HMask3a_D0"false);
            
FM.turret[1].bIsOperable false;
            
FM.turret[2].bIsOperable false;
            switch(
j)
            {
            case 
0// '\0'
                
hierMesh().chunkVisible("Pilot3_D0"true);
                
hierMesh().chunkVisible("HMask3_D0"FM.Loc.3000D);
                
FM.turret[1].bIsOperable true;
                break;
            case 
1// '\001'
                
hierMesh().chunkVisible("Pilot3a_D0"true);
                
hierMesh().chunkVisible("HMask3a_D0"FM.Loc.3000D);
                
FM.turret[2].bIsOperable true;
                break;
            }
            break;
        }
    } 

Не доходит до меня, на кой это всё нужно...
Но можно считать, что проблема решена.
Эти элементы я удалю из класса, мне лишь интересно, кто будет против.
Спасибо за внимание.

По-моему это нужно, чтобы когда игрок "садится" за турель ему не мешало изображение пилота от внешней модели, а также прописана высота когда пилот на внешних видах "надевает кислородную маску"

The Radge 23.01.2015 21:52

Цитата:

Сообщение от Vasya (Сообщение 136554)
Я имею в виду - как можно использовать такую функцию простому вирпилу. как ей пользоваться если она вставлена в класс? Может где читал? Морзе вибивать на клаве 99,9 проц летунов не могут - не учились на это. А переговоры в Иле только с помощью команд на консоле.

Я тоже так думаю :(

Цитата:

Сообщение от tarakan67 (Сообщение 136555)
По-моему это нужно, чтобы когда игрок "садится" за турель ему не мешало изображение пилота от внешней модели, а также прописана высота когда пилот на внешних видах "надевает кислородную маску"

Хорошо, а зачем тогда вставки про радиста?

tarakan67 23.01.2015 22:37

Может быть это просто название функции или метода

Vasya 24.01.2015 00:43

Игорь прав - про маску на пилота., я не подумал про это - сегодня давление за 150 и болит голова, поэтому не вник в текст кода. Но название Радист смущает, однако, не встречал., нужно пошариться по классам что отвечают за переговоры или за корректировку огня - как то ведь можно в Иле стучать морзянку - читал про это, но может мне изменяет память., того - не молодой уже.
Так же:
if(Time.current() > tme)
{
tme = Time.current() + World.Rnd().nextLong(1000L, 5000L);
if(FM.turret.length != 0)
{
Object obj = null;
if(FM.turret[0].bIsOperable != (radist[1] == 0))
Если понять эти строки, то можна наверняка знать - метод это или таки стрелок-радист(почему в коде время и в конце Л, обычно в командах Ф пишут - надобно глянуть это класс ворлд). Если можно как то с места стрелка настучать земле, включив перед этим автопилот рулевому пилоту, то да - это стрелок радист., или же это задел на будущие патчи. Прото мысли - так глубоко не копал. Больше осваивал кокпиты пилотов, а не стрелков. Сначала будто сложно, но через месяц плотного изучения уже можно исправлять модные кабины для ранних патчей под двенадцатку.

The Radge 05.02.2015 21:29

В общем, ещё почти неделю назад собрал pre2.1, но выложить возможности не было :(
Прошу тестировать на предмет предыдущих обсуждаемых "багов"...
Ну и вообще в целом, мало ли что могло вызвать удаление указанных частей кода...

Ссылка на закачку: Яндекс.Диск

goga 06.02.2015 13:28

To The Radge. Спасибо за самолет! Теперь все пулеметы стреляют.

andrey65 07.02.2015 10:14

Все отлично! Спасибо!


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

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