hooks

From OpenKore Wiki
Jump to navigation Jump to search

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 {