Difference between revisions of "hooks"

From OpenKore Wiki
Jump to navigation Jump to search
m (4epT moved page hook to hooks without leaving a redirect)
(5 intermediate revisions by 4 users not shown)
Line 4: Line 4:
  
 
==== start ====
 
==== start ====
Called once after loading all plugins, but before loading or configuring load of any [[:Category: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.
+
Called once after loading all plugins, but before loading or configuring load of any [[:Category:control|control]] or [[:Category:tables|tables]] files. <code>%config</code> and all other stuff would be unavailable at this moment. Reconfiguration for the following initialization steps (like [http://forums.openkore.com/viewtopic.php?t=47 profiles plugin] does) should be performed there, as well as anything else that needs to be performed as soon as possible.
  
 
==== start2 ====
 
==== start2 ====
Called once before loading any [[:Category: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.
+
Called once before loading any [[:Category:control|control]] or [[:Category:tables|tables]] files, but when that load is already being configured. <code>%config</code> etc would still be unavailable at this moment. Monkey-patching of whatever will be loaded next can be performed there.
  
 
==== start3 ====
 
==== start3 ====
Called once after all [[:Category:Control|control]] and [[:Category:Tables|tables]] 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 24: Line 24:
  
 
==== AI_pre/manual ====
 
==== AI_pre/manual ====
Called continuously when in game unless [[AI]] is turned off.
+
Called continuously when in game unless [[ai|AI]] is turned off.
  
 
==== AI_pre ====
 
==== AI_pre ====
Called continuously when in game if [[AI]] is set to automatic.
+
Called continuously when in game if [[ai|AI]] is set to automatic.
  
 
==== AI_post ====
 
==== AI_post ====
Called continuously when in game if [[AI]] is set to automatic, after processing all other AI routines.
+
Called continuously when in game if [[ai|AI]] is set to automatic, after processing all other AI routines.
  
 
== Discovering all existing hooks Unix Distro ==
 
== Discovering all existing hooks Unix Distro ==
Line 37: Line 37:
  
 
== Discovering all existing hooks Windows Distro ==
 
== Discovering all existing hooks Windows Distro ==
 
+
open cmd
 +
cd openkore\src
 
  findstr /S /n "callHook" *.pl;
 
  findstr /S /n "callHook" *.pl;
 
  findstr /S /n "callHook" *.pm;
 
  findstr /S /n "callHook" *.pm;
  
 
Note that some hooks, like <code>packet/<name></code>, <code>packet_pre/<name></code> and <code>mangle/<name></code>, actually are many hooks, for example, one hook for each network packet type. [[Mangle|See about it here]].
 
Note that some hooks, like <code>packet/<name></code>, <code>packet_pre/<name></code> and <code>mangle/<name></code>, actually are many hooks, for example, one hook for each network packet type. [[Mangle|See about it here]].
 +
 +
== Hook List ==
 +
This list might be outdated.
  
 
<pre>
 
<pre>

Revision as of 00:22, 27 April 2021

Recommended hooks

Initialization

start

Called once after loading all plugins, but before loading or configuring load of any control or tables files. %config and all other stuff would be unavailable at this moment. Reconfiguration for the following initialization steps (like profiles plugin does) should be performed there, as well as anything else that needs to be performed as soon as possible.

start2

Called once before loading any control or tables files, but when that load is already being configured. %config etc would still be unavailable at this moment. Monkey-patching of whatever will be loaded next can be performed there.

start3

Called once after all control and tables files are loaded. You probably should use initialized hook instead.

initialized

Called once when all initialization is done and it's ready to connect to the server or start XKore. Additional initialization should be performed there.

Continuous Work

mainLoop_pre

Called continuously.

mainLoop_post

Called continuously, after processing all other routines.

AI_pre/manual

Called continuously when in game unless AI is turned off.

AI_pre

Called continuously when in game if AI is set to automatic.

AI_post

Called continuously when in game if AI is set to automatic, after processing all other AI routines.

Discovering all existing hooks Unix Distro

openkore/trunk$ find src -name .svn -prune -o -exec grep -Hn "^[^#]*callHook" {} \;

Discovering all existing hooks Windows Distro

open cmd
cd openkore\src
findstr /S /n "callHook" *.pl;
findstr /S /n "callHook" *.pm;

Note that some hooks, like packet/<name>, packet_pre/<name> and mangle/<name>, actually are many hooks, for example, one hook for each network packet type. See about it here.

Hook List

This list might be outdated.

functions.pl:74:                Plugins::callHook('mainLoop_pre');
functions.pl:76:                Plugins::callHook('mainLoop_post');
functions.pl:83:                Plugins::callHook('start');
functions.pl:136:       Plugins::callHook( 'parse_command_line' );
functions.pl:281:       Plugins::callHook('start2');
functions.pl:305:       Plugins::callHook('start3');
functions.pl:551:       Plugins::callHook('initialized');
functions.pl:702:       Plugins::callHook('packet_mapChange');
functions.pl:911:       Plugins::callHook('mainLoop::setTitle',\%args);
Actor\Item.pm:483:      Plugins::callHook( 'get_item_weight', $self ) if !defined $self->{weight};
Actor\You.pm:262:       Plugins::callHook('attack_start', {ID => $targetID});
Actor.pm:596:   Plugins::callHook('Actor::setStatus::change', {
AI\Attack.pm:167:               Plugins::callHook("target_died", {monster => $monsters_old{$ID}});
AI\Attack.pm:208:       Plugins::callHook('attack_end', {ID => $ID})
AI\Attack.pm:628:       Plugins::callHook('AI::Attack::main', {target => $target})
AI\CoreLogic.pm:57:     Plugins::callHook('AI_start', {state => AI::state});
AI\CoreLogic.pm:68:     Plugins::callHook('AI_pre/manual');
AI\CoreLogic.pm:117:    Plugins::callHook('AI_pre');
AI\CoreLogic.pm:212:    Plugins::callHook('AI_post');
AI\CoreLogic.pm:538:            Plugins::callHook('portal_exist2', {
AI\CoreLogic.pm:563:            Plugins::callHook('portal_exist2', {
AI\CoreLogic.pm:1373:                   Plugins::callHook("AI_storage_open", \%pluginArgs); # we can hook here to perform actions BEFORE any storage function
AI\CoreLogic.pm:1456:                                   Plugins::callHook("AI_storage_done", \%hookArgs);
AI\CoreLogic.pm:1710:                   Plugins::callHook("AI_sell_auto");
AI\CoreLogic.pm:1739:                   Plugins::callHook('AI_sell_auto_done');
AI\CoreLogic.pm:1789:           Plugins::callHook('AI_buy_auto_done');
AI\CoreLogic.pm:1798:           Plugins::callHook('AI_buy_auto');
AI\CoreLogic.pm:2087:                   Plugins::callHook("AI/lockMap", \%args);
AI\CoreLogic.pm:2430:   Plugins::callHook("ai_follow", $args);
AI\CoreLogic.pm:2934:                                   Plugins::callHook("checkMonsterAutoAttack", \%hookArgs);
AI\Slave.pm:333:                        Plugins::callHook("homonulus_target_died");
AI.pm:96:               Plugins::callHook('AI_state_change', {old => $AI, new => $_[0]});
ChatQueue.pm:64:        Plugins::callHook('ChatQueue::add', \%item);
ChatQueue.pm:616:       Plugins::callHook('ChatQueue::processChatResponse', $cmd);
Commands.pm:311:                        Plugins::callHook("Commands::run/pre", \%params);
Commands.pm:313:                        Plugins::callHook("Commands::run/post", \%params);
Commands.pm:317:                        Plugins::callHook('Command_post', \%params);
Commands.pm:1430:               Plugins::callHook('Commands::cmdConf', {
FileParsers.pm:693:     Plugins::callHook("FileParsers::ROLUT", \%ret);
FileParsers.pm:720:     Plugins::callHook("FileParsers::RODescLUT", \%ret);
FileParsers.pm:770:     Plugins::callHook ('FileParsers::ROQuestsLUT', \%ret);
FileParsers.pm:1305:    Plugins::callHook('updatePortalLUT', $plugin_args);
FileParsers.pm:1319:    Plugins::callHook('updatePortalLUT2', $plugin_args);
Interface\Console\Curses.pm:683:        Plugins::callHook( 'curses/updateStatus' );
Interface\Console\Curses.pm:808:        Plugins::callHook( 'curses/updateObjects' );
InventoryList\Cart.pm:33:               Plugins::callHook('cart_ready');
InventoryList\Cart.pm:35:               Plugins::callHook('cart_info_updated');
InventoryList\Inventory.pm:34:          Plugins::callHook('inventory_ready');
InventoryList\Storage.pm:36:                    Plugins::callHook('storage_first_session_openning');
InventoryList\Storage.pm:38:            Plugins::callHook('packet_storage_open');
InventoryList\Storage.pm:45:    Plugins::callHook('packet_storage_close');
Misc.pm:297:    Plugins::callHook('configModify', {
Misc.pm:348:            Plugins::callHook('configModify', {
Misc.pm:388:    Plugins::callHook('setTimeout', {
Misc.pm:1136:           Plugins::callHook('avoidGM_talk', \%args);
Misc.pm:1259:   Plugins::callHook('charSelectScreen', \%plugin_args);
Misc.pm:1892:   Plugins::callHook('inventory_item_removed', {item => $item, index => $binID, amount => $amount, remaining => ($item->{amount} <= 0 ? 0 : $item->{amount})});
Misc.pm:1911:   Plugins::callHook('storage_item_removed', {item => $item, index => $binID, amount => $amount, remaining => ($item->{amount} <= 0 ? 0 : $item->{amount})});
Misc.pm:1930:   Plugins::callHook('cart_item_removed', {item => $item, index => $binID, amount => $amount, remaining => ($item->{amount} <= 0 ? 0 : $item->{amount})});
Misc.pm:2308:   Plugins::callHook('objectAdded', {
Misc.pm:2325:   Plugins::callHook('objectRemoved', {
Misc.pm:2692:   Plugins::callHook('changed_status',{actor => $actor, changed => $changed});
Misc.pm:2701:                   # Plugins::callHook('perfect_hidden_player',undef);
Misc.pm:2702:                   Plugins::callHook('perfect_hidden_player',{actor => $actor, changed => $changed});
Misc.pm:2714:                   Plugins::callHook('perfect_hidden_npc',{actor => $actor, changed => $changed});
Misc.pm:3167:           Plugins::callHook('teleport_sent', \%args);
Misc.pm:3173:           Plugins::callHook('teleport_sent', \%args);
Misc.pm:3205:                           Plugins::callHook('teleport_sent', \%args);
Misc.pm:3214:                           Plugins::callHook('teleport_sent', \%args);
Misc.pm:3224:                   Plugins::callHook('teleport_sent', \%args);
Misc.pm:3236:                   Plugins::callHook('teleport_sent', \%args);
Misc.pm:3287:                   Plugins::callHook('teleport_sent', \%args);
Misc.pm:3688:           Plugins::callHook('avoidGM_near', \%args);
Misc.pm:4299:   Plugins::callHook("checkSelfCondition", \%hookArgs);
Misc.pm:4451:   Plugins::callHook('checkPlayerCondition', \%args);
Misc.pm:4526:   Plugins::callHook('checkMonsterCondition', \%args);
Misc.pm:4613:   Plugins::callHook ('open_shop', {title => $shop{title}, items => \@items});
Misc.pm:4630:   Plugins::callHook("shop_closed");
Network\ClientReceive.pm:75:    Plugins::callHook('map_loaded');
Network\DirectConnection.pm:140:        Plugins::callHook('Network::connectTo', {
Network\DirectConnection.pm:173:                        Plugins::callHook("Network::serverSend/pre", { msg => \$msg });
Network\DirectConnection.pm:178:                                Plugins::callHook("Network::serverSend", { msg => $msg });
Network\DirectConnection.pm:196:                Plugins::callHook("Network::serverRecv", { msg => \$msg });
Network\DirectConnection.pm:245:                        Plugins::callHook("serverDisconnect/fail");
Network\DirectConnection.pm:248:                        Plugins::callHook("serverDisconnect/success");
Network\DirectConnection.pm:260:        Plugins::callHook('Network::stateChanged');
Network\DirectConnection.pm:274:        Plugins::callHook('Network::clientAlive', \%args);
Network\DirectConnection.pm:286:                Plugins::callHook('Network::clientSend', \%args);
Network\DirectConnection.pm:301:                Plugins::callHook('Network::clientRecv', \%args);
Network\DirectConnection.pm:355:                        Plugins::callHook("Network::serverConnect/master");
Network\DirectConnection.pm:490:                Plugins::callHook("Network::serverConnect/special");
Network\DirectConnection.pm:530:                                Plugins::callHook("Network::serverConnect/char");
Network\DirectConnection.pm:566:                                Plugins::callHook("Network::serverConnect/charselect");
Network\DirectConnection.pm:603:                                Plugins::callHook("Network::serverConnect/mapserver");
Network\DirectConnection.pm:621:                        Plugins::callHook('disconnected');
Network\DirectConnection.pm:636:                        Plugins::callHook('disconnected');
Network\PacketParser.pm:269:                    Plugins::callHook("packet_pre/$handler->[0]", \%args);
Network\PacketParser.pm:271:                    Plugins::callHook("$self->{hook_prefix}/packet_pre/$handler->[0]", \%args);
Network\PacketParser.pm:286:            Plugins::callHook("packet/$handler->[0]", \%args);
Network\PacketParser.pm:288:            Plugins::callHook("$self->{hook_prefix}/packet/$handler->[0]", \%args);
Network\PacketParser.pm:365:            Plugins::callHook("$self->{hook_prefix}/willMangle", \%args);
Network\PacketParser.pm:387:    Plugins::callHook("$self->{hook_prefix}/mangle", \%hook_args);
Network\PacketParser.pm:491:    Plugins::callHook($hook, {switch => $switch, msg => $msg, msg_size => length($msg), realMsg => \$msg});
Network\Receive\kRO\RagexeRE_2009_09_22a.pm:57: Plugins::callHook ('captcha_image', $hookArgs);
Network\Receive\kRO\RagexeRE_2009_09_22a.pm:66: Plugins::callHook ('captcha_file', $hookArgs);
Network\Receive\kRO\RagexeRE_2009_09_22a.pm:80: Plugins::callHook ('captcha_answer', {flag => $args->{flag}});
Network\Receive\kRO\RagexeRE_2010_03_09a.pm:69:         Plugins::callHook('packet_open_buying_store', {
Network\Receive\kRO\RagexeRE_2010_03_09a.pm:120:                Plugins::callHook('packet_buying_store', {
Network\Receive\kRO\RagexeRE_2010_03_09a.pm:138:        Plugins::callHook('packet_buying_store2', {
Network\Receive\kRO\RagexeRE_2010_04_20a.pm:53:         Plugins::callHook('packet_buying', {ID => unpack 'V', $ID});
Network\Receive\kRO\RagexeRE_2013_03_20.pm:125:                                 Plugins::callHook('equipped_item', {slot => $equipSlot_lut{$_}, item => $item});
Network\Receive\kRO\Sakexe_0.pm:810:            Plugins::callHook($args->{hook}, {index => $index, item => $local_item});
Network\Receive\kRO\Sakexe_0.pm:841:            Plugins::callHook('in_game');
Network\Receive\kRO\Sakexe_0.pm:884:    Plugins::callHook('packet_areaSpell', {
Network\Receive\kRO\Sakexe_0.pm:1166:   Plugins::callHook('chat_joined', {
Network\Receive\kRO\Sakexe_0.pm:1183:   Plugins::callHook('packet_castCancelled', {
Network\Receive\kRO\Sakexe_0.pm:1204:                                   Plugins::callHook('equipped_item', {slot => $equipSlot_lut{$_}, item => $item});
Network\Receive\kRO\Sakexe_0.pm:1380:   Plugins::callHook('packet_guildMsg', {
Network\Receive\kRO\Sakexe_0.pm:1505:           Plugins::callHook('item_gathered',{item => $item->{name}});
Network\Receive\kRO\Sakexe_0.pm:1571:           Plugins::callHook('packet_inventory', {index => $local_item->{binID}});
Network\Receive\kRO\Sakexe_0.pm:1610:           Plugins::callHook('packet_inventory', {index => $item->{binID}});
Network\Receive\kRO\Sakexe_0.pm:1634:   Plugins::callHook('item_skill', {
Network\Receive\kRO\Sakexe_0.pm:1734:   Plugins::callHook('Network::Receive::map_changed', {
Network\Receive\kRO\Sakexe_0.pm:1777:           Plugins::callHook('in_game');
Network\Receive\kRO\Sakexe_0.pm:1919:           Plugins::callHook('npc_autotalk', {
Network\Receive\kRO\Sakexe_0.pm:1935:   Plugins::callHook('npc_talk', {
Network\Receive\kRO\Sakexe_0.pm:2081:   Plugins::callHook('packet_pubMsg', {
Network\Receive\kRO\Sakexe_0.pm:2101:           Plugins::callHook('parseMsg/addPrivMsgUser', {
Network\Receive\kRO\Sakexe_0.pm:2113:   Plugins::callHook('packet_privMsg', {
Network\Receive\kRO\Sakexe_0.pm:2134:           Plugins::callHook('packet_sentPM', {
Network\Receive\kRO\Sakexe_0.pm:2167:   Plugins::callHook('parseMsg/recvChars', $args->{options});
Network\Receive\kRO\Sakexe_0.pm:2335:   Plugins::callHook('packet_selfChat', {
Network\Receive\kRO\Sakexe_0.pm:2424:           Plugins::callHook('pvp_mode', {
Network\Receive\kRO\Sakexe_0.pm:2440:           Plugins::callHook('pvp_mode', {
Network\Receive\kRO\Sakexe_0.pm:2543:   Plugins::callHook('is_casting', {
Network\Receive\kRO\Sakexe_0.pm:2615:   Plugins::callHook('packet_charSkills', {
Network\Receive\kRO\Sakexe_0.pm:2694:   Plugins::callHook('packet_skilluse', {
Network\Receive\kRO\Sakexe_0.pm:2746:   Plugins::callHook('packet_skillfail', {
Network\Receive\kRO\Sakexe_0.pm:2775:   Plugins::callHook('packet_skilluse', {
Network\Receive\kRO\Sakexe_0.pm:2853:   Plugins::callHook('packet_skilluse', {
Network\Receive\kRO\Sakexe_0.pm:2905:           Plugins::callHook($hook, {
Network\Receive\kRO\Sakexe_0.pm:2933:   Plugins::callHook('packet_charSkills', {
Network\Receive\kRO\Sakexe_0.pm:3147:                           Plugins::callHook('unequipped_item', {slot => $equipSlot_lut{$_}, item => $item});
Network\Receive\kRO\Sakexe_0.pm:3166:           Plugins::callHook('base_level', {name => $name});
Network\Receive\kRO\Sakexe_0.pm:3169:           Plugins::callHook('job_level', {name => $name});
Network\Receive\kRO\Sakexe_0.pm:3199:           Plugins::callHook('packet_vender', {ID => $ID});
Network\Receive\kRO\Sakexe_0.pm:3239:           Plugins::callHook('packet_vender_store', { item => $item });
Network\Receive\kRO\Sakexe_0.pm:3248:   Plugins::callHook('packet_vender_store2', {
Network\Receive\pRO.pm:90:      Plugins::callHook('parseMsg/recvChars', $args->{options});
Network\Receive\ServerType0.pm:907:             Plugins::callHook($args->{hook}, {index => $index, item => $local_item});
Network\Receive\ServerType0.pm:944:             Plugins::callHook('in_game');
Network\Receive\ServerType0.pm:996:     Plugins::callHook('packet_areaSpell', {
Network\Receive\ServerType0.pm:1290:    Plugins::callHook('chat_joined', {
Network\Receive\ServerType0.pm:1307:    Plugins::callHook('packet_castCancelled', {
Network\Receive\ServerType0.pm:1328:                                    Plugins::callHook('equipped_item', {slot => $equipSlot_lut{$_}, item => $item});
Network\Receive\ServerType0.pm:1514:    Plugins::callHook('packet_guildMsg', {
Network\Receive\ServerType0.pm:1661:            Plugins::callHook('item_gathered',{item => $item->{name}});
Network\Receive\ServerType0.pm:1737:    Plugins::callHook('item_skill', {
Network\Receive\ServerType0.pm:1848:    Plugins::callHook('Network::Receive::map_changed', {
Network\Receive\ServerType0.pm:1986:            Plugins::callHook('npc_autotalk', {
Network\Receive\ServerType0.pm:2007:    Plugins::callHook('npc_talk', {
Network\Receive\ServerType0.pm:2153:    Plugins::callHook('packet_pubMsg', {
Network\Receive\ServerType0.pm:2173:            Plugins::callHook('parseMsg/addPrivMsgUser', {
Network\Receive\ServerType0.pm:2185:    Plugins::callHook('packet_privMsg', {
Network\Receive\ServerType0.pm:2206:            Plugins::callHook('packet_sentPM', {
Network\Receive\ServerType0.pm:2253:    Plugins::callHook('parseMsg/recvChars', $args->{options});
Network\Receive\ServerType0.pm:2454:    Plugins::callHook('packet_selfChat', {
Network\Receive\ServerType0.pm:2547:            Plugins::callHook('pvp_mode', {
Network\Receive\ServerType0.pm:2564:            Plugins::callHook('pvp_mode', {
Network\Receive\ServerType0.pm:2669:    Plugins::callHook('is_casting', {
Network\Receive\ServerType0.pm:2742:    Plugins::callHook('packet_charSkills', {
Network\Receive\ServerType0.pm:2826:    Plugins::callHook('packet_skilluse', {
Network\Receive\ServerType0.pm:2881:    Plugins::callHook('packet_skillfail', {
Network\Receive\ServerType0.pm:2918:    Plugins::callHook('packet_skilluse', {
Network\Receive\ServerType0.pm:3003:    Plugins::callHook('packet_skilluse', {
Network\Receive\ServerType0.pm:3047:            Plugins::callHook($hook, {
Network\Receive\ServerType0.pm:3075:    Plugins::callHook('packet_charSkills', {
Network\Receive\ServerType0.pm:3321:                            Plugins::callHook('unequipped_item', {slot => $equipSlot_lut{$_}, item => $item});
Network\Receive\ServerType0.pm:3340:            Plugins::callHook('base_level', {name => $actor});
Network\Receive\ServerType0.pm:3343:            Plugins::callHook('job_level', {name => $actor});
Network\Receive\ServerType0.pm:3382:            Plugins::callHook('packet_vender', {ID => $ID, title => bytesToString($args->{title})});
Network\Receive\ServerType0.pm:3422:            Plugins::callHook('packet_vender_store', { item => $item });
Network\Receive\ServerType0.pm:3431:    Plugins::callHook('packet_vender_store2', {
Network\Receive\ServerType0.pm:3595:                                    Plugins::callHook('packet_item_removed', {index => $item->{binID}});
Network\Receive\ServerType0.pm:4248:    Plugins::callHook ('captcha_image', $hookArgs);
Network\Receive\ServerType0.pm:4257:    Plugins::callHook ('captcha_file', $hookArgs);
Network\Receive\ServerType0.pm:4271:    Plugins::callHook ('captcha_answer', {flag => $args->{flag}});
Network\Receive\ServerType0.pm:4376:            Plugins::callHook('packet_open_buying_store', {
Network\Receive\ServerType0.pm:4394:            Plugins::callHook('packet_buying', {ID => unpack 'V', $ID});
Network\Receive\ServerType0.pm:4439:            Plugins::callHook('packet_buying_store', {
Network\Receive\ServerType0.pm:4457:    Plugins::callHook('packet_buying_store2', {
Network\Receive\ServerType0.pm:4509:            Plugins::callHook('packet_buyer', {ID => $ID});
Network\Receive\ServerType15.pm:47:             Plugins::callHook('in_game');
Network\Receive\ServerType19.pm:47:             Plugins::callHook('in_game');
Network\Receive\ServerType20.pm:47:             Plugins::callHook('in_game');
Network\Receive\Zero.pm:79:             Plugins::callHook('in_game');
Network\Receive.pm:837:         Plugins::callHook('exp_gained');
Network\Receive.pm:895:         Plugins::callHook('base_level_changed', {
Network\Receive.pm:928:         Plugins::callHook('zeny_change', {
Network\Receive.pm:1000:                Plugins::callHook('job_level_changed', {
Network\Receive.pm:1093:        Plugins::callHook('packet_charStats', {
Network\Receive.pm:1186:        Plugins::callHook('packet_pre/actor_display', $args);
Network\Receive.pm:1188:        Plugins::callHook('packet/actor_display', $args);
Network\Receive.pm:1526:                        Plugins::callHook('add_player_list', $actor);
Network\Receive.pm:1530:                        Plugins::callHook('add_monster_list', $actor);
Network\Receive.pm:1534:                        Plugins::callHook('add_pet_list', $actor);
Network\Receive.pm:1538:                        Plugins::callHook('add_portal_list', $actor);
Network\Receive.pm:1547:                        Plugins::callHook('add_npc_list', $actor);
Network\Receive.pm:1551:                        Plugins::callHook('add_slave_list', $actor);
Network\Receive.pm:1554:                        Plugins::callHook('add_elemental_list', $actor);
Network\Receive.pm:1575:                        Plugins::callHook('player', {player => $actor});  #backwards compatibility
Network\Receive.pm:1577:                        Plugins::callHook('player_exist', {player => $actor});
Network\Receive.pm:1581:                        Plugins::callHook('npc_exist', {npc => $actor});
Network\Receive.pm:1585:                        Plugins::callHook('portal_exist', {portal => $actor});
Network\Receive.pm:1619:                        Plugins::callHook('player', {player => $actor});  #backwards compatibailty
Network\Receive.pm:1621:                        Plugins::callHook('player_connected', {player => $actor});
Network\Receive.pm:1648:                        Plugins::callHook('player_moved', $actor);
Network\Receive.pm:1651:                        Plugins::callHook('monster_moved', $actor);
Network\Receive.pm:1654:                        Plugins::callHook('pet_moved', $actor);
Network\Receive.pm:1657:                        Plugins::callHook('slave_moved', $actor);
Network\Receive.pm:1661:                        Plugins::callHook('portal_moved', $actor);
Network\Receive.pm:1665:                        Plugins::callHook('npc_moved', $actor);
Network\Receive.pm:1668:                        Plugins::callHook('pet_moved', $actor);
Network\Receive.pm:1708:                Plugins::callHook('self_died');
Network\Receive.pm:1747:                Plugins::callHook('monster_disappeared', {monster => $monster});
Network\Receive.pm:1778:                        Plugins::callHook('player_disappeared', {player => $player});
Network\Receive.pm:1798:                Plugins::callHook('portal_disappeared', {portal => $portal});
Network\Receive.pm:1807:                Plugins::callHook('npc_disappeared', {npc => $npc});
Network\Receive.pm:1815:                Plugins::callHook('pet_disappeared', {pet => $pet});
Network\Receive.pm:1839:                        Plugins::callHook('slave_disappeared', {slave => $slave});
Network\Receive.pm:1855:                Plugins::callHook('elemental_disappeared', {elemental => $elemental});
Network\Receive.pm:1943:                Plugins::callHook('packet_attack', {sourceID => $args->{sourceID}, targetID => $args->{targetID}, msg => \$msg, dmg => $totalDamage, type => $args->{type}});
Network\Receive.pm:2007:                Plugins::callHook('charNameUpdate', {player => $player});
Network\Receive.pm:2021:                        Plugins::callHook('mobNameUpdate', {monster => $monster});
Network\Receive.pm:2039:                Plugins::callHook('npcNameUpdate', {npc => $npc});
Network\Receive.pm:2052:                Plugins::callHook('petNameUpdate', {pet => $pet});
Network\Receive.pm:2064:                Plugins::callHook('slaveNameUpdate', {slave => $slave});
Network\Receive.pm:2077:                Plugins::callHook('elementalNameUpdate', {elemental => $elemental});
Network\Receive.pm:2236:        Plugins::callHook('packet_localBroadcast', {
Network\Receive.pm:2425:        Plugins::callHook('packet_sysMsg', {
Network\Receive.pm:2577:                Plugins::callHook('equipped_item', {slot => 'arrow', item => $item});
Network\Receive.pm:2610:                Plugins::callHook('packet_item_removed', {index => $item->{binID}});
Network\Receive.pm:2648:        Plugins::callHook(
Network\Receive.pm:2663:                Plugins::callHook(
Network\Receive.pm:2698:        Plugins::callHook(
Network\Receive.pm:2715:                Plugins::callHook(
Network\Receive.pm:2958:                Plugins::callHook('pvp_mode', {
Network\Receive.pm:2998:        Plugins::callHook('packet_areaSpell', {
Network\Receive.pm:3041:        Plugins::callHook('packet_areaSpell', {
Network\Receive.pm:3234:                        Plugins::callHook('quest_mission_added', {
Network\Receive.pm:3273:                Plugins::callHook('quest_mission_added', {
Network\Receive.pm:3327:                Plugins::callHook('quest_mission_updated', {
Network\Receive.pm:3411:        Plugins::callHook('makable_item_list', {
Network\Receive.pm:3671:                Plugins::callHook('dial');
Network\Receive.pm:3792:        Plugins::callHook('chat_created', {
Network\Receive.pm:3814:        Plugins::callHook('packet_chatinfo', {
Network\Receive.pm:3854:        Plugins::callHook('chat_modified', {
Network\Receive.pm:3917:                Plugins::callHook('chat_leave');
Network\Receive.pm:3929:        Plugins::callHook('chat_removed', {
Network\Receive.pm:3961:                Plugins::callHook("error_deal", { type =>$args->{type}} );
Network\Receive.pm:3964:                Plugins::callHook("error_deal", { type =>$args->{type}} );
Network\Receive.pm:3982:                Plugins::callHook("engaged_deal", {name => $currentDeal{name}});
Network\Receive.pm:3985:                Plugins::callHook("error_deal", { type =>$args->{type}} );
Network\Receive.pm:3988:                Plugins::callHook("error_deal", { type =>$args->{type}} );
Network\Receive.pm:3997:        Plugins::callHook("cancelled_deal");
Network\Receive.pm:4005:        Plugins::callHook("complete_deal");
Network\Receive.pm:4013:                Plugins::callHook("finalized_deal", {name => $currentDeal{name}});
Network\Receive.pm:4032:        Plugins::callHook("incoming_deal", {name => $user});
Network\Receive.pm:4126:        Plugins::callHook('packet_emotion', {
Network\Receive.pm:4135:        Plugins::callHook('disconnected') if ($net->getState() == Network::IN_GAME);
Network\Receive.pm:4604:        Plugins::callHook('packet_useitem', \%hook_args);
Network\Receive.pm:4874:        Plugins::callHook('Network::Receive::map_changed', {
Network\Receive.pm:4937:        Plugins::callHook('npc_talk_done', {ID => $ID});
Network\Receive.pm:4979:                Plugins::callHook('npc_autotalk', {
Network\Receive.pm:5010:        Plugins::callHook('npc_talk_responses', {
Network\Receive.pm:5199:                Plugins::callHook('packet_vender', {ID => $ID, title => bytesToString($args->{title})});
Network\Receive.pm:5225:                Plugins::callHook('add_player_list', $actor);
Network\Receive.pm:5246:                Plugins::callHook('player_disappeared', {player => $player});
Network\Receive.pm:5416:                        Plugins::callHook('packet_partyJoin', { partyName => $info->{name} });
Network\Receive.pm:5467:        Plugins::callHook('packet_partyMsg', {
Network\Receive.pm:6068:        Plugins::callHook('packet_clanMsg', {
Network\Receive.pm:6164:        Plugins::callHook('cooking_list', {
Network\Send\ServerType1.pm:37: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7);
Network\Send\ServerType1.pm:38: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3);
Network\Send\ServerType1.pm:56: Plugins::callHook('packet_pre/sendSit', \%args);
Network\Send\ServerType1.pm:74: Plugins::callHook('packet_pre/sendStand', \%args);
Network\Send\ServerType1.pm:151:        Plugins::callHook('packet_pre/sendSkillUse', \%args);
Network\Send\ServerType10.pm:39:        Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7);
Network\Send\ServerType10.pm:40:        Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3);
Network\Send\ServerType10.pm:59:        Plugins::callHook('packet_pre/sendAttack', \%args);
Network\Send\ServerType2.pm:44: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7);
Network\Send\ServerType2.pm:45: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3);
Network\Send\ServerType3.pm:44: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7);
Network\Send\ServerType3.pm:45: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3);
Network\Send\ServerType4.pm:44: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7);
Network\Send\ServerType4.pm:45: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3);
Network\Send\ServerType5.pm:43: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7);
Network\Send\ServerType5.pm:44: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3);
Network\Send\ServerType6.pm:36: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7);
Network\Send\ServerType6.pm:37: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3);
Network\Send\ServerType7.pm:35: Plugins::callHook('packet_pre/sendAttack', \%args);
Network\Send\ServerType7.pm:55: Plugins::callHook('packet_pre/sendSit', \%args);
Network\Send\ServerType7.pm:73: Plugins::callHook('packet_pre/sendStand', \%args);
Network\Send\ServerType7.pm:96: Plugins::callHook('packet_pre/sendSkillUse', \%args);
Network\Send\ServerType8.pm:50: Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7);
Network\Send\ServerType8.pm:51: Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3);
Network\Send\ServerType8.pm:70: Plugins::callHook('packet_pre/sendAttack', \%args);
Network\Send\ServerType8.pm:88: Plugins::callHook('packet_pre/sendStand', \%args);
Network\Send\ServerType8.pm:105:        Plugins::callHook('packet_pre/sendSit', \%args);
Network\Send\ServerType8.pm:125:        Plugins::callHook('packet_pre/sendSkillUse', \%args);
Network\Send\ServerType8_1.pm:39:       Plugins::callHook('packet_pre/sendAttack', \%args);
Network\Send\ServerType8_1.pm:126:      Plugins::callHook('packet_pre/sendSit', \%args);
Network\Send\ServerType8_1.pm:145:      Plugins::callHook('packet_pre/sendStand', \%args);
Network\Send\ServerType8_1.pm:167:      Plugins::callHook('packet_pre/sendSkillUse', \%args);
Network\Send\ServerType8_3.pm:48:       Plugins::callHook('packet_pre/sendSit', \%args);
Network\Send\ServerType8_3.pm:66:       Plugins::callHook('packet_pre/sendAttack', \%args);
Network\Send\ServerType8_3.pm:94:       Plugins::callHook('packet_pre/sendStand', \%args);
Network\Send\ServerType8_5.pm:42:       Plugins::callHook('packet_pre/sendSkillUse', \%args);
Network\Send\ServerType8_5.pm:176:      Plugins::callHook('packet_pre/sendAttack', \%args);
Network\Send.pm:241:            Plugins::callHook($hookName, \%args);
Network\Send.pm:461:    Plugins::callHook('packet/sendMapLoaded');
Network\Send.pm:501:    Plugins::callHook('packet_pre/sendAttack', \%args) if $flag == ACTION_ATTACK || $flag == ACTION_ATTACK_REPEAT;
Network\Send.pm:502:    Plugins::callHook('packet_pre/sendSit', \%args) if $flag == ACTION_SIT || $flag == ACTION_STAND;
Network\Send.pm:753:    Plugins::callHook('packet_pre/sendSkillUse', \%args);
Network\XKore.pm:123:   Plugins::callHook("Network::serverSend/pre", { msg => \$msg });
Network\XKore.pm:143:           Plugins::callHook('Network::stateChanged');
Network\XKore.pm:246:           Plugins::callHook('disconnected');
Network\XKore.pm:267:   Plugins::callHook('XKore_start');
Plugins.pm:428:sub callHook {
Poseidon\Client.pm:82:  Plugins::callHook('Poseidon/client_authenticate', {
Poseidon\QueryServer.pm:77:     Plugins::callHook('Poseidon/server_authenticate', {
Settings.pm:341:        Plugins::callHook( usage => $data );
Settings.pm:495:        Plugins::callHook('pre_load_'.$internalFilename, $pre_load);
Settings.pm:543:                Plugins::callHook('load_'.$internalFilename, $load);
Settings.pm:548:                Plugins::callHook('pos_load_'.$internalFilename, $pos_load);
Settings.pm:550:                Plugins::callHook('load_'.$internalFilename, $load);
Settings.pm:554:                Plugins::callHook('pos_load_'.$internalFilename, $pos_load);
Settings.pm:595:    Plugins::callHook('preloadfiles', {files => $files});
Settings.pm:599:        Plugins::callHook('loadfiles', {files => $files, current => $i});
Settings.pm:604:    Plugins::callHook('postloadfiles', {files => $files});
Task\MapRoute.pm:358:                           Plugins::callHook('Task::MapRoute::iterate::missing_portal', \%plugin_args);
Task\MapRoute.pm:435:                                   Plugins::callHook('Task::MapRoute::iterate::route_portal_near', \%plugin_args);
Task\Route.pm:236:                      Plugins::callHook('route', {status => 'success'});
Task\Route.pm:274:                              Plugins::callHook('route', {status => 'stuck'});
Task\Route.pm:350:                              Plugins::callHook('route', {status => 'success'});
test\PluginsHookTest.pm:29:     Plugins::callHook('hook2');
test\PluginsHookTest.pm:31:     Plugins::callHook('hook1');
test\PluginsHookTest.pm:39:     Plugins::callHook('hook1');
test\PluginsHookTest.pm:41:     Plugins::callHook('hook2');
test\PluginsHookTest.pm:43:     Plugins::callHook('hook3');
test\PluginsHookTest.pm:51:     Plugins::callHook('hook1');
test\PluginsHookTest.pm:53:     Plugins::callHook('hook2');
test\PluginsHookTest.pm:61:     Plugins::callHook('hook2');
test\PluginsHookTest.pm:63:     Plugins::callHook('hook1');
test\PluginsHookTest.pm:71:     Plugins::callHook('hook2');
test\PluginsHookTest.pm:73:     Plugins::callHook('hook1');
test\PluginsHookTest.pm:93:     Plugins::callHook('hook1');
test\PluginsHookTest.pm:95:     Plugins::callHook('hook2');
test\PluginsHookTest.pm:102:    Plugins::callHook('hook1');
test\PluginsHookTest.pm:124:    Plugins::callHook( 'add_during_call' );
test\PluginsHookTest.pm:129:    Plugins::callHook( 'add_during_call' );
test\PluginsHookTest.pm:134:    Plugins::callHook( 'add_during_call' );
test\PluginsHookTest.pm:139:    Plugins::callHook( 'add_during_call' );
test\PluginsHookTest.pm:156:    Plugins::callHook( 'del_during_call' );
test\PluginsHookTest.pm:161:    Plugins::callHook( 'del_during_call' );
test\PluginsHookTest.pm:166:    Plugins::callHook( 'del_during_call' );
test\PluginsHookTest.pm:171:    Plugins::callHook( 'del_during_call' );
test\PluginsHookTest.pm:176:    Plugins::callHook( 'del_during_call' );
Utils\PathFinding.pm:101:       Plugins::callHook("PathFindingReset", \%hookArgs);