Разделы

Новости
Об игре
Учебник
ЧаВо
Файлы
Галерея
Видео
Наши блоги
О сайте
Форум

Голосование

Какой подход к боевой системе вам нравится больше?














Реклама




Пользователей
Сейчас на форуме
Пользователи: 5
Гостей: 376
Всего: 381

Реклама

Теги:

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

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

  • Сообщений: 9
    • Просмотр профиля
0
« Ответ #125 : 04 Декабрь, 2019, 14:51 »
Хочу отметить, что проблема появилась не в последнем патче. У меня лежит старая версия, кажется, 2.1 - для которой требовался клиент 1.153, там тоже наблюдались лаги со спутниками. Но тогда я просто решил, что старый ноут не тянет.
Я попытался найти скрипт/триггер, вызывающий лаги (были сорцы версии 2.1 и знание о том, как их скомпилировать. С последней версией я как-то не разобрался, ибо моддингом и модулькой не занимался от слова совсем.).
Поочерёдно вырезал подозрительные места: циклы обхода вида
(try_for_range, ":npc", companions_begin, companions_end)
но это не дало результатов.
Пробежался по триггерам, которые срабатывают ежечасно (я же правильно понял, что на период срабатывания указывает первое число в коде триггера? :)), там тоже не нашёл ничего криминального.
  • Фракция: Вегиры
  • Сообщений: 2475
  • За создание технических проектов различного характера Выдается модераторам, достигнувшим значимых успехов на своем посту
    • Просмотр профиля
0
« Ответ #126 : 04 Декабрь, 2019, 21:05 »
Van Weyden, я кста тоже по триггерам пробежался и ничего подозрительного не нашел. Поэтому надо проверять скрипты, ведь они могут быть вызваны с триггеров.
1 + 2 + 3 + 4 + ... = ζ(-1) = -0.08(3)
1 - 1 + 1 - 1 + 1 - ... = 0.5
1 - 2 + 3 - 4 + 5 - ... = 0.25

На вопросы в ПС не отвечаю! Спрашивать в темах!
  • Сообщений: 9
    • Просмотр профиля
0
« Ответ #127 : 04 Декабрь, 2019, 21:20 »
Van Weyden, я кста тоже по триггерам пробежался и ничего подозрительного не нашел. Поэтому надо проверять скрипты, ведь они могут быть вызваны с триггеров.

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

Такой вопрос: скрипты могут быть вызваны только через триггеры? Я так полагаю, что нет, иначе скрипт на изменение модификатора скорости не работал бы...
Есть ещё один вопрос: могут ли лаги быть вызваны чем-то ещё окромя скриптов?
« Последнее редактирование: 05 Декабрь, 2019, 09:43 от Van Weyden »
  • Фракция: Вегиры
  • Сообщений: 863
  • За создание технических проектов различного характера
    • Просмотр профиля
0
« Ответ #129 : 05 Декабрь, 2019, 08:43 »
Возможно где-то происходит, перебор инвентаря НПС (возможно он там овес ищет или что-то подобное), игра это почему-то очень не любит. Есть скрипты вызывающиеся напрямую из движка и постоянно, рекомендую посмотреть среди них, например скрипт скорости, или скрипт смены иконки игрока.
  • Сообщений: 9
    • Просмотр профиля
0
« Ответ #130 : 05 Декабрь, 2019, 10:09 »
Я нашёл "виновника":
  #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 »
  • Фракция: Вегиры
  • Сообщений: 863
  • За создание технических проектов различного характера
    • Просмотр профиля
0
« Ответ #131 : 05 Декабрь, 2019, 10:22 »
Ну вот о чем я и говорил, пусть теперь умные люди его модифицируют, нужно убрать из скипта перебор инвентаря, и заменить на что нибудь другое.
  • Сообщений: 2475
  • За создание технических проектов различного характера Выдается модераторам, достигнувшим значимых успехов на своем посту
    • Просмотр профиля
0
« Ответ #132 : 05 Декабрь, 2019, 11:44 »
Я нашёл "виновника":
Вы точно уверены, что это он?
1 + 2 + 3 + 4 + ... = ζ(-1) = -0.08(3)
1 - 1 + 1 - 1 + 1 - ... = 0.5
1 - 2 + 3 - 4 + 5 - ... = 0.25

На вопросы в ПС не отвечаю! Спрашивать в темах!
  • Сообщений: 9
    • Просмотр профиля
0
« Ответ #133 : 05 Декабрь, 2019, 16:32 »
Насколько я понял, этот скрипт отвечает за бонусы/дебафы от снаряжения, книг и карт. И, для НПС имеет значение только одетая экипировка. Но навскидку из таких вещей я могу вспомнить только перчатки и лошадей (причём для лошади игрока есть отдельная ветка в скрипте, а для лошадей спутников почему-то нет), которые влияют на "мощный выстрел".

Самое интересное началось, когда я начал дебажить этот скрипт. Если выбросить те блоки, внутри которых была проверка вида "(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 »
  • Фракция: Вегиры
Теги:
 

Список игр

Реестр других игр

Важное о модах

Наши моды
Русь 13 век
Мододельня
Форум модов
Обмен опытом

Блоги

111 блогов, 373 записей
Последние записи:

[23 Июль, 2019, 11:23]

[28 Март, 2019, 15:23]

[24 Октябрь, 2018, 10:44]

[22 Октябрь, 2018, 13:57]

[30 Август, 2018, 22:42]
Крупнейший сайт о стратегиях. Обзоры новинок.Активный ФОРУМ и встречи с разработчиками. Большая качалка МОДов для RTW и не только. Родной дом «Империи» и «Бонапарта». СиЧЪ Total War Все о Mount & Blade
Сайт "Всадники Кальрадии" не является СМИ. Администрация не несет ответственность за высказывания и публикацию каких-либо материалов, сделанные любыми пользователями форума, в том числе посредством личных и публичных сообщений. Материалы, размещенные на ресурсе третьими лицами, могут содержать информацию, не предназначенную для лиц, не достигнувших совершеннолетия. При обнаружении на ресурсе материалов, нарушающих законодательство Российской Федерации, необходимо обращаться к администрации.
Сайт работает на хостинге FASTVPS