Home Random Page


CATEGORIES:

BiologyChemistryConstructionCultureEcologyEconomyElectronicsFinanceGeographyHistoryInformaticsLawMathematicsMechanicsMedicineOtherPedagogyPhilosophyPhysicsPolicyPsychologySociologySportTourism






Short AllowWerewolfForceGreeting

 

if ( GetJournalIndex BM_FrostGiant2 == 10 )

if ( doOnce == 0 )

if ( GetDistance Player <= 512 )

if ( Player->IsWerewolf == 1 )

ForceGreeting

set doOnce to 1

endif

endif

endif

elseif ( GetJournalIndex BM_FrostGiant2 == 70 )

if ( doOnce == 1 )

if ( GetDistance Player <= 512 )

;if ( Player->IsWerewolf == 1 )

ForceGreeting

set doOnce to 2

;endif

endif

endif

endif

 

End dulkScript

 

Множественный выбор – как задавать вопросы

[no fix] Choice, “choice 1”, choice1_enum ["choice 2", choice2_enum, …]

 

Choice "да", 1, "Нет, конечно нет!", 2

 

(Только для диалогов!)

Это используется в поле result диалогового окна в TES CS, чтобы дать игроку выбор или просто «продолжить» длинную речь[34]. После того, как игрок сделает выбор, та же тема (topic) будет проверена снова, и вы можете задать нужную реакцию, используя функцию / choice / = / choice_enum в условиях для говорящего окна диалога в TES CS. Не применима в скриптах, насколько я знаю.



Информация от Riiak: В отличие от messageBox, эта функция может использовать стек. Под этим я подразумеваю, что вы можете использовать 2 вызова choice в одном поле result для 10 choice-ов максимум или 3 вызова Choice для 15 choice-ов максимум и т.д. Я не знаю лимита стека, но уверен, что он есть. (Думаю, он ограничен 5 choice за вызов).

Добавление записей в журнал и тест записей журнала

[no fix] Journal, "Journal_ID", Index_enum

 

Journal, MG_BCShroomsCombat, 10

 

Эта функция добавляет запись в ваш игровой журнал, запись должна быть заранее определена в редакторе диалогов. Индекс показывает, какая запись из журнальной темы будет добавлена. Остерегайтесь использовать простые названия для журнальных тем, добавляйте 2 буквы в начале, как это сделано у Bethsoft (смотрите скрипт ниже) – иначе запись журнала будет показана, как обычная тема для диалога, если эта тема будет упомянута в диалоге!

 

(Информация с форумов / Melian)

[no fix] SetJournalIndex"Journal_ID" index_enum

 

SetJournalIndex "MG_BCShroomsCombat" 99

 

Setjournalindex установит индекс в нужное значение, не важно есть для этого значения запись в журнале или нет (полезно для простых флагов для которых не нужны записи в журнале).

Примечание: После перезагрузки, индекс установится в наибольшее значение из тех записей, которые уже были добавлены в журнал. Так что это может быть использовано для определения загрузился ли игрок:

 

if ( ( getjournalindex "dummy" ) != 100 )
Messagebox "Ты перезагрузился, читер!!!"
setjournalindex "dummy" 100
endif

 

"Dummy" это любая журнальная запись, у которой нет записи с индексом 100.


Самое хорошее, что это легко использовать в диалоге: послать игрока на тяжелое задание, и установить индекс в поле result. Если по возвращении игрока индекс изменился, значит, игрок провалил задание (информация от JOG).

 

[no fix] ClearInfoActor

 

Эта функция используется в поле result диалогового окна – используя ее можно предотвратить появление темы в журнале игрока (в секции "Темы"). Полезно, чтобы предотвратить засорение секции Темы бесполезной информацией.

 

[no fix] GetJournalIndex, "JournalID" (returns short)

 

If ( GetJournalIndex, MG_BCShroomsCombat == 10 )

 

Эта функция возвращает индекс наибольшей (последней?) записи в журнале для конкретной темы. Это очень удобно для отслеживания развития квеста, и для задания реакции скрипта на то, какая часть задания уже выполнена.

 

Пример: Это короткий скрипт, демонстрирующий использование обеих функций в игре.

 

Begin attack_slave

 

short nolore

 

If ( GetDeadCount "Vorar Helas" > 0 )

return

endif

 

if ( GetJournalIndex"MV_SlaveMule" < 102 ); если игрок не достиг определенной точки

If ( GetDistance, "Rabinna" < 512 )

Rabinna->AiWander 0 0 0 0 0 0 0

StartCombat, "Rabinna"

Journal "MV_SlaveMule", 102 ; добавить запись

endif

endif

 

End

Специальные диалоговые функции

В числе функций, доступных для определения условий диалога в редакторе диалогов, есть некоторые, не имеющие прямого эквивалента в функциях для скриптов. Используя диалог (напр.: ForceGreeting, голосовой диалог или стратегически расположенного квестового NPC) и поле Редактора диалогов result, вы можете использовать эти функции для скриптовых целей, например, устанавливая глобальную переменную в поле result. Вот примеры этих функций:

 

PC Sex (dialog)

0, если игрок мужчина и 1, если женщина.

Примечание: Это единственный способ определить пол игрока – вы можете использовать это, чтобы установить глобальную переменную, содержащую пол игрока – самый легкий способ через Voice, то есть поместить приветствие hello для всех NPC вверху листа, которое устанавливает переменную в 1 - если игрок мужчина, и 2 – если женщина. В теме также должно быть условие, что эта переменная равна нулю, то есть, не установлена.

 

Talked to PC (dialog)

1, если говорящий уже разговаривал с игроком и 0, если нет. Вы можете использовать эту функцию, чтобы кто-то сказал что-то, когда игрок говорит с ним в первый раз, или для наших скриптовых целей, чтобы пометить актера, как “известного” игроку.

Похоже, что Talked to PC сбрасывается в 0, если игрок провел 72 часа вне ячейки с NPC. Это ограничение также применяется к другим диалоговым функциям, например ForceGreeting: NPC доступен из другой ячейки только 72 часа. Этот можно обойти вызывая PositionCell на NPC каждый день (даже не перемещая его никуда). (Информация с форумов / Cortex, Srikandi). Этот фокус, похоже, требует, что ячейка, куда они перемещаются, должна быть не той же самой ячейкой, где игрок впервые встретил их. (Информация с форумов / Cortex)

 

Это предполагает, что или ячейка не должна быть ячейкой, куда их поместили в редакторе, или ячейкой, где игрок еще не бывал. Я использую интерьер для этого, и у меня все работает.

Так что после того, как вы их встретили, они посылаются в эту ячейку каждый день, хотя они и так уже там.

 

Rank Requirement (dialog)

Эта функция для проверки вашего соответствия для следующего ранга во фракции говорящего.

Функция возвращает 0, если у вас не достает репутации во фракции (Faction Reputation) и вы не удовлетворяете требованиям по навыкам.

Функция возвращает 1, если у вас не достает репутации во фракции (Faction Reputation), но вы удовлетворяете требованиям по навыкам.

Функция возвращает 2, если у вас достает репутации во фракции (Faction Reputation), но вы не удовлетворяете требованиям по навыкам.

Функция возвращает 3, если вы готовы к повышению.

 

PC Clothing Modifier (dialog)

Это полная стоимость всей одежды и брони, надетой на игрока. Стоимость вашего снаряжения меняет отношение к вам людей в игре.

 

Friend Hit (dialogue)

Используется в диалоге для того, чтобы определить реакцию члена вашей группы на вашу же атаку на них.

Возвращаемые значения:

0 = атаки не было

1 = атакован игроком в первый раз

2 = атакован игроком во второй раз

3 = атакован игроком в третий раз

4 = атакован игроком в четвертый раз и npc/животное не дерется с игроком.

 

Hello

Get/Mod/SetHello

Это изменяет ВСЕ копии актера. Информация из хелпа: Hello определяет дистанцию, при которой актер остановится, повернется к игроку и скажет привет. Это значение (по умолчанию 30) умножается на iGreetDistanceMultiplier (по умолчанию 7). Также при hello 30, расстояние будет равно 10 футам (210 ед).

Полезные диалоговые переменные

Ряд переменных Bethesda использует для блокирования определенных диалогов. Они должны быть просто объявлены, без установки значений.

Они проверяются использую условие Not Local как описано в хелпе:

 

Nolore Блокирует большинство общих диалогов
NoIdle Блокирует голоса Idle, используется для вампиров
NoFlee Блокирует голоса flee, используется для вампиров
NoHello Блокирует голоса Hello, используется для вампиров

 

Условие истинно, если игрок не имеет переменной. В отличие от большинства условий "Not", этой не важно, во что вы установили переменную. И в диалоге она (переменная) должна сравниваться с 0, и сама быть равной 0. Это может быть странно. Вот таблица, которая показывает как это работает:

 

Not Local Переменная существует Значение Подходит?
(в диалоге) (да/нет) (в скрипте) (говорящий это скажет)
= 0 Нет Не доступно Да
= 0 Да Нет
= 0 Да Да
= 1 Нет Не доступно Да
= -3 Да -3 Нет

 


Изменяем и проверяем Навыки, Атрибуты и другие характеристики

Get, Set, and Mod Stats – общие замечания

GetStat (returns float)

SetStat, var_float

ModStat, var_float

Set floatvar to ( Player -> GetHealth )

Player -> SetWillpower, 20

Player -> ModHealth, floatvar

 

Это целое семейство функций, которые позволяют изменять параметры игрока и актера, установки ИИ и многое другое. Просто замените Stat любым игровым параметром, атрибутом, установкой ИИ, сопротивлением болезни, репутацией, и т.д. (список смотри в Приложении). Положительные значения прибавляются к текущему параметру, отрицательные значения вычитаются.

Функция GetStat возвращает значение типа float, содержащее текущее значение параметра (Stat) (Не максимальное или базовое “естественное” значение параметра для игрока, а его текущее значение, используемое в игре, например, оно может быть усилено магией или уменьшено проклятием).

Функция SetStat устанавливает заданное базовое и текущее значение параметра.

Функция ModStat добавляет (положительные значения добавляются к текущему значению параметра, отрицательные значения вычитаются) заданное значение сразу к базовому и текущемузначению параметра (Stat). Функция ModStat не может устанавливать атрибут больше его лимита (100), тогда как SetStat может.

Примечание: Это может быть неверно для таких необычных характеристик как сопротивления, которые могут быть отрицательными или превосходить 100.

 

Существует так много вещей, которые можно сделать, используя эти функции, что не очень полезно приводить пример. Посмотрите скрипт Marksman Toggle в разделе Советов и Трюков в качестве хорошего примера. Скрипт, приведенный в «Воскрешение мертвого актера» ниже также использует ModHealth, как и многие другие.

 

Эти команды имеют тысячи способов применения. Они могут использоваться в проклятиях, специальных предметах, благословениях, для сбора информации о силе и слабости игрока, для изменения установок ИИ (делаем NPC агрессивным, после того как игрок его оскорбил, NPC не разговаривает с вами ночью и т.д.) Также можно изменять навыки владения оружием и броней, чтобы NPC переключался между разными их видами.

 

В 8-ой редакции многие эти функции были отсортированы в соответствующие разделы (то есть по магии, бою и т.д.)


Определение и изменение характеристик игрока и актеров:

Определение и изменение атрибутов:

Get/Mod/SetStrength

Get/Mod/SetIntelligence

Get/Mod/SetWillpower

Get/Mod/SetAgility

Get/Mod/SetSpeed

Get/Mod/SetEndurance

Get/Mod/SetPersonality

Get/Mod/SetLuck

Определение и изменение Здоровья, Магии и Усталости:

Get/Mod/SetHealth

Get/Mod/SetMagicka

Get/Mod/SetFatigue

 

Эти три функции возвращают, изменяют или устанавливают жизненные функции для игрока. Для NPC и игрока функции Get выдадут текущее здоровье/магию/усталость. GetHealth также работает с оружием/броней, но возвращает максимальное здоровье. Неизвестна ни одна функция, которая бы возвращала текущее здоровье предмета (информация с форумов / Mana User).

 

Специальное использование ModStat:

ModCurrentHealth, var_float

ModCurrentMagicka, var_float

ModCurrentFatigue, var_float

 

Тогда как ModHealth изменяет и максимальное и текущее значение здоровья актера на одинаковое значение (таким образом, это повлияет даже на полностью здорового актера), ModCurrentHealth изменяет только текущее здоровье и не может устанавливать здоровье выше его текущего максимума для актера (так что, применив ModCurrentHealth, 10000 к актеру с максимальным Здоровьем в 70 и текущим Здоровьем 35 установим Здоровье в 70, а применив ModHealth, 10000 установим Здоровье в 10035).

 

GetHealthGetRatio (returns float)

 

Эта функция возвращает текущее Здоровье актера в процентах, как значение типа float в пределах от 0 до 1, например 1 означает 100% Здоровья, 0.9 означает 90% Здоровья и 0 означает, ну, мертв, я думаю. Это замена ошибочно указанной в Справке функции GetHealthRatio.

Если вы хотите узнать максимум Здоровья актера (помните, GetHealth возвращает текущее значение здоровья), вы можете использовать следующее:

 

Float MaxHealth

Float CurrentHealth

Set CurrentHealth to "Actor ID"->GetHealth

Set MaxHealth to (CurrentHealth / "Actor ID" -> GetHealthGetRatio)

 

Определяем и изменяем скиллы:

Изменения навыков оружия и брони можно использовать для того, чтобы изменить, что какое оружие NPC используют по умолчанию. Это не работает с броней, так как для этого NPC используют значения, установленные в редакторе. Если у вас есть Трибунал или Бладмун, то на NPC можно вызвать Equip, чтобы заставить его надеть определенный предмет (Информация с форумов / Vorwoda_the_Black). Для примера смотри раздел Советы и Трюки. Диапазон допустимых значений для навыков не лежит в пределе от 0 до 100, как того можно ожидать. На самом деле текущее значение навыка хранится как float, так что здесь можно задать большие числа, но есть некоторые ограничения: вы не м


Date: 2015-12-17; view: 740


<== previous page | next page ==>
Short AllowWerewolfForceGreeting 5 page | Get/Mod/Set ИИ для Боя: Fight, Flee, Alarm 3 page
doclecture.net - lectures - 2014-2024 year. Copyright infringement or personal data (0.016 sec.)