Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local writers, readers do
- local registered_types = 0
- writers, readers = {}, {}
- local function add_type(name, ...)
- _G["NET_" .. string.upper(name)] = registered_types
- if not ... then
- writers[registered_types] = string.format("net.Write%s(${value})", name)
- readers[registered_types] = string.format("${value} = net.Read%s()", name)
- else
- writers[registered_types], readers[registered_types] = ...
- end
- registered_types = registered_types + 1
- end
- add_type("Angle")
- add_type("Bit")
- add_type("Bool")
- add_type("Color")
- add_type(
- "Data",
- "net.WriteUInt(#${value}, 32)\nnet.WriteData(${value}, #${value})",
- "${value} = net.ReadData(net.ReadUInt(32))"
- )
- add_type("Double")
- add_type("Entity")
- add_type("Float")
- add_type(
- "Int8",
- "net.WriteInt(${value}, 8)",
- "${value} = net.ReadInt(8)"
- )
- add_type(
- "Int16",
- "net.WriteInt(${value}, 16)",
- "${value} = net.ReadInt(16)"
- )
- add_type(
- "Int32",
- "net.WriteInt(${value}, 32)",
- "${value} = net.ReadInt(32)"
- )
- add_type("Matrix")
- add_type("Normal")
- add_type("String")
- add_type("Table")
- add_type("Type")
- add_type(
- "UInt8",
- "net.WriteUInt(${value}, 8)",
- "${value} = net.ReadUInt(8)"
- )
- add_type(
- "UInt16",
- "net.WriteUInt(${value}, 16)",
- "${value} = net.ReadUInt(16)"
- )
- add_type(
- "UInt32",
- "net.WriteUInt(${value}, 32)",
- "${value} = net.ReadUInt(32)"
- )
- add_type("Vector")
- end
- local function n2s(n)
- if n == 0 then return "a" end
- local s = ""
- while n > 0 do
- s = s .. string.char(97 + n % 26)
- n = math.floor(n / 26)
- end
- return s
- end
- local function generate_writer(...)
- local func = {}
- local vars = {}
- for i, t in ipairs({...}) do
- local var = n2s(i - 1)
- local line = string.gsub(writers[t], "${value}", var)
- table.insert(vars, var)
- table.insert(func, line)
- end
- table.insert(func, 1, string.format("local %s = ...", table.concat(vars, ", ")))
- return CompileString(table.concat(func, "\n"), "net_struct")
- end
- local function generate_reader(...)
- local func = {}
- local vars = {}
- for i, t in ipairs({...}) do
- local var = n2s(i - 1)
- local line = string.gsub(readers[t], "${value}", var)
- table.insert(vars, var)
- table.insert(func, line)
- end
- table.insert(func, 1, string.format("local %s", table.concat(vars, ", ")))
- table.insert(func, string.format("return %s", table.concat(vars, ", ")))
- return CompileString(table.concat(func, "\n"), "net_struct")
- end
- return {
- Writer = generate_writer,
- Reader = generate_reader,
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement