Akkella
Пользователь
Posts: 137
|
|
Re: Отравление
« Reply #2 on: 09 September 2009, 08:02:56 » |
|
Пробовал.
Опять криво...
Пока нашел такой вариант: 1 При выходе с карты проверяется уровень отравления ГГ и запоминается в глобальную переменную. 2 При входе на карту уровень отравления ГГ считаем по формуле: (Уровень отравления(нач) - Санитар/10)*кол-во часов/4/Выносливость + уровень отравления начальный. Брать процент от сопротивления ядам. Сюда еще добавляется эффект движка.
Это означает, что ГГ в пути поддерживает организм, а в городе или на эскаунтерах занят немного другим (если не лечит яд).
3 В городе и эскаунтерах процесс идет за счет движка...
Пока единственный серьезный минус - это в случае отдыха ГГ на карте, но и тут это можно отслеживать в map_update_p_proc.
Как пример: Имеем ГГ с выносливостью 5, Санитаром 30 и уровнем отравления 25 и сопротивления ядам 25%. ГГ уходит с карты и выходит на эскаунтер через два дня. Получаем: (25 -30/10)*48/4/5 + 25 = 77 77*(100-25)/100 =57
Получаем уровень отравления 57 (организм регресирует). Часть яда можно вывести Доктором (я его немного изменил), при условии, что навык тагг. (специалист). Выводить пивом (-10, например) с потерей Восприятия (а то оно бесполезно). Или противоядием. Если отравление небольшое, а Санитар высокий, яд сам выйдет.
Код простейший: procedure map_exit_p_proc begin set_global_var(900, get_poison(dude_obj)); set_global_var(901, game_time); end
procedure map_enter_p_proc if global_var(900)>0 then begin LVar0 := (game_time-global_var(901))/36000; LVar1 := (global_var(900)-has_skill(dude_obj, 6)/10)*LVar0/4/get_critter_stat(dude_obj, 2)+global_var(900); poison(dude_obj, LVar1-get_critter_stat(dude_obj, 36)); end end
global_var(900) - уровень отравления ГГ на момент выхода с карты. global_var(901) - время на момент выходя с карты.
Однако, хотелось бы сделать исправления в движке, если будет такая возможность.
|