Hook types
- AdjustFID
- AdjustPoison
- AdjustRads
- AfterHitRoll
- AmmoCost
- BarterPrice
- BestWeapon
- CalcAPCost
- CanUseWeapon
- CarTravel
- CombatDamage
- CombatTurn
- DeathAnim1
- DeathAnim2
- DescriptionObj
- Encounter
- ExplosiveTimer
- FindTarget
- GameModeChange
- InvenWield
- InventoryMove
- ItemDamage
- KeyPress
- MouseClick
- MoveCost
- OnDeath
- OnExplosion
- RemoveInvenObj
- RestTimer
- RollCheck
- SetGlobalVar
- SetLighting
- Sneak
- StdProcedure
- StdProcedureEnd
- Steal
- SubCombatDamage
- TargetObject
- ToHit
- UseAnimObj
- UseObj
- UseObjOn
- UseSkill
- UseSkillOn
- WithinPerception
- Устаревшие крючки
AdjustFID
HOOK_ADJUSTFID
(hs_adjustfid.int)
Runs after calculating character figure FID on the inventory screen, whenever the game decides that character appearance might change. Also happens on other screens, like barter.
NOTE: FID has following format: 0x0ABBCDDD
, where: A
- object type, BB
- animation code (always 0 in this case), C
- weapon code, DDD
- FRM index in LST file.
int arg0 - the vanilla FID calculated by the engine according to critter base FID and armor/weapon being used
int arg1 - the modified FID calculated by the internal sfall code (like Hero Appearance Mod)
int ret0 - overrides the calculated FID with provided value
AdjustPoison
HOOK_ADJUSTPOISON
(hs_adjustpoison.int)
Runs when a critter’s poison level is changed, or when the player takes damage from the poison.
Critter arg0 - the critter
int arg1 - the amount of poison being added/removed
int arg2 - the damage value at the time of applying the poison effect
(damage from the poison effect is implemented only for the player character; for other critters, this value will always be 0)
int ret0 - the new amount of poison being added/removed
int ret1 - the new damage value, only negative values are allowed (will only be valid at the time of taking damage from the poison)
AdjustRads
HOOK_ADJUSTRADS
(hs_adjustrads.int)
Runs when a critter’s radiation level is changed.
Critter arg0 - the critter (usually dude_obj)
int arg1 - the amount of radiation being added/removed
int ret0 - the new amount of radiation being added/removed
AfterHitRoll
HOOK_AFTERHITROLL
(hs_afterhitroll.int)
Запускается после того, как Fallout определил, является ли атака попаданием или промахом.
int arg0 - Тип попадания: 0 - critical miss, 1 - miss, 2 - hit, 3 - critical hit
Critter arg1 - Атакующий криттер
Critter arg2 - Атакуемая цель
int arg3 - Атакуемая часть тела цели
int arg4 - Шанс попадания
int ret0 - Переопределяет тип атаки попадание/промах
int ret1 - Переопределяет атакуемую часть тела цели
Critter ret2 - Переопределяет цель атаки
AmmoCost
HOOK_AMMOCOST
(hs_ammocost.int)
Выполняется при расчете стоимости (cost) боеприпасов для оружия. Не влияет на урон, только на то, сколько боеприпасов будет израсходовано. По умолчанию оружие выстрелит, когда останется хотя бы 1 патрон, независимо от расчетов стоимости боеприпасов. Чтобы добавить правильную проверку боеприпасов перед стрельбой и правильный расчет количества патронов в очереди (тип крюка: 1 и 2 аргумента arg3), установите опцию CheckWeaponAmmoCost в разделе Misc в файле ddraw.ini.
Item arg0 - Указатель на оружие
int arg1 - Количество пуль в очереди или 1 для одиночных выстрелов
int arg2 - Количество боеприпасов которые будет израсходованы, рассчитанное с помощью исходной формулы стоимости боеприпасов (в основном это 2, для "Super Cattle Prod" и "Mega Power Fist")
ПРИМЕЧАНИЕ: для 2-го типа крюка, это значение равно стоимости патронов за раунд (по умолчанию всегда равно 1)
The amount of ammo that will be consumed, calculated by the original ammo cost function (this is basically 2 for Super Cattle Prod and Mega Power Fist)
NOTE: for hook type 2, this value is the ammo cost per round (default is always 1)
int arg3 - Тип крючка:
0 - при вычитании боеприпасов после атаки одиночным выстрелом
1 - при проверке "Out of Ammo" перед атакой
2 - при расчете количества пуль (rounds) в очереди
3 - при вычитании боеприпасов после атаки очередью
int ret0 - Новое количество боеприпасов которое будет израсходовано или стоимость боеприпасов за раунд для 2-го типа крюка. Значение 0 для неограниченного количества боеприпасов
BarterPrice
HOOK_BARTERPRICE
(hs_barterprice.int)
Выполняется всякий раз, когда рассчитывается стоимость приобретаемых товаров.
ПРИМЕЧАНИЕ: Крючек выполняется дважды, при входе в бартер и после транзакции: первый раз для игрока, а второй раз для NPC.
Critter arg0 - NPC совершающее обмен (либо `dude_obj`, либо `inven_dude`)
Critter arg1 - NPC с которым обмениваются
int arg2 - Стоимость товаров по умолчанию
Critter arg3 - Стек с запрашиваемыми предметами (покупаемых у NPC)
int arg4 - Количество фактических денег в бартерном стеке (в отличие от товаров)
int arg5 - Стоимость всех продаваемых товаров, до модификации навыками
Critter arg6 - Стек предлагаемых предметами (продаваемых для NPC)
int arg7 - Общая стоимость товаров, предлагаемых игроком
int arg8 - 1 - если была нажата кнопка "Предложения" (не для членом партии игрока), 0 в противном случае
int arg9 - 1 - если бартер происходит с членом партии игрока, 0 в противном случае
int ret0 - Измененная стоимость всех приобретаемых товаров (передайте значение -1, если вы просто хотите изменить предлагаемые товары)
int ret1 - Измененная стоимость всех предлагаемых товаров
BestWeapon
HOOK_BESTWEAPON
(hs_bestweapon.int)
Runs when the AI decides which weapon is the best while searching the inventory for a weapon to equip in combat. This also runs when the player presses the “Use Best Weapon” button on the party member control panel.
Critter arg0 - the critter searching for a weapon
Item arg1 - the best weapon chosen from two items
Item arg2 - the first choice of weapon
Item arg3 - the second choice of weapon
Critter arg4 - the target of the critter (can be 0)
Item ret0 - overrides the chosen best weapon
CalcAPCost
HOOK_CALCAPCOST
(hs_calcapcost.int)
Запускается всякий раз, когда Fallout рассчитывает стоимость AP использование оружия или невооруженной атаки. Не запускается при использовании иных типов предметов или при передвижении. Обратите внимание, что при первой загрузке игры этот скрипт не запускается до отрисовки интерфейса, таким образом, если скрипт влияет на AP стоимость к тому, что находится в руках у игрока в данный момент, будет показана неправильная стоимость AP. Это будет исправлено только при следующей перерисовывки панели интерфейса. Вы можете получить объект оружия, проверив слот предмета на основе типа атаки (ATKTYPE_LWEP1
, ATKTYPE_LWEP2
, и т.д.) а затем использовать функци critter_inven_obj
.
Critter arg0 - Криттер выполняющее действие
int arg1 - Attack Type (значения ATKTYPE_*)
int arg2 - 1 - атака является прицельной, иначе 0
int arg3 - Стоимость AP (поумолчанию для движка)
Item arg4 - Оружие для которого рассчитана стоимость. (Если это равно 0, указатель на оружие все еще может быть получен вышеупомянутым методом)
int ret0 - Новая стоимость AP
CanUseWeapon
HOOK_CANUSEWEAPON
(hs_canuseweapon.int)
Run when the AI checks whether it can use a weapon. This mostly happens when NPCs try to find weapons in their inventory or on the map.
Critter arg0 - the critter doing the check
Item arg1 - the weapon being checked
int arg2 - attack type (see ATKTYPE_* constants)
int arg3 - original result of engine function: 1 - can use, 0 - can't use
int ret0 - overrides the result of engine function. Any non-zero value allows using the weapon
CarTravel
HOOK_CARTRAVEL
(hs_cartravel.int)
Runs continuously during worldmap travel on car.
int arg0 - vanilla car speed (between 3 and 8 "steps")
int arg1 - vanilla fuel consumption (100 and below)
int ret0 - car speed override (pass -1 if you just want to override fuel consumption)
int ret1 - fuel consumption override
CombatDamage
HOOK_COMBATDAMAGE
(hs_subcombatdmg.int)
Runs when:
- Игра подсчитывает, сколько урона получит каждая цель. Это включает в себя основную цель, а также все дополнительные цели от взрывов и атак очередью. Это происходит до фактической анимации атаки.
- AI решает, безопасно ли использовать атаку по зоне (атака очередью, гранаты), если атакующий смог бы попасть по дружественной цели.
Не работает для промахов или небоевых повреждений, таких как взрывы динамита.
Critter arg0 - Атакуемая цель (target)
Critter arg1 - Атакующий криттер
int arg2 - Количество урона, нанесенного цели
int arg3 - Количество урона, нанесенного атакующему
int arg4 - Флаги специальных эффектов повреждений у цели (используйте bwand и DAM_* для проверки определенных флагов)
int arg5 - Флаги специальных эффектов повреждений у атакующего (используйте bwand и DAM_* для проверки определенных флагов)
int arg6 - Оружие, использованное при нападении
int arg7 - Часть тела, которая была атакована
int arg8 - Damage Multiplier. Обычно это 2 (множитель делится на 2, поэтому значение 3 наносит 1.5-кратный урон, а 8 - 4-кратный урон. Для критических попаданий значение берется из критической таблицы. С перком Silent Death и соответствующими условиями атаки значение будет удвоено)
int arg9 - Количество пуль, фактически попавших в цель, 1 - для атак ближнего боя (melee)
int arg10 - Величина отбрасывания (Knockback) цели
int arg11 - Attack Type (см. значения ATKTYPE_*)
mixed arg12 - Вычисленные данные атаки (см. C_ATTACK_* для смещений, и используйте функции `get/set_object_data` для получения или установки данных)
int ret0 - Количество урона, нанесенные для цели
int ret1 - Количество урона, нанесенные для атакующего
int ret2 - Флаги специальных эффектов повреждений для цели
int ret3 - Флаги специальных эффектов повреждений для атакующего
int ret4 - Величина отбрасывания (Knockback) для цели
CombatTurn
HOOK_COMBATURN
(hs_combatturn.int)
Runs before and after each turn in combat (for both PC and NPC).
int arg0 - event type:
1 - start of turn
0 - normal end of turn
-1 - combat ends abruptly (by script or by pressing Enter during PC turn)
-2 - combat ends normally (hook always runs at the end of combat)
Critter arg1 - critter doing the turn
bool arg2 - 1 at the start/end of the player's turn after loading a game saved in combat mode, 0 otherwise
int ret0 - pass 1 at the start of turn to skip the turn, pass -1 at the end of turn to force end of combat
DeathAnim1
HOOK_DEATHANIM1
(hs_deathanim1.int)
Запускается до того, как Fallout попытается вычислить анимацию смерти. Позволяет вам изменить оружие которое будет использоваться для анимации смерти. Не работает для криттеров в состоянии нокдауна/нокаута (knockdown/out).
int arg0 - Идентификатор (PID) оружия выполняющего атаку. (Может быть равно -1, если атака безоружна)
Critter arg1 - Атакующий криттер
Critter arg2 - Атакуемая цель
int arg3 - Количество повреждений (damage) нанесенных цели
int arg4 - Неиспользуется, всегда -1. Используйте это, если вы используете одну и туже процедуру обработчика для `HOOK_DEATHANIM1` и `HOOK_DEATHANIM2` (начиная с sfall 4.1/3.8.24)
int ret0 - PID объекта для переопределения атакующего оружия
DeathAnim2
HOOK_DEATHANIM2
(hs_deathanim2.int)
Запускается после того, как Fallout рассчитал анимацию смерти. Позволяет вам переопределить идентификатор для анимации смерти, это более лучше, чем HOOK_DEATHANIM1
, но является без выполнения каких либо проверок валидности. При использовании функции critter_dmg
этот скрипт также будет запущен. В этом случае PID оружия будет равен -1, и атакующий криттер укажет на объект со значением obj_art_fid == 0x20001F5
. Не работает для криттеров в состоянии нокдауна/нокаута (knockdown/out).
Item arg0 - Идентификатор (PID) оружия, выполняющего атаку. (Может быть равно -1, если атака безоружна)
Critter arg1 - Атакующий криттер
Critter arg2 - Атакуемая цель
int arg3 - Количество повреждений (damage) нанесенных цели
int arg4 - Идентификатор анимации смерти, вычисленный Fallout
int ret0 - Переопределенный идентификатор анимации смерти
DescriptionObj
HOOK_DESCRIPTIONOBJ
(hs_descriptionobj.int)
Runs when using the examine action icon to display the description of an object. You can override the description text. An example usage would be to add an additional description to the item based on player’s stats/skills. Does not run if the script of the object overrides the description.
Obj arg0 - the object
int ret0 - a pointer to the new text received by using "get_string_pointer" function
Encounter
HOOK_ENCOUNTER
(hs_encounter.int)
Runs whenever a random encounter occurs (except the Horrigan meeting and scripted encounters), or when the player enters a local map from the world map. You can override the map for loading or the encounter.
int arg0 - event type: 0 - when a random encounter occurs, 1 - when the player enters from the world map
int arg1 - the map ID that the encounter will load (see MAPS.h or Maps.txt)
int arg2 - 1 when the encounter occurs is a special encounter, 0 otherwise
int ret0 - overrides the map ID, or pass -1 for event type 0 to cancel the encounter and continue traveling
int ret1 - pass 1 to cancel the encounter and load the specified map from the ret0 (only for event type 0)
ExplosiveTimer
HOOK_EXPLOSIVETIMER
(hs_explosivetimer.int)
Runs after setting the explosive timer. You can override the result.
int arg0 - the time in ticks set in the timer
Obj arg1 - the explosive object
int arg2 - the result of engine calculation of whether the timer was set successfully: 1 - failure, 2 - success (similar to ROLL_* in Condtion.h)
int ret0 - overrides the time of the timer (maximum 18000 ticks)
int ret1 - overrides the result of engine calculation: 0/1 - failure, 2/3 - success (similar to ROLL_*), any other value - use engine handler
FindTarget
HOOK_FINDTARGET
(hs_findtarget.int)
Запускается, когда AI пытается выбрать цель в бою. Fallout сначала выбирает список из 4 возможных целей, затем сортирует их в порядке слабости/расстояния/и т.д. в зависимости от параметров AI атакующего. Этот hook заменяет функцию сортировки, позволяя вам сортировать цели каким-либо произвольным способом.
Возвращаемые значения могут включать криттеров, которых не было в списке возможных целей, но дополнительные цели все равно могут быть отброшены позже в ходе боя, если они находятся вне поля зрения атакующих или вероятность успешного попадания по ним слишком мала. Список возможных целей часто включает повторяющиеся записи, но это исправлено в sfall 4.2.3/3.8.23. Используйте set_sfall_return
, чтобы указать 4 цели в порядке предпочтения. Если вы хотите указать менее 4-х целей, установите дополнительные цели в 0 или передайте значение -1, чтобы пропустить возвращаемое значение.
__ ПРИМЕЧАНИЕ:__ Fallout может выбирать цели по следующим критериям: 1) Ближайший враг к атакующему. 2) Враг напавший на атакующего. 3) Враг напавший на NPC из той же команды, что и атакующий. 4) Враг на которого нападает NPC из той же команды, что и атакующий.
Critter arg0 - Атакующий криттер
Critter arg1 - Возможная цель
Critter arg2 - Возможная цель
Critter arg3 - Возможная цель
Critter arg4 - Возможная цель
Critter ret0 - Первая выбранная цель
Critter ret1 - Вторая выбранная цель
Critter ret2 - Третья выбранная цель
Critter ret3 - Четвертая выбранная цель
GameModeChange
HOOK_GAMEMODECHANGE
(hs_gamemodechange.int)
Runs once every time when the game mode was changed, like opening/closing the inventory, character screen, pipboy, etc.
int arg0 - event type: 1 - when the player exits the game, 0 - otherwise
int arg1 - the previous game mode
InvenWield
HOOK_INVENWIELD
(hs_invenwield.int)
Runs before causing a critter or the player to wield/unwield an armor or a weapon (except when using the inventory by PC). An example usage would be to change critter art depending on armor being used or to dynamically customize weapon animations.
NOTE: When replacing a previously wielded armor or weapon, the unwielding hook will not be executed. If you need to rely on this, try checking if armor/weapon is already equipped when wielding hook is executed.
Critter arg0 - critter
Item arg1 - item being wielded or unwielded (weapon/armor)
int arg2 - slot (INVEN_TYPE_*)
int arg3 - 1 when wielding, 0 when unwielding
int arg4 - 1 when removing an equipped item from inventory, 0 otherwise
int ret0 - overrides hard-coded handler (-1 - use engine handler, any other value - override) - NOT RECOMMENDED
InventoryMove
HOOK_INVENTORYMOVE
(hs_inventorymove.int)
Runs before moving items between inventory slots in dude interface. You can override the action. What you can NOT do with this hook:
- force moving items to inappropriate slots (like gun in armor slot) What you can do:
- restrict player from using specific weapons or armors
- add AP costs for all inventory movement including reloading
- apply or remove some special scripted effects depending on PC’s armor
int arg0 - Target slot:
0 - main backpack
1 - left hand
2 - right hand
3 - armor slot
4 - weapon, when reloading it by dropping ammo
5 - container, like bag/backpack
6 - dropping on the ground
7 - picking up item
8 - dropping item on the character portrait
Item arg1 - Item being moved
Item arg2 - Item being replaced, weapon being reloaded, or container being filled (can be 0)
int ret0 - Override setting (-1 - use engine handler, any other value - prevent relocation of item/reloading weapon/picking up item)
ItemDamage
HOOK_ITEMDAMAGE
(hs_itemdamage.int)
Запускается при получении оценки урона (damage) при использовании оружия, которое может быть и кулаками (fist).
int arg0 - Минимальный урон по умолчанию
int arg1 - Максимальный урон по умолчанию
Item arg2 - Используемое оружие, 0 - если безоружен
Critter arg3 - Криттер совершающий атаку
int arg4 - Тип атаки
int arg5 - Ненулевое значение, если это атака с использованием оружия ближнего (melee) боя
int ret0 - Новый урон для оружия (если возвращаемое значение для ret1 не задано), иначе это задает новый минимальный урон
int ret1 - Новый максимальный урон для оружия
KeyPress
HOOK_KEYPRESS
(hs_keypress.int)
Запускается каждый раз, когда была нажата (pressed) или отпущена (released) какая-либо клавиша.
- DX сканкоды: смотри файл заголовка dik.h или https://kippykip.com/b3ddocs/commands/scancodes.htm
- VK сканкоды
ПРИМЕЧАНИЕ: Если вы хотите переопределить клавишу, новый DX-сканкод клавиши должен быть одинаковым как для нажатых, так и для отпущенных событий.
int arg0 - Тип события: 1 - pressed, 0 - released
int arg1 - DX-сканкод клавиши
int arg2 - VX-сканкод клавиши (это очень похоже на коды ASCII)
int ret0 - Переопределяет нажатую клавишу: новый DX-сканкод клавиши. Значение 0 если переопределение не требуется
MouseClick
HOOK_MOUSECLICK
(hs_mouseclick.int)
Запускается каждый раз, когда была нажата (pressed) или отпущена (released) кнопка мыши.
int arg0 - Тип события: 1 - pressed, 0 - released
int arg1 - Номер кнопки (0 - левая, 1 - правая, и т.д. до 7)
MoveCost
HOOK_MOVECOST
(hs_movecost.int)
Выполняется при расчете стоимости AP для передвижения.
Critter arg0 - Криттер осуществляющий движение
int arg1 - Количество гексов для передвижения
int arg2 - Стоимость AP
int ret0 - Новая стоимость AP
OnDeath
HOOK_ONDEATH
(hs_ondeath.int)
Запускается сразу после того, как криттер умирает по любой причине. Не возвращает никаких значений, это просто для удобство, когда вам необходимо что-то сделать после смерти для большого количества разных криттеров, и вы не хотите писать скрипты для каждого из них.
Critter arg0 - Криттер, который только что умер
OnExplosion
HOOK_ONEXPLOSION
(hs_onexplosion.int)
Runs when Fallout is checking all the tiles within the explosion radius for targets before an explosion occurs. The tile checking will be interrupted when 6 additional targets (critters) are received.
int arg0 - event type: 1 - when checking objects within the explosion radius without causing damage (e.g. the player drops an active explosive), 0 - otherwise
Critter arg1 - the attacker
int arg2 - the tile on which the explosion occurs
int arg3 - checked tile within the explosion radius
Obj arg4 - first found object on the checked tile as an additional target
Critter arg5 - the target critter, may be 0 or equal to the attacker
int arg6 - 1 when using throwing weapons (e.g. grenades), 0 otherwise
int ret0 - overrides the found object on the checked tile, pass 0 to skip the object
RemoveInvenObj
HOOK_REMOVEINVENOBJ
(hs_removeinvenobj.int)
Запускается, когда предмет по какой-либо причине удаляется из контейнера или инвентаря криттера.
Obj arg0 - Объект владелец, из которого удаляется предмет
Item arg1 - Предмет, который удаляется
int arg2 - Количество предметов для удаления
int arg3 - Причина удаления объекта (см. значения RMOBJ_*)
Obj arg4 - Объект в который (destination) перемещается предмет, в противном случае 0
RestTimer
HOOK_RESTTIMER
(hs_resttimer.int)
Runs continuously while the player is resting (using pipboy alarm clock).
int arg0 - the game time in ticks
int arg1 - event type: 1 - when the resting ends normally, -1 - when pressing ESC to cancel the timer, 0 - otherwise
int arg2 - the hour part of the length of resting time
int arg3 - the minute part of the length of resting time
int ret0 - pass 1 to interrupt the resting, pass 0 to continue the rest if it was interrupted by pressing ESC key
RollCheck
HOOK_ROLLCHECK
(hs_rollcheck.int)
Runs when a game event performs a random roll to check the chance of success or failure.
int arg0 - event type:
1 - checks the chance of an attack hitting the target
2 - checks the chance of a bullet from a burst hitting the target (for burst attacks)
3 - checks the chance when using skills (not listed below)
4 - check the chance of using Repair skill
5 - check the chance of using Doctor skill
6 - check the chance of using Steal skill for the thief (usually the player)
7 - the second Steal skill chance check for the target to catch the thief, in which the target's failure is the thief's success result
int arg1 - the value of roll result (see ROLL_* constants), which is calculated as:
for ROLL_CRITICAL_SUCCESS: random(1, 100) <= (random_chance / 10) + bonus
for ROLL_CRITICAL_FAILURE: random(1, 100) <= -random_chance / 10
int arg2 - the chance value
int arg3 - the bonus value, used when checking critical success
int arg4 - random chance (calculated as: chance - random(1, 100)), where a negative value is a failure check (ROLL_FAILURE)
int ret0 - overrides the roll result
SetGlobalVar
HOOK_SETGLOBALVAR
(hs_setglobalvar.int)
Runs when setting the value of a global variable.
int arg0 - the index number of the global variable being set
int arg1 - the set value of the global variable
int ret0 - overrides the value of the global variable
SetLighting
HOOK_SETLIGHTING
(hs_setlighting.int)
Runs before setting the light level for an object or a map. You can override the result.
Obj arg0 - the object being set, or -1 when setting the light level for a map
int arg1 - the light intensity
int arg2 - the light radius, or -1 when setting the light level for a map
int ret0 - overrides the light intensity. Intensity range is from 0 to 65536
int ret1 - overrides the light radius. Radius range is from 0 to 8 (works only for the object)
Sneak
HOOK_SNEAK
(hs_sneak.int)
Runs when the Sneak skill is activated, or when the game rolls another Sneak check after the duration for the current one is over. You can override the result of a random Sneak check or the duration time for the current result.
int arg0 - Sneak check result: 1 - success, 0 - failure
int arg1 - the duration in ticks for the current Sneak check (time depends on Sneak skill level)
Critter arg2 - the critter (usually dude_obj)
int ret0 - overrides the result of the Sneak check
int ret1 - overrides the duration time for the current result
StdProcedure
HOOK_STDPROCEDURE
(hs_stdprocedure.int)
Runs before Fallout executes a standard procedure (handler) in any script of any object. NOTE: this hook will not be executed for start
, critter_p_proc
, timed_event_p_proc
, and map_update_p_proc
procedures.
int arg0 - the number of the standard script handler (see define.h)
Obj arg1 - the object that owns this handler (self_obj)
Obj arg2 - the object that called this handler (source_obj, can be 0)
int ret0 - pass -1 to cancel the execution of the handler
StdProcedureEnd
HOOK_STDPROCEDURE_END
(hs_stdprocedure.int)
Runs after Fallout executes a standard procedure (handler) in any script of any object. NOTE: this hook will not be executed for start
, critter_p_proc
, timed_event_p_proc
, and map_update_p_proc
procedures.
int arg0 - the number of the standard script handler (see define.h)
Obj arg1 - the object that owns this handler (self_obj)
Obj arg2 - the object that called this handler (source_obj, can be 0)
int arg3 - 1 after procedure execution
Steal
HOOK_STEAL
(hs_steal.int)
Runs when checking an attempt to steal or plant an item in other inventory using Steal skill.
This is fired before the default handlers are called, which you can override. In this case you MUST provide message of the result to player (“You steal the %s”, “You are caught planting the %s”, etc.). Example message (vanilla behavior):
display_msg(sprintf(mstr_skill(570 + (isSuccess != false) + arg3 * 2), obj_name(arg2)));
Critter arg0 - Thief
Obj arg1 - The target
Item arg2 - Item being stolen/planted
int arg3 - 0 when stealing, 1 when planting
int ret0 - overrides hard-coded handler (1 - force success, 0 - force fail, -1 - use engine handler)
SubCombatDamage
HOOK_SUBCOMBATDAMAGE
(hs_subcombatdamage.int)
This hook overrides the vanilla damage calculation formula. Runs when:
- Before the game calculates how much damage each target will get. This includes primary target as well as all extras (explosions and bursts).
- AI decides whether it is safe to use area attack (burst, grenades), if he might hit friendlies.
Does not run for misses, non-combat damage like dynamite explosions, or if one of the damage formulas is selected in ddraw.ini.
Critter arg0 - the attacker
Critter arg1 - the target
Item arg2 - the weapon used in the attack
int arg3 - attack type (see ATKTYPE_* constants)
int arg4 - number of bullets actually hit the target (1 for melee attacks)
int arg5 - target's Damage Resistance (DR) value (affected by critical hit effects, perks, traits, and special unarmed attacks)
int arg6 - target's Damage Threshold (DT) value (affected by critical hit effects, perks, traits, and special unarmed attacks)
int arg7 - bonus ranged damage from the perk
int arg8 - damage multiplier (this is divided by 2, so a value of 3 does 1.5x damage, and 8 does 4x damage. Usually it's 2; for critical hits, the value is taken from the critical table; with Silent Death perk and the corresponding attack conditions, the value will be doubled)
int arg9 - combat difficulty multiplier (125 - rough, 100 - normal, 75 - wimpy; for player or party members it's always 100)
int arg10 - the calculated amount of damage (usually 0, required when using multiple hook scripts to calculate damage and using the set_sfall_arg function)
mixed arg11 - computed attack data (see C_ATTACK_* for offsets and use get/set_object_data functions to get/set the data)
int ret0 - the returned amount of damage
TargetObject
HOOK_TARGETOBJECT
(hs_targetobject.int)
Runs when the targeting cursor hovers over an object, or when the player tries to attack the target object. You can override the target object or prevent the player from attacking the chosen target.
int arg0 - event type: 0 - when the targeting cursor hovers over the object, 1 - when trying to attack the target object
int arg1 - 1 when the target object is valid to attack, 0 otherwise
Obj arg2 - the target object
mixed ret0 - overrides the target object, or pass -1 to prevent the player from attacking the object
ToHit
HOOK_TOHIT
(hs_tohit.int)
Запускается, когда Fallout рассчитывает шанс атаки поразить цель. Выполняется после того, как вероятность попадания полностью рассчитана в нормальном режиме, это включает в себя и применение ограничения в 95%.
int arg0 - Шанс попадания (capped)
Critter arg1 - Атакующий криттер
Critter arg2 - Атакуемая цель
int arg3 - Атакуемая часть тела цели
int arg4 - Исходная плитка (tile). Mожет отличаться от гекса атакующего, когда AI рассматривает потенциальную огневую позицию
int arg5 - Attack Type: значения ATKTYPE_*
int arg6 - Ranged flag: 1 - означает, что вероятность попадания рассчитывается с учетом бонусов/штрафов за расстояние до цели
int arg7 - Значение шанса попадания без применения верхнего или нижнего ограничении (w/o capped)
int ret0 - Новое значение шанса попадания
UseAnimObj
HOOK_USEANIMOBJ
(hs_useanimobj.int)
Runs before playing the “use” (usually “magic hands”) animation when a critter uses a scenery/container object on the map, or before walking/running animation if the player is at a distance from the object.
Critter arg0 - the critter that uses an object (usually dude_obj)
Obj arg1 - the object being used
int arg2 - the animation code being used (see ANIM_* in Animcomd.h)
int ret0 - overrides the animation code (pass -1 if you want to skip the animation)
UseObj
HOOK_USEOBJ
(hs_useobj.int)
Запускается, когда:
- Криттер использует предмет из инвентаря, для которого установлен флаг действия
Use
, или это активная вспышка (Flare) или Динамит. - Игрок использует предмет из основного интерфейса.
Это срабатывает перед использованием предмета, и выполнения процедуры скрипта use_obj
. Вы можете отключить поведение предмета по умолчанию.
ПРИМЕЧАНИЕ: Вы не можете удалить или уничтожить используемый предмет во время выполнения hook скрипта, в противном случае игра выйдет из строя. Чтобы правильно удалить предмет, возвратите значение 1.
Critter arg0 - Криттер который использует предмет
Obj arg1 - Используемый предмет
int ret0 - Переопределяет движковой обработчик и определяет, что должно произойти с предметом: 0 - положить обратно, 1 - удалить, -1 - использовать обработчик движка
UseObjOn
HOOK_USEOBJON
(hs_useobjon.int)
Запускается, когда:
- Криттер использует предмет на другом криттере. (или сам на себя)
- Криттер использует предмет в инвентаре, и у этого объекта не установлен флаг действия
Use
, не является предметом активная вспышка (Flare) или Взрывчаткой. - Игрок или AI употребляет какой-либо предмет наркотика (drugs)
Это срабатывает перед использованием предмета, и выполнения процедуры скрипта use_obj_on
. Вы можете отключить поведение предмета по умолчанию.
ПРИМЕЧАНИЕ: Вы не можете удалить или уничтожить используемый предмет во время выполнения hook скрипта, в противном случае игра выйдет из строя. Чтобы правильно удалить предмет, возвратите значение 1.
Critter arg0 - Цель на которую применяется предмет
Critter arg1 - Криттер который использует предмет
int arg2 - Используемый предмет
int ret0 - Переопределяет движковой обработчик и определяет, что должно произойти с предметом: 0 - положить обратно, 1 - удалить, -1 - использовать обработчик движка
UseSkill
HOOK_USESKILL
(hs_useskill.int)
Запускается при использовании навыка на объекте.
Это срабатывает до вызова обработчиков по умолчанию, которые вы можете переопределить. В этом случае вы должны полностью написать свой собственный обработчик использования навыков, иначе ничего не произойдет (это включает в себя затухание/восстановление экрана, временной интервал и сообщения - все это может быть написано по сценарию, чтобы получать стандартный текстовые сообщения - используйте message_str_game
вместе с sprintf
). Рекомендуемое использование - например переопределите обработчики навыков “First Aid” и “Doctor”, чтобы усилить или ослабить их, переопределите навык Steal (Кража), чтобы в некоторых случаях предотвратить осмотр инвентаря NPC. Внимание: Это не будет запускаться при вскрытии замков.
Critter arg0 - Криттер который использует навык
Obj arg1 - Целевой объект
int arg2 - Номер используемого навыка
int arg3 - Бонус к навыку от таких предметов, как аптечки первой помощи, сумка доктора
int ret0 - Переопределяет движковой обработчик события: -1 - использовать обработчик движка игры,
любое другое возвращаемое значение - переопределение, при этом нулевое значение будет с вероятностью в 10% удалять используемый медицинский предмет
UseSkillOn
HOOK_USESKILLON
(hs_useskillon.int)
Runs before using any skill on any object. Lets you override the critter that uses the skill.
NOTE: The user critter can’t be overridden when using Steal skill.
Critter arg0 - the user critter (usually dude_obj)
Obj arg1 - the target object/critter
int arg2 - skill being used
int ret0 - a new critter to override the user critter. Pass -1 to cancel the skill use, pass 0 to skip this return value
int ret1 - pass 1 to allow the skill being used in combat (only for dude_obj or critter being controlled by the player)
WithinPerception
HOOK_WITHINPRECEPTION
(hs_withinperception.int)
Runs when checking if one critter sees another critter. This is used in different situations like combat AI. You can override the result.
NOTE: obj_can_see_obj
calls this first when deciding if critter can possibly see another critter with regard to perception, lighting, sneak factors.
If check fails, the end result is false. If check succeeds (e.g. critter is within perception range), another check is made if there is any blocking tile between two critters (which includes stuff like windows, large bushes, barrels, etc.) and if there is - check still fails.
You can override “within perception” check by returning 0 or 1, OR, as a convenience, you can also override blocking check after the perception check by returning 2 instead. In this case you should add “line of sight” check inside your hook script, otherwise critters will detect you through walls.
This is fired after the default calculation is made.
Critter arg0 - Watcher object
Obj arg1 - Target object
int arg2 - Result of vanilla function: 1 - within perception range, 0 - otherwise
int arg3 - Type of hook:
1 - when being called from obj_can_see_obj script function
2 - when being called from obj_can_hear_obj script function (need to set ObjCanHearObjFix=1 in ddraw.ini)
3 - when AI determines whether it sees a potential target when selecting attack targets
0 - all other cases
int ret0 - overrides the returned result of the function:
0 - not in range (can't see)
1 - in range (will see if not blocked)
2 - forced detection (will see regardless, only used in obj_can_see_obj scripting function which is called by every critter in the game)
Устаревшие крючки
hs_hexmoveblocking.int
hs_hexaiblocking.int
hs_hexshootblocking.int
hs_hexsightblocking.int
Запускается при проверке, блокируется ли гекс при построении пути движении, проверки стрельбы, или проверки искусственного интеллекта.
ПРИМЕЧАНИЕ: Эти скрипты-крючки могут стать очень ресурсоемкими, и вам следует избегать их использования. По этой причине эти крючки полностью не поддерживаются в sfall и могут быть удалены в будущих версиях.
Если вы хотите проверить, заблокирован ли какой-либо гекс (tile) или путь, используйте функции: obj_blocking_tile
, obj_blocking_line
, path_find_to
.
Если вы хотите, чтобы скрипт вызывался каждый раз, когда NPC перемещается на гекс в бою, используйте хук HOOK_MOVECOST
.
Critter arg0 - Криттер, от которого происходит проверка, может быть 0
int arg1 - Номер проверяемого гекса (tile)
int arg2 - Проверяемый уровень карты
int arg3 - 1 - если проверяемый гекса блокируется
Obj ret0 - Указатель на блокируемый объект, если плитка блокируется, иначе 0 если не блокируется