akortunov Опубликовано 4 апреля, 2018 Жалоба Поделиться Опубликовано 4 апреля, 2018 (изменено) Официальный сайт OpenMW Страница загрузки Ссылка на загрузку актуального билда для Win64 (обновляется ежедневно) Баг-трекер Wiki Список задач до релиза 1.0 Репозиторий с исходным кодом на GitLab Discord: OpenMW (в наличии русскоязычный канал) IRC: #openmw на irc.freenode.net Полезные ссылки: Реестр популярных модов для OpenMW с гайдами по установке Руководство по портированию ретекстуров в OpenMW OpenMW на Youtube OpenMW на GitLab Диздоки планов развития после 1.0 Сторонние проекты, основанные на OpenMW: TES3MP - реализация мультиплеера для OpenMW. Тема OpenMW на 4PDA - здесь можно найти сборки OpenMW для Android 5+ и гайды по решению проблем. OpenMW для VR - основан на OpenXR, готовые сборки (устаревшие) есть только для Windows. Порт на Switch - к сожалению, в настоящее время им никто не занимается. Что такое OpenMW? OpenMW - это попытка воссоздать игровой движок для популярной RPG TES3 Morrowind, полноценную реализацию всех особенностей игры с открытым исходным кодом. Для того, чтобы вы имели более полное представление о проекте, вот ключевые особенности OpenMW: Кроссплатформенность - запуск на Windows (7 или новее), Linux, MacOS X, Android (платформы x86 не поддерживаются). Виртуальная файловая система, позволяющая устанавливать моды в отдельные директории, а не засорять Data Files. Поддержка сжатых BSA-архивов для экономии места на диске. Исправление ошибок системного проектирования: "грязные" GMST записи в плагинах, проблема "удвоения" в сейвах, лимит на 255 плагинов и т.д. Улучшенный поиск пути - с помощью статического или динамического (на выбор) построения навигационной сетки на основе геометрии локаций (вместо использования вручную расставленных дизайнерами локаций маркеров). Улучшение интерфейса (поддержка TrueType-шрифтов, масштабирования интерфейса и миникарты, поддержка текстур высокого разрешения для элементов интерфейса, редактирования разметки интерфейса с помощью XML-файлов, клавиатурной навигации, поворота камеры с помощью гироскопов и т.д.). Улучшение графики (поддержка шейдеров постобработки, динамические тени от объектов, Distant Land (хоть и без генератора LOD-ов), анимированная трава, шейдер воды с поддержкой отражений в реальном времени, улучшенная система освещения без лимита в 8 источников света на объект, улучшенная система тумана и многое другое). Улучшенная поддержка анимаций (возможность использовать отдельные файлы для отдельных групп анимаций, возможность добавлять кастомные кости в скелеты, возможность задать новые анимации для топоров, булав и кинжалов, поддержка анимаций открытия-закрытия контейнеров). Начальная поддержка Lua-скриптов для расширения возможностей плагиностроения. Поддержка ICU для локализации Lua-скриптов, шейдеров постобработки и элементов интерфейса. Использование дополнительных ядер процессора для фоновых задач (например, для предварительной загрузки локаций для бесшовного перемещения по игровому миру или для обработки коллизий объектов). Отсутствие лимита 4Гб на адресуемую процессом игры память из-за поддержки 64-битных архитектур. Намного меньшее количество вылетов в сравнении с оригинальным движком. Возможность модификации движка под свои нужды (например, довольно популярен TES3MP - форк OpenMW с поддержкой мультиплеера). OpenMW выпущен под лицензией GPLv3, весь исходный код написан с нуля. Нужен ли оригинальный Morrowind для OpenMW? И да, и нет. ДА. Прежде чем использовать OpenMW, вы должны легально приобрести и установить Morrowind на ваш компьютер. OpenMW воcпроизводит только техническую сторону игры, и не содержит в себе каких-то материалов, защищенных авторским правом. Используются только данные уже установленной игры, либо с установочных файлов с диска или цифровой копии игры. НЕТ. OpenMW - самостоятельный игровой движок. Он может быть базой для тотальных конверсий, не использующих файлы Morrowind. В качестве примеров можно привести Robowind Construct и StarWind. Каково текущее состояние проекта? Статус OpenMW уже находится в состоянии "бета": основные функции реализованы, идет работа по оптимизации и паритету с MGE и MWSE. Кроме этого есть ряд проблем, в основном с физикой и поддержкой модов, использующих баги и недокументированные возможности оригинального движка. OpenMW играбелен (можно нормально пройти сюжет игры и аддонов, ветки гильдий и т.д.), хотя и местами уступает MGE в качестве графики, но выигрывает по стабильности, а на многих машинах и по производительности и скорости загрузки локаций. Какие технологии вы используете? OpenMW построен с использованием различных библиотек и инструментов с открытым исходным кодом: Языки программирования: C++ (стандарт C++17 с частичной поддержкой C++20), GLSL, Lua Графика: OpenSceneGraph Физика: Bullet Звук: OpenAL Ввод-вывод: SDL2 Интерфейс: MyGUI Поиск пути для ИИ: Recast & Detour Я не программист, как я могу помочь проекту? 1. Можно просто играть и отсылать багрепорты 2. Можно тестировать разрабатываемый код, до того, как он попадёт в основную ветку. Там же можно вести обсуждение и предлагать изменения. 3. Можно тестировать моды. Основная цель - выявить проблемы с совместимостью. 4. Можно исследовать механики оригинального движка, особенно актуально в области тонкостей работы скриптов. 5. Можно обновлять Wiki. 6. PR тоже не помешает, особенно если он позволит привлечь тестировщиков и плагиностроителей. 7. Можно донатить разработчикам на Patreon'е: psi29 — проджект лид, поможете закрыть траты на хостинг Capostrophic — тысяча и один фикс + вагон фич AnyOldName3 — тени в OpenMW David Cernat — работа над TES3MP Изменено 30 мая, 2023 пользователем akortunov Ссылка на комментарий Поделиться на другие сайты Поделиться
morrow Опубликовано 30 июля, 2018 Жалоба Поделиться Опубликовано 30 июля, 2018 Да, спасибо за помощь. Похоже, дело было в порядке загрузки .esm в openmw.cfg.Т.к. проверил сначала отключением других плагинов - те же проблемы, как на первом скрине двумя постами выше, но изменяя ручками порядок всё заработало. Ух...Переместил всё сюда. Ссылка на комментарий Поделиться на другие сайты Поделиться
Broken von Skull Опубликовано 31 июля, 2018 Жалоба Поделиться Опубликовано 31 июля, 2018 Сейчас проверил. В 0.43 - быстрые атаки от первого лица если и дают смещение, то минимальное. В 0.44 - то же самое, но смещение отчетливо видно.Дополню: с анимацией ног при атаке что-то не так (0.44), потому смещение значительнее, чем раньше.В 0.43 анимация проигрывается нормально. Ссылка на комментарий Поделиться на другие сайты Поделиться
Capostrophic Опубликовано 31 июля, 2018 Жалоба Поделиться Опубликовано 31 июля, 2018 У стрекоз в беседкиных звуках горького берега на кейфреймконтроллерах в качестве режима циклирования стоит Clamp, а не Cycle, поэтому OpenMW доблестно проигрывает анимацию стрекоз один раз и стрекозы замирают на месте. Проблема в том, что Morrowind так не делает. В нём стрекозы летают без конца, как должно быть. Если поправить флаг, они одинаково хорошо летают и в опенмв, и в мурокрыле.Так вот: как на самом деле должны работать флаги, когда дело касается анимаций? Я почитал тут всякие треды, и осознал, что как-то этот режим всё-таки важен, раз уж анимации могут сломаться, если его неправильным сделать. Ссылка на комментарий Поделиться на другие сайты Поделиться
akortunov Опубликовано 31 июля, 2018 Жалоба Поделиться Опубликовано 31 июля, 2018 У стрекоз в беседкиных звуках горького берега на кейфреймконтроллерах в качестве режима циклирования стоит Clamp, а не Cycle, поэтому OpenMW доблестно проигрывает анимацию стрекоз один раз и стрекозы замирают на месте. Проблема в том, что Morrowind так не делает. В нём стрекозы летают без конца, как должно быть.ИЧСХ, у меня у этих стрекоз анимация тоже проигрывалась один раз в Морровинде. Ставил я этот мод несколько лет назад.Насколько я помню, эти же стрекозы в Better Sounds используются, да? Ссылка на комментарий Поделиться на другие сайты Поделиться
Capostrophic Опубликовано 31 июля, 2018 Жалоба Поделиться Опубликовано 31 июля, 2018 (изменено) Насколько я помню, эти же стрекозы в Better Sounds используются, да?Ага. Модель там не модифицированная. Правка: по той же причине плохо летают мотыльки (модифицированные стрекозы) в Nocturnal Moths и светлячки в Fireflies Invade Morrowind (у меня, по крайней мере).Правка 2: раз уж такая тема, ещё бы неплоха была бы инфа по поводу того, что же именно мурокрыл возвращает в качестве скорости ветра при вызове GetWindSpeed.Правка 3: доблестно скинул задачу даже хуже разбирающемуся в этом человеку и он умудрился Хрнчамда об этом спросить. Оказывается, это длина "вектора" из одной координаты, который по своему строится для каждой погоды. Много вычислений для относительно бесполезной функции. Изменено 31 июля, 2018 пользователем Capostrophic Ссылка на комментарий Поделиться на другие сайты Поделиться
Broken von Skull Опубликовано 1 августа, 2018 Жалоба Поделиться Опубликовано 1 августа, 2018 Можно ли будет использовать MWSE2 скрипты в OpenMW, когда там добавят поддержку Lua? Ссылка на комментарий Поделиться на другие сайты Поделиться
akortunov Опубликовано 1 августа, 2018 Жалоба Поделиться Опубликовано 1 августа, 2018 Можно ли будет использовать MWSE2 скрипты в OpenMW, когда там добавят поддержку Lua? Вроде стороны договорились выработать общий API, и дальше дело пока не пошло. Не могу сказать, чем это закончится.Пока желающих реализовать все это хозяйство не нашлось. Ссылка на комментарий Поделиться на другие сайты Поделиться
Capostrophic Опубликовано 1 августа, 2018 Жалоба Поделиться Опубликовано 1 августа, 2018 С 31 июля.Андрей:Иконки лаунчера переработаны: сохранены с правильным профилем и дополнены до полного набора, чтобы они не были произвольными в зависимости от системы и темы системы (которая может быть, например, монохромной).Когда NPC путешествует с AiTravel, он остановится поблизости цели, если на позиции его цели стоит другой NPC.Если ближайший узел сетки путей находится в противоположном направлении от цели, он игнорируется.Предыдущие две вещи исправляют поведение в двух трибунальских квестахСложность ограничена снизу -500 и сверху +500, чтобы предотвратить переполнение.Если интерфейс увеличен через настройку scaling factor, кукла персонажа будет рендериться в большем разрешении, чтобы не быть размытой на больших экранах. Если он уменьшен, её разрешение не изменится.я:Привязанные к кастеру эффекты теперь нельзя на себя скастовать - TESCS заклинания с такими эффектами "на себя" не разрешает создавать, а OpenMW-CS разрешает, что ведёт к непредсказуемому поведению. Хотя я мог что-нибудь сломать.Теперь можно делать криты неудачливым жертвам, которые не заметили игрока и не находятся в бою, стрелами, болтами и всякими дротиками. Множитель 4x, как у оружия ближнего боя (зависит от fCombatCriticalStrikeMult). Ссылка на комментарий Поделиться на другие сайты Поделиться
CemKey Опубликовано 2 августа, 2018 Жалоба Поделиться Опубликовано 2 августа, 2018 Колдую с увеличением арбалетов и заметил, что тайминги анимаций самих арбалетов сдвинуты в OpenMW относительно Моррки.И анимация бипеда при заряжании стоя на месте меняется в зависимости от наклона выстрела относительно горизонта. Если вверх стреляю, то при перезарядке и арбалет не в землю упирается, а в перед под углом торчит. А если стреляю вниз, то при перезарядке арбалет входит в нижнюю часть тела. В оригинале как бы высоко не стрелял, арбалет нормально упирается в землю, тоесть вертикально ставится. Ссылка на комментарий Поделиться на другие сайты Поделиться
akortunov Опубликовано 2 августа, 2018 Жалоба Поделиться Опубликовано 2 августа, 2018 (изменено) Колдую с увеличением арбалетов и заметил, что тайминги анимаций самих арбалетов сдвинуты в OpenMW относительно Моррки.И анимация бипеда при заряжании стоя на месте меняется в зависимости от наклона выстрела относительно горизонта. Если вверх стреляю, то при перезарядке и арбалет не в землю упирается, а в перед под углом торчит. А если стреляю вниз, то при перезарядке арбалет входит в нижнюю часть тела. В оригинале как бы высоко не стрелял, арбалет нормально упирается в землю, тоесть вертикально ставится.Про сдвинутые тайминги не понял, но не особо удивлен.По поводу анимаций перезарядки: OpenMW пока использует одинаковую анимацию в движении и на месте (инфа выше), так что эта проблема пока потеряла остроту.Но интересно, игнорирование наклона персонажа - это все-таки только для перезарядки арбалета специфично, или еще где используется? И почему это вообще так?С анимациями атаки в OpenMW вообще пока довольно грустно, так что помощь знающего человека была бы кстати. Изменено 2 августа, 2018 пользователем akortunov Ссылка на комментарий Поделиться на другие сайты Поделиться
CemKey Опубликовано 2 августа, 2018 Жалоба Поделиться Опубликовано 2 августа, 2018 Про сдвинутые тайминги не понял, но не особо удивлен.Анимации арбалета опаздывают (вроде бы). Я увеличил арбалет и чтоб при перезарядке он не входил в землю, я сделал, чтоб он сдвигался назад в данном этапе. В Моррке нормально, а вот в OpenMW это происходит в ином этапе. Ссылка на комментарий Поделиться на другие сайты Поделиться
Broken von Skull Опубликовано 2 августа, 2018 Жалоба Поделиться Опубликовано 2 августа, 2018 С анимациями атаки в OpenMW вообще пока довольно грустно, так что помощь знающего человека была бы кстати.Поддержкой анимации в OpenMW занимался kcat, можно поинтересоваться у него. Ссылка на комментарий Поделиться на другие сайты Поделиться
akortunov Опубликовано 2 августа, 2018 Жалоба Поделиться Опубликовано 2 августа, 2018 (изменено) Поддержкой анимации в OpenMW занимался kcat, можно поинтересоваться у него.Он сам уже признался, что позабыл детали. К тому же я спрашивал про костыли, глюки и другие забавные особенности оригинального движка. Анимации арбалета опаздывают (вроде бы). Я увеличил арбалет и чтоб при перезарядке он не входил в землю, я сделал, чтоб он сдвигался назад в данном этапе. В Моррке нормально, а вот в OpenMW это происходит в ином этапе.Я могу посоветовать только багрепорт создать, желательно с приложенной модифицированной моделью и видео (или хотя бы с моделью). Может, кто-нибудь сумеет помочь. Мои же познания в анимациях базовые. Изменено 2 августа, 2018 пользователем akortunov Ссылка на комментарий Поделиться на другие сайты Поделиться
CemKey Опубликовано 2 августа, 2018 Жалоба Поделиться Опубликовано 2 августа, 2018 (изменено) Каюсь. Проверял на 0.43. В 0.44 тайминги у арбалетов вроде нормально работают, а вот анимация бипеда по прежнему так же. Я могу посоветовать только багрепорт создатьЭто так сложно без знания английского. Придется медитировать несколько дней перед этим.А вообще для зарядки арбалета две анимации, одна на ходу, другая соответственно стоя, а OpenMW использует только стоячую анимацию. Изменено 2 августа, 2018 пользователем CemKey Ссылка на комментарий Поделиться на другие сайты Поделиться
Broken von Skull Опубликовано 2 августа, 2018 Жалоба Поделиться Опубликовано 2 августа, 2018 А чего вообще не хватает до релиза 1.0? Кроме багофикса и OpenMW-CS. Ссылка на комментарий Поделиться на другие сайты Поделиться
Capostrophic Опубликовано 2 августа, 2018 Жалоба Поделиться Опубликовано 2 августа, 2018 Строго говоря, согласно трекеру, если не включать штуки редактора и баги, и включать вещи, на которые рука zini повесила тег "решить до 1.0", этошейдерная рябь на воде от движения живностифлаги NiBillboardNodeинструкция RepairedOnMeвозможность столкновения магических снарядов друг с другомкакой-то метод отображать инфу о серьёзных ошибках в самой игречто-то, что позволит яркость корректировать, не обращаясь к багнутой, но работающей совершенно корректно, функции SDLзначения по умолчанию для каких-либо из настроек, которые импортируются из Morrowind.ini в openmw.cfg (Zini вообще считает, что это ерунда, которой и некодер может заняться, но что-то смельчака не нашлось)Shift-двойной клик для разворачивания окна на весь экран и обратно, с сохранением состояниянахождение пути улучшить и как-то NiAvoidNode при этом заюзатьсделать ИИ для дверей менее отмороженнымкакой-то способ определять кодировку файлов морровинда автоматическиИ... всё. Больше никакие фичи движка тега 1.0 не имеют. Из тех, что не имеют, но они в основном либо у редактора, либо отложены на пост-1.0, могу выделитьдобавление обработки времени действия магического эффекта EXTRA SPELL поддержка вызовов к soundgen у активаторов с моделями существменее отмороженный прицел при запуске снарядов в движущиеся целименее отмороженное управление через контроллер и настройки этого самого управлениявозможность отключить контроллерне давать бродящему ИИ при пропуске времени попадать на узлы сетки путей, которые за закрытыми дверями находятся (но это скорее "баг")возможность в лаунчере скопировать путь к моду через контекстное менювозможность управлять архивами и папками данных через лаунчервремя каждой строки в логеквадратическая и TBC-интерполяция у анимаций (сейчас тупо линейная на каждый чих, Greatness7 меня приметил в дискорде и пожаловался)создание источников света внутримодельных (NiDirectionalLight, NiSpotLight и т.д.), а то они читаются, но ничего с ними не делаетсяну и всякая мелкая спорная хрень по мелочи, больше пост-одиннольная Ссылка на комментарий Поделиться на другие сайты Поделиться
akortunov Опубликовано 2 августа, 2018 Жалоба Поделиться Опубликовано 2 августа, 2018 (изменено) А вообще для зарядки арбалета две анимации, одна на ходу, другая соответственно стоя, а OpenMW использует только стоячую анимацию.А для кого я распинался выше, когда расписывал, как анимации перезарядки арбалетов работают?Анимация одна, она же "shoot follow".Просто она задействует все тело целиком, но при перемещении персонажа анимации движения перекрывают анимацию перезарядки для нижней части туловища, вот и перезаряжают персонажи арбалеты на ходу.Причем если во время перезарядки персонаж начинает или прекращает двигаться, переключение между стойками идет мгновенно.В результате к 0.45 пока было принято решение применять анимацию перезарядки арбалета только для верхнего туловища (т.е. анимация всегда как "в движении"), т.е. твой баг в 0.45 проявляться не должен. Соберем фидбэк от пользователей и решим, что делать дальше. А чего вообще не хватает до релиза 1.0? Кроме багофикса и OpenMW-CS.Capostrophic тут напустил туману.Если вкратце:1. Надо таки доделать тени.2. Довести до ума навмеши, что позволит закрыть львиную долю претензий к ИИ.3. Довести до ума боевые анимации.4. Реализовать несколько мелких фич (перезаряжать магические предметы вне инвентаря героя, позволить ряду консольных команд менять базовые записи и т.д.)5. Довести до ума физику.6. Решить ряд проблем с производительностью.7. Долго и нудно ловить мелкие баги в модах, т.к. в 1.0 заявлена совместимость с ванильными модами.Причем приличное количество модов используют неочевидные, недокументированные или откровенно глючные решения, которые вообще непонятно, как воспроизводить. Скорее всего, п.п. 1-4 примерно к 0.46 закроют, п.п. 5-6 у нас пока особо реализовать некому, п. 7 будет реализоваться параллельно остальным.Редактор я не учитываю, т.к. Zini уже говорил, что если движок будет готов, а редактор - нет, то 1.0 будет без редактора. А вообще, если глянуть в ретроспективе, версия 0.43 была про distant terrain, ИИ и интерфейс, 0.44 больше про совместимость с модами, а в 0.45 много фиксов анимаций. Изменено 3 августа, 2018 пользователем akortunov Ссылка на комментарий Поделиться на другие сайты Поделиться
CemKey Опубликовано 2 августа, 2018 Жалоба Поделиться Опубликовано 2 августа, 2018 А для кого я распинался выше, когда расписывал, как анимации перезарядки арбалетов работают?Анимация одна, она же "shoot follow".Но я смотрел и анимация на ходу и анимация стоя отличаются не только ниже пояса. Или мне показалось. Ссылка на комментарий Поделиться на другие сайты Поделиться
Broken von Skull Опубликовано 2 августа, 2018 Жалоба Поделиться Опубликовано 2 августа, 2018 Выглядит вполне выполнимо!Надеюсь, что хоть в 2019 дождемся релиза 1.0. 5. Довести до ума физику. А что с ней не так? 7. Долго и нудно ловить мелкие баги в модах, т.к. в 1.0 заявлена совместимость с ванильными модами. Кстати о багах, спешу заявить, что плагин "Корабль 'Оседлавший Бурю'" в OpenMW не работает. Ни лодка, ни корабль не активируются для плавания.Вот скрипт лодки:;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Stormrider Boat Script - Copyright © Nov 2004 by Kellick Stormcrow; Based on: Boat Script - Copyright © Dec 2002 by (MAD)MAX YUE;-------------------------------------------------------------------------------------------------------------------------------------------------------------Begin KS_SR_Boat_Script ;SCRIPT DEPENDENCIES;KS_SR_Boat_Create;KS_SR_Boat_Create_Detect;KS_SR_Boat_Create_Detect_R;KS_SR_Boat_Multiplier;KS_SR_Boat_Multiplier_02;KS_SR_Boat_Multiplier_03;KS_SR_Boat_FTravel_GM;KS_SR_Boat_FTravel_SN;KS_SR_Boat_FTravel_TB;KS_SR_Boat_FTravel_SM;KS_SR_Boat_FTravel_DF;KS_SR_Boat_FTravel_KH;KS_SR_Boat_FTravel_Ship ;ITEM DEPENDENCIES;activator KS_SR_Boat (script attaches to);misc KS_SR_misc_ship_repair;-------------------------------------------------------------------------------------------------------------------------------------------------------------;GLOBAL PARMATERS;===============================================================================;float KS_SR_Boat_Angle ; store object Angle before it gets deleted;short KS_SR_Boat_Auto ; 0=manual turning, 1=auto turn;short KS_SR_Boat_Cellchange ; flag when player change cell;short KS_SR_Boat_Damage ; Boat hull rating;float KS_SR_Boat_Distance ;;short KS_SR_Boat_Exist ;;short KS_SR_Boat_Gear ;;short KS_SR_Boat_Hitflag ;;short KS_SR_Boat_Sailmode ; 0=dismounted, 1=sailing;short KS_SR_Boat_Speed ; Sailing speed;float KS_SR_Boat_X ; Boat x coord;float KS_SR_Boat_Xdistance ;;float KS_SR_Boat_Xmul ; pre-determined sin/cos multiplier;float KS_SR_Boat_Y ; Boat y coord;float KS_SR_Boat_Ymul ; pre-determined sin/cos multiplier;float KS_SR_Boat_Ydistance ;;float KS_SR_Ship_Angle ; Ship Angle;short KS_SR_Ship_Exist ; Ship exist and boat docking state;float KS_SR_Ship_X ; Ship x coord;float KS_SR_Ship_Y ; Ship y coord;-------------------------------------------------------------------------------------------------------------------------------------------------------------;LOCAL PARAMETERS;===============================================================================float xx ; object x coordinatesfloat yy ; object y coordinatesfloat zz ; object z coordinatesfloat oangle ; object z axis anglefloat zangle ; player z axis anglefloat xxx ; player x coordinatesfloat yyy ; player y coordinatesfloat zzz ; player z coordinatesfloat xxxx ; boat x coordinate when land on shorefloat yyyy ; boat y coordinate when land on shoreshort landed ; parameter set when player landedfloat stimer ; timer used to delay delete objectshort sscript ; parameter set when cell changeshort doOnce ; parameter used to set boat position once immediately after creationshort select ; button used for selecting optionsshort selectflag1 ; flag set when boat is activatedshort selectflag2 ; flag set when FTS or Fast Travel is selectedshort delay ; parameter used to delay Disable/Enableshort temp ; temporary parametershort flagshort pressed ; flag to chk SNEAK button pressed and releasedfloat xdist ; parameter used to calculate x distancefloat ydist ; parameter used to calculate y distancefloat distance ; parameter used to calculate avg distanceshort startflag ; parameter used to chk whether boat is dockingshort disableflag ; flag used to disable ship scriptshort repair ; parameter used to calculate repair pts ;-------------------------------------------------------------------------------------------------------------------------------------------------------------; SCRIPT BEGINS;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( MenuMode == 1 )returnendif ;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Delete object;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( disableflag == 1 )Disableif ( CellChanged == 1 )SetDelete, 1endifreturnendif if ( KS_SR_Boat_Speed > 0 )if ( CellChanged == 1 )set KS_SR_Boat_Cellchange to 1endifendif if ( KS_SR_Ship_Exist == 4 )set disableflag to 1set KS_SR_Ship_Exist to 5returnendif if ( KS_SR_Ship_Exist == 2 )set KS_SR_Boat_Speed to 0set KS_SR_Boat_Sailmode to 0Stopscript KS_SR_Boat_Multiplierset KS_SR_Ship_Exist to 3endif if ( KS_SR_Ship_Exist >= 2 )if ( KS_SR_Ship_Exist != 10 )returnendifendif ;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Object will warp or remain in previous cell during cell change. To replace the object, ; a new object is created. Requires global script "KS_SR_Boat_Create" to create new object.;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( KS_SR_Boat_Sailmode == 1 )if ( KS_SR_Boat_Cellchange == 1 )startscript, "KS_SR_Boat_Create"set KS_SR_Boat_Cellchange to 2set stimer to 0if ( sscript > 0 )SetDelete, 1returnendifset sscript to 1endifendif if ( sscript == 1 )if ( KS_SR_Boat_Cellchange == 0 )Disableset sscript to 2endifendif if ( sscript == 2 )set stimer to ( stimer + GetSecondsPassed )if ( stimer >= 1.5 )SetDelete, 1returnelsereturnendifendif if ( KS_SR_Boat_Speed > 0 )if ( delay == 0 )Disableset delay to 1endifendif ;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Set boat initial coordinates;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( doOnce == 0 )Disableif ( KS_SR_Boat_X != 0 )if ( KS_SR_Boat_Y != 0 )set xx to KS_SR_Boat_Xset yy to KS_SR_Boat_Yif ( KS_SR_Boat_Angle >= 0 )set oangle to ( KS_SR_Boat_Angle - 180 )elseset oangle to ( 180 + KS_SR_Boat_Angle )endifsetpos, x, xxsetpos, y, yysetpos, z, 2setAngle, z, oangleendifendifEnableset doOnce to 1endif ;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Set coordinates correct boat coordinates immediately after load game;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( KS_SR_Boat_Sailmode == 0 )set xx to KS_SR_Boat_Xset yy to KS_SR_Boat_Yif ( KS_SR_Boat_Angle >= 0 )set oangle to ( KS_SR_Boat_Angle - 180 )elseset oangle to ( 180 + KS_SR_Boat_Angle )endifsetpos, x, xxsetpos, y, yysetpos, z, 2setAngle, z, oangleendif ;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Select Menu Routine;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( selectflag1 == 1 )set select to GetButtonPressedif ( select == 0 )stopscript KS_SR_Boat_Multiplierstartscript KS_SR_Boat_Multiplier_03set KS_SR_Boat_Sailmode to 0messagebox "БЫСТРОЕ ПУТЕШЕСТВИЕ", "Назад к кораблю", "Дагон Фел", "Гнаар Мок", "Хла Оуд", "Хуул", "Садрит Мора", "Сейда Нин", "Тель Бранора", "ВЫЙТИ"set selectflag2 to 1set selectflag1 to 0elseif ( select == 1 )startscript KS_SR_Boat_Create_Detect_Rmessagebox "Лодка: Самый малый назад!"set KS_SR_Boat_Speed to -1set selectflag1 to 0elseif ( select == 2 )messagebox "Лодка надежно стоит на якоре..."set KS_SR_Boat_Speed to 0set landed to 2set selectflag1 to 0elseif ( select == 3 )if ( KS_SR_Boat_Damage == 100 )Messagebox "Повреждений нет!"elseif ( player->GetItemCount, "KS_SR_misc_ship_repair" > 0 )playsound "Repair"player->removeitem "KS_SR_misc_ship_repair", 1set repair to Random, 100set KS_SR_Boat_Damage to ( KS_SR_Boat_Damage + repair )if ( KS_SR_Boat_Damage > 100 )set KS_SR_Boat_Damage to 100endifmessagebox "Состояние лодки = %.0f / 100", KS_SR_Boat_Damageelsemessagebox "У вас нет инструментов для ремонта лодки..."endifset selectflag1 to 0elseif ( select == 4 )if ( KS_SR_Boat_Auto == 0 )set KS_SR_Boat_Auto to 1messagebox "Автоматическое управление"elseif ( KS_SR_Boat_Auto == 1 )set KS_SR_Boat_Auto to 0messagebox "Ручное управление"endifset selectflag1 to 0set KS_SR_Boat_Speed to tempelseif ( select == 5 )set selectflag1 to 0set KS_SR_Boat_Speed to tempendifreturnendif ;-------------------------------------------------------------------------------------------------------------------------------------------------------------; FAST TRAVEL ROUTINE;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( selectflag2 == 1 )set select to GetButtonPressedif ( select == 0 )if ( KS_SR_Ship_Exist == 0 )messagebox "У вас нет корабля!"set selectflag2 to 0set KS_SR_Boat_Speed to tempset KS_SR_Boat_Sailmode to 1elsefadeto 100, 0.001set KS_SR_Boat_X to ( KS_SR_Ship_X + ( 450 * KS_SR_Boat_Xmul ) )set KS_SR_Boat_Y to ( KS_SR_Ship_Y + ( 450 * KS_SR_Boat_Ymul ) )set KS_SR_Boat_Angle to KS_SR_Ship_Anglestartscript KS_SR_Boat_FTravel_Shipset selectflag2 to 2set disableflag to 1endifelseif ( select == 1 )fadeto 100, 0.001set KS_SR_Boat_X to 61554set KS_SR_Boat_Y to 186452set KS_SR_Boat_Angle to 180startscript KS_SR_Boat_FTravel_DFset selectflag2 to 2set disableflag to 1elseif ( select == 2 )fadeto 100, 0.001set KS_SR_Boat_X to -64276set KS_SR_Boat_Y to 25636set KS_SR_Boat_Angle to 60startscript KS_SR_Boat_FTravel_GMset selectflag2 to 2set disableflag to 1elseif ( select == 3 )fadeto 100, 0.001set KS_SR_Boat_X to -48854set KS_SR_Boat_Y to -38646set KS_SR_Boat_Angle to 0startscript KS_SR_Boat_FTravel_HOset selectflag2 to 2set disableflag to 1elseif ( select == 4 )fadeto 100, 0.001set KS_SR_Boat_X to -71650set KS_SR_Boat_Y to 139486set KS_SR_Boat_Angle to 90startscript KS_SR_Boat_FTravel_KHset selectflag2 to 2set disableflag to 1elseif ( select == 5 )fadeto 100, 0.001set KS_SR_Boat_X to 139792set KS_SR_Boat_Y to 40697set KS_SR_Boat_Angle to 90startscript KS_SR_Boat_FTravel_SMset selectflag2 to 2set disableflag to 1elseif ( select == 6 )fadeto 100, 0.001set KS_SR_Boat_X to -8372set KS_SR_Boat_Y to -72160set KS_SR_Boat_Angle to 270startscript KS_SR_Boat_FTravel_SNset selectflag2 to 2set disableflag to 1elseif ( select == 7 )fadeto 100, 0.001set KS_SR_Boat_X to 120319set KS_SR_Boat_Y to -100934set KS_SR_Boat_Angle to 180startscript KS_SR_Boat_FTravel_TBset selectflag2 to 2set disableflag to 1elseif ( select == 8 )set KS_SR_Boat_Speed to tempset selectflag2 to 0set KS_SR_Boat_Sailmode to 1endifif ( select >= 0 )startscript KS_SR_Boat_Multiplierendifreturnendif ;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Activate sailing;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( OnActivate = 1 )if ( KS_SR_Boat_Sailmode == 0 )StopScript "TribunalMain"DisablePlayerJumpingplayer->DisableTeleportingplayer->DisableLevitationset xx to getPos, xset yy to getPos, yplayer->setPos, x, xxplayer->setPos, y, yyplayer->setPos, z, 0player->AddSpell "KS_SR_floatboat" ; this spell ( ability ) keeps player fm falling downset KS_SR_Boat_Speed to 0set KS_SR_Boat_Sailmode to 1messagebox "Убедитесь, что включен режим БЕГА!"startscript KS_SR_Boat_Multiplierstartscript KS_SR_Boat_Create_Detectif ( KS_SR_Ship_Exist == 10 )set KS_SR_Ship_Exist to 1endifelseif ( KS_SR_Boat_Sailmode == 1 )messagebox "НАВИГАЦИЯ"endifendif ;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Gather object and player coordinates;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( KS_SR_Boat_Sailmode > 0 )set xx to getPos, xset yy to getPos, yif ( xx != KS_SR_Boat_X )set xx to KS_SR_Boat_Xendifif ( yy != KS_SR_Boat_Y )set yy to KS_SR_Boat_Yendifset xxx to "player"->getPos, xset yyy to "player"->getPos, yset zzz to "player"->getPos, zendif ;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Collision Detection Check-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( KS_SR_Boat_Sailmode == 1 )set KS_SR_Boat_Xdistance to ( xxx - xx )set KS_SR_Boat_Ydistance to ( yyy - yy )set xdist to ( KS_SR_Boat_Xdistance * KS_SR_Boat_Xdistance )set ydist to ( KS_SR_Boat_Ydistance * KS_SR_Boat_Ydistance )set distance to ( xdist + ydist )set KS_SR_Boat_Distance to GetSquareRoot, distanceendif if ( KS_SR_Boat_Speed > 0 )if ( GetPCRunning == 0 )if ( KS_SR_Boat_Distance > 30 )set KS_SR_Boat_Hitflag to 3set flag to 1playsound "Pack"messagebox "По-берегитесь! Ваша лодка УДАРИЛАСЬ обо что-то твердое..."endif;messagebox "%.2f", distanceendifendif if ( KS_SR_Boat_Hitflag == 3 )if ( KS_SR_Boat_Speed > 0 )set KS_SR_Boat_Damage to ( KS_SR_Boat_Damage - KS_SR_Boat_Speed )messagebox "Повреждения = %.0f, Состояние лодки = %.0f / 100", KS_SR_Boat_Speed , KS_SR_Boat_Damageendifif ( KS_SR_Boat_Damage <= 0 )Disablemessagebox "Ваша лодка потерпела КРУШЕНИЕ!"set KS_SR_Boat_Speed to 0set KS_SR_Boat_Hitflag to 0playsound, "KS_SR_Boat_Wreck"set KS_SR_Boat_Exist to 0EnablePlayerJumpingplayer->EnableTeleportingplayer->EnableLevitationset KS_SR_Boat_Sailmode to 0player->RemoveSpell "KS_SR_floatboat"StartScript "TribunalMain"SetDelete, 1returnendifif ( flag == 0 )if ( KS_SR_Boat_Speed > 0 )set xxxx to ( xx - ( KS_SR_Boat_Xmul * 40 ) )set yyyy to ( yy - ( KS_SR_Boat_Ymul * 40 ) )elseset xxxx to ( xx + ( KS_SR_Boat_Xmul * 10 ) )set yyyy to ( yy + ( KS_SR_Boat_Ymul * 10 ) )endifelseset xxxx to ( xx - ( KS_SR_Boat_Xmul * 200 ) )set yyyy to ( yy - ( KS_SR_Boat_Ymul * 200 ) )endifset xx to xxxxset yy to yyyyset KS_SR_Boat_Speed to 0set KS_SR_Boat_Hitflag to 0set flag to 0endif ;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Restore all parameters after landing;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( landed > 0 )set KS_SR_Boat_Speed to 0Stopscript KS_SR_Boat_MultiplierDisableset landed to 0set KS_SR_Boat_X to getPos, xset KS_SR_Boat_Y to getPos, yEnablePlayerJumpingplayer->EnableTeleportingplayer->EnableLevitationplayer->RemoveSpell "KS_SR_floatboat"setPos, z, 2Enableset KS_SR_Boat_Sailmode to 0StartScript "TribunalMain"returnendif ;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Speed Control;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( KS_SR_Boat_Sailmode == 1 )if ( GetPCRunning == 1 )if ( ScriptRunning, "KS_SR_Boat_Multiplier_02" == 0 )startscript "KS_SR_Boat_Multiplier_02"endifendifendif if ( KS_SR_Boat_Sailmode == 1 )if ( GetPCRunning == 1 )if ( KS_SR_Boat_Gear == 1 ) if ( KS_SR_Boat_Speed < 10 ) ; max speed can be adjusted here ( default = 10 )set KS_SR_Boat_Speed to ( KS_SR_Boat_Speed + 1 )if ( KS_SR_Boat_Speed > 10 )set KS_SR_Boat_Speed to 10endifmessagebox "Скорость лодки : %.0f", KS_SR_Boat_Speed elsemessagebox "Скорость лодки : %.0f (предельная )", KS_SR_Boat_Speed endifelseif ( KS_SR_Boat_Gear == 2 )if ( KS_SR_Boat_Auto == 0 )if ( KS_SR_Boat_Speed != 0 )rotate, z, -60set oangle to getAngle, zif ( oangle >= 0 )set KS_SR_Boat_Angle to ( oangle - 180 )elseset KS_SR_Boat_Angle to ( 180 + oangle )endifendifendifelseif ( KS_SR_Boat_Gear == 3 )if ( KS_SR_Boat_Auto == 0 )if ( KS_SR_Boat_Speed != 0 )rotate, z, 60set oangle to getAngle, zif ( oangle >= 0 )set KS_SR_Boat_Angle to ( oangle - 180 )elseset KS_SR_Boat_Angle to ( 180 + oangle )endifendifendifelseif ( KS_SR_Boat_Gear == 4 )if ( KS_SR_Boat_Speed > 0 ) ; min speed can be adjusted here ( default = 0 )set KS_SR_Boat_Speed to ( KS_SR_Boat_Speed - 1 )messagebox "Скорость лодки : %.0f", KS_SR_Boat_Speed elseset KS_SR_Boat_Speed to 0messagebox "Скорость лодки : 0 ( остановлена )"endifendifelsestopscript "KS_SR_Boat_Multiplier_02"endifendif if ( KS_SR_Boat_Sailmode == 1 )if ( pressed == 0 )if ( GetPCSneaking == 1 )set pressed to 1endifelseif ( GetPCSneaking == 0 )set pressed to 0messagebox "ОПЦИИ" "Быстрое путешествие" "Задний ход" "Бросить якорь" "Чинить лодку" "Авто/ручной режим" "ВЫЙТИ" Enableset selectflag1 to 1set temp to KS_SR_Boat_Speed set KS_SR_Boat_Speed to 0returnendifendifendif ;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Sail direction calculation by using player zrot angle - resolution 1 degree;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( KS_SR_Boat_Sailmode > 0 )set xx to ( xx + ( KS_SR_Boat_Xmul * KS_SR_Boat_Speed ) )set yy to ( yy + ( KS_SR_Boat_Ymul * KS_SR_Boat_Speed ) )endif ;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Set the sailing motion;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( KS_SR_Boat_Sailmode > 0 )player->setPos, x, xxplayer->setPos, y, yyplayer->setPos, z, 2setPos, x, xxsetPos, y, yysetPos, z, 2set KS_SR_Boat_X to xxset KS_SR_Boat_Y to yyif ( KS_SR_Boat_Auto == 1 )if ( KS_SR_Boat_Speed > 0 )set KS_SR_Boat_Angle to "player"->getAngle, zif ( KS_SR_Boat_Angle >= 0 )set oangle to ( KS_SR_Boat_Angle - 180 )elseset oangle to ( 180 + KS_SR_Boat_Angle )endifsetAngle, z, oangleendifendifendif if ( delay == 1 )Enableset delay to 0endif ;-------------------------------------------------------------------------------------------------------------------------------------------------------------; SCRIPT ENDS;-------------------------------------------------------------------------------------------------------------------------------------------------------------End KS_SR_Boat_ScriptЕсли найдется время, буду благодарен за помощь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Capostrophic Опубликовано 2 августа, 2018 Жалоба Поделиться Опубликовано 2 августа, 2018 (изменено) Надеюсь, что хоть в 2019 дождемся релиза 1.0.Сглазишь. Много чего не так с физикой, иначе бы не взялся человек писать обработчик движения чуть ли не заново. Не говоря уже о хромающей если уже не на две, то на одну ногу оптимизации этой самой физики. Правка: если там тот же скрипт, что и в версии на нексусе, то он не компилится из-за того, что ряд дефисов где-то около 388 строки не закомментированПравка 2: да, вот это место ;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Collision Detection Check------------------------------------------------------------------------------------------------------------------------------------------------------------- закомментировать третью строку и скорее всего дело пойдёт нормально правка 3: не компилится скрипт ks_sr_ini, потому что он глобальный, но какая-то из функций не работает без вызывающего объектаправка 4: это getitemcount. похоже, скрипт пытается добавить предмет в том случае, если он не существует. но getitemcount должен работать только на предметах в инвентаре... Если заспаунить торговца и телепортатор вручную и купить у торговца лодку, лодка вполне себе заведётся. Классно работает, кстати.правка 5: вердиктскрипты поломаны нахрен и работают в оригинале только потому, что ваниль не может в обработку ошибок, фикса не будет (исправить можно сами скрипты), мод классный Изменено 2 августа, 2018 пользователем Capostrophic Ссылка на комментарий Поделиться на другие сайты Поделиться
akortunov Опубликовано 3 августа, 2018 Жалоба Поделиться Опубликовано 3 августа, 2018 Насколько я помню, в StormRider'е проблема как раз с физикой - телепортационные команды в Морровинде задействуют физику для обнаружения коллизий (мы не знаем, как именно), а OpenMW честно перемещает объект в заданную позицию.Например, скрипт перемещает лодку на 10 единиц через SetPos каждый кадр, но если позиция реально изменилась на меньшее число, то лодка с чем-то столкнулась. В OpenMW такой подход не работает, да и в оригинале он глючит. Ссылка на комментарий Поделиться на другие сайты Поделиться
Broken von Skull Опубликовано 3 августа, 2018 Жалоба Поделиться Опубликовано 3 августа, 2018 Спасибо за помощь! Плагин заработал, но с некоторыми нюансами, отличными от ванили. Потестил только на лодке. 1) Коллизии со статиками не работают, как и заметил akortunov. Причем с террейном всё сталкивается нормально. 2) В ручном режиме плавания при повороте на определенное кол-во градусов (540 направо от изначального положения лодки, 90 - налево) вектор движения лодки перестает реагировать на повороты. Причем если вырулить обратно - всё приходит в норму. Со скриптом ks_sr_ini проблем не было. Ссылка на комментарий Поделиться на другие сайты Поделиться
Capostrophic Опубликовано 3 августа, 2018 Жалоба Поделиться Опубликовано 3 августа, 2018 такой подход не работаетмне сначала показалось, что это фича (540 направоВот это может быть проблемой. Углы доводятся до "корректного значения" (от -180 до 180 градусов, от минус пи до пи радианов) только для камеры. Ссылка на комментарий Поделиться на другие сайты Поделиться
Broken von Skull Опубликовано 7 августа, 2018 Жалоба Поделиться Опубликовано 7 августа, 2018 В OpenMW сейчас используется osgAnimation или пересели на что-то другое? Ссылка на комментарий Поделиться на другие сайты Поделиться
akortunov Опубликовано 7 августа, 2018 Жалоба Поделиться Опубликовано 7 августа, 2018 В OpenMW сейчас используется osgAnimation или пересели на что-то другое?Да кто его сейчас разберет. Вроде самопальная какая-то реализация используется, хотя osgAnimation.dll по-прежнему пакуется. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти