Перейти к содержанию

Рекомендуемые сообщения

 
 

Belka_mod Пример в Custom data:
[spawn]
energy_drink = 4
bread = 2
Спавнится 4 энергетика и 2 хлеба. Думаю разберёшься

 

  • Мастер! 1

А колбасу и батоны нынче хреновые делать стали...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
26 минут назад, FalkineIsaku сказал:

[spawn]
energy_drink = 4
bread = 2
Спавнится 4 энергетика и 2 хлеба. Думаю разберёшься

Ещё можно шанс задать.

energy_drink = 1, prob=0.05
Процент классический: 1.0 = 100%

 

Изменено пользователем Vodka
  • Мастер! 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Добрый вечер, скажите, пожалуйста какие компиляции надо делать после изменения локации ( т.е после того как часть объектов удалил, часть переставил, и добавил новых)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

D37a8b Можно же загуглить: Уроки по SDK 0.7, вопросы по SDK следует задавать в этой теме. Перед тем как задавать вопрос, пожалуйста, попробуйте загуглить его в интернете. А компилировать нужно кнопочкой Compile ---> Build.


А колбасу и батоны нынче хреновые делать стали...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Приветствую!
В общем я так и не смог найти причину вылета (лог ниже), а сил и времени разбираться остается мало. Логирование 1270-ой строки мне не удалось сделать, так как не умею, а разобраться не смог.

Спойлер

Expression    : fatal error
Function      : lua_pcall_failed
File          : c:\xray\forward frontier\public build\src\layers\xrrenderdx10\dx10resourcemanager_scripting.cpp
Line          : 140
Description   : <no expression>
Arguments     : LUA error: ...mes\stalker_Çîâ Ïðèïÿòè\gamedata\scripts\xr_logic.script:1270: attempt to index local 'obj' (a nil value)

Я не знаю где искать ошибку. Вылет происходит при проматывании времени как угодно: логикой, местом для сна или просто проматыванием времени. После какого-то периода времени при сохранении и загрузке происходит вот этот вылет. 
Можете помочь хоть как-то? Как можно сделать логирование 1270-ой строки?

Спойлер

Я знаю, что этот вылет происходит из-за того что движок пытается прочитать значение несуществующего объекта, объяснять мне это не нужно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
4 минуты назад, ZaKoN232 сказал:

Приветствую!
В общем я так и не смог найти причину вылета (лог ниже), а сил и времени разбираться остается мало. Логирование 1270-ой строки мне не удалось сделать, так как не умею, а разобраться не смог.

  Лог вылета (Показать контент)

Expression    : fatal error
Function      : lua_pcall_failed
File          : c:\xray\forward frontier\public build\src\layers\xrrenderdx10\dx10resourcemanager_scripting.cpp
Line          : 140
Description   : <no expression>
Arguments     : LUA error: ...mes\stalker_Çîâ Ïðèïÿòè\gamedata\scripts\xr_logic.script:1270: attempt to index local 'obj' (a nil value)

 

могу напутать, но помнится что-то такое было, когда у меня была ошибка в синтаксисе, например, then или что-то по типу такого забыл написать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
29 минут назад, ZaKoN232 сказал:

Логирование 1270-ой строки мне не удалось сделать, так как не умею, а разобраться не смог.

  Лог вылета (Скрыть контент)

LUA error: ...mes\stalker_Çîâ Ïðèïÿòè\gamedata\

 

Ку! Нет нужды логировать, так как здесь ошибка очевидна. Точнее, не столько ошибка, сколько отсутствие внятных объёмов тестирования на этапе производственного ада, что привело к этому (и  ещё тысяче подобных мест в модах-последователях), где, казалось бы, "всё должно работать", а по факту "оно вылетает". Прикрепляю патч (фикс) с ассертом существования или дефолтом в случае фейла. Вылетать таперича не будет, но за другие эффекты типа "что-то пошло не так" не ручаюсь.

Кроме того, там в логе у вас путь к игре содержит абракадабру. Это не есть гуд в любом случае. Надо стараться помещать в короткие папки исключительно с английскими именами, типа

c:\games\CoP

xr_logic.script

Изменено пользователем BarmaGlot

Я логи в баню удалил, а вот за за рейдеры – не помню!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

BarmaGlot Не помогло. Вылет в той же функции, но сам вид вылета поменялся. (Хоть какое-то продвижение😅)
Название папки поменял.
 

Спойлер

[error]Expression    : fatal error
[error]Function      : lua_pcall_failed
[error]File          : c:\xray\forward frontier\public build\src\layers\xrrenderdx10\dx10resourcemanager_scripting.cpp
[error]Line          : 140
[error]Description   : <no expression>
[error]Arguments     : LUA error: c:\games\cop\gamedata\scripts\xr_logic.script:1274: attempt to index a nil value

Спойлер

function pstor_retrieve(obj, varname, defval)
    -- Barmaglot fix
    -- local npc_id = obj:id()
    local npc_id = obj and obj.id and obj:id() or 0

    if db.storage[npc_id].pstor ~= nil then   ------------------- 1274-ая строка
        local val = db.storage[npc_id].pstor[varname]
        if val ~= nil then
            return val
        end
    end
    if defval ~= nil then
        return defval
    end
    --abort("xr_logic: pstor_retrieve: variable '%s' does not exist", varname)
    return nil
end

 

Изменено пользователем ZaKoN232

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
25 минут назад, ZaKoN232 сказал:

Хоть какое-то продвижение

К сожалению для вас - нет. Исходная причина так и не устранена.
Насколько я понимаю причина не в данной функции а в том, что кто-то ее вызывает с некорректными параметрами.

Изменено пользователем denis2000

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

ZaKoN232 Сорри, мой косяк: недоассертировал до конца, понадеялся на авось. И даже не проверял на запущенной игре))) Перекачайте и перезапишите файл, прикрепляю...

Добавил недостающий ассерт. А denis2000 правильно говорит: проблема останется, просто вылет должен исчезнуть.

denis2000 Как можно в оригинальном CoP логировать? Насколько знаю, printf и подобные функции вырезаны.

И сразу сам себе отвечаю, поскольку делал уже))) ну и память, мешок барахла, старость не радость, а кумпол отбитый-пропитый.

function printb(fmt,...) -- formatted logging
    local file=io.open("gamedata//log_file.log","a")
    file:write(string.format(fmt,...),"\n")
    file:close()
end

xr_logic.script

Изменено пользователем BarmaGlot
Сам себе ответ
  • Мастер! 1

Я логи в баню удалил, а вот за за рейдеры – не помню!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

BarmaGlot Спасибо!
Вылет ушел свой дорогой, как ты и говорил появились другие косяки, но хоть этот злополучный вылет ушел, если что то вылет теперь отводит в другой скрипт

Спойлер

[error]Expression    : fatal error
[error]Function      : lua_pcall_failed
[error]File          : c:\xray\forward frontier\public build\src\layers\xrrenderdx10\dx10resourcemanager_scripting.cpp
[error]Line          : 140
[error]Description   : <no expression>
[error]Arguments     : LUA error: c:\games\cop\gamedata\scripts\xr_statistic.script:562: attempt to index field 'actor' (a nil value)

Я очень рад, что избавился от прошлого вылета. Осталось понять почему он происходил, но тут я как-нибудь сам, да и с этим вылетом тоже пороюсь.
Еще раз спасибо!

Изменено пользователем ZaKoN232
  • Жму руку 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

ZaKoN232 Киньте в меня ваш xr_statistics.script, что-то я в своём от оригинального CoP вообще такой строки не вижу. А также киньте сейв на файлообменник: если игра не сильно модирована и у меня загрузится – гляну возможный корень зла. На вскидку, и мы об этом ранее говорили с вами: db.actor не инициализирован в моменты обращения к его свойствам...


Я логи в баню удалил, а вот за за рейдеры – не помню!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

BarmaGlot 

6 минут назад, BarmaGlot сказал:

что-то я в своём от оригинального CoP вообще такой строки не вижу

У вас нет такой строки из-за того что в моде используется оружейный пак, из-за чего количество строк увеличилось.

2 минуты назад, BarmaGlot сказал:

На вскидку, и мы об этом ранее говорили с вами: db.actor не инициализирован в моменты обращения к его свойствам...

Да, я помню.

4 минуты назад, BarmaGlot сказал:

А также киньте сейв на файлообменник: если игра не сильно модирована и у меня загрузится – гляну возможный корень зла

Не выйдет. Игра модернизирована во многих аспектах


Вот сам файл
xr_statistic.script
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

ZaKoN232 На вскидку, я бы поменял в файле configs\misc\achievements.ltx где только возможно все указания типа

functor        = xr_statistic.блаблабла

на

functor        = xr_conditions.блаблабла (предварительно убедившись, что такая функция там объявлена)

Начать можно именно с той строки, которая на текущий момент и приводит к вылету: вместо

functor        = xr_statistic.wealthy_functor

пишем

functor        = xr_conditions.wealthy_functor

Это может прямо влиять и даже уже быть неким утерянным чьим-то патчем. Если не проканает, то увы – без полного кода всего мода копать мне смысла нет, а с полным кодом – нет времени на разбор пролётов, ибо своих выше крыши. Ежели, напротив, финт получится, то заменить все прочие аналоги как написано ранее.

P.S. гарантированно вылет можно вылечить иначе, если пропарсить xr_statistic.script на предмет обращений к db.actor и везде-везде перед этими обращениями вставлять заглушки типа:

if not db.actor then return some_value end

разумеется, смотря по контексту, что должна возвращать эта функция и соответсвенно меняя some_value на nil или инициализаторы типа пустых строк, нулей, пустых таблиц и так далее. Но это будет, конечно, костыль в чистом виде. Однако пациент гарантированно встанет с инвалидного кресла.

Изменено пользователем BarmaGlot
  • Спасибо 1

Я логи в баню удалил, а вот за за рейдеры – не помню!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

2 часа назад, ZaKoN232 сказал:

\xr_logic.script:1274: attempt to index a nil value

Это серьезная ошибка! К сожалению, простой затычкой не получится исправить проблему! Без исправления самой причины краша, вылеты последуют и безлоговые! Я много раз получал данный вылет.Где-то вис коллбек, где-то висла функция, где-то логика была причиной! Единственный вариант узнать что за объект. Исходя из этого решать проблему! В чистом движке, ох как не хватало пространства имен debug, а именно traceback

Изменено пользователем Mass

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Mass В том то и дело, что происходит вылет по неизвестной причине и неизвестно когда он начался. Происходит он на только одной локации (была добавлена мной, ошибок на ней не было несколько месяцев). Объектов на этой локации всего 7, и то это тестовые смарт-террейны, если их вырезать и оставить пустую локацию без объектов, кроме самых необходимых для работы локации, то вылет останется.

Изменено пользователем ZaKoN232

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
13 часов назад, ZaKoN232 сказал:

[error]Function      : lua_pcall_failed
[error]File          : c:\xray\forward frontier\public build\src\layers\xrrenderdx10\dx10resourcemanager_scripting.cpp
[error]Line          : 140
[error]Description   : <no expression>
[error]Arguments     : LUA error: c:\games\cop\gamedata\scripts\xr_logic.script:1274: attempt to index a nil value

это логическая ошибка, а не из-за неправильного синтаксиса скрипта, как бы Function   - lua_pcall_failed на это указывает, сбой происходит при вызове функции, и скорее всего ты используешь скрипты от оригинала ЗП на другом правленом движке, возможно ошибка возникла на этапе подключения новой локации, но чтоб устранить такую ошибку возможно тебе придётся перелопачивать все скрипты))

  • Жму руку 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

ZaKoN232 Выход у вас ровно один: Включайте логирование в файл, как предложил BarmaGlot. Ищите все скрипты  (в том числе и не правленые) откуда вызывается функция pstor_store (их не так и много 10 шт). ПЕРЕД вызовом функции пишите в лог подробности вызова (какой скрипт вызывает, что за объект, что за переменная). В вашем случае объект для которого вызывается сохранение переменной уже nil, но вот скрипт и имя может, подсказать направление поиска.
Дожидаетесь вылета - читаете лог и будете знать по крайней мере более подробно причины.

Изменено пользователем denis2000
  • Мастер! 1
  • Жму руку 1

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

CiberZold denis2000 
Спасибо за помощь, но воспользовался логинированием и обнаружилось что вылет вызывает скрипт atmosfear-ера. 
Мои кривые руки напортачили в адаптации. Я вырезал атмосфеар и все заработало. 

BarmaGlot Отдельное спасибо!

  • Жму руку 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Можно ли сделать, чтобы во время показа туториала блокировались все кнопки, чтоб его нельзя было пропустить или поставить на паузу?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Boomer тут поможет, вроде как, =disable_ui (если я конечно понял правильно)

p/s я понял не правильно

 

Изменено пользователем ZaKoN232

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
1 час назад, Boomer сказал:

Можно ли сделать, чтобы во время показа туториала блокировались все кнопки, чтоб его нельзя было пропустить или поставить на паузу?

Boomer В bind_stalker.actor_binder:ipdate() используется такой метод, например, когда актёра вежливо бьют в лицо. Это полностью блокирует любой ввод.

    -- Обновление отключения ввода с клавиатуры.
    if self.st.disable_input_time ~= nil and
        game.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idle
        then
        level.enable_input()
        self.st.disable_input_time = nil
    end

Вероятно, вас также может заинтересовать метод level.disable_input(), который можно вызвать в момент старта тюториала. Если этот "level.disable_input()" пошерстить в скриптах, то там найдутся и несколько обёрнутых функций, в т.ч. отключения UI на заданное время.

Изменено пользователем BarmaGlot

Я логи в баню удалил, а вот за за рейдеры – не помню!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
2 часа назад, Boomer сказал:

Можно ли сделать, чтобы во время показа туториала блокировались все кнопки, чтоб его нельзя было пропустить или поставить на паузу

ну ты можешь во время старта туториала в функции применить метод level.disable_input(), а по окончании тутора в функции function_on_stop прописать свою функцию, которая бы обратно врубала управление.

мне например правда на движке огсе, надо было сделать, чтоб во время отрезания части мутанта игралась анимация камеры, и чтоб игрок не мог в это время её скипнуть, двигаться и пр., - я как раз при начале отрезания, использовал метод level.disable_input() и сразу же запускал таймер через огсе-скрипты, там есть скрипт, что запускает другой скрипт по окончанию таймера, поставил там 3 секунды и он по окончанию запускал другой скрипт, единственным назначением которого было включение управления обратно через level.enable_input(), получилось круто) учитывая ограниченный функционал ТЧ-движков, в ЗП в этом плане возможностей то побольше.

1 час назад, BarmaGlot сказал:

несколько обёрнутых функций, в т.ч. отключения UI на заданное время.

тут это не особо подходит ведь туторы могут быть разные по времени.

  • Мастер! 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Здравствуйте, как можно вернуть "Вы действительно хотите перейти на другую локацию" без правок движка?


А колбасу и батоны нынче хреновые делать стали...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

FalkineIsaku Сделав вместо левел-ченджера рестриктор запускающий UI-окно с данным диалогом и в зависимости от выбора телепортирующий в левел-ченджер или от рестриктора.
Подробности реализации можно подсмотреть например в моде Путь во Мгле. В нем данный функцианал гораздо шире чем просто подтверждение перехода, там переход может быть закрыт  неким условием и выдается сообщение о причине отказа, метка на переход с подписью, автоматическое сохранение игры пред переходом и учет времени путешествия в комплекте. Скрипт sr_level_changer.script

Изменено пользователем denis2000
  • Спасибо 1

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу