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

Манекены

Это очень популярно, т.к. позволяет показать коллекцию собранной брони. Найти манекены можно во многих модах с домами. Здесь показано, как это работает (огромное спасибо Stephen Kent aka Riiak Shi Nal за то, что поделился скриптом). Этот пример «следующего поколения», который использует функции Трибунала, чтобы проверить наличие брони/оружия на манекене и предупредить об этом пользователя, пока он не поднял манекен. (Riiak еще не разобрался, как заставить манекены показывать оружие). Также разбит на два различных скрипта, чтобы поддерживать и мужскую, и женскую версию манекенов. Эти изменения не предохраняют игрока от потери прочих вещей при подъеме манекена, если они в то время были на нем.

Я добавил свои комментарии к комментариям Riiak'а. На самом деле манекен — обычный NPC со здоровьем равным нулю или труп (здоровье установлено в 0 из TES CS). В этой версии нужно просто активировать их, чтобы дать предметы, манекен автоматически наденет броню.

Begin rsn_mannequin_f_script

short button

short questionState

short nEquipType

short nStillEquipped

float fDeleteTimer

SkipAnim ;GBG: Это необходимо, это заставит манекена, который явл. NPC, стоять на месте

if ( menumode == 1 )

return

endif

if ( GetDisabled == 1 )

; если манекен отключен, ждем немного и удалим копию

Set fDeleteTimer to ( fDeleteTimer + GetSecondsPassed )

if ( fDeleteTimer > 5 )

SetDelete 1

endif

return

endif

if ( OnActivate == 0 )

if ( questionState == 0 )

return

endif

endif

if ( questionState == 0 )

MessageBox, "Одеть манекен", "Передвинуть манекен", "Доб/Удалить Броню"

set questionState to 1

endif

if ( questionState == 1 )

set button to GetButtonPressed

if ( button == 0 )

set questionState to 10

elseif ( button == 1 )

set questionState to 0

Activate

endif

endif

if ( questionState == 10 )

; Эта секция разбита на 2 группы вложений из-за ограничений на вложения

; скриптового языка.

Set nStillEquipped to 0

; Проверка, есть ли оружие (в основном для того, если кто-то догадается

; как заставить манекены показывать оружие)

Set nEquipType to ( GetWeaponType )

if ( nEquipType == -1 )

; Проверка, есть ли броня (Примечание: есть 10 различных частей

; брони, так что проверяем каждую индивидуально)

Set nEquipType to ( GetArmorType 0 )

if ( nEquipType == -1 )

Set nEquipType to ( GetArmorType 1 )

if ( nEquipType == -1 )

Set nEquipType to ( GetArmorType 2 )

if ( nEquipType == -1 )

Set nEquipType to ( GetArmorType 3 )

if ( nEquipType == -1 )

Set nEquipType to ( GetArmorType 4 )

if ( nEquipType == -1 )

Set nEquipType to ( GetArmorType 5 )

if ( nEquipType != -1 )

Set nStillEquipped to 1 ;GBG: Установить в 1, если броня все еще надета

endif

else

Set nStillEquipped to 1

endif

else

Set nStillEquipped to 1

endif

else

Set nStillEquipped to 1

endif

else

Set nStillEquipped to 1

endif

else

Set nStillEquipped to 1

endif

else

Set nStillEquipped to 1

endif

if ( nStillEquipped != 1 ) ;Продолжаем, только если не нашли ничего надетого.

Set nEquipType to ( GetArmorType 6 )

if ( nEquipType == -1 )

Set nEquipType to ( GetArmorType 7 )

if ( nEquipType == -1 )

Set nEquipType to ( GetArmorType 8 )

if ( nEquipType == -1 )

Set nEquipType to ( GetArmorType 9 )

if ( nEquipType == -1 )

Set nEquipType to ( GetArmorType 10 )

If ( nEquipType == -1 )

;Показать этот вопрос только если на манекене не осталось оружия/брони.

MessageBox "Вы убрали все вещи с манекена?", "Да", "Нет"

else

Set nStillEquipped to 1

endif

else

Set nStillEquipped to 1

endif

else

Set nStillEquipped to 1

endif

else

Set nStillEquipped to 1

endif

else

Set nStillEquipped to 1

endif

endif

; Теперь переходим к следующей стадии обработки (либо ждем выбора пользователя, либо

; активируем немедленно)

set questionState to 20

endif

if ( questionState == 20 )

if ( nStillEquipped != 1 )

set button to GetButtonPressed

else

; На манекене все еще есть оружие/броня, так что мы активируем его и предупреждаем

; пользователя вместо убирания манекена.

MessageBox "Вы не забрали все вещи."

Set button to 1 ;говорит, что на манекене есть вещи

endif

if ( button == 0 )

set questionState to 0

; Отключаем текущий манекен

; и создаем новый, не заботясь о потере вещей

; GBG: если манекен будет много перемещаться

; то функция SetDelete пригодиться

Disable

; Это предмет, содержащий скрипт

; на создание нового манекена при выбрасывании.

; GBG: для "женского" манекена будет другой предмет

player->addItem, "_rsn_man_f_holder", 1

playSound "Item Misc Up"

elseif ( button == 1 )

; На манекене остались вещи (либо с проверки, либо по выбору пользователя)

set questionState to 0

Activate

endif

endif

end

Следующий скрипт вешается на предмет, добавляемый в инвентарь, когда мы перемещаем манекен. Когда вы бросите его, у ваших ног появиться новый манекен, без брони. Вы ее все иначе потеряете:

; Скрипт разбит на 2 скрипта, чтобы поддержать 2 пола манекена.

Begin rsn_man_f_holder_script

short OnPCDrop

float fDeleteTimer

if ( GetDisabled == 1 )

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

Set fDeleteTimer to ( fDeleteTimer + GetSecondsPassed )

if ( fDeleteTimer > 5 )

SetDelete 1

endif

return

endif

if ( OnPCDrop == 1 )

Disable

; Это NPC с 0 здоровьем, стоящий труп.

PlaceAtPC, "_rsn_mannequin_female", 1, 0, 0

Set OnPCDrop to 0

endif

end