EnableLevitation ; Потосу можно телепортироваться везде кроме части Морнхолда
endif
end
Вот не тестировавшееся предложение для исправления. Последняя версия выглядит так:
Begin TribunalMain
short disablestate short newstate
;по умолчанию, включить телепортауию и левитацию set newstate to 0
;проверять только интерьеры if ( GetInterior ) if ( GetPCCell "Sotha Sil," == 1 ) ;отключить здесь телепортациб и левитацию set newstate to 1 elseif ( GetPCCell "Mournhold" == 1 ) ;отключить здесь левитацию set newstate to 2 endif endif
;если состояие изменилось if ( disablestate != newstate ) if ( newstate == 1 ) DisableTeleporting DisableLevitation elseif ( newstate == 2 ) DisableLevitation elseif ( newstate == 0 ) EnableTeleporting EnableLevitation endif set disablestate to newstate endif
end
Примечание: DinkumThinkum предложил следующий способ запрета телепортации. Проверяется, находится ли игрок в определенной ячейке. Если нет, то его скриптом телепортируют, допустим, в начало мода.
Begin DT_Test_BalmoraTrap
If ( GetPCCell, "Balmora" == 1 ) Return Endif
MessageBox "Давай назад в Балмору!" Player -> PositionCell, -21278, -17613, 534, 0, "Balmora (-3, -3)"
End DT_Test_BalmoraTrap
Ограничение левитации
[no fix] EnableLevitation
[no fix] DisableLevitation
Эти функции используются для разрешения и запрещения левитации. Когда вызывается DisableLevitation, все существующие эффекты левитации отменяются. Когда игрок пытается скастоваться заклинание с эффектом Левитации, когда она отключена, будет показано следующие сообщение, хранящееся в sLevitateDisabled, - «Levitation magic does not work here».
Примеры:
Это скрипт установлен на объект в комнате с выключенной левитацией.
Begin clampstone
short turnedoff
short gavemessage
if ( turnedoff == 0 )
DisableLevitation
if ( gavemessage == 0 )
set gavemessage to 1
MessageBox "Странный камень на крыше не дает левитеировать."
Endif
else
EnableLevitation
if ( gavemessage == 1 )
set gavemessage to 0
MessageBox "Камень отключен. Теперь можно левитировать."
Endif
endif
if ( OnActivate == 1 )
if ( turnedoff == 0 )
set turnedoff to 1
else
set turnedoff to 0
endif
endif
end
Этот скрипт на двери, ведущий из комнаты.
Begin enable_lev_on_exit
if ( OnActivate == 1 )
MessageBox "Покидаете комнату с камнем..."
EnableLevitation
Activate
endif
end
Проверка и работа с душами и камнями душ
HasSoulgem, "CreatureID"
If ( Actor -> HasSoulGem, "golden saint" )
Эта функция проверяет, есть ли у игрока камень душ, содержащий указанную душу. Маленькая полезная функция, которая может дать какое-нибудь интересное задание или новую область использования камней душ.
Удаляет камень с указанной душой из инвентаря игрока.
Пример: это дополнительная часть скрипта RemoveStrongSoul для примера, описанного выше:
if ( counter > 0 )
if ( Player->HasSoulGem "atronach_storm" > 0 )
Player->RemoveSoulGem "atronach_storm" 1
Set counter to ( counter - 1 )
endif
endif
Заметьте, что у игрока можно таким образом отнять Звезду Азуры. Вот решение:
short StarCount ;не может быть больше одной.
if ( OnActivate )
if ( Player->HasSoulGem "Golden Saint" > 0 )
set StarCount to ( Player->GetItemCount "Misc_Soulgem_Azura" )
Player->RemoveSoulGem "Golden Saint" 1
if ( ( Player->GetItemCount "Misc_Soulgem_Azura" ) < StarCount )
Player->AddItem "Misc_Soulgem_Azura" 1
endif
Player->AddItem Gold_001, 10000
MessageBox "Спасибо, заходите еще."
else
MessageBox "You У вас не камней душ с Золотыми Святошами."
endif
endif
AddSoulGem"creature ID", "soulgem ID"
AddSoulGem "atronach_storm", Misc_Soulgem_Grand
AddSoulGem добавляет камень душ указанного типа и с указанной душой в инвентарь игрока. Не уверен, что здесь можно указать количество камней.
DropSoulgem, "Creature ID"
DropSoulGem "atronach_storm"
Я это еще не тестировал – думаю, это заставит вызывающего актера бросить камень, содержащий указанную душу.
[no fix] OnPCSoulGemUse (is short variable)
Объект – это камень душ и он был использован или для перезарядки или для создания предмета.
Камни душ в игре имеют следующие ID:
ID камней душ:
Misc_SoulGem_Azura
Misc_SoulGem_Grand
Misc_SoulGem_Greater
Misc_SoulGem_Common
Misc_SoulGem_Lesser
Misc_SoulGem_Petty
Эта функция не использовалась в оригинальной игре.
Добавление и удаление заклинаний и проклятий
AddSpell, "SpellID"
RemoveSpell, "SpellID"
"Actor_ID" -> AddSpell "Absorb Speed"
Функция AddSpell добавит заклинание вызывающему объекту. Это означает следующее: обычные заклинания добавятся в список заклинаний игрока. Проклятья, болезни и т.д. будут наложены на вызывающий объект. То же верно для функции RemoveSpell: обычные заклинания удаляться из списка, проклятья и болезни уберутся как эффект.
Примечание: Нельзя удалять расовые характеристики этой функцией (информация с форумов).
Кастование заклинаний
Cast, SpellID, "TargetID"
Object_ID -> Cast, "flame", Player
Функция Cast заставляет вызывающий объект кастовать заклинание "SpellID" в цель "TargetID", и на цель будут влиять положительные или отрицательные эффекты заклинания.
Примечание: Считается, что функция Cast работает только для игрока. По крайней мере, с Трибуналом (не уверен насчет ранних версий), вы можете использовать Cast для того, чтобы «метать» заклинание с активатора на актера – возможно, другие комбинации также работают.
Пример: Функция Cast может использоваться для ловушек, как в следующем скрипте, прикрепленном к Контейнеру. Учтите, что здесь есть однократное условие, так что эффект не будет накладываться на игрока постоянно.
Begin Trap_script short done if ( OnActivate == 1 ) if ( done == 1 ) ;однократное условие Activate return else Cast, "flame", Player ;повредить игрока set done to 1 Activate endif endif End trap_script
Следующий пример использует функцию AddSpell:
begin Item_Cast short OnPCEquip short CurseAdded float Timer if ( CurseAdded )
set Timer to ( Timer + GetSecondsPassed ) if ( Timer >= 25 ) ; по прошествии 25 сек удалить заклинание. 25 очков здоровья снято. set Timer to 0 Player->RemoveSpell"ItemFlame"
set CurseAdded to 0 endif endif if ( OnPCEquip ); когда предмет надет if ( MenuMode ) return elseif ( CurseAdded == 0 ) Player->AddSpell "ItemFlame" ; заклинание типа «проклятье»!
;заклинание, наносящее одни пункт повреждения огнем в секунду set Timer to 0 set CurseAdded to 1 elseif ( CurseAdded ) ; Добавить заклинание только раз Player->RemoveSpell "ItemFlame" set CurseAdded to 0 endif end Item_Cast
(скрипт от Patrin, отредактированный)
Добавленное заклинание — это самодельное проклятье, поражающее огнем на одно очко здоровья каждую секунду. Заметьте, что здесь снова есть условие do once, встроенное в скрипт. Если условия do once не будет, то это может привести к краху игры! Также, похоже, что существо, убитое заклинанием типа проклятие, добавит ко всем таким существам это проклятие. Этого можно избежать, вызывая RemoveSpell в секции OnDeath[38]. (Информация с форумов / Argent)
Некоторая информация по различным типам заклинаний: Характеристика, отнимающая здоровье, повреждает МАКСИМАЛЬНОЕ здоровье, а Проклятие нет. Это, похоже, не относится к увеличивающим и уменьшающим эффектам (Информация с форумов / ManaUser).