Перейти к контенту

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

Artos, Спасибо, понял. Спавнятся, да. Я, вообще, уже думал про нумерацию, но как-то отбросил эту идею... И как тогда правильно пронумеровать алл-спавн, чтобы подобных вылетов не было?
Ссылка на комментарий

Dreamtale

all.spawn - не пронумеруешь 'ручками'! Его ACDC упаковывает и секции получают номера по порядку следования упаковываемых локаций.

Чтобы избежать проблем со сдвигом номеров секций имеется несколько вариантов.

- Не испльзовать спавн по секциям, заменив подобные коды на спавн более универсальным способом.

Это не сильно сложно. Мною, например, уже из мода убраны все подобные зависимости и нет нужды ломать голову над ошибками переспавна. Переходы, рестрикторы и пр. - несложно спавнить скриптом и добавлять нужное нет-пакетами.

 

- При спавне объекта по секции из алл.спавна в обязательном порядке перепроверять имя/секцию/класс полученного объекта и прерывать игру - дабы и ошибку понять и исправить.

 

- После компилляции нового спавна в обязательном порядке распаковать полученный алл.спавн и уже из него взять в коды/скрипты актуальные номера секций для переспавна. Новая универсальная версия ACDC (см. соседний топик) позволяет контролировать актуальные номера секций нужных объектов и снижает рутину по поиску всех секций во всем распакованном спавне. Также новая версия позволяет создавать список всех объектов из алл.спавна с их актуальными номерами секций. Скриптом можно брать требуемое имя объекта и соответствующий ей номер секции.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Artos, Я конечно совсем не специалист в этой области и особо не вдавался в детали,но факт -подобный вылет имею с вероятностью 90%при попытке начать игру с сейва при измененном алспавне.И как это аллспавн не учитывается в сохранках,насколько я знаю все дин.объекты в игре будь то нпс или брошеное на землю оружие ,получают уникальный ИД который и пишется в сейв.

П.С не буду спорить,так как не уверен в своей компетенции,говорю о том в чем убедился сам(насчет вылета при измененном аллспавн)

Ссылка на комментарий

Хм... Вообще, что-то я приврал - по номеру секции у меня ничего не спавнится. Декомпилировал, нашел одинаковые имена секций (внимательностью никогда не отличался). Однако кое-как оно все же работало до секции n.

gruber,

Сейв не по алл.спавну объекты считывает. При нерабочем алл.спавне с сейва всегда весело загрузишься.

Ссылка на комментарий

gruber

В третий раз разжевывать причину и последствия?

Выше не совсем корректно категорино заявил о неиспользуемости файла all.spawn в игре ... пути из него перечитываются при каждом запуске. Но (!) это не касается конфигов секций объектов. Все параметры из алл.спавна считываются из секций и прописываются заспавненным при создании новой игры объектам. Далее можно хоть что менять в секциях объектов (не путей!) - результата не будет.

Но(!) если в процессе игры скриптом спавнится объект по прописанному ноиеру секции из алл.спавна - то этот номер ОБЯЗАТЕЛЬНО должен соответствовать именно тому объекту, который должен быть заспавнен, т.е. был в первоначальном алл.спавне для которого писались коды.

Ошибки при спавне сдвинутых секций обнаруживаются порой не сразу. Ну вместо перехода или телепорта заспавнилось второе ведро иль ящик - делов-то ... обнаружится подмена только когда дойдешь до нужного места ...

Но если так сдвигать - то в конце концов можно досдвинуться и до того момента, когда заспавнится уже объект (дубль секции) с прописанным ему сидом и который уже имеется к игре (это уже не второе ведро!). Вот тогда и вылетает игра с руганью на сиды ...

Ну а 'уникальный игровой ИД прописываемый в сэйвы' - ни коим боком рядом не лежал с алл.спавном и его редактированием. Игровой ID рандомно получается при спавне объекта и запоминается в начатой игре, но ни как не связан с алл.спавном.

 

Добавлено через 20 мин.:

Dreamtale

Имена секций можешь дублировать хоть сотни раз.

Имена объектам в секциях - для разных локаций могут совпадать. Коллизии могут быть при одинаковых именаз на одном уровне ...

И что-то мне не верится, что у тебя не спавнятся по секции из алл.спавна. Если мод на базе AMK-кодов иль аналогично исправляются переходы/телепорты на саргофаге ... уж не говорю о новых переходах аля NLC - то врядли нет спавна по секции. Симптомы твоей ошибки и затыка - говорят именно об этом.

Скрипты/конфиги и алл.спавн - ты конечно же зажал ... ну что ж .. гадай далее сам.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
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) Он живой... :o

Ссылка на комментарий

Artos,

Я ничего не зажимал. Тебе всю папку геймдата выложить?

 

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

Изменено пользователем Artos
Ссылка на комментарий

SibireaStalker

Прежде чем думать куда вставлять - нужно иметь ЧТО вставлять. Порой от 'что' меняется и место вставки ... Хотя пока твое предположение скорее всего правильно, т.к. именно апдейт актора потебуется для мониторинга его положений.

Ну а пока ... судя по словам "как в ТЧ" - одна версия игры отпала ... осталось две. ;-) Бум гадать далее? Такими тэмпами за пол годика может что-то и выйдет ...

Несколько удивляют слова:

Хотим попробовать реализовать старый худ с человечком
Похотелка Ваша - реализация чья-то ... ;-) Кроме 'хотим' есть еще хоть что-то?

 

 

Dreamtale

Тому кто имеет навыки и знания не обязательно во всем ковыряться ... порой по температуре больного и внешнему виду можно поставить диагноз ... Но не видя больного - это уже иль к телепатам иль к шарлатанам.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Я создал задание: уничтожить БТР

Вот логика БТР

[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

Но выдача инфопоршня не срабатывает. Почему?

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

Создаю глобальный мод с новыми локациямЭ

Ссылка на комментарий

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;<= посмертный инфопоршень

 

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

В общем, как будто удалось локализовать проблему: при добавлении новых секций алл.спавна в соответствующий файл уровня из дефолтного алл.спавна и последующей его компиляции в игру все работает (а секций там явно больше, чем в моем глючном). Видимо, что-то не то удалил (только вот что?). Скриптовый спавн точно ни при чем - вывел из биндера все скрипты, которые что-либо спавнят в начале игры, и все равно вылет сохранялся.

Ссылка на комментарий

Artos, а если попробывать по образцу проверки наличия предмета:

function actor_sit() 
if db.actor:sit then 
return true 
end 
return false 
end

Выводы модмейкера:

1)Вылетает - это хорошо. Значит, работает :)

2) Если хочешь сделать что-то хорошо, делай сам!

3) Если падёшь духом, падёт и мод.

4) Он живой... :o

Ссылка на комментарий

SibireaStalker

1) db.actor:sit()

2) А ты уверен что такая функция sit() вообще в движке существует? Её там нету. Да и вообще как мне кажется, нету способа определить состояние тела ГГ.

3) Ну и с таким уровнем познаний в скриптах ты просто не напишешь желаемое. Это довольно не лёгкое дело, нужно знать массу тонкостей.

 

Кстати, а может через класс move() можно как то вернуть состояние тела ГГ, никто не пробовал?

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

Ребята, помогите пожалуйста, две такие проблемы, первая это такой вылет:

[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

Помогите пожалуйста, заранее огромное спасибо.

Ссылка на комментарий

KD87, Спасибо, уже разобрался. Точно установить косяк не смог, но аккуратно вкопипастил все нужные секции в дефолтный спавн и удалил ненужные - работает. Уверен, что дело в опечатке (как всегда), которую в начале просто не смог отловить. По крайней мере, сейчас все спавнится нормально.

Ulman, У тебя синтаксис скрипта хромает. Лог ошибки свидетельствует о том, что луа не может распарсить то, что ты там накодил (а именно - цифры 1 и 0,1). Что хотел-то получить в итоге?

Ссылка на комментарий

В файле 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

----------------------------------------------------------------------------------------------------------------------

я правильно понимаю, что они связаны с выходом актера с локации и появлением на локации ?

Ссылка на комментарий

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() --/ Игрок покидает разрешенную границу уровня (входит на опасную территорию)

Если вспомнить, как начинает верещать детектор при приближении актора к краям локаций в некоторых местах - станет все ясно 'о чем эти коллбэки'.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
-- записываем переменную

function save_variable(variable_name, value)

xr_logic.pstor_store(db.actor, variable_name, value)

end

pstor - это наверно можно расшифровать как Pointer Storage ? Т.е. так движок позволяет хранить user-данные ?

Эти данные будут хранится только на сеанс работы или будут сохранятся в сохранениях ?

Ссылка на комментарий

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

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...