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

Проверка присутствия предметов в инвентаре

GetItemCount, "ObjectID" (returns short)

Short objectcount

Set objectcount to ( "Mob_ID" -> GetItemCount, "Object_ID" )

If ( GetItemCount, "Object_ID" >= 1 )

Эта функция проверяет инвентарь вызывающего объекта и возвращает число объектов типа "Object_ID", которые там присутствуют.

Починка предметов

[no fix] OnPCRepair (is short variable)

Short OnPCRepair

If ( OnPCRepair == 1 )

Игровая переменная, которая принимает значение 1, когда игрок чинит вызывающий объект. Требует ручного сброса.

RepairedOnMe, "Object ID" (returns Boolean/short)

if ( "daedric_mace"->RepairedOnMe, "repair_journeyman_01" == 1 )

Эта функция возвращает 1, если вызывающий объект чинится предметом типа "Object ID". Object ID должен быть типа "Repair Item", и вызывающий объект должен быть либо оружием, либо броней.

OnRepair

Схожая функция OnRepair в настоящий момент испорчена. Она должна принимать значение 1, когда объект чинится любым предметом: "возвращает 1, если вызывающий объект чинится вообще".

Информация о надетых объектах

GetWeaponType (returns short)

If ( Player->GetWeaponType == 0 )

;Игрок использует короткие клинки

GetArmorType, armorPart_enum (returns short, -1 to 2)

If ( Player->GetArmorType, 0 == 2 )

;Игрок носит тяжелый шлем

Эти функции вызываются на актере, чтобы собрать информацию об объектах, надетых на актере. GetWeaponType возвращает тип текущего оружия актера (см Таблицу 1.1). GetArmorType возвращает вес определенной части брони на актере (см Таблицу 1.3). Номера частей брони даны в Таблице 1.2. HasItemEquipped возвращает 1, если актер экипировался данным предметом и 0, если нет.

Типы оружия19 (Таблица 1.1):

Имя типа оружия

Номер типа

Unarmed (Рукопашная)

-1

Short blade, 1 hand (Короткие клинки)

0

Long blade, 1 hand (Длинные клинки, одноручное)

1

Long blade, 2 hand close (Длинные клинки, двуручное)

2

Blunt, 1 hand (Дробящее, одноручное)

3

Blunt, 2 hand close (Дробящее, двуручное)

4

Blunt, 2 hand wide (Дробящее, посохи)

5

Spear, 2 hand wide (Древковое)

6

Axe, 1 hand (Секиры, одноручное)

7

Axe, 2 close (Секиры, двуручное)

8

Bow (Луки)

9

Crossbow (Арбалеты)

10

Thrown weapon (Метательное)

11

Arrow<?> (Стрелы)

12

Bolt<?> (Болты)

13

Части брони20 (Таблица 1.2):

Имя части брони

Номер части

Helmet (Шлем)

0

Cuirass (Кираса)

1

Left Pauldron (Левый наплечник)

2

Right Pauldron (Правый наплечник)

3

Greaves (Штаны)

4

Boots (Ботинки)

5

Left Gauntlet (Левая рукавица)

6

Right Gauntlet (Правая рукавица)

7

Shield (Щит)

8

Left Bracer (Левый наруч)

9

Right Bracer (правый наруч)

10

Типы брони / вес (Таблица 1.3):

Имя типа брони

Номер типа

Unarmored (Бездоспешный)

-1

Light Armor (Легкая броня)

0

Medium Armor (Средняя броня)

1

Heavy Armor (Тяжелая броня)

2

HasItemEquipped "item_ID" (returns short)

If ( Player -> HasItemEquipped "chitin club" == 1 )

;ты жалок!

Пример:

Когда этот скрипт добавлен к объекту, его активирование приводит к получению «повреждению» этого объект, в зависимости от текущего оружия и силы игрока. Если оружие – особое оружие с ID “Rock Splitter” объект разрушается за один удар. Когда объект полностью разрушен, он взрывается, посылая в лицо игроку осколки, если игрок не носит щит или шлем.

Begin breakme

float hitsleft

float hitpercent

short damage

short tempdamage

short weapon

short doOnce

short shieldType

short hasHammer

short hitRock

if ( doOnce == 0 )

set hitsleft to 10000

set doOnce to 1

endif

if ( OnActivate )

set hasHammer to ( player->HasItemEquipped "RockSplitter" )

if ( hasHammer == 1 )

MessageBox "Разрушитель Скал показывает свю силу..."

set hitsLeft to 0

else

MessageBox "Вы ударяете скалу своим оружием..."

set weapon to ( player->GetWeaponType )

set damage to ( player->getstrength )

set tempdamage to 5

if ( weapon == -1 )

set tempdamage to 1

endif

if ( weapon >= 9 )

set tempdamage to 2

endif

if ( weapon == 4 )

set tempdamage to 10

endif

if ( weapon == 8 )

set tempdamage to 8

endif

set damage to damage * tempdamage

set hitsleft to hitsleft – damage

endif

if ( hitsleft <= 0 )

disable

set shieldType to ( player->GetArmorType 8 )

if ( shieldType == -1 )

set shieldType to ( player->GetArmorType 0 )

if ( shieldType == -1 )

MessageBox "...и скала раскалывается, а осколки летят вам в лицо."

Player->ModHealth –50

else

MessageBox "...и скала разрушается, но осколки отскакивают от вашего шлема."

Endif

else

MessageBox "...и скала разрушается, но осколки отскакивают от вашего щита."

Endif

else

set hitpercent to hitsleft / 100

set hitpercent to 100 – hitpercent

MessageBox "...и скала повреждается на %.2f процентов, хотя и остается целой.", hitpercent

endif

endif