Kap

Пилоты
  • Публикаций

    43
  • Зарегистрирован

  • Посещение

  • Победитель дней

    3

Репутация

8 Обычный

Информация о Kap

  • Звание
    Пассажир
  1. Скачиваем, открываем Экселем и читаем, где, как, и на чём, и на какой высоте включать..... odnomotornie_4_08.xls
  2. Вам хочеться песен? Их есть у меня! (С) Не то, что бы очень, но есть время, почему бы и не поразмышлять. Итак: Что тут сказать, правила, очевидно не для всех, плюс очень много предвзятых игроков, которые принципиально не летают, за красных (синих) потому, что... мотивы различны и зачастую политизированы. Хотя путать жизнь и игру, это знаете ли.... В большинстве своём крафты (в разной конечно степени), соответствуют своим историческим аналогам. Мне думается, что и реальные немецкие пилоты не очень то любили драться на виражах с красными. Какой вид боя они предпочитали, надеюсь не секрет. Другое дело, что пытаются исполнять в игре, но тут каждый сам кузнец своего несчастья. И да, эффективность у красных в реале, была не в числе сбитых, а в количестве успешных сопровождений и прикрытий с недопущением противника на обьект. У синих же в приоритете боло именно увеличение счёта (я про истребители). Так вот в игре, по крайней мере на Алексе, всё же синяя концепция эффективности. По сему инструмент синим пилотам дан отличный, ну, а коль скоро они будут пытаться перевиражить лавку или ЛаГГа со спитом, то думаю им будет не весело. Опять же замечу, что нет у красных крафтов, идеально подходящих для всех видов боя, во всём диапазоне высот и скоростей, в отличии от стабильного в этом плане (до 7000м) Г2. Другое дело, что каждый пытается вести бой в выгодном диапазоне, но это же естественно. Так, что здесь всё таки IQ играет свою роль. Правильно, если представить, что все пилоты пилотируют идеально, то разницы в этом вообще не будет. Поскольку с опытом навык улучшается, то на каком то этапе наступает сглаживание индивидуальности и на первое место выходит разница в ТТХ крвфтов, хотя это вовсе не значит, что воюет крафт, а не человек. Тут как раз всё просто, каждый человек являет из себя некий психотип, этот психотип гораздо объёмнее чем темперамент или интеллект. Всё зависит от того, зачем этот человек пришёл на сервер. Кого то интересует стат, кого то выигрыш в любом случае, кто то отдыхает и т.д, и т.п. От этого и зависит например стрельба и пилотаж (как производное). Например, как стреляет снайпер и неснайпер, ОДИНАКОВО! С одной лишь НЕ БОЛЬШОЙ РАЗНИЦЕЙ. И тот и другой, стреляет всегда (не зависимо от дистанции), когда есть угол для стрельбы. Только первый стреляет осознано, посчитав прицел, а второй потому, что видит цель и по ней надо выстрелить. Снайпер может и попасть, и зачастую попадает, а неснайпер попадёт разве, что случайно. В принципе для снайпера стрельба это не только инструмент для поражения противника, но и инструмент воздействия на него. Для неснайпера стрельба- удовлетворение амбиций. Если первый тип достаточно редок, то второй же достаточно распостранен. И оба этих типа стрелков в принципе не интересны, с точки зрения реальной угрозы, первых мало - вторые не опасны. Гораздо интереснее те кто посередине, именно с ними приходиться в основном иметь дело. Вот сдесь есть несколько интересных моментов (про выеденное яйцо). Существует в воздушном бою дистанция стрельбы, на которой, как утверждали реальные пилоты, "промазать невозможно". Это действительно так, 100-150м, когда время подлёта снаряда к цели, даже при больших ракурсах, позволяет вести огонь без упреждения по переднему габариту цели, эта дистанция наиболее результативна, тем более, что в игре именно на этой дистанции наименьшее рассеивание. НО! Без умения пилотировать (и практически, и тактически), и в сущности выходить именно на эту дистанцию стрельбы, результати не будет. Если же уметь выходить на это дистанцию, то будешь супер снайпером, но тогда тактика и пилотаж первичны, так как помним, " со 100м промахнуться не возможно". Поэтому и выше по тексту, кто зачем пришел летать. Это ошибка, многие подтвердят, что знавали отличных пилотов, летающих на слабых девайсах, хотя конечно же никто не будет отрицать, что хороший девайс предпочтительней. Я лично считал (и считаю), что лучший джоя для индивидуума, это тот, который он сделает сам (или ему сделают под его запросы), далее дело привычки и навыка, ну и мозгов конечно, ибо лучше хорошие мозги чем плохой джой,
  3. Вот обещаный трек, тут в принципе всё кроме стрельбы, минут на 6. Полёт на триммерах в блеке, тоже есть, пауза получилась когда вместо звуков назначал игровые щелчки (со звуковыми файлами лучше). DemoGlovePIE.ntrk
  4. / Управление уборкой и выпуском шасси в том чиcле и вручную при // нажатии кнопки джоя № 8, if ( pressed(Joystick1.Button8) ) { toggle( PPJoy1.Digital10 ) } if ( pressed(PPJoy1.Digital10) ) { Key.G = true wait(50 ms) Key.G = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false Key.L = true wait(50 ms) Key.L = false } if ( released(PPJoy1.Digital10) ) { Key.G = true wait(50 ms) Key.G = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false Key.K = true wait(50 ms) Key.K = false }
  5. //Управление радиатором кнопка джоя № 9 PPJoy1.analog7 = -1.0 if ( pressed(Joystick1.Button9)) { PPJoy1.analog7 = PPJoy1.analog7 + 0.999 } if (PPJoy1.analog7 = 1.0) { PPJoy1.analog7 = -1.0 } Наконец то протестировал скрипт. Делитель кривых отклика не впечатлил, без него лучше. Управление радиатором не логичное и громоздкое, заменяем его на вот этот изящный скрипт. Управляется простыми нажатиями, переключая радиатор последовательно по кольцу: 0-50-100-0. Так же на понравилось управление уборкой - выпуском шасси, его тоже меняем на более удобный скрипт. Тут тоже управление одной кнопкой и она же тормоз.
  6. Несколько советов. Иногда, отладка скрипта требует времени и тогда возникает необходимость, не выходя из игры подкорректировать скрипт. Но если скрипт выполняет какую то команду постоянно, например удерживает кнопку. Например команда записана с ошибкой вот так Key.L = true Вместо Key.L = true wait(50 ms) Key.L = false Тогда клавиша «L» будет как бы нажата и игра не даст выйти в Виндоус. В этом случае воспользуйтесь командой Shift PIE она отключит выполнение скрипта и позволит вам выйти в Виндоус. Все вышеизложенные скрипты работоспособны и проверены. Вы можете их копировать в свою сборку, если будете их подгонять под себя, внимательно смотрите нумерацию кнопок , осей и клавиш. Везде прописывая свои значения (если необходимо). Ошибки в синтаксисе (если возникнут), GlovePIE отметит красным цветом строки. Менее грубые, отметит розовым цветом строки. Отлаженный скрипт, работает как часы и НИКОГДА не глючит! Как то выложу трек, что бы наглядно было видно, как всё работает, только звуки будут не слышны, поэтому заменю их, на какие ни будь, из самой игры.
  7. // Управление уборкой и выпуском шасси в том чиcле и вручную при // нажатии кнопки джоя № 8, кратковременное - уборка, длительное -выпуск if (!var.running) { var.t = 0.235 var.running = true } if (HeldDown(Joystick1.Button8, var.t)) { var.b8HeldDown = true PPJoy1.Digital10 = Joystick1.Button8 }else if ( pressed(Joystick1.Button8)) { PPJoy1.Digital11 = true wait(230 ms) PPJoy1.Digital11 = false } if (released(Joystick1.Button8)) { var.b1HeldDown = false PPJoy1.Digital10 = false PPJoy1.Digital11 = false } if ( pressed(PPJoy1.Digital10) ) { Key.Y = true wait(50 ms) Key.Y = false Key.L = true wait(50 ms) Key.L = false //////////////////////не менее 100 ////////////// Key.L = true wait(50 ms) Key.L = false } if ( pressed(PPJoy1.Digital11) ) { Key.G = true wait(50 ms) Key.G = false Key.K = true wait(50 ms) Key.K = false //////////////////////не менее 50////////////// Key.K = true wait(50 ms) Key.K = false } Управление уборкой и выпуском шасси, в том чиcле, вручную, и аварийно. Эта функция так же построена на определителе времени нажатия кнопки. Кратковременное нажатие кнопки джоя №8, включает уборку, в том числе и вручную. Нажатие с удержанием той же кнопки, включает выпуск, в том числе вручную и аварийно. В Панели Управления на уборку – выпуск шасси, назначить 2 клавиши: «Y» и «G». На уборку шасси вручную, назначить клавишу «К». На выпуск вручную, назначить «L». При таком варианте назначений, можно использовать ту же кнопку №8, в качестве кнопки тормоза, назначив её в ПУ, простым нажатием, при выключенном GlovePIE. Таким образом, одной кнопкой, вы будете управлять шасси, находясь в полёте, а во время движения по земле и тормозами. По причине не возможности, избежать (при любом способе нажатия на кнопку №8), цикла уборки, цикл выпуска (по количеству итераций клавиши «L»), вдвое больше количества итераций клавиши «К». Т.е. когда вы удерживаете кнопку и включаете выпуск, то при отпускании включается и уборка. Программа, выполняет нажатие клавиш «К» и «L», поочерёдно, но цикл с клавишей «К», короче. После того как он закончится, продолжается итерация клавиши «L» до полного выпуска. В приведенном фрагменте, количество итераций условно сокращено, в большом скрипте, нет.
  8. // Управление закрылками if ( pressed(Joystick1.Button3) ) { // уборка кнопка джоя № 3 Key.F = true // в ПУ клавиша F wait(250 ms) Key.F = false PPJoy1.analog6 = PPJoy1.analog6 -0.3 //значение оси уменьшено } if ( pressed(Joystick1.Button4) ) { // выпуск кнопка джоя № 4 Key.V = true // в ПУ клавиша V wait(250 ms) Key.V = false PPJoy1.analog6 = PPJoy1.analog6 +0.3 //значение оси увеличено } // Сигнализация выпуска закрылков var.int = round(MapRange(PPJoy1.analog6, 0, 1, 0, 100)) if ( INRANGE (var.int, 05, 100 ) ) { playsound "d:\sounds\ding" wait(500 ms) } Управление закрылками и сигнализация их положения. Для выполнения указанных функий используются, две кнопки (№ 3 - уборка, №4 - выпуск) реального джоя. Две клавиши: "F"- уборка, "V"- выпуск и виртуальная ось, опорная для включения сигнализации. Тут всё просто, желательно, что бы кнопки джоя, распологались рядом, для удобства управления (а ля хатка) Назначаете клавиши на уборку и выпуск закрылков в ПУ. Скрипт помимо нажати клавиш, будет изменять значения опорной оси, при уборке уменьшать на 30% PPJoy1.analog6 = PPJoy1.analog6 -0.3 при выпуске увеличивать на 30% PPJoy1.analog6 = PPJoy1.analog6 +0.3 Опорная ось сигналицации, при значении от 05 до 100, будет включать звуковой сигнал, а при значении от 0 до 05, будет сигнал выключать. На крафтах с автоматической уборкой закрылков, при их атоуборке, звук не выключится, надо будет нажать на кнопку уборки, столько раз сколько было нажато на выпуск (для изменения значения оси сигнализации).
  9. Управление радиатором. В основном скрипте обеспечивается только две установки радиатора, 50% и 100%, что в принципе достаточно для полётов и боя. Тем не менее, иногда нужно и полное закрытие. Для того, что бы обеспечить три положения радиатора при помощи одной кнопки, в приведеном скрипте, пришлось "скрестить" два оператора распознавания нажатия кнопок. Первый работает на распознавании "двойной клик vs одинарный клик". Второй оператор подобен уже рассмотренным выше, определителям времени нажатия кнопок. Конструкцию скрипта можно было бы упростить, сразу назначив прямые команды для оси радиатора, но тогда из игры не получалось вийти в Винду. Хотелось всё же, что бы всё работало правильно, поэтому теперь, скрипт, сначала включает виртуальные кнопки, а уж они, определяют значения осей, в таком варианте обеспечивается выход в Виндоус при включённой игре. Естественно в Userовском профиле назначить на ось виртуального джоя, ось радиатора: AXE_RY JoystickDevice1=-radiator B GlovePIE она числится как: PPJoy1.analog7. Алгоритм работы такой: 1) кратковременное нажатие ( менее 0.2сек) радиатор 100%; 2 )двойной клик - радиатор 50%; 3) удержание (более 0.2) радиатор 0%; Напомню, все манипуляции кнопкой №9, реального джоя и ещё, при закрытии радиатора с положения 50%, радиатор в течении 0,5 сек перейдёт в положение 100%, потом 0%, а из положения 100%, при закрытии, сразу в 0%.
  10. // Управление радиатором кнопка %9 реального джоя if (!var.running) { var.t = 0.2 // время для определения двойного клика var.tDoubleClick = 0.2 var.tB9Release = 0 var.running = true } var.now = timestamp if (pressed(Joystick1.Button9)) { if (((var.now - var.tB9Release) < var.tDoubleClick)) { var.B9DClick = true } } else if (released(Joystick1.Button9)) { var.tB9Release = var.now if (var.B9Dclick) { PPJoy1.Digital12 = true wait(100 ms) PPJoy1.Digital12 = false var.B9Dclick = false var.tB9Release = -1 } else { PPJoy1.Digital13 = true wait(100 ms) PPJoy1.Digital13 = false } } if (!var.running) { var.t = 0.5 // время для определения удержания кнопки var.running = true } if (HeldDown(Joystick1.Button9, var.t)) { var.b9HeldDown = true wait(1 s) //задержка дли закрытия радиатора PPJoy1.Digital14 = true wait(100 ms) PPJoy1.Digital14 = false } } if ( pressed(PPJoy1.Digital12) ) { PPJoy1.analog7 = 0.0 // радиатор 50% } if ( pressed(PPJoy1.Digital13) ) { PPJoy1.analog7 =1.0 // радиатор 100% } if ( pressed(PPJoy1.Digital14) ) { PPJoy1.analog7 = -1.0 // радиатор 0% } if (released(Joystick1.Button9)) { var.b9HeldDown = false PPJoy1.Digital12 = false PPJoy1.Digital13 = false PPJoy1.Digital14 = false } Здесь кое что новое, днём распишу.
  11. // Управление режимами огня (Фиксированная очередь в 3 вариантах) // Первый (базовый) вариант if ( pressed(Joystick1.Button1) ) { //при нажатии кнопки джоя № 1 PPJoy1.Digital0 = true wait(230 ms) // длительность очереди в мс (230 ms) PPJoy1.Digital0 = false } Key.NUMPAD1 = PPJoy1.Digital0 //в ПУ назначить на клавиши "NUMPAD1" нужное оружие (одинаково для всех вариантов) // Второй вариант PPJoy1.Digital0 = Joystick1.Button1 // добавлена строка if ( pressed(Joystick1.Button1) ) { // при нажатии кнопки джоя № 1 PPJoy1.Digital0 = true wait(1 s) // длительность очереди в секундах (1 сек) PPJoy1.Digital0 = false } // Третий вариант if ( pressed(Joystick1.Button1) ) { //при нажатии кнопки джоя № 1 PPJoy1.Digital0 = true wait(230 ms) // длительность очереди в мс (230 ms) PPJoy1.Digital0 = false } if (!var.running) { var.t = 0.235 // временной интервал после которого var.running = true // огонь непрерывный } if (HeldDown(Joystick1.Button1, var.t)) { var.b1HeldDown = true PPJoy1.Digital0 = Joystick1.Button1 } if (released(Joystick1.Button1)) { var.b1HeldDown = false PPJoy1.Digital0 = false } Режимы огня. Эту часть дам в расширенном виде. В скрипте приведён базовый вариант (первый), длина очереди в нём задаётся командой wait и временным значением в нашем случае 230 мсек. При любом нажатии (кратковременном или длительном) оружие произведётт определённое количество выстрелов (в зависимости от своей скорострельности и времени стрельбы), вы как бы стреляете из пистолета. Второй вариант отличается от первого тем, что в нём в начале добавлена строка PPJoy1.Digital0 = Joystick1.Button1 // добавлена строка Так же изменено время, до 1 сек, Тогда количество выстрелов будет зависеть от времени нажатия кнопки, но не более чем оружие сможет выстрелить за 1 сек. Т.е. если в 1 сек оружие делает 10 выстрелов, то вы циклично и быстро, нажимая гашетку, сможете сделать несколько очередей пока их общая длина не станет равной 1 сек (т.е. сделать 10 выстрелов), либо нажав и удерживая гашетку, выстрелить те же 10 выстрелов одной очередью, либо кратковременно нажав, можете сделать очередь любой длины менее 10 выстрелов. Опять аналогия, но уже с автоматом, увеличивая или уменьшая время (wait), вы как бы меняете ёмкость магазина, а отстрелять его можете хоть в несколько очередей, хоть в одну. Третий вариант похож на тот, что в игре, нажали гажетку - оружие стреляет, отпустили - не стреляет. Разница в том, что кратковременное нажатие ( менее 235 мсек), даст фиксированую очередь (как в первом варианте). Если гашетка будет удерживаться больше 235 мсек, то стрельба будет непрерывной. Этот вариант состоит из 2 частей, из базового и определителя времени нажатия ( подобный расписан в управлении взглядом). Лично я, использую первый (базовый вариант).
  12. // Управление шагом - газом совмещённое с дырчем var.int = round(MapRange(-Joystick1.RZ, -1, 1, 0, 220)) // разметка оси реального устройства (РУДа) if ( INRANGE (var.int, 0, 10 ) ) { // если значение оси РУДа в диапазоне от 0 до 10 PPJoy1.analog3 = -1.00 // шаг 0% playsound "d:\sounds\chimes" // играть звуковой файл wait(500 ms) // интервал проигрывания } if ( INRANGE (var.int, 30, 40 ) ) { // если значение РУДа от 30 до 40 PPJoy1.analog3 = 1.00 // шаг 100% PPJoy1.analog4 = 1.00 // тяга 0% } if ( INRANGE (var.int, 60, 70 ) ) { // если значение оси РУДа в диапазоне от PPJoy1.analog3 = 1.00 // шаг 100% PPJoy1.analog4 = 0.45 // тяга 30% } if ( INRANGE (var.int, 90, 100 ) ) { // если значение оси РУДа в диапазоне от PPJoy1.analog3 = 0.00 // шаг 50% PPJoy1.analog4 = 0.09 // тяга 50% } if ( INRANGE (var.int, 120, 130 ) ) {// если значение оси РУДа в диапазоне от PPJoy1.analog3 = 0.60 // шаг 80% PPJoy1.analog4 = -0.44 // тяга 80% } if ( INRANGE (var.int, 150, 160 ) ) { // если значение оси РУДа в диапазоне от 150 до 160 PPJoy1.analog3 = 1.00 // шаг 100% PPJoy1.analog4 = -0.82 // тяга 100% } if ( INRANGE (var.int, 180, 190 ) ) { // если значение оси РУДа в диапазоне от 180 до 190 PPJoy1.analog3 = 1.00 // шаг 100% PPJoy1.analog4 = -1.00 // тага 110% } if ( INRANGE (var.int, 210, 220 ) ) { // если значение оси РУДа в диапазоне от 210 до 220 PPJoy1.analog3 = -1.00 // шаг 0% playsound "d:\sounds\chimes" // играть звуковой файл wait(500 ms) // интервал проигрывания } Управление шагом - газом совмещённое с дырчем. Подобный блок я уже описывал выше, тут ничего сложного. Нужно прописать в своём конфиге (в папке User) оси тяги и шага, в нашем случае AXE_RX JoystickDevice1=pitch AXE_RZ JoystickDevice1=-power В GlovePIE они у нас PPJoy1.analog3 = шаг PPJoy1.analog4 = тяга Обратите внимание, номер оси шага меньше номера оси тяги, это нужно для того, что бы на мониторе писалось изменение тяги (а не шага), что удобнее для контроля. Конструкция блока типична, разбивается на условный диапазон реальная ось РУДа (например) var.int = round(MapRange(-Joystick1.RZ, -1, 1, 0, 220)) и в нужных участках назначаются прямые команды на значения осей шага и тяги, например: if ( INRANGE (var.int, 90, 100 ) ) {//если РУД находится в диапазоне от 90 до 100 (т.е. почти посередине между 0 и 220) PPJoy1.analog3 = 0.00 // шаг 50% PPJoy1.analog4 = 0.09 // тяга 50% Первая и последняя части этого блока меняют только шаг в 0% и при этом включают звуковой сигнал (это помогает не передать РУД, когда нужны крайние значения тяги (0% или 100%) при шаге !00%). Эти части можно безболезненно убрать, также можно отдельно убрать и озвучку. Кстати убирать можно не стирая строку, а ставя перед ней // Так работает: playsound "d:\sounds\chimes" wait(500 ms) Так нет :// playsound "d:\sounds\chimes" // wait(500 ms) И ещё, надо смотреть уменьшает или увеличивает своё значение ось Реального РУДа и если нужно, менять при помощи знака. У меня РУД сайтека, он при ходе вперёд уменьшает значение оси, поэтому перед определителем оси и на значении осей в скрипте, стоит знак минус тогда РУД значение увеличивает (минус на минус дают плюс) :-Joystick1.RZ, и например PPJoy1.analog4 = -1.00 // тага 110% В Панели Управления на осях шага и тяги выключить симметричность.
  13. Может записать трек и показать как всё это работает? Правда звуки будут не слышны, но вместо них можно вставить включение ночного освещения и щелчки включения затемнителя прицела.
  14. /* Управление приближением взгляда, взгляда через прицел и изменение кривых отклика при приближением взгляда*/ // Управление приближением взгляда всё работает при нажатии кнопки джоя № 7 Key.Z = Pressed(PPJoy1.Digital4) /* назначить в ПУ кнопку "Z" на прильнуть к прицелу */ Key.X = Released(PPJoy1.Digital4) /* назначить в ПУ кнопку "X" на широкоугольный обзор */ } // переключатель кривых отклика if ( released(PPJoy1.Digital4) ) { // если отпущена то PPJoy1.analog0 = Joystick1.X // Ось Х кривые отклика по 100% PPJoy1.analog1 = Joystick1.Y // Ось Y кривые отклика по 100% PPJoy1.analog2 = Joystick1.Z // Ось Z кривые отклика по 100% } if (PPJoy1.Digital4 == 1 ) { // если нажата то PPJoy1.analog0 = Joystick1.X /2 // Ось Х кривые отклика по 50% PPJoy1.analog1 = Joystick1.Y /2 // Ось Y кривые отклика по 50% PPJoy1.analog2 = Joystick1.Z /2 // Ось Z кривые отклика по 50% } // взгляд через прицел if ( released( Joystick1.Button7) ) { /*если отпущена кнопка джоя № 7 переключается функция "смотреть чкрез прицел" в ПУ назначить на неё клавишу NUMPAD8 */ Key.NUMPAD8 = true wait(50 ms) //время в течении которогобудет нажата клавиша Key.NUMPAD8 = false } // переключатель(быстрое нажатие-взгляд через прицел,длительное-приближение) if (!var.running) { var.t = 0.25 /*временной интервал после которого взгляд будет приближен */ var.running = true } if (HeldDown(Joystick1.Button7, var.t)) { /* если время нажатия больше 0.25с, то выполняется */ var.b7HeldDown = true /* прильнуть к прицелу и кривые отклика по 50% */ PPJoy1.Digital4 = Joystick1.Button7 /*кнопка "смотреть через прицел" нажата, переключения ещё нет */ } if (released(Joystick1.Button7)) { //если кнопка джоя отпущена то var.b7HeldDown = false /* выполняется команда "широкоугольный обзор" и кривые отклика по 100% */ PPJoy1.Digital4 = false /* кнопка "смотреть через прицел" отпущена, переключение произошло */ } Управление приближением взгляда, взгляда через прицел и изменение кривых отклика при приближением взгляда. Этот блок пожалуй самый сложный в скрипте. Вот какие функции он выполняет: При помощи нажатия клавиш Z и X осуществляется приближение и удаление взгляда. Клавиша Z включаются при нажатии кнопки №4 виртуального джоя №1 Pressed(PPJoy1.Digital4) Клавиша Х включаются при отпускании той же кнопки (Released(PPJoy1.Digital4. Приближение взгляда не фиксировано, т.е. приближение есть пока нажата кнопка. В этот блок включён и делитель кривых отклика, если нажата (и удерживается) всё та же кнопка №4 (PPJoy1.Digital4), то кривые отклика будут уменьшены на 50% (вдвое), полный расход ручки даст в игре только половину отклонения кривых. Делитель так же работает только при нажатой кнопке. Кроме того, если в момент работы делителя, рули дойдут до крайнего положения (что в игре будет считаться только половиной ) и будут в этом положении удержаны, а потом делитель будет выключен, то рули резко примут реальное значение. Блок делителя, если он не нужен можно, просто удалить из скрипта или поставить его отдельно с возможностью фиксации. Взгляд через прицел. Функция управляется кн №7 реального джоя. Переключение происходит (внимание!) не при нажатии на кнопку, а при её отпускании if ( released( Joystick1.Button7) ) . Это сделано для удобства переключения т.е. если выбран нужный режим (кратковременными нажатияими), то он не должен "сбиватьмя" при последующим длительным. Само же переключение выполняет клавиша NUMPAD8 цифровай панели, именно на неё в Пульте Управления и необходимо назначить эту функцию. Теперь как устроен сам блок переключения. Общий алгоритм работы базируется на определителе времени нажатия кнопки. Время нажатия (в сек.) задаётся здесь: var.t = 0.25 /*временной интервал. Т.е. если время нажатия кнопки больше 0,25 сек. то включается приближение взляда и делитель кривых, а при отпускании взляд, отдаляется, делитель выключается и функция "смотреть через прицел" переключается. Если время нажатия меньше, переключается только функция "смотреть через прицел" . Принцип управления такой: короткими нажатиями на кнопку выбираем режим, например: "смотреть через прицел" , потом нажимаем и удерживаем ту же кнопку, взгляд приближается, пользуемся, потом отпускаем кнопку, взгляд удаляется и функция "смотреть через прицел" переключается. Этот блок можно установить отдельно, с делителем или без. Если будете это делать обратите особое внимание на назначение кнопок (своих) в операторе управления. Кнопки там назначаются в двух видах: if (HeldDown(Joystick1.Button7, var.t и var.b7HeldDown , учтите, номера кнопок (в нашем случае 7), должны совпадать.
  15. Что то у меня со связью, то сообщения пропадают безследно, то дублируются. Может модератор сотрёт дубль.