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

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


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

Джентльмеры, подскажите. Реально ли заблокировать действие на игрока одного конкретного магического эффекта? Например, восстановления магии. Пьёт игрок зелье пополнения маны - ничего не происходит. Пьёт другое - снова ничего. Кастует амулетом - тоже ничего. Остальные эффекты действуют как положено.

Если ещё не видел, то в MSFD_8.1+ см. раздел "Управление и тестирование эффектов заклинаний".

 

Там примерно так выглядит:

if ( Player -> GetEffect, sEffectRestoreHealth )

    Player -> RemoveEffects, 75

endif

 

...при этом для функции GetEffect нужно использовать ID эффекта (например, GetEffect sEffectWaterBreathing). Для функции RemoveEffects используется номер эффекта (например, RemoveEffects, 0). Список эффектов в конце учебника.

 

Если это то, что нужно. Я таким кунг-фу ещё не занимался, что в результате получится, не знаю. Успеет ли эффект сработать ДО удаления или удалится корректно? - не могу сказать.

Возможно, в луа это действительно будет проще и надёжнее.

 

 

Да. 1 строчка в луа.

О, эту фразу давно в мемы занести пора.

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

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

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

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

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

В ванили это:

if ( Player->GetEffect sEffectRestoreSpellPoints == 1 )
Player->RemoveEffects 76
endif

Список всех эффектов.
 
Возможно, что часть магии игра все равно успеет восстановить, потому, наверно, тут нужно будет через ModCurrentMagicka вернуть прежнее значение магии. Что-то вроде:

float CurrentMagicka
float NewMagicka
if ( Player->GetEffect sEffectRestoreSpellPoints == 0 )
Set CurrentMagicka to ( Player->GetMagicka )
else
Player->RemoveEffects sEffectRestoreSpellPoints
set NewMagicka to ( Player->GetMagicka )
set NewMagicka to ( CurrentMagicka - NewMagicka )
Player->ModCurrentMagicka NewMagicka
endif

А, РЕДМЕНЪ опередил. Но список эффектов лишним не будет.

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

кстати, GetEffect на оригинальном движке не работает с магией увеличения характеристик и навыков. Вот такая вот бага движка.

То есть на ГГ может висеть данный эффект, а гетэффект скажет, что нифига на нем нет этого эффекта.

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

В ванили это:

if ( Player->GetEffect sEffectRestoreSpellPoints == 1 )
Player->RemoveEffects 76
endif

Список всех эффектов.

 

Возможно, что часть магии игра все равно успеет восстановить, потому, наверно, тут нужно будет через ModCurrentMagicka вернуть прежнее значение магии. Что-то вроде:

float CurrentMagicka
float NewMagicka
if ( Player->GetEffect sEffectRestoreSpellPoints == 0 )
Set CurrentMagicka to ( Player->GetMagicka )
else
Player->RemoveEffects sEffectRestoreSpellPoints
set NewMagicka to ( Player->GetMagicka )
set NewMagicka to ( CurrentMagicka - NewMagicka )
Player->ModCurrentMagicka NewMagicka
endif

А, РЕДМЕНЪ опередил. Но список эффектов лишним не будет.

 

Редмен, спасибо. Шепард, можно тебя загрузить просьбой? Я по определённым религиозным причинам сейчас не могу в КС. Тебя не затруднит сделать два мода:

1) В первом - скрипт без ModCurrentMagicka. Мод добавляет кольцо. Если его надеть, то игрок лишается возможности восполнять ману через бутылки и предметы с рестором магии.

2) Во втором то же самое, но с ModCurrentMagicka. На случай, если первая версия будет работать некорректно.

Нужно протестировать, как это будет в игре выглядеть.

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

Восстановление магии на постоянный эффект или по активации предметов?

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

Восстановление магии на постоянный эффект или по активации предметов?

И то, и другое. Этот эффект в принципе не должен действовать на игрока ни под каким видом.

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

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

Begin AntimagicRing
short OnPCEquip
short RestoringMagicka

if ( MenuMode == 1 )
return
endif

if ( OnPCEquip == 0 )
return
endif

set RestoringMagicka to ( Player->GetEffect sEffectRestoreSpellPoints )
MessageBox "RestoringMagicka: %.0f" RestoringMagicka ;Отладка. Должно показывать 1, если поймал эффект.

if ( RestoringMagicka == 1 )
Player->RemoveEffects 76
endif

end

Antimagic.ESP

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

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

 

Begin AntimagicRing
short OnPCEquip
short RestoringMagicka

if ( MenuMode == 1 )
return
endif

if ( OnPCEquip == 0 )
return
endif

set RestoringMagicka to ( Player->GetEffect sEffectRestoreSpellPoints )
MessageBox "RestoringMagicka: %.0f" RestoringMagicka ;Отладка. Должно показывать 1, если поймал эффект.

if ( RestoringMagicka == 1 )
Player->RemoveEffects 76
endif

end
А что если там два эффекта, помимо восстановления другой? И зачем тут переменная?
Ссылка на комментарий
Поделиться на другие сайты

Расскажешь потом, что вышло.

Рассказываю.

Заспамил пару-тройку локаций одинаковыми существами, в каждой локации свои. Сделал для каждого типа существ свои скрипты/оружие. Пошёл их истреблять.

Э-э-э, нетушки. Быстро выяснилось, что команды HitOnMe и GetTarget работают не так, как я ожидал: они работают только на одном актёре, а соседним на повешенные скрипты начхать, на них скрипт не срабатывает.

Почему так, я не понял, скрипт указывает ID существа, условных Rat/scamp, но "видит" только одного из них. Как я понял, "видит" последнего добавленного в CS актёра.

 

Т.е. с одной стороны я как бы не прав, потому что с этими двумя командами истребить всех крыс действительно не получится;

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

 

==========

Ладно, придётся добавлять скрипты существам. На оружие вешаю скрипт OnPCEquip и "пустую" запись в дневнике. На существо вешаю скрипт, который при (приближении игрока+дневниковой записи) временно повышает силу/атаку игрока. Иду в игру.

На одном существе скрипт срабатывает корректно; в консоли по цифиркам видно, что урон возрос. На соседних существах скрипт не срабатывает. Упс. 

 

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

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

Что именно я делаю не так? Как должна выглядеть правильная связка двух скриптов?

 

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

А что если там два эффекта, помимо восстановления другой? И зачем тут переменная?

В смысле два? Переменная для отладки.

 

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

  • 2 года спустя...
2 часа назад, UhkbuzutopMuxaul сказал:

Здорово! Заходишь в Конструктор, там открываешь локацию в которой видел модель с наложенной на ней текстурой, когда загрузится эта локация и можно будет её посмотреть в игровом мире, в одном из окон будет полный список всех предметов, неписей, кричеров что находятся в локации которую ты сейчас смотришь и можешь там выбрать модель которая тебя интересует или напрямую найти в игровом окне модель и выделив пару раз мышкой откроется окно с описанием что есть твоя модель. Контейнер, статик, активатор и т.д. и номер id элемента мира Морроувинд. В списке всего что есть в мире Морроувинд вы по id можете найти что вам нужно. Например вы открыли модель в игровом окне(там будет показан Морроувинд как в самой игре) и выделив объект откроется окно и в нём обязательно будет показано название меши что использует конструктор при подключении этой модели к игре. Далее в Data Files в Meshes ищите название этой меши, потом открыв nifskope в окнах найдёте какие текстуры наложены на эту мешу(там очень просто, потеряться не удастся).;-) Прежде чем задавать такие простые вопросы для моддеров на Фуллрест вам нужно было прошерстить базу ресурсов Фуллреста, там есть обучающие видеоуроки именно для новичков и записки по скриптам и вообще много интересного. Вот https://www.fullrest.ru/files/Lacmus_Tutorials

У меня тоже есть один вопрос, мне говорили что где то вроде на Нексусе решили эту задачу но я не нашёл. Можно ли при начале новой игры обнулять все 27 навыков одной командой или по скрипту? Их можно понизить по отдельности через консоль но можно ли упростить эту задачу в одну команду и если можно то как? :dontknow:

По скрипту можно. Посмотрите код этого мода:
https://www.nexusmods.com/morrowind/mods/44266/

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

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

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

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

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

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

Войти

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

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

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