3f4abe8c95
As requested in FS 418.
441 lines
7.8 KiB
Lua
441 lines
7.8 KiB
Lua
|
|
-- 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);
|
|
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);
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|