Задача 4: Множественность ядовитости (ф-ии OBSE)

Автор: Visman

Задача:
Нужно оружие, которое бы заряжалось ядом на три удара (такую задачу мне поставил JUMPER в свое время).

Решение:
Думаю стандартные средства КС не подойдут. Скрипт для оружия будем писать с помощью ф-ий OBSE.

Создаем и сохраняем новый скрипт svaScriptTestQ4. Тип скрипта Object (задаем в поле Script Type).

scn svaScriptTestQ4

ref rBO ; хранит ссылку на базовый объект (оружие)
ref Templar ; хранит ссылку на контейнер в котором лежит оружие
ref rPoison ; хранит ссылку на яд, который присутствует на оружие
ref rPoison2 ; хранит ссылку на яд, который присутвует на оружие при последующих проверках
short kolvo ; число использования яда

; в игровом режиме
Begin GameMode

; определяем ссылку на контейнер в котором находится оружие с этим скриптом
; НПС и игрок - это контейнеры, как и сундуки, и существа
Set Templar to GetContainer
If ( Templar.IsActor != 1 ) ; если оружие не у актера
Return ; прерываем выполнения скрипта, т.к. нет ни какого смысла тратить проц. время
endif
Set rBO to GetBaseObject ; определяем базовое оружие того на котором висит скрипт
If ( Templar.GetEquipped rBO == 1 ) ; если оружие в руке актера, будем обрабатывать ситуации
if ( kolvo == 0 ) ; если еще не был определен яд
Set rPoison to Templar.GetEquippedWeaponPoison ; то определяем на него ссылку
if ( rPoison != 0 ) ; и если он действительно присутсвует на оружие
Set kolvo to 1 ; включаем отчет числа использований яда
endif
elseif ( kolvo > 0 ) ; значит яд на оружие уже присутвует
Set rPoison2 to Templar.GetEquippedWeaponPoison ; какой на данный момент яд наложен на оружие
if ( kolvo > 3 ) ; яд уже использовался более 3 раз в атоматическом режиме
Set kolvo to 0 ; значит сбрасываем кол-во и начинаем обрабатывать ситуации с самого начала
elseif ( rPoison2 == 0 ) ; яд отсутсвует сейчас на оружие, значит он был использовать при ударе
Set kolvo to kolvo + 1 ; увеличиваем число использований на 1
if ( kolvo > 3 ) ; яд уже использовался более 3 раз в атоматическом режиме
Set kolvo to 0 ; значит сбрасываем кол-во и начинаем обрабатывать ситуации с самого начала
else ; иначе яд можно еще использовать в атоматическом режиме
Templar.SetEquippedWeaponPoison rPoison ; накладываем на оружие еще один раз тот же самый яд
endif
elseif ( rPoison2 != rPoison ) ; возникла ситуация - на оружие появился новый яд
Set kolvo to 0 ; значит сбрасываем кол-во использований яда и начинаем обрабатывать ситуации с самого начала
endif
endif
endif

End



Теперь создадим новое оружие svaWeapSwordTestQ4 из даэдрического короткого меча WeapDaedricShortsword путем переименовывания его Editor ID (на вопрос "Create a new object?" ответим "Да").
В свойствах нового меча в поле Script пропишите svaScriptTestQ4.
Киньте меч в игровой мир (например в Торговый район Имперского города) и вперед на тестирование ядовитости :)
P.S. Об установке OBSE и использовании его с КС можете прочитать тут.
Скрипт на оружие должен работать не только в руках игрока, но и у любого актера.

Задания:
1. Измените скрипт так, чтобы число ударов оружием с ядом изменялось в зависимости от уровня Алхимии у актера держащего это оружие. При Алхимии90 - скрипт добавляет 9 ударов с тем же ядом. (Смотрите ф-ию GetActorValue)


Оглавление