S.T.A.L.K.E.R. 2: Новый трейлер <<<>>> S.T.A.L.K.E.R.: Global War <<<>>> Инструмент - теперь и для ТЧ!
-
Число публикаций
3 -
Регистрация
-
Последнее посещение
-
AMKoin
0 [Подарить AMKoin]
Сообщения опубликованы Моддер
-
-
- Это популярное сообщение.
- Это популярное сообщение.
Как лечить раненных НПС-врагов
Сложность: оч. легко
Совместимость с модами: легко совместимо
Многие люди в своих модификациях хотят добавить возможность лечить раненных врагов, как, например, в Солянке. Я тоже однажды заинтересовался этим вопросом и, не найдя на него ответа в интернете, занялся решением проблемы сам. В итоге мне это удалось и теперь выкладываю плоды своих стараний на просторы интернета .
Запрет диалога с раненными противниками находится в файле xr_wounded.script, и выглядит так (я снабдил его комментариями, если вы не сильно шарите в скриптах):if self.object:relation(db.actor) == game_object.enemy then --если отношение НПС к ГГ = отношению к врагум self.object:disable_talk() --блокировать диалоги else --иначе self.object:enable_talk() --разрешить диалог end --конец условия (if)
Дабы позволить ГГ говорить с врагами (только раненными) достаточно удалить лишнее и оставить всего одну строку:
self.object:enable_talk()
Но! Если ГГ попробует обратиться к раненным представителям бандитов, монолитовцев, наёмников, зомби (возможно), военных или противников на Арене - скорее всего произойдёт Фатал Еррор с логом на отсутствие подходящей фразы для диалога (в оригинальной игре с вероятностью 99%). Так вот, лично для себя я нашёл простое решение, которое подходило и по концепции моего мода - запретить диалог с данными группировками. Вот таким макаром:
local comm = self.object:character_community() --переменной обозначил "понятие" группировки обьекта (НПС) if comm == "zombied" or --если НПС - зомби, или comm == "bandit" or --НПС - бандит, или comm == "monolith" or --НПС - монолитовец, или comm == "arena_enemy" or --НПС - боец арены, или comm == "killer" or --НПС - наёмник, или comm == "military" then --НПС - вояка, тогда self.object:disable_talk() --запретить диалог else -- иначе self.object:enable_talk() --разрешить диалог end -- The End!
просто заменить изначальные строки этими и теперь ГГ сможет лечить врагов одиночек, долговцев, свободовцев и учёных.
Но есть ещё один момент. При лечении врагов, если всё сделать как было написано будет ещё одна проблемка - они так и останутся врагами после лечения и будут дальше атаковать ГГ.
Разумно было бы сделать НПС если не другом, то по крайней мере нейтралом. Для этого необходимо в файле dialogs.script кусок скриптаif second_speaker:relation(first_speaker) ~= game_object.enemy then second_speaker:set_relation(game_object.friend, first_speaker) end first_speaker:change_character_reputation(10); end
заменить на
if second_speaker:relation(first_speaker) == game_object.enemy then second_speaker:set_relation(game_object.friend, first_speaker) first_speaker:set_relation(game_object.friend, second_speaker) end first_speaker:change_character_reputation(10); end
Всё!
Да и уже готовый файл xr_wounded.script и dialogs.script со всеми описанными правками прилагается https://yadi.sk/d/-ZEwRBo7kPwCP.
Как сделать костюм с системой автолечения (изначально для ТЧ)
Сложность: легко
Совместимость с модами: придётся поработать
Подобную схему делал для своего мода, теперь выкладываю здесь ее аналог, мало мальски продуманный для оригинального ТЧ:
Принцип работы
Функция (скрипт), указанная в бинд_сталкер.скрипт (кто не знает что это - загуглите ) выполняется движком несколько раз в секунду. Задача функции - проверять одет ли на ГГ нужный костюм, сколько у ГГ здоровья и если здоровья мало - использовать медикаменты (если у ГГ они есть, разумеется). Вот и всё!
Порядок работы (для оригинального ТЧ)
Создаём новый костюм. Можно конечно и для существующего прописать всё, но лучше потратить на минутку больше и сделать качественнее.
В файл gamedata/config/misc/unique_items.ltx в конец добавляем новую секцию:[outfit_stalker_m3]:stalker_outfit ;Комбез с системой автоприёма медикаментов $spawn = "outfit\uniq\outfit_stalker_m3" inv_name = stalker_outfit_name_m3 inv_name_short = stalker_outfit_name_m3 description = stalker_outfit_description_m3 inv_grid_x = 16 inv_grid_y = 24
В файл gamedata/config/text/rus/string_table_outfit.xml в конец перед тэгом </string_table> дописываем:
<string id="stalker_outfit_name_m3"> <text>Прототип мед. комбинезона</text> </string> <string id="stalker_outfit_description_m3"> <text>Данный образец является прототипом защитного комбинезона сталкера. От оригинала он отличается наличием уникальной системы приёма медикаментов. Если здоровье хозяина опуститься ниже 20% будет автоматически использован мед. препарат.</text> </string>
Делаем схему рабочей
В файле bind_stalker.script под строкой function actor_binder:update(delta) пишем med_outfit.main() --лечащий костюм, примерно так (таким образом мы будем вызывать наш будущий скрипт несколько раз в секунду):function actor_binder:update(delta) med_outfit.main() --Лечащий костюм
Создаём файл med_outfit.script в соответствующей папке и в сам файл пишем:
function main() local medkit = db.actor:object("medkit") local medkit_army = db.actor:object("medkit_army") local medkit_scientic = db.actor:object("medkit_scientic") local outfit = db.actor:item_in_slot(6) --определяем предмет в слоте 6 (костюм) local snd = sound_object([[device/pda/pda_tip]]) --звук сообщения if outfit and outfit:section() == "outfit_stalker_m3" and db.actor.health < 0.20 and db.actor.health > 0.005 then if medkit then db.actor:eat(medkit) snd:play_no_feedback(db.actor,sound_object.s2d, 0, vector():set(0, 0, 0), 1) db.actor:give_game_news("\n%c[255,255,0,0]Была автоматически использована аптечка.", "ui\\ui_iconsTotal", Frect():set(0,0,83,47), 1, 2000) elseif medkit_army then db.actor:eat(medkit_army) snd:play_no_feedback(db.actor,sound_object.s2d, 0, vector():set(0, 0, 0), 1) db.actor:give_game_news("\n%c[255,255,0,0]Была автоматически использована армейская аптечка.", "ui\\ui_iconsTotal", Frect():set(0,0,83,47), 1, 2000) elseif medkit_scientic then db.actor:eat(medkit_scientic) snd:play_no_feedback(db.actor,sound_object.s2d, 0, vector():set(0, 0, 0), 1) db.actor:give_game_news("\n%c[255,255,0,0]Была автоматически использована научная аптечка.", "ui\\ui_iconsTotal", Frect():set(0,0,83,47), 1, 2000) end end end
Теперь если ХП у актёра меньше 20%, одет нужный костюм и есть аптечка - она автоматически используется.
Чтобы Волк выдал его в начале игры в файле escape_dialog.script в функции give_weapon_to_actor допишем:dialogs.relocate_item_section(trader, "outfit_stalker_m3", "in")
Готово, можно тестировать!
- 2
- 4
-
Кто знает, возможно в КПК на вкладке "Журнал" раздела "Личные заметки" прочтенные сообщения выделять белым цветом, так же, как это сделано в энциклопедии? И если да - что нужно сделать?
Думаю, графический интерфейс КПК можно изменить отредактировав скрипт, который его вызывает. Сделать раздел личных заметок по аналогии разделу энциклопедии. Главное найти сам скрипт. В ближайшее время может займусь этой темой (интерфейсом КПК) и подумаю как данный вопрос с заметками решить.
- 2
Уроки по модостроению
в Школа моддинга
Опубликовано
Всё там исправлено. Готовые файлы сделаны на основе ТЧ.