hooks: Difference between revisions
No edit summary |
|||
Line 4: | Line 4: | ||
==== start ==== | ==== start ==== | ||
Called once after loading all plugins, but before loading or configuring load of any [[control]] or [[ | 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 [[control]] or [[ | 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 [[control]] and [[ | Called once after all [[:Category:Control|control]] and [[:Category:Tables|tables]] files are loaded. You probably should use '''initialized''' hook instead. | ||
==== initialized ==== | ==== initialized ==== |
Revision as of 21:49, 8 February 2013
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.
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 {