а что если, (если есть такая возможность конечно) привязать вторую руку к кнопкам "Q" "E" т.е. второе оружие бьет только слева\справа в итоге получиться следуещее примерно:
1. Удар слева+слева ("Q" + левый замах)
2. Удар слева+справа ("Q" + правый замах)
3. Удар слева + укол ("Q" + нижний замах)
4. Удар слева + верхний ("Q" + верхний замах)
1. Удар справа + слева ("Е" + левый замах)
2. Удар справа + справа ("Е" + правый замах)
3. Удар справа + укол ("Е" + нижний замах)
4. Удар справа + верхний ("Е" + верхний замах)
Это как бы комбинации, также было бы здорово оставить обычные удары "только одной рукой"
по блокам точно не знаю как..но без них получается около 14 видов анимаций
Простите за некропостинг =[ но как бы давно на форуме не был, забрел, полистал темы, нашел интересную. Кратенько опишу как сделать пистолет в левую руку. Делал с год назад, все забыл, но проникся, установил варбанду снова, откопал трупик мода и вспомнил =)
Текущий вариант, мягко говоря, не готовый: он не учитывает навык стрельбы персонажа, при экипированном пистолете не показывается прицел, не тратятся патроны, да и работает 100% только для ГГ, но самую главную задачку - выстрел из пистолета в левой руке оно решает. Ах да, еще Грей так и не вкурил как следует как работает система событие-реализация в сетевой игре, потому все скрипты для сингла онли.
Итак начнем. Во-первых добавляем в module_items сам пистолет:
#lefthandpistol
["lefthandpistol ", "lefthand pistol ", [("lefthandpistol ",0)],
itp_merchandise|itp_type_shield|itcf_carry_revolver_right|itp_wooden_parry|itp_force_attach_left_hand, 0, 60 , weight(2)|hit_points(400)|body_armor(4)|spd_rtng(100)|shield_width(1)|shield_height(1),imodbits_shield],
Т.е. наш пистолет - на самом деле щит.
Затем в module_mission_templates в начале объявляем свои процедуры, которые собственно и будет производить выстрел.
lpistol_down = (
0,0,0,[],
[
(try_for_agents,":agent_no"),
(agent_get_wielded_item,":item_no",":agent_no",1),
(eq, ":item_no", "itm_lefthandpistol"),
(agent_get_defend_action, ":action", ":agent_no"),
(eq, ":action", 2),
(agent_set_defend_action, ":agent_no", -2, 1000),
(agent_set_slot,":agent_no",99,1),
(agent_set_animation, ":agent_no", "anim_ready_pistol", 1),
(try_end),
]
lpistol_click =(
0,0,0.5,[(game_key_released, gk_defend),],
[
(get_player_agent_no, ":agent_no"),
(agent_get_slot,":ready",":agent_no",99),
(agent_get_wielded_item,":item_no",":agent_no",1),
(try_begin),
(eq, ":ready", 1),
(eq, ":item_no", "itm_lefthandpistol"),
(agent_set_animation, ":agent_no", "anim_release_pistol"),
(init_position,pos20),
(agent_get_position,pos1,":agent_no"),
(agent_get_bone_position, pos20, ":agent_no", hb_hand_l),
(position_transform_position_to_parent,pos20,pos1,pos20),
(play_sound,"snd_pistol_shot"),
(particle_system_burst, "psys_pistol_smoke", pos20, 15),
(add_missile, ":agent_no", pos20, 55000, "itm_lasgun",0, "itm_cartridges",0),
(agent_set_slot,":agent_no",99,0),
(try_end),
]
)
Первая процедура отлавливает всех агентов, которые кастуют действие "защита", проверяет наличие нужного предмета и, если предмет найден, выполняет три вещи:
- убирает действие "защита". Мы же не можем блочить пистолем, верно?
- выставляет в агентский слот 99 значение 1. Это для нас - скриптеров - отметочка, что прицеливание выполнено.
- проигрывает анимацию прицеливания из пистолета.
Вторая функция при каждом релизе клавиши блока (т.е. в момент, когда мы отпускаем ПКМ) проверяет слот 99, если он равен 1, т.е. было произведено прицеливание из пистолета, то проверяем наличие пистолета-щита, а если и это верно, то:
- запускаем анимацию выстрела
- выхватываем позицию кости левой кисти агента
- переводим ее в глобальные координаты
- играем звук выстрела
- добавляем дыма
- и, самое главное, спавним мизайл (т.е. пульку летящую) в позиции левой руки.
- выставляем прицеливание в 0.
Собственно, вторую процедуру по идее стоить перевесить не на релиз клавиши блока, а на окончание блока агентом - тогда будет работать и для неписей. Однако, несчастный ИИ все равно будут пытаться "блокировать" пистолетом и буде держать "прицеливание" до последнего, умирая с гордо поднятым пистолетом. Так что все равно это бесполезно, увы.
Чтобы все заработало последнее, что нам надо сделать - это прописать в каждой сцене в конце, после всех системных и модных триггеров такой текст:
lpistol_down,
lpistol_click,
Компилимся, заходим, покупаем пистолетик, идем стрелять и... ой! Персонаж "стреляет" мечом, а пулька вылетает из левой руки и уходит в землю. А почему? А потому что мы не поменяли анимацию выстрела. Подробно описать как это сделать сейчас не могу, сорри, за год с лишним все позабыл. Но в целом, план такой:
- найти аниму пистолетного прицеливания и аниму пистолетного выстрела
- выгрузить из
- отзеркалить в любом удобном редакторе (я, кажется, блендер юзал, но на 100% не поручусь)
- загрузить с тем же именем.
- если у вас в моде есть и обычные пистолеты, а не только "леворукие", то грузим с другим именем и прописываем новую аниму в module_animations и соответствующем хедере.
Эти скрипты вроде "скелета" можно их улучшать до нетпределасовершенству. Например анализировать агенский навык стрельбы и в соответствии с ним поворачивать позицию выстрела на рандомный небольшой угол. Можно проверять для выстрела не только наличие пистолета-щита но и наличие патронов к нему, а после выстрела уменьшать число патронов. Единственно в чем не уверен - это в возможности рисовать прицел и делать его актуальным вероятному отклонению выстрела. Тут лучше спросить мастеров, умеющих всякие менюшки, текстовые окна и прочие рисования на экране вызывать.
Надеюсь кому-то был полезен ^^
Строка 1887 в хедер оперейшен
agent_get_bone_position = 3310 #(agent_get_bone_position, <position_register>, <agent_no>,
Делалось на версии 1.153 + WSE