Перейти к контенту

Уроки по модостроению


Рекомендуемые сообщения

Здравствуйте. Хочу написать метод возвращения в ЧН губной гармошки. В интернете есть статьи для ТЧ, но в ЧН требуются дополнительные действия, которые пришлось поискать.

Сначала открываем файл 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_music
play_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
Ссылка на комментарий

Некролог (оповещение о смерти сталкера)
Сложность: легко
Автор скрипта: 
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
*некоторые функции брал из открытых источников. к сожалению авторов не помню
Лежала как то без дела гитара, поделюсь с народом.:drinks:

Скрытый текст

В этом уроке рассмотрим создание рабочей гитары, которая будет играть ту музыку, которую мы захотим. Нам надо всего 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

 


Ну, и вроде всё! Не забудьте проверить правильность копирования, убрать стрелочки, с помощью которых я указывал на что-либо, и вуаля.


Если где-то ошибся, или не работает, маякните :biggrin:

  • Полезно 2
Ссылка на комментарий

Мой первый, но, надеюсь, полезный урок :)

 

Скрытый текст

Что нам понадобится:

 

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

Осенний каламбур. Сентябрь - лето.

img.php?nick=Balavnik&sert=2&text=t6

Ссылка на комментарий
Скрытый текст

В оригинальном ЗП есть один малоизвестный баг, при котором металлические бочки (и ряд других предметов) разрывает на кровавые ошмётки, если бросить их в «Воронку» или «Карусель»:

1.jpg2.jpg

 

Для исправления ошибки нам понадобится файл: 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
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...