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

Вопросы по TES Construction Set


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

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

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

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

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

Возник еще такой вопрос: есть ли там же, в Function/Variable функция, проверяющая, совершена ли с продавцом хотя бы одна успешная сделка? Причем, если он продает еще и заклинания, то нужна проверка именно на совершенную сделку с предметами, а покупка заклинания считаться за успешную сделку не должна.

 

 

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

 

 

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

 

 

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

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

Только если имеются в виду строго определённые, изначально лежащие в НПС или сундуке, предметы (то есть с рандомными не прокатит), а потом скриптом проверяем не исчез ли каждый по очереди через GetItemCount "ID_предмета" > 0 Изменено пользователем Ao3
Ссылка на комментарий
Поделиться на другие сайты

Только если имеются в виду строго определённые, изначально лежащие в НПС или сундуке, предметы (то есть с рандомными не прокатит), а потом скриптом проверяем не исчез ли каждый по очереди через GetItemCount "ID_предмета" > 0

 

Да, вполне определенные предметы с уникальными ID. Обьявил глобальную переменную drawingtoken через Gameplay>Globals. По умолчанию она равна 0. Ее смена на 1 вызывает смену диалога. Я просто не совсем беру в толк, как ее изменить скриптом вида:

 

-Начать скрипт

-Если каждый из предметов на месте, drawingtoken остается равной 0

-А если хоть что то исчезло, drawingtoken становится равной 1

-Конец

 

Как определить, чтобы проверка шла с контейнера, тоже не совсем понятно. Я видел операторы вида player->GetItemCount но это проверка игрока а не самого контейнера. Ну и если несложно, набросайте скрипт хотя бы для двух предметов. Скажем, их ID это "paint1" и "paint2", а ID контейнера "paintchest". Ах да, важная деталь, скрипт должен сработать только один раз.

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

Begin TestScript
if ( DrawingToken == 1 );не проигрываем скрипт, если предмет уже исчез
return
end
if ( GetItemCount "paint1" < N );N равняется изначальному числу предметов. В скрипт вписать числовое значение, а не переменную!
if ( GetItemCount "paint2" < K );K равняется изначальному числу вторых предметов. В скрипт вписать числовое значение, а не переменную!
Set Drawingtoken to 1
return
endif
endif
End

Как-то так. Вешать на сундук.

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

Муурн, извини, но по-моему тут что-то не так.

 

if ( GetItemCount "paint1" < N ) ;допустим, условие выполняется, предмет 1 забрали
  if ( GetItemCount "paint2" < K );а второй не трогали, условие не выполняется
 Set Drawingtoken to 1; тогда переменная не изменится.
 return
  endif
endif

 

или

 

if ( GetItemCount "paint1" < N ) ;допустим, условие НЕ выполняется, предмет 1 не трогали
  if ( GetItemCount "paint2" < K );а предмет 2 забрали, но проверки не произойдёт, т.к. не выполнено условие 1
 Set Drawingtoken to 1; соответственно, переменная так же не изменится
 return
  endif
endif

 

То есть твой скрипт работает в том случае, если забрали ОБА предмета, а нам надо ХОТЯ БЫ один. Разве нет?

 

Я вижу только такой вариант

 

if ( GetItemCount "paint1" < N ) ;проверяем первый. Если не выполняется - едем дальше
 Set Drawingtoken to 1 ;если выпооняется - меняем переменную
 return ;нам этого достаточно, дальше не идём
endif
if ( GetItemCount "paint2" < K )
 Set Drawingtoken to 1
 return
endif

 

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

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

Поставить ретекстур журнала.

То есть модель у всех книг одна и заменить фон только у одной книги нельзя?

И где лежит его модель?

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

То есть модель у всех книг одна и заменить фон только у одной книги нельзя?

Насколько мне известно, так и есть.

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

Посмотрите вот тут скрипт ImpDestr_MB3_Script - надо заменить все, что в блоке if ( MagicSpell == 1 ) на то, что Вам надо (только Set MagicSpell to 0 не трогайте).
Ссылка на комментарий
Поделиться на другие сайты

Нужна небольшая помощь по скриптописанию.

 

 

Пишу скрипт, для того чтобы NPC кидал читал заклинание на находящийся неподалеку сундук (не на другого NPC), ID которого известен.

 

 

Ситуация: NPC находится в 10 шагах от сундука. Заклинание у него - работающее на удаленную цель с радиусом в 100 футов.

 

Казалось бы, все должно работать по стандартной формуле Cast, SpellID, TargetID.

А вот и нет. Ни скрипт, ни консоль не в силах заставить его скастовать заклинание ни на сундук, ни на активаторы.

Однако, NPC с удовольствием проделывает это, если целью заклинания указан другой NPC.

 

Собственно, что нужно сделать, чтобы он читал его именно на сундук (или на обьект, отличный от другого NPC)?

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

Нужна небольшая помощь по скриптописанию.

 

 

Пишу скрипт, для того чтобы NPC кидал читал заклинание на находящийся неподалеку сундук (не на другого NPC), ID которого известен.

 

 

Ситуация: NPC находится в 10 шагах от сундука. Заклинание у него - работающее на удаленную цель с радиусом в 100 футов.

 

Казалось бы, все должно работать по стандартной формуле Cast, SpellID, TargetID.

А вот и нет. Ни скрипт, ни консоль не в силах заставить его скастовать заклинание ни на сундук, ни на активаторы.

Однако, NPC с удовольствием проделывает это, если целью заклинания указан другой NPC.

 

Собственно, что нужно сделать, чтобы он читал его именно на сундук (или на обьект, отличный от другого NPC)?

 

В СХ вроде бы в Вивеке маг на мишени заклинание тренирует (увы, подробностей не знаю). Спроси у кого-нибудь из команды СХ, или скачай и отыщи самого мага, посмотри скрипт... Не знаю чем ещё помочь(

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

Нужна небольшая помощь по скриптописанию.

 

 

Пишу скрипт, для того чтобы NPC кидал читал заклинание на находящийся неподалеку сундук (не на другого NPC), ID которого известен.

 

 

Ситуация: NPC находится в 10 шагах от сундука. Заклинание у него - работающее на удаленную цель с радиусом в 100 футов.

 

Казалось бы, все должно работать по стандартной формуле Cast, SpellID, TargetID.

А вот и нет. Ни скрипт, ни консоль не в силах заставить его скастовать заклинание ни на сундук, ни на активаторы.

Однако, NPC с удовольствием проделывает это, если целью заклинания указан другой NPC.

 

Собственно, что нужно сделать, чтобы он читал его именно на сундук (или на обьект, отличный от другого NPC)?

Целью может послужить только живое сущ-во. НЕ скажу точно, как там сделано в СХ, но скорее всего маги стреляют по кричуру с Return при OnPCHitME, ну или же кричур спрятан внутрь манекена. Однако учти, что в СХ (в 1.5. точно) маги не реагировали на атаки на них. Поэтому в их скрипте это надо учесть.

И да, маг в СХ стоит на плазе в Телванийском квартале.

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

Целью может послужить только живое сущ-во. НЕ скажу точно, как там сделано в СХ, но скорее всего маги стреляют по кричуру с Return при OnPCHitME, ну или же кричур спрятан внутрь манекена. Однако учти, что в СХ (в 1.5. точно) маги не реагировали на атаки на них. Поэтому в их скрипте это надо учесть.

И да, маг в СХ стоит на плазе в Телванийском квартале.

 

Честно говоря, я так и подумал. Теперь как помню, в моде Reign of Fire, что брал с planeteldersrolls была похожая ситуация, простая маленькая, почти невидимая моделька, помещенная в Сreature, без излишеств, с одним лишь блоком Idle анимации и выставленным свойством Fight 0, удаленным пакетом Wander, которую можно спрятать где и в чем угодно, и она работает как детектор скастованного заклинания. Спасибо, что напомнили о ней. Скачал Reign of Fire и взял модельку оттуда. Отлично работает.

 

Квест почти закончен.

Теперь осталось еще кое что: почему то скриптом нельзя сделать вот так на пустом контейнере: MYOComChestPainting -> AddItem, "MYOPainting0", -1. Игра зависает - по видимому, уходит в отрицание или бесконечный цикл. В общем, нужно чтобы в пустой контейнер добавлялись бесконечные предметы. Конечно, можно было сделать вот так: MYOComChestPainting -> AddItem, "MYOPainting0", 100000. Но из за эстетики мода, нужно чтобы в меню сундука предмет визуально был всего один - а на самом деле бесконечный. Потому я и попытался добавить количество -1, по сути, так и делается в Tes Construction. Есть ли другой способ добавить в контейнер бесконечное количество предмета через скрипт?

 

Однако, на полном контейнере с бесконечным количеством предметов (при помещении предмета в сундук было установлено его count на -1), MYOComChestPainting -> RemoveItem, "MYOPainting0", -1 вполне работает (если предмет до этого там уже был) и бесконечный предмет исчезает.

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

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

Попробуйте проверять наличие предмета, если его нет - добавляйте одну штуку. Чтобы предмет нельзя было оложить назад в контейнер - поставьте ему галочку Organic Container, чтобы скрипт не ломался от кнопки "Взять все" - посмотрите тут.
Ссылка на комментарий
Поделиться на другие сайты

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

 

Использовал конструкцию на 10 предметах:

 

If ( GetItemCount, "MYOPainting0" < 1 )

AddItem, "MYOPainting0", 1 и т.д.

 

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

 

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

 

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

 

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

 

Есть такая?

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

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

Не работает довольно старинный мод, отключающий инвентарь при параличе http://download.flig...ownload-110-164

Скрипт вот такой:

 

begin fl_fp_global

short state

short key

if ( MenuMode )

Return

endif

set state to ( player->GetEffect sEffectParalyze )

set key to fl_fp_key

ifx ( state )

MGEDisallowKey key

else

MGEAllowKey key

endif

end

 

Переменная fl_fp_key соответствует правой клавише мыши (257), пробовал и встроенный в МГЕ MWSE, и внешний. Может, возможно реализовать иначе?

 

P.S. Всё готово, спасибо, Дез!

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

Переменная fl_fp_key соответствует правой клавише мыши (257), пробовал и встроенный в МГЕ MWSE, и внешний. Может, возможно реализовать иначе?
А с другими кнопками тоже не работает?

 

А так при параличе можно и DisablePlayerControls использовать ...или это совсем уж жестоко?

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

А с другими кнопками тоже не работает?

А так при параличе можно и DisablePlayerControls использовать ...или это совсем уж жестоко?

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

Это как раз то, что нужно! Уж паралич - так паралич. Тогда, насколько понимаю, зависимость от МГЕ и МВСЕ отбрасывается и глобальная переменная не нужна будет, только глобалскрипт? Если не трудно - поправьте скриптик, чтобы при висящем на персонаже параличе включалась DisablePlayerControls.

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

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

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

А как ты представляешь себе лечение самого себя от паралича?

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

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

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

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

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

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

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

Войти

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

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

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