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

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

Igor88.89, именно. Кстати, можно и сразу "переодевать" NPC, используя эффект, например, кратковременного потемнения в глазах ГГ, или наоборот, яркой засветки (эффект телепорта), чтобы не было видно исчезновения/появления NPC. При "оживлении" трупов я такой эффект использую ;)...
Ссылка на комментарий
=VENOM=, однако там замена модели происходит быстро и на глазах ГГ. Я Собсно хотел сделать, чтобы нпс переодевался на глазах ГГ, а потом отыгрывал анимацию. (анимация, похлопывания по карманам, застёгивания ширинки, утряски одежды.)
Ссылка на комментарий

Ну, это сделать совсем непросто, если вообще возможно: придётся создавать новые модельки сталкеров, с новыми анимациями, или прописывать новые анимации уже существующим. Вряд ли что выйдет :)...

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

Да и класс у сталкера не вполне кровососовский. Это как бы не в движке с экскаватором копаться придется, чтоб смену моделей поддерживал...

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Всем привет. Вопрос: возможно ли, в ТЧ скриптами реализовать защиту от хим. заражения? Ну т.е. химзащиту как в ЗП, при употреблении препарата?

Щас думаю только подменять костюм (или вешать арт) с улучшенными характеристиками химзащиты при использовании препарата... Но может есть что-то по лучше?

Изменено пользователем Shadows
Ссылка на комментарий

Здравствуйте. В последнее время всё рассуждаю о невидимости.

Хочу сделать духов зоны

:ph34r:

 

Но в связи с отсутствием установленного сталкера и малых знаний пишу сюда. Если заспавнить непися прямо перед ГГ и перевести его в оффлайн (беспонятия что это, но похоже что это отсутствие деятельности непися) то этот непись будет невидим визуально, но его местоположение, направление взгляда, снаряжение в конце концов можно отследить? Так? Или я всё неправильно понял?

Изменено пользователем TRAMP14
Ссылка на комментарий

TRAMP14

НПС в оффлайне будет существовать весьма формально, как все объекты на других уровнях. В том смысле, что он, конечно существует, можно отследить его положение и инвентарь - но это только перебором всех объектов в игре. Вот только из оффлайна он не сможет взаимодействовать с объектами на уровнях - участвовать в бою, например, или находиться под какой-то схемой. Фактически, для геймплея его не существует. Так что сделать на оффлайне духов Зоны врядли получится.

Невидимого НПС больше смысла делать на прозрачной модели - так он хотя бы в игре нормально участвовать будет.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

TRAMP14 Не пойму в чем у тебя проблема с не видимостью. С конфигом m_phantom.ltx (а точнее с теми моделями) знаком? Минуту нужно на то чтобы поменять шейдер и текстуру для модели нужного нпс.

Kirag прав по поводу модели.

Shadows Не знаю, возможно подойдет.

Представляю скрипт Супер-Мега-Пупер Броника. Скрипт можно привязать к любому бронежилету, хоть к куртке новичка. Точнее, скрипт привязан к актору, где проверяется какой броник надет на ГГ. Если тот, что надо, то скрипт начинает работать.

Особенности:

1. Текущее оздоровление до 0.8 единиц, при падении здоровья актора до 0.4 единиц. Оздоровление плавное, ~2 минуты игрового времени. Система текущего оздоровление ломается, при повреждении броника более чем на 0.6 единиц.

2. Экстренное оздоровление до 0.4 единиц, при падении здоровья актора до 0.2 единиц. Оздоровление мгновенное до 0.4 единиц. Далее действует текущее оздоровление. Система экстренного оздоровление ломается, при повреждении броника более чем на 0.4 единицы.

3. Система поддержки выносливости, более чем в 2 раза. При этом скорость восстановления сил замедленно, так же в 2 раза. Система поддержки выносливости ломается, при повреждении броника более чем на 0.3 единицы. При повреждении броника более чем на 0.7 единиц действует ухудшение выносливости (более быстрое падение сил). В этом случае советуется снять броник.

4. Индивидуальная система вывода оповещений о действиях и состоянии систем броника. Вывод сообщений производится в несколько ниже центральной части экрана. Каждое сообщение сопровождается звуковым зумом. При этом каждый тип сообщений имеет свой цвет.

 

Я не буду подробно описывать, как работает данный скрипт. Это будет слишком муторно и мало понятно. Но некоторые комментарии в скрипте достаточно наглядно объясняют, где и какой код, за что отвечает.

 

Итак начнём. Создаём файл super_outfit.script. И вписываем в нём такой код:

 

-------------------------------------------------------------------

 

local med_obc = 0 --защёлка вывода информации о запуске текущего оздоровления

local pred_med = 0 --защёлка вывода информации о повреждении системы текущего оздоровления

local ekst_med = 0 --защёлка вывода информации о повреждении экстренного оздоровления

local bron_tek = 0 --защёлка вывода информации о востановлении системы текущего оздоровления

local bron_eks = 0 --защёлка вывода информации о востановлении системы экстренного оздоровления

local pow_kras = 0 --защёлка вывода информации о повреждении и востановлении системы поддержки выносливости

local tbl_news = {} --таблица текстовой информации

local pow = 1 --переменная для запоминания предыдущего параметра выносливости.

 

function update_nano()

local actor = db.actor

local bron = actor:get_current_outfit()

 

if actor:alive() == true and bron and bron:section() == "outfit_exo_m1" then --здесь ставится имя броника

local live_bron = actor:get_current_outfit_protection(9)

 

--запуск текущего оздоровления

if actor.health <= 0.4 and actor.health > 0.2 and med_obc == 0 then

if live_bron > 0.4 then

med_obc = 1

this.text_list(0)

elseif pred_med == 0 then

this.text_list(4)

pred_med = 1

if bron_tek == 0 then

bron_tek = 1

end

end

elseif med_obc == 1 and live_bron <= 0.4 and actor.health > 0.4 then

this.text_list(4)

med_obc = 0

 

--запуск экстренного оздоровления

elseif actor.health <= 0.2 then

if live_bron > 0.6 then

actor.health = 0.2

this.text_list(3)

if med_obc == 0 then

med_obc = 1

this.text_list(0)

else

this.text_list(1)

end

elseif ekst_med == 0 then

this.text_list(5)

if pred_med == 0 then

if med_obc == 0 then

this.text_list(0)

med_obc = 1

else

this.text_list(1)

end

end

ekst_med = 1

if bron_eks == 0 then

bron_eks = 1

end

end

end

 

--поддержка выносливости

if live_bron > 0.7 then

local pow_raz = pow - actor.power

actor.power = pow_raz/1.1

pow = actor.power

elseif live_bron < 0.3 then

local pow_raz = pow - actor.power

if pow_raz < 0 then

actor.power = pow_raz/1.1

else

actor.power = -(pow_raz/1.1)

end

pow = actor.power

elseif live_bron <= 0.7 and pow_kras == 0 then

this.text_list(8)

pow_kras = 1

end

 

--защёлки вывода информации о повреждениях систем броника

if pred_med == 1 and actor.health > 0.4 then

pred_med = 0

end

if ekst_med == 1 and actor.health > 0.2 then

ekst_med = 0

end

 

--апдейт активных действий

this.medic()

this.bron_rem(live_bron)

this.text_news()

end

end

 

--текущее лечение

function medic()

if med_obc == 1 then

db.actor.health = 0.0005

if db.actor.health > 0.8 then

this.text_list(2)

med_obc = 0

end

end

end

 

--востановление ресурсов после ремонта броника

function bron_rem(live_bron)

if bron_tek == 1 and live_bron > 0.4 then

this.text_list(6)

bron_tek = 0

end

if bron_eks == 1 and live_bron > 0.6 then

this.text_list(7)

bron_eks = 0

end

if pow_kras == 1 and live_bron > 0.7 then

this.text_list(9)

pow_kras = 0

end

end

 

--список текстовых сообщений, и запуск соответствующих к ним звуковых сопровождений

function text_list(typ)

if typ == 0 then

table.insert (tbl_news, 1, {'Запущен процесс текущего оздоравления!', 1000, 255, 255, 0})

elseif typ == 1 then

table.insert (tbl_news, 1, {'Продолжается текущее оздоровление!', 1000, 255, 255, 0})

elseif typ == 2 then

table.insert (tbl_news, 1, {'Текущее оздоровление завершено!', 1000, 0, 255, 0})

elseif typ == 3 then

table.insert (tbl_news, 1, {'Произведено экстренное оздоровление!', 1000, 255, 255, 0})

elseif typ == 4 then

table.insert (tbl_news, 1, {'Внимание! Система текущего оздоровления повреждена!', 1000, 255, 0, 0})

elseif typ == 5 then

table.insert (tbl_news, 1, {'Внимание! Система экстренного оздоровления повреждена!', 1000, 255, 0, 0})

elseif typ == 6 then

table.insert (tbl_news, 1, {'Система текущего оздоровления востановлена!', 1000, 0, 255, 0})

elseif typ == 7 then

table.insert (tbl_news, 1, {'Система экстренного оздоровления востановлена!', 1000, 0, 255, 0})

elseif typ == 8 then

table.insert (tbl_news, 1, {'Внимание! Система поддержки выносливости повреждена!', 1000, 255, 0, 0})

elseif typ == 9 then

table.insert (tbl_news, 1, {'Система поддержки выносливости востановлена!', 1000, 0, 255, 0})

end

 

if typ == 4 or typ == 5 or typ == 8 then

this.sound_news(1)

else

this.sound_news(0)

end

end

 

--вывод текстовых сообщений

function text_news()

local hud = get_hud()

local tm = hud:GetCustomStatic("nano_news" )

 

if tm == nil then

hud:AddCustomStatic("nano_news", true)

tm = hud:GetCustomStatic("nano_news" )

end

local tmv = ''

for k,v in ipairs(tbl_news) do

tmv = tmv.. string.format("%s\n", '%c[255,'..tostring(v[3]..','..v[4]..','..v[5]..']')..v[1])

if v[2] > 0 then

v[2] = v[2] - 1

elseif v[3] ~= 70 or v[4] ~= 70 or v[5] ~= 70 then

for j = 3, 5 do

if v[j] > 70 then

v[j] = v[j] - 1

elseif v[j] < 70 then

v[j] = v[j] + 1

end

end

else

table.remove (tbl_news, k)

end

end

 

if tm ~= nil then

tm:wnd():SetText(tmv)

end

end

 

--звуковые сопровождения текстовых сообщений

function sound_news(typ)

local snd

if typ == 1 then

snd = xr_sound.get_safe_sound_object([[device\pda\pda_sos]])

else

snd = xr_sound.get_safe_sound_object([[device\decoder]])

end

snd:play(db.actor, 0, sound_object.s2d)

end

 

--сохранение данных

function nano_save(packet)

packet:w_u8(med_obc)

packet:w_u8(pred_med)

packet:w_u8(ekst_med)

packet:w_u8(bron_tek)

packet:w_u8(bron_eks)

packet:w_u8(pow_kras)

packet:w_u8(pow)

end

 

--загрузка сохранённых данных

function nano_load(reader)

med_obc = reader:r_u8()

pred_med = reader:r_u8()

ekst_med = reader:r_u8()

bron_tek = reader:r_u8()

bron_eks = reader:r_u8()

pow_kras = reader:r_u8()

pow = reader:r_u8()

end

 

-------------------------------------------------------------------------------------

 

Теперь открываем файл bind_stalker.script, находим функцию actor_binder:update(delta), и в теле функции вписываем апдейт нашего скрипта:

 

super_outfit.update_nano()

 

Затем, ниже находим функцию actor_binder:save(packet) и в конец тела функции вставляем вызов сохранения данных:

 

super_outfit.nano_save(packet)

 

Далее, ещё ниже находим функцию actor_binder:load(reader), и так же, в конец тела функции вставляем вызов загрузки данных:

 

super_outfit.nano_load(reader)

 

Теперь осталось создать виджет, для вывода оповещений. Для этого открываем файл config\ui\ui_custom_msgs.xml и добавляем новую секцию:

 

<nano_news x="240" y="600" width="550" height="100" complex_mode="1">

<text font="letterica18" r="255" g="255" b="255" a="255" align="c"/>

</nano_news>

 

Вот в принципе и всё. Можно идти тестировать. Если у кого есть какие ещё соображения по нововведениям к супер-мега-пупер бронику, просьба писать в коментах.

 

Изменено пользователем amik

Мой архив

Сталкером не занимаюсь.

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

НУ единственное что пришло мне на ум - сделать непися в оффлайне и от его лица, с его позиций (это мне и нужно - сравнивать расстояние) наносить хит, и потом спавнить какую нибудь тряпку на его месте (мне труп не нужен, и удалять нежелательно). В таблицу его ид можно же записать и потом над ним работать?

 

С онлайном\оффлайном не работал, прошу прощения за тупость вопросов

 

Изменено пользователем TRAMP14
Ссылка на комментарий

TRAMP14

Насколько я понимаю, хит можно нанести просто с направления - в xr_effects, вроде, была такая функция. А если указывать draftsman-а, то нужен онлайн объект.

Записать id в таблицу, ты конечно сможешь, а вот что с этим id делать - совсем другая история...

Со спавном дряни на месте оффлайнового НПС - вообще непонятно. Он и так никуда не денется, пока его alife():release-ом не убрать.

В общем, несколько непонятен смысл того, что ты хочешь сделать. Если нужен удар из ниоткуда, без возможности дать сдачи - так и НПС не нужен. Если нужна возможность дать сдачи, то на оффлайне ты ее не вдруг построишь, разве что скриптовую. Онлайновый НПС оффлайнового как врага все равно не воспримет. Да и вообще никак не воспримет.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

Ссылка на комментарий
Kirag, Kirag, анимация ощупывания себя после переодевания/закрытия ширинки/осмотра своего тела есть. Я собственно говоря наткнулся на нее случайно и подумал, ведь зачем то её (довольно долгую и качественную) сделали. Не иначе чтобы после переодевания нпс проигрывать.
Ссылка на комментарий

Подскажите, пожалуйста, как создавать скриптовые меню (а-ля спальный мешок из amk), или ткните носом в инструкцию, если таковая имеется. Просто нужно создать небольшое меню с 10 кнопками. При нажатии на них выполняется скрипт.

Заранее спасибо.

Точка ЛЦУ у вас на лбу это тоже чья-то точка зрения.

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

Igor88.89

А то мы не о сталкере говорим :)

Наверняка очередная недоделка/недорезка. Возможно, в каком-то из билдов такая функция преодевания и была. Но в релизе нет даже функции получения визуала - приходится через нет-пакеты читать, молчу уже про его смену (для кровососов - персонально функция про невидимость, но то для класса кровососа, и на вполне конкретный визуал).

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Вопрос к знающим людям, возможно ли скриптами заставить НПС реагировать на дымовую гранату (например со слезоточивым газом)? Чтоб было поведение как во время выброса или ранненого НПС.

userbar368.png

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

Доброго времени суток. Подскажите, возможно ли через скрипт заблокировать дверь кабинета Шульги? Если да, подскажите, пожалуйста, каким образом. Заранее спасибо.

 

Изменено пользователем Jurok
Ссылка на комментарий

С предыдущим вопросом сама так и не смогла разобраться, мозгов не хватило.

 

Теперь возник новый вопрос:

Решила попробовать отредактировать all.spawn, скачала acdc universal, устаноаила ActivePerl, все вроде работает (с чистой игры all.spawn рпспаковывается). Но немогу распаковать all.spawn из мода, выдает ошибку

4618213.th.png

 

Как это исправить?

userbar368.png

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

Callisto, файл acdc.pl кликнуть правой кнопкой, выбрать "изменить". Во второй половине перечисляются игровые объекты, в том числе и монстры. Добавь недостающего:

zombie_immortal_2_weak => 'se_monster',

Вроде бы, так.

 

 

Изменено пользователем Sync

Старый сюжет ТЧ - в топку!

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

Sync, Спасибо вроде помогло, эту ошибку и подобные исправила. Но теперь вылазит новая непонятная ошибка

4618676.th.png

 

Изменено пользователем Callisto

userbar368.png

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

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

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

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

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

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

Войти

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

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

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