Hooks
This document describes the hooks available in the NPC Drop module for managing NPC item drop functionality.
NPCDropCheck
Purpose
Called when an NPC drop check is performed.
Parameters
ent(Entity): The NPC entity being checked for drops.
Realm
Server.
When Called
This hook is triggered when: - An NPC is killed - Before any drop table checks - When the drop process begins
Example Usage
-- Track NPC drop checks
hook.Add("NPCDropCheck", "TrackNPCDropChecks", function(ent)
-- Track check
local checks = lia.data.get("npc_drop_checks", 0)
lia.data.set("npc_drop_checks", checks + 1)
lia.log.add(nil, "npcDropCheck", ent)
end)
-- Apply NPC drop check effects
hook.Add("NPCDropCheck", "NPCDropCheckEffects", function(ent)
-- Create check effect
local effect = EffectData()
effect:SetOrigin(ent:GetPos())
effect:SetMagnitude(1)
effect:SetScale(1)
util.Effect("Explosion", effect)
-- Play check sound
ent:EmitSound("ui/buttonclick.wav", 75, 100)
end)
-- Track NPC drop check statistics
hook.Add("NPCDropCheck", "TrackNPCDropCheckStats", function(ent)
-- Track check frequency
local checkFrequency = lia.data.get("npc_drop_check_frequency", 0)
lia.data.set("npc_drop_check_frequency", checkFrequency + 1)
-- Track check patterns
local checkPatterns = lia.data.get("npc_drop_check_patterns", {})
table.insert(checkPatterns, {
class = ent:GetClass(),
time = os.time()
})
lia.data.set("npc_drop_check_patterns", checkPatterns)
end)
NPCDropFailed
Purpose
Called when an NPC drop attempt fails.
Parameters
ent(Entity): The NPC entity that failed to drop items.
Realm
Server.
When Called
This hook is triggered when:
- An NPC drop attempt fails
- When no item is selected from the drop table
- After NPCDropRoll hook
Example Usage
-- Track NPC drop failures
hook.Add("NPCDropFailed", "TrackNPCDropFailures", function(ent)
-- Track failure
local failures = lia.data.get("npc_drop_failures", 0)
lia.data.set("npc_drop_failures", failures + 1)
lia.log.add(nil, "npcDropFailed", ent)
end)
-- Apply NPC drop failure effects
hook.Add("NPCDropFailed", "NPCDropFailureEffects", function(ent)
-- Create failure effect
local effect = EffectData()
effect:SetOrigin(ent:GetPos())
effect:SetMagnitude(1)
effect:SetScale(1)
util.Effect("Explosion", effect)
-- Play failure sound
ent:EmitSound("buttons/button16.wav", 75, 100)
end)
-- Track NPC drop failure statistics
hook.Add("NPCDropFailed", "TrackNPCDropFailureStats", function(ent)
-- Track failure frequency
local failureFrequency = lia.data.get("npc_drop_failure_frequency", 0)
lia.data.set("npc_drop_failure_frequency", failureFrequency + 1)
-- Track failure patterns
local failurePatterns = lia.data.get("npc_drop_failure_patterns", {})
table.insert(failurePatterns, {
class = ent:GetClass(),
time = os.time()
})
lia.data.set("npc_drop_failure_patterns", failurePatterns)
end)
NPCDropNoItems
Purpose
Called when an NPC has no items in its drop table.
Parameters
ent(Entity): The NPC entity that has no items.
Realm
Server.
When Called
This hook is triggered when:
- An NPC has no items in its drop table
- When the total weight is 0 or less
- After NPCDropNoTable hook
Example Usage
-- Track NPC drop no items
hook.Add("NPCDropNoItems", "TrackNPCDropNoItems", function(ent)
-- Track no items
local noItems = lia.data.get("npc_drop_no_items", 0)
lia.data.set("npc_drop_no_items", noItems + 1)
lia.log.add(nil, "npcDropNoItems", ent)
end)
-- Apply NPC drop no items effects
hook.Add("NPCDropNoItems", "NPCDropNoItemsEffects", function(ent)
-- Create no items effect
local effect = EffectData()
effect:SetOrigin(ent:GetPos())
effect:SetMagnitude(1)
effect:SetScale(1)
util.Effect("Explosion", effect)
-- Play no items sound
ent:EmitSound("buttons/button16.wav", 75, 100)
end)
-- Track NPC drop no items statistics
hook.Add("NPCDropNoItems", "TrackNPCDropNoItemsStats", function(ent)
-- Track no items frequency
local noItemsFrequency = lia.data.get("npc_drop_no_items_frequency", 0)
lia.data.set("npc_drop_no_items_frequency", noItemsFrequency + 1)
-- Track no items patterns
local noItemsPatterns = lia.data.get("npc_drop_no_items_patterns", {})
table.insert(noItemsPatterns, {
class = ent:GetClass(),
time = os.time()
})
lia.data.set("npc_drop_no_items_patterns", noItemsPatterns)
end)
NPCDropNoTable
Purpose
Called when an NPC has no drop table.
Parameters
ent(Entity): The NPC entity that has no drop table.
Realm
Server.
When Called
This hook is triggered when:
- An NPC has no drop table
- When the drop table is not found
- After NPCDropCheck hook
Example Usage
-- Track NPC drop no table
hook.Add("NPCDropNoTable", "TrackNPCDropNoTable", function(ent)
-- Track no table
local noTable = lia.data.get("npc_drop_no_table", 0)
lia.data.set("npc_drop_no_table", noTable + 1)
lia.log.add(nil, "npcDropNoTable", ent)
end)
-- Apply NPC drop no table effects
hook.Add("NPCDropNoTable", "NPCDropNoTableEffects", function(ent)
-- Create no table effect
local effect = EffectData()
effect:SetOrigin(ent:GetPos())
effect:SetMagnitude(1)
effect:SetScale(1)
util.Effect("Explosion", effect)
-- Play no table sound
ent:EmitSound("buttons/button16.wav", 75, 100)
end)
-- Track NPC drop no table statistics
hook.Add("NPCDropNoTable", "TrackNPCDropNoTableStats", function(ent)
-- Track no table frequency
local noTableFrequency = lia.data.get("npc_drop_no_table_frequency", 0)
lia.data.set("npc_drop_no_table_frequency", noTableFrequency + 1)
-- Track no table patterns
local noTablePatterns = lia.data.get("npc_drop_no_table_patterns", {})
table.insert(noTablePatterns, {
class = ent:GetClass(),
time = os.time()
})
lia.data.set("npc_drop_no_table_patterns", noTablePatterns)
end)
NPCDroppedItem
Purpose
Called when an NPC drops an item.
Parameters
ent(Entity): The NPC entity that dropped the item.itemName(string): The name of the item that was dropped.
Realm
Server.
When Called
This hook is triggered when:
- An NPC successfully drops an item
- After NPCDropRoll hook
- When the item is spawned
Example Usage
-- Track NPC dropped items
hook.Add("NPCDroppedItem", "TrackNPCDroppedItems", function(ent, itemName)
-- Track dropped item
local droppedItems = lia.data.get("npc_dropped_items", 0)
lia.data.set("npc_dropped_items", droppedItems + 1)
lia.log.add(nil, "npcDroppedItem", ent, itemName)
end)
-- Apply NPC dropped item effects
hook.Add("NPCDroppedItem", "NPCDroppedItemEffects", function(ent, itemName)
-- Create dropped item effect
local effect = EffectData()
effect:SetOrigin(ent:GetPos())
effect:SetMagnitude(1)
effect:SetScale(1)
util.Effect("Explosion", effect)
-- Play dropped item sound
ent:EmitSound("buttons/button14.wav", 75, 100)
end)
-- Track NPC dropped item statistics
hook.Add("NPCDroppedItem", "TrackNPCDroppedItemStats", function(ent, itemName)
-- Track dropped item frequency
local droppedItemFrequency = lia.data.get("npc_dropped_item_frequency", 0)
lia.data.set("npc_dropped_item_frequency", droppedItemFrequency + 1)
-- Track dropped item patterns
local droppedItemPatterns = lia.data.get("npc_dropped_item_patterns", {})
table.insert(droppedItemPatterns, {
class = ent:GetClass(),
item = itemName,
time = os.time()
})
lia.data.set("npc_dropped_item_patterns", droppedItemPatterns)
end)
NPCDropRoll
Purpose
Called when an NPC drop roll is made.
Parameters
ent(Entity): The NPC entity being rolled for drops.choice(number): The random choice value.totalWeight(number): The total weight of all items.
Realm
Server.
When Called
This hook is triggered when:
- An NPC drop roll is made
- After NPCDropNoItems hook
- Before NPCDroppedItem hook
Example Usage
-- Track NPC drop rolls
hook.Add("NPCDropRoll", "TrackNPCDropRolls", function(ent, choice, totalWeight)
-- Track roll
local rolls = lia.data.get("npc_drop_rolls", 0)
lia.data.set("npc_drop_rolls", rolls + 1)
lia.log.add(nil, "npcDropRoll", ent, choice, totalWeight)
end)
-- Apply NPC drop roll effects
hook.Add("NPCDropRoll", "NPCDropRollEffects", function(ent, choice, totalWeight)
-- Create roll effect
local effect = EffectData()
effect:SetOrigin(ent:GetPos())
effect:SetMagnitude(1)
effect:SetScale(1)
util.Effect("Explosion", effect)
-- Play roll sound
ent:EmitSound("ui/buttonclick.wav", 75, 100)
end)
-- Track NPC drop roll statistics
hook.Add("NPCDropRoll", "TrackNPCDropRollStats", function(ent, choice, totalWeight)
-- Track roll frequency
local rollFrequency = lia.data.get("npc_drop_roll_frequency", 0)
lia.data.set("npc_drop_roll_frequency", rollFrequency + 1)
-- Track roll patterns
local rollPatterns = lia.data.get("npc_drop_roll_patterns", {})
table.insert(rollPatterns, {
class = ent:GetClass(),
choice = choice,
totalWeight = totalWeight,
time = os.time()
})
lia.data.set("npc_drop_roll_patterns", rollPatterns)
end)