0

因此,我目前正在尝试创建一个小脚本,例如当玩家在 GMOD 中输入“!内容”时,他们将由一个窗口呈现,该窗口将引导他们进入该服务器的 Steam 内容。对于前面的示例它有效,因此我尝试复制模板并更改函数名称等。我没有遇到与所示示例相同的结果,但似乎没有发生任何事情,我不知道为什么,因为我只有更改了函数名称和字符串。如果你能帮助我,那就太好了。提前致谢。

Steam 群聊脚本(作品)

function steamgroupCommand( ply, text)  
    if string.sub( text, 1, 6 ) == "!steam" then  
    ply:PrintMessage( 3, "It Worked!" )  
    ply:SendLua([[gui.OpenURL("http://steamcommunity.com/groups/PhantomNetworksCommunity")]])  
    for k, v in pairs(player.GetAll()) do v:ChatPrint( "Player " .. ply:Nick() .. " has used !steam to view our community Steam Group!" )  
    end  
    end  
end  
hook.Add( "PlayerSay", "Chat", steamgroupCommand )

Discord 聊天脚本(不起作用)

function discordCommand( ply, text)  
    if string.sub( text, 1, 8 ) == "!discord" then  
    ply:PrintMessage( 3, "It Worked!" )  
    ply:SendLua([[gui.OpenURL("https://discord.gg/35rQxcE")]])  
    for k, v in pairs(player.GetAll()) do v:ChatPrint( "Player " .. ply:Nick() .. " has used !discord to view our official Discord server!" )  
    end  
    end  
end  
hook.Add( "PlayerSay", "Chat", discordCommand )
4

3 回答 3

0

问题是你覆盖了钩子。您应该将第二个参数更改为更具描述性的内容,例如:

hook.Add( "PlayerSay", "ChatSteamGroup", steamgroupCommand )

hook.Add( "PlayerSay", "ChatDiscord", discordCommand )

于 2017-12-26T15:12:23.070 回答
0

这种方式会起作用,因为这是我在服务器上所做的。

if(CLIENT) then
    concommand.Add("steam", function()
        gui.OpenURL("http://steamcommunity.com/groups/PhantomNetworksCommunity")
    end)
end
if(SERVER) then
    hook.Add("PlayerSay", "OpenSteam", function(calling, txt, t)
        local args = string.lower(txt)
        if(args == "!steam") then
            calling:ConCommand("steam")
            return ""
        end
    end)
end

你可以在你的不和谐邀请上做同样的事情。

编辑:

我从来没有意识到你有它打印聊天,所以我会告诉你一个很好的方法来做到这一点(或修复它):

if(CLIENT) then
    concommand.Add("steam", function()
        gui.OpenURL("http://steamcommunity.com/groups/PhantomNetworksCommunity")
    end)
    concommand.Add("discord", function()
        gui.OpenURL("https://discord.gg/35rQxcE")
    end)
    concommand.Add(".prt", function(calling, cmds, args, argStr)
        chat.AddText(Color(255, 255, 255), "Player", Color(98, 176, 255), args[1], Color(255, 255,255), " has used ", Color(255, 62, 62), "!steam", Color(255, 255, 255), " to view our community Steam Group!")
    end)
    concommand.Add(".disprt", function(calling, cmds, args, argStr)
        chat.AddText(Color(255, 255, 255), "Player", Color(98, 176, 255), args[1], Color(255, 255,255), " has used ", Color(255, 62, 62), "!discord", Color(255, 255, 255), " to view our official Discord server!")
    end)
end
if(SERVER) then
    hook.Add("PlayerSay", "ChatCommands", function(calling, txt, t)
        local args = string.lower(txt)
        if(args == "!steam") then
            calling:ConCommand("steam")
            for _, ply in pairs(player.GetAll()) do
                ply:ConCommand(".prt " .. calling:Nick())
            end
            return ""
        end
        if(args == "!discord") then
            calling:ConCommand("discord")
            for _, ply in pairs(player.GetAll()) do
                ply:ConCommand(".disprt " .. calling:Nick())
            end
            return ""
        end
    end)
end

编辑2:

另一个可能的错误原因是两个钩子具有相同的名称,"Chat"

于 2017-10-22T04:51:54.030 回答
0

如果您查看 的文档hook.Add,您将看到有关所需参数的详细信息。

第二个参数对你很重要

  1. 任何标识符

唯一标识符,通常是一个字符串。这可以在代码的其他地方使用来替换或删除钩子。

标识符应该是唯一的,这样您就不会意外覆盖其他一些 mods 钩子,除非您正在尝试这样做。

标识符可以是字符串,也可以是定义了 IsValid 函数(例如EntityPanel )的/对象。例如,数字布尔值是不允许的。

如果标识符是一个表/对象,它将被插入到回调中其他参数的前面,只要它有效,钩子就会被调用。但是,只要 IsValid(identifier) 返回 false,挂钩就会被移除。

因此,根据这一点,您需要将您的第二个参数hook.Add (在您的情况下是"chat"针对您的两个钩子)更改为每个钩子都是唯一的,以免覆盖您的其他钩子。

于 2017-09-07T08:03:40.213 回答