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

Тонкости скриптов


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

Смотри, платформа должна загрузиться до того как игрок на нее телепортируется, во время загрузки локации. Это есть. Потом игрок должен железно стоять на ней, не убирай ее сразу, пропусти пару кадров для верности. Потом дизейбли ее, потом пропусти кадр, и потом fall.
Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 339
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

Fall - это падение, а не спуск. Если резко убирается платформа из под ног, то без нее NPC будет висеть в воздухе.

Также спускает вниз летающие существа.

Не летающие оказываются сразу внизу. На скалах NPS скользит за счет касания со скалой.

 

Чтоб спустить или поднять NPS нужно плавно смещать платформу.

Мне раньше приходилось подбирать скорость платформы для старого проекта обливион, чтоб NPS не проваливался при быстром подъеме.

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

Всем добрый день еще раз (кому уже надоедал по данному вопросу). В общем, некоторое время я делал плагин с балансом под себя, в целом, был почти доволен, но одной из никак не поддающихся частей данного творения стали скрипты, дающие (точнее, заставляющие) НПС пить зелья здоровья, маны и усталости с регулярной четкостью. Данные скрипты мне помогали делать два товарища, Муурн Шепард и olol, за что им огромное спасибо, но увы, что-то идет не так и полностью адекватно эти скрипты работать не хотят. Общая концепция была такова- есть общий скрипт для большинства НПС в игре, не затронутых иными скриптами, заботливо мной развешенный вручную на тонну НПС, так или иначе агрессивно или потенциально агрессивно настроеннных к ГГ - его название:  A_A_NPC_USING_POTION, и его текст здесь:

 

  Показать контент

 

Для НПС, уже имеющих некие скрипты, данный скрипт копировался с изменением названия, и был создан специальный активатор, на который был повешен скрипт-свитчер (помещен в Имперскую канцелярию на старте игры), под названием A_A_ACTIVATOR_USING_POTION, его текст здесь:

 

  Показать контент

 

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

Прошло несколько дней тестов. В общем, данная система скриптов не хочет работать корректно, какие бы мы варианты не перебирали с товарищем olol. Причем, нельзя сказать, что скрипты не работают полностью. Но четкой работы нет. Часто возникают ошибки вроде этих (как на глобальном с нацеленными, тк и в локальных):

Script Error: EXPRESSION in A_A_NPC_USING_POTION
Right eval
Script Error: EXPRESSION in A_ahaz
Right eval
Script Error: EXPRESSION in A_Aebondeius_Jucanis
Right eval

Ситуации самые разные. Персонаж может идти по дороге за переделами города - и выплывает ошибка, дается вариант выбора, если нажать "No" - игра вылетает. Если нажать Yes - в данной ячейке (например, если это локальный скрипт A_A_NPC_USING_POTION) - скрипт перестает работать. Иногда эти ошибки не возникают при повторной загрузке с более старого сейва, но потом могут потом появиться снова. Почти гарантированно возникают, если вернуться в ту же локацию, где уже был, но там остался недобитым НПС, на котором и висел этот скрипт. Плюс еще постоянно вылезающие ошибки по нацеленным скриптам для НПС, с которыми я еще даже близко не встречался! Иногда можно играть 1,5 - 2 часа, и никаких ошибок не выползает - а потом вдруг снова. Я убирал\ставил снова запятые после Equip, проверял синтаксис по руководству MSFD - результатов это не давало.

Для сравнения - в этом же моде у меня есть активатор-скрипт, "запускающий" броню на многих существах в игре, тоже глобальный с нацеленными скриптами в нем, но там ошибок не возникает...У кого есть конструктивные мысли\советы, как можно, наконец, доработать эти скрипты до их полной работоспособности. Есть мнение, что, может, надо устраивать скриптам некие проверки на дистанции, дабы все они отключались, как только ГГ удаляется из ячейки, но в каком именно ключе это должно быть прописано?

Я бы еще понял, если все было так плохо, и не работало НИЧЕГО. Но были, как я уже говорил, часы тестов, когда НПС исправно пили свои зелья стамины, здоровья и маны, отчаянно не желая сдаваться и умирать, а потом на ровном месте в игре возникали ошибки.

 

Прилагаю свой ESP для проверки на всякий случай. Надеюсь на помощь, спасибо заранее!

 

 

 

MorrowindAgain.zipПолучение информации...

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

  В 12/29/2019 в 5:01 PM, Larkin сказал:

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

 

А поконкретнее? Как я уже говорил, проблема не только в нацеленных, но и в локальных...

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

  В 12/29/2019 в 5:10 PM, Varang сказал:

А поконкретнее? Как я уже говорил, проблема не только в нацеленных, но и в локальных...

Когда непись незагружен, то его параметры ещё не определены, они вычисляются только при загрузке непись, поэтому скрипт там вечно проверяет непонятно что, он не падает спустя три секунды только потому, что там нет активных действий. Right eval означает что переменная не определена. Локальные лучше потестить отдельно.

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

  В 12/29/2019 в 5:28 PM, Larkin сказал:

Когда непись незагружен, то его параметры ещё не определены, они вычисляются только при загрузке непись, поэтому скрипт там вечно проверяет непонятно что, он не падает спустя три секунды только потому, что там нет активных действий. Right eval означает что переменная не определена. Локальные лучше потестить отдельно.

 

Что значит "не падает" спустя 3 сек? 

И что надо делать...а локальные смысл тестить отдельно, если и так ясно, что игра в них тоже видит что-то не то (а что именно, я хз)...

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

  В 12/29/2019 в 5:34 PM, Varang сказал:

Что значит "не падает" спустя 3 сек? 

И что надо делать...а локальные смысл тестить отдельно, если и так ясно, что игра в них тоже видит что-то не то (а что именно, я хз)...

Когда возникает right eval то скрипт перестает исполняться, и игра обычно отображает сообщение об ошибке, это можно назвать "скрипт упал".

А как вы понимаете, что локальный скрипт косякнул?

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

  В 12/29/2019 в 5:41 PM, Larkin сказал:

Когда возникает right eval то скрипт перестает исполняться, и игра обычно отображает сообщение об ошибке, это можно назвать "скрипт упал".

А как вы понимаете, что локальный скрипт косякнул?

 

 

Периодически при запусках сейвов вылезает:

Script Error: EXPRESSION in A_A_NPC_USING_POTION (локальный скрипт большинства НПС, как я писал выше)

Right eval

Также иногда вылезает при приближении агрессивного НПС в локации, иногда вообще ниоткуда при прогулка по городам и весям. 

post-8386-0-43474400-1577641726.jpg

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

  В 12/29/2019 в 5:48 PM, Varang сказал:

Периодически при запусках сейвов вылезает:

Script Error: EXPRESSION in A_A_NPC_USING_POTION (локальный скрипт большинства НПС, как я писал выше)Right eval

Также иногда вылезает при приближении агрессивного НПС в локации, иногда вообще ниоткуда при прогулка по городам и весям.

Я бы посоветовал больше заглушек поставить. ГГц

If ( getdisabled )

Rsturn

Endif

If ( menumode )

Return

Endif

Почему два elseif идут подряд без какой либо команды внутри блока? Лучше проверять сначала параметр, который уменьшился, а потом geteffect, причем не elseif geteffect, # а if geteffect, # == 0

Это просто советы, я осмотрел бегло.

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

два елсеиф потому что после первго не нужно ни какого действия и продолжить другие проверки.

 

возможно глобальные сбоят и мешают локальным

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

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

  В 12/29/2019 в 6:19 PM, olol сказал:

два елсеиф потому что после первго не нужно ни какого действия и продолжить другие проверки.

 

возможно глобальные сбоят и мешают локальным

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

 

Как мне сейчас отключить глобальные и продолжить тест? Просто удалить их игры и оставить лишь локалку? И почему тогда глобальные скрипты, вешающие броньку на кричуров, работают норм, и ошибок не выдают?

 

ПС Сейчас удалил глобалку со всеми "именными скриптами". Запустил сейв, зашел в ячейку с НПС под локалкой. Ошибки не было никакой (не считая ругательств касательно отсутствующих скриптов глобальных при запуске), ИИ начал пить зелья и убил меня. Но при еще одной перезагрузке с того же сейва ИИ уже не пил ничего и просто дал себя быстро убить. Т.е. локалка тоже по-своему нестабильна, или я что-то не понимаю о перезапусках сейвов в одной сессии игры?

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

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

сохранялки для проверки не предсказуемы

 

бутылки отличаются от брони своим эффектом, окончание их действия видимо сбоит в игре

если локалки будут сбоить, то это уже баг движка и тогда нужно сообщить это для МСР или смотреть нужно в ОпенМВ.

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

  В 12/29/2019 в 11:45 PM, olol сказал:

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

сохранялки для проверки не предсказуемы

 

бутылки отличаются от брони своим эффектом, окончание их действия видимо сбоит в игре

если локалки будут сбоить, то это уже баг движка и тогда нужно сообщить это для МСР или смотреть нужно в ОпенМВ.

У меня просто есть ощущения, что локалки тоже "падают" либо после вторичного посещения локации с недобитым неписем с локалкой на нем, либо повторной подгрузки сейва игры в одной сессии, или, наооборот, зависают даже после того, как ГГ ушел, и, как следствие, глючат. Может, подстраховаться какой-то проверкой на дистанцию все же, дабы скрипт отключался при отдалении\уходе героя от локации?

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

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

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

возможно, что при смерти нпс их нужно удалять в скрипте, чтоб исключить эту ситуацию

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

  В 12/30/2019 в 8:31 AM, olol сказал:

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

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

возможно, что при смерти нпс их нужно удалять в скрипте, чтоб исключить эту ситуацию

 

Я не удаляю трупы. Никогда.

В общем, я сделал, как вы сказали - убрал глобалки вообще. Создал тестового сильного перса, погнал тестить.  Зашел в Аддамасартус, Зайнсипилу и Рамимилк. В первых двух пещерах бегал, перезаходил в помещение по 2-3 раза, выходил из игры и загружался - ошибок не было, правда, игра 2 раза вылетела прямо в бою, чего раньше у меня никогда не было. Потом дошел до Рамимилка, и мне еще на входе - та -дам! Уж не знаю, это сглюкнули персы в самой локации, или меня ДОГНАЛ скрипт, зависший в какой-то из передыдущих локаций (хотя там все работало идеально). После этого в самом Рамимилке из 4 персон только 1 или 2 хоть как-то пили зелья.

Script Error: EXPRESSION in A_A_NPC_USING_POTION

Infix to postfix

Вылетает ошибка, снова...как видите, локальный скрипт тоже не хочет работать корректно на постоянной основе.

Вопрос...что же мне делать?

Ты говорил насчет передачи инфы в MCP.

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

я с MCP не связывался, помню фриц русской морки передавал автору.

 

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

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

  В 12/30/2019 в 7:30 PM, olol сказал:

я с MCP не связывался, помню фриц русской морки передавал автору.

 

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

 

А что это такое за режим?

Вот, пожалуйста.

Morrowind.7zПолучение информации...

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

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

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

 

ПС Не может ли быть ошибкой отсутствие переменной для функциональной команды Equip, хотя  в руководстве ее не нашел для NPC, только для ГГ (Short OnPCEquip  и Short PCSkipEquip)?

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

трудно исправить ошибку которой нет...

екуипт была битой в морке, потом в трибе ее исправили, но похоже не до конца.

как вариант можно ее заменить на добавление эффектов с удалением бутылька, но это снова марока с тладкой.

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

  В 12/31/2019 в 9:48 AM, olol сказал:

трудно исправить ошибку которой нет...

екуипт была битой в морке, потом в трибе ее исправили, но похоже не до конца.

как вариант можно ее заменить на добавление эффектов с удалением бутылька, но это снова марока с тладкой.

А нужна ли цифра 1 после наименования зелья? Ведь итак больше 1 не выпивает на 1 раз? Или это несущественно?

 

Equip, "p_restore_health_b" 1 или просто Equip, "p_restore_health_b" ?

 

 

  Показать контент

 

 

ВОТ нашел на буржуйском сайте, судя по всему, тоже ничего не удалось через эти команды, чувак сдался и начал через спеллы. И тоже не сильно преуспел.

В общем, вот и ответ, походу. Функция СЛОМАНА, судя по всему, юзание зелий через Equip на нормальной рабочей основе невозможно, ибо это рабочая команда для шмота и одежды, и Трибунал проблему не решил, поэтому то, что написано в описании MCP - неправда.

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

Последнее, что могу еще предложить, это: добавить и удалить бутылек перед и после его выпивания.

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

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

  В 1/1/2020 в 9:36 AM, olol сказал:

Последнее, что могу еще предложить, это: добавить и удалить бутылек перед и после его выпивания.

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

А поточнее? Так?

 

if ( GetItemCount "p_restore_health_e" > 0 ); есть в наличии бутылек

    AddItem "p_restore_health_e"" 1

    Equip  "p_restore_health_e" 1; выпить бутылек

    RemoveItem "p_restore_health_e"" 1

        set timerHealth to 3; задаем три секунды таймеру

  elseif ( GetItemCount "p_restore_health_q" > 0 ); проверка на следующий бутылек если нет предыдущего

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

Можно так или Add, Remove, Equip, Add, Remove.

Все это пляски с бубном, но есть вероятность того, что это поможет.

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

  В 1/1/2020 в 10:59 AM, olol сказал:

Можно так или Add, Remove, Equip, Add, Remove.

Все это пляски с бубном, но есть вероятность того, что это поможет.

Увы. Не помогло, вдобавок каждый второй бой игра стала вылетать.

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

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

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

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

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

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

Войти

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

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

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