Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
boryan67 38 Опубликовано 8 Сентября 2013 Поделиться Опубликовано 8 Сентября 2013 Всем доброго дня. Установил на чистый ТЧ 1.0004 сборку "Внешнее хранилище" всеми уважаемого Artos. Лежит у меня давно, не вспомню откуда скачал - вот ссылка на нее http://rghost.ru/48630478. Выполнил все шаги установки по вложенной инструкции: Использование:1. Добавить в конфиги (например в system.ltx) секцию [custom_storage];2. Добавить в конфиги файл-конфиг модуля нет-пакетов (m_netpk.ltx):3. Скопировать se_stor.script m_netpk.script и m_helpers.script в папку скриптов игры.4. Добавить новый класс CUST_ST <-> clsid.custom_storage в файл class_registrator.script;5. Добавить в биндер актора коды вызова события "сохранение игры" или функцию сохранения хранилища;6. Внести изменения в алгоритм сохранения и чтения данных в биндере актора (bind_stalker.script); Кроме того, пунктом 7 добавил инициализацию модулей в _g.script о чем, кстати, в инструкции умалчивается. function start_game_callback() printf ("start_game_callback called") task_manager.clear_task_manager() treasure_manager.clear_treasure_manager() xr_sound.clear_all_sound_object() dialog_manager.fill_phrase_table() m_netpk.init() -- этот сразу подключил, есть инструкция к нему отдельная se_stor.init() -- этот уже позже, по безнадёге, но не помогло end Сохранение с НИ рядом с Сидоровичем благополучно происходит и загружается, но стоит с ним перетереть и выйти за дверь, так при попытке сохраниться получаю вылет: [error]Arguments : LUA error: ...ograms\s.t.a.l.k.e.r\gamedata\scripts\se_stor.script:143: attempt to call field 'size' (a nil value) Прошу поддержки как у автора, так и у всех, кто может пролить свет на правила пользования этим инструментом. Заранее благодарен. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-794361
Stalk15 27 Опубликовано 8 Сентября 2013 Поделиться Опубликовано 8 Сентября 2013 Кто-нибудь знает, каким способом можно получить координаты расположения курсора на экране? Singapur22 делал это, вот ссылка на его журнал: http://www.stalker-portal.ru/plug.php?e=weblogs&m=page&id=17245 . Но мне этот способ не подходит, так как создаваемые статики "перекрывают" основное окно. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-794365
*Shoker* 322 Опубликовано 8 Сентября 2013 Поделиться Опубликовано 8 Сентября 2013 (изменено) @boryan67, покажи 143-ю строчку скрипта (в Notepad++ например их видно) Скорее всего ты забыл добавить функцию table.size(), которая считает кол-во элементов в таблице. Кажется она сидит в m_helpers.script хотя точно не уверен, видимо ты его не до конца подключил. Так что или подруби её или перенеси её вручную в se_stor, поменяй название на какое нибудь table_size()и в скрипте измени все вызовы. Изменено 8 Сентября 2013 пользователем *Shoker* Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-794379
Kirgudu 1 328 Опубликовано 8 Сентября 2013 Поделиться Опубликовано 8 Сентября 2013 (изменено) @boryan67, просто в данном комплекте в модуле m_helpers.script не хватает реализации глобальной функции size пространства имён table.Добавь где-нибудь в модуле (например, в разделе expansion classes functionality) следующее: function fGetSizeTable(tTbl) if type(tTbl) == 'table' then --/ не таблица? if next(tTbl) then --/ не пустая? local iCnt = 0 for _,_ in pairs(tTbl) do iCnt = iCnt +1 end return iCnt --/> end else printf("fGetSizeTable:arg(%s)=[%s]~NOT_table:<%s>", type(tTbl), tTbl, "Warning!") end return 0 --/> end if not table.size then table.size = this.fGetSizeTable end Изменено 8 Сентября 2013 пользователем Kirgudu 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-794381
boryan67 38 Опубликовано 8 Сентября 2013 Поделиться Опубликовано 8 Сентября 2013 @Kirgudu, добавил приведенный фрагмент, стало заметно лучше. Сохранения/загрузки происходят, но только пока что-либо в хранилище не поместили. После записи в хранилище сохранение происходит, но при загрузке вылет: Arguments : LUA error: ...ograms\s.t.a.l.k.e.r\gamedata\scripts\se_stor.script:184: attempt to call field 'size' (a nil value) Та же хреновина, но теперь при загрузке. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-794408
Artos 99 Опубликовано 8 Сентября 2013 Поделиться Опубликовано 8 Сентября 2013 (изменено) @boryan67, строка se_stor.script:184 - чисто информационная и ее стОило бы изначально или закомментировать или стереть, но раз уж попала в комплект, то вот временное решение: а) Как уже дал подсказку Kirgudu в посте выше - добавить код для table.size . Или можно заменить в se_stor.script эти вызовы на m_netpk.table_size() . б) Добавить в конце _g.script строку: prefetch("m_helper") --/#!# common functions 'expansion helper' Немного позже выложу освеженный комплект... Изменено 8 Сентября 2013 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-794411
boryan67 38 Опубликовано 8 Сентября 2013 Поделиться Опубликовано 8 Сентября 2013 (изменено) @Artos, был бы премного благодарен за обновленный полнофункциональный комплект. Да, и не я один, думаю. Особенно важным для меня является сохранение во внешнем хранилище простых таблиц, о чем я уже в ЛС писал. Хотелось бы иметь правильно построенный и отрегулированный надежный инструмент, а не запатченный на коленках. Ибо, это очень важная составляющая мода и от надежности ее работы будет зависеть успешность трудов многих людей за несколько лет. Более того, хотелось бы услышать рекомендации автора по правилам и ограничениям применения данного инструмента. Изменено 8 Сентября 2013 пользователем boryan67 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-794415
Artos 99 Опубликовано 8 Сентября 2013 Поделиться Опубликовано 8 Сентября 2013 (изменено) @boryan67, суть внешнего (точнее универсального) хранилища - сохранять все, что помещено в db.storehouse и восстанавливать при загрузках игры. Соответственно если помещать в эту таблицу свои "простые" таблички и/или другие "простые" данные - то никаких проблем не возникнет. В последней версии сохранять можно гораздо больше типов данных (помимо строк, чисел, таблиц, ... можно сохранять вектора, таймеры, ...) и если получится вырезать из общего мода - к вечеру/ночи дам полный вариант". "Отрегулированность и надежность" данного метода (хранения) проверена уже годами на SIMBION'e и месяцами в LA (в несколько измененном виде). Однако замечу, что и надежность и оптимальность зависят от степени интегрированности кодов в весь скриптовой набор игры. В вышеуказанных модах все данные из пакета актора вынесены именно во внешнее хранилище, что исключило любые ошибки с переполнениями или невалидными данными. Т.о. если говорить о " зависимости успешности трудов многих людей за несколько лет" - то посоветую взглянуть все же на полный вариант использования хранилища. Если будет время - то дам два варианта: а) только хранилище с минимальными правками исходных кодов игры SoC и б) хранилище с рекомендованными расширениями. Второй вариант все же потребует работы головы и рук... ;-) Изменено 8 Сентября 2013 пользователем Artos 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-794417
Карлан 1 050 Опубликовано 14 Сентября 2013 Поделиться Опубликовано 14 Сентября 2013 Мне нужно написать таймер, и сохранить его в pstor или пакет, пока не выходит, не подскажете рациональный способ? local time = time_global() function my_timer() local delay = 300 if time_global()>time+delay*1000 then time=time_global() return true end end packet:w_u32(delay) delay = reader:r_u32() Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-795228
*Shoker* 322 Опубликовано 14 Сентября 2013 Поделиться Опубликовано 14 Сентября 2013 (изменено) Окей, начнём с того, что сохраняешь ты в сейв переменную delay, которая ВСЕГДА равна 300 вместо своего таймера timer. Притом там где ты её сохраняешь она скорее всего вообще не доступна и равна nil, т.к находится внутри функции my_timer() А закончим тем что этот таймер вообще бессмысленно сохранять потому что time_global() после перезагрузки начинает отчёт с нуля. Тебе тогда вместо time_global() нужно использовать game.time(), он ведёт отсчёт от начала новой игры. С ним возможно есть косяк с переполнением но тебе пока не стоит заботится об этой проблеме. local time = 0 local delay = 300 function my_timer() if time == 0 then --\\ Первый вызов этой функции time = game.time() else if game.time() > time+delay*1000 then time = game.time() return true end end end packet:w_u32(time) time = reader:r_u32() Этот таймер начнёт свой отсчёт после первого вызова. Опиши лучше подробней для чего тебе нужен таймер. Изменено 14 Сентября 2013 пользователем *Shoker* Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-795242
Карлан 1 050 Опубликовано 15 Сентября 2013 Поделиться Опубликовано 15 Сентября 2013 (изменено) Условно говоря таймер мне нужен для, ну допустим, "умер один сталкер, запустили таймер на час игрового времени, и через час умер второй". Соответственно в этот час мы можем сохраниться/загрузиться. Спасибо за пояснения, но(!) ранее в соседней теме критиковали game.time(), и высказывались в пользу game.get_game_time(). Как перевести таймер на метод game.get_game_time()? Просто хотелось бы сразу сделать как надо. Изменено 15 Сентября 2013 пользователем Карлан Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-795342
*Shoker* 322 Опубликовано 15 Сентября 2013 Поделиться Опубликовано 15 Сентября 2013 http://www.amk-team.ru/forum/index.php?showtopic=12753 В таком случаи найди здесь "Универсальные таймеры" и лучше используй их. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-795420
*Shoker* 322 Опубликовано 22 Сентября 2013 Поделиться Опубликовано 22 Сентября 2013 (изменено) Или я чего то не понял в работе этих функций в ЗП, или я чего то сломал, но: применяя на сталкере best_enemy(), best_danger() и get_enemy() они практически всегда возвращают nil даже если я стою перед ним и он сажает очередь за очередью из автомата. Кто нибудь сталкивался с подобным? Есть ли универсальный и точный способ определить что сталкер сейчас находится в состоянии опасности? Изменено 22 Сентября 2013 пользователем *Shoker* Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-796247
Старлей 88 Опубликовано 22 Сентября 2013 Поделиться Опубликовано 22 Сентября 2013 (изменено) Всем привет, возникла проблема при спавне вертолета через скрипт в Чистом небе. С вероятностью 80% будет получен вылет: * MEMORY USAGE: 317715 K * End of synchronization A[1] R[1] FATAL ERROR [error]Expression : motion_ID.valid() [error]Function : CKinematicsAnimated::ID_Cycle [error]File : E:\priquel\sources\engine\Layers\xrRender\SkeletonAnimated.cpp [error]Line : 208 [error]Description : ! MODEL: can't find cycle: [error]Arguments : $editor stack trace: Функция спавна: function heli(section,posx,posy,posz,lvid,gvid,logic) local obj = alife():create(section,vector():set(posx,posy,posz),lvid,gvid) local packet = net_packet() obj:STATE_Write(packet) -- свойства cse_alife_object local game_vertex_id = packet:r_u16() local cse_alife_object__unk1_f32 = packet:r_float() local cse_alife_object__unk2_s32 = packet:r_s32() local level_vertex_id = packet:r_s32() local object_flags = packet:r_s32() local custom_data = packet:r_stringZ() local story_id = packet:r_s32() local cse_alife_object__unk3_s32 = packet:r_s32() -- свойства cse_visual local model_visual = packet:r_stringZ() local cse_visual__unk1_u8 = packet:r_u8() -- свойства cse_motion local motion_name = packet:r_stringZ() -- свойства cse_ph_skeleton local skeleton_name = packet:r_stringZ() local cse_ph_skeleton__unk1_u8 = packet:r_u8() local cse_ph_skeleton__unk2_u16 = packet:r_u16() -- свойства cse_alife_helicopter local cse_alife_helicopter__unk1_sz = packet:r_stringZ() local engine_sound = packet:r_stringZ() --устанавливаем логику custom_data = "[logic]\ncfg = scripts\\heli\\"..logic..".ltx" -- теперь заполняем нужные параметры -- свойства cse_alife_object packet:w_begin(game_vertex_id) packet:w_float(cse_alife_object__unk1_f32) packet:w_s32(cse_alife_object__unk2_s32) packet:w_s32(level_vertex_id) object_flags = bit_not(5) -- ~5 = 0xfffffffa packet:w_s32(object_flags) packet:w_stringZ(custom_data) packet:w_s32(-1) packet:w_s32(cse_alife_object__unk3_s32) -- свойства cse_visual packet:w_stringZ(model_visual) packet:w_u8(cse_visual__unk1_u8) -- свойства cse_motion packet:w_stringZ(motion_name) -- свойства cse_ph_skeleton skeleton_name = "idle" packet:w_stringZ(skeleton_name) packet:w_u8(cse_ph_skeleton__unk1_u8) packet:w_u16(cse_ph_skeleton__unk2_u16) -- свойства cse_alife_helicopter cse_alife_helicopter__unk1_sz = "idle" engine_sound = "alexmx\\helicopter" packet:w_stringZ(cse_alife_helicopter__unk1_sz) packet:w_stringZ(engine_sound) -- считываем скорректированные параметры packet:r_seek(0) obj:STATE_Read(packet, packet:w_tell()) return obj end Также используется функция спавна пары этому вертолета: function heli_copy(section,pos,lvid,gvid,id,logic) --читаем данные из прототипа local prototype = alife():object(id) local packet1 = net_packet() prototype:STATE_Write(packet1) -- свойства cse_alife_object local game_vertex_id1 = packet1:r_u16() local cse_alife_object1__unk1_f32 = packet1:r_float() local cse_alife_object1__unk2_s32 = packet1:r_s32() local level_vertex_id1 = packet1:r_s32() local object_flags1 = packet1:r_s32() local custom_data1 = packet1:r_stringZ() local obj = alife():create(section,pos,lvid,gvid) local packet = net_packet() obj:STATE_Write(packet) -- свойства cse_alife_object local game_vertex_id = packet:r_u16() local cse_alife_object__unk1_f32 = packet:r_float() local cse_alife_object__unk2_s32 = packet:r_s32() local level_vertex_id = packet:r_s32() local object_flags = packet:r_s32() local custom_data = packet:r_stringZ() local story_id = packet:r_s32() local cse_alife_object__unk3_s32 = packet:r_s32() -- свойства cse_visual local model_visual = packet:r_stringZ() local cse_visual__unk1_u8 = packet:r_u8() -- свойства cse_motion local motion_name = packet:r_stringZ() -- свойства cse_ph_skeleton local skeleton_name = packet:r_stringZ() local cse_ph_skeleton__unk1_u8 = packet:r_u8() local cse_ph_skeleton__unk2_u16 = packet:r_u16() -- свойства cse_alife_helicopter local cse_alife_helicopter__unk1_sz = packet:r_stringZ() local engine_sound = packet:r_stringZ() --устанавливаем логику game_vertex_id = game_vertex_id1 level_vertex_id = level_vertex_id1 object_flags = object_flags1 if not logic then custom_data = custom_data1 else custom_data = "[logic]\ncfg = scripts\\heli\\"..logic..".ltx" end -- теперь заполняем нужные параметры -- свойства cse_alife_object packet:w_begin(game_vertex_id) packet:w_float(cse_alife_object__unk1_f32) packet:w_s32(cse_alife_object__unk2_s32) packet:w_s32(level_vertex_id) object_flags = bit_not(5) -- ~5 = 0xfffffffa packet:w_s32(object_flags) packet:w_stringZ(custom_data) packet:w_s32(-1) packet:w_s32(cse_alife_object__unk3_s32) -- свойства cse_visual packet:w_stringZ(model_visual) packet:w_u8(cse_visual__unk1_u8) -- свойства cse_motion packet:w_stringZ(motion_name) -- свойства cse_ph_skeleton skeleton_name = "idle" packet:w_stringZ(skeleton_name) packet:w_u8(cse_ph_skeleton__unk1_u8) packet:w_u16(cse_ph_skeleton__unk2_u16) -- свойства cse_alife_helicopter cse_alife_helicopter__unk1_sz = "idle" engine_sound = "alexmx\\helicopter" packet:w_stringZ(cse_alife_helicopter__unk1_sz) packet:w_stringZ(engine_sound) -- считываем скорректированные параметры packet:r_seek(0) obj:STATE_Read(packet, packet:w_tell()) return obj end В связи с этим вопрос какова причина вылета? P.S. Используется AI-вертолетов, во время спавна вертолеты будут переведены в online(спавнятся недалеко от ГГ). Изменено 22 Сентября 2013 пользователем Старлей Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-796354
Shredder 49 Опубликовано 22 Сентября 2013 Поделиться Опубликовано 22 Сентября 2013 m_netpk юзать не пробовал? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-796357
*Shoker* 322 Опубликовано 22 Сентября 2013 Поделиться Опубликовано 22 Сентября 2013 (изменено) Ты должен указать вертолёту его анимацию, параметр motion_name По умолчанию он прописан как $editor, поэтому происходит вылет. Тебе нужно тут:-- свойства cse_motionpacket:w_stringZ(motion_name) Указать название анимации, кажется idle чтобы просто висел. Изменено 22 Сентября 2013 пользователем *Shoker* 1 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-796358
Старлей 88 Опубликовано 22 Сентября 2013 Поделиться Опубликовано 22 Сентября 2013 ShredderПробовал, будет получаться вылет, какой не помню, со ссылкой на 431 строчку. При загрузке квик-сэйвов, поэтому был вынужден отказаться, обновленный m_netpk вышел недавно насколько я знаю. *Shoker*Сейчас попробую. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-796360
Artos 99 Опубликовано 22 Сентября 2013 Поделиться Опубликовано 22 Сентября 2013 (изменено) @Старлей, конечно можно пробовать и кое-как заставить работать то, о чем пишешь, но вероятность будет отлична от 100%, т.к. в работе с net_packet'ами в ЧН и ЗП есть нюанс и его требуется учитывать:При получении чистого пакета: local packet = net_packet() - из-за особенностей движка в ЧН и ЗН позиция записи может быть установлена не на начало и последующая запись в такой "чистый" пакет может происходить НЕ с начала. Далее, после записи своих данных, ты устанавливаешь позицию чтения в начало: packet:r_seek(0) - т.о. при записи параметров в объект могут попасть "лишние" байты, присутствовавшие в пакете, исказив все параметры...Чтобы этого не происходило, требуется при получении "чистого" пакета принудительно выставлять позицию записи полученного нового нет-пакета в начало (т.е. принудительно "очищать" его). local packet = net_packet() --/ получение "чистого" пакета packet:w_begin(0) --/ установка: начальная позиция записи данных (+2) obj:STATE_Write(packet) ... packet:r_seek(2) --/ установка: читать 'с начальной позиции записанных данных' (+2) - тут из-за отсутствия метода w_seek(number) используется метод w_begin(0), который устанавливает позицию записи в начало и прописывает 2 байта, которые при чтении следует пропустить: r_seek(2). (обо всем этом не раз уже писалось, хотя и давно...) Примечание: Актуальная версия m_netpk автоматически все это делает и заодно автоматом изменяет и критически важные дефолтные параметры (motion_name, startup_animation) и устанавливает флаги, остается, если требуется, добавить/изменить 'engine_sound'. P.S. @Старлей, твой вылет (MODEL: can't find cycle) связан с параметром 'startup_animation', который аналогично 'motion_name' нужно устанавливать в 'idle'. Ну а вылет при загрузке сэйва - вполне может быть связан и с другими причинами, например, в логике включаешь звук вертушке, а сам не потрудился его ей прописать... Изменено 22 Сентября 2013 пользователем Artos 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-796365
Старлей 88 Опубликовано 22 Сентября 2013 Поделиться Опубликовано 22 Сентября 2013 (изменено) *Shoker* 3/6 тестов прошли успешно, правда тут такая фишка с тестами... Тест 1: Запускаю сталкер, загружаю сейв, пытаюсь заспавнить - все хорошо спавнится. Тест 2: продолжаю Тест 1, не выходя из игры, загружаю этот же сейв - получаю вылет, указанный выше. Тест 3: запускаю заново сталкер, загружаю тот же сейв, вертолеты спавнятся на ура. Тест 4: опять же не выходя из игры, загружаю этот же сейв, при спавне вылет Тест 5 и 6 в том же духе. Artos Сейчас попробую, в принципе ты объясняешь почему, происходит вылет при загрузке сейва, не выходя из игры. Может быть и вправду где байт лишний затесался. =============== Artos Ты неправильно понял. Смотри: захожу я в сталкер, загружаю сейв, где я стою перед нпс, после диалога с котрым спавнятся вертушки, поговрил с ним - птички заспавнились, затем я загружаю этот же сейв, не выходя из игры, и во время нажатия фразы, после которой у меня должен спавниться вертолет - происходит вылет. Изменено 22 Сентября 2013 пользователем Старлей Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-796366
Artos 99 Опубликовано 22 Сентября 2013 Поделиться Опубликовано 22 Сентября 2013 (изменено) @Старлей, это уже начинаются погадалки... Если вылет при перезапуске сэйва (не выходя из игры) связан с: MODEL: can't find cycle - то тебе ясно расписано что требуется изменить параметр 'startup_animation' (помимо других) в момент спавна вертушки. Если вылет иной, то и приводи строки лога, в которых пишется о причине ошибки, дабы не гадать на кофейной гуще. Вполне вероятно, что у тебя проблемы с деревом диалога(ов), которое сохраняется со "старой" игры (НЕ пересоздается заново), т.к. треды диалогов обновляются/пересоздаются только при выходе из игры в ОС и загрузке сэйва. Проверяй прекондишены и пр. для твоих диалогов... Изменено 22 Сентября 2013 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/264/#findComment-796374
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти