尝试在传入字符串后将实例与字符串连接错误

我正在尝试制作一个游戏,在“StarterCharacterScripts”中的本地脚本中,当接触到名为“WinPad”的部件时触发一个事件,该事件在聊天中发送消息,并发送一个PostAsync()到Discord Webhook。但是,在触发事件时,它会给出错误尝试将实例与字符串连接,即使所有传递的参数都是字符串。这是本地脚本中的事件发生器:

        local name = tP:FindFirstChild("TowerName")
        local diff = tP:FindFirstChild("Difficulty")
        local diffid = tP:FindFirstChild("DifficultyId")
        local diffcolor = tP:FindFirstChild("DiffColor3")
        game.ReplicatedStorage.WinEvent:FireServer(game.Players.LocalPlayer.Name, name.Value, diff.Value, diffid.Value, diffcolor.Value)

以下是“OnServerEvent:Connect()”脚本:

game.ReplicatedStorage.WinEvent.OnServerEvent:Connect(function(plr, towername, towerdiff, towerdiffid, color)
    local HookData = {
            ['content'] = "**"..plr.."** 已经打败了 **"..tostring(towername).." [<:"..tostring(towerdiff)..":"..tostring(towerdiffid)..">]**。"
    }
    HookData = http:JSONEncode(HookData)
    http:PostAsync(url, HookData)
    plr.Parent:MoveTo(Vector3.new(-764, 12.5, -54.5))
    createSystemMessage:FireAllClients((plr.." 打败了 "..towername.."."), color, Enum.Font.SourceSansBold, Enum.FontSize.Size14)
end)

另外,tP是被LocalPlayer.Character.Humanoid触摸的部件

点赞
用户2860267
用户2860267

当使用RemoteEvents' OnServerEvent信号时,第一个参数始终是由引擎自动提供的使用FireServer函数的Player。您的函数签名应该如下:

function(player, plrname, towername, towerdiff, towerdiffid, color)

但是,无需提供玩家名称,因为您可以从player.Name获取它。因此,为了解决您的问题并清理您的代码,我建议在您的LocalScript中使用:

local winevent = game.ReplicatedStorage.WinEvent

local name = tP.TowerName.Value
local diff = tP.Difficulty.Value
local diffid = tP.DifficultyId.Value
local diffcolor = tP.DiffColor3.Value

winevent:FireServer(name, diff, diffid, diffcolor)

在您的服务器脚本中使用:

local winEvent = game.ReplicatedStorage.WinEvent
winEvent.OnServerEvent:Connect(function(player, towername, towerdiff, towerdiffid, color)
    -- 格式化一些消息
    local message = "%s 已经击败了 %s。"
    local hookMessage = string.format(message,
        "**" .. player.Name .. "**",
        string.format("**%s [<:%s:%s>]**", towername, towerdiff, towerdiffid))
    local playerMessage = string.format(message, player.Name, towername)

    -- 将某些数据发送到某个服务器
    local HookData = {
            ['content'] = hookMessage,
    }
    HookData = http:JSONEncode(HookData)
    http:PostAsync(url, HookData)

    -- 将玩家的角色移动到某个地方
    player.Character:MoveTo(Vector3.new(-764, 12.5, -54.5))

    -- 提醒所有人已经发生了某些事情
    createSystemMessage:FireAllClients(playerMessage, color, Enum.Font.SourceSansBold, Enum.FontSize.Size14)
end)
2020-12-29 23:21:23