Zander_driver 10 341 Опубликовано 6 Ноября 2011 Поделиться Опубликовано 6 Ноября 2011 MIDERY, Может быть, кроме анимации стоит еще здоровье этого НПСа убавить, чтоб он не сомневался в своей ранености? Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
MIDERY 0 Опубликовано 6 Ноября 2011 Поделиться Опубликовано 6 Ноября 2011 Zander_driver, А вы знаете, быть может вы и правы. Как же это сделать, уважаемый? Ссылка на комментарий
Tris 9 Опубликовано 6 Ноября 2011 Поделиться Опубликовано 6 Ноября 2011 Вопрос: ЗП 1.6.00 Написал скрипт, чтобы по истечению времени из инветаря удалялись одни предметы и спавнились другие вот код: local food = { bread = true, kolbasa = true, } local interval = 0 function porsha_food() if interval < time_global() then local time = game.time() + 300 for i=1, 300 do if game.time() == time then db.actor:iterate_inventory(function (dummy,item) if food[item:section()] then this.del_item(item) this.spawn_item(tostring(item:section().."_propal")) end end, nil) interval = time_global() + 1000 end end end Акривировал так: function actor_binder:update(delta) dfz_porsha_food.porsha_food() object_binder.update(self, delta) Но произошёл вылет с таким логом: FATAL ERROR [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 : d:\stalker cop\gamedata\scripts\bind_stalker.script:231: attempt to index global 'dfz_porsha_food' (a nil value) Помогите исправить? • Dead Forgetting Zone • Мои работы. Обновление: 24.08.2012 Ссылка на комментарий
Vano_Santuri 33 Опубликовано 6 Ноября 2011 Поделиться Опубликовано 6 Ноября 2011 Tris, О_о, я прям себя узнал 2 года назад. 1) end, nil) -- это убрать надо. а то бред какой-то. 2) kolbasa = true, } запятая после последней строки не нужна... Проверь,но это первое,что я заметил из синтаксических ошибок... Что-то кончается, что-то начинается... Ссылка на комментарий
_Призрак_ 11 Опубликовано 6 Ноября 2011 Поделиться Опубликовано 6 Ноября 2011 Vano_Santuri -- это убрать надо. а то бред какой-то. Нет, не надо. В метод iterate_inventory передается функция и какой то еще параметр. А то что ты указал - это последний end функции и передача nil в метод iterate_inventory Freedom Ссылка на комментарий
Tris 9 Опубликовано 6 Ноября 2011 Поделиться Опубликовано 6 Ноября 2011 Vano_Santuri, Исправил но вылетать продолжает. Вылет во время загрузки. FATAL ERROR [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 : d:\stalker cop\gamedata\scripts\bind_stalker.script:231: attempt to index global 'dfz_porsha_food' (a nil value) stack trace: • Dead Forgetting Zone • Мои работы. Обновление: 24.08.2012 Ссылка на комментарий
_Призрак_ 11 Опубликовано 6 Ноября 2011 Поделиться Опубликовано 6 Ноября 2011 (изменено) Tris local food = { bread = true, kolbasa = true } local interval = 0 function porsha_food() if interval < time_global() then local time = game.time() + 300 for i=1, 300 do if game.time() == time then db.actor:iterate_inventory( function (dummy,item) if food[item:section()] then this.del_item(item) this.spawn_item(tostring(item:section().."_propal")) end end, nil) interval = time_global() + 1000 end end end end Теперь у тебя этот вылет исчезнет А на будущее скачай себе script Syntax checker от Gun12 Изменено 7 Ноября 2011 пользователем Artos Freedom Ссылка на комментарий
Zander_driver 10 341 Опубликовано 6 Ноября 2011 Поделиться Опубликовано 6 Ноября 2011 MIDERY, Полезно почитать Можно примерно так: local h = object.health object.health = 0.05 - h Где object - это собственно нужный вам нпс. Как получить его объект, существует масса способов, начиная с того что проще всего его выцепить и запомнить по ид при спавне. После выполнения данного кода у него останется 5% от макс здоровья, независимо от того сколько было изначально. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
MIDERY 0 Опубликовано 6 Ноября 2011 Поделиться Опубликовано 6 Ноября 2011 Zander_driver, Чтож, чуть чуть почитал. Немного недопонял - как же все-таки это сделать, при спавне через all.spawn? Это, как я понимаю скрипт, но как его активировать при начале новой игры, без квестов и поршней? Как я понимаю, такой скрипт с объектом, чей story_id будет 10000 будет выглядеть так: local h = 10000.health 10000.health = 0.05 - h или надо прописать имя его профиля? Ссылка на комментарий
Zander_driver 10 341 Опубликовано 6 Ноября 2011 Поделиться Опубликовано 6 Ноября 2011 (изменено) MIDERY Ох ё... Конечно не так это будет. Для story_id будет так if object:story_id() == 1000 then local h = object.health object.health = 0.05 - h end для профиля так: if object:profile_name() == "тот_что_тебе_нужен" then local h = object.health object.health = 0.05 - h end для секции так: if object:section() == "секция_непися" then local h = object.health object.health = 0.05 - h end И раз уж оказалось непонятно, поясню подробнее: object здесь - это клиентский объект НПСа. тип данных *game_object. Изменено 7 Ноября 2011 пользователем Artos Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Artos 99 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 (изменено) Zander_driver, не с того ты начал пытаться объяснять/помогать ... MIDERY, учти, чуток почитал, чуток понял ... в скриптах/логике не прокатит. Исходняй вопрос: MIDERY ... как заспавнить раненного непися и сделать так, чтобы с ним можно было поговорить, но он при этом не вставал? Немного общей теории: 1. Заспавнить можно через all.spawn, или скриптом. В первом случае потребуется в секции спавна нужного НПС установить значение здоровья соответствующее "раненый" (об этом ниже). При чем, обязательно установить и параметр 'upd:health' в 'раненый', иначе НПС встанет со временем и начнет свою 'нормальную' жизнь. Во-втором случае, аналогично потребуется установить значениЯ здоровья в 'раненый', но с помощью нет-пакетов и новая игра не требуется. 2. Все неписи подчиняются общим схемам, в которую обязательно входит схема раненого (xr_wounded.script). В этой схеме неписям устанавливаются значения (hp_state,hp_state_see,psy_state ...) в которых определенным значениям здоровья сопоставляются определенные действия, т.е. какую позу принять, какую фразу сказать и пр. Если в логике НПС нет прописанных значений для этой схемы - значения устанавливаются по дефолту. Это значит, что при здоровье health <= 0.1 непись будет валяться и просить помощи. При health >= 0.5 - встанет и ... далее в зависимости от обстановки. 3. Возможность разговаривать с ранеными прописана в схеме xr_meet.script, которая дефолтно запрещает ГГ разговаривать с врагами, вояками и т.п. Также, в логике НПС может быть свои установки для ведения разговоров. Т.о. чтобы решить задачку исходного вопроса простым спавном и сбросом здоровья для НПС ничего не выйдет. Упасть может он и упадет, может какое-то время даже и поваляется, но ... не забываем, что для НПС работает реанимация здоровья и через некоророе время здоровье восстановится до 50% и НПС встанет как ни в чем ни бывало. Это означает, что или править параметр 'upd:health' до значения 'раненый' или написать логику для НПС чтобы даже при 100% здоровья валялся раненым до некоего события ... или ... тупо биндить этого непися и апдейтом сбрасывать его здорове до 'раненый'. Т.к. и в исходной игре (тот же раненый Толик у вагочика в ТЧ) и в модах немало примеров реализации спавна раненых и разговоров с ними - довольно странно, не смотря в уже имеющееся, пытаться без знаний и понимания реализовывать свою похотелку ... Так весь топик будет замусорен, что конечно же будет наказуемо. Изменено 7 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
SibireaStalker 0 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 Хочу написать скрипты на проверку положения ГГ (сидит, в глубоком приседание, стоит, идёт, бежит). Для худа нужно Знакомый скриптер подсказал, куда вставлять (в bind_stalker-е), вот только я не знаю как саму проверку сделать. Не поможете? Работаю с ЗП. Там, насколько я понял надо так начать: function_actor_sit Выводы модмейкера: 1)Вылетает - это хорошо. Значит, работает 2) Если хочешь сделать что-то хорошо, делай сам! 3) Если падёшь духом, падёт и мод. 4) Он живой... Ссылка на комментарий
Artos 99 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 (изменено) SibireaStalker, о-о-о ... батенька ... с азбукой скриптов/программирования у вас совсем напряженка. Пока Вам самостоятельно написать врядли удасться, а помощь выльется в многостраничные пояснялки азбучных понятий. Помочь то можно, но проще так: 1. Сформулируй подробно то, что хочешь получить в итоге. 2. Укажи/выложи те исходные данные, которые имеешь, т.е. критерии по которым ты считаешь нужно определять положение ГГ. Ну и ... сам почитай пока азы/основы по Lua и модингу, а тут может быть кто-то возьмется выдать тебе заготовку для доработки желаемого. Но твоя похотелка очень непростенькая и не за 5-минут. Изменено 7 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Dreamtale 2 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 (изменено) Коллеги, может, кто поможет? Ситуация такая: вылет по стори айди. FATAL ERROR [error]Expression : no_assert [error]Function : CALifeStoryRegistry::add [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\alife_story_registry.cpp [error]Line : 30 [error]Description : Specified story object is already in the Story registry! Предпосылки: да в общем-то, никаких. Сначала хотел создать респавнер, он не создался из-за этой ошибки. Далее стал проверять, что вообще творится, и в итоге выяснил, что через алл.спавн вообще перестали создаваться объекты! Пробовал на разных уровнях, в разных координатах, с разными секциями спавна, с разными СИДами (и без них). Дошло до того, что перед ГГ не создается банальный деревянный ящик при старте игры. Просто не представляю, что делать... Причем если откатиться на момент перед созданием этого респавнера, все работает (однако дело уже по ходу не в нем - ведь перестало создаваться ВООБЩЕ что-либо). Добавлено Пока писал пост, пришла идея - удалил последнюю рабочую секция спавна, на ее месте создал другую - заработало. При создании следующей секции опять вылет по стори айди. Единственная оставшаяся мысль, что у меня алл.спавн закончился... Но ведь такого не бывает, правда ведь? Изменено 7 Ноября 2011 пользователем Dreamtale Ссылка на комментарий
gruber 2 481 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 НИ начинал?Такой вылет бывает при изменении аллспавн и попытке загрузится с сохранки Ссылка на комментарий
Dreamtale 2 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 gruber, я не настолько неопытный, как может показаться по количеству сообщений. Начинал, конечно. В общем, после последней _рабочей_ секции алсспавна не спавнится ничего ни при каких условиях (проверил, кажется, все возможные варианты)... Как будто реально у него закончилось свободное место для предметов. Ссылка на комментарий
gruber 2 481 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 Dreamtale, Проще всего проверить твою теорию ,это удалить пару объектов и добавить вместо них свои,но какой же должен быть аллспавн чтоб в нем кончились места,помоему 65000 Ссылка на комментарий
Artos 99 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 (изменено) Dreamtale, место в аll.pawn'е закончиться не может. Даже если ты в него запихнешь более 65535 объектов, то все одно движек при создании новой игры ругаться будет уже на нехватку ID'ов, а не на сиды. Однозначно, подобные ошибки возникают при некорректных конфигах секций в распакованном спавне и/или некорректной запаковке, т.е. версия ACDC не правильно трактует классы пакуемых объектов. Выкладывай твой спавн (желательно и с распакованным вариантом) + конфиги + используемый упаковщик (ACDC) - попробуем найти причину. Думаю и KD87 поможет, если будет с чем помогать, а не гадать. Добавлено через 3 мин.: gruber, при загрузке сохранения all.spawn (хоть новый, хоть старый) - игнорируется. Поэтому из-за правки алл.спавна такие ошибки невозможны. Исключение только в модах, которые доспавнивают объекты в игру по секциям из алл.спавна. Кстати, Dreamtale, а не из-за сдвига ли секций в алл.спавне твоя проблема? Если в моде спавнятся объекты по секуиям из него, то как минимум требуется корректировка цифирек в кодах/скриптах независимо НИ или сэйв! Изменено 7 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Dreamtale 2 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 Да я пошутил про место - понятно, что оно не закончилось. Artos, Ок: ацдц от 11 октября, последняя секция спавна, при которой вылет: [9041] section_name=physic_destroyable_object position = -57.74195098877,-6.4983997344971,13.447357177734 direction = 0,0,0 game_vertex_id = 778 level_vertex_id = 4007 story_id = 10015 name = agr_under_box_9 distance = 0 object_flags = 0xffffff3a visual_name = physics\box\box_wood_01 physic_type = 0x3 mass = 10 Вообще, если более доступно описать проблему: Имеем n секций спавна, при добавлении секции n+1 получаем вылет. Удаляем секцию n+1 и еще в придачу n (в итоге получаем на одну секцию меньше, чем при последнем рабочем варианте) - все работает. Добавляем секцию n+1 (любую другую - не обязательно ту же самую, что в первой итерации - в итоге получаем количество секций, равное последнему рабочему варианту) - работает. Добавляем n+1 секцию и снова получаем вылет. То есть как бы я ни изгалялся, при достижении количества секций спавна числа n+1 получаю вылет. Также наверянка важная информация - если допустить явную ошибку в аллспавне (например, забыл из копипащенной секции удалить сид), размер лога - 7 r,? если все вроде бы должно работать - размер лога 17 кб... То есть, по идее, аллспавн он считывает и виснет уже потом. Ссылка на комментарий
Artos 99 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 (изменено) Dreamtale, далее - не будет исходногого материала - погадалки прекращаю. Куцые цитатки секции и домыслы - только для флуда годятся. 1. Номер твоей последней секции (9041) говорит что добавляешь в конец распакованных секций. 2. Номер game_vertex_id = 778 - говорит о том, что спавнишь в подземелья агропрома. Ну а при запаковке, эта секция получает совершенно иной номер(!), ей присваивается номер по порядку следования локаций и она попадает в середину, сдвигая все за ней последующие. Если в этих сдвинутых секциях имеется секция, номер которой в последующем используется для скриптового переспавна в игре - получаешь спавн совершенно иного объекта и вполне возможно с уже занятым сидом. При чем, скрипту нет-пакетов ты передаешь один класс объекта, хотя спавнится возможно совершенно иной - получаешь битый нет-пакет и вылет по некорректному сиду. Ну а то, что вначале все считывается, а уж потом происходит вылет - как раз ничего почти не говорит. Вначале из алл.спавна считываются конфиги и записываyюся заготовками объектов. Уже при повторной переинициализации объектов происходит обнаружения несоответствий/ошибок. Повторяю уточняющий вопрос: В скриптах твоего мода спавнятся ли объекты по секциям из алл.спавна? В особенности на локациях подземелья Агропрома и последующих? Изменено 7 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти