Zeek,тогда подскажи плиз,я уже пол дня бомблю форум,как сделать,так чтобы не было такого: я иду,стою вощле НПС,он сидит,но как только завожу базар с ним он встаёт!
PorShen, тогда смотри на основе Валета из оригинала ЗП jup_a10_bandit_leader (Валет постоянно сидит на стуле и встает только если гг целится в него пушкой....)
ZeeK, вопрос такой:у меня нужный перс сдох,а он мне нужен.Если я сделаю скрипт его спавна через биндер при том,что рядом будет лежать его труп,то будет работать?И еще можешь расписать функцию спавна на один обьект(где levelvertex и gamevertex и координаты)
Если я сделаю скрипт его спавна через биндер при том,что рядом будет лежать его труп,то будет работать?
да, можно спокойно делать спавн по инфопоршню, выдаваемому после смерти НПС, а потом поршень спокойно забрать....и так далее
Quote (Freezer)
И еще можешь расписать функцию спавна на один обьект(где levelvertex и gamevertex и координаты)
function название функции() alife():create("ВЕЩЬ",vector():set( x, y, z), lv, gv) end вставляй координаты и вставляй куда хочешь: в диалог или на колбеки апдейтов
[error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : c:\progra~1\43ef~1.-\gamedata\scripts\_g.script:605: attempt to index global 'sound_theme' (a nil value)
Что я делал: Заспаувнил спейс_рескриптор на звук,в sound_theme.script прописал: после theme = {} ph_snd_themes = {} ph_snd_themes["dcm_sound_red_forest"] = {"all\\red_forest\\rf_anomal_radio"} Что нужно сделать,чтобы не было вылета?Может что-то не расскрипотовано?
Результат - вылет с ссылкой на ошибку в логике. Поковыряв, я обнаружил отсутствие файла sr_sound.script. Я добавил его, запустил игру и получил тот же самый вылет с тем же контекстом. Значит надо этот файл зарегистрировать. Лезем в modules.script:
Ищем - ---------------------------------------------------------------------- -- Загрузка модулей рестрикторов: ---------------------------------------------------------------------- - он в конце. И поле 85 строки с тексом: Код load_scheme("sr_deimos", "sr_deimos", stype_restrictor)
- встовляем наш: Код load_scheme("sr_sound", "sr_sound", stype_restrictor)
Всё зарегистрировали.
Теперь снова загружаем нашу игру и, добежав до нашего space_restrictor-а, ловим вылет:
Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....e.r. - Зов Припяти\gamedata\scripts\sr_sound.script:201: attempt to call field 'get_safe_sound_object' (a nil value) Залез в sr_sound.script на 201 строку я обноружил, что get_safe_sound_object - это функция xr_sound.script
В xr_sound.script я наткнулся на отсутствие get_safe_sound_object, а sr_sound.script я брал из ТЧ, куда и лезем за помощью в xr_sound.script, где данная функция есть. После нехитрых рассуждения я скомуниздил из тч-льского файла xr_sound.script следующий
--' Соунд обжект
--' Таблица для хранения созданных саунд обжектов. sound_object_by_theme = {} --' type = [random|seq|looped] function get_sound_object(theme, t_type) if sound_theme.ph_snd_themes[theme] == nil then abort("ph_snd_themes for theme %s", tostring(theme)) return end
if sound_object_by_theme[theme] == nil then sound_object_by_theme[theme] = {} end
if t_type == nil then t_type = "random" end
--' Выбор следующего айдишника local play_id = -1 local table_size = table.getn(sound_theme.ph_snd_themes[theme]) if sound_object_by_theme[theme].last_id == nil then if t_type == "random" then if table_size >= 2 then play_id = math.random(1, table_size) else play_id = 1 end else play_id = 1 end else if t_type == "random" then if table_size >= 2 then play_id = math.random(1, table_size - 1) if play_id >= sound_object_by_theme[theme].last_id then play_id = play_id + 1 end else play_id = 1 end else if sound_object_by_theme[theme].last_id < table_size then play_id = sound_object_by_theme[theme].last_id + 1 else if type == "looped" then play_id = 1 end end end end
printf("SOUND_OBJECT: selected id [%s] for theme [%s], type [%s], size [%s]", tostring(play_id), tostring(theme), tostring(type), table_size)
if play_id == -1 then return end --' Проверяем создан ли у нас соответствующий саунд обжект или его надо создать if sound_object_by_theme[theme][play_id] == nil then if type(sound_theme.ph_snd_themes[theme][play_id]) == "table" then sound_object_by_theme[theme][play_id.."_r"] = get_safe_sound_object(sound_theme.ph_snd_themes[theme][play_id][1].."_r") sound_object_by_theme[theme][play_id.."_l"] = get_safe_sound_object(sound_theme.ph_snd_themes[theme][play_id][1].."_l") else sound_object_by_theme[theme][play_id] = get_safe_sound_object(sound_theme.ph_snd_themes[theme][play_id]) end end
sound_object_by_theme[theme].last_id = play_id
--' Возвращаем саунд обжект if type(sound_theme.ph_snd_themes[theme][play_id]) == "table" then return sound_object_by_theme[theme][play_id.."_r"], sound_object_by_theme[theme][play_id.."_l"] else return sound_object_by_theme[theme][play_id] end end
local sound_object_by_path = {} --' Обертка вокруг функции, возвращающий звуковой объект. function get_safe_sound_object(path) if sound_object_by_path[path] == nil then sound_object_by_path[path] = sound_object(path) end return sound_object_by_path[path] end
function stop_all_sound_object() for k,v in pairs(sound_object_by_path) do if v:playing() then v:stop() end end end function clear_all_sound_object() sound_object_by_theme = {} end
добавив его в файл xr_sound.script уже ЗП и запустив игру я обнаружил, что моя логика заработала!!!
P.S. Делал данную рокировку я на ЗП на добавленном мною кордоне из ТЧ, откуда я и брал дополнительные скрипты.
Эм...я думаю есть альтернативный способ,просто заспаувнить спейс рескриптор,затем в логике прописать "snd = файл звука",прдварительно зарегестрировав его в script_sound.ltx...Только у меня вопрос вылез,как сделать так,чтобы звук был слышен на всей локе,кробе самого подвала "Бара"
Добавлено (24.04.2011, 13:53:53) --------------------------------------------- Но всё же твой совет я сохраню в текстовом документе..