РЕДМЕНЪ Опубликовано 22 октября, 2020 Жалоба Поделиться Опубликовано 22 октября, 2020 (изменено) Джентльмеры, подскажите. Реально ли заблокировать действие на игрока одного конкретного магического эффекта? Например, восстановления магии. Пьёт игрок зелье пополнения маны - ничего не происходит. Пьёт другое - снова ничего. Кастует амулетом - тоже ничего. Остальные эффекты действуют как положено.Если ещё не видел, то в MSFD_8.1+ см. раздел "Управление и тестирование эффектов заклинаний". Там примерно так выглядит:if ( Player -> GetEffect, sEffectRestoreHealth ) Player -> RemoveEffects, 75endif ...при этом для функции GetEffect нужно использовать ID эффекта (например, GetEffect sEffectWaterBreathing). Для функции RemoveEffects используется номер эффекта (например, RemoveEffects, 0). Список эффектов в конце учебника. Если это то, что нужно. Я таким кунг-фу ещё не занимался, что в результате получится, не знаю. Успеет ли эффект сработать ДО удаления или удалится корректно? - не могу сказать.Возможно, в луа это действительно будет проще и надёжнее. Да. 1 строчка в луа.О, эту фразу давно в мемы занести пора. Изменено 22 октября, 2020 пользователем РЕДМЕНЪ Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 22 октября, 2020 Жалоба Поделиться Опубликовано 22 октября, 2020 (изменено) В ванили это: 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А, РЕДМЕНЪ опередил. Но список эффектов лишним не будет. Изменено 22 октября, 2020 пользователем Муурн Шепард Ссылка на комментарий Поделиться на другие сайты Поделиться
aL☢ Опубликовано 22 октября, 2020 Жалоба Поделиться Опубликовано 22 октября, 2020 кстати, GetEffect на оригинальном движке не работает с магией увеличения характеристик и навыков. Вот такая вот бага движка.То есть на ГГ может висеть данный эффект, а гетэффект скажет, что нифига на нем нет этого эффекта. Ссылка на комментарий Поделиться на другие сайты Поделиться
Марк К. Марцелл Опубликовано 22 октября, 2020 Жалоба Поделиться Опубликовано 22 октября, 2020 В ванили это: 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. На случай, если первая версия будет работать некорректно.Нужно протестировать, как это будет в игре выглядеть. Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 22 октября, 2020 Жалоба Поделиться Опубликовано 22 октября, 2020 (изменено) Восстановление магии на постоянный эффект или по активации предметов? Изменено 22 октября, 2020 пользователем Муурн Шепард Ссылка на комментарий Поделиться на другие сайты Поделиться
Марк К. Марцелл Опубликовано 22 октября, 2020 Жалоба Поделиться Опубликовано 22 октября, 2020 Восстановление магии на постоянный эффект или по активации предметов?И то, и другое. Этот эффект в принципе не должен действовать на игрока ни под каким видом. Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 22 октября, 2020 Жалоба Поделиться Опубликовано 22 октября, 2020 (изменено) Мда. В общем, такой скрипт работает с восстановлением здоровья (и, наверно, с другими эффектами), но почему-то совершенно не ловит восстановление магии. Сложный скрипт, как выяснилось, не нужен -- игра перехватывает и удаляет эффекты до того, как они повлияют на персонажа. Два кольца с двумя вариантами скрипта лежат у Дорисы Давел на прилавке, если кто-нибудь захочет разобраться. 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 endAntimagic.ESP Изменено 22 октября, 2020 пользователем Муурн Шепард Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 23 октября, 2020 Жалоба Поделиться Опубликовано 23 октября, 2020 Мда. В общем, такой скрипт работает с восстановлением здоровья (и, наверно, с другими эффектами), но почему-то совершенно не ловит восстановление магии. Сложный скрипт, как выяснилось, не нужен -- игра перехватывает и удаляет эффекты до того, как они повлияют на персонажа. Два кольца с двумя вариантами скрипта лежат у Дорисы Давел на прилавке, если кто-нибудь захочет разобраться. 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А что если там два эффекта, помимо восстановления другой? И зачем тут переменная? Ссылка на комментарий Поделиться на другие сайты Поделиться
РЕДМЕНЪ Опубликовано 23 октября, 2020 Жалоба Поделиться Опубликовано 23 октября, 2020 Расскажешь потом, что вышло.Рассказываю.Заспамил пару-тройку локаций одинаковыми существами, в каждой локации свои. Сделал для каждого типа существ свои скрипты/оружие. Пошёл их истреблять.Э-э-э, нетушки. Быстро выяснилось, что команды HitOnMe и GetTarget работают не так, как я ожидал: они работают только на одном актёре, а соседним на повешенные скрипты начхать, на них скрипт не срабатывает.Почему так, я не понял, скрипт указывает ID существа, условных Rat/scamp, но "видит" только одного из них. Как я понял, "видит" последнего добавленного в CS актёра. Т.е. с одной стороны я как бы не прав, потому что с этими двумя командами истребить всех крыс действительно не получится;с другой стороны, обе команды всё же позволяют обратиться к существу из скрипта на оружии - но только к одному-единственному. ==========Ладно, придётся добавлять скрипты существам. На оружие вешаю скрипт OnPCEquip и "пустую" запись в дневнике. На существо вешаю скрипт, который при (приближении игрока+дневниковой записи) временно повышает силу/атаку игрока. Иду в игру.На одном существе скрипт срабатывает корректно; в консоли по цифиркам видно, что урон возрос. На соседних существах скрипт не срабатывает. Упс. По тому же принципу попробовал сделать существа неагрессивными, через SetFigh. Результат тот же: одно существо стоит спокойно, другие нападают.Почему так, ведь скрипт повешен на существо и по идее все копии существа должны реагировать?Что именно я делаю не так? Как должна выглядеть правильная связка двух скриптов? Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 23 октября, 2020 Жалоба Поделиться Опубликовано 23 октября, 2020 А что если там два эффекта, помимо восстановления другой? И зачем тут переменная?В смысле два? Переменная для отладки. Ссылка на комментарий Поделиться на другие сайты Поделиться
Марк К. Марцелл Опубликовано 14 февраля, 2023 Жалоба Поделиться Опубликовано 14 февраля, 2023 2 часа назад, UhkbuzutopMuxaul сказал: Здорово! Заходишь в Конструктор, там открываешь локацию в которой видел модель с наложенной на ней текстурой, когда загрузится эта локация и можно будет её посмотреть в игровом мире, в одном из окон будет полный список всех предметов, неписей, кричеров что находятся в локации которую ты сейчас смотришь и можешь там выбрать модель которая тебя интересует или напрямую найти в игровом окне модель и выделив пару раз мышкой откроется окно с описанием что есть твоя модель. Контейнер, статик, активатор и т.д. и номер id элемента мира Морроувинд. В списке всего что есть в мире Морроувинд вы по id можете найти что вам нужно. Например вы открыли модель в игровом окне(там будет показан Морроувинд как в самой игре) и выделив объект откроется окно и в нём обязательно будет показано название меши что использует конструктор при подключении этой модели к игре. Далее в Data Files в Meshes ищите название этой меши, потом открыв nifskope в окнах найдёте какие текстуры наложены на эту мешу(там очень просто, потеряться не удастся). Прежде чем задавать такие простые вопросы для моддеров на Фуллрест вам нужно было прошерстить базу ресурсов Фуллреста, там есть обучающие видеоуроки именно для новичков и записки по скриптам и вообще много интересного. Вот https://www.fullrest.ru/files/Lacmus_Tutorials У меня тоже есть один вопрос, мне говорили что где то вроде на Нексусе решили эту задачу но я не нашёл. Можно ли при начале новой игры обнулять все 27 навыков одной командой или по скрипту? Их можно понизить по отдельности через консоль но можно ли упростить эту задачу в одну команду и если можно то как? По скрипту можно. Посмотрите код этого мода: https://www.nexusmods.com/morrowind/mods/44266/ Ссылка на комментарий Поделиться на другие сайты Поделиться
Vasik Опубликовано 1 декабря Жалоба Поделиться Опубликовано 1 декабря Здравствуйте, мудрые люди. Помогите начинающему и малопонимающему. Суть вопроса: в помещении героя встречает сильно запертая дверь. Запирается простым скриптом: Begin Door_b Short controlfirst if (controlfirst == 0 ) in_c_door_arched_b->lock, 200 Set controlfirst to 1 Endif end (Запер на 200 потому, что не знаю как запереть "насмерть") Открывается дверь неписем после уплаты денег, из результатов диалога. Но при повторном посещении помещения дверь остаётся незапертой (видимо переменная не забывает своего значения после того, как герой покидает помещение, и в следующий раз "Short" уже не хочет быть свежеобъявленной). Подскажите пожалуйста, как изменить скрипт чтоб а) дверь запиралась "насмерть", б) при каждом следующем посещении дверь была заперта пока не заплатишь? Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 1 декабря Жалоба Поделиться Опубликовано 1 декабря 8 часов назад, Vasik сказал: Здравствуйте, мудрые люди. Помогите начинающему и малопонимающему. Суть вопроса: в помещении героя встречает сильно запертая дверь. Запирается простым скриптом: Begin Door_b Short controlfirst if (controlfirst == 0 ) in_c_door_arched_b->lock, 200 Set controlfirst to 1 Endif end (Запер на 200 потому, что не знаю как запереть "насмерть") Открывается дверь неписем после уплаты денег, из результатов диалога. Но при повторном посещении помещения дверь остаётся незапертой (видимо переменная не забывает своего значения после того, как герой покидает помещение, и в следующий раз "Short" уже не хочет быть свежеобъявленной). Подскажите пожалуйста, как изменить скрипт чтоб а) дверь запиралась "насмерть", б) при каждом следующем посещении дверь была заперта пока не заплатишь? If ( cellchanged ) in_c_door_arched_b->lock, 200 endif Невзламываемая дверь - очень плохое решение для этой игры. Максимально не одобряю Ссылка на комментарий Поделиться на другие сайты Поделиться
Vasik Опубликовано 1 декабря Жалоба Поделиться Опубликовано 1 декабря 31 минуту назад, Larkin сказал: If ( cellchanged ) in_c_door_arched_b->lock, 200 endif Невзламываемая дверь - очень плохое решение для этой игры. Максимально не одобряю Большое спасибо, сработало лучше, чем ожидал - закрывает даже в том случае, если дверь уходя оставалась открытой настежь. Почитал про эту команду (не могу сказать, что понял прочитанное 😕). Про невзламываемую дверь не очень понял - лор вроде не портит. Но, думаю, к мнению опытного человека стоит прислушаться. Ещё раз спасибо. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vladii Опубликовано 1 декабря Жалоба Поделиться Опубликовано 1 декабря begin DoorOpen If ( MenuMode == 1 ) return endif If ( OnActivate == 1 ) If ( player->GetItemCount "Key" >= 1 ) Activate else If ( player->GetItemCount "Key" < 1 ) MessageBox "Без ключа дверь не откроется." return endif endif endif end DoorOpen Пользуюсь обычно этим скриптом. Дверь открывается только ключом Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти