Dreamtale 2 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 Artos, Спасибо, понял. Спавнятся, да. Я, вообще, уже думал про нумерацию, но как-то отбросил эту идею... И как тогда правильно пронумеровать алл-спавн, чтобы подобных вылетов не было? Ссылка на комментарий
Artos 99 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 (изменено) Dreamtale all.spawn - не пронумеруешь 'ручками'! Его ACDC упаковывает и секции получают номера по порядку следования упаковываемых локаций. Чтобы избежать проблем со сдвигом номеров секций имеется несколько вариантов. - Не испльзовать спавн по секциям, заменив подобные коды на спавн более универсальным способом. Это не сильно сложно. Мною, например, уже из мода убраны все подобные зависимости и нет нужды ломать голову над ошибками переспавна. Переходы, рестрикторы и пр. - несложно спавнить скриптом и добавлять нужное нет-пакетами. - При спавне объекта по секции из алл.спавна в обязательном порядке перепроверять имя/секцию/класс полученного объекта и прерывать игру - дабы и ошибку понять и исправить. - После компилляции нового спавна в обязательном порядке распаковать полученный алл.спавн и уже из него взять в коды/скрипты актуальные номера секций для переспавна. Новая универсальная версия ACDC (см. соседний топик) позволяет контролировать актуальные номера секций нужных объектов и снижает рутину по поиску всех секций во всем распакованном спавне. Также новая версия позволяет создавать список всех объектов из алл.спавна с их актуальными номерами секций. Скриптом можно брать требуемое имя объекта и соответствующий ей номер секции. Изменено 7 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
gruber 2 481 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 Artos, Я конечно совсем не специалист в этой области и особо не вдавался в детали,но факт -подобный вылет имею с вероятностью 90%при попытке начать игру с сейва при измененном алспавне.И как это аллспавн не учитывается в сохранках,насколько я знаю все дин.объекты в игре будь то нпс или брошеное на землю оружие ,получают уникальный ИД который и пишется в сейв. П.С не буду спорить,так как не уверен в своей компетенции,говорю о том в чем убедился сам(насчет вылета при измененном аллспавн) Ссылка на комментарий
Dreamtale 2 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 Хм... Вообще, что-то я приврал - по номеру секции у меня ничего не спавнится. Декомпилировал, нашел одинаковые имена секций (внимательностью никогда не отличался). Однако кое-как оно все же работало до секции n. gruber, Сейв не по алл.спавну объекты считывает. При нерабочем алл.спавне с сейва всегда весело загрузишься. Ссылка на комментарий
Artos 99 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 (изменено) gruber В третий раз разжевывать причину и последствия? Выше не совсем корректно категорино заявил о неиспользуемости файла all.spawn в игре ... пути из него перечитываются при каждом запуске. Но (!) это не касается конфигов секций объектов. Все параметры из алл.спавна считываются из секций и прописываются заспавненным при создании новой игры объектам. Далее можно хоть что менять в секциях объектов (не путей!) - результата не будет. Но(!) если в процессе игры скриптом спавнится объект по прописанному ноиеру секции из алл.спавна - то этот номер ОБЯЗАТЕЛЬНО должен соответствовать именно тому объекту, который должен быть заспавнен, т.е. был в первоначальном алл.спавне для которого писались коды. Ошибки при спавне сдвинутых секций обнаруживаются порой не сразу. Ну вместо перехода или телепорта заспавнилось второе ведро иль ящик - делов-то ... обнаружится подмена только когда дойдешь до нужного места ... Но если так сдвигать - то в конце концов можно досдвинуться и до того момента, когда заспавнится уже объект (дубль секции) с прописанным ему сидом и который уже имеется к игре (это уже не второе ведро!). Вот тогда и вылетает игра с руганью на сиды ... Ну а 'уникальный игровой ИД прописываемый в сэйвы' - ни коим боком рядом не лежал с алл.спавном и его редактированием. Игровой ID рандомно получается при спавне объекта и запоминается в начатой игре, но ни как не связан с алл.спавном. Добавлено через 20 мин.: Dreamtale Имена секций можешь дублировать хоть сотни раз. Имена объектам в секциях - для разных локаций могут совпадать. Коллизии могут быть при одинаковых именаз на одном уровне ... И что-то мне не верится, что у тебя не спавнятся по секции из алл.спавна. Если мод на базе AMK-кодов иль аналогично исправляются переходы/телепорты на саргофаге ... уж не говорю о новых переходах аля NLC - то врядли нет спавна по секции. Симптомы твоей ошибки и затыка - говорят именно об этом. Скрипты/конфиги и алл.спавн - ты конечно же зажал ... ну что ж .. гадай далее сам. Изменено 7 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
SibireaStalker 0 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 SibireaStalker, о-о-о ... батенька ... с азбукой скриптов/программирования у вас совсем напряженка. Пока Вам самостоятельно написать врядли удасться, а помощь выльется в многостраничные пояснялки азбучных понятий. Помочь то можно, но проще так: 1. Сформулируй подробно то, что хочешь получить в итоге. 2. Укажи/выложи те исходные данные, которые имеешь, т.е. критерии по которым ты считаешь нужно определять положение ГГ. Ну и ... сам почитай пока азы/основы по Lua и модингу, а тут может быть кто-то возьмется выдать тебе заготовку для доработки желаемого. Но твоя похотелка очень непростенькая и не за 5-минут. 1) Хотим попробовать реализовать старый худ с человечком. Нууу, как это объяснить - как в ТЧ, помнишь такой синий человечек в левом нижнем углу экрана? 2) Нужные положения ГГ: идёт, стоит, пригнулся, сильно пригнулся, бежит. Насколько понял, вставлять надо сюда: function actor_binder:update(delta) object_binder.update(self, delta) [b]--сюда!!![/b] if string.find(command_line(), "-designer") then return end Выводы модмейкера: 1)Вылетает - это хорошо. Значит, работает 2) Если хочешь сделать что-то хорошо, делай сам! 3) Если падёшь духом, падёт и мод. 4) Он живой... Ссылка на комментарий
Dreamtale 2 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 (изменено) Artos, Я ничего не зажимал. Тебе всю папку геймдата выложить? И что, ты будешь по всем конфигам копаться? Хм... Ладно, спасибо за предложение - поеопаюсь пока сам - если ничего не выйдет, выложу. Изменено 7 Ноября 2011 пользователем Artos Ссылка на комментарий
Artos 99 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 (изменено) SibireaStalker Прежде чем думать куда вставлять - нужно иметь ЧТО вставлять. Порой от 'что' меняется и место вставки ... Хотя пока твое предположение скорее всего правильно, т.к. именно апдейт актора потебуется для мониторинга его положений. Ну а пока ... судя по словам "как в ТЧ" - одна версия игры отпала ... осталось две. ;-) Бум гадать далее? Такими тэмпами за пол годика может что-то и выйдет ... Несколько удивляют слова: Хотим попробовать реализовать старый худ с человечкомПохотелка Ваша - реализация чья-то ... ;-) Кроме 'хотим' есть еще хоть что-то? Dreamtale Тому кто имеет навыки и знания не обязательно во всем ковыряться ... порой по температуре больного и внешнему виду можно поставить диагноз ... Но не видя больного - это уже иль к телепатам иль к шарлатанам. Изменено 7 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
strelok200 0 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 (изменено) Я создал задание: уничтожить БТР Вот логика БТР [logic] active = ph_car on_death = ph_death [ph_death] on_info = %+dead_btrt% [ph_car] target = actor fire_range = 80 fire_repeat = 50 auto_fire = true track_target = true Но выдача инфопоршня не срабатывает. Почему? Изменено 7 Ноября 2011 пользователем Artos Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
Artos 99 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 (изменено) strelok200, а почему ты не смотришь как подобное сделано в других модах (в том же АМК)? Автотранспорт не подчиняется многим схемам, это особые объекты и применение кодов для них требует изучения туторов и собственно кодов/схем относящихся к автотранспорту (как в прочем и для вертолетов!). "Посмертный" инфопоршень для машин (БТР'ов) ставится на 'свой' параметр (on_death_info) в схеме ph_car, т.е. типа: [ph_car@eliminate] target = actor fire_range = 120 fire_repeat = 50 auto_fire = true track_target = true on_info = {+esc_blockpost_btr_alarm} %=btr_attack_choose% on_info2 = {+esc_blockpost_normal} ph_car@idle on_death_info = esc_btr_mil_death;<= посмертный инфопоршень Изменено 7 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Dreamtale 2 Опубликовано 8 Ноября 2011 Поделиться Опубликовано 8 Ноября 2011 В общем, как будто удалось локализовать проблему: при добавлении новых секций алл.спавна в соответствующий файл уровня из дефолтного алл.спавна и последующей его компиляции в игру все работает (а секций там явно больше, чем в моем глючном). Видимо, что-то не то удалил (только вот что?). Скриптовый спавн точно ни при чем - вывел из биндера все скрипты, которые что-либо спавнят в начале игры, и все равно вылет сохранялся. Ссылка на комментарий
KD87 718 Опубликовано 8 Ноября 2011 Поделиться Опубликовано 8 Ноября 2011 Dreamtale, залей спавн, посмотрю. Ссылка на комментарий
SibireaStalker 0 Опубликовано 8 Ноября 2011 Поделиться Опубликовано 8 Ноября 2011 Artos, а если попробывать по образцу проверки наличия предмета: function actor_sit() if db.actor:sit then return true end return false end Выводы модмейкера: 1)Вылетает - это хорошо. Значит, работает 2) Если хочешь сделать что-то хорошо, делай сам! 3) Если падёшь духом, падёт и мод. 4) Он живой... Ссылка на комментарий
*Shoker* 322 Опубликовано 8 Ноября 2011 Поделиться Опубликовано 8 Ноября 2011 (изменено) SibireaStalker 1) db.actor:sit() 2) А ты уверен что такая функция sit() вообще в движке существует? Её там нету. Да и вообще как мне кажется, нету способа определить состояние тела ГГ. 3) Ну и с таким уровнем познаний в скриптах ты просто не напишешь желаемое. Это довольно не лёгкое дело, нужно знать массу тонкостей. Кстати, а может через класс move() можно как то вернуть состояние тела ГГ, никто не пробовал? Изменено 8 Ноября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
RvP 1 Опубликовано 8 Ноября 2011 Поделиться Опубликовано 8 Ноября 2011 по идее можно взять правленые библиотеки и ловить клавиши приседания Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий
Ulman 5 Опубликовано 8 Ноября 2011 Поделиться Опубликовано 8 Ноября 2011 Ребята, помогите пожалуйста, две такие проблемы, первая это такой вылет: [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...r. - shadow of chernobyl\gamedata\scripts\amk.script:119: attempt to index field '?' (a nil value) 119 строка выглядит так: local x = tips_icons[sender][1] что в ней не так, я не знаю. А второй вылет такой: Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...s.t.a.l.k.e.r\gamedata\scripts\anomaly_evader.script:209: attempt to perform arithmetic on field '?' (a nil value) 209 строка выглядит так: rdelta[nid][anomid]=rdelta[nid][anomid]+0.1 Помогите пожалуйста, заранее огромное спасибо. Ссылка на комментарий
Dreamtale 2 Опубликовано 8 Ноября 2011 Поделиться Опубликовано 8 Ноября 2011 KD87, Спасибо, уже разобрался. Точно установить косяк не смог, но аккуратно вкопипастил все нужные секции в дефолтный спавн и удалил ненужные - работает. Уверен, что дело в опечатке (как всегда), которую в начале просто не смог отловить. По крайней мере, сейчас все спавнится нормально. Ulman, У тебя синтаксис скрипта хромает. Лог ошибки свидетельствует о том, что луа не может распарсить то, что ты там накодил (а именно - цифры 1 и 0,1). Что хотел-то получить в итоге? Ссылка на комментарий
AndreySol 215 Опубликовано 8 Ноября 2011 Поделиться Опубликовано 8 Ноября 2011 В файле bind_stalker.script есть такие callback-фунции: ---------------------------------------------------------------------------------------------------------------------- function actor_binder:level_border_enter(npc, info_id) self.actor_detector:actor_enter() end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:level_border_exit(npc, info_id) self.actor_detector:actor_exit() end ---------------------------------------------------------------------------------------------------------------------- я правильно понимаю, что они связаны с выходом актера с локации и появлением на локации ? Ссылка на комментарий
Artos 99 Опубликовано 8 Ноября 2011 Поделиться Опубликовано 8 Ноября 2011 (изменено) strelok200, Ulman, Dreamtale Постарайтесь не флеймить ... Погадалки, тем более не имеющие никакого смысла, никому и не помогут и только замусоривают топик/форум. Ulman Даже если ты до сих пор не знаешь простых толкований строк ошибок в логе, то мог бы просто перевести эти строки в онлайн переводчике и понять смысл. Ничего нет в этом сложного и не заслуживает в сотый раз разъяснять что: а) : attempt to index field '?' (a nil value) - попытка получить из таблицы поле по ключу 'nil', что в Lua недопустимо. б) : attempt to perform arithmetic on field '?' (a nil value) - попытка арифметического действия с 'nil' значением, что так же недопустимо в Lua. По а): Где-то в (твоих) скриптах потерялось значение 'sender', т.е. вызывается функция показа новостной строки с нИлевым аргументом. По б): Где-то в (твоих) скриптах потерялся идентификатор аномалии 'anomid' и схема обхода аномалии не может получить табличные коэффициенты для этой аномалии чтобы сложить их с числом (+0.1). Причины может быть и не в твоих правках и уж тем более не в указанных в логе скриптах, а в сторонних скриптах и/или стечение обстоятельств ... Например, что-то удалило объект/аномалию в момент, когда НЕ нужно ... Добавлено через 6 мин.: AndreySol, подсказка дана самими разработчиками в том же xr_detector.script, на которую ссылаются тобою упомянутые коллбэки: actor_enter() --/ Игрок входит в разрешенную границу уровня (покидает опасную территорию) actor_exit() --/ Игрок покидает разрешенную границу уровня (входит на опасную территорию) Если вспомнить, как начинает верещать детектор при приближении актора к краям локаций в некоторых местах - станет все ясно 'о чем эти коллбэки'. Изменено 8 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
AndreySol 215 Опубликовано 8 Ноября 2011 Поделиться Опубликовано 8 Ноября 2011 -- записываем переменную function save_variable(variable_name, value) xr_logic.pstor_store(db.actor, variable_name, value) end pstor - это наверно можно расшифровать как Pointer Storage ? Т.е. так движок позволяет хранить user-данные ? Эти данные будут хранится только на сеанс работы или будут сохранятся в сохранениях ? Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти