Предисловие: Мастер Сяк(с)... Мастер Artos... Вас много
Все работает, спасибо!!!
Встреча с кровососом 95% смерть! (Прям как в книгах). Единственное что тебя спасет, (оставшиееся 5%) это если ты увидишь его зараннее и успеешь расстрелять...
Единственное то, что когда он присасывается то ГГ поворачивается к Кровососу спиной... Но это не суть, главное что захватывает...
АнархОПанк
Выше дал немного поправленный вариант, то не подбирал пока параметры.
Чуток проверил - есть странность, кровосос меняет свой вектор через нек.время, хотя смотрит на жертву ... Нужно еще поковырять. Хотя ... разворот нужно делать иначе, а не готовыми простенькими методами. По звуку: а как в ЗП? Дай звук (файл) - прикрутить не сложно. P.S. Только кидай с исходными для ЗП назвааниями файла(ов)/путей, а то я уж ЗП подзабыл ...
Сообщение было успешно отредактировано Artos (10-09-2010 16:58 GMT3 часа, назад)
АнархОПанк
Я ж в комментах приписал, что разворот нужно дорабатывать. Делать нужно НЕ скачком, а поплавнее ... Сделаю чуть позже.
Звук забрал, чудной какой-то (ИМХО). Дык этот звук и ТЧ имеется ...
А убежать -??? Сделаю так, что в зависимости от дистанции захвата - хит 'всасывания' будет меняться и ежели всосал - то притягивать будет так, что не сбежишь/вырвешься.
Artos всмысле путь к звуку из ЗП?
Ну так я ничего и не говорю, и так все устраивает. Главное сама суть захвата и ничего нельзя делать.. НУ разве что попытаться убежать
Ахаха... Ну какой звук есть такой и дал
Нуу... Тогда "соска" будет шибко опасным, и тогда встреча с ним будет настоящим испытанием
В ТЧ звук другой немного... Хотя и такой бы подошел. Что то я сразу не подумал об ТЧ...
SkyLoader'у, скрипт из ЗП. Клац
Сообщение было успешно отредактировано АнархОПанк (10-09-2010 17:30 GMT3 часа, назад)
--/#+# 'засос кровососа' --------------------------------------------------
if self.object:clsid() == clsid.bloodsucker_s and self.object.health > 0.25 then
local oTarget = self.object:get_enemy()
if oTarget and IsStalker(oTarget) and self.object:see(oTarget) then
--/ если у кровососа есть враг/цель и кровосос его видит то ...
local iDist = self.object:position():distance_to(oTarget:position())
if iDist <= 3 then --/ дистанция для анимации 'засоса'
local iTime = time_global()
--/ таймер для анимации и хита ...
if (self.timer_anim or 0) < iTime then
self.timer_anim = iTime + 2000 --/ таймер анимации ~ 2 сек
if self.object:animation_count() > 0 then
self.object:clear_animations()
end
self.object:add_animation("vampire_0", true) --/ варианты: "vampire_0" | "idle"
--/ озвучка 'засоса'
local oSnd = sound_object("monsters\\bloodsucker\\vampire_sucking")
oSnd:play_no_feedback(oTarget, sound_object.s2d, 0, vector(), 5.0)
end
--/ хит жертве (притягиваем)
if (self.timer_hit or 0) < iTime and (self.timer_anim and self.timer_anim + 2000 >= iTime) then
self.timer_hit = iTime + 500 --/ таймер хита ~ 0.5 сек
local vDir = self.object:direction() --/ вектор кровососа
local vDirHit = vector_rotate_y(vDir,179.0)
local h = hit()
h.draftsman = self.object
h.direction = vDirHit --/ направление хита
h:bone("bip01_spine") --/ для учета 'брони'
h.power = 1
h.impulse = 120/iDist --/ чем ближе - тем сильнее 'засос'
h.type = hit.wound --hit.strike
oTarget:hit(h) --/ наносим хит жертве
--/ разворот жертвы на кровососа. TODO: требует доработки/замены!
if oTarget:id() == db.actor:id() then --/ жертва == актор? (а нужно?)
oTarget:set_actor_direction(vDirHit:getH())
end
end
end
end
end
--/<-----------------------------------------------------------------------
P.S. Обновил, добавил зависимость от дистании: чем ближе - тем сильнее 'всасывает'.
Сообщение было успешно отредактировано Artos (10-09-2010 18:03 GMT3 часа, назад)
Все работает, звук воспроизводится, ГГ шевелиться не может, камера поворачивается (Относительно, смотря как встать), хит усиленный, чем больше всасывается тем сильнее хит... Это шикарРрНо!!!!
Хорошо, добавим
Сообщение было успешно отредактировано АнархОПанк (10-09-2010 18:04 GMT3 часа, назад)
АнархОПанк
Ну я не 'Мастер', а банальный ковыряльщик кодов ...
Погоняй кровососа в игре - как будет с неписями ...
Стоит скорее всего добавить проверку:
if oTarget and IsStalker(oTarget) and self.object:see(oTarget) then
дабы не засасывал всех подряд, т.е. чтобы монстров не 'сосал' ...
(в варианте-3 подправил)
Artos кровососа я гонял, с НПС равно как и с ГГ
На счет остальных монстров (До исправленной версии) незнаю, гонял только в деревне. Во всяком случае эта проверка лишней не будет.
АнархОПанк, за скрипт спс. Я там нашел функцию еще одного медленного поворота, но она пока не работает. Artos, если кровосос делает засос неписю, то звук воспроизводится на акторе.
Вроде так:
...
<dialog id="escape_af_jumper">
<has_info>tutorial_end</has_info>
<dont_has_info>blocer_portion</dont_has_info>
<give_info>blocer_portion</give_info>
...
Подробней здесь и здесь
Сообщение было успешно отредактировано MRN$ (11-09-2010 00:21 GMT3 часа, назад)
Artos тут такая идея возникла. Можно ли сделать постэффект при засасывании?
PS При этом само сабой величить время засасывания путем уменьшением силы хита. Ну вот это я смогу, а вот постэффект пытался прикрутить, оно не вышло.
Подскажите, скрипто-знающие люди, если эту строку вставить куда пологается level.add_pp_effector("alcohol.ppe", 3000, false)
то будет отигрываться постэффект?
добавлено спустя 1 минуту
Stalk15 это для дистанции, т.е чем ближе тем сильнее засос (Кровопитие)
Отлично! Постэффект есть
Сообщение было успешно отредактировано АнархОПанк (10-09-2010 19:24 GMT3 часа, назад)
АнархОПанк
Да это я понял.Мне для интереса, каким образом это работает.Типа 120 делится на числовое значение дистанции от ГГ до сосыча и как-то так в зависимости от дистанции меняется импуль?Я правильно понял?
------------------------------------------------------- АнархОПанк
ЦитатаЯ думаю это отвечает на твой вопрос:)
Да не, это тоже понятно...Я про другое, написанное выше.
Сообщение было успешно отредактировано Stalk15 (10-09-2010 19:49 GMT3 часа, назад)
Повторюсь кое с чем: НПС спаунится не в нужном мне месте, а фиг знает где.
Раньше, у меня проблем не было с этим - подходил к нужному месту, снимал координаты, создавал скрипт, указывал в нём снятые координаты, а дальнейший ход действий изложен в гайде портала.
Но сейчас не всё так глатко - НПС не спаунится там, где мне нужно. Я взял координаты снятые Синоби, но НПС спаунился в другом месте, а не в указанном координатами. Что за фигня, кто подскажет?
Stalk15 тогда у Артоса надо спросить будет.. Как мне кажется это число (120) делится на Дистанцию которая сейчас есть на данный момент. Отсюда и идет просчет усиленного/ослабевающего хита.
добавлено спустя 47 секунд
Artemiy94 как бы помягче сказать... Это не тема по Зову Припяти. Это во-первых. А во-вторых по интернету уже год гуляет файл исправляющий этот вылет.
Сообщение было успешно отредактировано АнархОПанк (10-09-2010 20:00 GMT3 часа, назад)
http://www.stalker-portal.ru/forums.php?m=posts&q=7380&d=1980
189 мой пост, я так и не понял почему новый звук НПС не говорит. ТУт наверняка кто-то прописывал новые звуки, подскажите.
Создал новую группировку.
Проблема с файлом death_manager. Я прописал там свою группировку на равне с остальными. Но вот беда:
Expression : assertion failed
Function : xrServer::Process_event_reject
File : E:\stalker\sources\trunk\xr_3da\xrGame\xrServer_process_event_reject.cpp
Line : 12
Description : e_parent && e_entity
Вылетает при Синхронизации.
Если файл убрать - игра заспускается, но при убийстве НПС игра вылетает.
добавлено спустя 6 минут
В xr_statistic тоже прописал по анологии с отсальными.
Сообщение было успешно отредактировано Шалун (10-09-2010 21:20 GMT3 часа, назад)
SkyLoader
Звук при засосе крвососа в настоящий момент отыгрывается на жертве:
oSnd:play_no_feedback(oTarget, sound_object.s2d, 0, vector(), 5.0)
То, что слышит и астор - это и громкостью (5.0->1.0) поиграться нужно и собственно звук должен иметь тэги 'затухания' по дистанции.
СтОит перенести отыгрыш звука на самого кровососа, понизив и громкость:
oSnd:play_no_feedback(self.object, sound_object.s2d, 0, vector(), 2.0) Stalk15
Даж не знаю как тебе еще пояснить ...
h.impulse = 120/iDist --/ чем ближе - тем сильнее 'засос'
Простейшее деление величины импульса на расстояние до жерты. Как еще можно трактовать арифметическое действие деления?
при 3-х метрах - 40, при 2-х - 80, при 1-ом 120 ... Т.е. чем ближе - тем сильнее притягивает и сильнее 'сосет'. АнархОПанк По постэффекту: Думаем параллельно. Вижу ты уже разобрался как прикрутить ...
Но тут нужно и помозговать:
- эффект 'alcohol.ppe' может и не самый удачный, я прикрачивал 'total_recall.ppe'. можно и еще чего-нить добавить, но это уже не тут, а в коллбэки хита актора, дабы учитывать и силу хита и здоровье актора.
- постэффект стОит включать/отключать по флагу, дабы непереэффектить ... Глянь вариант 4 (озвучка на кровососе + постэффект):
Код:
--/#+# 'засос кровососа' (v4.0) -------------------------------------------
if self.object:clsid() == clsid.bloodsucker_s and self.object.health > 0.25 then
local oTarget = self.object:get_enemy()
if oTarget and IsStalker(oTarget) and self.object:see(oTarget) then
--/ если у кровососа есть враг/цель и кровосос его видит то ...
local iDist = self.object:position():distance_to(oTarget:position())
if iDist <= 3 then --/ дистанция для анимации 'засоса'
local iTime = time_global()
--/ таймер для анимации и хита ...
if (self.timer_anim or 0) < iTime then
self.timer_anim = iTime + 2000 --/ таймер анимации ~ 2 сек
if self.object:animation_count() > 0 then
self.object:clear_animations()
end
self.object:add_animation("vampire_0", true) --/ варианты: "vampire_0" | "idle"
--/ озвучка 'засоса' (отыгрыш на кровососе)
local oSnd = sound_object("monsters\\bloodsucker\\vampire_sucking")
oSnd:play_no_feedback(self.object, sound_object.s2d, 0, vector(), 2.0)
self.pp_kiss = nil --/ сброс 'флага' постэффекта
end
--/ хит жертве
if (self.timer_hit or 0) < iTime and (self.timer_anim and self.timer_anim + 2000 >= iTime) then
self.timer_hit = iTime + 500 --/ таймер хита ~ 0.5 сек
local vDir = self.object:direction() --/ вектор кровососа
local vDirHit = vector_rotate_y(vDir,179.0)
local h = hit()
h.draftsman = self.object
h.direction = vDirHit --/ направление хита (притягиваем)
h:bone("bip01_spine") --/ для учета 'брони'
h.power = 1
h.impulse = 120/iDist --/ чем ближе - тем сильнее 'засос'
h.type = hit.wound --hit.strike
oTarget:hit(h) --/ наносим хит жертве
if oTarget:id() == db.actor:id() then --/ жертва == актор?
--/ добавляем постэффект
if not self.pp_kiss then
self.pp_kiss = game.time() --/ флаг-индекс постэффекта
level.add_pp_effector("total_recall.ppe", self.pp_kiss, false) --/или alcohol.ppe
end
--/ разворот актора на кровососа (а нужно?). TODO: требует доработки/замены!
oTarget:set_actor_direction(vDirHit:getH())
end
end
end
end
end
--/<-----------------------------------------------------------------------
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.