Skip to content

Hooks

This document describes the hooks available in the Join Leave Messages module for managing player join and leave announcements.


JoinLeaveMessageSent

Purpose

Called when a join or leave message is sent to players.

Parameters

  • client (Player): The player who joined or left.
  • isJoin (boolean): Whether this is a join message (true) or leave message (false).
  • message (string): The message that was sent.

Realm

Server.

When Called

This hook is triggered when: - A join or leave message is sent to all players - After PreJoinLeaveMessageSent hook - After the message is displayed

Example Usage

-- Track join/leave messages
hook.Add("JoinLeaveMessageSent", "TrackJoinLeaveMessages", function(client, isJoin, message)
    local char = client:getChar()
    if char then
        local messageType = isJoin and "join" or "leave"
        local messageCount = char:getData("join_leave_messages_" .. messageType, 0)
        char:setData("join_leave_messages_" .. messageType, messageCount + 1)
    end

    lia.log.add(client, "joinLeaveMessageSent", isJoin, message)
end)

-- Apply join/leave message effects
hook.Add("JoinLeaveMessageSent", "JoinLeaveMessageEffects", function(client, isJoin, message)
    -- Play message sound
    client:EmitSound(isJoin and "buttons/button14.wav" or "buttons/button16.wav", 75, 100)

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

    -- Notify player
    local status = isJoin and "joined" or "left"
    client:notify("Player " .. status .. " message sent!")

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

-- Track join/leave message statistics
hook.Add("JoinLeaveMessageSent", "TrackJoinLeaveMessageStats", function(client, isJoin, message)
    local char = client:getChar()
    if char then
        -- Track message frequency
        local messageFrequency = char:getData("join_leave_message_frequency", 0)
        char:setData("join_leave_message_frequency", messageFrequency + 1)

        -- Track message patterns
        local messagePatterns = char:getData("join_leave_message_patterns", {})
        table.insert(messagePatterns, {
            isJoin = isJoin,
            message = message,
            time = os.time()
        })
        char:setData("join_leave_message_patterns", messagePatterns)
    end
end)

PreJoinLeaveMessageSent

Purpose

Called before a join or leave message is sent to players.

Parameters

  • client (Player): The player who joined or left.
  • isJoin (boolean): Whether this is a join message (true) or leave message (false).
  • message (string): The message that will be sent.

Realm

Server.

When Called

This hook is triggered when: - A join or leave message is about to be sent - Before JoinLeaveMessageSent hook - Before any message validation

Example Usage

-- Validate join/leave messages
hook.Add("PreJoinLeaveMessageSent", "ValidateJoinLeaveMessages", function(client, isJoin, message)
    local char = client:getChar()
    if char then
        -- Check if messages are disabled
        if char:getData("join_leave_messages_disabled", false) then
            client:notify("Join/leave messages are disabled!")
            return false
        end

        -- Check if player is in a restricted area
        if char:getData("in_restricted_area", false) then
            client:notify("Cannot send join/leave messages in this area!")
            return false
        end

        -- Check cooldown
        local lastMessage = char:getData("last_join_leave_message_time", 0)
        if os.time() - lastMessage < 1 then -- 1 second cooldown
            client:notify("Please wait before sending another message!")
            return false
        end

        -- Update last message time
        char:setData("last_join_leave_message_time", os.time())
    end

    return true
end)

-- Track join/leave message attempts
hook.Add("PreJoinLeaveMessageSent", "TrackJoinLeaveMessageAttempts", function(client, isJoin, message)
    local char = client:getChar()
    if char then
        local messageAttempts = char:getData("join_leave_message_attempts", 0)
        char:setData("join_leave_message_attempts", messageAttempts + 1)
    end
end)

-- Apply pre-message effects
hook.Add("PreJoinLeaveMessageSent", "PreJoinLeaveMessageEffects", function(client, isJoin, message)
    -- Play pre-message sound
    client:EmitSound("ui/buttonclick.wav", 75, 100)

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

    -- Notify player
    local status = isJoin and "join" or "leave"
    client:notify("Sending " .. status .. " message...")
end)