2013-07-29 12:13:03 +01:00
-- Global variables
PLUGIN = {} -- Reference to own plugin object
function Initialize ( Plugin )
PLUGIN = Plugin
Plugin : SetName ( "HookNotify" );
Plugin : SetVersion ( 1 );
PluginManager = cPluginManager : Get ();
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_BLOCK_TO_PICKUPS );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_CHAT );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_CHUNK_AVAILABLE );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_CHUNK_GENERATED );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_CHUNK_GENERATING );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_CHUNK_UNLOADED );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_CHUNK_UNLOADING );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_COLLECTING_PICKUP );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_CRAFTING_NO_RECIPE );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_DISCONNECT );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_EXECUTE_COMMAND );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_HANDSHAKE );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_KILLING );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_LOGIN );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PLAYER_BREAKING_BLOCK );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PLAYER_BROKEN_BLOCK );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PLAYER_EATING );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PLAYER_JOINED );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PLAYER_LEFT_CLICK );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PLAYER_MOVING );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PLAYER_PLACED_BLOCK );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PLAYER_PLACING_BLOCK );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PLAYER_RIGHT_CLICK );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PLAYER_SHOOTING );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PLAYER_SPAWNED );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PLAYER_TOSSING_ITEM );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PLAYER_USED_BLOCK );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PLAYER_USED_ITEM );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PLAYER_USING_BLOCK );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PLAYER_USING_ITEM );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_POST_CRAFTING );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_PRE_CRAFTING );
2013-08-08 09:13:13 +02:00
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_SPAWNED_ENTITY );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_SPAWNED_MONSTER );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_SPAWNING_ENTITY );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_SPAWNING_MONSTER );
2013-07-29 12:13:03 +01:00
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_TAKE_DAMAGE );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_UPDATED_SIGN );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_UPDATING_SIGN );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_WEATHER_CHANGED );
PluginManager : AddHook ( Plugin , cPluginManager.HOOK_WEATHER_CHANGING );
LOGINFO ( "HookNotify plugin is installed, beware, the log output may be quite large!" );
LOGINFO ( "You want this plugin enabled only when developing another plugin, not for regular gameplay." );
return true
end
function LogHook ( FnName , ...)
LOG ( FnName .. "(" );
for i , v in ipairs ( arg ) do
local vt = tostring ( v );
local TypeString = type ( v );
if ( type ( v ) == "userdata" ) then
TypeString = tolua.type ( v );
end ;
LOG ( " " .. tostring ( i ) .. ": " .. TypeString .. ": " .. tostring ( v ));
end
LOG ( ")" );
end
function OnBlockToPickups (...)
LogHook ( "OnBlockToPickups" , unpack ( arg ));
local World , Digger , BlockX , BlockY , BlockZ , BlockType , BlockMeta , Pickups = unpack ( arg );
if ( Pickups ~= nil ) then
local Name = "NULL" ;
if ( Digger ~= nil ) then
Name = Digger : GetName ()
end
LOG ( "Got cItems from " .. Name .. ", trying to manipulate them." );
Pickups : Add ( cItem : new ( E_ITEM_DIAMOND_SHOVEL , 1 ));
LOG ( "Current size: " .. Pickups : Size ());
end ;
end ;
function OnChat (...)
LogHook ( "OnChat" , unpack ( arg ));
end
function OnChunkAvailable (...)
LogHook ( "OnChunkAvailable" , unpack ( arg ));
end
function OnChunkGenerated (...)
LogHook ( "OnChunkGenerated" , unpack ( arg ));
end
function OnChunkGenerating (...)
LogHook ( "OnChunkGenerating" , unpack ( arg ));
end
function OnChunkUnloaded (...)
LogHook ( "OnChunkUnloaded" , unpack ( arg ));
end
function OnChunkUnloading (...)
LogHook ( "OnChunkUnloading" , unpack ( arg ));
end
function OnPlayerUsingItem (...)
LogHook ( "OnPlayerUsingItem" , unpack ( arg ));
end
function OnCollectingPickup (...)
LogHook ( "OnCollectingPickup" , unpack ( arg ));
end
function OnCraftingNoRecipe (...)
LogHook ( "OnCraftingNoRecipe" , unpack ( arg ));
end
function OnDisconnect (...)
LogHook ( "OnDisconnect" , unpack ( arg ));
end
function OnExecuteCommand (...)
LogHook ( "OnExecuteCommand" , unpack ( arg ));
-- For some reason logging doesn't work for this callback, so list some stuff manually to verify:
LOG ( "arg1 type: " .. type ( arg [ 1 ]));
if ( arg [ 1 ] ~= nil ) then
LOG ( "Player name: " .. arg [ 1 ]: GetName ());
end
LOG ( "Command: " .. arg [ 2 ][ 1 ]);
end
function OnHandshake (...)
LogHook ( "OnHandshake" , unpack ( arg ));
end
function OnKilling (...)
LogHook ( "OnKilling" , unpack ( arg ));
end
function OnLogin (...)
LogHook ( "OnLogin" , unpack ( arg ));
end
function OnPlayerBreakingBlock (...)
LogHook ( "OnPlayerBreakingBlock" , unpack ( arg ));
end
function OnPlayerBrokenBlock (...)
LogHook ( "OnPlayerBrokenBlock" , unpack ( arg ));
end
function OnPlayerEating (...)
LogHook ( "OnPlayerEating" , unpack ( arg ));
end
function OnPlayerJoined (...)
LogHook ( "OnPlayerJoined" , unpack ( arg ));
end
function OnPlayerLeftClick (...)
LogHook ( "OnPlayerLeftClick" , unpack ( arg ));
end
function OnPlayerMoving (...)
LogHook ( "OnPlayerMoving" , unpack ( arg ));
end
function OnPlayerPlacedBlock (...)
LogHook ( "OnPlayerPlacedBlock" , unpack ( arg ));
end
function OnPlayerPlacingBlock (...)
LogHook ( "OnPlayerPlacingBlock" , unpack ( arg ));
end
function OnPlayerRightClick (...)
LogHook ( "OnPlayerRightClick" , unpack ( arg ));
end
function OnPlayerShooting (...)
LogHook ( "OnPlayerShooting" , unpack ( arg ));
end
function OnPlayerSpawned (...)
LogHook ( "OnPlayerSpawned" , unpack ( arg ));
end
function OnPlayerTossingItem (...)
LogHook ( "OnPlayerTossingItem" , unpack ( arg ));
end
function OnPlayerUsedBlock (...)
LogHook ( "OnPlayerUsedBlock" , unpack ( arg ));
end
function OnPlayerUsedItem (...)
LogHook ( "OnPlayerUsedItem" , unpack ( arg ));
end
function OnPlayerUsingBlock (...)
LogHook ( "OnPlayerUsingBlock" , unpack ( arg ));
end
function OnPlayerUsingItem (...)
LogHook ( "OnPlayerUsingItem" , unpack ( arg ));
end
function OnPostCrafting (...)
LogHook ( "OnPostCrafting" , unpack ( arg ));
end
function OnPreCrafting (...)
LogHook ( "OnPreCrafting" , unpack ( arg ));
end
2013-08-08 09:13:13 +02:00
function OnSpawnedEntity (...)
LogHook ( "OnSpawnedEntity" , unpack ( arg ));
end
function OnSpawnedMonster (...)
LogHook ( "OnSpawnedMonster" , unpack ( arg ));
end
function OnSpawningEntity (...)
LogHook ( "OnSpawningEntity" , unpack ( arg ));
end
function OnSpawningMonster (...)
LogHook ( "OnSpawningMonster" , unpack ( arg ));
end
2013-07-29 12:13:03 +01:00
function OnUpdatedSign (...)
LogHook ( "OnUpdatedSign" , unpack ( arg ));
end
function OnUpdatingSign (...)
LogHook ( "OnUpdatingSign" , unpack ( arg ));
end
function OnWeatherChanged (...)
LogHook ( "OnWeatherChanged" , unpack ( arg ));
end
function OnWeatherChanging (...)
LogHook ( "OnWeatherChanging" , unpack ( arg ));
end
------------------------------------------------------------------
-- Special handling for OnTakeDamage to print the contents of TDI:
function OnTakeDamage ( Receiver , TDI )
-- Receiver is cPawn
-- TDI is TakeDamageInfo
LOG ( "OnTakeDamage(): " .. Receiver : GetClass () .. " was dealt RawDamage " .. TDI.RawDamage .. ", FinalDamage " .. TDI.FinalDamage .. " (that is, " .. ( TDI.RawDamage - TDI.FinalDamage ) .. " HPs covered by armor)" );
end