Difference between revisions of "hooks"
m (http://forums.openkore.com/viewtopic.php?t=8648) |
|||
(3 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | == Recommended hooks == | ||
+ | |||
+ | === Initialization === | ||
+ | |||
+ | ==== start ==== | ||
+ | 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 ==== | ||
+ | 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 ==== | ||
+ | Called once after all [[:Category:Control|control]] and [[:Category:Tables|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. | ||
+ | |||
== Discoveting all existing hooks == | == Discoveting all existing hooks == | ||
openkore/trunk$ find src -name .svn -prune -o -exec grep -Hn "^[^#]*callHook" {} \; | openkore/trunk$ find src -name .svn -prune -o -exec grep -Hn "^[^#]*callHook" {} \; | ||
− | 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. | + | 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]]. |
<pre> | <pre> |
Revision as of 23:25, 17 February 2013
Contents
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.
Discoveting all existing hooks
openkore/trunk$ find src -name .svn -prune -o -exec grep -Hn "^[^#]*callHook" {} \;
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.
src/ChatQueue.pm:61: Plugins::callHook('ChatQueue::add', \%item); src/ChatQueue.pm:617: Plugins::callHook('ChatQueue::processChatResponse', $cmd); src/Actor/You.pm:204: Plugins::callHook('attack_start', {ID => $targetID}); src/Settings.pm:483: Plugins::callHook('preloadfiles', {files => \@{$files->getItems}}); src/Settings.pm:487: Plugins::callHook('loadfiles', {files => \@{$files->getItems}, current => $i}); src/Settings.pm:494: Plugins::callHook('postloadfiles', {files => \@{$files->getItems}}); src/Settings.pm:506: Plugins::callHook('preloadfiles', {files => \@{$files->getItems}}); src/Settings.pm:510: Plugins::callHook('loadfiles', {files => \@{$files->getItems}, current => $i}); src/Settings.pm:515: Plugins::callHook('postloadfiles', {files => \@{$files->getItems}}); src/AI/Slave.pm:332: Plugins::callHook("homonulus_target_died"); src/AI/Attack.pm:167: Plugins::callHook("target_died"); src/AI/Attack.pm:208: Plugins::callHook('attack_end', {ID => $ID}) src/AI/CoreLogic.pm:63: Plugins::callHook('AI_pre/manual'); src/AI/CoreLogic.pm:112: Plugins::callHook('AI_pre'); src/AI/CoreLogic.pm:208: Plugins::callHook('AI_post'); src/AI/CoreLogic.pm:1289: Plugins::callHook("AI_storage_done", \%hookArgs); src/AI/CoreLogic.pm:1511: Plugins::callHook("AI_sell_done", \%hookArgs); src/AI/CoreLogic.pm:1763: Plugins::callHook("AI/lockMap", \%args); src/AI/CoreLogic.pm:2203: Plugins::callHook("ai_follow", $args); src/test/PluginsHookTest.pm:27: Plugins::callHook('hook2'); src/test/PluginsHookTest.pm:29: Plugins::callHook('hook1'); src/test/PluginsHookTest.pm:37: Plugins::callHook('hook1'); src/test/PluginsHookTest.pm:39: Plugins::callHook('hook2'); src/test/PluginsHookTest.pm:41: Plugins::callHook('hook3'); src/test/PluginsHookTest.pm:49: Plugins::callHook('hook1'); src/test/PluginsHookTest.pm:51: Plugins::callHook('hook2'); src/test/PluginsHookTest.pm:59: Plugins::callHook('hook2'); src/test/PluginsHookTest.pm:61: Plugins::callHook('hook1'); src/test/PluginsHookTest.pm:69: Plugins::callHook('hook2'); src/test/PluginsHookTest.pm:71: Plugins::callHook('hook1'); src/test/PluginsHookTest.pm:91: Plugins::callHook('hook1'); src/test/PluginsHookTest.pm:93: Plugins::callHook('hook2'); src/test/PluginsHookTest.pm:100: Plugins::callHook('hook1'); src/functions.pl:69: Plugins::callHook('mainLoop_pre'); src/functions.pl:71: Plugins::callHook('mainLoop_post'); src/functions.pl:77: Plugins::callHook('start'); src/functions.pl:268: Plugins::callHook('start2'); src/functions.pl:287: Plugins::callHook('start3'); src/functions.pl:517: Plugins::callHook('initialized'); src/functions.pl:658: Plugins::callHook('packet_mapChange'); src/functions.pl:870: Plugins::callHook('mainLoop::setTitle',\%args); src/Misc.pm:287: Plugins::callHook('configModify', { src/Misc.pm:328: Plugins::callHook('configModify', { src/Misc.pm:1060: Plugins::callHook('avoidGM_talk', \%args); src/Misc.pm:1164: Plugins::callHook('charSelectScreen', \%plugin_args); src/Misc.pm:2023: Plugins::callHook('objectAdded', { src/Misc.pm:2040: Plugins::callHook('objectRemoved', { src/Misc.pm:2384: Plugins::callHook('changed_status',{actor => $actor, changed => $changed}); src/Misc.pm:2394: Plugins::callHook('perfect_hidden_player',{actor => $actor, changed => $changed}); src/Misc.pm:2406: Plugins::callHook('perfect_hidden_npc',{actor => $actor, changed => $changed}); src/Misc.pm:2859: Plugins::callHook('teleport_sent', \%args); src/Misc.pm:2865: Plugins::callHook('teleport_sent', \%args); src/Misc.pm:2893: Plugins::callHook('teleport_sent', \%args); src/Misc.pm:2902: Plugins::callHook('teleport_sent', \%args); src/Misc.pm:2912: Plugins::callHook('teleport_sent', \%args); src/Misc.pm:2924: Plugins::callHook('teleport_sent', \%args); src/Misc.pm:2969: Plugins::callHook('teleport_sent', \%args); src/Misc.pm:3373: Plugins::callHook('avoidGM_near', \%args); src/Misc.pm:3921: Plugins::callHook("checkSelfCondition", \%hookArgs); src/Misc.pm:4067: Plugins::callHook('checkPlayerCondition', \%args); src/Misc.pm:4122: Plugins::callHook('checkMonsterCondition', \%args); 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:255: Plugins::callHook('Network::stateChanged'); src/Network/DirectConnection.pm:269: Plugins::callHook('Network::clientAlive', \%args); src/Network/DirectConnection.pm:281: Plugins::callHook('Network::clientSend', \%args); src/Network/DirectConnection.pm:296: Plugins::callHook('Network::clientRecv', \%args); src/Network/DirectConnection.pm:350: Plugins::callHook("Network::serverConnect/master"); src/Network/DirectConnection.pm:483: Plugins::callHook("Network::serverConnect/special"); src/Network/DirectConnection.pm:522: Plugins::callHook("Network::serverConnect/char"); src/Network/DirectConnection.pm:558: Plugins::callHook("Network::serverConnect/charselect"); src/Network/DirectConnection.pm:595: Plugins::callHook("Network::serverConnect/mapserver"); src/Network/DirectConnection.pm:613: Plugins::callHook('disconnected'); src/Network/DirectConnection.pm:628: Plugins::callHook('disconnected'); src/Network/Receive.pm:380: Plugins::callHook('packet_pre/actor_display', $args); src/Network/Receive.pm:382: Plugins::callHook('packet/actor_display', $args); src/Network/Receive.pm:732: Plugins::callHook('player', {player => $actor}); #backwards compatibility src/Network/Receive.pm:734: Plugins::callHook('player_exist', {player => $actor}); src/Network/Receive.pm:768: Plugins::callHook('player', {player => $actor}); #backwards compatibailty src/Network/Receive.pm:770: Plugins::callHook('player_connected', {player => $actor}); src/Network/Receive.pm:839: Plugins::callHook('self_died'); src/Network/Receive.pm:878: Plugins::callHook('monster_disappeared', {monster => $monster}); src/Network/Receive.pm:904: Plugins::callHook('player_disappeared', {player => $player}); src/Network/Receive.pm:961: Plugins::callHook('slave_disappeared', {slave => $slave}); src/Network/Receive.pm:1045: Plugins::callHook('packet_attack', {sourceID => $args->{sourceID}, targetID => $args->{targetID}, msg => \$msg, dmg => $totalDamage, type => $args->{type}}); src/Network/Receive.pm:1104: Plugins::callHook('charNameUpdate', {player => $player}); src/Network/XKore.pm:117: Plugins::callHook("Network::serverSend/pre", { msg => \$msg }); src/Network/XKore.pm:137: Plugins::callHook('Network::stateChanged'); src/Network/Send.pm:245: Plugins::callHook($hookName, \%args); src/Network/Send.pm:445: Plugins::callHook('packet/sendMapLoaded'); src/Network/Send.pm:485: Plugins::callHook('packet_pre/sendAttack', \%args) if $flag == ACTION_ATTACK || $flag == ACTION_ATTACK_REPEAT; src/Network/Send.pm:486: Plugins::callHook('packet_pre/sendSit', \%args) if $flag == ACTION_SIT || $flag == ACTION_STAND; src/Network/ClientReceive.pm:75: Plugins::callHook('map_loaded'); src/Network/PacketParser.pm:253: Plugins::callHook("packet_pre/$handler->[0]", \%args); src/Network/PacketParser.pm:255: Plugins::callHook("$self->{hook_prefix}/packet_pre/$handler->[0]", \%args); src/Network/PacketParser.pm:270: Plugins::callHook("packet/$handler->[0]", \%args); src/Network/PacketParser.pm:272: Plugins::callHook("$self->{hook_prefix}/packet/$handler->[0]", \%args); src/Network/PacketParser.pm:349: Plugins::callHook("$self->{hook_prefix}/willMangle", \%args); src/Network/PacketParser.pm:371: Plugins::callHook("$self->{hook_prefix}/mangle", \%hook_args); src/Network/PacketParser.pm:476: Plugins::callHook($hook, {switch => $switch, msg => $msg, msg_size => length($msg), realMsg => \$msg}); src/Network/Receive/ServerType0.pm:910: Plugins::callHook('in_game'); src/Network/Receive/ServerType0.pm:1004: Plugins::callHook('packet_areaSpell', { src/Network/Receive/ServerType0.pm:1237: Plugins::callHook('packet_cart', {index => $local_item->{index}}); src/Network/Receive/ServerType0.pm:1270: Plugins::callHook('packet_cart', {index => $local_item->{index}}); src/Network/Receive/ServerType0.pm:1536: Plugins::callHook('packet_chatinfo', { src/Network/Receive/ServerType0.pm:1682: Plugins::callHook('packet_castCancelled', { src/Network/Receive/ServerType0.pm:1903: Plugins::callHook('packet_emotion', { src/Network/Receive/ServerType0.pm:1936: Plugins::callHook('disconnected') if ($net->getState() == Network::IN_GAME); src/Network/Receive/ServerType0.pm:2392: Plugins::callHook('packet_guildMsg', { src/Network/Receive/ServerType0.pm:2719: Plugins::callHook('item_gathered',{item => $item->{name}}); src/Network/Receive/ServerType0.pm:2755: Plugins::callHook('packet_item_removed', {index => $item->{invIndex}}); src/Network/Receive/ServerType0.pm:2806: Plugins::callHook('packet_useitem', \%hook_args); src/Network/Receive/ServerType0.pm:2872: Plugins::callHook('packet_inventory', {index => $local_item->{invIndex}}); src/Network/Receive/ServerType0.pm:2912: Plugins::callHook('packet_inventory', {index => $local_item->{invIndex}, item => $local_item}); src/Network/Receive/ServerType0.pm:3029: Plugins::callHook('item_skill', { src/Network/Receive/ServerType0.pm:3156: Plugins::callHook('packet_localBroadcast', { src/Network/Receive/ServerType0.pm:3207: Plugins::callHook('dial'); src/Network/Receive/ServerType0.pm:3283: Plugins::callHook('Network::Receive::map_changed', { src/Network/Receive/ServerType0.pm:3384: Plugins::callHook('Network::Receive::map_changed', { src/Network/Receive/ServerType0.pm:3631: Plugins::callHook('npc_talk', { src/Network/Receive/ServerType0.pm:3664: Plugins::callHook('npc_talk_done', {ID => $ID}); src/Network/Receive/ServerType0.pm:3741: Plugins::callHook('npc_talk_responses', { src/Network/Receive/ServerType0.pm:3790: Plugins::callHook('packet_partyMsg', { src/Network/Receive/ServerType0.pm:3973: Plugins::callHook('packet_partyJoin', { partyName => $name }); src/Network/Receive/ServerType0.pm:4272: Plugins::callHook('packet_pubMsg', { src/Network/Receive/ServerType0.pm:4293: Plugins::callHook('parseMsg/addPrivMsgUser', { src/Network/Receive/ServerType0.pm:4305: Plugins::callHook('packet_privMsg', { src/Network/Receive/ServerType0.pm:4325: Plugins::callHook('packet_sentPM', { src/Network/Receive/ServerType0.pm:4348: Plugins::callHook('parseMsg/recvChars', $args->{options}); src/Network/Receive/ServerType0.pm:4563: Plugins::callHook('packet_selfChat', { src/Network/Receive/ServerType0.pm:4655: Plugins::callHook('pvp_mode', { src/Network/Receive/ServerType0.pm:4672: Plugins::callHook('pvp_mode', { src/Network/Receive/ServerType0.pm:4811: Plugins::callHook('is_casting', { src/Network/Receive/ServerType0.pm:4884: Plugins::callHook('packet_charSkills', { src/Network/Receive/ServerType0.pm:4963: Plugins::callHook('packet_skilluse', { src/Network/Receive/ServerType0.pm:5014: Plugins::callHook('packet_skillfail', { src/Network/Receive/ServerType0.pm:5043: Plugins::callHook('packet_skilluse', { src/Network/Receive/ServerType0.pm:5122: Plugins::callHook('packet_skilluse', { src/Network/Receive/ServerType0.pm:5169: Plugins::callHook($hook, { src/Network/Receive/ServerType0.pm:5197: Plugins::callHook('packet_charSkills', { src/Network/Receive/ServerType0.pm:5240: Plugins::callHook('packet_charStats', { src/Network/Receive/ServerType0.pm:5353: Plugins::callHook('exp_gained'); src/Network/Receive/ServerType0.pm:5581: Plugins::callHook('packet_storage_close'); src/Network/Receive/ServerType0.pm:5705: Plugins::callHook('packet_storage_open'); src/Network/Receive/ServerType0.pm:5943: Plugins::callHook('packet_sysMsg', { src/Network/Receive/ServerType0.pm:6022: Plugins::callHook('base_level', {name => $actor}); src/Network/Receive/ServerType0.pm:6025: Plugins::callHook('job_level', {name => $actor}); src/Network/Receive/ServerType0.pm:6065: Plugins::callHook('packet_vender', {ID => $ID}); src/Network/Receive/ServerType0.pm:6114: Plugins::callHook('packet_vender_store', { src/Network/Receive/ServerType0.pm:6133: Plugins::callHook('packet_vender_store2', { src/Network/Receive/ServerType0.pm:6336: Plugins::callHook('packet_item_removed', {index => $item->{invIndex}}); src/Network/Receive/ServerType0.pm:7168: Plugins::callHook ('captcha_image', $hookArgs); src/Network/Receive/ServerType0.pm:7177: Plugins::callHook ('captcha_file', $hookArgs); src/Network/Receive/ServerType0.pm:7191: Plugins::callHook ('captcha_answer', {flag => $args->{flag}}); src/Network/Receive/ServerType0.pm:7292: Plugins::callHook('packet_buying', {ID => unpack 'V', $ID}); src/Network/Receive/ServerType0.pm:7337: Plugins::callHook('packet_buying_store', { src/Network/Receive/ServerType0.pm:7353: Plugins::callHook('packet_buying_store2', { src/Network/Receive/ServerType0.pm:7365: Plugins::callHook('buying_store_item_delete', {index => $item->{invIndex}}); src/Network/Receive/ServerType0.pm:7380: Plugins::callHook('packet_buyer', {ID => $ID}); src/Network/Receive/ServerType20.pm:47: Plugins::callHook('in_game'); src/Network/Receive/kRO/RagexeRE_2009_09_22a.pm:58: Plugins::callHook ('captcha_image', $hookArgs); src/Network/Receive/kRO/RagexeRE_2009_09_22a.pm:67: Plugins::callHook ('captcha_file', $hookArgs); src/Network/Receive/kRO/RagexeRE_2009_09_22a.pm:81: Plugins::callHook ('captcha_answer', {flag => $args->{flag}}); src/Network/Receive/kRO/Sakexe_0.pm:587: Plugins::callHook('in_game'); src/Network/Receive/kRO/Sakexe_0.pm:696: Plugins::callHook('packet_areaSpell', { src/Network/Receive/kRO/Sakexe_0.pm:951: Plugins::callHook('packet_cart', {index => $local_item->{index}}); src/Network/Receive/kRO/Sakexe_0.pm:974: Plugins::callHook('packet_cart', {index => $index}); src/Network/Receive/kRO/Sakexe_0.pm:1060: Plugins::callHook('packet_cart', {index => $local_item->{index}}); src/Network/Receive/kRO/Sakexe_0.pm:1088: Plugins::callHook('packet_cart', {index => $index}); src/Network/Receive/kRO/Sakexe_0.pm:1467: Plugins::callHook('packet_castCancelled', { src/Network/Receive/kRO/Sakexe_0.pm:1684: Plugins::callHook('packet_emotion', { src/Network/Receive/kRO/Sakexe_0.pm:1716: Plugins::callHook('disconnected') if ($net->getState() == Network::IN_GAME); src/Network/Receive/kRO/Sakexe_0.pm:1825: Plugins::callHook('exp_gained'); src/Network/Receive/kRO/Sakexe_0.pm:2223: Plugins::callHook('packet_guildMsg', { src/Network/Receive/kRO/Sakexe_0.pm:2522: Plugins::callHook('item_gathered',{item => $item->{name}}); src/Network/Receive/kRO/Sakexe_0.pm:2557: Plugins::callHook('packet_item_removed', {index => $item->{invIndex}}); src/Network/Receive/kRO/Sakexe_0.pm:2608: Plugins::callHook('packet_useitem', \%hook_args); src/Network/Receive/kRO/Sakexe_0.pm:2674: Plugins::callHook('packet_inventory', {index => $local_item->{invIndex}}); src/Network/Receive/kRO/Sakexe_0.pm:2713: Plugins::callHook('packet_inventory', {index => $item->{invIndex}}); src/Network/Receive/kRO/Sakexe_0.pm:2756: Plugins::callHook('packet_inventory', {index => $local_item->{invIndex}, item => $local_item}); src/Network/Receive/kRO/Sakexe_0.pm:2791: Plugins::callHook('packet_inventory', {index => $item->{invIndex}, item => $item}); src/Network/Receive/kRO/Sakexe_0.pm:2909: Plugins::callHook('item_skill', { src/Network/Receive/kRO/Sakexe_0.pm:3153: Plugins::callHook('Network::Receive::map_changed', { src/Network/Receive/kRO/Sakexe_0.pm:3254: Plugins::callHook('Network::Receive::map_changed', { src/Network/Receive/kRO/Sakexe_0.pm:3297: Plugins::callHook('in_game'); src/Network/Receive/kRO/Sakexe_0.pm:3591: Plugins::callHook('npc_talk', { src/Network/Receive/kRO/Sakexe_0.pm:3624: Plugins::callHook('npc_talk_done', {ID => $ID}); src/Network/Receive/kRO/Sakexe_0.pm:3701: Plugins::callHook('npc_talk_responses', { src/Network/Receive/kRO/Sakexe_0.pm:3749: Plugins::callHook('packet_partyMsg', { src/Network/Receive/kRO/Sakexe_0.pm:4093: Plugins::callHook('packet_pubMsg', { src/Network/Receive/kRO/Sakexe_0.pm:4114: Plugins::callHook('parseMsg/addPrivMsgUser', { src/Network/Receive/kRO/Sakexe_0.pm:4126: Plugins::callHook('packet_privMsg', { src/Network/Receive/kRO/Sakexe_0.pm:4146: Plugins::callHook('packet_sentPM', { src/Network/Receive/kRO/Sakexe_0.pm:4169: Plugins::callHook('parseMsg/recvChars', $args->{options}); src/Network/Receive/kRO/Sakexe_0.pm:4385: Plugins::callHook('packet_selfChat', { src/Network/Receive/kRO/Sakexe_0.pm:4474: Plugins::callHook('pvp_mode', { src/Network/Receive/kRO/Sakexe_0.pm:4490: Plugins::callHook('pvp_mode', { src/Network/Receive/kRO/Sakexe_0.pm:4625: Plugins::callHook('is_casting', { src/Network/Receive/kRO/Sakexe_0.pm:4697: Plugins::callHook('packet_charSkills', { src/Network/Receive/kRO/Sakexe_0.pm:4776: Plugins::callHook('packet_skilluse', { src/Network/Receive/kRO/Sakexe_0.pm:4827: Plugins::callHook('packet_skillfail', { src/Network/Receive/kRO/Sakexe_0.pm:4856: Plugins::callHook('packet_skilluse', { src/Network/Receive/kRO/Sakexe_0.pm:4934: Plugins::callHook('packet_skilluse', { src/Network/Receive/kRO/Sakexe_0.pm:4988: Plugins::callHook($hook, { src/Network/Receive/kRO/Sakexe_0.pm:5016: Plugins::callHook('packet_charSkills', { src/Network/Receive/kRO/Sakexe_0.pm:5071: Plugins::callHook('packet_charStats', { src/Network/Receive/kRO/Sakexe_0.pm:5300: Plugins::callHook('packet_storage_close'); src/Network/Receive/kRO/Sakexe_0.pm:5474: Plugins::callHook('packet_storage_open'); src/Network/Receive/kRO/Sakexe_0.pm:5727: Plugins::callHook('packet_sysMsg', { src/Network/Receive/kRO/Sakexe_0.pm:5804: Plugins::callHook('base_level', {name => $name}); src/Network/Receive/kRO/Sakexe_0.pm:5807: Plugins::callHook('job_level', {name => $name}); src/Network/Receive/kRO/Sakexe_0.pm:5840: Plugins::callHook('packet_vender', {ID => $ID}); src/Network/Receive/kRO/Sakexe_0.pm:5889: Plugins::callHook('packet_vender_store', { src/Network/Receive/kRO/Sakexe_0.pm:5907: Plugins::callHook('packet_vender_store2', { src/Network/Receive/ServerType15.pm:47: Plugins::callHook('in_game'); src/Network/Receive/ServerType19.pm:47: Plugins::callHook('in_game'); src/Network/Send/ServerType8.pm:50: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7); src/Network/Send/ServerType8.pm:51: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3); src/Network/Send/ServerType8.pm:70: Plugins::callHook('packet_pre/sendAttack', \%args); src/Network/Send/ServerType8.pm:88: Plugins::callHook('packet_pre/sendStand', \%args); src/Network/Send/ServerType8.pm:105: Plugins::callHook('packet_pre/sendSit', \%args); src/Network/Send/ServerType8.pm:125: Plugins::callHook('packet_pre/sendSkillUse', \%args); 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/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/kRO/Sakexe_2004_08_09a.pm:66: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_2008_09_10a.pm:65: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/RagexeRE_2008_09_10a.pm:65: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_2004_07_26a.pm:90: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_2004_11_29a.pm:81: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_2004_09_06a.pm:139: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_2007_02_12a.pm:66: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_2004_10_25a.pm:107: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_2006_03_27a.pm:65: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_2004_07_13a.pm:73: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/RagexeRE_2008_08_27a.pm:72: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/RagexeRE_2011_08_16a.pm:67: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_2004_09_20a.pm:110: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/RagexeRE_2012_04_10a.pm:91: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_2005_07_19b.pm:64: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_2005_06_28a.pm:64: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_0.pm:639: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/RagexeRE_2011_11_02a.pm:64: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_2005_05_09a.pm:64: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_2005_07_18a.pm:65: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/RagexeRE_2012_03_07f.pm:98: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_2007_01_08a.pm:65: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_2005_01_10b.pm:81: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/kRO/Sakexe_2004_10_05a.pm:108: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/ServerType4.pm:44: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7); src/Network/Send/ServerType4.pm:45: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3); src/Network/Send/ServerType8_5.pm:42: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/Network/Send/ServerType8_5.pm:176: 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/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/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/ServerType5.pm:43: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7); src/Network/Send/ServerType5.pm:44: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3); 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/ServerType3.pm:44: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7); src/Network/Send/ServerType3.pm:45: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3); src/Network/Send/ServerType8_1.pm:39: Plugins::callHook('packet_pre/sendAttack', \%args); src/Network/Send/ServerType8_1.pm:126: Plugins::callHook('packet_pre/sendSit', \%args); src/Network/Send/ServerType8_1.pm:145: Plugins::callHook('packet_pre/sendStand', \%args); src/Network/Send/ServerType8_1.pm:167: Plugins::callHook('packet_pre/sendSkillUse', \%args); src/FileParsers.pm:677: Plugins::callHook("FileParsers::ROLUT", \%ret); src/FileParsers.pm:704: Plugins::callHook("FileParsers::RODescLUT", \%ret); src/FileParsers.pm:754: Plugins::callHook ('FileParsers::ROQuestsLUT', \%ret); src/Poseidon/QueryServer.pm:75: Plugins::callHook('Poseidon/server_authenticate', { src/Poseidon/Client.pm:79: Plugins::callHook('Poseidon/client_authenticate', { src/doc/srcdoc/Plugins.html:158: <div class="desc">Add a hook for <code>$hookname</code>. Whenever Kore calls Plugins::callHook('foo'), src/doc/srcdoc/Plugins.html:179: Plugins<span class="hl sym">::</span><span class="hl kwd">callHook</span><span class="hl sym">(</span><span class="hl str">'AI_pre'</span><span class="hl sym">);</span> <span class="hl slc"># <-- ai_called() is now also called.</span> src/doc/srcdoc/Plugins.html:228:<div class="function"><a name="Plugins::callHook"></a> src/doc/srcdoc/Plugins.html:229:<h3>Plugins::callHook</h3> src/doc/srcdoc/Plugins.html:232: <span class="return-type"> void</span> <strong>Plugins::callHook</strong>(<span class="type">String</span> hookName, [argument]) src/Commands.pm:290: Plugins::callHook("Commands::run/pre", \%params); src/Commands.pm:292: Plugins::callHook("Commands::run/post", \%params); src/Commands.pm:296: Plugins::callHook('Command_post', \%params); src/Commands.pm:1233: Plugins::callHook('Commands::cmdConf', { src/Plugins.pm:427:sub callHook {