Serge! 127 Опубликовано 17 Сентября 2014 Поделиться Опубликовано 17 Сентября 2014 (изменено) использовать к примеру модуль нет-пакетов от Artosа где его можно посмотреть? Изменено 17 Сентября 2014 пользователем Kirgudu Ссылка на комментарий
Scarabay 98 Опубликовано 18 Сентября 2014 Поделиться Опубликовано 18 Сентября 2014 (изменено) Привет. Подскажите пожалуйста, как исправить баг с взятием предметов через стены\двери? Помню, давно где-то было решение. И как можно отключить взятие предметов пачкой, чтобы при одном нажатии кнопки подбирался только один, как это было в ТЧ? Изменено 18 Сентября 2014 пользователем Scarabay Мой YouTube-канал Ссылка на комментарий
Сталкер Лом 356 Опубликовано 18 Сентября 2014 Поделиться Опубликовано 18 Сентября 2014 Здоровенько, товарищ. как исправить баг с взятием предметов через стены\двери? Я спрашивал как-то раз, сказали, что заплатки нет, ибо если бы это было возможно, это поправили бы. Но я спрашивал с год назад, может, чуть поменьше, когда об исходниках двигла только мечтали. Но может быть уже с этим делом разобрались. По второму вопросу и я бы тоже послушал, что люди добрые скажут. Работы на Artstation - https://www.artstation.com/artist/stalker_lom Ссылка на комментарий
Jeka81 75 Опубликовано 22 Сентября 2014 Поделиться Опубликовано 22 Сентября 2014 Ранее я спрашивал: При наведении курсора на квестовый предмет появляется надпись "Поднять предмет(а)". Сам предмет заспавнен с начала игры. Можно-ли сделать так, чтобы до получения определенного инфопоршня эта надпись не появлялась и предмет невозможно было бы подобрать? На что был получен ответ от Serge! об использовании nonscript_usable (true/false). Посмотрел в оригинальных скриптах и нашел - использование такого метода в логике inventory_box. Создал квестовый предмет (бумажный сверток): [calendar_0_info]:device_pda $spawn = "quest_items\calendar_0_info"visual = dynamics\new_dynamics\roll\calendar_0.ogfinv_weight = 0.01inv_grid_width = 1inv_grid_height = 1inv_grid_x = 19inv_grid_y = 4description = calendar_0_info_descinv_name = calendar_0_infoinv_name_short = calendar_0_infocan_trade = falsecost = 0quest_item = truestory_id = calendar_0_info Разместил на локации в SDK: Прописал логику квестовому предмету: [logic]active = ph_idle@notup[ph_idle@notup]nonscript_usable = falseon_info = {+calendar_find_enable} ph_idle@up[ph_idle@up]nonscript_usable = true Т.е. по задумке пока не получен инфопоршень calendar_find_enable предмет нельзя подобрать и он себя "никак не выдает" (нет надписей-подсказок). Но что-то не так и сверток подбирается. Может кто подсказать что не так? Заранее спасибо! С#Н#Т#Р# (CoP 1.6.02) Ссылка на комментарий
AndreySol 215 Опубликовано 23 Сентября 2014 Поделиться Опубликовано 23 Сентября 2014 Может кто подсказать что не так? false и true местами поменяй.... Ссылка на комментарий
makdm 37 Опубликовано 24 Сентября 2014 Поделиться Опубликовано 24 Сентября 2014 (изменено) И так и так пробовал - не помогает... Если я не ошибаюсь, в ЗП предметы (объекты), которые ГГ может поднять в рюкзак, не могут иметь логики. Можно сделать( как обычно и делали разрабы сталкера) подмену объекта. Например вот так Для этого на локации в начале игры проспавните объект вот с такой секцией [calendar_fake_info]:inventory_box visual = dynamics\new_dynamics\roll\calendar_0.ogf custom_data = scripts\calendar_fake_info.ltx Секцию пропишите в devices.ltx ниже секции [inventory_box] Далее в файле calendar_fake_info.ltx пропишите логику вот такую [logic] active = ph_idle@notup [ph_idle@notup] nonscript_usable = false on_info = {+calendar_find_enable} ph_idle@nil %=destroy_and_spawn_new_object(calendar_0_info)% [ph_idle@nil] Добавьте в файл xr_effects.script следующую функцию function destroy_and_spawn_new_object(actor, obj, p) if p and p[ 1 ] then local section = tostring( p[ 1 ] ) local s_obj = alife():object( obj:id() ) if s_obj then local position, lv_id, gv_id = s_obj.position, s_obj.m_level_vertex_id, s_obj.m_game_vertex_id alife():create( section, position, lv_id, gv_id ) alife():release( s_obj, true ) end end end Ну и соответственно в файле quest_items.ltx должна быть прописана секция calendar_0_info После выдачи инфопоршня фейковый объект удалится и проспавнится новый, который ГГ сможет поднять в рюкзак Изменено 24 Сентября 2014 пользователем makdm 1 Ссылка на комментарий
Jeka81 75 Опубликовано 24 Сентября 2014 Поделиться Опубликовано 24 Сентября 2014 @makdm, спасибо за помощь - все работает как надо!!! Только не понял зачем прописывать в devices.ltx? Я этого не делал и так все работает Но теперь новая проблема - лист календаря (который надо как бы сорвать со стены) не появляется на стене, а падает. Т.е. фейковый висит как надо, а после подмены квестовый предмет "не хочет висеть где надо" и падает на землю. Как его зафиксировать? P.S. Вообще, заметил, что у квестовых предметов нет опции "зафиксировать кость". С#Н#Т#Р# (CoP 1.6.02) Ссылка на комментарий
AndreySol 215 Опубликовано 24 Сентября 2014 Поделиться Опубликовано 24 Сентября 2014 Вообще, заметил, что у квестовых предметов нет опции "зафиксировать кость". Наличие костей в модели не зависит от того квестовый он или нет. Если используешь для фейкового и нормального предметов одну и ту-же модель - просто добавь fixed_bone нормальному и будет тебе счастье... Ссылка на комментарий
Jeka81 75 Опубликовано 24 Сентября 2014 Поделиться Опубликовано 24 Сентября 2014 (изменено) Наличие костей в модели не зависит от того квестовый он или нет Не корректное замечание. Речь не шла о наличии или отсутствии костей. Извините, ёжику понятно что все физические объекты имеют кости. Просто у обычного физического объекта установленного на локацию как physic_object в свойствах есть опция "зафиксировать кость", а если этот же объект установить как quest_items, то у него уже такой опции нет. Вот и спросил - как его зафиксировать чтобы он не падал. Изменено 24 Сентября 2014 пользователем Jeka81 С#Н#Т#Р# (CoP 1.6.02) Ссылка на комментарий
AndreySol 215 Опубликовано 24 Сентября 2014 Поделиться Опубликовано 24 Сентября 2014 Насколько я понимаю, понятие "опция "зафиксировать кость"" это из SDK. Если ты предмет спавнишь скриптом - как с ним можно в SDK работать ? Вот и спросил - как его зафиксировать чтобы он не падал Как всегда - через кость: local pshell = obj:get_physics_shell() if pshell then local element = pshell:get_element_by_bone_name("link") if element then element:fix() end end Ссылка на комментарий
Jeka81 75 Опубликовано 25 Сентября 2014 Поделиться Опубликовано 25 Сентября 2014 @AndreySol, да, в свойствах объекта из SDK. Фейковый объект установлен изначально мной в SDK. Квестовый, получается, спавнится скриптом, вы правы. Куда нужно "встроить" написанное вами? С#Н#Т#Р# (CoP 1.6.02) Ссылка на комментарий
Scarabay 98 Опубликовано 25 Сентября 2014 Поделиться Опубликовано 25 Сентября 2014 @Jeka81, еще можно сразу в секции итема указать, вот как-то так: [jup_b219_gate]:physic_object $spawn = "dynamic_objects\scene_objects\jup_b219_gate" visual = dynamics\door\door_katakomb_big_4.ogf story_id = jup_b219_gate_id fixed_bones = link custom_data = models\objects\ignore_static.ltx 1 Мой YouTube-канал Ссылка на комментарий
AndreySol 215 Опубликовано 25 Сентября 2014 Поделиться Опубликовано 25 Сентября 2014 @Jeka81, Насчет указания фиксации кости в секции объекта - ничего сказать не могу, не проверял. Но проверю, интересная вещь... В скрипте можно сделать двумя способами: 1). Фиксация на клиентской стороне - создать объект, и после выхода его в он-лайн зафиксировать вышеприведенным кодом. 2). Фиксация на серверной стороне, с внесением изменений в нет-пакет объекта (пример с использованием модуля нет-пакетов от Artos): local ser_obj = alife():create(.....наш объект.....) if ser_obj then ----- фиксируем объект после создания ----- local pk = m_netpk.get(ser_obj) -- запрос нет-пакета if pk and pk:isOk() then local data = pk:get() -- читаем данные из нет-пакета if data then data.fixed_bones = "link" pk:set(data) -- сохраняем данные в нет-пакет end end end Второй способ проще, на мой взгляд... Ссылка на комментарий
Jeka81 75 Опубликовано 25 Сентября 2014 Поделиться Опубликовано 25 Сентября 2014 @AndreySol, к сожалению, я новичек в скриптовании и эти два способа только больше меня запутали Не знаю что такое клиентская сторона и серверная сторона. Но это пол беды. Во время тестов фейковый объект располагал "как есть" - не вращал его в редакторе. После подмены "правильный" предмет спавнился на месте фейкового. Сейчас фейк повернул (0,90,0) и обнаружилось, что квестовый спавнится не наследуя поворот фейкового, т.е. его поворот (0,0,0)! Новая проблема! С#Н#Т#Р# (CoP 1.6.02) Ссылка на комментарий
AndreySol 215 Опубликовано 25 Сентября 2014 Поделиться Опубликовано 25 Сентября 2014 и обнаружилось, что квестовый спавнится не наследуя поворот фейкового Ну так и должно быть - заспавненный скриптом объект не имеет никакого отношения к расстановке объектов в SDK... Насчет ориентации предмета - тот-же нет-пакет: data.direction = vector():set(0,90,0) к сожалению, я новичек в скриптовании и эти два способа только больше меня запутали опять-же, к сожалению, но модострой только посредством ковыряния в SDK и конфигах - однозначно не полноценный. Осваивайте скриптование... Ссылка на комментарий
makdm 37 Опубликовано 25 Сентября 2014 Поделиться Опубликовано 25 Сентября 2014 (изменено) Новая проблема! Что мешает развернуть серверный объект на 90 градусов против часовой стрелки вокруг оси Y до его вывода в онлайн? Попробуй так local s_obj = alife():create( spawn_section, position, level_vertex_id, game_vertex_id ) s_obj:set_yaw( 90 * math.pi / 180 ) Изменено 25 Сентября 2014 пользователем makdm Ссылка на комментарий
Serge! 127 Опубликовано 28 Сентября 2014 Поделиться Опубликовано 28 Сентября 2014 (изменено) Как я понимаю, событие actor_binder:on_item_take (obj) отрабатывает и при загрузке сейва, и при взятии предмета во время игры. Можно ли отследить в какой момент оно вызывается? Наверное есть или инфопоршень, или флаг. Пробовал просто отслеживать состояние объекта в онлайне, но нужного эффекта не получил. Изменено 28 Сентября 2014 пользователем Serge! Ссылка на комментарий
AndreySol 215 Опубликовано 28 Сентября 2014 Поделиться Опубликовано 28 Сентября 2014 Можно попробовать в actor_binder:update сделать: if device().precache_frame <= 1 then ... end Эта проверка сработает после пропуска некоего кол-ва апдейтов от начала загрузки, и соответственно всю загрузку лута в инвентарь. Соответственно можно использовать флаг, который установить по факту precache_frame <= 1 и проверять его в on_item_take. 1 Ссылка на комментарий
makdm 37 Опубликовано 28 Сентября 2014 Поделиться Опубликовано 28 Сентября 2014 отрабатывает и при загрузке сейва, и при взятии предмета во время игры. Абсолютно верно. Можно ли отследить в какой момент оно вызывается? У объекта меняется его parent_id. Можете поставить колбэк и отследить этот параметр. Вопрос - зачем это нужно? Сам колбэк on_item_take и есть обработка события. 1 Ссылка на комментарий
AndreySol 215 Опубликовано 28 Сентября 2014 Поделиться Опубликовано 28 Сентября 2014 Проясните плиз, что означает такая запись для кондлиста в smart_terrain ? cond = {+garbage_meetstalker_done},{+garbage_meetstalker_die} Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти