Перейти к содержанию

ForserX

Разработчики
  • Публикаций

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

  • Посещение

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

    1

ForserX стал победителем дня 19 ноября 2024

ForserX имел наиболее популярный контент!

Репутация

225 Отличная

Контакты

5 Подписчиков

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

  • Звание
    IX-Ray Platform
  • День рождения 27.01.2000

Дополнительная информация

  • Имя
    Даня
  • Пол
    Мужчина
  • Любимые моды
    Тайна станции "Дуга"

Посетители профиля

4 972 просмотра профиля
  1. Поищи в сливах исходников локаций сталкера
  2. покажи скрином хоть
  3. X-Ray движок из серой зоны. Он вроде бы проприетарный, а вроде и АП на него нет никакого Дополнено 1 минуту спустя Пытались. Хлопнули репо, 9 месяцев они весело под нарушением, но GSC не подали документов о судебных разбирательствах и GitHub вернул репо в свободный доступ
  4. тут чел в одного делает. Не душни
  5. Обновление от 25.04.2026 IX-Ray SDK + NET Online Edition
  6. Проспись, это ЧН двиг
  7. Да я на чистом IXR запускал, пришлось распаковать в поисках новых луа функций...
  8. Думаю можно чутка поднять тему и расписать пару моментов, которые будут полезны в целом для любого проекта: 1. Lua -> C++ -> Lua Соль: Конвертации данных из Lua в C++/C++ в Lua - не особо дешёвое удовольствие. Давайте рассмотрим на примере ПЫС функции в оригинале и энхансед (спасибо ребятам из Матабу за один из лучших примеров): Оригинал: -- Достигнут ли я отрядом выбравшим меня как цель. function se_smart_terrain:am_i_reached(squad) local squad_pos, squad_lv_id, squad_gv_id = squad:get_location() local target_pos, target_lv_id, target_gv_id = self:get_location() if game_graph():vertex(squad_gv_id):level_id() ~= game_graph():vertex(target_gv_id):level_id() then return false end if IsMonster(alife():object(squad:commander_id())) and squad:get_script_target() == nil then return squad_pos:distance_to_sqr(target_pos) <= 25 end return squad.always_arrived or squad_pos:distance_to_sqr(target_pos) <= self.arrive_dist^2 end Матабу эдишен: -- Достигнут ли я отрядом выбравшим меня как цель. function se_smart_terrain:am_i_reached(squad) local squad_pos, squad_lv_id, squad_gv_id = squad:get_location() local target_pos, target_lv_id, target_gv_id = self:get_location() if gg_vertex_level_id(squad_gv_id) ~= gg_vertex_level_id(target_gv_id) then return false end if IsMonster(alife():object(squad:commander_id())) and squad:get_script_target() == nil then return squad_pos:distance_to_sqr(target_pos) <= 25 end return squad.always_arrived or squad_pos:distance_to_sqr(target_pos) <= self.arrive_dist^2 end > if game_graph():vertex(squad_gv_id):level_id() ~= game_graph():vertex(target_gv_id):level_id() then Что ж тут такого страшного, что это решили переделать? Стучим в C++ (game_graph()) -> возвращаем в луа -> стучим в C++ vertex(squad_gv_id) -> возвращаем в луа -> Стучим в C++ level_id() -> возвращаем в луа. Итого, на левую часть условия происходит порядка ~7 конвертаций данных туда и обратно. И грубо говоря единая C++ функция gg_vertex_level_id(squad_gv_id) будет иметь всего ~3 конвертации, что кратно дешевле. Да, это всё "спички", если не обращать внимание на кол-во таких вызовов в тике. 2. Файлы логики (да гори оно огнём) И речь тут пойдёт не столько о сложных схемах, сколько о кол-ве символов на операцию. Логика в X-Ray имеет свой кастомный лексер, который по факту перебирает посимвольно каждую операцию, что вы туда вбиваете. Помимо самих символов - роляет и содержание. Если у Вас есть сложные условия с несколькими инфопорциями или скриптовыми кондишенами - схлопните в одну Луа функцию. Такой код будет дешевле для понимания системе xr_logic. Ибо он всё равно будет "генерить" функции для переваривания ваших кондишенов. 3. Рестрикторы - Наследие ПЫС string4096 m_temp; for (u32 i=0, n=_GetItemCount(*restrictions); i<n; ++i) if (!xr_strcmp(restriction,_GetItem(*restrictions,i,m_temp))) return (true); return (false); Это кусок кода из апдейта рестрикторов. В чём соль: Сюда приходит название рестриктора и огромная строка со списком всех рестрикторов на локации через запятую. _GetItem итеративно перебирает огромную строку в поиске нужной. Посимвольно. С первого символа. Каждый. Раз. По хорошему, это лучше исправить в самом движке. Но для модмейкеров могу сказать лишь одно: компактные названия рестрикторов имеют смысл.
  9. Откуда такая информация? Если и правда так, то искренне сочувствую им. Ибо те версии, что я тут постил, постились для поиска багов и их там оказалось немало, а если брали из коммитов, то там гг, вероятность найти коммит, где правками движка не сломали SDK имеет ~5%
  10. Всем на неё пофиг. Успокойся
  11. Красиво, что тут скажешь.

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек. Оставаясь на сайте, вы подтверждаете свое согласие на их использование. Политика конфиденциальности | Условия использования