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

Порядок загрузки и обработки скриптов


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

Возникло несколько технических вопросов по тому как именно движок обрабатывает скрипты. Может кто знает точно.

 

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

 

2. Как загружаются в память и обрабатываются локальные скрипты при загрузке локации?

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

или же

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

 

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

 

4. Глобальные скрипты в каждом фрейме обрабатываются прежде чем локальные?

 

5. Возможна ли такая ситуация, что скрипт при загрузке\выгрузке данных (например, при переходе игрока из локации в локацию, игрок спит\отдыхает, сейв\лоад игры ...) "обрывается", выполняется не до конца? Или же, например, один скрипт, в связи с тем что локация выгружается из памяти, завершается прежде другого и поэтому этот второй скрипт "не успевает" считать нужные значения переменных из первого? Или движок строго контролирует чтобы все скрипты отработали до конца и сохранили\передали свои данные?

 

 

Заранее благодарен за ответы и подсказки.

Изменено пользователем xeLmen
Ссылка на комментарий
Поделиться на другие сайты

Вероятнее всего, что скрипты встают в очередь по названию, вне зависимости от того локальные они или глобальные. Проигрываются по разу каждый фрейм, для того, чтобы не нагружать движок объемами информации делают оптимизацию скриптов. Командой return прерывают выполнение скрипта в этом фрейме. Локальные скрипты обрабатываются в локации где находится игрок и смежных локациях, глобальные скрипты обрабатываются вне зависимости от локации, но требуют запуска ( через диалоги, работающие скрипты или стартовые скрипты ). При смене локации я думаю все скрипты успевают проиграться, так как их проигрывание идет в 1 фрейм. Одного не пойму, для чего вам эта информация?
Ссылка на комментарий
Поделиться на другие сайты

для чего вам эта информация?

Пытаюсь выяснить причины глюка собственного скрипта.

 

Глобальный скрипт, из разряда тех что "спать-пить-есть". В связке с другими глобальными и локальными скриптами отслеживает статы игрока, отсчитывает время сколько игрок не спал\не пил\голодал и, в связи с этим, добавляет\убирает ему штрафы в виде измениений характеристик и тому подобное.

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

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

 

Скрипты проверял дотошно, ошибки, вроде, не нашел...

Об ошибках игры, когда игрок спит и на нем надеты предметы с постоянным маг эффектом знаю, читал - это не то.

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

Правка переменной вручную в консоли помогает, дальше все опять идет правильно. Но это не решение, хотелось бы докопаться до сути...

 

Вот и подумалось, а не может ли причина быть в том, в каком порядке, в какой очередности загружаются и обрабатываются скрипты? Может ошибка эта возникает потому что случается ситуация как в вопросе 5 шапки темы?...

 

Но это не утверждение вовсе. Только предположение, не более, так как достоверной информацией по этому вопросу не владею.

 

Вполне может быть, что случайный глюк игры... ..Или скриптописателя.

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

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

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

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

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

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

Войти

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

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

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