Lua GMOD自定义聊天脚本问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua GMOD自定义聊天脚本问题相关的知识,希望对你有一定的参考价值。

因此,我正在尝试创建一个小脚本,以便当GMOD中的玩家输入“!content”时,它们将通过一个窗口呈现,该窗口将引导他们访问该服务器的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 )

不和谐聊天脚本(不起作用)

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 )
答案

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

第二个论点对你很重要

  1. any认定

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

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

标识符可以是string,也可以是定义了IsValid函数的table /对象,例如EntityPanel。例如,numbersbooleans是不允许的。

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

所以根据这个你需要改变你的hook.Add的第二个参数(在你的情况下,你的两个钩子都是"chat")对于每个钩子都是唯一的,不能覆盖你的其他钩子。

另一答案

这种方式可行,因为这是我在服务器上执行的操作。

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"

另一答案

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

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

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

以上是关于Lua GMOD自定义聊天脚本问题的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试通过 Logitech GHub 为 GMod 制作一个 lua 脚本,将玩家视图旋转 180 度,但不知道如何进行旋转

这个lua代码是否可以在我的GMOD服务器上下载某些文件

无法让 PlayerSay 在 Gmod lua 插件中工作

vgui 是一个零值 Gmod

如何在 Toad for Oracle 中使用自定义代码片段?

资源分享Gmod-Expression2 - 自定义像素画生成