Обновлено: 09.02.2023
Мини мод, добавляющий на худ аптечки а также бинты, антирадиационные препараты и водку. Мод позволяет вывести подобным образом иконку и кол-во любого предмета в инвентаре ГГ. Для этого нужно просто вписать нужный вам предмет во все таблицы и указать координату по оси X для показа его иконки. Цвета вывода текста чисто экспериментальные — можете заменить их на любые другие ориентируясь на таблицы цветов (легко найти в инете). По умолчанию цвет цифр золотистый — для всех.
Скрипт вывода на худ иконок аптечек и антирада с указанием их кол-ва в инвентаре.
Скрипт позволяет вывести подобным образом иконку и кол-во любого предмета в инвентаре ГГ.
Для этого нужно просто вписать нужный вам предмет во все таблицы и указать координату по оси X для показа его иконки.
Цвета вывода текста чисто экспериментальные — можете заменить их на любые другие ориентируясь на таблицы цветов (легко найти в инете).
По умолчанию цвет цифр золотистый- для всех.
Важно: скрипт необходимо поставить на апдейт в биндер эктора — то есть прописать вызов hud_med.HudShowMed() в функцию
actor_binder:update(delta) в файле bind_stalker.script
В последней версии сделал возможность настройки отображения статиков как по горизонтали — внизу, так и по вертикали — в правом верхнем углу.
вот так будут выводится по вертикали — 990 — это точка отсчета по оси Х — правый верхний угол
local X = true and 990 —// если true строить по вертикали в правом верхнем углу
local Y = false and 725 —//если true строить по горизонтали внизу
а вот так по горизонтали — 725 — точка отсчета по оси Y — нижняя часть экрана, левее окошка патронов
local X = false and 990 —// если true строить по вертикали в правом верхнем углу
local Y = true and 725 —//если true строить по горизонтали внизу
Также добавил вывод кол-ва водки и бинтов. Изменил шрифт цифр на более подходящий под размер иконок и шаг между крайними углами статиков с 25 на 30 пикселей.
CoP: Делаем нормальные медикаменты.
Данная мини-статья расскажет вам о том как внести в игру более правильные в плане воздействия медикаменты.
Я полагаю многие играя в компьютерные игры задумались что аптечка(к примеру) на самом деле не должна лечить мгновенно(ну или почти мгновенно, как это сделано в STALKER). Это то мы и исправим, ну и заодно рассмотрим полный список эффектов.
Итак поехали:
Возьмем кусок описания обычной аптечки:
В самом верху мы видим:
Рассмотрим секцию «booster» она по сути содержит пустые конфиги. Прокоментирую основное(параметры которые могут пригодиться).
Теория пройдена.
Итак, мы получили аптечку которая лечит медленно но на протяжение 60 секунд(По сравнению с оригиналом это хоть как то похоже на правду)
Таким же образом можно отредактировать и остальные препараты. Антирад например.
Я полагаю что опьянение здесь в тему так как вещества такого типа считаются наркотическими.
А зная о ранее неиспользуемых эфектах можно создавать новые, тот же к примеру «Анти-похмелин». В пачке которого будет 10 таблеток:
S.T.A.L.K.E.R|Модостроение
Делаем нормальные медикаменты
Данная мини-статья расскажет вам о том как внести в игру более правильные в плане воздействия медикаменты.
Я полагаю многие играя в компьютерные игры задумались что аптечка(к примеру) на самом деле не должна лечить мгновенно(ну или почти мгновенно, как это сделано в STALKER). Это то мы и исправим, ну и заодно рассмотрим полный список эффектов.
Возьмем кусок описания обычной аптечки:
[medkit]:booster
$spawn = «food and drugsmedkit»
visual = dynamicsdevicesdev_aptechkadev_aptechka_low.ogf
inv_name = st_medkit
inv_name_short = st_medkit
description = st_medkit_descr
inv_weight = 0.1
inv_grid_width = 1
inv_grid_height = 1
inv_grid_x = 6
inv_grid_y = 14
cost = 250
boost_time = 10.0
boost_health_restore = 0.01
boost_radiation_restore = 0.0
boost_bleeding_restore = 0.005
В самом верху мы видим:
[medkit]:booster = системное имя:системное имя предмета из которого будут браться недостающие строки конфига
Рассмотрим секцию «booster» она по сути содержит пустые конфиги. Прокоментирую основное(параметры которые могут пригодиться).
[booster]:identity_immunities
GroupControlSection = spawn_group
discovery_dependency =
;$spawn = «food and drugsbooster»
$prefetch = 8
class = S_FOOD
cform = skeleton
visual = dynamicsdevicesdev_aptechkadev_aptechka_low.ogf ; Ссылка на визуал в «stalkergamedatameshes»
description = default ; Ссылка на описание предмета «gamedataconfigstextrus»
inv_name = default ; Ссылка на имя предмета(Аптечка автомобильная) «gamedataconfigstextrus»
inv_name_short = default ; Ссылка на короткое имя предмета(Апт.Авт.) «gamedataconfigstextrus»
inv_weight = 0.01 ; Вес предмета
inv_grid_width = 1
inv_grid_height = 1
inv_grid_x = 3
inv_grid_y = 18
cost = 1 ; Стандартная стоимость(конечная зависит от отношения торговца)
; eatable item
eat_health = 0 ; Мгновенно даёт определенное количествово здоровья 1 = 100%
eat_satiety = 0 ; Мгновенное насыщение 1 = 100%
eat_power = 0 ; Мгновенное восстановление силы 1 = 100%
eat_max_power = 0 ; Мгновенное увеличение максимальной силы 1 = 100%(Вроде как. )
eat_radiation = 0 ; Мгновенное увеличение или уменьшение облученности (1 увеличение)(-1 уменьшение)
eat_alcohol = 0 ; Мгновенное увеличение или уменьшение уровня опьянения (1 увеличение)(-1 уменьшение)
wounds_heal_perc = 0 ; я так понял что это скорость затягивания ран, но не уверен.
eat_portions_num = 1 ; Интересный параметр. Количество порций в упаковке (проверена работоспособность от 1 до 99999)
boost_time = 0.0 ; Время действия(распостраняется только на параметры boost_*
boost_max_weight = 0.0 ; Увеличение переносимого веса. Уменьшение не работает, как видимо на всех boost_* =(
boost_health_restore = 0.0 ; Увеличение скорости восстановления здаровья
boost_power_restore = 0.0 ; Увеличение скорости восстановления силы
boost_radiation_restore = 0.0 ; Увеличение скорости вывода радиации
boost_bleeding_restore = 0.0 ; Увеличение скорости заживления ран
;protection Снижают количество получаемого ХИТА
boost_radiation_protection = 0.0 ; Увеличение защиты от радиации
boost_telepat_protection = 0.0 ; Увеличение защиты от телепатического воздействия(от контролеров не спасает)
boost_chemburn_protection = 0.0 ; Увеличение защиты от химических повреждений
;immunity Увеличивают минимальный уровень воздействия для получения ХИТА
boost_burn_immunity = 0.0 ; Увеличение имунитета к огню
boost_shock_immunity = 0.0 ; Увеличение имунитета к электрическому току
boost_radiation_immunity = 0.0 ; Увеличение имунитета к радиации
boost_telepat_immunity = 0.0 ; Увеличение имунитета к пси воздействию
boost_chemburn_immunity = 0.0 ; Увеличение имунитета к химическим воздействиям
boost_strike_immunity = 0.0 ; Увеличение имунитета к выстрелам
boost_wound_immunity = 0.0 ; Увеличение имунитета к ударам
boost_explosion_immunity = 0.0 ; Увеличение имунитета к взрывам
boost_fire_wound_immunity = 0.0 ; Увеличение имунитета к взрывной волне
;use_sound = characters_voicemultiplayerteam_1voice_roger_3 ; Звук «gamedatasounds»
[medkit]:booster ; НЕ ТРОГАЕМ.
$spawn = «food and drugsmedkit» ; НЕ ТРОГАЕМ.
visual = dynamicsdevicesdev_aptechkadev_aptechka_low.ogf ; НЕ ТРОГАЕМ.
inv_name = st_medkit ; НЕ ТРОГАЕМ.
inv_name_short = st_medkit ; НЕ ТРОГАЕМ.
description = st_medkit_descr ; НЕ ТРОГАЕМ.
inv_weight = 0.1 ; По желанию
inv_grid_width = 1 ; НЕ ТРОГАЕМ.
inv_grid_height = 1 ; НЕ ТРОГАЕМ.
inv_grid_x = 6 ; НЕ ТРОГАЕМ.
inv_grid_y = 14 ; НЕ ТРОГАЕМ.
cost = 250 ; По желанию
boost_time = 60.0 ; Меняем с 10.0 на 60.0
boost_health_restore = 0.002 ; Меняем с 0.01 на 0.002
boost_radiation_restore = 0.0 ; По желанию
boost_bleeding_restore = 0.0 ; По желанию
use_sound = interfaceinv_medkit ; НЕ ТРОГАЕМ.
Итак, мы получили аптечку которая лечит медленно но на протяжение 60 секунд(По сравнению с оригиналом это хоть как то похоже на правду)
Таким же образом можно отредактировать и остальные препараты. Антирад например.
[antirad]:booster
$spawn = «food and drugsantirad»
visual = dynamicsdevicesdev_antiraddev_antirad.ogf
inv_name = st_antirad
inv_name_short = st_antirad
description = st_antirad_descr
inv_weight = 0.01
inv_grid_width = 1
inv_grid_height = 1
inv_grid_x = 18
inv_grid_y = 12
cost = 750
boost_time = 60.0
boost_radiation_restore = 0.01
eat_alcohol = 0.3
Я полагаю что опьянение здесь в тему так как вещества такого типа считаются наркотическими.
А зная о ранее неиспользуемых эфектах можно создавать новые, тот же к примеру «Анти-похмелин». В пачке которого будет 10 таблеток:
[drug_analgin]:booster
$spawn = «food and drugsdrug_analgin»
visual = dynamicsequipmentsmedicaldrug_coagulant.ogf
inv_name = st_drug_analgin
inv_name_short = st_drug_analgin
description = st_drug_analgin_descr
inv_weight = 0.01
inv_grid_width = 1
inv_grid_height = 1
inv_grid_x = 19
inv_grid_y = 4
cost = 350
Информация о пользователе
Подробный разбор файла actor.ltx
max_item_mass = 999 ; Стоит указывать значения меньше параметра max_walk_weight (см.выше).
jump_speed = 60 ; Высота прыжка. Не указывайте астрономические значения. Гл. герой всё равно не улетит в космос ))
crouch_coef = 1 ; Скорость ползагия «очень сидя» (Ctrl + Shift по умолчанию)
climb_coef = 2 ; Вроде присев (Ctrl)
run_coef = 3 ; Обычный бег с параметром консоли «g_always_run» равным 1
sprint_koef = 4 ; спринт
run_back_coef = 3 ; бег назад
walk_back_coef = 2 ; ходьба назад с клавишей Shift
air_control_param = 1 ; контроль полёта. Выгоден при высоких значениях jump_speed, т.к. можно быстро перемещаться по карте
walk_accel = 17 ; неизвестный параметр
pickup_info_radius = 5 ;радиус, в котором над предметами выводятся их названия при нажатии клавиши «F».
Далее параметры 3d и т.п. смотрим поэтому дальше.
camera_height_factor = 0.85 ; определяет высоту взгляда. Увеличиваем и игрок станет зрительно выше
disp_base = 0 ;угол (в градусах) разлета пуль, когда актер стоит на месте
disp_aim = 0
disp_vel_factor = 0 ;на сколько увеличится дисперсия при скорости в 10 м/с (не обязательно при беге)
disp_accel_factor = 0 ;еще на сколько увеличится, если актер бежит (+ скорость)
disp_crouch_factor = 0 ;уменьшение если актер сидит
disp_crouch_no_acc_factor = 0 ;уменьшение если актер сидит + no acceleration
Чтобы уменьшить размер прицела можно сделать так.
Дальше увидим секцию [actor_immunities_gd_***] (вместо *** нужный ранг)
Чтобы увеличить живучесть — меняем значение ниже.
burn_immunity = 0.0
strike_immunity = 0.0
shock_immunity = 0.0
wound_immunity = 0.0
radiation_immunity = 0.0
telepatic_immunity = 0.0
chemical_burn_immunity = 0.0
explosion_immunity = 0.0
fire_wound_immunity = 0.0
Дальше видим [actor_condition]
И настройка в лучшую сторону будет таковой:
satiety_v = 0 ;скорость уменьшения сытости со временем
radiation_v = 1 ;скорость уменьшения радиации
satiety_power_v = 1 ;увеличение силы при уменьшении сытости
satiety_health_v = 1 ;увеличение здоровья при уменьшении сытости
satiety_critical = 0 ;критическое значения сытости (в процентах от 0..1) когда здоровье начинает уменьшаться
radiation_health_v = 0 ;уменьшение здоровья при воздействии радиации
morale_v = 1 ;скорость восстановления морали
psy_health_v = 1 ;скорость восстановления psy-здоровья
alcohol_v = -1
health_hit_part = 0 ;процент хита, уходящий на отнимание здоровья
power_hit_part = 0 ;процент хита, уходящий на отнимание силы
max_power_leak_speed = 0 ;накопление усталости (макс граница, до которой восстанавливается сила) в секунду игрового времени
max_walk_weight = 1000 ; Вес, при котором игрок не может двигаться. Указать можно любое значение.
bleeding_v = 0 ;потеря крови при номинальной ране в секунду
wound_incarnation_v = 1 ;скорость заживления раны
min_wound_size = 0 ;минимальный размер раны, после которого она считается зажившей
min_wound_size,satiety_v,satiety_power,satiety_health,satiety_critical,alcohol_v можно было и не настраивать, если вам нужно бессмертие
Будем настраивать выносливость.
Назодим строку «jump_power»
Меняем так, чтобы игрок никогда не уставал, разве что если нацепит на себя 5 огненных шаров ))
jump_power = 0 ;умешьшение силы с прыжком без учета веса ноши
jump_weight_power = 0 ;умешьшение силы с прыжком с учетом веса ноши, для максимального допустимого веса
overweight_jump_k = 1 ;коэффициент влияние перегрузки прыжок с весом (умножается на jump_weight_power)
stand_power = 0
walk_power = 0 ;умешьшение силы за секнду во время ходьбы без учета веса ноши
walk_weight_power = 0 ;умешьшение силы за секнду во время ходьбы с учетом веса ноши, для максимального допустимого веса
overweight_walk_k = 1 ;коэффициент влияние перегрузки ноши (умножается на walk_weight_power)
accel_k = 1;коэффициент на бег (умножается walk_power, walk_weight_power)
sprint_k = 1 ;коэффициент на «sprint» бег (умножается walk_power, walk_weight_power)
Значения с комментом «коофициент» и значениями более 1 (необязательно) рекомендую менять на 1.
limping_health_begin = 0 ;порог здоровья меньше которого актер начинает хромать
limping_health_end = 0;порог здоровья больше которого актер перестает хромать
limping_power_begin = 0 ;порог силы меньше которого актер начинает хромать
limping_power_end = 0 ;порог силы больше которого актер перестает хромать
cant_walk_power_begin = 0 ;порог силы меньше которого актер не может двигаться
cant_walk_power_end = 0 ;порог силы больше которого актер сможет двигаться
cant_sprint_power_begin = 0 ;порог силы меньше которого актер не может бежать в спринте
cant_sprint_power_end = 0 ;порог силы больше которого актер сможет бежать в спринте
Дальше идут кости, работающие в 3d, и их тоже можно менять, чтобы уменьшить уязвимость, но пока их настройка не столь нужна. Я лишь скажу, что нужно настраивать 1 (первый) параметр. Чем меньше, тем лучше.
Как изменить характеристики аптечки в сталкер
Структуру папок и местонахождение основных файлов игры Сталкер смотрим здесь Структура файлов и папок
Короче, нашел у себя в загашнике решение (вроде как от самого Архары) и испытал, создав ситуацию с неотключившимся выбросом (не уходил с локации пока таймер не обнулился), вот описание (подправил немного):
затем, вызов функции в таком виде: <action>arhara_dialog.dell_duratskiy_timer</action>
вставить в любой ближайший диалог.
под строку: function actor_binder:update(delta)
добавить вызов: arhara_dialog.dell_duratskiy_timer()
Сохранить изменения, грузить сейв перед заходом на ЧАЭС-1 и потом переходить, или загружаться с автосейва перехода, тоже сработает.
После, как перешли на ЧАЭС-1 и выброс отключился — сохраняемся, выходим из игры и удаляем строку arhara_dialog.dell_duratskiy_timer() из файла bind_stalker.script
Ключи для быстрого запуска игры , также немного разгружает память .
На рабочем столе , правой кнопкой мышки кликаем на ярлык.S.T.A..L.K.E.R
Далее , выбираем Свойства
Далее , в Объект , после кавычек , делаем пробел и прописываем
. XR_3DA.exe» -nointro -noprefetch -noshadows
Подходит к любому Сталкеру , Н.И. не нужна , удачи .
Небольшая статья n6260 о переключателях командной строки .
Ряд дополнительных команд, которые можно запускать при старте STALKER’а называются Переключателями Командной Строки. Эти ‘переключатели’ — это команды посланные главному исполняемому файлу XR_3DA.exe, говорящие движку выполнить определённые действия при запуске игры. Для использования переключателей командной строки, кликните правой кнопкой мыши на ярлыке STALKER’a и выберите ‘Свойства’. Далее в поле ‘Объект’, через пробел от последнего символа, вставьте переключатель(и) которые вы хотите использовать. Например:
Переключатели -nointro, -noprefetch и -noshadows добавлены для отключения вводных заставок с логотипами, предварительной загрузки информации (ускоряет запуск и загрузку сохранений) и отключения всех не солнечных теней в игре. По другому не возможно использовать предигровые настройки. Можно вернуть настройки в любой момент просто удалив переключатель с ненужной настройкой из ярлыка или создав другой с требуемыми переключателями и использовать его когда ты захочешь запустить игру с другими настройками. дополнение от —HikeR 14:17, 31 мая 2007 (MSD)][
Для различных ситуаций можно создать несколько копий ярлыков для запуска игры с различными параметрами. Например можно использовать ключ -nointro для всех вариантов, комбинацию -noprefetch -noshadows -nosound -r4xx для всяких экспериментов (отключен звук, префетч, тени, форсированно используется DX8, максимально быстрая загрузка), и просто ярлык для обычной игры
Полный список Переключателей Командной Строки для STALKER’а приведённый ниже сопровождается также кратким пояснение для каждого, где это было возможно. Я протестировал каждый и все переключатели, но некоторые переключатели не имеют видимого эффекта или просто подвешивают игру во время загрузки. Инструкции по предполагаемому использованию наиболее полезных переключателей приведены на протяжении этого гида:
Читайте также:
- Сколько хп у турели в rust
- За что могут уволить со службы в овд
- Terraria как увеличить ману
- Где заняться с девушкой сексом если дома родители
- Чего добиваются ассасины ассасин крид
Данная мини-статья расскажет вам о том как внести в игру более правильные в плане воздействия медикаменты.
Я полагаю многие играя в компьютерные игры задумались что аптечка(к примеру) на самом деле не должна лечить мгновенно(ну или почти мгновенно, как это сделано в STALKER). Это то мы и исправим, ну и заодно рассмотрим полный список эффектов.
Итак поехали:
Возьмем кусок описания обычной аптечки:
[medkit]:booster $spawn = "food and drugsmedkit" visual = dynamicsdevicesdev_aptechkadev_aptechka_low.ogf inv_name = st_medkit inv_name_short = st_medkit description = st_medkit_descr inv_weight = 0.1 inv_grid_width = 1 inv_grid_height = 1 inv_grid_x = 6 inv_grid_y = 14 cost = 250 boost_time = 10.0 boost_health_restore = 0.01 boost_radiation_restore = 0.0 boost_bleeding_restore = 0.005 use_sound = interfaceinv_medkit
В самом верху мы видим:
[medkit]:booster = системное имя:системное имя предмета из которого будут браться недостающие строки конфига
Рассмотрим секцию «booster» она по сути содержит пустые конфиги. Прокоментирую основное(параметры которые могут пригодиться).
[booster]:identity_immunities GroupControlSection = spawn_group discovery_dependency = ;$spawn = "food and drugsbooster" $prefetch = 8 class = S_FOOD cform = skeleton visual = dynamicsdevicesdev_aptechkadev_aptechka_low.ogf ; Ссылка на визуал в "stalkergamedatameshes" description = default ; Ссылка на описание предмета "gamedataconfigstextrus" inv_name = default ; Ссылка на имя предмета'''(Аптечка автомобильная)''' "gamedataconfigstextrus" inv_name_short = default ; Ссылка на короткое имя предмета'''(Апт.Авт.)''' "gamedataconfigstextrus" inv_weight = 0.01 ; Вес предмета inv_grid_width = 1 inv_grid_height = 1 inv_grid_x = 3 inv_grid_y = 18 cost = 1 ; Стандартная стоимость(конечная зависит от отношения торговца) ; eatable item eat_health = 0 ; Мгновенно даёт определенное количествово здоровья '''1 = 100%''' eat_satiety = 0 ; Мгновенное насыщение '''1 = 100%''' eat_power = 0 ; Мгновенное восстановление силы '''1 = 100%''' eat_max_power = 0 ; Мгновенное увеличение максимальной силы '''1 = 100%'''(Вроде как...) eat_radiation = 0 ; Мгновенное увеличение или уменьшение облученности '''(1 увеличение)(-1 уменьшение)''' eat_alcohol = 0 ; Мгновенное увеличение или уменьшение уровня опьянения '''(1 увеличение)(-1 уменьшение)''' wounds_heal_perc = 0 ; я так понял что это скорость затягивания ран, но не уверен... eat_portions_num = 1 ; Интересный параметр... Количество порций в упаковке (проверена работоспособность от 1 до 99999) boost_time = 0.0 ; Время действия(распостраняется только на параметры '''boost_*''' boost_max_weight = 0.0 ; Увеличение переносимого веса. Уменьшение не работает, как видимо на всех '''boost_*''' =( boost_health_restore = 0.0 ; Увеличение скорости восстановления здаровья boost_power_restore = 0.0 ; Увеличение скорости восстановления силы boost_radiation_restore = 0.0 ; Увеличение скорости вывода радиации boost_bleeding_restore = 0.0 ; Увеличение скорости заживления ран ;'''protection''' Снижают количество получаемого ХИТА boost_radiation_protection = 0.0 ; Увеличение защиты от радиации boost_telepat_protection = 0.0 ; Увеличение защиты от телепатического воздействия(от контролеров не спасает) boost_chemburn_protection = 0.0 ; Увеличение защиты от химических повреждений ;'''immunity''' Увеличивают минимальный уровень воздействия для получения ХИТА boost_burn_immunity = 0.0 ; Увеличение имунитета к огню boost_shock_immunity = 0.0 ; Увеличение имунитета к электрическому току boost_radiation_immunity = 0.0 ; Увеличение имунитета к радиации boost_telepat_immunity = 0.0 ; Увеличение имунитета к пси воздействию boost_chemburn_immunity = 0.0 ; Увеличение имунитета к химическим воздействиям boost_strike_immunity = 0.0 ; Увеличение имунитета к выстрелам boost_wound_immunity = 0.0 ; Увеличение имунитета к ударам boost_explosion_immunity = 0.0 ; Увеличение имунитета к взрывам boost_fire_wound_immunity = 0.0 ; Увеличение имунитета к взрывной волне ;use_sound = characters_voicemultiplayerteam_1voice_roger_3 ; Звук "gamedatasounds"
Теория пройдена!!!
Практика
[medkit]:booster '''; НЕ ТРОГАЕМ!!!''' $spawn = "food and drugsmedkit" '''; НЕ ТРОГАЕМ!!!''' visual = dynamicsdevicesdev_aptechkadev_aptechka_low.ogf '''; НЕ ТРОГАЕМ!!!''' inv_name = st_medkit '''; НЕ ТРОГАЕМ!!!''' inv_name_short = st_medkit '''; НЕ ТРОГАЕМ!!!''' description = st_medkit_descr '''; НЕ ТРОГАЕМ!!!''' inv_weight = 0.1 '''; По желанию''' inv_grid_width = 1 '''; НЕ ТРОГАЕМ!!!''' inv_grid_height = 1 '''; НЕ ТРОГАЕМ!!!''' inv_grid_x = 6 '''; НЕ ТРОГАЕМ!!!''' inv_grid_y = 14 '''; НЕ ТРОГАЕМ!!!''' cost = 250 '''; По желанию''' boost_time = 60.0 '''; Меняем с 10.0 на 60.0''' boost_health_restore = 0.002 '''; Меняем с 0.01 на 0.002''' boost_radiation_restore = 0.0 '''; По желанию''' boost_bleeding_restore = 0.0 '''; По желанию''' use_sound = interfaceinv_medkit '''; НЕ ТРОГАЕМ!!!'''
Итак, мы получили аптечку которая лечит медленно но на протяжение 60 секунд(По сравнению с оригиналом это хоть как то похоже на правду)
Таким же образом можно отредактировать и остальные препараты. Антирад например.
[antirad]:booster $spawn = "food and drugsantirad" visual = dynamicsdevicesdev_antiraddev_antirad.ogf inv_name = st_antirad inv_name_short = st_antirad description = st_antirad_descr inv_weight = 0.01 inv_grid_width = 1 inv_grid_height = 1 inv_grid_x = 18 inv_grid_y = 12 cost = 750 boost_time = 60.0 boost_radiation_restore = 0.01 eat_alcohol = 0.3 use_sound = interfaceinv_pills
Я полагаю что опьянение здесь в тему так как вещества такого типа считаются наркотическими.
А зная о ранее неиспользуемых эфектах можно создавать новые, тот же к примеру «Анти-похмелин». В пачке которого будет 10 таблеток:
[drug_analgin]:booster $spawn = "food and drugsdrug_analgin" visual = dynamicsequipmentsmedicaldrug_coagulant.ogf inv_name = st_drug_analgin inv_name_short = st_drug_analgin description = st_drug_analgin_descr inv_weight = 0.01 inv_grid_width = 1 inv_grid_height = 1 inv_grid_x = 19 inv_grid_y = 4 cost = 350 boost_time = 5.0 eat_alcohol = -0.1 eat_portions_num = 10 use_sound = interfaceinv_pills
Каждая таблетка при такой конфигурации будет снимать 10% опьянения.
Автор: WincentDark69
function init (obj)
xr_motivator.AddToMotivator(obj)
end
function actor_init (npc)
npc:bind_object(actor_binder(npc))
end
delayed_alife_release_objects = {}
to_delayed_alife_release_objects = {}
local game_difficulty_by_num = {
[0] = «gd_novice»,
[1] = «gd_stalker»,
[2] = «gd_veteran»,
[3] = «gd_master»
}
lasthealth = 0
lasttime = 0
post_process = 0
local weapon_hide = {}
———————————————————————————————————————-
class «actor_binder» (object_binder)
———————————————————————————————————————-
function actor_binder:__init (obj) super(obj)
self.bCheckStart = false
self.weather_manager = level_weathers.get_weather_manager()
—self.actor_detector = xr_detector.actor_detector()
self.last_level_name = nil
end
———————————————————————————————————————-
function actor_binder:net_spawn(data)
printf(«actor net spawn»)
level.show_indicators()
self.bCheckStart = true
self.weapon_hide = false — спрятано или нет оружие при разговоре.
self.weapon_hide_in_dialog = false
weapon_hide = {} — устанавливаем глобальный дефолтовый флаг.
if object_binder.net_spawn(self,data) == false then
return false
end
db.add_actor(self.object)
if self.st.disable_input_time == nil then
level.enable_input()
end
xr_s.on_game_load() —‘ Distemper 03.2008 —
self.weather_manager:reset()
— game_stats.initialize ()
— if(actor_stats.add_to_ranking~=nil)then
— actor_stats.add_to_ranking(self.object:id())
— end
—‘ Загружаем настройки дропа
death_manager.init_drop_settings()
—‘Устанавливаем ссылку на таскменеджер
self.task_manager = task_manager.get_task_manager()
— Анремте это, чтобы пропустить интро на марше.
—self.object:give_info_portion(«mar_lvl_sim»)
if level.name() ~= «marsh» then
sim_board.get_sim_board():start_sim()
end
—spawn_items.main()
self.spawn_frame = device().frame
self.already_jumped = false
benchmark.main() —‘ Distemper 06.2008 —
return true
end
———————————————————————————————————————-
function actor_binder:net_destroy()
xr_sound.stop_sounds_by_id(self.object:id())
local board_factions = sim_board.get_sim_board().players
for k,v in pairs (board_factions) do
xr_sound.stop_sounds_by_id(v.id)
end
if(actor_stats.remove_from_ranking~=nil)then
actor_stats.remove_from_ranking(self.object:id())
end
xr_effects.stc_stop_particle_sounds()
level.show_indicators()
level.show_weapon(true)
— get_console():execute(«hud_crosshair 1»)
— get_console():execute(«hud_weapon 1»)
— get_console():execute(«r2_dof -0.250000,1.400000,200.000000»)
— game_stats.shutdown ()
db.del_actor(self.object)
self.object:set_callback(callback.inventory_info, nil)
self.object:set_callback(callback.article_info, nil)
self.object:set_callback(callback.on_item_take, nil)
self.object:set_callback(callback.on_item_drop, nil)
—self.object:set_callback(callback.actor_sleep, nil)
self.object:set_callback(callback.task_state, nil)
self.object:set_callback(callback.level_border_enter, nil)
self.object:set_callback(callback.level_border_exit, nil)
self.object:set_callback(callback.take_item_from_box, nil)
self.object:set_callback(callback.use_object, nil)
if sr_psy_antenna.psy_antenna then
sr_psy_antenna.psy_antenna:destroy()
sr_psy_antenna.psy_antenna = false
end
xrs_dyn_music.stop_sound()
object_binder.net_destroy(self)
— xr_sound.stop_all_sounds()
xr_s.on_actor_destroy() —‘ Distemper 03.2008 —
end
———————————————————————————————————————-
function actor_binder:reinit()
object_binder.reinit(self)
local npc_id = self.object:id()
db.storage[npc_id] = { }
self.st = db.storage[npc_id]
self.st.pstor = nil
self.next_restrictors_update_time = -10000
self.object:set_callback(callback.inventory_info, self.info_callback, self)
self.object:set_callback(callback.article_info, self.article_callback, self)
self.object:set_callback(callback.on_item_take, self.on_item_take, self)
self.object:set_callback(callback.on_item_drop, self.on_item_drop, self)
self.object:set_callback(callback.trade_sell_buy_item, self.on_trade, self) — for game stats
—self.object:set_callback(callback.actor_sleep, self.sleep_callback, self)
self.object:set_callback(callback.task_state, self.task_callback, self)
—self.object:set_callback(callback.map_location_added, self.map_location_added_callback, self)
self.object:set_callback(callback.level_border_enter, self.level_border_enter, self)
self.object:set_callback(callback.level_border_exit, self.level_border_exit, self)
self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self)
self.object:set_callback(callback.use_object, self.use_inventory_item, self)
end
———————————————————————————————————————-
function actor_binder:take_item_from_box(box, item)
local box_name = box:name()
treasure_manager.take_item_from_box(box, box_name, item)
—local smart_name = string.sub(box_name, 1, string.len(box_name)-4)
—if(sim_board.get_sim_board().smarts_by_names[smart_name]~=nil) then
— game_relations.set_gulag_relation_actor(smart_name, «enemy»)
—end
end
———————————————————————————————————————-
function actor_binder:level_border_enter(npc, info_id)
—self.actor_detector:actor_enter()
end
———————————————————————————————————————-
function actor_binder:level_border_exit(npc, info_id)
—self.actor_detector:actor_exit()
end
———————————————————————————————————————-
function actor_binder:info_callback(npc, info_id)
printf(«*INFO*: npc=’%s’ id=’%s'», npc:name(), info_id)
—‘ Сюжет
level_tasks.proceed(self.object)
— Отметки на карте
level_tasks.process_info_portion(info_id)
end
———————————————————————————————————————-
function actor_binder:on_trade (item, sell_bye, money)
if sell_bye == true then
game_stats.money_trade_update (money)
xr_statistic.inc_recieved_money_counter(money)
else
game_stats.money_trade_update (-money)
xr_statistic.inc_spent_money_counter(money)
end
end
———————————————————————————————————————-
function actor_binder:article_callback(npc, group, name)
—printf(«article_callback [%s][%s]», group, name)
if device().precache_frame >1 then return end
if group == «Diary» then
news_manager.send_encyclopedy(«diary», group)
else
news_manager.send_encyclopedy(«encyclopedy», group)
end
end
———————————————————————————————————————-
function actor_binder:on_item_take (obj)
level_tasks.proceed(self.object)
printf(«on_item_take [%s]», obj:name())
if isArtefact(obj) then
bind_anomaly_zone.artefact_ways_by_id[obj:id()] = nil
local artefact = obj:get_artefact()
artefact:FollowByPath(«NULL»,0,vector():set(500,500,500))
if bind_anomaly_zone.parent_zones_by_artefact_id[obj:id()] ~= nil then
bind_anomaly_zone.parent_zones_by_artefact_id[obj:id()]:on_artefact_take()
end
end
for k,v in pairs(task_manager:get_task_manager().task_info) do
if(v.type==»bring_item» and v.state~=»finished») then
v:on_item_take(obj)
end
end
—game_stats.update_take_item (obj, self.object)
end
———————————————————————————————————————-
function actor_binder:on_item_drop (obj)
level_tasks.proceed(self.object)
for k,v in pairs(task_manager:get_task_manager().task_info) do
if(v.type==»bring_item» and v.state~=»finished») then
v:on_item_drop(obj)
end
end
—game_stats.update_drop_item (obj, self.object)
end
———————————————————————————————————————-
function actor_binder:task_callback(_task, _state)
if _state ~= task.fail then
if _state == task.completed then
news_manager.send_task(db.actor, «complete», _task)
else
news_manager.send_task(db.actor, «new», _task)
end
end
task_manager.task_callback(_task, _state)
end
———————————————————————————————————————-
function actor_binder:map_location_added_callback(spot_type_str, object_id)
if (false==app_ready()) or (device().precache_frame>1) then return end
—‘news_manager.send_task(db.actor, «new»)
end
———————————————————————————————————————-
local item_ = {[«medkit»] = true, [«medkit_army»] = true, [«medkit_scientic»] = true,}
function actor_binder:use_inventory_item(obj)
if item_[obj:section()] then
medicine.Rehabilitation(obj)
end
end
function actor_binder:update(delta)
object_binder.update(self, delta)
if self.already_jumped==false and jump_level.need_jump==true and (device().frame > self.spawn_frame+2000) then
jump_level.try_to_jump()
self.already_jumped = true
return
end
— DEBUG slowdown
— slowdown.update()
xr_s.on_actor_update(delta)
local time = time_global()
game_stats.update (delta, self.object)
— апдейт погоды
self.weather_manager:update()
— апдейт схемы детектора
—self.actor_detector:update()
—‘ Апдейт саундменеджера
xr_sound.update(self.object:id())
—‘ Проверка потери жизни
—[[
if self.object.health — lasthealth > 0.001 or
self.object.health — lasthealth < -0.001 then
printf(«%f | %f», self.object.health, self.object.health — lasthealth, game.time() — lasttime)
lasthealth = self.object.health
lasttime = game.time()
end
]]
— Обновление отключения ввода с клавиатуры.
if self.st.disable_input_time ~= nil and
game.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idle
then
level.enable_input()
self.st.disable_input_time = nil
end
— Обновление сна с переносом чувака в указанную позицию
if self.st.sleep_relocate_time ~= nil and
game.get_game_time():diffSec(self.st.sleep_relocate_time) >= self.st.sleep_relocate_idle
then
self.object:set_actor_position(self.st.sleep_relocate_point)
local dir = self.st.sleep_relocate_point:sub(self.st.sleep_relocate_look)
self.object:set_actor_direction(dir:getH())
self.st.sleep_relocate_time = nil
end
— Апдейт прятание оружия игрока во время диалога
if self.object:is_talking() then
if self.weapon_hide_in_dialog == false then
—printf(«PL:HIDE_D1 —> self.weapon_hide = [%s] weapon_hide = [%s]», tostring(self.weapon_hide), tostring(weapon_hide))
self.object:hide_weapon()
self.weapon_hide_in_dialog = true
—printf(«PL:HIDE_D2 —> self.weapon_hide = [%s] weapon_hide = [%s]», tostring(self.weapon_hide), tostring(weapon_hide))
end
else
if self.weapon_hide_in_dialog == true then
—printf(«PL:RESTORE_D1 —> self.weapon_hide = [%s] weapon_hide = [%s]», tostring(self.weapon_hide), tostring(weapon_hide))
self.object:restore_weapon()
self.weapon_hide_in_dialog = false
—printf(«PL:RESTORE_D2 —> self.weapon_hide = [%s] weapon_hide = [%s]», tostring(self.weapon_hide), tostring(weapon_hide))
end
end
— Апдейт прятание оружия игрока в зоне sr_no_weapon
if check_for_weapon_hide_by_zones() == true then
—printf(«weapon_hide1 = [%s]», tostring(weapon_hide))
if self.weapon_hide == false then
—printf(«PL:HIDE_W1 —> self.weapon_hide = [%s] weapon_hide = [%s]», tostring(self.weapon_hide), tostring(weapon_hide))
self.object:hide_weapon()
self.weapon_hide = true
—printf(«PL:HIDE_W2 —> self.weapon_hide = [%s] weapon_hide = [%s]», tostring(self.weapon_hide), tostring(weapon_hide))
end
else
—printf(«weapon_hide3 = [%s]», tostring(weapon_hide))
if self.weapon_hide == true then
—printf(«PL:RESTORE_W1 —> self.weapon_hide = [%s] weapon_hide = [%s]», tostring(self.weapon_hide), tostring(weapon_hide))
self.object:restore_weapon()
self.weapon_hide = false
—printf(«PL:RESTORE_W2 —> self.weapon_hide = [%s] weapon_hide = [%s]», tostring(self.weapon_hide), tostring(weapon_hide))
end
end
— обновление рестрикторов, которые под логикой, срабатывает через интервалы времени
if self.next_restrictors_update_time < time then
self.next_restrictors_update_time = time + 200
self.task_manager:update()
end
— обновление постпроцессов
if post_process ~= 0 then
if post_process:update () == true then
post_process = 0
end
end
— обновление пси-антенны
if sr_psy_antenna.psy_antenna then
sr_psy_antenna.psy_antenna:update(delta)
end
—[[local hud_demo = get_hud()
local custom_static_demo = hud_demo:GetCustomStatic(«cs_demo_play»)
if custom_static_demo == nil then
hud_demo:AddCustomStatic(«cs_demo_play», true)
if level.name() == «agroprom_underground» then
hud_demo:GetCustomStatic(«cs_demo_play»):wnd():SetTextST(«st_demo_agr»)
elseif level.name() == «military_nvidia» then
hud_demo:GetCustomStatic(«cs_demo_play»):wnd():SetTextST(«st_demo_mil»)
else
hud_demo:GetCustomStatic(«cs_demo_play»):wnd():SetTextST(«st_demo_play»)
end
end
if jump_level.need_jump==true then
hud_demo:GetCustomStatic(«cs_demo_play»):wnd():SetTextST(«L: » .. level.name() .. » frame [» ..
tostring(device().frame) ..
«] delta[» ..
tostring(device().frame — self.spawn_frame) ..
«]»)
end]]—
—‘ Вывод сообщения о большой радиации
if self.object.radiation >= 0.7 then
local hud = get_hud()
local custom_static = hud:GetCustomStatic(«cs_radiation_danger»)
if custom_static == nil then
hud:AddCustomStatic(«cs_radiation_danger», true)
hud:GetCustomStatic(«cs_radiation_danger»):wnd():SetTextST(«st_radiation_danger»)
end
else
local hud = get_hud()
local custom_static = hud:GetCustomStatic(«cs_radiation_danger»)
if custom_static ~= nil then
hud:RemoveCustomStatic(«cs_radiation_danger»)
end
end
if self.bCheckStart then
printf(«SET DEFAULT INFOS»)
if not has_alife_info(«global_dialogs») then
self.object:give_info_portion(«global_dialogs»)
end
if not has_alife_info(«level_changer_icons») then
self.object:give_info_portion(«level_changer_icons»)
end
level_tasks.add_lchanger_location()
self.bCheckStart = false
end
—‘ Distemper 03.2008 —
if xrs_dyn_music.play_combat == 0 then
xrs_dyn_music.interactive_music(0)
elseif xrs_dyn_music.play_combat == 1 then
xrs_dyn_music.interactive_music(20)
elseif xrs_dyn_music.play_combat == 2 then
xrs_dyn_music.interactive_music(10)
end
xr_s.on_actor_update(delta)
—‘ end —
if xr_surge_hide.start_surge then
if not xr_surge_hide.weather_surge then
xr_surge_hide.weather_surge = true
level.set_weather(«default_cloudy», true)
end
local diff_sec = math.ceil(game.get_game_time():diffSec(xr_surge_hide.initialization_time)/level.get_time_factor())
local time_before_lag_noosphere = 0
local time_before_give_task = 0
if level.name() == «marsh» then
time_before_lag_noosphere = 12
time_before_give_task = 15
else
time_before_lag_noosphere = 17
time_before_give_task = 27
end
if diff_sec>=time_before_lag_noosphere and xr_surge_hide.phase == 1 then
xr_surge_hide.activate_surge()
elseif diff_sec>=time_before_give_task and xr_surge_hide.phase == 2 then
xr_surge_hide.activate_surge(xr_surge_hide.time_before_surge)
end
end
local al = alife()
if al ~= nil then
local name = al:level_name(al:level_id())
if(self.last_level_name==nil) then
self.last_level_name = name
else
if(name~=self.last_level_name) then
self.last_level_name = name
local time = xr_surge_hide.surge_can_be_started(name)
if time then
xr_surge_hide.activate_surge(time)
end
end
end
end
if guiders.teleported_to_another_level and not guiders.level_changed then
guiders.action_teleport_to_point()
end
end
———————————————————————————————————————-
function actor_binder:save(packet)
set_save_marker(packet, «save», false, «actor_binder»)
object_binder.save(self, packet)
—‘ Сохраняем уровень сложности
packet:w_u8(level.get_game_difficulty())
—‘ Сохраняем данные об отключенном вводе
if self.st.disable_input_time == nil then
packet:w_bool(false)
else
packet:w_bool(true)
utils.w_CTime(packet, self.st.disable_input_time)
end
xr_logic.pstor_save_all(self.object, packet)
self.weather_manager:save(packet)
release_body_manager.get_release_body_manager():save(packet) —‘ Distemper 12.02.2008
xr_surge_hide.save(packet)
sr_psy_antenna.save( packet )
—self.actor_detector:save(packet)
packet:w_bool(sim_board.get_sim_board().simulation_started)
— Сохранение списка ожидания на команду атаки от игрока
local n = 0
for k,v in pairs(sim_combat.wait_for_combat) do
n = n + 1
end
packet:w_u8(n)
for k,v in pairs(sim_combat.wait_for_combat) do
packet:w_u16(k)
packet:w_stringZ(v)
end
xr_sound.actor_save(packet)
packet:w_stringZ(tostring(self.last_level_name))
xr_statistic.save(packet)
guiders.save(packet)
treasure_manager.save(packet)
n = 0
for k,v in pairs(delayed_alife_release_objects) do
n = n + 1
end
packet:w_u8(n)
for k,v in pairs (delayed_alife_release_objects) do
printf(«TO_RELEASING OBJ:[%s]», tostring(k))
packet:w_u16(k)
end
n = 0
for k,v in pairs(db.script_ids) do
n = n + 1
end
packet:w_u8(n)
for k,v in pairs (db.script_ids) do
packet:w_u16(k)
packet:w_stringZ(v)
end
— minigames_manager.get_minigames_manager():save(packet)
set_save_marker(packet, «save», true, «actor_binder»)
end
———————————————————————————————————————-
function actor_binder:load(reader)
set_save_marker(reader, «load», false, «actor_binder»)
object_binder.load(self, reader)
—‘ Загружаем уровень сложности
local game_difficulty = reader:r_u8()
printf(«load game_difficulty %s», tostring(game_difficulty))
get_console():execute(«g_game_difficulty «..game_difficulty_by_num[game_difficulty])
local stored_input_time = reader:r_u8()
if stored_input_time == true then
self.st.disable_input_time = utils.r_CTime(reader)
end
xr_logic.pstor_load_all(self.object, reader)
self.weather_manager:load(reader)
release_body_manager.get_release_body_manager():load(reader) —‘ Distemper 12.02.2008
xr_surge_hide.load(reader)
sr_psy_antenna.load(reader)
—self.actor_detector:load(reader)
sim_board.get_sim_board().simulation_started = reader:r_bool()
— Загрузка списка ожидания на команду атаки от игрока
local n = reader:r_u8()
sim_combat.wait_for_combat = {}
for i = 1,n do
sim_combat.wait_for_combat[reader:r_u16()] = reader:r_stringZ()
end
xr_sound.actor_load(reader)
local n = reader:r_stringZ()
if(n~=»nil») then
self.last_level_name = n
end
xr_statistic.load(reader)
guiders.load(reader)
treasure_manager.load(reader)
n = reader:r_u8()
for i = 1,n do
to_delayed_alife_release_objects[reader:r_u16()] = true
end
printf(«delayed_alife_release_objects»)
print_table(delayed_alife_release_objects)
n = reader:r_u8()
for i = 1,n do
db.script_ids[reader:r_u16()] = reader:r_stringZ()
end
— minigames_manager.get_minigames_manager():load(reader)
set_save_marker(reader, «load», true, «actor_binder»)
end
———————————————————————————————————————-
—старт префетча звуков
—if string.find(command_line(), «-noprefetch») == nil then
— sound_prefetch.prefetch_sounds()
—end
function check_for_weapon_hide_by_zones()
for k,v in pairs(weapon_hide) do
if v == true then
return true
end
end
return false
end
— Weapon functions
function hide_weapon(zone_id)
weapon_hide[zone_id] = true
end
function restore_weapon(zone_id)
weapon_hide[zone_id] = false
end
function add_to_delayed_release(obj_id)
printf(«TO_RELEASING_add OBJ:[%s]», tostring(obj_id))
delayed_alife_release_objects[obj_id] = true
end
function del_to_delayed_release(obj_id)
printf(«TO_RELEASING_del OBJ:[%s]», tostring(obj_id))
delayed_alife_release_objects[obj_id] = nil
end
@ColR_iT, Укажи что я не правильно написал, я просто только учусь работать со скриптами)
Ребаланс медикаментов
(3.1 Kb)
Опубликовал(а): 2024end
Правила написания и публикации комментариев. За несоблюдение правил — блокировка! Запрещено:
Сообщения, нарушающие данные правила, будут удалены, а злостные нарушители — лишены возможности добавлять комментарии на сайте! Ссылки на внешние сайты разрешены, но только те что относятся к нашей тематике или материалу. |
|