Out Packet
Create and send custom packets to the server.
Sending invalid or malformed packets can cause disconnection. Only use if you understand the packet structure.
Examples use placeholder opcodes for demonstration only. Research actual packet structures for your game version.
Constructor
out_packet(opcode: number) -> OutPacket
Creates a new packet with the specified opcode.
local packet = out_packet(0x100)Encoding Methods
All methods return the packet object for method chaining.
packet:encode_1(value: number) -> OutPacket
Encodes 1 byte (0-255).
packet:encode_2(value: number) -> OutPacket
Encodes 2 bytes (0-65535).
packet:encode_4(value: number) -> OutPacket
Encodes 4 bytes (0-4294967295).
packet:encode_8(value: number) -> OutPacket
Encodes 8 bytes.
packet:encode_string(text: string) -> OutPacket
Encodes a string.
packet:encode_buffer(data: string | buffer) -> OutPacket
Encodes raw binary data. Accepts either a Lua string or a native Luau buffer — use the buffer form to forward bytes from in_packet:decode_buffer without a string round-trip.
-- from a string
out_packet(0x100):encode_buffer("\x01\x02\x03"):send()
-- from a buffer (e.g. forwarded from on_packet_recv)
local buf = incoming:decode_buffer(32)
out_packet(0x100):encode_buffer(buf):send()packet:encode_timestamp() -> OutPacket
Encodes the client's current update time as 4 bytes — the tick most packets carry as their timestamp field. Equivalent to encode_4(core.get_update_time()), and the same value the packet injector's {timestamp} variable expands to. Errors if the game is not loaded yet.
out_packet(0x100)
:encode_timestamp()
:encode_4(item_id)
:send()packet:encode_hex(hex: string) -> OutPacket
Encodes bytes written as hex text, e.g. "05 00 1A FF" (whitespace optional). Errors on a non-hex character or an odd number of digits rather than skipping them, so a typo can't quietly become different bytes.
Handy for replaying a packet body captured from the monitor or from in_packet:to_string(). The opcode comes from out_packet(opcode), so pass the body only — a captured string includes the opcode as its first two bytes.
-- replay a captured packet: "9E 00 01 00 05" -> opcode 0x9E, body "01 00 05"
out_packet(0x9E):encode_hex("01 00 05"):send()Utility Methods
packet:to_string() -> string
Returns hexadecimal representation of packet contents.
packet:get_opcode() -> number
Returns the packet opcode.
packet:get_data() -> string
Returns hexadecimal representation of packet contents (alias of to_string()).
packet:send()
Sends the packet to the server.
Examples
Basic Usage
-- Create and send packet
local packet = out_packet(0x100) -- Use real opcode
packet:encode_1(5)
packet:encode_2(1000)
packet:send()Method Chaining
out_packet(0x200)
:encode_1(10)
:encode_2(500)
:encode_4(100000)
:encode_string("Hello")
:send()