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

ForserX

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

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

  • Посещение

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

    1

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

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

Репутация

214 Отличная

Контакты

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

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

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

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

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

4 891 просмотр профиля
  1. Да я на чистом IXR запускал, пришлось распаковать в поисках новых луа функций...
  2. Думаю можно чутка поднять тему и расписать пару моментов, которые будут полезны в целом для любого проекта: 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 итеративно перебирает огромную строку в поиске нужной. Посимвольно. С первого символа. Каждый. Раз. По хорошему, это лучше исправить в самом движке. Но для модмейкеров могу сказать лишь одно: компактные названия рестрикторов имеют смысл.
  3. Откуда такая информация? Если и правда так, то искренне сочувствую им. Ибо те версии, что я тут постил, постились для поиска багов и их там оказалось немало, а если брали из коммитов, то там гг, вероятность найти коммит, где правками движка не сломали SDK имеет ~5%
  4. Всем на неё пофиг. Успокойся
  5. Красиво, что тут скажешь.
  6. Ньюфаги в сети интернет. Это ещё задолго до С2 делали
  7. Я сейчас смеха ради дифнул девелоп с ванильным ЗП. 16 скриптов различается (и то 10 из них - это оптимизации с энхансед эдишен, которые можно откатить) По конфигам там тоже различия в паре файлов. Друг, учись сравнивать файлы
  8. Так не включай, лол Кто тебе такую глупость сказал? Если не можешь разобраться в адаптации двух файлов, то тут можно только посочувствовать. Плюс тебе предлагали перенос, насколько я помню, но ты решил сам
  9. Красивый бэкграунд, кто это?

    1. ForserX

      ForserX

      А хз, пикча лет 10 на ПК валяется 

  10. Не помню, давно исправили. Сорри Дополнено 0 минут спустя Форк Мортана в целом иногда может рандомно упасть
  11. Ванильный баг, связаный с кривой оклюзией света. Дополнено 1 минуту спустя Решается только исправлением движка. Словить можно и в оригинальном ЗП

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

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