Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скрипты Morrowind.doc
Скачиваний:
108
Добавлен:
29.10.2018
Размер:
2.81 Mб
Скачать

Обнаружение использования свитков или книг

Это на удивление трудная задача, так как необходимы OnActivate и OnPCEquip, И обе они не работают так, как ожидалось. Kir нашел решение, показанное в этом скрипте для кредитного письма:

Begin BankLetter10 short button short messageOn short invoke short gone short goneway short testdist short PCSkipEquip short OnPCEquip set PCSkipEquip to 1 ; отключаем при использовании (одноразовый объект) if ( gone == 1 ) if ( goneway == 1 ) ; активируется как внешний объект Disable else ; перетаскивается из инвентаря startscript BankLetter10Remove endif set gone to 0 return endif if ( OnActivate == 1 ) Set messageOn to 2 set goneway to 1 endif If ( OnPCEquip == 1) Set messageOn to 2 Set OnPCEquip to 0 set goneway to 2 endif if ( messageOn == 0 ) return endif if ( messageOn == 2 ) MessageBox " Вы хотите получить Кредитное письмо?" "Да" "Нет" Set messageOn to 1 return endif if ( messageOn == 1 ) set button to GetButtonPressed if ( button == 0 ) Set invoke to 1 Set messageOn to 0 ; return endif if ( button == 1 ) Activate Set messageOn to 0 return endif endif if ( invoke == 1 ) PlaySound "Item Gold Up" Player->AddItem, Gold_001, 10000 set gone to 1 set invoke to 0 endif End

Вдохновленный скриптом BankLetter, я обнаружил способ исполнять скрипты на книгах и свитках, когда они экипируются из инвентаря или активируются в игровом мире и свиток/книга нормально отображаются. Удивительно, но PCSkipEquip, а не OnPCEquip устанавливается в 1 при экипировке книги на игрока. Вот что я сделал:"

Begin activateBook

short OnPCEquip

short PCSkipEquip

short doOnce

short actionFlag

if ( actionFlag == 1 )

if ( doOnce == 0 )

; добавьте сюда ваш код

set doOnce to 1

endif

set actionFlag to 0

endif

; PCSkipEquip устанавливается 1 каждый раз когда книги экипируется

if ( PCSkipEquip == 1 )

set PCSkipEquip to 0

set actionFlag to 1

return

endif

; эти строки нужны, иначе книгу нельзя будет поднять с земли

if ( MenuMode == 1 )

return

endif

; для активации книги снова при подъеме с земли

if ( OnActivate == 1 )

set actionFlag to 1

Activate

endif

End

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

Заставляем Актеров переключать оружие

Так как функция Equip не работает, единственный способ сделать это – убрать предметы у Актера или модифицировать его навыки во время игры.

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

Begin HBCaravanGuardAI

; Этот скрипт делает ИИ охранника более опасным, заставляя его менять лук на меч, когда игрок вблизи

short currentarrows

short storearrows

short doonce

set currentarrows to GetItemCount "arrow of wasting flame"

if ( doonce == 0 )

set storearrows to currentarrows

endif

if ( GetDistance, Player < 120 )

set currentarrows to GetItemCount "arrow of wasting flame"

if ( currentarrows > 0 )

RemoveItem "arrow of wasting flame", 1

set doonce to 1

endif

elseif ( GetDistance, Player >= 120 )

if ( currentarrows < storearrows )

AddItem "arrow of wasting flame", 1

else

set doonce to 0

endif

endif

End

Следующий пример, сделанный Bethesda, который делает то же самое, используя метод изменения навыков (предположительно более элегантный чем мой  ):

begin marksmanToggle

short counter

short myMarksman

if ( MenuMode == 1 )

return

endif

if ( counter < 20 )

Set counter to counter + 1

Return

endif

if ( myMarksman == 0 )

set myMarksman to GetMarksman

endif

if ( GetMarksman > 0 )

if ( GetDistance Player < 400 )

SetMarksman 0

endif

else

if ( GetDistance Player > 600 )

SetMarksman myMarksman

endif

endif

; для дизайнеров уровней... заставляет ИИ делать то, что должен делать

;вблизи они используют холодное оружие

;издалека они используют стрелы

;проверка идет каждый 20 кадр для скорости

;Примечание: не влияет на ИИ, использующих магию

End