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

Помогите разобраться со скриптом, изымающим/респавнящим книги


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

Попробуйте просто GetAngle. Если все равно не поможет, то вручную добавьте/отнимите 45.

А углы скорей всего в минутах.

В градусах, в градусах.

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

Попробуйте просто GetAngle. Если все равно не поможет, то вручную добавьте/отнимите 45.

В градусах, в градусах.

Муурн Шепард,

 

поскольку мой опыт работы со скриптами в ванильном CS ограничивается, в основном, этим скриптом, я не могу с уверенностью сказать, что перепробовал уже все, и перепробовал правильно. Но если оставить это за скобками, то да, я и с GetAngle изгалялся, и с глобальными переменными, и с move и, с SetAtStart. И, разумеется, прибавлял и вычитал градусы вручную. Не помогает.

Скрипт as is работает, но вот функция SetAngle забагована. Об этом написано и в SFD, и на разных форумах, в основном, забугорных. Чтобы убедиться в этом, достаточно применить save/load, и книги внезапно обретают правильные углы. Проверьте сами, если это вам покажется интересным.

 

В общем, я решил отказаться от этого скрипта. Дело-то не в нем, а в библиотеке. Книга будет выдавать MessageBox (типа "Из читального зала книги выносить запрещено!") с предупреждением при проверке OnActivate. В случае утвердительного ответа в инвентарь добавляется ее копия (копия копии) с приаттаченным спеллом, сама книга на полке деактивируется. Спелл возвращает игрока в ячейку. Или убивает. Единственный способ уйти - сдать книгу библиотекарю. Как-то так...

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

Если все равно не поможет, то вручную добавьте/отнимите 45.

.

 

Костыль выручай, называется.

 

 

Муурн Шепард,

 

поскольку мой опыт работы со скриптами в ванильном CS ограничивается, в основном, этим скриптом, я не могу с уверенностью сказать, что перепробовал уже все, и перепробовал правильно. Но если оставить это за скобками, то да, я и с GetAngle изгалялся, и с глобальными переменными, и с move и, с SetAtStart. И, разумеется, прибавлял и вычитал градусы вручную. Не помогает.

Скрипт as is работает, но вот функция SetAngle забагована. Об этом написано и в SFD, и на разных форумах, в основном, забугорных. Чтобы убедиться в этом, достаточно применить save/load, и книги внезапно обретают правильные углы. Проверьте сами, если это вам покажется интересным.

В общем, я решил отказаться от этого скрипта. Дело-то не в нем, а в библиотеке. Книга будет выдавать MessageBox (типа "Из читального зала книги выносить запрещено!") с предупреждением при проверке OnActivate. В случае утвердительного ответа в инвентарь добавляется ее копия (копия копии) с приаттаченным спеллом, сама книга на полке деактивируется. Спелл возвращает игрока в ячейку. Или убивает. Единственный способ уйти - сдать книгу библиотекарю. Как-то так...

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

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

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

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

В том-то и дело, что только по оси Z.

 

Вот что сказано в SFD (стр. 55, выделение мое):

Notes (by Simpleton):
SetAngle doesn't work how sfd says it does. My guess is nobody ever noticed before because nobody ever uses it with the X or Y axis, which is where it gets funky. <...> Probably the oddest thing about SetAngle, X/Y is that neither have anything to do with the X or Y axis'.

<...>

(ManaUser)

<...> the worst thing about SetAngle is that it doesn't always save right. Particularly when an object has been rotated on more than one axis, I've noticed it facing some wonky direction after reloading.

Говорят, эта тема осталась и в OpenMW.

Короче, просто попробуйте в CS поставить книжку так, как стояла, используя функции GetAngle XYZ и SetAngle XYZ. Не знаю, может, я просто что-то не так делаю, и у вас получится лучше.

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

Скрипт as is работает, но вот функция SetAngle забагована. Об этом написано и в SFD, и на разных форумах, в основном, забугорных. Чтобы убедиться в этом, достаточно применить save/load, и книги внезапно обретают правильные углы. Проверьте сами, если это вам покажется интересным.

Забавно. У меня функция работает нормально, но новые углы не сохраняются из-за того, что у книги не проставлена References Persist.

В общем, я решил отказаться от этого скрипта. Дело-то не в нем, а в библиотеке.

Жаль, новое решение топорней.

Костыль выручай, называется.

Кэп?

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

В общем, я решил отказаться от этого скрипта. Дело-то не в нем, а в библиотеке. Книга будет выдавать MessageBox (типа "Из читального зала книги выносить запрещено!") с предупреждением при проверке OnActivate. В случае утвердительного ответа в инвентарь добавляется ее копия (копия копии) с приаттаченным спеллом, сама книга на полке деактивируется. Спелл возвращает игрока в ячейку. Или убивает. Единственный способ уйти - сдать книгу библиотекарю. Как-то так...

Вы главное плагин выложить не забудьте потом) В чём суть его?

 

Форумный движок не склеивает автоматом сообщения, не пишите несколько подряд — если надо дописать новое, то дописывайте в уже имеющееся сообщение. Двойные-тройные сообщения уже склеил.

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

Вы главное плагин выложить не забудьте потом) В чём суть его?

Плагин я делаю для себя; если все получится, с удовольствием выложу.

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

 

 

 

Двойные-тройные сообщения уже склеил.

Спасибо большое, постараюсь не мультипостить в будущем.

 

 

 

Забавно. У меня функция работает нормально, но новые углы не сохраняются из-за того, что у книги не проставлена References Persist.

Вы тестили в ванильном CS? И скрипт использовали тот, что я выложил?

У меня-то references persist стоит.

 

Жаль, новое решение топорней.

Да, но вот что-то не складывается с GetAngle.

 

Кстати, пользуясь случаем (и тема, в общем-то, все еще подходит):

претворяю в жизнь "топорный" вариант антиугона книг. К каждой книге приаттачен скрипт, по которому при ( onActivate == 1 ) всплывает Messagebox, "беру", "не беру". Если берем, книга на полке Disable, в инвентарь добавляем оригинал (до конца еще не продумал, что дальше, может, глобальную переменную добавлю, может, это будет не оригинал, а копия копии).

Так вот, у меня получается, что этот скрипт работает только для одной книги. Допустим, у меня есть книги А, Б и С на полках. При попытке забрать их они активируются, и в инвентарь добавляется А1, Б1, С1. По факту, какую книгу ты бы ни активировал, в инвентарь добавится А1. Вот скрипт:

 

begin AlchemistsFormularyscript
 
short button
 
if ( OnActivate == 1 )
    Messagebox, "Помните, что книги выносить из библиотеки нельзя!", "Взять книгу", "Почитать что-нибудь другое"
 
    set button to GetButtonPressed
        if ( button == -1 )
            return
        elseif ( button == 0 )
            "lib_bk_AlchemistsFormulary"->Disable
            player->additem "bk_AlchemistsFormulary" 1
        else
            Messagebox "Пока!"
        endif
 
else
    return
endif
 
stopscript AlchemistsFormularyscript
 
end

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

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

Для каждой книги потребуется свой скрипт.

Вы тестили в ванильном CS? И скрипт использовали тот, что я выложил?

Просто SetAngle со случайными значениями.

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

Для каждой книги потребуется свой скрипт.

Так у меня свой скрипт для каждой книги. Названия разные, процедуры в каждом скрипте тоже разные. Только Messagebox одинаковый.

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

Кэп?

Ясно, советовать костыли юзерам абсолютно нормально для вас.

 

Veloth, скрипт странный, если локальный то зачем stopscript? Он точно на книге? Тогда он вообще не может работать, ибо нажатие кнопки внутри onactivate, которая срабатывает только 1 кадр. Нужно заводить ещё переменную и

If ( onactivate )

Set state to 1

Endif

If ( state == 1 )

Обработка нажатия кнопки

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

А можно ли глобальным переменным присваивать не число, а ItemID?

Без MWSE нельзя, к сожалению. Если будет желание, то гайд по нему здесь.

 

 

Ясно, советовать костыли юзерам абсолютно нормально для вас.

Всяко лучше, чем нести чушь про минуты.

 

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

  • 4 недели спустя...

Запощу здесь же, потому что вопрос связан с тем, что вынесен в заголовок темы:

 

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

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

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

Может проще выложить плагин со скриптом? Гадать по сообщениям довольно сложно.

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

Может проще выложить плагин со скриптом? Гадать по сообщениям довольно сложно.

aL, ну а что тут гадать? Я в этой ветке, как мне кажется, все уже расписал. Из диалога с библиотекарем стартует скрипт вида:

 

if ( player->GetItemCount "bk_QWERTY" )

if ( "copy_bk_QWERTY"->GetDisabled )

"copy_bk_QWERTY"->Enable

player->PlaySound "Item Book Down"

player->RemoveItem "bk_QWERTY" 1

endif

endif

 

 

Книга банально изымается командой RemoveItem. Все остальное, по идее, на механику влиять не должно.

 

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

Ах да: и делал я его под MCP. Уже писал, но повторюсь.

Caldera_Puplic_LIbrary.ESP

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

А если сделать if ( Player->GetItemCount "Book_QWERTY" >= 1 ) баг сохранится?

Да, баг никуда не девается.

Видимо, придется сделать вид, что это фича )

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

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

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

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

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

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

Войти

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

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

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