hooks: Difference between revisions
(11 intermediate revisions by 4 users not shown) | |||
Line 4: | Line 4: | ||
==== start ==== | ==== start ==== | ||
Called once after loading all plugins, but before loading or configuring load of any [[:Category: | Called once after loading all plugins, but before loading or configuring load of any [[:Category:control|control]] or [[:Category:tables|tables]] files. <code>%config</code> and all other stuff would be unavailable at this moment. Reconfiguration for the following initialization steps (like [http://forums.openkore.com/viewtopic.php?t=47 profiles plugin] does) should be performed there, as well as anything else that needs to be performed as soon as possible. | ||
==== start2 ==== | ==== start2 ==== | ||
Called once before loading any [[:Category: | Called once before loading any [[:Category:control|control]] or [[:Category:tables|tables]] files, but when that load is already being configured. <code>%config</code> etc would still be unavailable at this moment. Monkey-patching of whatever will be loaded next can be performed there. | ||
==== start3 ==== | ==== start3 ==== | ||
Called once after all [[:Category: | Called once after all [[:Category:control|control]] and [[:Category:tables|tables]] files are loaded. You probably should use '''initialized''' hook instead. | ||
==== initialized ==== | ==== initialized ==== | ||
Line 24: | Line 24: | ||
==== AI_pre/manual ==== | ==== AI_pre/manual ==== | ||
Called continuously when in game unless [[AI]] is turned off. | Called continuously when in game unless [[ai|AI]] is turned off. | ||
==== AI_pre ==== | ==== AI_pre ==== | ||
Called continuously when in game if [[AI]] is set to automatic. | Called continuously when in game if [[ai|AI]] is set to automatic. | ||
==== AI_post ==== | ==== AI_post ==== | ||
Called continuously when in game if [[AI]] is set to automatic, after processing all other AI routines. | Called continuously when in game if [[ai|AI]] is set to automatic, after processing all other AI routines. | ||
== | == Discovering all existing hooks Unix Distro == | ||
find src -type f \( -name "*.pl" -or -name "*.pm" -not -name "Plugins.pm" -not -name "PluginsHookTest.pm" \) -exec grep -Hn "^[^#]*callHook" {} \; | sed -E s/\\t+/\\t/ | sed s/\\sif.*// | |||
== Discovering all existing hooks Windows Distro == | |||
open cmd | |||
cd openkore\src | |||
findstr /S /n "callHook" *.pl; | |||
findstr /S /n "callHook" *.pm; | |||
Note that some hooks, like <code>packet/<name></code>, <code>packet_pre/<name></code> and <code>mangle/<name></code>, actually are many hooks, for example, one hook for each network packet type. [[Mangle|See about it here]]. | Note that some hooks, like <code>packet/<name></code>, <code>packet_pre/<name></code> and <code>mangle/<name></code>, actually are many hooks, for example, one hook for each network packet type. [[Mangle|See about it here]]. | ||
== Hook List == | |||
This list might be outdated. | |||
<pre> | <pre> | ||
plugins\macro\macro.pl:105: Plugins::callHook ('macro/parseAndHook'); | |||
plugins\needs-review\busCommands\trunk\busCommands.pl:86: Plugins::callHook('bus_received', {message => $args{comm}, sender => $args{sender}}) if (($char && $1 eq $char->name) || $1 eq "all"); | |||
plugins\needs-review\busCommands\trunk\busCommands.pl:115: Plugins::callHook('bus_received', {message => $msg->{args}{comm},}); | |||
plugins\needs-review\busCommands\trunk\busCommands.pl:120: Plugins::callHook('bus_received', {message => $msg->{args}{comm},}); | |||
plugins\needs-review\busCommands\trunk\busCommands.pl:127: Plugins::callHook('bus_received', {message => $msg->{args}{comm}, sender => $msg->{args}{sender}}) | |||
src\functions.pl:74: Plugins::callHook('mainLoop_pre'); | |||
src\functions.pl:76: Plugins::callHook('mainLoop_post'); | |||
src\functions.pl:83: Plugins::callHook('start'); | |||
src\functions.pl:136: Plugins::callHook('parse_command_line'); | |||
src\functions.pl:378: Plugins::callHook('start2'); | |||
src\functions.pl:402: Plugins::callHook('start3'); | |||
src\functions.pl:633: Plugins::callHook('initialized'); | |||
src\functions.pl:793: Plugins::callHook('packet_mapChange'); | |||
src\functions.pl:1002: Plugins::callHook('mainLoop::setTitle',\%args); | |||
plugins\breakTime\test\autoBreakTimeTest.pm:50: Plugins::callHook( 'mainLoop_pre' ); | |||
plugins\breakTime | |||
</pre> | </pre> | ||
[[Category:Development]] | [[Category:Development]] |
Latest revision as of 13:09, 19 May 2023
Recommended hooks
Initialization
start
Called once after loading all plugins, but before loading or configuring load of any control or tables files. %config
and all other stuff would be unavailable at this moment. Reconfiguration for the following initialization steps (like profiles plugin does) should be performed there, as well as anything else that needs to be performed as soon as possible.
start2
Called once before loading any control or tables files, but when that load is already being configured. %config
etc would still be unavailable at this moment. Monkey-patching of whatever will be loaded next can be performed there.
start3
Called once after all control and tables files are loaded. You probably should use initialized hook instead.
initialized
Called once when all initialization is done and it's ready to connect to the server or start XKore. Additional initialization should be performed there.
Continuous Work
mainLoop_pre
Called continuously.
mainLoop_post
Called continuously, after processing all other routines.
AI_pre/manual
Called continuously when in game unless AI is turned off.
AI_pre
Called continuously when in game if AI is set to automatic.
AI_post
Called continuously when in game if AI is set to automatic, after processing all other AI routines.
Discovering all existing hooks Unix Distro
find src -type f \( -name "*.pl" -or -name "*.pm" -not -name "Plugins.pm" -not -name "PluginsHookTest.pm" \) -exec grep -Hn "^[^#]*callHook" {} \; | sed -E s/\\t+/\\t/ | sed s/\\sif.*//
Discovering all existing hooks Windows Distro
open cmd cd openkore\src findstr /S /n "callHook" *.pl; findstr /S /n "callHook" *.pm;
Note that some hooks, like packet/<name>
, packet_pre/<name>
and mangle/<name>
, actually are many hooks, for example, one hook for each network packet type. See about it here.
Hook List
This list might be outdated.
plugins\macro\macro.pl:105: Plugins::callHook ('macro/parseAndHook'); plugins\needs-review\busCommands\trunk\busCommands.pl:86: Plugins::callHook('bus_received', {message => $args{comm}, sender => $args{sender}}) if (($char && $1 eq $char->name) || $1 eq "all"); plugins\needs-review\busCommands\trunk\busCommands.pl:115: Plugins::callHook('bus_received', {message => $msg->{args}{comm},}); plugins\needs-review\busCommands\trunk\busCommands.pl:120: Plugins::callHook('bus_received', {message => $msg->{args}{comm},}); plugins\needs-review\busCommands\trunk\busCommands.pl:127: Plugins::callHook('bus_received', {message => $msg->{args}{comm}, sender => $msg->{args}{sender}}) src\functions.pl:74: Plugins::callHook('mainLoop_pre'); src\functions.pl:76: Plugins::callHook('mainLoop_post'); src\functions.pl:83: Plugins::callHook('start'); src\functions.pl:136: Plugins::callHook('parse_command_line'); src\functions.pl:378: Plugins::callHook('start2'); src\functions.pl:402: Plugins::callHook('start3'); src\functions.pl:633: Plugins::callHook('initialized'); src\functions.pl:793: Plugins::callHook('packet_mapChange'); src\functions.pl:1002: Plugins::callHook('mainLoop::setTitle',\%args); plugins\breakTime\test\autoBreakTimeTest.pm:50: Plugins::callHook( 'mainLoop_pre' ); plugins\breakTime\test\autoBreakTimeTest.pm:60: Plugins::callHook( 'mainLoop_pre' ); plugins\breakTime\test\autoBreakTimeTest.pm:70: Plugins::callHook( 'mainLoop_pre' ); plugins\breakTime\test\autoBreakTimeTest.pm:77: Plugins::callHook( 'mainLoop_pre' ); plugins\breakTime\test\autoBreakTimeTest.pm:85: Plugins::callHook( 'mainLoop_pre' ); plugins\breakTime\test\autoBreakTimeTest.pm:90: Plugins::callHook( 'mainLoop_pre' ); plugins\breakTime\test\autoBreakTimeTest.pm:96: Plugins::callHook( 'mainLoop_pre' ); plugins\breakTime\test\autoBreakTimeTest.pm:102: Plugins::callHook( 'mainLoop_pre' ); plugins\breakTime\test\autoBreakTimeTest.pm:110: Plugins::callHook( 'mainLoop_pre' ); plugins\breakTime\test\autoBreakTimeTest.pm:115: Plugins::callHook( 'mainLoop_pre' ); plugins\breakTime\test\autoBreakTimeTest.pm:124: Plugins::callHook( 'mainLoop_pre' ); plugins\breakTime\test\autoBreakTimeTest.pm:130: Plugins::callHook( 'mainLoop_pre' ); plugins\breakTime\test\autoBreakTimeTest.pm:136: Plugins::callHook( 'mainLoop_pre' ); plugins\breakTime\test\autoBreakTimeTest.pm:142: Plugins::callHook( 'mainLoop_pre' ); plugins\breakTime\test\autoBreakTimeTest.pm:148: Plugins::callHook( 'mainLoop_pre' ); plugins\breakTime\test\autoBreakTimeTest.pm:152: Plugins::callHook( 'mainLoop_pre' ); plugins\macro\Macro\Utilities.pm:471: Plugins::callHook ('macro/error', $hookArgs); plugins\macro\Macro\Utilities.pm:495: Plugins::callHook ('macro/error', $hookArgs); plugins\macro\Macro\Utilities.pm:518: Plugins::callHook ('macro/callMacro/process'); plugins\needs-review\teleportTask\trunk\Task\Teleport.pm:88: Plugins::callHook(teleport_sent => $self->hookArgs); src\Actor\Item.pm:526: Plugins::callHook('get_item_weight', $self) if !defined $self->{weight}; src\Actor\You.pm:282: Plugins::callHook('attack_start', {ID => $targetID}); src\Actor.pm:589: Plugins::callHook('Actor::setStatus::change', { src\AI\Attack.pm:218: Plugins::callHook('target_died', {monster => $monsters_old{$ID}}); src\AI\Attack.pm:260: Plugins::callHook('attack_end', {ID => $ID}) src\AI\Attack.pm:692: Plugins::callHook('AI::Attack::main', {target => $target}) src\AI\CoreLogic.pm:57: Plugins::callHook('AI_start', {state => AI::state}); src\AI\CoreLogic.pm:68: Plugins::callHook('AI_pre/manual'); src\AI\CoreLogic.pm:118: Plugins::callHook('AI_pre'); src\AI\CoreLogic.pm:218: Plugins::callHook('AI_post'); src\AI\CoreLogic.pm:549: Plugins::callHook('portal_exist2', { src\AI\CoreLogic.pm:575: Plugins::callHook('portal_exist2', { src\AI\CoreLogic.pm:980: Plugins::callHook('AI_storage_auto_queued'); src\AI\CoreLogic.pm:1202: Plugins::callHook('AI_storage_auto_weight_start' => \%plugin_args); src\AI\CoreLogic.pm:1213: Plugins::callHook('AI_storage_auto_queued'); src\AI\CoreLogic.pm:1224: Plugins::callHook('AI_storage_auto_get_auto_start' => \%plugin_args); src\AI\CoreLogic.pm:1268: Plugins::callHook('AI_storage_item_out_of_stock', { src\AI\CoreLogic.pm:1293: Plugins::callHook('AI_storage_auto_queued'); src\AI\CoreLogic.pm:1310: Plugins::callHook('AI_sell_auto_queued'); src\AI\CoreLogic.pm:1314: Plugins::callHook('AI_sell_auto_queued'); src\AI\CoreLogic.pm:1457: Plugins::callHook('AI_storage_open', \%pluginArgs); # we can hook here to perform actions BEFORE any storage function src\AI\CoreLogic.pm:1472: Plugins::callHook('AI_storage_full', \%pluginArgs); src\AI\CoreLogic.pm:1496: Plugins::callHook('AI_storage_item_full', { src\AI\CoreLogic.pm:1557: Plugins::callHook('AI_storage_done', \%hookArgs); src\AI\CoreLogic.pm:1641: Plugins::callHook('AI_storage_item_out_of_stock', { src\AI\CoreLogic.pm:1675: Plugins::callHook('AI_storage_done_after_getAuto', \%hookArgs); src\AI\CoreLogic.pm:1711: Plugins::callHook('AI_sell_auto_start' => \%plugin_args); src\AI\CoreLogic.pm:1719: Plugins::callHook('AI_sell_auto_queued'); src\AI\CoreLogic.pm:1736: Plugins::callHook('AI_buy_auto_queued'); src\AI\CoreLogic.pm:1740: Plugins::callHook('AI_buy_auto_queued'); src\AI\CoreLogic.pm:1857: Plugins::callHook('AI_sell_auto'); src\AI\CoreLogic.pm:1886: Plugins::callHook('AI_sell_auto_done'); src\AI\CoreLogic.pm:1897: Plugins::callHook('AI_buy_auto_start' => \%plugin_args); src\AI\CoreLogic.pm:1933: Plugins::callHook('AI_buy_auto_queued'); src\AI\CoreLogic.pm:1949: Plugins::callHook('AI_buy_auto_done'); src\AI\CoreLogic.pm:1953: Plugins::callHook('AI_storage_auto_queued'); src\AI\CoreLogic.pm:1957: Plugins::callHook('AI_storage_auto_queued'); src\AI\CoreLogic.pm:1961: Plugins::callHook('AI_buy_auto'); src\AI\CoreLogic.pm:2278: Plugins::callHook('AI/lockMap', \%args); src\AI\CoreLogic.pm:2396: Plugins::callHook('ai_processRandomWalk' => \%plugin_args); src\AI\CoreLogic.pm:2715: Plugins::callHook('ai_follow', $args); src\AI\CoreLogic.pm:3234: Plugins::callHook('checkMonsterAutoAttack', \%hookArgs); src\AI\CoreLogic.pm:3297: Plugins::callHook('ai_items_take'); src\AI\SlaveAttack.pm:186: Plugins::callHook('slave_target_died', { src\AI\SlaveAttack.pm:227: Plugins::callHook('slave_attack_end', { src\AI.pm:98: Plugins::callHook('AI_state_change', { src\ChatQueue.pm:64: Plugins::callHook('ChatQueue::add', \%item); src\ChatQueue.pm:616: Plugins::callHook('ChatQueue::processChatResponse', $cmd); src\Commands.pm:884: Plugins::callHook('Commands::run/pre', \%params); src\Commands.pm:886: Plugins::callHook('Commands::run/post', \%params); src\Commands.pm:890: Plugins::callHook('Command_post', \%params); src\Commands.pm:1301: Plugins::callHook('AI_buy_auto_queued'); src\Commands.pm:1330: Plugins::callHook('AI_sell_auto_queued'); src\Commands.pm:1338: Plugins::callHook('AI_storage_auto_queued'); src\Commands.pm:2151: Plugins::callHook('Commands::cmdConf', { src\FileParsers.pm:784: Plugins::callHook('FileParsers::ROLUT', \%ret); src\FileParsers.pm:811: Plugins::callHook('FileParsers::RODescLUT', \%ret); src\FileParsers.pm:861: Plugins::callHook ('FileParsers::ROQuestsLUT', \%ret); src\FileParsers.pm:1480: Plugins::callHook('updatePortalLUT', $plugin_args); src\FileParsers.pm:1494: Plugins::callHook('updatePortalLUT2', $plugin_args); src\Interface\Console\Curses.pm:683: Plugins::callHook('curses/updateStatus'); src\Interface\Console\Curses.pm:808: Plugins::callHook('curses/updateObjects'); src\InventoryList\Cart.pm:34: Plugins::callHook('cart_ready'); src\InventoryList\Cart.pm:36: Plugins::callHook('cart_info_updated'); src\InventoryList\Cart.pm:94: Plugins::callHook('cart_ready'); src\InventoryList\Cart.pm:96: Plugins::callHook('cart_info_updated'); src\InventoryList\Inventory.pm:35: Plugins::callHook('inventory_ready'); src\InventoryList\Inventory.pm:62: Plugins::callHook('inventory_ready'); src\InventoryList\Storage.pm:37: Plugins::callHook('storage_first_session_openning'); src\InventoryList\Storage.pm:39: Plugins::callHook('packet_storage_open'); src\InventoryList\Storage.pm:46: Plugins::callHook('packet_storage_close'); src\InventoryList\Storage.pm:79: Plugins::callHook('storage_first_session_openning'); src\InventoryList\Storage.pm:81: Plugins::callHook('packet_storage_open'); src\InventoryList\Storage.pm:87: Plugins::callHook('storage_ready'); src\Misc.pm:316: Plugins::callHook('configModify', { src\Misc.pm:367: Plugins::callHook('configModify', { src\Misc.pm:407: Plugins::callHook('setTimeout', { src\Misc.pm:1292: Plugins::callHook('charSelectScreen', \%plugin_args); src\Misc.pm:1524: Plugins::callHook('ai_check_Aggressiveness' => \%plugin_args); src\Misc.pm:1559: Plugins::callHook('ai_slave_check_Aggressiveness' => \%plugin_args); src\Misc.pm:2152: Plugins::callHook('inventory_item_removed', { src\Misc.pm:2176: Plugins::callHook('storage_item_removed', { src\Misc.pm:2200: Plugins::callHook('cart_item_removed', { src\Misc.pm:2892: Plugins::callHook('objectAdded', { src\Misc.pm:2909: Plugins::callHook('objectRemoved', { src\Misc.pm:3301: Plugins::callHook('changed_status',{ src\Misc.pm:3313: # Plugins::callHook('perfect_hidden_player',undef); src\Misc.pm:3314: Plugins::callHook('perfect_hidden_player', { src\Misc.pm:3329: Plugins::callHook('perfect_hidden_npc', { src\Misc.pm:3793: Plugins::callHook('teleport_sent', \%args); src\Misc.pm:3799: Plugins::callHook('teleport_sent', \%args); src\Misc.pm:3837: Plugins::callHook('teleport_sent', \%args); src\Misc.pm:3846: Plugins::callHook('teleport_sent', \%args); src\Misc.pm:3856: Plugins::callHook('teleport_sent', \%args); src\Misc.pm:3868: Plugins::callHook('teleport_sent', \%args); src\Misc.pm:3926: Plugins::callHook('teleport_sent', \%args); src\Misc.pm:4314: Plugins::callHook('avoidGM_near', \%args); src\Misc.pm:4366: Plugins::callHook('avoidGM_talk', \%args); src\Misc.pm:4405: Plugins::callHook('avoidList_near', \%args); src\Misc.pm:5075: Plugins::callHook('checkSelfCondition', \%hookArgs); src\Misc.pm:5227: Plugins::callHook('checkPlayerCondition', \%args); src\Misc.pm:5302: Plugins::callHook('checkMonsterCondition', \%args); src\Misc.pm:5392: Plugins::callHook('open_shop', { src\Misc.pm:5409: Plugins::callHook('shop_closed'); src\Misc.pm:5504: Plugins::callHook ('buyer_open_shop', { src\Misc.pm:5525: Plugins::callHook('buyer_shop_closed'); src\Network\ClientReceive.pm:75: Plugins::callHook('map_loaded'); src\Network\DirectConnection.pm:140: Plugins::callHook('Network::connectTo', { src\Network\DirectConnection.pm:173: Plugins::callHook('Network::serverSend/pre', {msg => \$msg}); src\Network\DirectConnection.pm:178: Plugins::callHook('Network::serverSend', {msg => $msg}); src\Network\DirectConnection.pm:196: Plugins::callHook('Network::serverRecv', {msg => \$msg}); src\Network\DirectConnection.pm:245: Plugins::callHook('serverDisconnect/fail'); src\Network\DirectConnection.pm:248: Plugins::callHook('serverDisconnect/success'); src\Network\DirectConnection.pm:260: Plugins::callHook('Network::stateChanged'); src\Network\DirectConnection.pm:274: Plugins::callHook('Network::clientAlive', \%args); src\Network\DirectConnection.pm:286: Plugins::callHook('Network::clientSend', \%args); src\Network\DirectConnection.pm:301: Plugins::callHook('Network::clientRecv', \%args); src\Network\DirectConnection.pm:355: Plugins::callHook('Network::serverConnect/master'); src\Network\DirectConnection.pm:486: Plugins::callHook('Network::serverConnect/special'); src\Network\DirectConnection.pm:526: Plugins::callHook('Network::serverConnect/char'); src\Network\DirectConnection.pm:562: Plugins::callHook('Network::serverConnect/charselect'); src\Network\DirectConnection.pm:600: Plugins::callHook('Network::serverConnect/mapserver'); src\Network\DirectConnection.pm:618: Plugins::callHook('disconnected'); src\Network\DirectConnection.pm:633: Plugins::callHook('disconnected'); src\Network\PacketParser.pm:272: Plugins::callHook("packet_pre/$handler->[0]", \%args); src\Network\PacketParser.pm:274: Plugins::callHook("$self->{hook_prefix}/packet_pre/$handler->[0]", \%args); src\Network\PacketParser.pm:289: Plugins::callHook("packet/$handler->[0]", \%args); src\Network\PacketParser.pm:291: Plugins::callHook("$self->{hook_prefix}/packet/$handler->[0]", \%args); src\Network\PacketParser.pm:368: Plugins::callHook("$self->{hook_prefix}/willMangle", \%args); src\Network\PacketParser.pm:390: Plugins::callHook("$self->{hook_prefix}/mangle", \%hook_args); src\Network\PacketParser.pm:494: Plugins::callHook($hook, { src\Network\Receive\kRO\Sakexe_0.pm:1016: Plugins::callHook($args->{hook}, { src\Network\Receive\kRO\Sakexe_0.pm:1056: Plugins::callHook('packet_guildMsg', { src\Network\Receive\kRO\Sakexe_0.pm:1109: Plugins::callHook('item_skill', { src\Network\Receive\kRO\Sakexe_0.pm:1160: Plugins::callHook('packet_pubMsg', { src\Network\Receive\kRO\Sakexe_0.pm:1176: Plugins::callHook('packet_sentPM', { src\Network\Receive\kRO\Sakexe_0.pm:1209: Plugins::callHook('pvp_mode', { src\Network\Receive\kRO\Sakexe_0.pm:1225: Plugins::callHook('pvp_mode', { src\Network\Receive\kRO\Sakexe_0.pm:1300: Plugins::callHook('packet_skilluse', { src\Network\Receive\kRO\Sakexe_0.pm:1341: Plugins::callHook('packet_skilluse', { src\Network\Receive\kRO\Sakexe_0.pm:1420: Plugins::callHook('packet_skilluse', { src\Network\Receive\ServerType0.pm:1040: Plugins::callHook($args->{hook}, { src\Network\Receive\ServerType0.pm:1082: Plugins::callHook('packet_guildMsg', { src\Network\Receive\ServerType0.pm:1135: Plugins::callHook('item_skill', { src\Network\Receive\ServerType0.pm:1186: Plugins::callHook('packet_pubMsg', { src\Network\Receive\ServerType0.pm:1216: Plugins::callHook('pvp_mode', { src\Network\Receive\ServerType0.pm:1233: Plugins::callHook('pvp_mode', { src\Network\Receive\ServerType0.pm:1313: Plugins::callHook('packet_skilluse', { src\Network\Receive\ServerType0.pm:1362: Plugins::callHook('packet_skilluse', { src\Network\Receive\ServerType0.pm:1448: Plugins::callHook('packet_skilluse', { src\Network\Receive.pm:819: Plugins::callHook('parseMsg/recvChars', $args->{options}); src\Network\Receive.pm:973: Plugins::callHook('char_created', {char => $character}); src\Network\Receive.pm:1260: Plugins::callHook('in_game'); src\Network\Receive.pm:1304: Plugins::callHook('disconnected'); src\Network\Receive.pm:1404: Plugins::callHook('exp_gained'); src\Network\Receive.pm:1460: Plugins::callHook('base_level_changed', {level => $actor->{lv}}); src\Network\Receive.pm:1491: Plugins::callHook('zeny_change', { src\Network\Receive.pm:1562: Plugins::callHook('job_level_changed', {level => $actor->{lv_job}}); src\Network\Receive.pm:1723: Plugins::callHook('packet_charStats', { src\Network\Receive.pm:1825: Plugins::callHook('packet_pre/actor_display', $args); src\Network\Receive.pm:1827: Plugins::callHook('packet/actor_display', $args); src\Network\Receive.pm:2188: Plugins::callHook('add_player_list', $actor); src\Network\Receive.pm:2192: Plugins::callHook('add_monster_list', $actor); src\Network\Receive.pm:2196: Plugins::callHook('add_pet_list', $actor); src\Network\Receive.pm:2200: Plugins::callHook('add_portal_list', $actor); src\Network\Receive.pm:2209: Plugins::callHook('add_npc_list', $actor); src\Network\Receive.pm:2213: Plugins::callHook('add_slave_list', $actor); src\Network\Receive.pm:2216: Plugins::callHook('add_elemental_list', $actor); src\Network\Receive.pm:2238: Plugins::callHook('player', {player => $actor}); #backwards compatibility src\Network\Receive.pm:2240: Plugins::callHook('player_exist', {player => $actor}); src\Network\Receive.pm:2244: Plugins::callHook('npc_exist', {npc => $actor}); src\Network\Receive.pm:2248: Plugins::callHook('portal_exist', {portal => $actor}); src\Network\Receive.pm:2252: Plugins::callHook('monster_exist', {monster => $actor}); src\Network\Receive.pm:2256: Plugins::callHook('pet_exist', {pet => $actor}); src\Network\Receive.pm:2260: Plugins::callHook('slave_exist', {slave => $actor}); src\Network\Receive.pm:2264: Plugins::callHook('elemental_exist', {elemental => $actor}); src\Network\Receive.pm:2268: Plugins::callHook('unknown_exist', {unknown => $actor}); src\Network\Receive.pm:2289: Plugins::callHook('player', {player => $actor}); #backwards compatibailty src\Network\Receive.pm:2291: Plugins::callHook('player_connected', {player => $actor}); src\Network\Receive.pm:2319: Plugins::callHook('player_moved', $actor); src\Network\Receive.pm:2322: Plugins::callHook('monster_moved', $actor); src\Network\Receive.pm:2325: Plugins::callHook('pet_moved', $actor); src\Network\Receive.pm:2328: Plugins::callHook('slave_moved', $actor); src\Network\Receive.pm:2332: Plugins::callHook('portal_moved', $actor); src\Network\Receive.pm:2336: Plugins::callHook('npc_moved', $actor); src\Network\Receive.pm:2339: Plugins::callHook('pet_moved', $actor); src\Network\Receive.pm:2342: Plugins::callHook('unknown_moved', $actor); src\Network\Receive.pm:2349: Plugins::callHook('player_spawned', {player => $actor}); src\Network\Receive.pm:2352: Plugins::callHook('monster_spawned', {monster => $actor}); src\Network\Receive.pm:2355: Plugins::callHook('pet_spawned', {pet => $actor}); src\Network\Receive.pm:2358: Plugins::callHook('slave_spawned', {slave => $actor}); src\Network\Receive.pm:2362: Plugins::callHook('portal_spawned', {portal => $actor}); src\Network\Receive.pm:2365: Plugins::callHook('elemental_spawned', {elemental => $actor}); src\Network\Receive.pm:2368: Plugins::callHook('npc_spawned', {npc => $actor}); src\Network\Receive.pm:2371: Plugins::callHook('unknown_spawned', {unknown => $actor}); src\Network\Receive.pm:2396: Plugins::callHook('self_died'); src\Network\Receive.pm:2435: Plugins::callHook('monster_disappeared', {monster => $monster}); src\Network\Receive.pm:2471: Plugins::callHook('player_disappeared', {player => $player}); src\Network\Receive.pm:2491: Plugins::callHook('portal_disappeared', {portal => $portal}); src\Network\Receive.pm:2500: Plugins::callHook('npc_disappeared', {npc => $npc}); src\Network\Receive.pm:2508: Plugins::callHook('pet_disappeared', {pet => $pet}); src\Network\Receive.pm:2541: Plugins::callHook('slave_disappeared', {slave => $slave}); src\Network\Receive.pm:2557: Plugins::callHook('elemental_disappeared', {elemental => $elemental}); src\Network\Receive.pm:2645: Plugins::callHook('packet_attack', { src\Network\Receive.pm:2717: Plugins::callHook('charNameUpdate', {player => $player}); src\Network\Receive.pm:2729: Plugins::callHook('mobNameUpdate', {monster => $monster}); src\Network\Receive.pm:2747: Plugins::callHook('npcNameUpdate', {npc => $npc}); src\Network\Receive.pm:2759: Plugins::callHook('petNameUpdate', {pet => $pet}); src\Network\Receive.pm:2770: Plugins::callHook('slaveNameUpdate', {slave => $slave}); src\Network\Receive.pm:2782: Plugins::callHook('elementalNameUpdate', {elemental => $elemental}); src\Network\Receive.pm:2809: Plugins::callHook('base_level', {name => $actor}); src\Network\Receive.pm:2812: Plugins::callHook('job_level', {name => $actor}); src\Network\Receive.pm:3114: Plugins::callHook('packet_localBroadcast', { src\Network\Receive.pm:3352: Plugins::callHook('show_script', { src\Network\Receive.pm:3483: Plugins::callHook('packet_sysMsg', { src\Network\Receive.pm:3635: Plugins::callHook('equipped_item', { src\Network\Receive.pm:3690: Plugins::callHook('item_gathered', { src\Network\Receive.pm:3754: Plugins::callHook('packet_item_removed', {index => $item->{binID}}); src\Network\Receive.pm:3766: Plugins::callHook('rental_expired', { src\Network\Receive.pm:3807: Plugins::callHook('vending_item_sold', { src\Network\Receive.pm:3819: Plugins::callHook('vending_item_sold_out', { src\Network\Receive.pm:3851: Plugins::callHook('vending_item_sold', { src\Network\Receive.pm:3865: Plugins::callHook('vending_item_sold_out', { src\Network\Receive.pm:3940: Plugins::callHook('packet_vender_store', { item => $item }); src\Network\Receive.pm:3955: Plugins::callHook('packet_vender_store2', { src\Network\Receive.pm:4233: Plugins::callHook('pvp_mode', {pvp => $pvp});# 1 PvP, 2 GvG, 3 Battleground src\Network\Receive.pm:4275: Plugins::callHook('packet_areaSpell', { src\Network\Receive.pm:4322: Plugins::callHook('packet_areaSpell', { src\Network\Receive.pm:4371: Plugins::callHook('packet_areaSpell', { src\Network\Receive.pm:4643: Plugins::callHook('quest_mission_added', { src\Network\Receive.pm:4650: Plugins::callHook('quest_list'); src\Network\Receive.pm:4703: Plugins::callHook('quest_mission_added', { src\Network\Receive.pm:4771: Plugins::callHook('quest_mission_added', { src\Network\Receive.pm:4777: Plugins::callHook('quest_added', {questID => $args->{questID}}); src\Network\Receive.pm:4870: Plugins::callHook('quest_mission_updated', { src\Network\Receive.pm:4941: Plugins::callHook('npc_chat', { src\Network\Receive.pm:4967: Plugins::callHook('makable_item_list', {item_list => $makableList}); src\Network\Receive.pm:5324: Plugins::callHook('invalid_password'); src\Network\Receive.pm:5352: Plugins::callHook('dial'); src\Network\Receive.pm:5371: Plugins::callHook('invalid_password'); src\Network\Receive.pm:5538: Plugins::callHook('chat_created', {chat => $chatRooms{$accountID}}); src\Network\Receive.pm:5565: Plugins::callHook('packet_chatinfo', { src\Network\Receive.pm:5609: Plugins::callHook('chat_joined', {chat => $chat}); src\Network\Receive.pm:5674: Plugins::callHook('chat_modified', { src\Network\Receive.pm:5749: Plugins::callHook('chat_leave'); src\Network\Receive.pm:5763: Plugins::callHook('chat_removed', { src\Network\Receive.pm:5795: Plugins::callHook('error_deal', {type => $args->{type}}); src\Network\Receive.pm:5798: Plugins::callHook('error_deal', {type => $args->{type}}); src\Network\Receive.pm:5816: Plugins::callHook('engaged_deal', {name => $currentDeal{name}}); src\Network\Receive.pm:5819: Plugins::callHook('error_deal', {type =>$args->{type}}); src\Network\Receive.pm:5822: Plugins::callHook('error_deal', {type =>$args->{type}}); src\Network\Receive.pm:5831: Plugins::callHook('cancelled_deal'); src\Network\Receive.pm:5839: Plugins::callHook('complete_deal'); src\Network\Receive.pm:5847: Plugins::callHook('finalized_deal', {name => $currentDeal{name}}); src\Network\Receive.pm:5866: Plugins::callHook('incoming_deal', { src\Network\Receive.pm:5964: Plugins::callHook('packet_emotion', { src\Network\Receive.pm:6007: Plugins::callHook('disconnected') if ($net->getState() == Network::IN_GAME); src\Network\Receive.pm:6147: Plugins::callHook('friend_request', { src\Network\Receive.pm:6945: Plugins::callHook('packet_useitem', \%hook_args); src\Network\Receive.pm:6992: Plugins::callHook('item_appeared', { src\Network\Receive.pm:7022: Plugins::callHook('item_exists', { src\Network\Receive.pm:7245: Plugins::callHook('Network::Receive::map_changed', { src\Network\Receive.pm:7361: Plugins::callHook('Network::Receive::map_changed', { src\Network\Receive.pm:7427: Plugins::callHook('npc_autotalk', { src\Network\Receive.pm:7448: Plugins::callHook('npc_talk', { src\Network\Receive.pm:7477: Plugins::callHook('npc_talk_done', {ID => $ID}); src\Network\Receive.pm:7525: Plugins::callHook('npc_autotalk', { src\Network\Receive.pm:7556: Plugins::callHook('npc_talk_responses', { src\Network\Receive.pm:7707: Plugins::callHook('buy_result', {fail => $args->{fail}}); src\Network\Receive.pm:7862: Plugins::callHook('deal_you_added', { src\Network\Receive.pm:7992: Plugins::callHook('add_player_list', $actor); src\Network\Receive.pm:7993: Plugins::callHook('player', {player => $actor}); #backwards compatibility src\Network\Receive.pm:7994: Plugins::callHook('player_exist', {player => $actor}); src\Network\Receive.pm:8007: Plugins::callHook('player_disappeared', {player => $player}); src\Network\Receive.pm:8202: Plugins::callHook('packet_partyJoin', { partyName => bytesToString($info->{name}) }); src\Network\Receive.pm:8255: Plugins::callHook('packet_partyMsg', { src\Network\Receive.pm:8322: Plugins::callHook('party_invite', { src\Network\Receive.pm:8471: Plugins::callHook('party_users_info_ready'); src\Network\Receive.pm:8576: Plugins::callHook('rodex_mail_list', { src\Network\Receive.pm:8659: Plugins::callHook('rodex_mail', { src\Network\Receive.pm:8673: Plugins::callHook('rodex_unread_mail'); src\Network\Receive.pm:8830: Plugins::callHook('rodex_mail_deleted', { src\Network\Receive.pm:8964: Plugins::callHook('packet_clanMsg', { src\Network\Receive.pm:9160: Plugins::callHook('cooking_list', { src\Network\Receive.pm:9275: Plugins::callHook('search_store', $universalCatalogInfo); src\Network\Receive.pm:9324: Plugins::callHook('packet_message_string', { src\Network\Receive.pm:9382: Plugins::callHook($hook, { src\Network\Receive.pm:9408: Plugins::callHook('packet_charSkills', { src\Network\Receive.pm:9638: Plugins::callHook ('captcha_image', $hookArgs); src\Network\Receive.pm:9647: Plugins::callHook ('captcha_file', $hookArgs); src\Network\Receive.pm:9661: Plugins::callHook ('captcha_answer', {flag => $args->{flag}}); src\Network\Receive.pm:9723: Plugins::callHook('packet_open_buying_store', { src\Network\Receive.pm:9741: Plugins::callHook('packet_buying', {ID => $ID}); src\Network\Receive.pm:9793: Plugins::callHook('packet_buying_store', { src\Network\Receive.pm:9818: Plugins::callHook('packet_buying_store2', { src\Network\Receive.pm:9869: Plugins::callHook('packet_buyer', {ID => $ID}); src\Network\Receive.pm:9889: Plugins::callHook('buyer_shop_closed'); src\Network\Receive.pm:9941: Plugins::callHook('packet_special_item_obtain', { src\Network\Receive.pm:9968: Plugins::callHook('packet_sentPM', { src\Network\Receive.pm:10101: Plugins::callHook('memo_fail', {field => $field->baseName}); src\Network\Receive.pm:10104: Plugins::callHook('memo_success', {field => $field->baseName}); src\Network\Receive.pm:10488: Plugins::callHook('instance_ready'); src\Network\Receive.pm:10637: Plugins::callHook('equipped_item', {slot => $equipSlot_lut{$_}, item => $item}); src\Network\Receive.pm:10665: Plugins::callHook('equipped_item_sw', {slot => $equipSlot_lut{$_}, item => $item}); src\Network\Receive.pm:10843: Plugins::callHook('packet_item_removed', {index => $item->{binID}}); src\Network\Receive.pm:11204: Plugins::callHook('parseMsg/addPrivMsgUser', { src\Network\Receive.pm:11216: Plugins::callHook('packet_privMsg', { src\Network\Receive.pm:11389: Plugins::callHook('packet_selfChat', { src\Network\Receive.pm:11496: Plugins::callHook('is_casting', { src\Network\Receive.pm:11567: Plugins::callHook('packet_castCancelled', { src\Network\Receive.pm:11615: Plugins::callHook('unequipped_item', { src\Network\Receive.pm:11646: Plugins::callHook('unequipped_item_sw', { src\Network\Receive.pm:11682: Plugins::callHook('packet_vender', { src\Network\Receive.pm:11718: Plugins::callHook('packet_charSkills', { src\Network\Receive.pm:11799: Plugins::callHook('packet_skillfail', { src\Network\Receive.pm:11812: Plugins::callHook('open_store_success'); src\Network\Receive.pm:11816: Plugins::callHook('open_store_fail', { flag => $args->{flag} }); src\Network\Receive.pm:11954: Plugins::callHook('banking_opened'); src\Network\Receive.pm:11970: Plugins::callHook('banking_deposit_success'); src\Network\Receive.pm:11979: Plugins::callHook('banking_deposit_failed', {'reason' => $args->{reason}}); src\Network\Receive.pm:11994: Plugins::callHook('banking_withdraw_success'); src\Network\Receive.pm:12001: Plugins::callHook('banking_withdraw_failed', {'reason' => $args->{reason}}); src\Network\Receive.pm:12020: Plugins::callHook('navigate_to', $args); src\Network\Receive.pm:12260: Plugins::callHook ('captcha_image', $hookArgs); src\Network\Receive.pm:12261: Plugins::callHook ('captcha_file', {file => $file}); src\Network\Send\ServerType1.pm:37: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7); src\Network\Send\ServerType1.pm:38: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3); src\Network\Send\ServerType1.pm:56: Plugins::callHook('packet_pre/sendSit', \%args); src\Network\Send\ServerType1.pm:74: Plugins::callHook('packet_pre/sendStand', \%args); src\Network\Send\ServerType1.pm:151: Plugins::callHook('packet_pre/sendSkillUse', \%args); src\Network\Send\ServerType10.pm:39: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7); src\Network\Send\ServerType10.pm:40: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3); src\Network\Send\ServerType10.pm:59: Plugins::callHook('packet_pre/sendAttack', \%args); src\Network\Send\ServerType2.pm:44: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7); src\Network\Send\ServerType2.pm:45: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3); src\Network\Send\ServerType3.pm:59: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7); src\Network\Send\ServerType3.pm:60: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3); src\Network\Send\ServerType4.pm:45: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7); src\Network\Send\ServerType4.pm:46: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3); src\Network\Send\ServerType5.pm:57: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7); src\Network\Send\ServerType5.pm:58: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3); src\Network\Send\ServerType6.pm:36: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7); src\Network\Send\ServerType6.pm:37: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3); src\Network\Send\ServerType7.pm:35: Plugins::callHook('packet_pre/sendAttack', \%args); src\Network\Send\ServerType7.pm:55: Plugins::callHook('packet_pre/sendSit', \%args); src\Network\Send\ServerType7.pm:73: Plugins::callHook('packet_pre/sendStand', \%args); src\Network\Send\ServerType7.pm:96: Plugins::callHook('packet_pre/sendSkillUse', \%args); src\Network\Send\ServerType8.pm:65: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7); src\Network\Send\ServerType8.pm:66: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3); src\Network\Send\ServerType8.pm:85: Plugins::callHook('packet_pre/sendAttack', \%args); src\Network\Send\ServerType8.pm:103: Plugins::callHook('packet_pre/sendStand', \%args); src\Network\Send\ServerType8.pm:120: Plugins::callHook('packet_pre/sendSit', \%args); src\Network\Send\ServerType8.pm:140: Plugins::callHook('packet_pre/sendSkillUse', \%args); src\Network\Send\ServerType8_1.pm:54: Plugins::callHook('packet_pre/sendAttack', \%args); src\Network\Send\ServerType8_1.pm:141: Plugins::callHook('packet_pre/sendSit', \%args); src\Network\Send\ServerType8_1.pm:160: Plugins::callHook('packet_pre/sendStand', \%args); src\Network\Send\ServerType8_1.pm:182: Plugins::callHook('packet_pre/sendSkillUse', \%args); src\Network\Send\ServerType8_3.pm:48: Plugins::callHook('packet_pre/sendSit', \%args); src\Network\Send\ServerType8_3.pm:66: Plugins::callHook('packet_pre/sendAttack', \%args); src\Network\Send\ServerType8_3.pm:94: Plugins::callHook('packet_pre/sendStand', \%args); src\Network\Send\ServerType8_5.pm:46: Plugins::callHook('packet_pre/sendSkillUse', \%args); src\Network\Send\ServerType8_5.pm:180: Plugins::callHook('packet_pre/sendAttack', \%args); src\Network\Send.pm:245: Plugins::callHook($hookName, \%args); src\Network\Send.pm:487: Plugins::callHook('packet/sendMapLoaded'); src\Network\Send.pm:536: Plugins::callHook('packet_pre/sendAttack', \%args) if $flag == ACTION_ATTACK || $flag == ACTION_ATTACK_REPEAT; src\Network\Send.pm:537: Plugins::callHook('packet_pre/sendSit', \%args) if $flag == ACTION_SIT || $flag == ACTION_STAND; src\Network\Send.pm:826: Plugins::callHook('packet_pre/sendSkillUse', \%args); src\Network\XKore.pm:120: Plugins::callHook('Network::serverSend/pre', {msg => \$msg}); src\Network\XKore.pm:140: Plugins::callHook('Network::stateChanged'); src\Network\XKore.pm:243: Plugins::callHook('disconnected'); src\Network\XKore.pm:264: Plugins::callHook('XKore_start'); src\Plugins.pm:394:# Add a hook for $hookname. Whenever Kore calls Plugins::callHook('foo'), src\Plugins.pm:397:# See also Plugins::callHook() for information about how callback is called. src\Plugins.pm:413:# Plugins::callHook('AI_pre'); # <-- ai_called() is now also called. src\Plugins.pm:521:# void Plugins::callHook(String hookName, [argument]) src\Plugins.pm:526:# Adding or removing callbacks during callHook will not affect the current call. src\Plugins.pm:534:sub callHook { src\Poseidon\Client.pm:82: Plugins::callHook('Poseidon/client_authenticate', { src\Poseidon\QueryServer.pm:78: Plugins::callHook('Poseidon/server_authenticate', { src\Settings.pm:348: Plugins::callHook( usage => $data ); src\Settings.pm:502: Plugins::callHook('pre_load_'.$internalFilename, $pre_load); src\Settings.pm:550: Plugins::callHook('load_'.$internalFilename, $load); src\Settings.pm:555: Plugins::callHook('pos_load_'.$internalFilename, $pos_load); src\Settings.pm:557: Plugins::callHook('load_'.$internalFilename, $load); src\Settings.pm:561: Plugins::callHook('pos_load_'.$internalFilename, $pos_load); src\Settings.pm:603: Plugins::callHook('preloadfiles', {files => $files}); src\Settings.pm:607: Plugins::callHook('loadfiles', { src\Settings.pm:615: Plugins::callHook('postloadfiles', {files => $files}); src\Task\MapRoute.pm:194: Plugins::callHook('npc_teleport_missing' => \%plugin_args); src\Task\MapRoute.pm:407: Plugins::callHook('Task::MapRoute::iterate::missing_portal', \%plugin_args); src\Task\MapRoute.pm:484: Plugins::callHook('Task::MapRoute::iterate::route_portal_near', \%plugin_args); src\Task\Route.pm:313: Plugins::callHook('route', {status => 'success'}); src\Task\Route.pm:414: Plugins::callHook('route', {status => 'success'}); src\Task\Route.pm:426: Plugins::callHook('route', {status => 'success'}); src\Task\Route.pm:469: Plugins::callHook('route', {status => 'stuck'}); src\Task\Route.pm:599: Plugins::callHook('getRoute' => \%plugin_args); src\test\PluginsHookTest.pm:29: Plugins::callHook('hook2'); src\test\PluginsHookTest.pm:31: Plugins::callHook('hook1'); src\test\PluginsHookTest.pm:39: Plugins::callHook('hook1'); src\test\PluginsHookTest.pm:41: Plugins::callHook('hook2'); src\test\PluginsHookTest.pm:43: Plugins::callHook('hook3'); src\test\PluginsHookTest.pm:51: Plugins::callHook('hook1'); src\test\PluginsHookTest.pm:53: Plugins::callHook('hook2'); src\test\PluginsHookTest.pm:61: Plugins::callHook('hook2'); src\test\PluginsHookTest.pm:63: Plugins::callHook('hook1'); src\test\PluginsHookTest.pm:71: Plugins::callHook('hook2'); src\test\PluginsHookTest.pm:73: Plugins::callHook('hook1'); src\test\PluginsHookTest.pm:93: Plugins::callHook('hook1'); src\test\PluginsHookTest.pm:95: Plugins::callHook('hook2'); src\test\PluginsHookTest.pm:102: Plugins::callHook('hook1'); src\test\PluginsHookTest.pm:124: Plugins::callHook('add_during_call'); src\test\PluginsHookTest.pm:129: Plugins::callHook('add_during_call'); src\test\PluginsHookTest.pm:134: Plugins::callHook('add_during_call'); src\test\PluginsHookTest.pm:139: Plugins::callHook('add_during_call'); src\test\PluginsHookTest.pm:156: Plugins::callHook('del_during_call'); src\test\PluginsHookTest.pm:161: Plugins::callHook('del_during_call'); src\test\PluginsHookTest.pm:166: Plugins::callHook('del_during_call'); src\test\PluginsHookTest.pm:171: Plugins::callHook('del_during_call'); src\test\PluginsHookTest.pm:176: Plugins::callHook('del_during_call'); src\Utils\PathFinding.pm:103: Plugins::callHook('PathFindingReset', \%hookArgs);