frankenshtayn
Сталкеры-
Публикаций
56 -
Зарегистрирован
-
Посещение
Репутация
17 НейтральнаяИнформация о frankenshtayn
-
Звание
Новичок
Посетители профиля
Блок последних пользователей отключён и не показывается другим пользователям.
-
В ТЧ это делается достаточно просто: На координатах НПС ставится рестриктор с логикой выдачи инфопрошня, ну например proba_dial (Важно!!!! - размер рестриктора ставить 2 !!!) НПС добавить такую логику: [walker@g] path_walk = byk_walk3 path_look = byk_look3 on_actor_dist_le = 2| nil {+proba_dial} %=on_talk% meet = meet Ну, в общем-то и всё) https://www.youtube.com/watch?v=cCxoY-n3imM
-
Я делал так: function check_actor( actor, obj ) local ltx = system_ini() if ( ltx:r_float("actor_condition","max_walk_weight") ~= 60 ) then return true end if ( ltx:r_float("actor","jump_speed") ~= 6.0 ) then return true end return false end Проверял вес и прыжок ГГ в actor.ltx - если параметры не совпадали с оригиналом, то функция возвращает true В скрипте указывается секция (actor_condition) и проверяемый параметр из секции (max_walk_weight) Тоже вариант!) 1. Ошибки в СДК 2. Отсутствие каких либо библиотек (винду вроде переустанавливал?) 3. Ошибки в редактировании локации 4. Не подходящая фаза Луны). Это не шутка) Иногда (закономерность не обнаружил, но...) после работы в какой-то сторонней программе, чтения новостей в интернете и т.д. и т.п. бывает что СДК на стадии открытия локации зависает наглухо с такой же ошибкой и помогает только диспетчер задач... И это еще не всё - в это же время не запускается Сталкер - т.е. абсолютно любое сохранение и НИ на первой секунде входа в игру виснет намертво без лога и спасает опять же "кантрол+шифт+делейт". Что характерно - после непродолжительных танцев с бубном, то бишь пары перезагрузок компьютера, или оставление оного в покое например на сутки, всё возвращается в норму - и СДК загружается и работает нормально и Сталкер грузит любое сохранение...
-
Как то так: [logic] active = sr_idle [sr_idle] on_actor_inside = {-zashel} %+zashel% sr_idle@in - зашел ГГ, переходим в sr_idle@in [sr_idle@in] on_info = {=check_outfit} sr_idle@da, {!check_outfit} sr_idle@net - проверяем одет нужный костюм или нет, если одет идем в sr_idle@da, если нет идем в sr_idle@net [sr_idle@da] on_info = {+zashel} %+vidayem_info% sr_idle@tm - если одет нужный костюм, выдаем инфо и переходим в схему таймера (выдается инфо vidayem_info из него запускается смс-ка и спавнится бюрер) [sr_idle@net] on_actor_outside = %-zashel% sr_idle - если костюм не одет, ничего не происходит, и при выходе рестриктор возвращается в исходное состояние [sr_idle@tm] type = dec start_value = 60000 -запускаем таймер(время регулируем по себя) on_actor_outside = nil %+slabak% -если вышел до окончания таймера, выдается инфо на провал задания on_value = 0 | sr_idle@tm_da - если гг в рестрикторе и таймер закончился переходим в sr_idle@tm_da [sr_idle@tm_da] on_actor_inside = nil %+molodec% - по окончании таймера и присутствии гг в рестрикторе выдается инфопоршень, по которому делается остальное: засчитывается задание, отбираетс и выдается костюм и т.д. и т.п. Функция проверки костюма должна лежать в xr_conditions.script и выглядеть так: function check_outfit() local outfit = db.actor:get_current_outfit() if outfit and outfit:section() == "name_outfit" then return true else return false end end Дополнено 5 минуты спустя проверь библиотеки, вроде ругается на KernelBase.dll
-
Зачем такие сложности и замусоривание апдейта? Можно ведь сделать проще, тем более, что любой мод одним найденным/поднятым предметом явно не обойдется. Итак, идем в тот же бинд_сталкер, ищем функцию on_item_take и приводим её в такой вид: local my_info_table = { item_odin = "info_odin", item_dva = "info_dva", item_tri = "info_tri", -------еще пара итем-инфопоршень---------- -------еще пара итем-инфопоршень---------- -------------и так далее------------------ item_stopitsot = "info_stopitsot" } function actor_binder:on_item_take (obj) level_tasks.proceed(self.object) --game_stats.update_take_item (obj, self.object) if my_info_table[obj:section()] then db.actor:give_info_portion( my_info_table[obj:section()]) end end Что мы имеем? Здесь, при взятии item_odin получаем инфопоршень "info_odin", при взятии item_dva получаем инфопоршень "info_dva", и так далее в соответствии с таблицей, которую можно заполнять практически бесконечно. Естественно инфопоршни необходимо регистрировать в соответствующем файле info_локация, а уж с выданным инфопоршнем можно творить что угодно - запускать функцию: <action>скрипт.функция</action>, выдавать инфопоршень: <give_info>инфопоршень</give_info>, выдавать задание: <task>идентификатор_задания</task>, и прочее, и почее, и прочее... Дополнено 19 минуты спустя блин, просто напросто в свою локацию из оригинальной переместить файлы level.ai, level.gct, level.graf, конечно при условии, что в остальных локациях эти файлы оригинальные, и game.graf тоже
-
Ну, как вариант, поставить в нужном месте рестрикор с необходимыми размерами и высотой, ограничить его срабатывание каким либо условием, например инфопоршнем выдаваемым перед тем, как ГГ полезет туда откуда может шмякнутся, и при попадании в него ГГ выполнять то, что нужно. Как-то так: [logic] active = sr_idle [sr_idle] on_actor_inside = {+gg_polez_kudato} %+gg_shmyaknulsya% Еще вариант, поставить на апдейт и активировать в нужное время функцию такого плана: if has_alife_info("gg_polez_kuda_to") and (not has_alife_info("gg_shmyaknulsya"))then actor_position=db.actor:position() if level.name() == "имя_локации" then if actor_position.y < -8 then ---координата ''y'' стоящего на земле ГГ в месте вероятного падения script.function() Дополнено 1 минуту спустя Так о чем я и говорил с самого начала). Дополнено 24 минуты спустя первый спойлер Level Editor пункт 9 "Облет камеры"
-
Гм... Хотелось бы для общего развития узнать, как в таком коде: t = { section = "logic@esc_atp_bandit_kamp1" idle = 0, prior = 9, state = {0,1}, in_rest = "", out_rest = "", } со ссылкой на одну логику происходит переход из одного состояния в другое. Нет, в принципе это несложно, если в логике сделать например так: [logic] active = kamp [kamp] center_point = kamp_center_pusto radius = 1 meet = meet anim = sit_knee on_info = {=is_day} remark@slip [remark@slip] anim = wait no_move = true target = actor on_info2 = {!is_day} kamp НПС будет днем отрабатывать одну логику, а ночью другую, но смысл городить огород? Дополнено 0 минут спустя чудес не бывает, нужно искать дубликат секции combat ignore
-
Разве? В скрипте для обоих состояний одна и та же логика, причем секции дублируются, например t = { section = "logic@esc_atp_bandit_kamp1" idle = 0, prior = 9, state = {0,1}, in_rest = "", out_rest = "", } t = { section = "logic@esc_atp_bandit_kamp1" idle = 0, prior = 9, state = {0,1}, in_rest = "", out_rest = "", } Чем они отличаются? Для чего это дублирование? Почему для обоих состояний 0 и 1 одна и та же логика? По идее тут должен быть вылет, ибо игра вряд ли может понять "кто есть кто", и кто что должен делать. Посмотри внимательнее, как сделано у меня - для каждого НПС в скрипте отдельный код для каждого состояния с ссылкой на РАЗНУЮ секцию логики, соответственно в конфиге для каждого НПС две секции логики для каждого состояния. Представь себе - работает)))
-
sounds есть в 4 и 5 архиве. Проблема не в этом, повторю "условие задачи загадки"): - При наличии в корне игры папки gamedata, и отсутствии db-архивов (gamedata.db0-gamedata.dbb удалены, их нет в корне игры) - всё нормально, игра запускается, работает. Проблема начинается после упаковки геймдаты в db-архивы. Причем поисковик показывает, что эти файлы присутствуют по указанному в вылетах пути. Так с него и начинал) А вообще, пробовал разными конвертерами. ПС. Вообще склоняюсь в сторону "криворукости", хотя не понимаю каким образом - если кидаю свои звуки, модели, шейдеры в геймдату и упаковываю её в архивы, а скрипты, конфиги, аллспавн и т.д. в отдельный архив, то начинаются танцы с вылетами по [error]Description : Can't open wave file: [error]Arguments : d:\game\stalker\s.t.a.l.k.e.r. - shadow of hernobyl\gamedata\sounds\material\human\step\tmp_default4.ogg А вот если оригинал (урезанный) упаковать отдельно, а мои все файлы отдельно, то всё работает.
-
Смутил тот момент, что если не трогать архивы ТЧ, а тупо упаковать геймдату с изменениями, обозвать типа *.dbz, (Во вносимых изменениях есть и добавленные звуки), и добавить в корень игры, то почему-то всё работает) Возможно конечно и распаковщик, однако для распаковки после возникновения проблемы пробовал и STALKER_Data_Unpacker_RU и S.T.A.L.K.E.R. UE и Распаковщик + Упаковщик db архивов XrCompress от 11.02.2016 для ТЧ, ЧН, ЗП. В общем пока загадка) [options] exclude_exts = *.log,*.old,*.back bytes = 2 [include_folders] .\ = true ai = true anims = true configs = true levels = true meshes = true scripts = true shaders = true sounds = true spawns = true textures = true [exclude_folders] [include_files] .\ = true game.graph = true gamemtl.xr = true lanims.xr = true particles.xr = true resource.h = true senvironment.xr = true shaders.xr = true shaders_xrlc.xr = true stalkergame.inf = true [header] auto_load = true level_name = single level_ver = 1.0 entry_point = $fs_root$\gamedata\ creator = "gsc game world" link = "www.gsc-game.com" Это файл datapack.ltx в упаковщике.
-
[error]Expression : wave&&wave->length() [error]Function : CSoundRender_Source::LoadWave [error]File : E:\stalker\patch_1_0004\xrSound\SoundRender_Source_loader.cpp [error]Line : 65 [error]Description : Can't open wave file: [error]Arguments : d:\game\stalker\s.t.a.l.k.e.r. - shadow of hernobyl\gamedata\sounds\material\human\step\tmp_default4.ogg Файл tmp_default4.ogg имеется в db-архиве. Делалось - распаковывались архивы, в папку gamedata вносились изменения, добавление нужного и удаление лишнего. Распакованная геймдата работает (при этом из корня удалены все оригинальные db-архивы), вылет происходит только после упаковки геймдаты. ПС. Причем не упаковываются только звуки, т.к. при добавлении в корень игры папки gmedata/sounds со звуками, всё работает. ПС. Пользовался Распаковщик + Упаковщик db архивов XrCompress от 11.02.2016 для ТЧ, ЧН, ЗП