Difference between revisions of "hooks"

From OpenKore Wiki
Jump to navigation Jump to search
m (moved Hooks to Hook)
(One intermediate revision by the same user not shown)
Line 4: Line 4:
  
 
==== start ====
 
==== start ====
Called once after loading all plugins, but before loading or configuring load of any [[control]] or [[table]] 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.
+
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 [[table]] 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.
+
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 [[table]] files are loaded. You probably should use '''initialized''' hook instead.
+
Called once after all [[:Category:Control|control]] and [[:Category:Tables|tables]] files are loaded. You probably should use '''initialized''' hook instead.
  
 
==== initialized ====
 
==== initialized ====
Line 36: Line 36:
 
  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

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 {