Версия игры: предположительно любая; ориентирован на ТЧ. Автор: ColR_iT
Мод реализует реакцию ГГ на использование съедобного предмета. Всего в игре десять таких предметов: три аптечки, бинт, антирад, энергетик, водка, консерва, колбаса и батон.
Медленное восстановление Для каждого из предметов можно определить до четырёх параметров (здоровье, пси-здоровье, радиация и выносливость), которые могут восстанавливать/"поломать" соответствующее свойство ГГ. Обновляются эти параметры независимо друг от друга, прекращение обновления каждого - также не зависит от других.
Критический хит В случае, когда мы использовали аптечку и во время восстановления здоровья получили значительный хит, то восстановление оного прекращается. Это относится исключительно к хиту полученному по здоровью.
Запрет на повторное использование Использовать медицинские препараты (аптечки, бинт, антирад) повторно нельзя, на протяжении некоторого времени. Еду и энергетик при этом использовать ничего не запрещает. Получение критического хита, позволяет воспользоваться аптечкой досрочно.
Убирание оружия После использования предмета, некоторое время будет невозможно воспользоваться оружием. Критический хит, восстанавливает оружие преждевременно.
Звуки при использовании Во время использования предмета проигрывается соответствующий звук.
В файле use_item.script имеются общие настройки, а также настройки для каждого предмета, позволяющие отрегулировать мод под собственное видение игры. Все настройки весьма гибкие и описаны комментариями, поэтому разобраться что к чему не составит труда.
Мод использует динамическое подключение и отключение функций от биндера атора, посредством функционала xr_s.script за авторством xStream. Таким образом весь процесс вычислений происходит исключительно после использования какого-либо предмета. Когда действие всех эффектов заканчивается, функции отключаются от биндера и никаких вычислений не происходит. Благодаря этому, использование ресурсов системы - минимально, а процесс адаптации с другими модами - прост.
Исходя из ограничений движков игры, без вмешательства в сам движок, скриптовая регенерация возможна лишь для пяти свойств ГГ: health (здоровье), psy_health (пси-здоровье), radiation (радиация), power (выносливость) и morale (мораль, но я не знаю для чего она). Остальные свойства: bleeding (кровотечение), satiety (сытость) и alcohol (алкоголь), к сожалению, скриптовому воздействию не поддаются (?) и поэтому изменять их нужно посредством соответствующих движковых параметров в конфигах предметов.
Принцип действия до безумия прост - Вы используете предмет, скрипт отлавливает это действие и в зависимости от настроек производит то или иное действие.
Как и прежде, я постарался свести процесс адаптации к минимуму. Для этого, Вам необходимо:
1. Если подключаете мод к ТЧ, вписать в файле bind_stalker.script в метод (функцию) update следующую строку:
Код
xr_s.on_actor_update(delta)
2. В этом же файле в колбек use_object дописать следующую строку:
Код
use_item.CheckSection(obj:section())
Если у Вас нет данного колбека, то его нужно добавить. Как это сделать написано ниже. 3. Адаптировать файл item.ltx с имеющимся у Вас. Процесс адаптации состоит в совмещении десяти секций предметов описанных выше. В частности нескольких параметров после комментария "eatable item" в каждой секции. Для параметров eat_health, eat_power и eat_radiation нужно обязательно(!) ставить значение равное нулю, в противном случае смысл мода сходит на нет. Можете вручную подправить параметры секций исходя из данных в табличке ниже. 4. В редких случаях, возможен конфликт папки со звуками. Если таковой возник, то для параметра soundsFolder, который находится в самом низу в скрипте, укажите путь до папки, в которой находятся звуки. К слову, звуки используются из мода Lost World Trops of Doom, единственно что - прогнал их через СДК, дабы избавится от возмущений в логе.
В файле bind_stalker.script в метод reinit класса actor_binder, в конец допишите следующую строку:
Теперь нужно добавить метод, который будет вызываться при использовании какого-либо предмета. Допишите данный код после одного из методов (не во внутрь функции!!!), например перед update:
Код
function actor_binder:use_inventory_item(obj) end
Собственно всё. P.S. Может случится так, что в Вашем моде метод вызываемый колбеком уже есть, чтобы узнать какой именно метод Вам нужен, обратите внимание на регистрацию колбека в методе reinit, а именно на второй аргумент функции set_callback, в нашем случае это use_inventory_item.
Аптечка: Здоровье: +25% на протяжении 5 секунд; Пси-здоровье: +3% на протяжении 5 секунд; Выносливость: -10% на протяжении 5 секунд; Сытость: -3%.
Армейская аптечка: Здоровье: +55% на протяжении 9 секунд; Пси-здоровье: +8% на протяжении 6 секунд; Радиация: -20% на протяжении 6 секунд; Выносливость: -15% на протяжении 6 секунд; Сытость: -5%.
Научная аптечка: Здоровье: +85% на протяжении 14 секунд; Пси-здоровье: +13% на протяжении 9 секунд; Радиация: -50% на протяжении 9 секунд; Выносливость: -20% на протяжении 9 секунд; Сытость: -15%.
Бинт: Кровотечение: -100%; Выносливость: -25% на протяжении 5 секунд.
Антирад: Радиация: -100% на протяжении 15 секунд; Выносливость: -30% на протяжении 10 секунд; Сытость: -15%.
Водка: Здоровье: +3% на протяжении 4 секунд; Пси-здоровье: +15% на протяжении 9 секунд; Выносливость: -20% на протяжении 9 секунд; Радиация: -10% на протяжении 6 секунд; Сытость: -30%; Алкоголь: +10%.
Энергетик: Выносливость: +100% на протяжении 15 секунд; Сытость: -25%.
Консерва: Выносливость: +20% на протяжении 12 секунд; Сытость: +40%; Алкоголь: -5%.
Колбаса: Выносливость: +15% на протяжении 10 секунд; Сытость: +30%; Алкоголь: -4%.
Батон: Выносливость: +10% на протяжении 8 секунд; Сытость: +20%; Алкоголь: -3%.
К сожалению, без них не обошлось... При сохранении игры во время процесса восстановления, загрузка этого сохранения не приведёт к продолжению процесса, простыми словами - сие не сохраняется. В момент, когда Вы повторно воспользуетесь предметом, а его повторное использование запрещено настройками, то скрипт не позволит восстанавливать ни один из параметров, кроме тех, что не поддаются правки скриптами. Т.е. например: Вы использовали армейскую аптечку. Первое её использование запустит процесс постепенного восстановления четырёх параметров: здоровья, пси-здоровья, радиации и выносливости, плюс мгновенно изменится параметр сытости. При повторном использовании заново процесс запускаться не будет и аптечка вернётся к Вам в инвентарь, но к сожалению, параметр сытости будет изменен, т.к. это движковое действие и отловить этот момент не представляется возможным. Та же картина и с антирадом.
Каких либо вылетов замечено не было, те что были - поправил. Если кто найдёт, будьте любезны, не поленитесь сообщить, можно в личку, но лучше сюда в тему - буду признателен.
2. В этом же файле в колбек use_object дописать следующую строку: Код use_item.CheckSection(obj:section())
Можно поподробнее? А то я вообще пенек с функциями. Вот так должно быть?
function actor_binder:net_destroy() if(actor_stats.remove_from_ranking~=nil)then actor_stats.remove_from_ranking(self.object:id()) end -- game_stats.shutdown () db.del_actor(self.object)
Добавлено (05.07.2013, 11:56) --------------------------------------------- Я про спойлер "установка" спрашиваю. Конкретно вот: 2. В этом же файле в колбек use_object дописать следующую строку: Код use_item.CheckSection(obj:section())
Добавлено (05.07.2013, 11:57) --------------------------------------------- Незнаю куда побуквочно написать.
Информация о том, куда нужно вписывать вызов функции. Читать и понимать информацию нужно в целом, а не там прочёл, а то не буду - не хочешь вот и мучайся.
ColR_iT, да я уже вписал коллбек, мне нужно теперь дописать в эту же строчку вот это: use_item.CheckSection(obj:section()), но не знаю как именно, либо так: self.object:set_callback(callback.use_object, nil) use_item.CheckSection(obj:section()) либо так self.object:set_callback(callback.use_object, nil) use_item.CheckSection(obj:section()) Либо еще как там написано просто допишите а как и конкретно в какое место строки думайте сами.
, то я тебя разочарую - это далеко не всё. К тому же это строка не сам колбек, а его отрегистрация, на что деликатно намекает значение nil, в качестве второго параметра. Конкретно метод, который будет передаваться в колбек, т.е. нужная тебе функция, прописывается в установке колбека, в функции reinit, вторым параметром.
ColR_iT, ну имел ввиду что провел операцию по созданию коллбека, что описана в твоей инструкции.
Добавлено (05.07.2013, 14:38) --------------------------------------------- Я понимаю, что для тебя это просто, но все равно я так и не понял как делать. Мне бы "на пальцах" все показать(
antonnkz76, колбек - это функция, которая вызывает какой-то метод класса при определённых условиях. Чтобы посмотреть, какой метод будет вызван при использовании предмета, нужно заглянуть в строку установки этого самого колбека и узреть там имя функции переданной вторым параметром. Вот именно во внутрь данной функции (метода класса) и нужно вписывать строку:
Код
use_item.CheckSection(obj:section())
Если ты и этого не понял - мне жаль, но ничем помочь более не могу.
Сообщение отредактировал ColR_iT - Пятница, 05.07.2013, 14:54
ColR_iT, Аааа, кажется понял. То есть вот у нас коллбек: self.object:set_callback(callback.use_object, self.use_inventory_item, self) Там вызывается функция use_inventory_item и в эту функцию я и вписал строку: function actor_binder:use_inventory_item(obj) use_item.CheckSection(obj:section()) end