Тема: Путь Воина v2.4  (Прочитано 46969 раз)

Ответ #125 04 Декабря, 2019, 14:51
0
Хочу отметить, что проблема появилась не в последнем патче. У меня лежит старая версия, кажется, 2.1 - для которой требовался клиент 1.153, там тоже наблюдались лаги со спутниками. Но тогда я просто решил, что старый ноут не тянет.
Я попытался найти скрипт/триггер, вызывающий лаги (были сорцы версии 2.1 и знание о том, как их скомпилировать. С последней версией я как-то не разобрался, ибо моддингом и модулькой не занимался от слова совсем.).
Поочерёдно вырезал подозрительные места: циклы обхода вида
(try_for_range, ":npc", companions_begin, companions_end)
но это не дало результатов.
Пробежался по триггерам, которые срабатывают ежечасно (я же правильно понял, что на период срабатывания указывает первое число в коде триггера? :)), там тоже не нашёл ничего криминального.
Ответ #126 04 Декабря, 2019, 21:05
0
Van Weyden, я кста тоже по триггерам пробежался и ничего подозрительного не нашел. Поэтому надо проверять скрипты, ведь они могут быть вызваны с триггеров.
Ответ #127 04 Декабря, 2019, 21:20
0
Van Weyden, я кста тоже по триггерам пробежался и ничего подозрительного не нашел. Поэтому надо проверять скрипты, ведь они могут быть вызваны с триггеров.

Ну я все циклы, пробегающиеся по нпс в отряде игрока вырезал из исходников скриптов и проверял - не помогло. Ещё решил проверить - может дело в фураже для коней - тоже мимо.
У меня пока нет идей, какой ещё код в скрипте может быть связан с нпс ¯\_(ツ)_/¯.
Ответ #128 05 Декабря, 2019, 00:29
0
Janycz, убрал ВСЕ триггеры (из triggers и simple_triggers), чей период срабатывания менее 6 часов - не дало эффекта.

Такой вопрос: скрипты могут быть вызваны только через триггеры? Я так полагаю, что нет, иначе скрипт на изменение модификатора скорости не работал бы...
Есть ещё один вопрос: могут ли лаги быть вызваны чем-то ещё окромя скриптов?
« Последнее редактирование: 05 Декабря, 2019, 09:43 от Van Weyden »
Ответ #129 05 Декабря, 2019, 08:43
0
Возможно где-то происходит, перебор инвентаря НПС (возможно он там овес ищет или что-то подобное), игра это почему-то очень не любит. Есть скрипты вызывающиеся напрямую из движка и постоянно, рекомендую посмотреть среди них, например скрипт скорости, или скрипт смены иконки игрока.
Ответ #130 05 Декабря, 2019, 10:09
0
Я нашёл "виновника":
  #script_game_get_skill_modifier_for_troop
  # This script is called from the game engine when a skill's modifiers are needed
  # INPUT: arg1 = troop_no, arg2 = skill_no
  # OUTPUT: trigger_result = modifier_value
  ("game_get_skill_modifier_for_troop",
  [
    (store_script_param, ":troop_no", 1),
    (store_script_param, ":skill_no", 2),
    (assign, ":modifier_value", 0),
    (try_begin), #needed to suppress script can fail warn.
      (troop_is_hero, ":troop_no"),#may be should skip lords too?
      #and sure, we can't do it for regulars
      (store_add, ":holder", skill_holder_begin, ":skill_no"),
      (try_for_range,":slot", 0, 256),#up to 256 items that effect current skills
        (quest_get_slot, ":item", ":holder", ":slot"),#that's not quest, that's skill slots R.
        (try_begin),
          (le, ":item", 0),
          (neg|is_vanilla_warband),
          (assign, ":slot", 256),
          #(break_loop),
        (try_end),
        (gt, ":item", 0),
        (item_get_slot, ":req", ":item", slot_item_intelligence_requirement),
        (store_attribute_level, ":skill_level", ":troop_no", ca_intelligence),
        (ge, ":skill_level", ":req"),
        (item_get_slot, ":method", ":item", slot_item_skill_modifier_method),
        (try_begin),
          (eq, ":method", 1),
          (eq, ":troop_no", "trp_player"),
          (player_has_item, ":item"), #assume other chars does not have inventory
          (item_get_slot, ":modifier_value", ":item", slot_item_skill_modifier_value),
        (else_try),
          (eq, ":method", 2),
          (try_begin),
            (eq, ":troop_no", "trp_player"),
            (eq, "$g_in_mission", 1),
            (get_player_agent_no, ":agent_no"),
            (assign, ":pass", 0),
            (ge,":agent_no",0),
            (try_begin),
              (item_get_type, ":type", ":item"),
              (eq, ":type", itp_type_horse),
              (agent_get_horse, ":horse", ":agent_no"),
              (ge,":horse", 0),
              (assign, ":pass", 1),
              (agent_get_item_id, ":item_horse", ":horse"),
              (eq, ":item_horse" , ":item"),
              (item_get_slot, ":modifier_value", ":item", slot_item_skill_modifier_value),
            (else_try),
              (agent_has_item_equipped,":agent_no",  ":item"),
              (item_get_slot, ":modifier_value", ":item", slot_item_skill_modifier_value),
              (assign, ":pass", 1),
            (try_end),
            (eq, ":pass", 1),
          (else_try),
            (troop_has_item_equipped, ":troop_no", ":item"),
            (item_get_slot, ":modifier_value", ":item", slot_item_skill_modifier_value),
          (try_end),
        (try_end),
      (try_end),
    (try_end),
    (set_trigger_result, ":modifier_value"),
  ]),
P.S. Немного отформатировал код (в плане отступов), чтобы улучшить читаемость.
« Последнее редактирование: 05 Декабря, 2019, 10:23 от Van Weyden »
Ответ #131 05 Декабря, 2019, 10:22
0
Ну вот о чем я и говорил, пусть теперь умные люди его модифицируют, нужно убрать из скипта перебор инвентаря, и заменить на что нибудь другое.
Ответ #132 05 Декабря, 2019, 11:44
0
Я нашёл "виновника":
Вы точно уверены, что это он?
Ответ #133 05 Декабря, 2019, 16:32
+3
Насколько я понял, этот скрипт отвечает за бонусы/дебафы от снаряжения, книг и карт. И, для НПС имеет значение только одетая экипировка. Но навскидку из таких вещей я могу вспомнить только перчатки и лошадей (причём для лошади игрока есть отдельная ветка в скрипте, а для лошадей спутников почему-то нет), которые влияют на "мощный выстрел".

Самое интересное началось, когда я начал дебажить этот скрипт. Если выбросить те блоки, внутри которых была проверка вида "(eq, ":troop_no", "trp_player"),", то в цикле останется код, срабатывающий только для НПС (код привожу просто для понимания, что именно скрипт у них проверяет):
  (troop_is_hero, ":troop_no"),#may be should skip lords too?
  #and sure, we can't do it for regulars
  (store_add, ":holder", skill_holder_begin, ":skill_no"),
  (try_for_range,":slot", 0, 256),#up to 256 items that effect current skills
     (quest_get_slot, ":item", ":holder", ":slot"),#that's not quest, that's skill slots R.
     (try_begin),
       (le, ":item", 0),
       (neg|is_vanilla_warband),
       (assign, ":slot", 256),
       #(break_loop),
     (try_end),
     (gt, ":item", 0),
     (item_get_slot, ":req", ":item", slot_item_intelligence_requirement),
     (store_attribute_level, ":skill_level", ":troop_no", ca_intelligence),
     (ge, ":skill_level", ":req"),
     (item_get_slot, ":method", ":item", slot_item_skill_modifier_method),
     (try_begin),
       (eq, ":method", 2),
       (troop_has_item_equipped, ":troop_no", ":item"),
       (item_get_slot, ":modifier_value", ":item", slot_item_skill_modifier_value),
     (try_end),
  (try_end),
Я вставил в исходный скрипт код, отправляющий дебаг-сообщение, чтобы отследить срабатывание блока для НПС в игре. И, как оказалось, на глобалке блок кода для НПС не выполняется. То есть весь перебор предметов для них идёт зазря. А вот в бою есть единичное срабатывание, в самом начале (когда в лог ещё пишется информация о снаряжении, хп и т.п.).

Таким образом, я предлагаю исправить этот код:

На этот:

В скомпилированном виде (scripts.txt):
Заменить это:

На это:

Janycz, после замены скрипта лаги на глобалке пропали. Вернее, почти пропали - периодические микрофризы всё-таки есть, но в среднем 55-60 кадров игра выдаёт.
« Последнее редактирование: 05 Декабря, 2019, 19:20 от Van Weyden »
Ответ #134 08 Декабря, 2019, 19:30
+2
Раз уж начал ковыряться в модульке, почему бы не поковыряться ещё?  ;)
Заодно прикладываю скомпилированный код, чтобы простые игроки могли отредактировать свои файлы, не дожидаясь, пока эти изменения появятся в моде. Ну, и тестированию помогут  :D
Хотя, кто знает, может меня одного напрягали эти моменты?

Вот мой вариант исправления ещё одного старого бага, когда убитые противники не исчезали с миникарты:

Отображение прочности оружия и миникарты одновременно:
« Последнее редактирование: 08 Декабря, 2019, 22:10 от Van Weyden »
Ответ #135 08 Декабря, 2019, 21:43
0
но с точки зрения сорцов - это костыль
Это неважно. Тут и так много костылей. :)
Ответ #136 08 Декабря, 2019, 22:08
0
Janycz, поэтому и не стоит городить новых, особенно, если знаешь, как сделать по-нормальному ;)
Если кому-то из разработчиков действительно любопытен мой вариант решения, я могу написать и исходный код. Хотя, думаю, просто у них руки до этого не дошли. А, может быть, отсутствие отображения миникарты и прочности оружия одновременно - "не баг, а фича" :laught:
Ответ #137 11 Декабря, 2019, 13:36
0
Если кому-то из разработчиков действительно любопытен мой вариант решения, я могу написать и исходный код. Хотя, думаю, просто у них руки до этого не дошли. А, может быть, отсутствие отображения миникарты и прочности оружия одновременно - "не баг, а фича"
Ну представляете, пожалуйста.
Ответ #138 12 Декабря, 2019, 00:27
0
Попробовал заплатку для глобалки и для очистки миникарты. На глобалке стало практически гладко с редкими повторяющимися краткими затыками. Скрин с временем кадра приложил.
Van Weyden, данке шон.
Ответ #139 13 Декабря, 2019, 22:43
+1
Ну представляете, пожалуйста.

Сразу оговорю, что:
1. Под спойлером только исходный код
2. Старый код целиком не пишу, только названия скриптов/презентаций, которые нужно модифицировать.
3. Это таки "костыльный" вариант. Если удалять презентацию draw_equipment_hp, то миникарта будет всегда отображаться... А так приходится весь код из draw_equipment_hp дублировать в map_then_battle, что тоже не гуд. Может быть, объявить глобальную переменную и в зависимости от её состояния рисовать/не рисовать миникарту? Я бы может и занялся этим, но сессия, все дела...
4. Тестировалось это усё на версии 2.1, ибо я так и не вкурил, как компилить сорцы 2.4. В той версии были скрипты в папке process, с помощью которых и выполнялась компиляция. А в 2.4 - то ли версию питона стали использовать третью вместо второй, то ли чего-то в сорцах не хватало...
Janycz, если просветите, буду весьма признателен.

« Последнее редактирование: 13 Декабря, 2019, 22:46 от Van Weyden »
Ответ #140 14 Декабря, 2019, 10:30
+1
Janycz, если просветите, буду весьма признателен.
1) Питон 3.6
2) Настроить module_info.bat (export_dir)
3) Запустить build_module_fast.bat
Ответ #141 16 Декабря, 2019, 02:59
0
Доброго времени суток. Давно искал хардкорный мод с упором на историчность, и кажется нашел) Спасибо всем кто его делал. Пока разобрался как его установить возникли первый вопросы, можно где почитать FAQ по игре? Возникла проблема с именем персонажа, ввожу его, а отображается "игрок". Также при старте игры можно в настройках поставить "глобальная погода" и "новые названия тевтонский войск". Что сии пункты значат?
Ответ #142 16 Декабря, 2019, 07:57
0
Krevan, Проблема с именем Игрок решается установкой другого русификатора на сам Варбанд.
Ответ #143 16 Декабря, 2019, 10:32
+1
Возникла проблема с именем персонажа, ввожу его, а отображается "игрок".
Известный баг пирацких версий, а баги пираток и баги мода на пиратках не рассматриваются.
« Последнее редактирование: 16 Декабря, 2019, 10:44 от Janycz »
Ответ #144 16 Декабря, 2019, 12:39
-1
Прежде чем минусильщику ставить свою анонимноподлую  метку на моём предыдущем посте, неплохо было бы вспомнить, что та же лицензия от GOG идёт без встроенного русика. И этот же русификатор при установке на любую лицензию даст ту же ошибку.
« Последнее редактирование: 16 Декабря, 2019, 16:14 от Alisacat007 »
Ответ #145 16 Декабря, 2019, 15:57
0
У меня лицензия от 1 С. Правда она уже не актуальна, поэтому я скачал английскую версию от Taleworlds и активировал ее своим ключом от дисковой версии 1 С. Что на счет вопросов про "глобальную погоду" и "новые названия тевтонских войск"?
Ответ #146 16 Декабря, 2019, 16:41
0
Погода на глобальной карте идет дождь и снег. Названия Тевтонских войск это просто переименовывает тевтонских юнитов в более исторически точные имена, подобранные в сотрудничестве с Тевтонологами. Т.к. старый вариант идет еще с версии на Историю Героя, то решили сделать опционально.
Ответ #147 17 Декабря, 2019, 13:48
0
Погода на глобальной карте идет дождь и снег
Хотелось бы немного уточнить: это лишь графическое отображение имеющихся  эффектов природы. Если игрок "отключит" дождь и снег на глобалке, его отряд не перестанет получать дебаф на скорость передвижения в непогоду :)
Просто - щадящий режим для не очень мощных ПК.
Ответ #148 17 Декабря, 2019, 15:10
0
Хотелось бы немного уточнить: это лишь графическое отображение имеющихся  эффектов природы. Если игрок "отключит" дождь и снег на глобалке, его отряд не перестанет получать дебаф на скорость передвижения в непогоду :)
Просто - щадящий режим для не очень мощных ПК.
На днях запустил мод, немного поиграл. В целом впечатления пока очень положительные. Особенно понравилась: 1) система набора войск, когда нужно улучшить отношения, а лишь затем набирать солдат, также как и их разделение на деревенских, городских, замковых и элитных. 2) система предустановок боевых действий. Я заметил что ИИ применяет например "старую тактику", т.е. действует более осмысленно в бою. 3) Порадовали конные лучники, которые кружат вокруг врагов и стреляют по ним, правда заметил что иногда они все-таки чрезмерно сближаются и в этом компоненте еще можно улучшать их ИИ.
Из того что не понравилось - почему в землях Новгородской республики в летние месяцы лежит снег?))
Ответ #149 19 Декабря, 2019, 00:59
0
Игра стала крашится (appcrash) >:( Т.к. я играл в режиме одного сохранения, то просто не могу продолжить, при попытке загрузить сейв - вылет. В чем может быть проблема?

0 Пользователей и 1 Гость просматривают эту тему.