You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:37:05