Разбор callback функций

Материал из Modders-wiki - Библиотека знаний модмейкеров S.T.A.L.K.E.R.
Перейти к: навигация, поиск
Разбор callback функций
Описание
Авторaka_sektor
СоавторBoBaH_671, Graff46, Charsi
Тип статьисправка
АктуальностьТЧ, ЧН, ЗП

Callback — это скриптовая функция, привязанная к движковому событию.

Событие регистрируется в скриптовом классе строчкой, к примеру, следующего вида:

self.object:set_callback(callback.inventory_info, self.info_callback, self)

Где:

inventory_info — название движкового события.

info_callback — название регистрируемой callback функции.

self — какому скриптовому классу принадлежит (в данном случае: actor_binder)

Callback функция пишется как actor_binder:info_callback — это означает, что она является методом класса actor_binder.

Событие Описание Платформа / Скрипт Метод / Callback функция
inventory_info Выдача инфопорции владельцу инвентаря ТЧ/ЧН/ЗП: bind_stalker.script actor_binder:info_callback(npc, info_id)
article_info ТЧ/ЧН: bind_stalker.script actor_binder:article_callback(npc, group, name)
on_item_take Взятие предмета (попадание в инвентарь) ТЧ/ЧН/ЗП: bind_stalker.script actor_binder:on_item_take (obj)
on_item_drop Выкидывание предмета (из инвентаря) ТЧ/ЧН/ЗП: bind_stalker.script actor_binder:on_item_drop (obj)
trade_sell_buy_item ТЧ/ЧН/ЗП: bind_stalker.script actor_binder:on_trade (item, sell_bye, money)
task_state Выдача задания или изменение состояния заданий или подзаданий ТЧ/ЧН/ЗП: bind_stalker.script ТЧ: actor_binder:task_callback(_task, _objective, _state)
ЧН/ЗП: actor_binder:task_callback(_task, _state)
level_border_enter Вход на разрешенную территорию уровня ТЧ/ЧН: bind_stalker.script actor_binder:level_border_enter(npc, info_id)
level_border_exit Выход за разрешенную границу уровня ТЧ/ЧН: bind_stalker.script actor_binder:level_border_exit(npc, info_id)
take_item_from_box Взятие предмета из ящика ТЧ/ЧН/ЗП: bind_stalker.script actor_binder:take_item_from_box(box, item)
use_object

1. Съедание инвентарного предмета в инвентаре
2. Использование объекта в игровом мире

ТЧ/ЧН: ph_gate.script
ЧН: mob_trader.script
ЗП: bind_stalker.script
bind_door_labx8.script
ТЧ/ЧН: action_gate:use_callback(obj, who)
ЧН: mob_trader:use_callback()
ЗП: actor_binder:use_inventory_item(obj)
door_binder_labx8:use_callback(obj)
helicopter_on_point Достижение точки патрульного пути вертолётом ТЧ/ЧН/ЗП: bind_heli.script heli_binder:on_point( distance, position, path_idx )
helicopter_on_hit Вертолет получает урон ТЧ/ЧН/ЗП: bind_heli.script heli_binder:on_hit( power, impulse, hit_type, enemy_id )
patrol_path_in_point Достижение точки при ходьбе по путям ТЧ/ЧН/ЗП: bind_monster.script
move_mgr.script
generic_object_binder:waypoint_callback(obj, action_type, index)
move_mgr:waypoint_callback(obj, action_type, index)
hit Получение урона ТЧ/ЧН/ЗП: bind_monster.script
ТЧ/ЧН: ph_gate.script
ТЧ/ЧН/ЗП: generic_object_binder:hit_callback(obj, amount, local_direction, who, bone_index)
ТЧ/ЧН: action_gate:hit_callback(obj, amount, local_direction, who, bone_index)
death Смерть ТЧ/ЧН/ЗП: bind_monster.script
ЧН/ЗП: bind_crow.script
ТЧ/ЧН/ЗП: generic_object_binder:death_callback(victim, who)
ЧН/ЗП: crow_binder:death_callback(victim, who)
trader_global_anim_request ТЧ/ЧН: mob_trader.script mob_trader:on_global_anim_request()
trader_head_anim_request ТЧ/ЧН: mob_trader.script mob_trader:on_head_anim_request()
trader_sound_end ТЧ/ЧН: mob_trader.script mob_trader:on_sound_end()
zone_enter ТЧ/ЧН/ЗП: xr_zones.script arena_zone_binder:on_enter(zone, obj)
zone_exit ТЧ/ЧН/ЗП: xr_zones.script arena_zone_binder:on_exit(zone, obj)
script_animation ЧН: bind_agru_door.script
bind_red_forest_bridge.script

ЗП: bind_door_labx8
ЧН: agru_door_binder:animation_end_callback(is_end)
bridge_binder:animation_end_callback( is_end )
ЗП: door_binder_labx8:animation_end_callback(is_end)
sound Услышан звук ЗП: bind_monster.script generic_object_binder:hear_callback(self, who_id, sound_type, sound_position, sound_power)

Использование callback функций

  1. Выберите нужную вам функцию
  2. Откройте соответствующий ей скрипт
  3. Найдите в нём соответствующий метод
  4. Допишите в него нужный вам код
Выдача инфопорции
Метод / Callback функция Код Описание
actor_binder:on_item_take (obj)
if obj:section() == "item_section_name" and not
has_alife_info("infoportion_name") then
give_info("infoportion_name")
end
При взятии указанного предмета, один раз будет выдана указанная инфопорция.

item_section_name — имя секции предмета.
infoportion_name — имя инфопорции.

Вызов функции
Метод / Callback функция Код Описание
actor_binder:on_item_take (obj)
if obj:section() == "item_section_name" and not has_alife_info("no_cycle_infoportion") then 
script_name.funct_name()
give_info("no_cycle_infoportion")
end
При взятии указанного предмета, один раз будет вызвана указанная функция.

item_section_name — имя секции предмета.
no_cycle_infoportion — инфопорция, которая необходима для устранения зацикленности вызова скрипта. script_name — имя скрипта.
funct_name — имя функции в скрипте.