Create a new file in the scripts/ directory called welcome.lua:
-- welcome.lualogger.info("Welcome script loaded!")event.on("server:Connect", function(ctx) logger.info("Connected to game server")end)event.on("OnSpawn", function(ctx) if ctx:has_packet() then local pkt = ctx:get_packet() local log = LogPacket.new() log.msg = "`2Welcome to the world, `` " .. pkt.name .. "!" send.to_client(log) endend)
event.on("OnSpawn", function(ctx) if ctx:has_packet() then local pkt = ctx:get_packet() local log = LogPacket.new() log.msg = "`2Welcome to the world, `` " .. pkt.name .. "!" send.to_client(log) endend)
This event fires when a player spawns. We:
Check if the context has a packet
Get the packet data
Create a new LogPacket with a welcome message
Send it to the client
The backtick syntax (`2, “) is Growtopia’s color code system:
command.register("hello", "Say hello", function(ctx) local player = world:get_local_player() if player then ctx:reply("`2Hello, `` " .. player.name .. "!") else ctx:reply("`4Error: ``Not in a world") end return trueend)
Now you can type /hello in-game and receive a personalized greeting!
event.on("server:SendToServer", function(ctx) local pkt = ctx:parse() -- Modify the packet if pkt.net_id then pkt.net_id = 999 end -- Cancel the original and send modified version ctx:cancel() send.to_server(pkt)end)
scheduler.schedule_periodic(5000, function() local player = world:get_local_player() if player then logger.info("Position: ({}, {})", player.position.x, player.position.y) end return true -- Continue runningend)
command.register("item", "Get item info", function(ctx) if #ctx.args < 1 then ctx:reply("Usage: /item <id>") return false end local item_id = tonumber(ctx.args[1]) local item = item_database:get_item(item_id) if item then ctx:reply("Item {}: {}", item.item_id, item.item_name) else ctx:reply("Item not found") end return trueend)
local task_id = scheduler.schedule_periodic(1000, function() -- Do work -- Stop when condition is met if should_stop then return false end return trueend)
Use formatted logging
-- Goodlogger.info("Player {} at ({}, {})", player.name, pos.x, pos.y)-- Less readablelogger.info("Player " .. player.name .. " at (" .. pos.x .. ", " .. pos.y .. ")")