Голосование

Как вы оцениваете Смуту?












Оформление



Пользователей
  • Всего: 28871
  • Последний: 123WwW2004
Сейчас на форуме
Пользователи: 2
Гостей: 265
Всего: 267

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

Тема: [Script]Управляемая камера после смерти ГГ в бою  (Прочитано 20714 раз)

  • Сообщений: 1332
    • Просмотр профиля
     Часто надоедает  ситуация,когда  простой  нужный  скрипт для  мода  прячут среди   ответов   "гугл в помощь..."  или  среди  преднамеренно   написанных  с  недоработками   кодов   на  пес  знает каких   древнетурецких  ветках  TWC   , когда даже  с абсолютной точностью  установка заканчивается  багами и ошибками .  Ждать помощи от  скупердяев   всех сословий и национальностей по безответным  сайтам  бессмысленно и долго.


Вот  достаточно  простой  скрипт  свободной  камеры  ,который  принадлежит   разработке  по меньшей  мере двух  авторов  с  talewords . Однако  устанавливая  его   на  WB  по  одной  из инструкций, иногда  выходит  совсем не то ,что ожидалось  .

Например  либо  камера  не работает  ,стоит на месте  ,либо  выйти из боя  невозможно после  его  конца.

Итак, вот здесь  один  автор   MadVader   http://forums.taleworlds.com/index.php/topic,134460.0.html
А  вот здесь  другой    kt0     http://forums.taleworlds.com/index.php/topic,63178.msg1641483.html#msg1641483

Казалось бы  ,все они  дают  ссылку  друг на друга , ставь и  проверяй... 

А   нет, не так  просто.  Они  не могли  выписать  вменяемый  скрипт ,что бы  кто нибудь  ,кто не собирается  посвящать свою жизнь  программированию и  интернету вообще,  мог поставить и все  заработало на  радость  увлечению на  досуге.. 


Но  мы  это  дело   исправим.

Надо делать  первую часть как автор    kt0,  а потом  не слушать его и делать как   MadVader ,вот в таком  порядке  ,что бы камера  была  и  в панорамном обозрении и  вверх и вниз  и  вперед ,а  не застывала  на  рельсах только вперед и назад,что мне не понравилось у  Idibila  в  одной из версий  Бритенвальды.

1-я часть  скриптов (от kt0)*********************************************************************

! Выделенное красным  закомментить  -  (##)    Выделенное  синим   - добавить (именно там где  указано).

Найти   в 
  module_mission_templates.py

common_battle_check_victory_condition = (
  1, 60, ti_once,
  [
    (store_mission_timer_a,reg(1)),
    (ge,reg(1),10),
    (all_enemies_defeated, 5),
    (neg|main_hero_fallen, 0),
    (set_mission_result,1),
    (display_message,"str_msg_battle_won"),
    (assign,"$battle_won",1),
    (assign, "$g_battle_result", 1),
    (call_script, "script_play_victorious_sound"),
    ],
  [
    (call_script, "script_count_mission_casualties_from_agents"),
    (finish_mission, 1),
    ])



Потом  это :
common_siege_check_defeat_condition = (
  1, 4, ti_once,
  [
    (main_hero_fallen)
    ],
  [
    (assign, "$pin_player_fallen", 1),
    (display_message, "@You have fallen in battle!"),
  (get_player_agent_no, ":player_agent"),
    (agent_get_team, ":agent_team", ":player_agent"),
    (try_begin),
      (neq, "$attacker_team", ":agent_team"),
      (neq, "$attacker_team_2", ":agent_team"),
      (str_store_string, s5, "str_siege_continues"),
      (call_script, "script_simulate_retreat", 8, 15),
    (else_try),
      (str_store_string, s5, "str_retreat"),
      (call_script, "script_simulate_retreat", 5, 20),
    (try_end),
    (assign, "$g_battle_result", -1),
    (set_mission_result,-1),
    (call_script, "script_count_mission_casualties_from_agents"),
    (finish_mission,0),

])

3.  В  lead_charge     синюю   строку добавить,    красное  закомментировать  (закомментить,это примерно то же ,что и удалить).

 (1, 4, ti_once, [(main_hero_fallen)],
          [
              (assign, "$pin_player_fallen", 1),
              (display_message, "@You have fallen in battle!"),         
              (str_store_string, s5, "str_retreat"),
              (call_script, "script_simulate_retreat", 10, 20),
              (assign, "$g_battle_result", -1),
              (set_mission_result,-1),
              (call_script, "script_count_mission_casualties_from_agents"),
              (finish_mission,0)

]),

Все это  делается   в  модуле  module_mission_templates.py

2-я  часть  (скрипты  от  MadVader) ***********************************************************************

А.)  В  том же mission templates.py     добавить  это   :

## MadVader deathcam begin
common_init_deathcam = (
   0, 0, ti_once,
   [],
   [
      (assign, "$pop_camera_on", 0),
      # mouse center coordinates (non-windowed)
      (assign, "$pop_camera_mouse_center_x", 500),
      (assign, "$pop_camera_mouse_center_y", 375),
      # last recorded mouse coordinates
      (assign, "$pop_camera_mouse_x", "$pop_camera_mouse_center_x"),
      (assign, "$pop_camera_mouse_y", "$pop_camera_mouse_center_y"),
      # counts how many cycles the mouse stays in the same position, to determine new center in windowed mode
      (assign, "$pop_camera_mouse_counter", 0),
   ]
)

common_start_deathcam = (
   0, 4, ti_once, # 4 seconds delay before the camera activates
   [
     (main_hero_fallen),
     (eq, "$pop_camera_on", 0),
   ],
   [
      (get_player_agent_no, ":player_agent"),
      (agent_get_position, pos1, ":player_agent"),
      (position_get_x, ":pos_x", pos1),
      (position_get_y, ":pos_y", pos1),
      (init_position, pos47),
      (position_set_x, pos47, ":pos_x"),
      (position_set_y, pos47, ":pos_y"),
      (position_set_z_to_ground_level, pos47),
      (position_move_z, pos47, 250),
      (mission_cam_set_mode, 1, 0, 0),
      (mission_cam_set_position, pos47),
      (assign, "$pop_camera_rotx", 0),
      (assign, "$pop_camera_on", 1),
   ]
)

common_move_deathcam = (
   0, 0, 0,
   [
      (eq, "$pop_camera_on", 1),
      (this_or_next|game_key_clicked, gk_move_forward),
      (this_or_next|game_key_is_down, gk_move_forward),
      (this_or_next|game_key_clicked, gk_move_backward),
      (this_or_next|game_key_is_down, gk_move_backward),
      (this_or_next|game_key_clicked, gk_move_left),
      (this_or_next|game_key_is_down, gk_move_left),
      (this_or_next|game_key_clicked, gk_move_right),
      (game_key_is_down, gk_move_right),
   ],
   [
      (mission_cam_get_position, pos47),
      (assign, ":move_x", 0),
      (assign, ":move_y", 0),
      (try_begin), #forward
        (this_or_next|game_key_clicked, gk_move_forward),
        (game_key_is_down, gk_move_forward),
        (assign, ":move_y", 10),
      (try_end),
      (try_begin), #backward
        (this_or_next|game_key_clicked, gk_move_backward),
        (game_key_is_down, gk_move_backward),
        (assign, ":move_y", -10),
      (try_end),
      (try_begin), #left
        (this_or_next|game_key_clicked, gk_move_left),
        (game_key_is_down, gk_move_left),
        (assign, ":move_x", -10),
      (try_end),
      (try_begin), #right
        (this_or_next|game_key_clicked, gk_move_right),
        (game_key_is_down, gk_move_right),
        (assign, ":move_x", 10),
      (try_end),
      (position_move_x, pos47, ":move_x"),
      (position_move_y, pos47, ":move_y"),
      (mission_cam_set_position, pos47),     
   ]
)

deathcam_mouse_deadzone = 2 #set this to a positive number (MV: 2 or 3 works well for me, but needs testing on other people's PCs)

common_rotate_deathcam = (
   0, 0, 0,
   [
      (eq, "$pop_camera_on", 1),
      (neg|is_presentation_active, "prsnt_battle"),
      (mouse_get_position, pos1),
      (set_fixed_point_multiplier, 1000),
      (position_get_x, reg1, pos1),
      (position_get_y, reg2, pos1),
      (this_or_next|neq, reg1, "$pop_camera_mouse_center_x"),
      (neq, reg2, "$pop_camera_mouse_center_y"),
   ],
   [
      # fix for windowed mode: recenter the mouse
      (assign, ":continue", 1),
      (try_begin),
        (eq, reg1, "$pop_camera_mouse_x"),
        (eq, reg2, "$pop_camera_mouse_y"),
        (val_add, "$pop_camera_mouse_counter", 1),
        (try_begin), #hackery: if the mouse hasn't moved for X cycles, recenter it
          (gt, "$pop_camera_mouse_counter", 50),
          (assign, "$pop_camera_mouse_center_x", reg1),
          (assign, "$pop_camera_mouse_center_y", reg2),
          (assign, "$pop_camera_mouse_counter", 0),
        (try_end),
        (assign, ":continue", 0),
      (try_end),
      (eq, ":continue", 1), #continue only if mouse has moved
      (assign, "$pop_camera_mouse_counter", 0), # reset recentering hackery
     
      # update recorded mouse position
      (assign, "$pop_camera_mouse_x", reg1),
      (assign, "$pop_camera_mouse_y", reg2),
     
      (mission_cam_get_position, pos47),
      (store_sub, ":shift", "$pop_camera_mouse_center_x", reg1), #horizontal shift for pass 0
      (store_sub, ":shift_vertical", reg2, "$pop_camera_mouse_center_y"), #for pass 1
     
      (try_for_range, ":pass", 0, 2), #pass 0: check mouse x movement (left/right), pass 1: check mouse y movement (up/down)
        (try_begin),
          (eq, ":pass", 1),
          (assign, ":shift", ":shift_vertical"), #get ready for the second pass
        (try_end),
        (this_or_next|lt, ":shift", -deathcam_mouse_deadzone), #skip pass if not needed (mouse deadzone)
        (gt, ":shift", deathcam_mouse_deadzone),
       
        (assign, ":sign", 1),
        (try_begin),
          (lt, ":shift", 0),
          (assign, ":sign", -1),
        (try_end),
        # square root calc
        (val_abs, ":shift"),
        (val_sub, ":shift", deathcam_mouse_deadzone), # ":shift" is now 1 or greater
        (convert_to_fixed_point, ":shift"),
        (store_sqrt, ":shift", ":shift"),
        (convert_from_fixed_point, ":shift"),
        (val_clamp, ":shift", 1, 6), #limit rotation speed
        (val_mul, ":shift", ":sign"),
        (try_begin),
          (eq, ":pass", 0), # rotate around z (left/right)
          (store_mul, ":minusrotx", "$pop_camera_rotx", -1),
          (position_rotate_x, pos47, ":minusrotx"), #needed so camera yaw won't change
          (position_rotate_z, pos47, ":shift"),
          (position_rotate_x, pos47, "$pop_camera_rotx"), #needed so camera yaw won't change
        (try_end),
        (try_begin),
          (eq, ":pass", 1), # rotate around x (up/down)
          (position_rotate_x, pos47, ":shift"),
          (val_add, "$pop_camera_rotx", ":shift"),
        (try_end),
      (try_end), #try_for_range ":pass"
      (mission_cam_set_position, pos47),
   ]
)
## MadVader deathcam end

B.)  Теперь  в  каждые  из  сцен   mission_templates     добавить  триггеры

## MadVader deathcam begin
      common_init_deathcam,
      common_start_deathcam,
      common_move_deathcam,
      common_rotate_deathcam,
## MadVader deathcam end



Что бы было удобно  ,искать  для  добавления  нужно вот эти  :

lead_charge,
besiege_inner_battle_castle,
besiege_inner_battle_town_center,
castle_attack_walls_defenders_sally,
castle_attack_walls_belfry, 
castle_attack_walls_ladder.

***********************************************************************

Теперь  ,что бы  обойтись без  ненужных  нестыковок  компиляции  ,  внесем  небольшую  ассигнацию  в  module_scripts.py

Вот так  например

  ("game_start",
   [
 
     (assign, "$battle_won", 0),


И  это  все.    Экспериментом  удалось найти  этот   оптимальный   вариант    свободной  камеры  после  гибели  ГГ в бою.

####################################

Обнаружен  небольшой  но досадный  баг. При  выходе  по нажатию Tab    после  победы    выплывает  предупреждение  как при  бегстве с    поля  боя    retreat...   Просьба   поправить   это   в скрипте .

common_battle_tab_press = (
  ti_tab_pressed, 0, 0, [],
  [
    (try_begin),
      (eq, "$battle_won", 1),
      (call_script, "script_count_mission_casualties_from_agents"),
      (finish_mission,0),
   (else_try),
      (eq, "$pin_player_fallen", 1),
      (call_script, "script_simulate_retreat", 5, 20),
      (str_store_string, s5, "str_retreat"),
      (call_script, "script_count_mission_casualties_from_agents"),
      (set_mission_result, -1),
      (finish_mission,0),
    (else_try),
      (call_script, "script_cf_check_enemies_nearby"),
      (question_box,"str_do_you_want_to_retreat"),
    (else_try),
      (display_message,"str_can_not_retreat"),
    (try_end),
    ])
« Последнее редактирование: 31 Марта, 2012, 14:36 от lutar »
  • Сообщений: 1697
  • За особо выдающиеся авторские тексты За активную деятельность, связанную с публикациями и помощью другим посетителям
    • Просмотр профиля
А чем плох способ из МС дипломатии?
Правда, там камера управляется курсором а не мышью, но работает без глюков.
  • Ник в M&B: Fin___Gall
  • Сообщений: 1332
    • Просмотр профиля
А чем плох способ из МС дипломатии?
Правда, там камера управляется курсором а не мышью, но работает без глюков.


Курсором  а не мышью  ?  В смысле  ,  не  поворотом  мыши ,а   скроллингом (колесом)   на мыши  ?     Не может же курсор  управляться  с клавиатуры  в самом деле  ...

Было бы  желательно сюда  альернативный  скрипт  привести ,может действительно это  лучше или удобнее.

Есть  ведь  еще одна  ,третья  (или четвертая ...)   версия  скрипта (работающего по  отзывам  неидеально тоже.   автор   MartinF   http://forums.taleworlds.com/index.php/topic,61929.msg1603855.html#msg1603855

*******************************************************************************************

Приведенный  мной  скрипт   камеры  достаточно удобен,но  только одна  единственная  ошибка  затаилась  .

И  видимо  связано это  вот  с  еще каким  необходимым  добавлением   

Что то  здесь  не так 

common_battle_tab_press = (
  ti_tab_pressed, 0, 0, [],
  [
    (try_begin),
      (eq, "$battle_won", 1),
      (call_script, "script_count_mission_casualties_from_agents"),
      (finish_mission,0),
   (else_try),
      (eq, "$pin_player_fallen", 1),
      (call_script, "script_simulate_retreat", 5, 20),
      (str_store_string, s5, "str_retreat"),
      (call_script, "script_count_mission_casualties_from_agents"),
      (set_mission_result, -1),
      (finish_mission,0),
    (else_try),
      (call_script, "script_cf_check_enemies_nearby"),
      (question_box,"str_do_you_want_to_retreat"),
    (else_try),
      (display_message,"str_can_not_retreat"),
    (try_end),
    ])


Что бы  выйти из    битвы    это     добавления   для    tab  press  (привел  Chinta Kari  http://forums.taleworlds.com/index.php/topic,63178.msg1641924.html#msg1641924 )
  • Сообщений: 1697
  • За особо выдающиеся авторские тексты За активную деятельность, связанную с публикациями и помощью другим посетителям
    • Просмотр профиля
В Дипломатии камера управляется как бы двумя курсорами. Стрелки с цифрами - поворотом и положением относительно горизонта, а буквы W,S,A,D - самим перемещением.

Триггер отвечающий за движение камеры записан вначале module_mission_templates:
Как видно. Там добавленно несколько глобальных переменных. Соответственно, их тоже надо будет добавлять в variables.

Потом он там объединён с тригерром замедл. коня при ранении:
И в таком виде уже ставится везде где нужно.
Там ещё много чего добаляется для этого. Лучше посмотреть в МС Дипломатия.
http://www.mbrepository.com/file.php?id=1975
« Последнее редактирование: 27 Марта, 2012, 07:07 от FinGall »
  • Ник в M&B: Fin___Gall
  • Сообщений: 1332
    • Просмотр профиля
Так.  Это  для  Дипломатии удобно  наверно,хотя  лишние  клавиши со стрелками еще  двигать  для  меня  не очень  удобно. Курсором  проще камеру  в  небо или в низ   направлять..

Аот если  только  с    клавишей  TAB    разобраться.. Всего то  нужно  поправить  что то связанное с  выходом из боя  после  победы  -поражения ..
  • Сообщений: 230
    • Просмотр профиля
Здравствуйте, товарищи.

Возникла проблема - как продолжить сражение, если главный герой пал в бою?

Меня интересует простой способ продолжения обычной (реальной) схватки, без перехода в симуляцию боя, без свободной камеры, перехода в другого героя и т.д., просто продолжение боя уже без нашего активного участия (персонаж лежит там, где упал, камера там же, смотреть на поле боя можно продолжать со своего места, и/или по мини-карте, если это не требует спец. правок кода и т.п.)

----

Ранее вопрос поднимался (к примеру, "[Script]Управляемая камера после смерти ГГ в бою" - http://rusmnb.ru/index.php?topic=14483.0) и успешно решён в части модов к M&B, но мне не удаётся понять как это сделать.

----

main_hero_fallen
В модульной системе применяется условие "главный герой пал". Мне это не подходит как основное условие, нужно чтобы бой шёл до полного разгрома всех врагов, или войск игрока и его союзников (в случае частных случаев вроде боя в подворотне, или дуэли, участвует, как правило, только сам игрок, а потому условия становятся равнозначны, поэтому их можно и не трогать :) )

num_active_teams_le
Пробовал заменить его на количество команд, участвующих в бою (аналог условий турнира - одна команда на ногах, значит, победа), но возникает бесконечный бой при участии союзников (более одной команды) - можно решить эту сложность принудительным переходом всех участников битвы под главнокомандующего главного героя, но это сильно помешает моей задумке мода.

all_enemies_defeated
Пробовал найти аналог условия "все враги побеждены", вроде "все юниты на стороне героя побеждены", но не нашёл. Возможно, условие будет выглядеть как: "num_total_allies=0", не знаю, поэтому и хотел бы узнать у более опытных что и куда вносить для достижения успеха.

Можно совместить проверки с доп. условием проверки скрипта "есть ли враги вокруг" (как при проверке бегства по нажатию tab), но это не особо надёжный способ.
« Последнее редактирование: 09 Октября, 2012, 19:08 от Oltopeteeh »
  • Фракция: Наемники
Уважаю креатив, ценю позитив, люблю Mount&Blade =)
  • Сообщений: 230
    • Просмотр профиля
Попробовал убрать бегство после падения главного героя в нажатие по tab - и проверку "если при нажатии tab ещё есть враги: neg|all_enemies_defeated, то поражение (плюс симуляция бегства), а если врагов нет: all_enemies_defeated, то победа.
Проблема в том, что при каждом бое, где героя свалят, приходиться ждать, а потом вручную завершать бой. Это ручное завершение мне не очень нравиться...

Есть предложения, в какую переменную внесён смысл "все союзные войска побиты", по аналогии с "all_enemies_defeated" - все враги побеждены?
  • Фракция: Наемники
Уважаю креатив, ценю позитив, люблю Mount&Blade =)
  • Сообщений: 230
    • Просмотр профиля
Проведенные эксперименты показали, что если убрать свободу камеры после падения (мне больше по нраву, когда персонаж остаётся там же, где и упал до конца битвы), то получается следующая картина:

===

Продолжение боя после поражения главного героя

module_mission_templates.py

common_battle_check_victory_condition

common_battle_check_victory_condition = (
 1, 60, ti_once,
 [
    (store_mission_timer_a,reg(1)),
    (ge,reg(1),10),
    (all_enemies_defeated, 5),
#    (neg|main_hero_fallen, 0),
    (set_mission_result,1),
    (display_message,"str_msg_battle_won"),
    (assign,"$g_battle_won",1),
    (assign, "$g_battle_result", 1),
    (call_script, "script_play_victorious_sound"),
    ],
 [
    (call_script, "script_count_mission_casualties_from_agents"),
    (finish_mission, 1),
    ])

В целом, ищем строки “ (assign, "$pin_player_fallen", 1), ” (всего 8 штук, одна из которых в нерабочей области - её менять не нужно), добавляем после них сообщение о падении главного героя (констатация факта, а также подсказка где искать ошибку, если она произойдёт), а остальное блокируем значком “#” (важно: у некоторых абзацев закрывающий тег “ ]) ” расположен на последней фразе, а не отдельно - в этом случае его нужно перенести на следующую строку).

common_siege_check_defeat_condition

common_siege_check_defeat_condition = (
 1, 4, ti_once,
 [
    (main_hero_fallen)
    ],
 [
    (assign, "$pin_player_fallen", 1),
    (display_message, "@You have fallen in battle!"),
#    (get_player_agent_no, ":player_agent"),
#    (agent_get_team, ":agent_team", ":player_agent"),
#    (try_begin),
#      (neq, "$attacker_team", ":agent_team"),
#      (neq, "$attacker_team_2", ":agent_team"),
#      (str_store_string, s5, "str_siege_continues"),
#      (call_script, "script_simulate_retreat", 8, 15, 0),
#    (else_try),
#      (str_store_string, s5, "str_retreat"),
#      (call_script, "script_simulate_retreat", 5, 20, 0),
#    (try_end),
#    (assign, "$g_battle_result", -1),
#    (set_mission_result,-1),
#    (call_script, "script_count_mission_casualties_from_agents"),
#    (finish_mission,0),
    ])

lead_charge

     (1, 4, ti_once, [(main_hero_fallen)],
         [
             (assign, "$pin_player_fallen", 1),
           (display_message, "@You have fallen in battle!"),
#          (str_store_string, s5, "str_retreat"),
#          (call_script, "script_simulate_retreat", 10, 20, 1),
#          (assign, "$g_battle_result", -1),
#          (set_mission_result,-1),
#          (call_script, "script_count_mission_casualties_from_agents"),
#          (finish_mission,0)
          ]),

village_attack_bandits

     (1, 4, ti_once, [(main_hero_fallen)],
         [
             (assign, "$pin_player_fallen", 1),
           (display_message, "@You have fallen in battle!"),
#          (str_store_string, s5, "str_retreat"),
#          (call_script, "script_simulate_retreat", 10, 20, 1),
#          (assign, "$g_battle_result", -1),
#          (set_mission_result, -1),
#          (call_script, "script_count_mission_casualties_from_agents"),
#          (finish_mission, 0)
             ]),

village_raid

     (1, 4, ti_once, [(main_hero_fallen)],
         [
             (assign, "$pin_player_fallen", 1),
           (display_message, "@You have fallen in battle!"),
#          (str_store_string, s5, "str_retreat"),
#          (call_script, "script_simulate_retreat", 10, 20, 1),
#          (assign, "$g_battle_result", -1),
#          (set_mission_result,-1),
#          (call_script, "script_count_mission_casualties_from_agents"),
#          (finish_mission,0)
             ]),

besiege_inner_battle_castle

     (1, 4, ti_once, [(main_hero_fallen)],
         [
             (assign, "$pin_player_fallen", 1),
           (display_message, "@You have fallen in battle!"),
#          (str_store_string, s5, "str_retreat"),
#          (call_script, "script_simulate_retreat", 5, 20, 0),
#          (assign, "$g_battle_result", -1),
#          (set_mission_result,-1),
#          (call_script, "script_count_mission_casualties_from_agents"),
#          (finish_mission,0)
             ]),

besiege_inner_battle_town_center

     (1, 4, ti_once, [(main_hero_fallen)],
         [
             (assign, "$pin_player_fallen", 1),
           (display_message, "@You have fallen in battle!"),
#          (str_store_string, s5, "str_retreat"),
#          (call_script, "script_simulate_retreat", 5, 20, 0),
#          (assign, "$g_battle_result", -1),
#          (set_mission_result,-1),
#          (call_script, "script_count_mission_casualties_from_agents"),
#          (finish_mission,0)
             ]),

castle_attack_walls_defenders_sally

     (1, 4, ti_once, [(main_hero_fallen)],
         [
             (assign, "$pin_player_fallen", 1),
           (display_message, "@You have fallen in battle!"),
#          (str_store_string, s5, "str_retreat"),
#          (call_script, "script_simulate_retreat", 5, 20, 0),
#          (assign, "$g_battle_result", -1),
#          (set_mission_result, -1),
#          (call_script, "script_count_mission_casualties_from_agents"),
#          (finish_mission,0)
             ]),

common_battle_tab_press

common_battle_tab_press = (
 ti_tab_pressed, 0, 0, [],
 [
    (try_begin),
     (eq, "$g_battle_won", 1),
     (call_script, "script_count_mission_casualties_from_agents"),
     (finish_mission,0),
    (else_try),
     (eq, "$pin_player_fallen", 1),
     (call_script, "script_simulate_retreat", 5, 20),
     (str_store_string, s5, "str_retreat"),
     (call_script, "script_count_mission_casualties_from_agents"),
     (set_mission_result, -1),
     (finish_mission,0),
    (else_try),
     (call_script, "script_cf_check_enemies_nearby"),
     (question_box,"str_do_you_want_to_retreat"),
    (else_try),
     (display_message,"str_can_not_retreat"),
    (try_end),
    ])

module_scripts.py

game_start

("game_start",
  [
     (assign, "$battle_won", 0),

---

При чём тут "castle_attack_walls_belfry" и "castle_attack_walls_ladder" я не понял - там же (assign, "$pin_player_fallen", 0) - возможно имеются в виду "village_attack_bandits" и "village_raid" - там значение 1, а не 0, а потому тоже приводит к скрипту поражения, в то время как за 0 я этого эффекта не заметил (допускаю, что не внимательно искал).

P.S.: Вопрос о авто-завершении боя при победе остаётся актуальным (мне уже надоело щелкать tab каждый раз, когда кончаются враги).
 

Добавлено: 14 Ноября, 2012, 13:37

Нашёл-таки способ авто-завершения боя (довольно грубый): дублировал вторую часть скрипта "common_battle_check_victory_condition" в первую часть - а именно:
(call_script, "script_count_mission_casualties_from_agents"),
    (finish_mission, 1),

Получилось грубовато, но с моим знанием программирования на красоту кода не претендую :D

---

  module_mission_templates.py

common_battle_check_victory_condition = (
  1, 60, ti_once,
  [
    (store_mission_timer_a,reg(1)),
    (ge,reg(1),10),
    (all_enemies_defeated, 5),
#    (neg|main_hero_fallen, 0),
    (set_mission_result,1),
    (display_message,"str_msg_battle_won"),
    (assign,"$battle_won",1),
    (assign, "$g_battle_result", 1),
    (call_script, "script_play_victorious_sound"),
    (call_script, "script_count_mission_casualties_from_agents"),
    (finish_mission, 1),
    ],
  [
    (call_script, "script_count_mission_casualties_from_agents"),
    (finish_mission, 1),
    ])

===

P.S.: И ещё почему-то именно добавление в файл скриптов "(assign, "$battle_won", 0)," приводит у меня к ошибке компиляции... О_о
« Последнее редактирование: 14 Ноября, 2012, 13:50 от Oltopeteeh »
  • Фракция: Наемники
Уважаю креатив, ценю позитив, люблю Mount&Blade =)
  • Сообщений: 85
    • Просмотр профиля
Файла module_mission_templates.py в папке с игрой нет
  • Сообщений: 390
    • Просмотр профиля
D1versant, нет.Он в модульной системе ;)
  • Сообщений: 85
    • Просмотр профиля
0
« Ответ #10 : 22 Декабря, 2014, 18:53 »
Все, разобрался. Python, конечно, мне не очень нравится  :)
 

Добавлено: 22 Декабря, 2014, 19:31

Если сделать то, что предлагает топикстартер, будет ошибка.
Как сделать, чтобы было, как в дипломатии. Что писать в variables?
 

Добавлено: 22 Декабря, 2014, 20:16



В variables.txt добавил:

g_production_day_count_for_village
g_dplmc_battle_continuation
g_dplmc_cam_activated
g_dplmc_charge_when_dead
g_camera_rotate_x
g_camera_rotate_y
g_camera_rotate_z
g_camera_x
g_camera_y
g_camera_z

module_mission_templates.py изменил. Не разбираюсь в питоне. Ошибка с типами какая-то, но я не понимаю.

Вот тут: + dplmc_battle_mode_triggers,
« Последнее редактирование: 22 Декабря, 2014, 20:20 от D1versant »
  • Сообщений: 292
    • Просмотр профиля
    • FPSBANANA не мой сайт,но открыт всем...
Есть ли готовый мод на чистый Нэйтив? Очень поможет с добавлением сюда большого мода.
  • Сообщений: 1
    • Просмотр профиля
0
« Ответ #12 : 26 Февраля, 2021, 15:45 »
Эй, дружочек. Может ты всё же объяснишь с каким файлом работать и где его найти? Потому что вот это сочинение, которое ты так долго строчил, не имеет никакого значения, потому что во первых ты забыл назвать файл, где нужно это всё писать, а во вторых где находится этот файл. Да, и вот тебе в третьих, может ты выложишь ссылку для скачивания готового файла, об этом не подумал?
  • Фракция: Свады
  • Сообщений: 25781
  • За победу в конкурсе "Знамя кальрадийца" И создали они сайт... За регистрацию на форуме не позже сентября 2008 года
  • Сервер Discord
    • Просмотр профиля
    • Всадники Кальрадии
0
« Ответ #13 : 26 Февраля, 2021, 16:08 »
Эй, дружочек. Может ты всё же объяснишь с каким файлом работать и где его найти? Потому что вот это сочинение, которое ты так долго строчил, не имеет никакого значения, потому что во первых ты забыл назвать файл, где нужно это всё писать, а во вторых где находится этот файл. Да, и вот тебе в третьих, может ты выложишь ссылку для скачивания готового файла, об этом не подумал?
Был бы я не месте "дружочка", то точно не ответил такому вот просящему. Впрочем, он и так и так не ответит - последнее посещение форума было зафиксировано в 2015 году
  • Ник в M&B: [RUSMNB]Vanok
  • Фракция: Вегиры
И помните: "Хватит набивать посты" (NightHawkreal)
  • Сообщений: 230
    • Просмотр профиля
+1
« Ответ #14 : 26 Февраля, 2021, 23:02 »
Был бы я не месте "дружочка", то точно не ответил такому вот просящему.
Согласен, формулировка у товарища аховая. Грубость, требование выложить все на блюдечке.
И внимательность - никакая.
Все файлы четко указаны, даже выделены ярко, но так это и не нужно тем, у кого есть глаза и опыт работы с питоном.
Цитировать (выделенное)
Найти   в
  module_mission_templates.py
Файлы с концовкой .ру трудно незаметить, когда кодеры с ними активно работают, какой крупный мод не открой))
А если установлен один мод, то другой надо вписывать вручную, о чем и тема.
Варбанд - не баннерлорд, тут с этим строго, увы...
  • Фракция: Наемники
Уважаю креатив, ценю позитив, люблю Mount&Blade =)
  • Сообщений: 46
    • Просмотр профиля
Чет у меня хрень какая то... нету module_mission_templates, только просто mission_templates

Но в нем нет ничего из читат...или у меня такой паленый поиск по файлам? :cry: :blink: facepalm

А нельзя скопировать этот миссион теплатес из какого нибудь мода, где проблема решена с камерой в Натив? Крякнется что то?


Шальная логика подсказывает что нужно скачивать и учить как пользоваться Python...правда?

Вот уж за что я ненавижу турецких разрабов, так за эту глупость с выкидышем)))

Кажется придется терпеть
« Последнее редактирование: 07 Мая, 2021, 22:29 от Добрый латник »
  • Фракция: Наемники
  • Сообщений: 25781
  • За победу в конкурсе "Знамя кальрадийца" И создали они сайт... За регистрацию на форуме не позже сентября 2008 года
  • Сервер Discord
    • Просмотр профиля
    • Всадники Кальрадии
Добрый латник, все просто: здесь описаны действия с модульной системой. В классике/warband все скрипты зашифрованы, а исходный код содержится в модульной системе, которую можно править и компилировать уже с правками в игровые файлы. В принципе, если знать, что копировать, можно и из игровых файлов нужный кусок скопировать, но вряд ли Вам кто-то этот кусок найдет так легко.
  • Ник в M&B: [RUSMNB]Vanok
  • Фракция: Вегиры
И помните: "Хватит набивать посты" (NightHawkreal)
  • Сообщений: 777
    • Просмотр профиля
0
« Ответ #17 : 12 Сентября, 2021, 09:41 »
мне тоже интересно как такое сделать, но с модульной системой я не умею и не хочу работать из за кучи затрат времени на изучение всего этого+питона. Не могли бы вы скинуть файл? как я понял для разных версий игры он идентичен
Спокойный как монах и несокрушимый как пилигрим.

СиЧЪ Total War СиЧЪ Total War
Сайт "Всадники Кальрадии" не является СМИ. Администрация не несет ответственность за высказывания и публикацию каких-либо материалов, сделанные любыми пользователями форума, в том числе посредством личных и публичных сообщений. Материалы, размещенные на ресурсе третьими лицами, могут содержать информацию, не предназначенную для лиц, не достигнувших совершеннолетия. При обнаружении на ресурсе материалов, нарушающих законодательство Российской Федерации, необходимо обращаться к администрации.
Сайт работает на быстром VPS/VDS хостинге от FASTVPS


Powered by SMF 2.0 | SMF © Simple Machines LLC