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

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

  Информация (Показать)

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

  Читать рекомендуется. (Показать)

И последнее: очень рекомендовано к прочтению Правила форума
 


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

Dreamtale

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

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

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

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

 

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

 

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

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

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

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

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

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

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

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

gruber,

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

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

gruber

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

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

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

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

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

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

 

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

Dreamtale

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

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

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

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

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

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

Ссылка на комментарий
  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

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

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

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

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

  код (Показать)
Изменено пользователем Artos

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

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

strelok200, а почему ты не смотришь как подобное сделано в других модах (в том же АМК)?

 

Автотранспорт не подчиняется многим схемам, это особые объекты и применение кодов для них требует изучения туторов и собственно кодов/схем относящихся к автотранспорту (как в прочем и для вертолетов!).

 

"Посмертный" инфопоршень для машин (БТР'ов) ставится на 'свой' параметр (on_death_info) в схеме ph_car, т.е. типа:

  код (Показать)
Изменено пользователем 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, форум АМК съел моё старое имя и не хочет отдавать о_О

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

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

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

  лог (Показать)
Ссылка на комментарий

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-данные ?

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

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

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

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

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

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

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

Войти

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

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

×
×
  • Создать...