TheDoktor "Не могу открыть секцию *название секции*" т.е, у тя в игре прописан инклуд АКС74у, но самой секции нету. Нужно создать, или (как я понял) всунутый тобой АК надо переименовать в такое название.
TheDoktor ты вставил АК из Арсенала, так? Открой конфиг и погляди его название в квадратных скобочках. Если оно какое-либо другое, то переименуй на ту секцию, на которую жалуется.
добавлено спустя 3 минут
TheDoktor смотри конфиг автомата АКСу, как я понял ты вставил его из арсенала, и в связи с этим идет твоя проблема. В скобочках название например [wpn_aks74u_sk1] (пример), и если ты этим конфигом заменил стандартный конфиг, то соответсвенно игра не может считать название которое в логе, поэтому смени то что в скобках на то, на что жалуется.
отредактировал(а) АнархОПанк: 14-05-2010 22:30 GMT3 час.
Artos Да ты прав. информации дал мало. Простите. Даю полную информацию:
Вот:
local snd_obj0 = xr_sound.get_safe_sound_object([[characters_voice\human_01\bandit\music\guitar_1]])
local snd_obj1 = xr_sound.get_safe_sound_object([[characters_voice\human_01\bandit\music\guitar_2]])
local snd_obj2 = xr_sound.get_safe_sound_object([[characters_voice\human_01\bandit\music\guitar_3]])
local snd_obj3 = xr_sound.get_safe_sound_object([[characters_voice\human_01\bandit\music\guitar_4]])
-- Активация/деактивация предмета в слоте 1
local device_active = false
function item_update(obj)
local item = db.actor:active_item()
if item and item:section() == "player_m" then
if not device_active then
device_active = true First_track() -- не биндится -- проигрывание происходит только один раз
end
elseif device_active then
device_active = false
if snd_obj0:playing() then --\ если звук играет то вырубить его
snd_obj0:stop()
elseif snd_obj1:playing() then --\ если звук играет то вырубить его
snd_obj1:stop()
elseif snd_obj2:playing() then --\ если звук играет то вырубить его
snd_obj2:stop()
elseif snd_obj3:playing() then --\ если звук играет то вырубить его
snd_obj3:stop()
end
end
end
function First_track()
local F=math.random(1,4)
if F==1 then
snd_obj0:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
elseif F==2 then
snd_obj1:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
elseif F==3 then
snd_obj2:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
elseif F==4 then
snd_obj3:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
end
end
Теперь вопросы:
1) Нужно что бы после проигрывания первого трека оружие (условное) в слоте 1 спряталось. Как реализовать?
2) Или после проигрывания первого (случайного) трека играл второй (случайный) трек. Как реализовать этот вариант? Пожалуйта помоги разобраться.
:-)
karavan
Далеко НЕ полная информация.
Как я понял, "function item_update(obj)"
- вызывается неким скриптом. Однократно? Периодически? с каким периодом?
- Что за аргумент "obj"? Рудимент?
- Говорил ранее о некоей неписи, а тут фигурирует актор. Так и должно?
- 1-й трек - это по счету 1-й иои по названию (snd_obj0)?
- Всего (по кол-ву) проигрываться должно два трека? или больше.
- 2-й трек проигрывается после убирания оружия или по какому-то иному событию/моменту?
Судя по твоему примеру кода - полная какофония ...
Artos
Вобщем то да получается что не полная.
1)function item_update() -- стоит вызов в 'bind_stalker.script' в 'function actor_binder:update(delta)':
2)аргумент "obj" -- это просто были варианты с этим аргументом остался просто забыл удалить.
3)Убрать оружие нужно из первого слота у ГГ но после проигрывания первого (случайного) трека.
4) Проигрывание треков должно происходить постоянно при условии что оружие в первом слоте есть и оно активно.
Вобщем вот так. Еще раз напишу что нужно здеалть из этой какофонии.
1. Либо:
После проигрывания трека, который выбирается сучайным образом, нужно сделать оружие в первом слоте не активным (убрать оружие).
2. Либо:
После проигрывания трека, который выбирается сучайным образом, нужно включить следующий случайный трек. И так треки будут играть до безконечности пока юзер сам не решит убрать оружие (сделать неактивным).
И при первом и втором варинте решения условное оружие плеер должно оставаться в слоте 1 полюбому.
В моем корявом варианте выходит так, что при установке в слот 1 оружия "плеера" и при доставании его происходит проигрыш музыки, а при прятании оружия (плеер остается в слоте) музыка вырубается.
Если дождаться окончания трека (того который был выбран случайно), то следующий трек не начинает играть, а "плеер" активный.
Ну надеюсь теперь полная информация. :)
--/ Активация/деактивация предмета в слоте 1
local bDeviceActive = false --/ флаг: девайс активен и в 1-м слоте
local oSnd = nil
function item_update() --/ вызывается из 'bind_stalker.actor_binder:update(delta)'
local oActiveItem = db.actor:active_item()
if oActiveItem then --/ в руках ГГ есть предмет
if oActiveItem:section() == "player_m" then --/ активный предмет - девайс
local oPistol = db.actor:item_in_slot(1) --/ проверка: предмета в 1-м слоте
if oPistol and oPistol:id() == oActiveItem:id() then --/ в 1-м предмет и это девайс
bDeviceActive = true --/ флаг: девайс - в 1-м и он активен (в руках)
db.actor:hide_weapon() --/ убираем из рук оружие
end
Play_Random_Track() --/ вызываем зв.трек пока активен девайс
end
else --/ в руках нет предметов
bDeviceActive = false --/ сброс флага активного девайса
if oSnd and oSnd:playing() then --/ звук проигрывается
oSnd:stop() --/ выключить
end
end
end
function Play_Random_Track()
if not (oSnd and oSnd:playing()) then --/ проверка: звук НЕ проигрывается (ждем окочания)
local iRnd = math.random(1,4) --/ рандомный индекс для трека
sSound = "characters_voice\\human_01\\bandit\\music\\guitar_"..tostring(iRnd))
oSnd = xr_sound.get_safe_sound_object(sSound)
oSnd:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
end
end
erlik
в твоем варианте (не вдавался в уже в алгоритм, т.к ничего не понял из фраз о плеере ...) есть оч.неприятных момент:
Условие: if not snd_obj:playing() then - приведет к вылету, т.к. после первого же вызова функции при наличии предмета будет взведен флаг в "start" и при последующем уже вызове (это же из биндера) если предмет не убран - неминуемо приведет к nil:playing() , т.к. уже не будет получен локальный snd_obj из выбора треков.
Коммент: "если флаг проигрыша трека включен, но звуковой объект уже доиграл" мне, непример, непонятет. Флаг взводится в любом случае, если есть "девайс" и был состоянии сброса. Каким образом у тебя доигрывание звука опрокидывает флаг - неясно?
Следует подстраховаться на этот случай:
if snd_obj and not snd_obj:playing() then
и в путях к звукам неполадки, пропушены обратные слеши ...
local music={
[1]="characters_voice\\human_01\\bandit\\music\\guitar_1",
[2]="characters_voice\\human_01\\bandit\\music\\guitar_2",
[3]="characters_voice\\human_01\\bandit\\music\\guitar_3",
[4]="characters_voice\\human_01\\bandit\\music\\guitar_4"
}
karavan
Даже не удивляюсь :-).
В твоем варианте и нерабочее - заработает и рабечее заглючит ...
erlik
При первом апдейте переменной snd_obj при**50156ea8aab1bb10eeba**code]local snd_obj= nil[/code]
значение ставится в NIL, а функция будет уже работать через
[code]elseif device_active == "start" then[/code]
где в строке
[code]if not snd_obj:playing() then[/code]
есть эта переменная, которой присвоено NIL
Примерно должно быть так :
[code]local device_active = true
local snd_obj
function item_update()
local item = db.actor:active_item()
if not (item and item:section() == "player_m") then
if snd_obj and snd_obj:playing() then
snd_obj:stop()
end
return
end
if device_active then
local F = math.random(1,4)
snd_obj = sound_object([[characters_voice\human_01\bandit\music\guitar_]]..F)
snd_obj:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
device_active = false
else
if not snd_obj:playing() then --тут уже NIL-а не будет
device_active = true
end
end
end[/code]
отредактировал(а) Gun12: 15-05-2010 01:34 GMT3 час. Не стань номинантом премии Дарвина.
erlik
Коммент: "если флаг проигрыша трека включен, но звуковой объект уже доиграл" мне, например, непонятен.
Флаг взводится в любом случае, если есть "девайс" и был состоянии сброса.
Каким образом у тебя доигрывание звука опрокидывает флаг - неясно?
Как только флаг будет взведен, то при последующем апдейте и вызове этой функции (это десятки милисекунд) НЕ будет вызова "First_track()", а значит "local snd_obj= nil" останется "nil"
Соответствено при обработке второй ветки:
...
local snd_obj= nil
...
elseif device_active == "start" then
if not snd_obj:playing() then
device_active="stop"
end
...
будет попытка вызова функции "playing()" применительно к nil-объекту => FATAL ERROR или зависание биндера.
karavan
Уже высказал мысль, о том, что помимо (не)исправного скрипта требуется еще нечто ...
"при доставании предмета начала играть музыка" - это уже нечто из другой оперы!
karavan
В варианте "from Artos" нехватает задержки, т.к. если будет команда убрать оружие и начать играть, то на следующем апдейте при условии, что звук еще не начал играть - пройдет команда на его выключение -> звук вообще не заиграет. Т.о. следует ввести паузу/задержку, чтобы 1-й трек заиграл.
Если коды НЕ содержат ошибок (можно хоть скриптовым чекером проверить), то ЗАПУСКАТЬСЯ скрипт/функция обязаны!
Другой вопрос, что если внутри есть ошибки алгоритма или ошибки в обработке/аргументах (как уже выше показано на примере NIL:playing() ), то функция может или зависать или приводить к вылетам.
Во-втором случае следует смотреть лог и секцию FATAL ERROR.
В-первом, вводить технологические строки вывода в лог, позволяющие отследить прохождение цикла обработки и корректности завершения функции.
P.S. В моем варианте ТАЖЕ ошибка, обнови скрипт (правка выделена оранжевым)
Я вначале присвоил oSnd первый трек, но потом "сэкономил" и ...
Но вариант все одно требует доработки, т.к. - оружие будет убрано и ... требуется обратная команда, чтобы его можно было достать.
karavan
О функции 'music_near' и ошибке вызова этой функции только ты нам поведать можешь ... тут не телепаты.
Да и ... как я понял тебе нужен именно вариант от erlik"а с подправленным кодом (вариант Gun12).
При чем тут убирание и 1-й слот - я тоже не понял.
Да и принудительное убирание тут врядли пройдет, т.к. если принудить убрать, то ... обратной функцией (restore_weapon() ) можно только принудить активировать, а это приводит к замкнутому циклу ...
В общем формулируй подробно что и как - тогда и придумать можно будет.
Artos
Оружие в Слоте 1 имеет два состояния активное (в руках и в слоте) и не активное (в слоте).
Вобщем так:
У ГГ есть итем "Плеер", который купил у Сидора. Этот плеер может вставляться в слот 1. При вставлении в слот 1 и при вытаскивании его происходит его активация (находится в руках) и начинает играть музыка. Если нажать кнопку (кнопку "2" на клавиатуре) и убрать его (сделать не активным но в слоте 1 оставить) музыка (должна) прекращать играть. Если же плеер всевремя активный (как вытащенное оружие), то музыка играет не прерывно.
1) В варианте erlik"а после покупки и вставлени в слот Плеера музыка играет не прерывно, но при желании убрать (перевести в не активное состояние) музыка продолжает играть.
2) В моем варианте происходит только одинарное проигрывание и затихший Плеер находится в руках у ГГ, а нужно что бы он убрался после проигрывания.
Вопрос №1
возможно ли заспавнить огромный камень??? (таковые в объектах есть, но какой им конфиг прописывать??)
Вопрос №2
возможно ли заспавнить, если не камень, то что-нибудь другое на высоте 5 метров от земли?
и при приближение к рестрикотору этот объект падал?
ну или проще задать точку спавна выше на 5 метров от земли и при входе в рестрикотор объект падал..
как это осуществить???
и желательно чтобы он мог скрыть под собой тело...
Обосную:
Я хочу заспавнить НПС в некой точке А и там же заспавнить рестрикотор, и при входе ГГ в рестрикотор заспавненый предмет на высоте 5 метров, упал и придавил НПС в точке А.
Я бы не стал, без необходимости, использовать tostring и tonumber.
(Хотя никто и не запрещает:-))
Просто знаю, что Lua сама пр**50026ea8aab1bb10eeba**3
news_manager.send_tip(db.actor, "CONCAT -> "..str..num)
news_manager.send_tip(db.actor, "PLUS -> "..str + num)[/code]
Gun12
Спасибо за правки скрипта :-)
Не подумал насчет nil - хотя изначально и выносил этот параметр за пределы скрипта - а потом зачем то все-так сунул его в тело функции...только вот вопрос - а почему у karavan'a не вылетело сразу? Николай ФеНиКс
А в какой папке есть ogf модель камня? Просто интересно - не находил...
скрипт спавна предмета на высоте (с зависанием его в воздухе) я выкладывал - смотри пред. страницы.
Если тебе нужно просто заспавнить предмет на высоте (с его падением)- добавляешь к координате y любое нужное значение. Сам не тестил - но должно получиться что предмет как бы падает с неба . Хотя черт его знает на самом деле как он будет падать (скорость, и пр. )
Если надо чтобы он сначала висел, а потом упал - нужен тот скрипт - а затем нужен будет второй - который изменит один флаг в состоянии объекта чтобы тот смог упасть.
насчет конфига - попробуй использовать обычный (с классом II_ATTCH - если скрипт не будет предмет держать в воздухе - значит придется другой класс использовать)
23 страница
отредактировал(а) erlik: 15-05-2010 11:10 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.