# listener

Global signal system for multi-purpose callbacks.


# Events

Signal
../../libraries/signal/#library-functions

# should_aimbot_target(entIndex: number): boolean

should_aimbot_target(entIndex: number): boolean
  • Determines if the player should be targeted by the aimbot or not.
  • Also applies to legit bot.
secret.listener.add("should_aimbot_target", "notarget", function(index)
    return true -- blocks
end)

# should_triggerbot_target(entIndex: number): boolean

should_triggerbot_target(entIndex: number): boolean
  • Determines if the player should be targeted by the triggerbot.
secret.listener.add("should_triggerbot_target", "notrigger", function(index)
    return true -- blocks
end)

# should_draw_player(entIndex: number): boolean

should_draw_player(entIndex: number): boolean
  • Determines if the player should be drawn in the esp or not.
secret.listener.add("should_draw_player", "nodraw", function(index)
    return true -- blocks
end)

# should_draw_entity(entIndex: number): boolean

should_draw_entity(entIndex: number): boolean
  • Determines if an entity should be drawn in the esp or not.
secret.listener.add("should_draw_entity", "nodraw", function(index)
    return true -- blocks
end)

# think()

think()
  • Called every frame.
secret.listener.add("think", "spam_console", function()
    print("spammmm!")
end)

# paint_traverse()

paint_traverse()
  • Mostly used for custom drawing.
  • This is a 2D render context.
secret.listener.add("paint_traverse", "draw_box", function()
    surface.SetDrawColor(255,255,255,255)
    surface.DrawRect(25, 25, 100, 100)
end)

# view_render_post()

view_render_post()
  • Occurs after ViewRender has been ran, usually used for screengrab proof esp.
  • This is a 3D render context.
secret.listener.add("view_render_post", "draw_2d_box", function()
    cam.Start2D()
    surface.SetDrawColor(255,255,255,255)
    surface.DrawRect(25, 25, 100, 100)
    cam.End2D()
end)

# server_connect(ip: string, port: number, hostname: string)

server_connect(ip: string, port: number, hostname: string)
  • Called when connecting to a server.

# server_disconnect(reason: string)

server_disconnect(reason: string)
  • Called when disconnected/kicked/banned from a server.

# presend(CUserCmd: table)

presend(CUserCmd: table)
  • Called right before movement packets are sent.
  • Provides full access to the native Garry's Mod CUserCmd class.
  • Provides additional functions not found in the default GMod class, allowing extended control over the usercmd.
secret.listener.add("presend", "viewangles", function(cmd)
    cmd.angles = Angle(50, 50, 0) -- sets our viewangles
    cmd.SetWorldClicker(cmd, Vector(20, 20, 20)) -- sets our context menu angle, not present in the garry's mod class.
end)

# CUserCmd

get/set - cmd.buttons: number
get/set - cmd.command: number
get/set - cmd.tick: number
get/set - cmd.angles: Angle
get/set - cmd.forward: number
get/set - cmd.side: number
get/set - cmd.up number
get/set - cmd.impulse: number
get/set - cmd.seed: number
get - cmd.hash: number
get/set - cmd.mousex: number
get/set - cmd.mousey: number
get - cmd.prediction: bool

# wndproc(vk_key: number): boolean

wndproc(vk_key: number): boolean
  • Called whenever a Windows virtual key event is received.
  • If true is returned, the input will be blocked from reaching the game.
secret.listener.add("wndproc", "block_space", function(vk)
    if vk == 0x20 then -- space key
        return true -- block input
    end
end)

# override_vischeck(aimbot_target_index: number, tstart: vector, tend: vector): boolean

override_vischeck(aimbot_target_index: number, tstart: vector, tend: vector, record: boolean): boolean
  • Called every time the cheat performs a visibility check between you and a potential aimbot target.
  • Currently only ragebot uses this listener.
  • tstart – starting position of the trace (usually your eye position).
  • tend – ending position of the trace (usually the target hitbox).
  • record - is the trace running at a backtrack record?
  • Return value:
    • true → force the vischeck to succeed (target is always considered visible).
    • false → force the vischeck to fail (target is never considered visible).
    • nil → do nothing and let the default engine visibility check decide.
-- simple override, treat everyone as visible.
secret.listener.add("override_vischeck", "always_visible", function(target_index, tstart, tend, record)
    return true
end)

-- custom logic, allow vis if distance < 500 units
secret.listener.add("override_vischeck", "short_range_vis", function(target_index, tstart, tend, record)
    local dist = (tend - tstart):Length()
    if dist < 500 then
        return true
    end
end)

# should_aimbot_autofire(): boolean

should_aimbot_autofire(): boolean
  • Called every time the ragebot decides whether it should autofire.
  • Useful for custom logic to control when the ragebot fires (e.g., based on target state, weapon, or other conditions).
secret.listener.add("should_aimbot_autofire", "custom_logic", function()
    -- only allow autofire if some condition is met
    return LocalPlayer():Health() > 50
end)