MSFD Обнаружение использования свитков или книг
Это на удивление трудная задача, так как необходимы 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
Это должно работать без однократного условия в том случае, если вы хотели, чтобы действие совершалось каждый раз, когда вы надеваете книгу, но я это еще не тестировал.