Callback функции — различия между версиями

Материал из MODFAQ.RU — моддинг классического S.T.A.L.K.E.R., TES и Fallout
Перейти к: навигация, поиск
м
м
 
(не показаны 2 промежуточные версии этого же участника)
Строка 9: Строка 9:
 
|-
 
|-
 
| '''Дополнили'''
 
| '''Дополнили'''
| BoBaH_671 a.k.a. Overfirst, Graff46, Charsi
+
| [[Overf1rst]], Graff46, Charsi
 
|-
 
|-
 
| '''Тип статьи'''
 
| '''Тип статьи'''
Строка 18: Строка 18:
 
|}
 
|}
  
'''Callback''' — это скриптовая функция, привязанная к движковому событию.
+
'''Callback'''<ref>[https://ap-pro.ru/forum/114-3951-1 Тема "Динамическое подключение/отключение функций." на форуме AP Production]</ref> — это скриптовая функция, привязанная к движковому событию.
  
 
Событие регистрируется в скриптовом классе строчкой, к примеру, следующего вида:
 
Событие регистрируется в скриптовом классе строчкой, к примеру, следующего вида:
Строка 46: Строка 46:
 
|-
 
|-
 
| <code>article_info</code>
 
| <code>article_info</code>
|  
+
| Получение статьи в Энциклопедию
 
| '''ТЧ/ЧН:''' ''bind_stalker.script''
 
| '''ТЧ/ЧН:''' ''bind_stalker.script''
 
| <code>actor_binder:article_callback(npc, group, name)</code>
 
| <code>actor_binder:article_callback(npc, group, name)</code>
Строка 56: Строка 56:
 
|-
 
|-
 
| <code>on_item_drop</code>
 
| <code>on_item_drop</code>
| Выкидывание предмета (из инвентаря)
+
| Выкидывание предмета (исчезновение из инвентаря)
 
| '''ТЧ/ЧН/ЗП:''' ''bind_stalker.script''
 
| '''ТЧ/ЧН/ЗП:''' ''bind_stalker.script''
 
| <code>actor_binder:on_item_drop (obj)</code>
 
| <code>actor_binder:on_item_drop (obj)</code>
 
|-
 
|-
 
| <code>trade_sell_buy_item</code>
 
| <code>trade_sell_buy_item</code>
|  
+
| Подтверждение торговли
 
| '''ТЧ/ЧН/ЗП:''' ''bind_stalker.script''
 
| '''ТЧ/ЧН/ЗП:''' ''bind_stalker.script''
 
| <code>actor_binder:on_trade (item, sell_bye, money)</code>
 
| <code>actor_binder:on_trade (item, sell_bye, money)</code>
Строка 81: Строка 81:
 
|-
 
|-
 
| <code>take_item_from_box</code>
 
| <code>take_item_from_box</code>
| Взятие предмета из ящика
+
| Взятие предмета из объекта с классом S_INVBOX
 
| '''ТЧ/ЧН/ЗП:''' ''bind_stalker.script''
 
| '''ТЧ/ЧН/ЗП:''' ''bind_stalker.script''
 
| <code>actor_binder:take_item_from_box(box, item)</code>
 
| <code>actor_binder:take_item_from_box(box, item)</code>
Строка 152: Строка 152:
 
| <code>generic_object_binder:hear_callback(self, who_id, sound_type, sound_position, sound_power)</code>
 
| <code>generic_object_binder:hear_callback(self, who_id, sound_type, sound_position, sound_power)</code>
 
|}
 
|}
 
  
 
== Использование callback функций ==
 
== Использование callback функций ==
Строка 202: Строка 201:
 
<code>funct_name</code> — имя функции в скрипте.
 
<code>funct_name</code> — имя функции в скрипте.
 
|}
 
|}
 +
 +
== Источник ==
 +
{{reflist|3}}
  
 
[[Категория:Игровые архивы]][[Категория:Скрипты]]
 
[[Категория:Игровые архивы]][[Категория:Скрипты]]

Текущая версия на 15:14, 30 августа 2024

Callback функции

Автор aka_sektor
Дополнили Overf1rst, Graff46, Charsi
Тип статьи справка
Актуальность ТЧ, ЧН, ЗП

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

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

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 Взятие предмета из объекта с классом S_INVBOX ТЧ/ЧН/ЗП: 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 — имя функции в скрипте.

Источник