
Kap
Пилоты-
Публикаций
69 -
Зарегистрирован
-
Посещение
-
Победитель дней
7
Весь контент Kap
-
Так ведь не в синюю комнату им заходить, а в красную, там то все свои.
-
Начну издалека... Вот откуда ноги растут, товарищи красные пилоты? Вот и я думаю, что оттуда! Всё последнее время об этом думал, когда приходилось вести бои с несколькими противниками, причём если (используем шахматные термины), в дебюте ещё может быть 1х1, то в миттельшпиле, и особенно в эндшпиле, как минимум 1х2, 1х3. И как они хоронят, как они хоронят!(с) Понятно, что без ТСа тут не обходится. Посидел пару дней в ТС (в нашем), думал может кто зайдёт из красных ( у синих всё в порядке всегда несколько человек), ан нет. Вчера булл пригласил меня в синию комнату, я зашёл, но остался летать за
-
Вам хочеться песен? Их есть у меня! (С) Не то, что бы очень, но есть время, почему бы и не поразмышлять. Итак: Что тут сказать, правила, очевидно не для всех, плюс очень много предвзятых игроков, которые принципиально не летают, за красных (синих) потому, что... мотивы различны и зачастую политизированы. Хотя путать жизнь и игру, это знаете ли.... В большинстве своём крафты (в разной конечно степени), соответствуют своим историческим аналогам. Мне думается, что и реальные немецкие пилоты не очень то любили драться на виражах с красными. Какой вид боя они предпоч
-
Вот обещаный трек, тут в принципе всё кроме стрельбы, минут на 6. Полёт на триммерах в блеке, тоже есть, пауза получилась когда вместо звуков назначал игровые щелчки (со звуковыми файлами лучше). DemoGlovePIE.ntrk
-
/ Управление уборкой и выпуском шасси в том чи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 = fal
-
//Управление радиатором кнопка джоя № 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. Так же на понравилось управление уборкой - выпуском шасси, его тоже меняем на более удобный скрипт.
-
Несколько советов. Иногда, отладка скрипта требует времени и тогда возникает необходимость, не выходя из игры подкорректировать скрипт. Но если скрипт выполняет какую то команду постоянно, например удерживает кнопку. Например команда записана с ошибкой вот так Key.L = true Вместо Key.L = true wait(50 ms) Key.L = false Тогда клавиша «L» будет как бы нажата и игра не даст выйти в Виндоус. В этом случае воспользуйтесь командой Shift PIE она отключит выполнение скрипта и позволит вам выйти в Виндоус. Все вышеизложен
-
// Управление уборкой и выпуском шасси в том чи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) Ke
-
// Управление закрылками 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 (v
-
Управление радиатором. В основном скрипте обеспечивается только две установки радиатора, 50% и 100%, что в принципе достаточно для полётов и боя. Тем не менее, иногда нужно и полное закрытие. Для того, что бы обеспечить три положения радиатора при помощи одной кнопки, в приведеном скрипте, пришлось "скрестить" два оператора распознавания нажатия кнопок. Первый работает на распознавании "двойной клик vs одинарный клик". Второй оператор подобен уже рассмотренным выше, определителям времени нажатия кнопок. Конструкцию скрипта можно было бы упростить, сразу назначив прямые команд
-
// Управление радиатором кнопка %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
-
// Управление режимами огня (Фиксированная очередь в 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
-
// Управление шагом - газом совмещённое с дырчем 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 )
-
Может записать трек и показать как всё это работает? Правда звуки будут не слышны, но вместо них можно вставить включение ночного освещения и щелчки включения затемнителя прицела.
-
/* Управление приближением взгляда, взгляда через прицел и изменение кривых отклика при приближением взгляда*/ // Управление приближением взгляда всё работает при нажатии кнопки джоя № 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% PPJo
-
Что то у меня со связью, то сообщения пропадают безследно, то дублируются. Может модератор сотрёт дубль.
-
//Управление триммером элеронов,срабатывает при крайних положениях РУС по крену var.int = round(MapRange(PPJoy1.analog0, -1, 1, 0, 100)) // разметка оси крена (PPJoy1.analog0) от 0 до 100 if ( INRANGE (var.int, 00, 05 ) ) { // если РУС в крайнем левом положении то: PPJoy2.analog0 = -1.00 // ось триммера элеронов имеет значение 100% влево } if ( INRANGE (var.int, 10, 90 ) ) { // Если РУС не находится в крайних левом и правом положениях то: PPJoy2.analog0 = 0.00 // ось триммера имеет значение 0% } if ( INRANGE (var.int, 95, 100 ) ) { // если РУС в крайнем правом положении то: PPJoy2.analog0
-
//Управление триммером элеронов,срабатывает при крайних положениях РУС по крену var.int = round(MapRange(PPJoy1.analog0, -1, 1, 0, 100)) // разметка оси крена (PPJoy1.analog0) от 0 до 100 if ( INRANGE (var.int, 00, 05 ) ) { // если РУС в крайнем левом положении то: PPJoy2.analog0 = -1.00 // ось триммера элеронов имеет значение 100% влево } if ( INRANGE (var.int, 10, 90 ) ) { // Если РУС не находится в крайних левом и правом положениях то: PPJoy2.analog0 = 0.00 // ось триммера имеет значение 0% } if ( INRANGE (var.int, 95, 100 ) ) { // если РУС в крайнем правом положении то: PPJoy2.analog0
-
// Сигнализация оптимального положения РВ (Звуковая загрузка) var.int = round(MapRange(PPJoy1.analog1, -1, 1, 0, 200)) // разбивка оси от 0 до 200 у.е. if ( INRANGE (var.int, 140, 160 ) ) { // если РУС находится в диапазоне от 140 до 160 то: playsound "d:\sounds\Windows XP Balloon" // проигрывать звуковой сигнал wait(500 ms) // временной интервал между проигрываниями } Сигнализация оптимального положения РВ (Звуковая загрузка). Для того, что бы пользоваться этой функцией, необходимо представиить ось тангажа, как некий диапазон цифр от 0 до 200, (подобная операция будет использоваться до
-
//Список задействованных и свободных осей //PPJoy1.analog0 = Joystick1.X //PPJoy1.analog1 = Joystick1.Y //PPJoy1.analog2 = Joystick1.Z //PPJoy1.analog3 //PPJoy1.analog4 Шаг //PPJoy1.analog5 Тяга //PPJoy1.analog6 Опорная ось сигнализации закрылков //PPJoy1.analog7 Радиатор //PPJoy2.analog0 Триммер Элеронов //PPJoy2.analog1 Триммер РВ //PPJoy2.analog2 Триммер РН //PPJoy2.analog3 //PPJoy2.analog4 //PPJoy2.analog5 //PPJoy2.analog6 //PPJoy2.analog7 // Назначаем кнопки PPJoy1.Digital4 = Joystick1.Button7 Список осей . Этот блок не является командным, он нужен для контроля, чт
-
Ну, что, поехали по-блочно. Включатель осей, логичнее было назвать его выключателем, так как по умолчанию, оси виртуального джоя присвоены осям реального и только при включении виртуального тумблера, они отвязываются. Виртуальный тумблер базируется на виртуальной же кнопке №9 (PPJoy1.Digital9) , виртуального джоя №1. Имеет два состояния: включено (PPJoy1.Digital9 ==1) и выключено (это состояние подразумевается логическим оператором (else) (иначе), т.е. включено иначе выключено. Виртуальным тумблером управляет кнопка №12 реального джоя (Joystick1.Button12), путем последо
-
Рассмотрим по порядку. Присвоение осей реального джоя виртуальному, в этих строчках PPJoy1.analog0 = Joystick1.X PPJoy1.analog1 = Joystick1.Y PPJoy1.analog2 = Joystick1.Z Означает, что оси виртуального джоя PPJoy1.analog№№ будут исполняться осями реального джоя Joystick1.№№ Соответственно в конфиге, что находится в папке User должно быть так; AXE_RX JoystickDevice1=pitch AXE_RY JoystickDevice1=-radiator AXE_RZ JoystickDevice1=-power AXE_X JoystickDevice1=aileron AXE_Y JoystickDevice1=-elevator AXE_Z JoystickDevice1=rudder AXE_Y JoystickDevice2=trimrudder AXE_
-
И.так., продолжим. Я вообще то думал давать инфу по блочно, т.е. по каждой функции отдельно, но вышло вот так. В принципе, что в лоб, что по лбу, можно теперь скрипт разбирать на цитаты. В первую очередь для тех, кто хоть как то разбирается, блок связанный с выпуском и уборкой шасси потому такой громоздкий, потому, что организовать 2 параллельных цикла, оказалось проблематичным. И поскольку невозможно, используя одну кнопку , обойти первый цикл (уборку), т.е. уборка включается и при первой, и при второй инициализации, то алгоритм построен на том, что второй цикл (выпуск)
-
Завтра будем разбираться.