如何使用Roblox HttpService向Cloudflare Tunnels提交玩家用户名?附代码求助
实现玩家用户名提交功能方案
1. Node.js后端修改
添加JSON解析中间件,并新增POST接口接收玩家用户名:
const express = require("express"); const app = express(); const fs = require("fs"); // 启用JSON解析中间件,处理POST请求的JSON数据 app.use(express.json()); // 原有验证码接口 app.get('/obbyCode5', (req, res) =>{ let code = "OBBY$" + Math.floor(Math.random() * 10) + Math.floor(Math.random() * 10) + Math.floor(Math.random() * 10) + Math.floor(Math.random() * 10) + Math.floor(Math.random() * 10) + Math.floor(Math.random() * 10); console.log("code: ", code); fs.appendFile('codes', "\n" + code + " amount: 5", function (err) { if (err) return console.log(err); console.log('Appended!'); }); res.json({ code: code, amount: "5" }); }); // 新增用户名提交接口 app.post('/submitUsername', (req, res) => { const { username } = req.body; if (!username) { return res.status(400).json({ success: false, message: "用户名不能为空" }); } // 将用户名写入文件(可替换为数据库存储逻辑) fs.appendFile('usernames', "\n" + username, function (err) { if (err) { console.log(err); return res.status(500).json({ success: false, message: "存储失败" }); } console.log(`用户名 ${username} 已提交`); res.json({ success: true, message: "提交成功" }); }); }); // 启动服务(端口需与Cloudflare Tunnel配置一致) const PORT = 3000; app.listen(PORT, () => { console.log(`服务运行在端口 ${PORT}`); });
2. Roblox服务端修改
新增RemoteEvent处理客户端提交请求,封装HTTP调用逻辑:
local rs = game:GetService("ReplicatedStorage") local msgRe = rs:WaitForChild("MsgRe") -- 创建新的RemoteEvent用于用户名提交 local submitUsernameRe = Instance.new("RemoteEvent") submitUsernameRe.Name = "SubmitUsernameRe" submitUsernameRe.Parent = rs local httpSrv = game:GetService("HttpService") local baseUrl = "https://headset-breast-derek-registered.trycloudflare.com" local function getObbyCode(player) local url = baseUrl .. "/obbyCode5" local success, response = pcall(httpSrv.GetAsync, httpSrv, url) if not success then warn("获取验证码失败: " .. response) msgRe:FireClient(player, "获取失败") return end local data = httpSrv:JSONDecode(response) print("data = ", data) local code = tostring(data.code) msgRe:FireClient(player, code) end -- 处理客户端的用户名提交请求 local function handleSubmitUsername(player, username) -- 验证提交的用户名是否为当前玩家(可选) if username ~= player.Name then warn("提交的用户名与玩家不匹配") return end local url = baseUrl .. "/submitUsername" local requestBody = httpSrv:JSONEncode({ username = username }) local success, response = pcall(httpSrv.PostAsync, httpSrv, url, requestBody, Enum.HttpContentType.ApplicationJson) if not success then warn("提交用户名失败: " .. response) return end local result = httpSrv:JSONDecode(response) print("提交结果: ", result) end game.Players.PlayerAdded:Connect(getObbyCode) submitUsernameRe.OnServerEvent:Connect(handleSubmitUsername)
3. Roblox客户端修改
添加触发提交的交互逻辑(示例为按钮点击触发):
local rs = game:GetService("ReplicatedStorage") local msgRe = rs:WaitForChild("MsgRe") local submitUsernameRe = rs:WaitForChild("SubmitUsernameRe") local lbl = script.Parent -- 替换为你界面中的提交按钮对象 local submitBtn = script.Parent:WaitForChild("SubmitButton") local function displayMsg(code) lbl.Text = "验证码: " .. code end -- 点击按钮时提交当前玩家用户名 local function onSubmitBtnClicked() local player = game.Players.LocalPlayer submitUsernameRe:FireServer(player.Name) print("已提交用户名: " .. player.Name) end msgRe.OnClientEvent:Connect(displayMsg) submitBtn.MouseButton1Click:Connect(onSubmitBtnClicked)
注意事项
- 确保Roblox游戏的HTTP服务已开启(游戏设置 → 安全 → 允许HTTP请求)
- 验证Cloudflare Tunnel处于正常运行状态,确保域名可访问
- 可根据需求扩展后端逻辑,比如记录提交时间、关联验证码等
内容的提问来源于stack exchange,提问作者Shan
相关产品推荐
相关产品推荐

