Если позиция отыгрыгрывания звука на таргете то:
а) если таргет - актор, то и глупо спрашивать. На акторе и играет звук.
б) если таргет НЕ актор, то никак НА акторе звук не может отыгрываться. Актор (точнее игрок за монитором) может только слышать звук, идущий от позиции таргета (другого сталкера).
То, что тобою в динамиках/наушниках воспринимается как 'на акторе' (игрок слыщит все в игре с позиции актора):
- или зарегулирована громкость отыгрываемого звука ... (попробовать уменьшить с 5 до 1-2);
- или звук НЕ имеет затухания по дистанции (следует подправить через SDK);
- или ... греши на свои звуковуху/динамики/наушники.
(слишком вольные формулировки в словах приводят к недопониманиям ... как собеседника, так и самого говорящего!)
Сообщение было успешно отредактировано Artos (11-09-2010 03:00 GMT3 часа, назад)
АнархОПанк
Бог знает что сказать по этому поводу?
В свете не совсем давних споров (см. со стр. 29 в архиве), относительно этого параметра, однозначно ответить даже боюсь как у тебя это сработает?
Например у меня одни результаты, у Artos-а другие, а какой у тебя результат получится - не знаю.
1. Не нужно пытаться делать ... чтобы лишь бы 'что-то' сделать.
2. Прежде чем думать 'как' сделать, и даже 'что' сделать, стОит определить 'для чего'? Т.е. вначале алгиритм, а уже потом его реализация.
Собственно абракадабра и в твоем вопросе: начинаешь о ХП (Hit Power), вроде как хит/сила хита, а продолжаешь про убывание (искусственное!) здоровья актора ... приводя притянутую за уши 'hp'.
К чему это я? Если кровосос 'засосал' жертву, то и ... высасывает кровь. Тут ХП (Hit Power - сила хита) или должна оставаться постоянной или наоборот нарастающей, т.е. от него здоровье актора - убывать.
Убывает здоровье и собственно от самих хитов, которыми кровосос притягивает жертву. Но там пока h.power = 1, что мало для отнятия здоровья. Зачем же искусственно отнимать здоровье у актора в непонятные моменты времени, когда просто увеличив h.power - с каждой 'подтяжкой' будет отниматься и здоровье.
Но ... я считаю нужно сделать отдельный хит жертве, не по апдейту самого хита-притягивания, а по таймеру анимации. Т.е. начал 'засос' - дали хит отнимающий здоровье, а не импульс притяжения. Второй раз "вкусил' - опять отнямется здоровье в зависимости от h.power.
Так что нет смысла искусственно управлять параметром здоровья, когда есть именно подходящий инструмент в виде хита.
Вот пробуй вариант-5 с управляемой силой хита и подправленным разворотом актора на кровососа:
Код:
--/#+# 'засос кровососа' (v5.1) -------------------------------------------
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()
local vDir = self.object:direction() --/ вектор взгляда кровососа
local iHitPower = 0.1 --/ величина силы хита (для апдейта)
local is_Actor = oTarget:id() == db.actor:id() --/ жертва == актор?
--/ таймер для анимации и хита ...
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(), 5.0)
iHitPower = 15 --/ задаем силу хита (для снижения здоровья)
self.pp_kiss = nil --/ сброс 'флага' постэффекта
if is_Actor then
--/ добавляем актору постэффект
level.add_pp_effector("total_recall.ppe", game.time(), false) --/или "alcohol.ppe"
--/ разворот актора на кровососа (нужно ли?)
local vDirN = vector():set(vDir)
oTarget:set_actor_direction(vDirN)
end
end
--/ хит жертве (в течении времени таймера анимации ~2+2 сек)
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 vDirHit = vector_rotate_y(vDir,179.0)
local h = hit()
h.draftsman = self.object
h.direction = vDirHit --/ направление хита ('толкаем' на кровососа)
h:bone("bip01_spine") --/ для учета 'брони'
h.power = iHitPower/iDist --/ чем ближе - тем больше 'отсасывает' здоровья
h.impulse = 120/iDist --/ чем ближе - тем сильнее 'засос' (притягивает)
h.type = hit.wound --/ как вариант: hit.strike
oTarget:hit(h) --/ наносим хит жертве
end
end
end
end
--/<-----------------------------------------------------------------------
Чуть подправил до варианта 5.1.
На этом пока закончил ковыряться с засосом. Далее подбирай значения хитов, звуки и постэффекты.
Сообщение было успешно отредактировано Artos (11-09-2010 03:01 GMT3 часа, назад)
Мне нужно выдать голосовое сообщение, (типа новость от сидора) после того как умрут все бандиты на АТП. Я так понял что это нужно функцию повесить на поршень из атп, только вот не кода функции, ни названия поршня я увы не знаю. Поможете товарищу, а?
Fantom2323 воспользуйся обратным поиском. Сначала найди как называется системное имя сообщения Петрухи о зачистке. Потом нади где оно записано.
Вопрос: Кажется кто-то находил способ убрать красную надпись при команде Demo_record 1. Не подскажите - как?
Artos ХП - это hit points\Health Power то бишь кол-во жизни. А пишешь что-то среднее, вот и получается вместо кол-ва жизни кол-во урона. Википедия труЪ. =)
Сообщение было успешно отредактировано blackraven6 (11-09-2010 18:00 GMT3 часа, назад)
АнархОПанк, вот медленный поворот. Тут координаты непися, но ты можешь поставить координаты сосыча.
Код:
local start_dir = device().cam_pos:getH()
if start_dir > math.pi then start_dir = start_dir - 2*math.pi end
local end_dir = npc:position():sub(device().cam_pos):getH()
local delta_dir = (end_dir - start_dir)
local start_time = game.time()
local time_interval = 5000
function cond()
local cur_time = game.time()
local dt = cur_time - start_time
local dir = start_dir + dt* delta_dir / time_interval
db.actor:set_actor_direction(-dir)
if dt > time_interval then return true end
end
level.add_call(cond, function()end)
Цитата malandrinus:
Дополнение:
Удобнее использовать не апдейт актора (хотя и можно), а функцию level.add_call. Это даст возможность установить периодическое действие, которое должно закончиться по определённому условию - как раз то, что в данном случае нужно.
Сообщение было успешно отредактировано SkyLoader (11-09-2010 18:51 GMT3 часа, назад)
blackraven6
Уже устал повторять, что вопросы нужно задавать так, чтобы они были понятны другим! Вот и возникают недопонималки.
Использование абревиатур без глоссариев (толковалок-пояснялок) иль однозначного понимания всеми - приводит к потери времени и недопониманиям.
Кто узаконил абревиануру ХП/HP? общеприната ли она для однозначного толкования?
Стараюсь не читать википедии, хотя и рекомендую порою новичкам с них начинать.
Википедии пишут такие же как мы ... и нередко уровень пишушего модмейкера иль его манера излагать такова, что иль без слез читать нельзя иль больше тумана чем ясности вносит ...
HP - однозначное соответствие (по абревиатуре) параметру силы хита - 'Hit Power'.
А что за абракадабра - 'hit points'? Найдите мне в кодах игры такое буквосочетание! Его нет!
Что за абракадабра -'Health Power' (сила/власть здоровья)?
То, что 'силовые хиты' (hit.power), наносят урон здоровью и по сути именно они в основном и определяют уровень здоровья/состояния объекта в игре и приводит к жаргонариям:"Покалечить -> Нанести хит -> Нанести ХП".
Так что читая википедии нужно всеже и свою голову иметь! И не принимать на веру и тем более НЕ узаконивать для всех то, что слетело с языка у кого-то!
Так что остаюсь при своем мнении: 'hp' -> health power - притянутый за уши частный жаргонарий! (ИМХО!)
Сообщение было успешно отредактировано Artos (11-09-2010 19:24 GMT3 часа, назад)
Artos Да нет просто по жизни:
HP - кол-во жзни ИМХО должно быть health points но почему то часто идет именно health power
AP - очки действия action points
XP - опыт от expirience
Это впринципе общеупотребляемые сокращения по большей части для RPG.
В Fallout 3 HP обозвали ОЗ (очки здоровья), AP - ОД (очки действия).
А Хит это просто Хит. Он больше никуда не скоращается. Его кроме как до трех букв (не тех ) не сократить!
blackraven6
Да все понятно ... Но опят талдычу, что в дискусии иль в вопросе не стОит увлекаться сокращениями (частными, местечковыми!), которые приводят к флуду переспрашиваний/уточнений иль к недопонималкам. Да и тут все же публичный ресурс и читают его НЕ только гуры по википедиям ...
Да это не с википедии (я про нее сказал потому что решил написать в ее поиске ХП и вышел сразу же на нужный ответ) просто общепринятое в игровой среде сокращение...
Ладно прикратим оффтоп, а то модераторы наедут. Я согласен про слишком частое использование сокращений кроме общепринятых (к которым я правда отношу ХП....). В общем надо просто использовать сокращения только если часто используешь один и тот же термин, а в конце сообщения писать расшифровки своих сокращений. Или допустим как в официальных документах:
- Кол-во жизни (в дальнейшем ХП)
- кол-во жихни (ХП)
blackraven6 красные надписи сами уйдут при воспроизведении. Я искал уже по всему инету статьи (Хотел летать демо_рекордом и снимать фрапсом, но красные надписи мешали) все облазил, не одной статьи как убрать. Выходит это в движке.
SkyLoader Хм.. Спасибо!
Незнаю, попытайся поискать. Во всяком случае не на АМК не знают, и ни где вообще.
Сообщение было успешно отредактировано АнархОПанк (11-09-2010 20:05 GMT3 часа, назад)
Что в телах некоторых квестов означают теги: <map_location_hidden>1</map_location_hidden>?
----------------------------------------------------------------------------------- АнархОПанк
Это врятли.Метка при наличии таких тегов в квесте имеется.Тут что-то подобное, но другое, наверно.
Интересно, что в тегах цифры значат ...
КОроче мне надо точное значение этих тегов.Вдруг это полезная весчь, а я не знаю
Сообщение было успешно отредактировано Stalk15 (11-09-2010 20:27 GMT3 часа, назад)
ЦитатаЗы. Забыл спросить, а шо значит вот это:
<map_location_hidden>1</map_location_hidden>
???
Пишешь и не знаешь? Смотри табличку story_ids в lua_help.script конкретно единичка это Escape_trader_self
Сообщение было успешно отредактировано АнархОПанк (11-09-2010 20:40 GMT3 часа, назад)
Darien Fx, по секциям или именам. Например Волк, Круглов и тд. просто времени много на это тратить надо, а есть готовые варианты. Stalk15, db.actor:see(obj)
SkyLoader
Это не проблема, составляй таблицу со всеми именами, итерируй и проверяй. Сори, но это рутина, кому охота её писать за тебя? db.actor:see(obj) - а вот это работать не будет, к сожалению.
Сообщение было успешно отредактировано Darien Fx (12-09-2010 01:44 GMT3 часа, назад)
АнархОПанк , SkyLoader
Это вам для ... поддержания тонуса :
Код:
--/------------------------------------------------------------------
--/ Поворот камеры актора по направлению к позиции (vPos)
--/ [iTime] - продолжительность поворота (опционально)
--/ [iErr] - погрешность поворота (опционально)
--/------------------------------------------------------------------
function Actor_CamRotate(vPos,iErr,iTime)
if not vPos then return end --/>
if not iErr then iErr = 0.05 end --/ погрешность поворота
local vPosCam = device().cam_pos --/ вектор направления взгляда актора
local iAngleRun = vPosCam:getH() --/ начальный 'угол'
local iAngleEnd = vPos:sub(vPosCam):getH() --/ конечный 'угол'
local iAngleInt = iAngleEnd - iAngleRun --/ диапазон поворота (angle-interval)
if math.abs(iAngleInt) <= iErr then
return --/> поворот не требуется
end
local iPi = math.pi
if iAngleRun > iPi then --/ > 180 град?
if iAngleInt < 0 and iAngleInt > iPi then --/ реверс
iAngleRun = iAngleRun - iPi*2
iAngleInt = iAngleEnd - iAngleRun
end
elseif math.abs(iAngleInt) > iPi then --/ поворот > 180 град?
if iAngleEnd > iPi then --/ реверс
iAngleEnd = iAngleEnd - iPi*2
iAngleInt = iAngleEnd - iAngleRun
end
end
--/ определяем продолжительность поворота ('плавность')
local iTimeInt = iTime --or iPi*1000 --/ time-interval (при iPi*1000 => ~3 сек)
if math.abs(iAngleInt) <= iErr then
return --/> поворот не требуется
elseif not iTimeInt then --/ 'плавность' не задана
iTimeInt = math.abs(iAngleInt *1000) --/ вращаем с пост.скоростью (~180град/3сек)
end
local iTimeRun = time_global()
local iTimeEnd = iTimeRun + iTimeInt
--/ поворот камеры актора
local function CamRotate()
local iTime = time_global()
local iAngle = iAngleRun + iAngleInt *(iTime - iTimeRun)/iTimeInt
db.actor:set_actor_direction(-iAngle) --/ задаем угол поворота (рад)
if iTime > iTimeEnd then --/ проверка окончания времени
return true --/> довернули (end call)
end
end
--/ запуск call-функции поворота камеры актора
level.add_call(CamRotate, function() end)
end
--/------------------------------------------------------------------
соответственно 'this' - не менять если биндер монстров или заменить на имя вашего файла-скрипта, куда поместите функцию поворота.
Погрешность '0.05' можно не указывать или изменить/загрубить ...
Плавность поворота '2000' - милисекунды времени за которое происходит поворот (не зависимо от угла поворота). Больше -> медленнее.
Если НЕ указывать - поворот с постоянной скоростью (~180град/3сек).
Stalk15 , SkyLoader
Oпять яркий пример 'как НЕ стОит спрашивать'!
Первый вопрошает чепуху: ... видит игрок за монитором?
- А если игрок просто отвернулся от монитора?
- А если в игре ночь без луны и ПНВ не включен и рядом нет фонариков?
- А ежели актор в кустики забежал и видимость листочком прикрыло?
- А ежели противогаз с мертвыми зонами обзора надел на актора (есть и такое в модах)?
- ... да много еще чего можно для сидящего за монитором придумать!
Все эти динамические и пр. преграды для видимости учитывать в игре врядли кто будет (если даже и возможно), так что ответ на твой вопрос в лучшем случае будет наполовину правильным.
Второй вообще прочитал вопрос невнимательно и игрока за монитором отождествляет с актором в игре ... (хотя ответ наиболее близок к 50%).
Глаза актора и глаза игрока - далеко не тождественны!
И, учитывая и выше приведенные динамические препятствия и учитывая дистанции ... то понятно, что 'db.actor:see(obj)' будет возвращать далеко не всегда то, что gamer:see ...
Вот и ... возникает флудильня-перевопрошалка в топике.
Сообщение было успешно отредактировано Artos (12-09-2010 11:12 GMT3 часа, назад)
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.