Теги:

Автор Тема: Удары, раны и убийства  (Прочитано 3727 раз)

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

0
: 02 Августа, 2014, 16:00
Мне интересно, возможно ли, чтобы в сингле, определенный юнит получал повышенный или пониженный урон, когда его бьет другой. определенный юнит? Или тоже самое но с оружием, не в смысле урона, а например - повышенный урон от определенного вида топоров.

Так же, хочу спросить, игра позволяет запоминать, кто именно нанес юниту последний удар?
Привыкший сражаться не жнет и не пашет:
Хватает иных забот.
Налейте наемникам полные чаши!
Им завтра – снова в поход!

0
Ответ #1 : 02 Августа, 2014, 16:31
Думаю, что возможно. Хотя тут встречный вопрос, это должно быть временно типо эффекта или на постоянной основе? Если на постоянной, то проще не изобретать велосипед, а просто снабдить этого юнита ослабленной бронёй и он будет получать больше урона от ВСЕХ.

А теперь касательно вопроса у юнита А повышенный дамаг против юнитов Б. У юнитов Б повышенный дамаг против юнитов С. С рвёт юнитов А как тузик будку.

Это вполне реально существующий механизм в игре, просто он работает не на основе юнита, а на основе брони/оружия. К примеру лучникам тяжко против пехоты с большими щитами, а этой пехоте тяжко против конницы с оружиями пробивающими блоки и щиты. Зато арбалетчики например пробивают щиты.

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

Теоритически, можно добавить новые "виды" брони и новые "виды" урона, а уже потом добавлять их предметам, а уже потом одевать их на юнитов. Просто кодить в противном случае нужно будет довольно много в мс.

В механике ванильной игры вообще у "человечка" как таковых свойств особых нет, почти все свои свойства он получает через навыки и, в первую очередь, через одетые на него предметы. Так и создается разница и "боланц" между войсками и армиями в ванильном Warband. На основе этого же и свойств брони и оружия проще делать какие-то особые бонусы.

А насчёт позволяет ли запоминать, кто нанёс последний удар. Опять таки вопрос, для чего? Ну, просто это ненадо было раньше никому, но есть например механизм добавления фрагов как в мультиплеере, так и в соло игре (где статистика сколько перс убил врагов и друзей (в окне экспорта/импорта перса). Опять таки и эту систему можно усовершенствовать.
« Последнее редактирование: 02 Августа, 2014, 16:36 от Groby »

0
Ответ #2 : 02 Августа, 2014, 17:29
Можно изготовить триггеры со специфическим временем срабатывания (см. header_triggers), как во время удара или смерти/обморока, а получить ИД агента можно сохранив определённый параметр триггера (см. там же), также можно получить ИД ударившего оружия (после чего, по надобности снять с ударенного нужное кол-во здоровья).
Без комментариев.

0
Ответ #3 : 02 Августа, 2014, 17:31
Groby,
На постоянной, но не так.  В  том и суть, от ВСЕХ юнит получает стандартный урон либо пониженный, а от конкретного юнита, например, вегирского лучника, он получает повышенный урон или, соответственно стандартный, т.е. лучнику его проще других ушатать.

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

Ну скажем так запоминать, чтобы после боя с пострадавшим произошла та или иная вещь.
Привыкший сражаться не жнет и не пашет:
Хватает иных забот.
Налейте наемникам полные чаши!
Им завтра – снова в поход!

0
Ответ #4 : 02 Августа, 2014, 17:38
ну как-то же сделали в каком-то моде (как бы не Good mod или Gain), что лошадь получает повышенный урон от любого копья.

0
Ответ #5 : 02 Августа, 2014, 17:43
Ну скажем так запоминать, чтобы после боя с пострадавшим произошла та или иная вещь.
Смотря какая вещь. Ежели, скажем, падёж здоровья, то можно и во время боя отметить, а ежели такое, что надо запоминать его некоторое время, то проблемно (надо будет хорошо подумать).
Без комментариев.

0
Ответ #6 : 02 Августа, 2014, 17:54
Дикий-дикий повар,
Эффект проявляется либо сразу после боя, либо в течение суток, знаешь, как со сбежавшими свежезавербованными. Например, допустим, ну... сарранид-ассассин, довольно посредственный вояка, но когда последний удар наносит он, юнит мрет, независимо от хирургии. 
Привыкший сражаться не жнет и не пашет:
Хватает иных забот.
Налейте наемникам полные чаши!
Им завтра – снова в поход!

0
Ответ #7 : 02 Августа, 2014, 17:57
NightHawkreal, с помощью ti_on_agent_hit можно выяснить кто, кого и чем бьет и добавить повреждений в триггере.

Вот пара примеров использования (форматирование почему-то не сохранилось).
При ударе, если нанесены достаточно большие повреждения, противник может упасть, если бьет игрок и бьет по ногам шанс увеличивается:

Ломающаяся ланса (если юнит бьет лансой, то есть шанс, что она сломается и юнит автоматически "возьмет" другое оружие - скрипт Peteo):
« Последнее редактирование: 02 Августа, 2014, 18:22 от Smile »

0
Ответ #8 : 02 Августа, 2014, 18:07
Есть функция которая наносит определённое количество ущерба одним агентом другому агенту независимо от расстояния между ними.
(agent_deliver_damage_to_agent, <agent_id_deliverer>, <agent_id>, [damage_amount]),
Если ущерб [damage_amount] не задавать, то он расчитывается обычным образом.
Триггер будет выглядеть как-то так:
(ti_on_agent_hit, 0, 0, [],
[
(store_trigger_param_1, ":dead_agent_no"),
(store_trigger_param_2, ":killer_agent_no"),

(agent_get_troop_id, ":troop_no", ":dead_agent_no"),
(agent_get_troop_id, ":troop_id", ":killer_agent_no"),
(try_begin),
(eq, ":troop_no", "trp_жертва"),
(eq, ":troop_id", "trp_убийца"),
(agent_deliver_damage_to_agent,":killer_agent_no",":dead_agent_no",100),
(try_end),
]),


0
Ответ #9 : 02 Августа, 2014, 18:35
FinGall,
В смысле, независимо от расстояния?
Привыкший сражаться не жнет и не пашет:
Хватает иных забот.
Налейте наемникам полные чаши!
Им завтра – снова в поход!

0
Ответ #10 : 02 Августа, 2014, 18:43
В смысле, независимо от расстояния?
Агенты могут находиться в разных концах сцены. Функция agent_deliver_damage_to_agent всё равно нанесёт повреждения агенту-жертве. В данном триггере она просто добавит ещё повреждений к нанесённому удару.

0
Ответ #11 : 02 Августа, 2014, 19:10
Эффект проявляется либо сразу после боя, либо в течение суток, знаешь, как со сбежавшими свежезавербованными. Например, допустим, ну... сарранид-ассассин, довольно посредственный вояка, но когда последний удар наносит он, юнит мрет, независимо от хирургии. 
Со свежезавербованными в том дело, что не надо много запоминать (найм с одного слота раз в 24 часа), а тут... При желании можно закодировать по многу значений в каждую переменную... А войска ведь ещё и перемещать можно (в замок или другому отряду). ...Убрать бойца из партии можно и во время боя.
Без комментариев.

0
Ответ #12 : 02 Августа, 2014, 19:58
Эффект проявляется либо сразу после боя, либо в течение суток, знаешь, как со сбежавшими свежезавербованными.
ну... сарранид-ассассин, довольно посредственный вояка, но когда последний удар наносит он, юнит мрет, независимо от хирургии. 
Я бы попробовал "записать" в отдельный слот убитых ассасином.
Слот в module_constants - slot_agent_убит_ассасином, триггер  ti_on_agent_hit - если бьет ассасин и повреждения больше хп жертвы, жертвы "записываются" в слот slot_agent_убит_ассасином (agent_set_slot, ":убитый", slot_agent_убит_ассасином).
С агентами "в слотах" можно проделать нужные операции в нужное время, мда, на поле боя). Если нужно запомнить юнита во время боя, а потом в определенное время убрать из партии с карты то вероятно хитрее. В случае с ассасином, я попробовал бы убирать с карты кол-во юнитов определенного типа равное кол-ву юнитов определенного типа, убитых ассасином, "убивая" ассасином с помощью blunt damage (то бишь оглушая). Возможно, можно по другому.
« Последнее редактирование: 02 Августа, 2014, 21:00 от Smile »

Теги: