fallout.ru

Проверка и изменение параметров персонажей

Получить, установить, модифицировать значение параметра

GetStat (возвращает float)
SetStat, пер_float
ModStat, пер_float

Set floatvar to ( Player -> GetHealth )
Player -> SetWillpower, 20
Player -> ModHealth, floatvar

Это действительно целая семья функций, которые могут изменять состояние персонажей, настройки искусственного интеллекта и многое другое. Замените ”Stat” из примера на имя любой настройки игры, атрибута, параметра и т.д. Положительные значения атрибута увеличивают необходимую величину, отрицательные – уменьшают. Первая функция возвращает текущее значение, а не, допустим, максимальное или начальное. То есть на это также повлияет факт временного уменьшения характеристики, например, с помощью магии.

Вторая функция устанавливает сразу и текущее, и базовое значение параметра.

ModStat изменяет характеристики на заданное значение. Учтите, что опять же изменяется и текущее, и базовое значение. Эта функция, однако, не может устанавливать значение навыка выше его естественного предела в то время, как SetStat может.

Учтите, что некоторые характеристики, такие как сопротивляемость, могут иметь отрицательные значения.

ModCurrentHealth, пер_float
ModCurrentMagicka, пер_float
ModCurrentFatigue, пер_float

Эти функции изменяют лишь текущее значение атрибута (то есть, если задать параметр 1000, а максимальные значение – 70, то, несмотря ни на что, текущая характеристика тоже примет значение 70).

Недокументировано:

GetHealthGetRatio (возвращает float)

Функция возвращает состояние здоровья по шкале от 0 до 1, то есть 1 – 100%, 0.9 – 90% и т.д.

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

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

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

Set floatvar to ( Player -> GetHealth )
Player -> SetWillpower, 20
Player -> ModHealth, floatvar

Полный список функций, управляющих значением параметров

Характеристики

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Текущее и базовое здоровье
ModCurrentHealthТолько текущая величина здоровья
Get/Mod/SetMagickaТекущее и базовое количество маны
ModCurrentMagickaТолько текущее количество маны
Get/Mod/SetFatigueТекущая и базовая усталость
ModCurrentFatigueТолько текущая усталость
GetHealthGetRatioВозвращает показатель здоровья

Навыки

Изменение навыков, касающихся оружия, может повлиять на непосредственную амуницию NPC. С доспехами такой способ не работает, потому что персонажи носят только тот тип брони, который был установлен в Конструкторе. Однако, не совсем ясны границы навыков, так как они отнюдь не от 0 до 100, как можно было бы подумать. Фактически, значения скиллов имеют тип float, то есть можно устанавливать просто грандиозные значения. Всё же существуют определённые ограничения: Вы не можете устанавливать отрицательные величины, а также цифры после запятой отбрасываются при загрузке или сохранении.

Get/Mod/SetBlockЗащита
Get/Mod/SetArmorerКузнечное Дело
Get/Mod/SetMediumArmorСредние Доспехи
Get/Mod/SetHeavyArmorТяжёлые Доспехи
Get/Mod/SetBluntWeaponТупое Оружие
Get/Mod/SetLongBladeДлинные Клинки
Get/Mod/SetAxeТопор
Get/Mod/SetSpearКопьё
Get/Mod/SetAthleticsАтлетика
Get/Mod/SetEnchantЗачарование
Get/Mod/SetDestructionРазрушение
Get/Mod/SetAlterationИзменение
Get/Mod/SetIllusionИллюзия
Get/Mod/SetConjurationКолдовство
Get/Mod/SetMysticismМистицизм
Get/Mod/SetRestorationВосстановление
Get/Mod/SetAlchemyАлхимия
Get/Mod/SetUnarmoredБездоспешный Бой
Get/Mod/SetSecurityВзлом
Get/Mod/SetSneakСкрытность
Get/Mod/SetAcrobaticsАкробатика
Get/Mod/SetLightArmorЛёгкие Доспехи
Get/Mod/SetShortBladeКороткие Клинки
Get/Mod/SetMarksmanСтрельба
Get/Mod/SetMercantileТорговля
Get/Mod/SetSpeechcraftРазговор
Get/Mod/SetHandToHandРукопашный Бой

Магия

Большинство этих функций, отвечающих за бонусы, обычно получаемые с помощью магии, в основном принимает значение от -100 до 100 (хотя, в принципе, можно поставить абсолютно любое значение), однако некоторые являются флагами (могут становить только 0 и 1). То есть вы можете создать монстра, который будет снимать иммунитет к болезням. Не плохой сюрприз для Нереварина, неправда ли?

Get/Mod/SetResistMagickaСопротивление магии
Get/Mod/SetResistFireСопротивление огню
Get/Mod/SetResistFrostСопротивление холоду
Get/Mod/SetResistShockСопротивление электричеству
Get/Mod/SetResistDiseaseСопротивление обычным болезням
Get/Mod/SetResistBlightСопротивление мору
Get/Mod/SetResistCorprusСопротивление корпрусу
Get/Mod/SetResistPoisonСопротивление яду
Get/Mod/SetResistParalysisСопротивление парализации
Get/Mod/SetChameleonМагическая скрытность - эффект хамелеона
Get/Mod/SetResistNormalWeaponsСопротивление обычному оружию

Get/Mod/SetWaterBreathing

Как только значение функции становится 1, игрок может дышать под водой.

Get/Mod/SetWaterWalking

Как только значение функции становится единицей, игрок может ходить по воде.

Get/Mod/SetSwimSpeedСкорость плавания
Get/Mod/SetSuperJump

Это относится к эффектам заклинаний “Swift Swim” и “Jump”. Несмотря на то, что обычно значения колеблются от 0 до 100, они могут принимать абсолютно любое число.

Get/Mod/SetFlying

Функция устанавливает режим полёта игрока. Чтобы она заработала, введите её в консоли и произнесите заклинание полёта. Эффект будет продолжаться, пока Вы сами не отключите опцию консолью.

Get/Mod/SetArmorBonusБонус доспехов
Get/Mod/SetCastPenaltyШтрафы при колдовстве
Get/Mod/SetSilenceТишина
Get/Mod/SetBlindnessСлепота
Get/Mod/SetParalysisПарализация
Get/Mod/SetInvisibileНевидимость
Get/Mod/SetAttackBonusБонус атаки
Get/Mod/SetDefendBonusБонус защиты

Я не уверен, чем на самом деле являются две последние функции. Возможно, они указывают на один и тот же бонус, получаемый при выборе знака зодиака, дающего Усиленную Атаку.

Другие

Get/Mod/SetReputationрепутация
Get/Mod/SetDisposition

Get/Mod/SetPCCrimeLevel (Только для игрока)

Функция PCCrimeLevel устанавливает количество денег, необходимое для компенсации причинённого игроком ущерба, расположение к нему рядовых граждан и стражников. Также смотрите описание функции PayFine.

Get/Mod/SetLevel

Функция повышает уровень персонажа, причём навыки автоматически не улучшаются.

Установки Искусственного Интеллекта (ИИ)

Get/Mod/SetFight

Изменение этого значения отзывается на всём поведении персонажа, так как меняет многие установки его ИИ. Если функция принимает значение 100, NPC незамедлительно атакует игрока, действия которого также могут влиять на установки значения нападения:

ДействиеИсходное значениеФормула настроек игры
Изменение расстояния20 - (Расстояние* 0.005)iFightDistanceBase - (Char Distance * fFightDistMult)
Атака100iFightAttack
Расположение( 50 – Расположение )*1(50 - Disposition) * fFightDispMult
Воровство5 * Цена предметаfAlarmStealing * Item Value
Грабёж25iAlarmPickPocket
Нарушение границы25iAlarmTresspass
ДразнитьИз формулы убеждения
УгрожатьИз формулы убеждения
Давать взяткуИз формулы убеждения

Следующая таблица даёт представление о соответствии значения состоянию персонажа:

100
Атакует всегда
95
Атакует, как только игрок подойдёт близко (3000 юнитов)
90
Атакует, как только игрок подойдёт близко (2000 юнитов)
80
Атакует, как только игрок подойдёт близко или если NPC его не любит (1000 юнитов, расположение 40)
70
Атакует, если близко или сильно не любит (1000 юнитов, расположение 35)
60
Атакует, если очень сильно не любит и если игрок неподалёку (расположение ниже 30)
50
Атакует, если ненавидит игрока (расположение 0)
40
Атакует, если терпеть не может игрока и тот подходит близко (500 юнитов, расположение 10)
30
Атакует, если не любит игрока и тот совершил преступление.
20
Атакует, если не любит игрока и тот совершил множественные преступления.
10
Атакует, если ненавидит игрока и тот совершил множественные преступления на нём.
0
Атакует, ТОЛЬКО если был атакован игроком.

Get/Mod/SetFlee

Функция также влияет на все характеристики. Чем выше значение, тем вероятнее, что персонаж сбежит с поля боя. Однако, это может не всегда срабатывать, так как на подобные установки влияет ещё и ряд других условий (например, «крутость оружия» и другие стратегии ведения боя – магия или перестрелка), которые могут быть изменены с помощью разнообразных модов, предназначенных для улучшения атмосферы игры.

Get/Mod/SetAlarm

Функция также влияет на все установки ИИ. Как только игрок совершает преступление на глазах у свидетеля, тот что-то кричит, предупреждая всех в округе. Услышавшие персонажи делают что-то в зависимости от установок этого условия. Чем выше значение, тем агрессивнее они себя ведут. Если оно равно 100, персонаж назначит вознаграждение за голову игрока. Если он ещё к тому же и стражник, то он будет выполнять особые действия – подбежит и попытается арестовать. Если степень правонарушения перевалила за 10000, стража будет атаковать немедленно. Также она поступит, если увидит, что какое-то существо (в том числе и игрок) нападает на мирных жителей.

Get/Mod/SetHello

Функция также влияет на все установки ИИ персонажа. “Hello” устанавливает радиус вокруг игрока, в районе которого кто-либо может остановиться и поздороваться. Базовое значение – 30 – умножается на специальный модификатор, который равен 7. Таким образом, число 30 указывает на расстояние 210 (меньше 10 футов).

Оживление мёртвого персонажа

Resurrect

gateway_haunt->Resurrect

Возвращает персонажа к жизни. Причём, его характеристики и инвентарь будут очищены, то есть он, фактически, просто перерождается, каким был в начале игры. Был замечен баг, из-за которого после использования функции на игроке, тот больше не может читать заклинания. После сохранения/загрузки эффект исчезает. В Канале Загадок Вивека скрипт просто ждёт, пока здоровье игрока упадёт ниже 10 пунктов, а затем якобы оживляет игрока, восстанавливая его очки жизни. То есть на самом деле игрок никогда не умирает.

Пример скрипта: некоторых людей не так просто убить, как остальных :)

Begin dandrasScript

short deathbed
float dandrasHealth

if ( deathbed == -1 )
            Return
endif

set dandrasHealth to GetHealth

if ( dandrasHealth <= 50 )
            if ( dandrasHealth < 1 )
                        Resurrect
                        ModHealth 100
            endif
            set deathbed to 1
endif

if ( deathbed == 1 )
            ForceGreeting
endif

End dandrasScript