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

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


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

Доброго времени суток, господа. Срочно нужна помощь по одному вопросу. Пилю плагин на умного компаньона, который бы реагировал на действия игрока. ВСЕ хорошо, почти закончил, но есть одна ОГРОМНАЯ проблема. Я настроил ему кастомную прокачку. Все скиллы и атрибуты игрок повышает компаньону сам за експирианс поинты. Реализуется это через mod<параметр/навык>. Здоровье, мана и запас сил растут соответственно тоже, через мод. И вот, тестрируя, столкнулся с такой проблемой. Через определенный промежуток времени ВСЕ характеристики и навыки сбрасываются, возвращаются к исходным! Ладно, это не проблема, навыки и параметны можно записывать в переменные, скажем, и постоянно возвращать их через set<параметр/навык> в скрипте того же компаньона, но что делать с здоровьем, маной и запасом сил? Как их возвращать? Ведь если приклеить sethealth, скажем, то ведь может получиться так, что компаньон будет вечно с одним показателем здоровья, или, если запихнуть команду в if{}endif, то он может вихилится прямо по середине боя. КУонечно, можно добавить всякие доп.проверки, но это не эффективно. Может, кто знает, как грамотно обыграть всю эту концепцию, может есть какой-нибудь флаг сохранения параметров или еще что-нибудь в этом духе? В общем, жду от гуру советов, как это фиксится. Спасибо!
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

У меня на неписе сбрасываются все параметры после того, как я провожу 72 часа в другой ячейке и один раз там жду или отдыхаю. Способов обойти не знаю. SetHealth нормально работает с переменными и, в принципе, можно каждый раз делать проверку GetPCSleeping == 1 и устанавливать неписю правильные хиты. Изменено пользователем Муурн Шепард
Ссылка на комментарий
Поделиться на другие сайты

У меня на неписе сбрасываются все параметры после того, как я провожу 72 часа в другой ячейке и один раз там жду или отдыхаю. Способов обойти не знаю. SetHealth нормально работает с переменными и, в принципе, можно каждый раз делать проверку GetPCSleeping == 1 и устанавливать неписю правильные хиты.
Спасибо за помощь. Я не знал, честно, что параметры сбрасываются каждые 72 часа отсутствия (в мануале, который я читал эта информация сообщалась только относительно диалогов). Переписал все параметры на локальные переменные и установил переприсваивание. Теперь все работает как надо!
Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Вопрос № 1. Подскажите название скрипта в редакторе, который отвечает за появление надписи "Выглядит слишком сложным", при низком значении навыка "Безопасность"?

Вопрос № 2. Существуют ли функция, в скриптовом языке Морровинда, отвечающая за определение знака рождения персонажа? По типу GetPCBirthSign?

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

Вопрос № 1. Подскажите название скрипта в редакторе, который отвечает за появление надписи "Выглядит слишком сложным", при низком значении навыка "Безопасность"?

Вопрос № 2. Существуют ли функция, в скриптовом языке Морровинда, отвечающая за определение знака рождения персонажа? По типу GetPCBirthSign?

1. Это зашито в движок.

2. Разве что в MWSE, т.к. в Морровинде функции не могут возвращать строки.

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

if ( GetSpellEffects, "wombburn" == 1 )

позволяет определить, что у персонажа есть  способность Замороженная Магия от знака Атронаха.

Такой подход моды на регенерацию магии используют.

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

1 Это не зашито в движок, это гмст переменная, ищите эту фразу там.

2 Переменной нет, возможность реализации есть и не одна. Через определение наложенных на игрока эффектов и через диалог. А ещё есть функция в mwse

Есть же тема по скриптам, зачем плодить?

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

1 Это не зашито в движок, это гмст переменная, ищите эту фразу там.

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

Хотя сам вопрос неточный.

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

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

Хотя сам вопрос неточный.

 

Да, я именно спрашивал про логику появления(я спрашивал название скрипта, чтобы его откорректировать как мне нужно). Насчёт второго пункта, про знаки рождения, мне всё понятно - спасибо. 

 

 

Ты прав. Объединил.

 

Создал тему, не глядя какие уже существуют. Извините. 

 

 

 

По первому пункту всё же есть вопрос:

В оригинальном(без MWSE) скриптовом языке Морровинда, есть функция GetLocked (статья на UESP - http://en.uesp.net/wiki/Tes3Mod:GetLocked).Можно ли создать глобальный скрипт, который открывает MessageBox при попытке открыть каждый в игре запертый объект(дверь, сундук - что угодно)?

 

 

Примечание 1(GMST переменные).

 

Собственно, я нашёл три переменные, отвечающие за взлом замков. 

fPickLockMult(-1)

iPickMinChance(5)

iPickMaxChance(75)

Мне лично нужно, чтобы эти значения менялись в зависимости от уровня навыка Безопасность. Это можно реализовать?

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

По первому пункту всё же есть вопрос:

В оригинальном(без MWSE) скриптовом языке Морровинда, есть функция GetLocked (статья на UESP - http://en.uesp.net/wiki/Tes3Mod:GetLocked).Можно ли создать глобальный скрипт, который открывает MessageBox при попытке открыть запертый объект(дверь, сундук - что угодно)?

 

 

Примечание 1(GMST переменные).

 

Собственно, я нашёл три переменные, отвечающие за взлом замков. 

fPickLockMult(-1)

iPickMinChance(5)

iPickMaxChance(75)

Мне лично нужно, чтобы эти значения менялись в зависимости от уровня навыка Безопасность. Это можно реализовать?

 

1 Через указание цели

if ( de_p_chest_02salynsaret->getlocked == 0 )
    messagebox "open"
endif

Сундук должен быть reference persist

 

2 Это gmst переменные, из игры их нельзя менять.

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

Можно ли создать глобальный скрипт, который открывает MessageBox при попытке открыть каждый в игре запертый объект(дверь, сундук - что угодно)?

Нет. С MWSE, емнип, такая проверка возможна. В обычном Морроувинде, думаю, реально выкрутиться через GetSoundPlaying.

Мне лично нужно, чтобы эти значения менялись в зависимости от уровня навыка Безопасность. Это можно реализовать?

Без MWSE менять GMST нельзя.

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

Нет. С MWSE, емнип, такая проверка возможна. В обычном Морроувинде, думаю, реально выкрутиться через GetSoundPlaying.

Без MWSE менять GMST нельзя.

 

1. Чем отличается GetLocked от GetSoundPlaying? B как выкрутится через GetSoundPlaying? Поставить в программе условие, что если воспроизводится звук закрытого объекта, то выводить MessageBox, такой вариант возможен?

2. Посоветуйте, пожалуйста, надежную ссылку на самую последнюю версию MWSE (слышал, что там поддерживается меню настройки модов). 

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

1. Чем отличается GetLocked от GetSoundPlaying? B как выкрутится через GetSoundPlaying? Поставить в программе условие, что если воспроизводится звук закрытого объекта, то выводить MessageBox, такой вариант возможен?

Да, выводить MessageBox, если воспроизводится соответствующий звук. Или под "открыть" имелось в виду "взломать"? GetLocked -- это про наличие замка, а не про действия игрока.

 

MWSE можно найти на Nexus'е или на GitHub'е, вроде бы.

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

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

1. Чем отличается GetLocked от GetSoundPlaying? B как выкрутится через GetSoundPlaying? Поставить в программе условие, что если воспроизводится звук закрытого объекта, то выводить MessageBox, такой вариант возможен?

2. Посоветуйте, пожалуйста, надежную ссылку на самую последнюю версию MWSE (слышал, что там поддерживается меню настройки модов). 

1 Getlocked работает только в локальном скрипте, его надо помещать на каждый объект. GetSoundPlaying работает с привязкой звука к предмету, очень перспективная была бы функция, если бы некоторые звуки не были привязаны хрен знает к чему.  В любом случае, ни одна из этих функций не заменит оригинальный текст. Что конкретно то сделать захотел, объясни, так реально будет проще подсказать.

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

Напомните пожалуйста, как заставить НПС упасть на четвереньки, то есть проиграть анимацию нокдауна? Эта функция маловато описана в MSFD, пробовал PlayGroup, KnockDown, 0 но происходит что-то не то

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

Напомните пожалуйста, как заставить НПС упасть на четвереньки, то есть проиграть анимацию нокдауна? Эта функция маловато описана в MSFD, пробовал PlayGroup, KnockDown, 0 но происходит что-то не то

Стамину в минус загони.

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

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

Стамина в минус не ту анимацию даёт.

Ну эту анимацию ты никак не получишь, смирись. Есть конечно костыли, но это РЕАЛЬНО костыли.

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

Специально скачал http://www.fullrest.ru/files/vampire-embrace/files

Помню что там такое было. И точно:

begin emb_kneelslave
    float timer
    float doonce

    if ( menumode == 1 )        ; wait until leave menumode
        return
    endif

    if ( doonce == 0 )
        set doonce to 1
        set timer to 0
        playgroup knockdown 1
        return
    endif

    set timer to ( timer + getsecondspassed )
    if ( timer < 3 )
        return
    endif

    playgroup idle 1

    set doonce to 0
    stopscript emb_kneelslave
end
Ссылка на комментарий
Поделиться на другие сайты

Не подскажет кто-нибудь, как точно работает функция GetPCTraveling?

Я пытаюсь аналогичную для OpenMW реализовать.

Сейчас подход такой:

1. Устанавливаем флаг при выборе назначения в меню путешествия

2. По прибытии на место GetPCTraveling будет возвращать 1 в течение одного кадра (из-за установленного флага).

В этом же кадре можно рассчитать разницу во времени до и после путешествия.

3. Скидываем флаг во втором кадре.

 

Оно примерно так должно работать, или там еще нюансы есть?

 

И работает ли GetPCInJail аналогично?

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

  • 3 месяца спустя...

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

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

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

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

Вы сможете оставить комментарий после входа в



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

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