Lieutenant Novikov 15 Опубликовано 27 Августа 2022 Поделиться Опубликовано 27 Августа 2022 Здравствуйте. Хочу написать метод возвращения в ЧН губной гармошки. В интернете есть статьи для ТЧ, но в ЧН требуются дополнительные действия, которые пришлось поискать. Сначала открываем файл xr_kamp.script по адресу gamedata/scripts Скрытый текст Здесь в строчке self.trans_kamp = { idle = { idle = 0, pre_harmonica = 0, pre_guitar = 50, story = 50}, выставляем вероятность pre_harmonica выше нуля, я например сделал так: self.trans_kamp = { idle = { idle = 0, pre_harmonica = 20, pre_guitar = 30, story = 50} но в сумме должно получиться не больше 100. Параметр pre_harmonica — это вероятность с которой НПС начнет играть на гармошке, pre_guitar — соответственно вероятность игры на гитаре, и story — предположительно вероятность рассказа анекдотов. Далее ищем в файле этот отрывок и убираем черточки впереди: -- if npc:object("harmonica_a") then -- self.npc[npc_id].states["play_harmonica"] = true -- self.npc[npc_id].states["wait_harmonica"] = true -- self.kamp_states["pre_harmonica"] = true -- self.kamp_states["harmonica"] = true -- self.kamp_states["post_harmonica"] = true -- else self.npc[npc_id].states["play_harmonica"] = false self.npc[npc_id].states["wait_harmonica"] = false self.kamp_states["pre_harmonica"] = false self.kamp_states["harmonica"] = false self.kamp_states["post_harmonica"] = false -- end Дальше находим файл character_items.xml по адресу gamedata/configs/gameplay Где в список добавляем: harmonica_a = 1, prob=0.6 \n, это позволит гармошке появляться в инверторе НПС, где первая цифра кол-во предметов, а вторая (0.6) вероятность появления, можете написать свою, но она должна быть не больше 1 Далее файл script_sound_music_and_stories.ltx по адресу gamedata/configs/misc: Скрытый текст В нем пишем в самом начале под: intro_music play_guitar reac_musicplay_harmonica ;- добавляем это Далее под: [reac_music] type = npc avail_communities = csky, stalker, bandit, dolg, freedom, army, renegade, killer, ecolog npc_prefix = true path = reactions\music\reaction_music_ shuffle = rnd idle = 1,1,100 group_snd = true [play_harmonica] type = npc avail_communities = csky, stalker, bandit, dolg, freedom, army, renegade, killer, ecolog ;- здесь группировки которые будут играть на гармошке.npc_prefix = true path = music\harmonica_ ;- адрес звуковых файловshuffle = rnd idle = 1,1,100 Ну и последнее, в ЧН вместо звуковых файлов стоят "заглушка" — файл без звука, поэтому вам придется искать звуковые файлы на стороне. Я брал из Call of Chernobyl. Когда найдете их переименуйте в harmonica_номер по порядку, и скиньте в папку music, по адресу gamedata/sounds/characters_voice/human_номер(придется добавлять во все)/(группировка, к примеру bandit)/music. И ещё, необходимо будет начать новую игру, иначе вылет. 2 Ссылка на комментарий
Hind 29 Опубликовано 8 Октября 2022 Поделиться Опубликовано 8 Октября 2022 Некролог (оповещение о смерти сталкера) Сложность: легкоАвтор скрипта: Weanchester, взято из stalkerin.gameruДоработал: Hind Скрытый текст Создаём скрипт в папке gamedata/scripts и называем его как хотим (в данном случае dmb.script) Туда пишем: local level_name = { ["l01_escape"] = "Кордон", ["l02_garbage"] = "Свалка", ["l03_agroprom"] = "НИИ Агропром", ["l03u_agr_underground"] = "Подземелье НИИ Агропром", ["l04_darkvalley"] = "Тёмная долина", ["l04u_labx18"] = "Лаборатория X-18", ["l05_bar"] = "Бар", ["l06_rostok"] = "Дикая территория", ["l07_military"] = "Арм.склады", ["l08_yantar"] = "Янтарь", ["l08u_brainlab"] = "Лаборатория X-16", ["l10u_bunker"] = "Лаборатория X-10", ["l10_radar"] = "Радар", ["l11_pripyat"] = "Припять", ["l12_stancia"] = "ЧАЭС", ["l12_stancia_2"] = "ЧАЭС", ["l12u_sarcofag"] = "Саркофаг", ["l12u_control_monolith"] = "Управление Монолитом" } local community = { ["stalker"] = "Одиночка", ["monolith"] = "Монолит", ["military"] = "Военные", ["bandit"] = "Бандит", ["killer"] = "Наемник", ["ecolog"] = "Эколог", ["dolg"] = "Долг", ["freedom"] = "Свобода", ["zombied"] = "Зомбированный", ["trader"] = "Торговец" } function kill_npc(victim, who) if victim and IsStalker(victim) then local t = time_global() local dead_news = "%c[0,255,0,0]ПОГИБ СТАЛКЕР \\n%c[255,160,160,160]Группировка: %c[default]"..community[victim:character_community()].."\\n%c[255,160,160,160]Кличка: %c[default]"..victim:character_name().."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()].."" db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 3000, 4000) elseif t > time_global() + 3000 then dmb2.news_sound() end end Вот и всё! Теперь после смерти сталкеров, спустя 3 секунды у нас будет оповещение о смерти со звуком!З.Ы. Статья создана новичком, поэтому и оформлена по васяновски. Прошу меня простить если не понятно Рабочая гитара Сложность: среднеАвтор скрипта: Hind*некоторые функции брал из открытых источников. к сожалению авторов не помнюЛежала как то без дела гитара, поделюсь с народом. Скрытый текст В этом уроке рассмотрим создание рабочей гитары, которая будет играть ту музыку, которую мы захотим. Нам надо всего 3 файла: bind_stalker.script, ваш_скрипт1.script, ваш_скрипт2.script (в моём случае это dmb и dmb2 соответственно) Скрытый текст Итак, в bind_stalker.script пишем: В function actor_binder:net_destroy() пишем: self.object:set_callback(callback.use_object, nil) В function actor_binder:reinit() пишем: self.object:set_callback(callback.use_object, self.use_object, self) И где хотим добавляем следующую функцию: function actor_binder:use_object(obj) dmb.use_item(obj) dmb.use_snd(obj) end Далее идём в наш созданный скрипт (в данном случае у меня это dmb.script), и там пишем следующее: Скрытый текст local tSound ={ gitara = "interface\\inv_gitara", -- путь до нашего звука при юзании предмета. Вместо него ставим какой хотим, разумеется } function use_item(obj) local obj = obj:section() if obj then if obj == "gitara" then -- наш предмет (в данном случае я уже создал юзабельный предмет, и подогнал его как Гитару) dmb2.start_timer() -- включаем таймер end end end function use_snd(obj) if obj and tSound[obj:section()] then local snd = xr_sound.get_safe_sound_object(tSound[obj:section()]) if snd then snd:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 2.0) end end end и идём во второй наш скрипт, где пишем: Скрытый текст function action_timer() alife():create("gitara", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id()) end function start_timer() -- функция на которую мы ссылались при юзании в первом скрипте local iTimer = time_global() + 17000 -- наше время песни, т.е. 17 секунд. Спустя 17 секунд, гитара нам вернется в инвентарь. local function check_timer() return time_global() > iTimer end level.add_call(check_timer, action_timer) end Ну, и вроде всё! Не забудьте проверить правильность копирования, убрать стрелочки, с помощью которых я указывал на что-либо, и вуаля. Если где-то ошибся, или не работает, маякните 2 Hind Upgrade Mod Ссылка на комментарий
Balavnik 140 Опубликовано 28 Апреля 2024 Поделиться Опубликовано 28 Апреля 2024 Мой первый, но, надеюсь, полезный урок Скрытый текст Что нам понадобится: Paint.NET gamedata\textures\ui\ui_iconstotal.dds gamedata\scripts\news_manager.script Ваше изображение. Сжимаем: Для сжатия используем бесплатную утилиту. Сжимаем до 83x47 пикселей. После сжатия открываем ui_iconstotal.dds и вставляем в пустое поле ваше изображение. Наводим курсор на верхний левый пиксель нашего изображения и смотрим координаты внизу (иллюстрация) Затем, заходим в файл news_manager.script и ищем массив tips_icons, добавляем в конец запись в формате имя_иконки {x-координата, y-координата}. Пример. Готово! Теперь при отправке сообщения можно указать свою иконку! Пример (sender - имя иконки, например "barman"). 1 Осенний каламбур. Сентябрь - лето. Ссылка на комментарий
Painter 3 446 Опубликовано 20 Сентября 2024 Поделиться Опубликовано 20 Сентября 2024 Скрытый текст В оригинальном ЗП есть один малоизвестный баг, при котором металлические бочки (и ряд других предметов) разрывает на кровавые ошмётки, если бросить их в «Воронку» или «Карусель»: Для исправления ошибки нам понадобится файл: gamedata\configs\models\dynamic_objects.ltx Находим секции бочек: [bochka_close_1]:physic_destroyable_object $spawn = "dynamic_objects\balon\bochka_close_1" visual = dynamics\balon\bochka_close_1.ogf [bochka_close_2]:physic_destroyable_object $spawn = "dynamic_objects\balon\bochka_close_2" visual = dynamics\balon\bochka_close_2.ogf [bochka_close_3]:physic_destroyable_object $spawn = "dynamic_objects\balon\bochka_close_3" visual = dynamics\balon\bochka_close_3.ogf [bochka_close_4]:physic_destroyable_object $spawn = "dynamic_objects\balon\bochka_close_4" visual = dynamics\balon\bochka_close_4.ogf И заменяем «physic_destroyable_object» на «physic_object»: [bochka_close_1]:physic_object $spawn = "dynamic_objects\balon\bochka_close_1" visual = dynamics\balon\bochka_close_1.ogf [bochka_close_2]:physic_object $spawn = "dynamic_objects\balon\bochka_close_2" visual = dynamics\balon\bochka_close_2.ogf [bochka_close_3]:physic_object $spawn = "dynamic_objects\balon\bochka_close_3" visual = dynamics\balon\bochka_close_3.ogf [bochka_close_4]:physic_object $spawn = "dynamic_objects\balon\bochka_close_4" visual = dynamics\balon\bochka_close_4.ogf Теперь металлические бочки используют класс «O_PHYS_S» вместо «O_DSTR_S» и при попадании в указанные аномалии будут просто отлетать в стороны. На всякий случай, рекомендую пробежаться и по all.spawn. Если динамические предметы с визуалами бочек используют секцию «physic_destroyable_object», также замените её на «physic_object». 1 3 Портфолио Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти