Skip to content

Hooks

This document describes the hooks available in the Door Kick module for managing door kicking functionality.


DoorKickedOpen

Purpose

Called when a door has been successfully kicked open.

Parameters

  • client (Player): The player who kicked the door.
  • door (Entity): The door entity that was kicked open.

Realm

Server.

When Called

This hook is triggered when: - A door has been successfully kicked open - The kick animation and unlock sequence completes - After DoorKickStarted hook

Example Usage

-- Track door kick success
hook.Add("DoorKickedOpen", "TrackDoorKickSuccess", function(client, door)
    local char = client:getChar()
    if char then
        local doorKicks = char:getData("door_kicks", 0)
        char:setData("door_kicks", doorKicks + 1)

        -- Track door types
        local doorTypes = char:getData("door_kick_types", {})
        local doorClass = door:GetClass()
        doorTypes[doorClass] = (doorTypes[doorClass] or 0) + 1
        char:setData("door_kick_types", doorTypes)
    end

    lia.log.add(client, "doorKickedOpen", door)
end)

-- Apply door kick success effects
hook.Add("DoorKickedOpen", "DoorKickSuccessEffects", function(client, door)
    -- Play success sound
    client:EmitSound("doors/door_metal_thin_open1.wav", 75, 100)

    -- Apply screen effect
    client:ScreenFade(SCREENFADE.IN, Color(0, 255, 0, 15), 0.5, 0)

    -- Notify player
    client:notify("Door kicked open successfully!")

    -- Create particle effect
    local effect = EffectData()
    effect:SetOrigin(door:GetPos())
    effect:SetMagnitude(1)
    effect:SetScale(1)
    util.Effect("Explosion", effect)
end)

-- Track door kick success statistics
hook.Add("DoorKickedOpen", "TrackDoorKickSuccessStats", function(client, door)
    local char = client:getChar()
    if char then
        -- Track success frequency
        local successFrequency = char:getData("door_kick_success_frequency", 0)
        char:setData("door_kick_success_frequency", successFrequency + 1)

        -- Track success patterns
        local successPatterns = char:getData("door_kick_success_patterns", {})
        table.insert(successPatterns, {
            door = door:GetClass(),
            time = os.time()
        })
        char:setData("door_kick_success_patterns", successPatterns)
    end
end)

DoorKickFailed

Purpose

Called when a door kick attempt fails.

Parameters

  • client (Player): The player who attempted to kick the door.
  • door (Entity): The door entity that was attempted to be kicked.
  • reason (string): The reason for the failure ("disabled", "weak", "cannotKick", "tooClose", "tooFar", "invalid").

Realm

Server.

When Called

This hook is triggered when: - A door kick attempt fails - The player doesn't meet the requirements - Before DoorKickStarted hook

Example Usage

-- Track door kick failures
hook.Add("DoorKickFailed", "TrackDoorKickFailures", function(client, door, reason)
    local char = client:getChar()
    if char then
        local doorKickFailures = char:getData("door_kick_failures", 0)
        char:setData("door_kick_failures", doorKickFailures + 1)

        -- Track failure reasons
        local failureReasons = char:getData("door_kick_failure_reasons", {})
        failureReasons[reason] = (failureReasons[reason] or 0) + 1
        char:setData("door_kick_failure_reasons", failureReasons)
    end

    lia.log.add(client, "doorKickFailed", door, reason)
end)

-- Apply door kick failure effects
hook.Add("DoorKickFailed", "DoorKickFailureEffects", function(client, door, reason)
    -- Play failure sound
    client:EmitSound("buttons/button16.wav", 75, 100)

    -- Apply screen effect
    client:ScreenFade(SCREENFADE.IN, Color(255, 0, 0, 15), 0.5, 0)

    -- Notify player based on reason
    local messages = {
        disabled = "Door kicking is disabled!",
        weak = "You are too weak to kick this door!",
        cannotKick = "You cannot kick this door!",
        tooClose = "You are too close to kick the door!",
        tooFar = "You are too far from the door!",
        invalid = "Invalid door target!"
    }

    client:notify(messages[reason] or "Door kick failed!")
end)

-- Track door kick failure statistics
hook.Add("DoorKickFailed", "TrackDoorKickFailureStats", function(client, door, reason)
    local char = client:getChar()
    if char then
        -- Track failure frequency
        local failureFrequency = char:getData("door_kick_failure_frequency", 0)
        char:setData("door_kick_failure_frequency", failureFrequency + 1)

        -- Track failure patterns
        local failurePatterns = char:getData("door_kick_failure_patterns", {})
        table.insert(failurePatterns, {
            door = door:GetClass(),
            reason = reason,
            time = os.time()
        })
        char:setData("door_kick_failure_patterns", failurePatterns)
    end
end)

DoorKickStarted

Purpose

Called when a door kick attempt is started.

Parameters

  • client (Player): The player who is starting to kick the door.
  • door (Entity): The door entity being kicked.

Realm

Server.

When Called

This hook is triggered when: - A door kick attempt is started - The player meets the requirements - Before the kick animation begins

Example Usage

-- Track door kick attempts
hook.Add("DoorKickStarted", "TrackDoorKickAttempts", function(client, door)
    local char = client:getChar()
    if char then
        local doorKickAttempts = char:getData("door_kick_attempts", 0)
        char:setData("door_kick_attempts", doorKickAttempts + 1)
    end

    lia.log.add(client, "doorKickStarted", door)
end)

-- Apply door kick start effects
hook.Add("DoorKickStarted", "DoorKickStartEffects", function(client, door)
    -- Play start sound
    client:EmitSound("ui/buttonclick.wav", 75, 100)

    -- Apply screen effect
    client:ScreenFade(SCREENFADE.IN, Color(255, 255, 0, 10), 0.3, 0)

    -- Notify player
    client:notify("Starting to kick the door...")

    -- Create particle effect
    local effect = EffectData()
    effect:SetOrigin(door:GetPos())
    effect:SetMagnitude(1)
    effect:SetScale(1)
    util.Effect("Explosion", effect)
end)

-- Track door kick start statistics
hook.Add("DoorKickStarted", "TrackDoorKickStartStats", function(client, door)
    local char = client:getChar()
    if char then
        -- Track start frequency
        local startFrequency = char:getData("door_kick_start_frequency", 0)
        char:setData("door_kick_start_frequency", startFrequency + 1)

        -- Track start patterns
        local startPatterns = char:getData("door_kick_start_patterns", {})
        table.insert(startPatterns, {
            door = door:GetClass(),
            time = os.time()
        })
        char:setData("door_kick_start_patterns", startPatterns)
    end
end)