Всадники Кальрадии

Модификации => Обмен опытом: Mount&Blade => Обмен опытом (в помощь мододелу) => Вопросы и ответы по модостроению => Тема начата: Шандарах от 22 Октября, 2011, 09:44

Название: Как бы сделать хитрый щит?...
Отправлено: Шандарах от 22 Октября, 2011, 09:44
Доброго времени суток!
Предыстория:
Недавно возникла идея сделать в моде один хитрый щит. То есть по легенде (мод фентезийный), и внешнему виду сей щит - полусферическое "силовое поле".
Таким образом, возник вопрос:
Как реализовать отображение модельки только во время применения щита (когда нажата клавиша "блок") , а во всех остальных положениях (на спине, в руке) сделать его невидимым?

Или движок игры такого не позволяет?
Название: Re: Как бы сделать хитрый щит?...
Отправлено: Leon473 от 22 Октября, 2011, 13:38
Убери этот красный шрифт, иначе закрою тему.
Название: Re: Как бы сделать хитрый щит?...
Отправлено: Unknown от 22 Октября, 2011, 14:28
Шандарах (http://rusmnb.ru/index.php?action=profile;u=20993), первое, что приходит в голову - спаунить объект сцены(scene_prop), имеющий вид силового поля. Делать проверку на блок, если блока нет - убирать объект под землю.
Название: Re: Как бы сделать хитрый щит?...
Отправлено: Unknown от 22 Октября, 2011, 14:43
ну, вот примерный алгоритм для появления:

перебрать_агентов, :агент (try_for_agents)

не|агент_не_игрок, :агент (neg|agent_is_non_player)

получить_защитное_действие_агента, :действие, :агент (agent_get_defend_action)

эквивалентно, :действие, 2 (eq)

взять_позицию_агента, поз1, :агент (agent_get_position)

установить_позицию_появления, поз1 (set_spawn_position)

создать_scene_prop, "spr_мой_объект_сцены" (spawn_scene_prop)

закончить (try_end)

 

Добавлено: 22 Октября, 2011, 14:44

команды ищи в файле header_operation.py
Название: Re: Как бы сделать хитрый щит?...
Отправлено: Шандарах от 22 Октября, 2011, 14:55
Спасибо!
Единственная проблема при таком решении, думаю будет в том, что придется ее как-то заставить щит получать повреждения при попадании в объект стрел и прочих метательных снарядов. Или придется ограничить кол-во его применений в каждом бою, что, как мне кажется, нежелательно. Либо заставить его расходовать "ману" при включенном блоке.
Лучший вариант, конечно, первый, но как его реализовать?
Извиняюсь за то, что задаю кучу вопросов один за другим...
Название: Re: Как бы сделать хитрый щит?...
Отправлено: Unknown от 22 Октября, 2011, 14:57
Шандарах (http://rusmnb.ru/index.php?action=profile;u=20993), открой файлик module_scene_props.py и найди, например, earth_sally_gate_right.
Название: Re: Как бы сделать хитрый щит?...
Отправлено: Шандарах от 22 Октября, 2011, 15:08
Гм... Нету в модульке Magic Word-а в module_scene_props.py такой строчки...
Есть только
Название: Re: Как бы сделать хитрый щит?...
Отправлено: Unknown от 22 Октября, 2011, 15:08
Шандарах (http://rusmnb.ru/index.php?action=profile;u=20993), у тебя варбанд или ИГ?
Название: Re: Как бы сделать хитрый щит?...
Отправлено: Шандарах от 22 Октября, 2011, 15:10
ИГ. Старенький MW пытаюсь доработать....
Название: Re: Как бы сделать хитрый щит?...
Отправлено: Unknown от 22 Октября, 2011, 15:14
Шандарах (http://rusmnb.ru/index.php?action=profile;u=20993), тогда не могу сказать определённо, можно ли там ломать объекты.
но можно сделать счётчик, чтобы щит только некоторое время был.
Название: Re: Как бы сделать хитрый щит?...
Отправлено: Шандарах от 22 Октября, 2011, 15:17
Ага! А как сие сотворить?
В данном моде счетчики точно используются... Вот только не факт, что я смогу сам найти, где они прописаны...
Название: Re: Как бы сделать хитрый щит?...
Отправлено: Unknown от 22 Октября, 2011, 15:52
счётчик - это триггер в файле module_mission_templates.py.

Мне нравятся счётчики с использованием слотов.
Модернизируем предыдущий триггер.
перебрать_агентов, :агент (try_for_agents)

не|агент_не_игрок, :агент (neg|agent_is_non_player)

получить_защитное_действие_агента, :действие, :агент (agent_get_defend_action)

эквивалентно, :действие, 2 (eq)

взять_позицию_агента, поз1, :агент (agent_get_position)

установить_позицию_появления, поз1 (set_spawn_position)

создать_scene_prop, "spr_мой_объект_сцены" (spawn_scene_prop)

установить_агенту_слот, :агент, слот_время_щита, 20 (agent_set_slot)

закончить (try_end)
новые слоты прописываются в файле module_constants.py, для агентов ищи заголовок AGENT SLOTS.
 
далее пишем новый триггер

 (1, 0, 0, [], - 1, 0, 0 - интервалы выполнения всего триггеры/условия/последствия
       [
перебрать_агентов, :агент

получить_слот_агента, :время, :агент, слот_время щита(agent_get_slot)

пробовать (try_begin)
больше, :время, 0 (gt)
отнять, :время, 1 (val_sub)
установить_агенту_слот, :агент, слот_время_щита, :время
иначе(else_try)
меньше_или_равно, :время, 0 (le)

#*тут привожу кусок из своего кода*
  (scene_prop_get_num_instances, ":count_of_fireball", spr_силовой_щит),   - нашли кол-во щитов
        (try_for_range, ":cur_fireball", 0, ":count_of_fireball"), - перебрали их
        (scene_prop_get_instance, ":fireball_instance", ":prop_id", ":cur_fireball"), - взяли инстанцию отдельного
            (prop_instance_get_position,pos2,":fireball_instance"),  - взяли позицию
#*конец*
позиции_сместить_y, поз2, -500 (position_move_y)
инстанции_установить позицию,":fireball_instance", поз2 (prop_instance_set_position )
закончить (заканчиваем try_for_range)

закончить (try_begin)

закончить (перебор агентов)

        ]),
Название: Re: Как бы сделать хитрый щит?...
Отправлено: Шандарах от 22 Октября, 2011, 16:01
Еще раз спасибо! Завтра после работы засяду разбиратся с этим... А то у меня уже ночь на дворе.
Что получится - выложу. Ну а ежели чего сам не соображу и не смогу найти ответ, буду опять вопросами донимать  :)
 

Добавлено: 23 Октября, 2011, 14:54

Пока пытался разобратся с предложенным вариантом, возникла мысль: а может просто заставить при 
(try_begin),
                (key_is_down, key_left_mouse_button),
и надетом щите power shield 1 подменять его на power shield 2?