如何在 GMOD DarkRP Lua 中让玩家运行函数

我正在尝试制作一个禁言脚本,禁止玩家发言。目前我已经可以在脚本中识别特定的玩家,但我无法弄清楚或找到如何针对特定玩家运行我创建的此函数,而不仅仅是禁言整个服务器。

sv_mute.lua:

util.AddNetworkString( "mute_message" )

ismuted == false
targetPlayer == "Xx_Player_xX"

function checkmute()

    function SendMessage( ply, txt, pub )
        net.Start( "mute_message" )
            net.WriteString( "你已被禁言,请闭嘴" )
        net.Send( ply )
        return ""
    end
    hook.Add( "PlayerSay", "SendMessage", SendMessage, )
end

Player:checkmute(()targetPlayer)

cl_mute.lua:

function ReceiveMessage()
    local txt = net.ReadString()
    chat.AddText( Color( 0, 255, 0), txt)
end

我已经得到了 Player:checkmute(()targetPlayer),但我认为这是错误的

点赞
用户4273199
用户4273199

所以,首先在快速浏览一遍后我看到了一些错误。

  • 您定义了一个没有参数的函数,但是尝试使用一个参数来调用它。
  • 您没有使用 Garry 已经提供的工具来向玩家发送消息。

我们将使用的东西来实现您想要的任务


解决方案

-- sv_mute.lua

-- 一个被禁言的玩家列表,您需要从某个地方获取它们(不是该答案的一部分)
mutedPlayers = {
  "StupidMan" = true,
  "AnnoyingKid" = true,
  "ExGirlfriend" = true
}

-- 将检查用户是否已禁言的函数
local function checkMuted(--[[ string ]] playername)
  return mutedPlayers[playername]
  -- 根据您存储禁言玩家的方式,您可能需要将代码更改为其他内容
end

hook.Add("PlayerSay", "VosemMute_PlayerSay", function(sender, message, teamChat)
  if ( checkMuted(sender:GetName()) ) then
    sender.PrintMessage(HUD_PRINTTALK, "You are muted!")
    return "" -- 这将阻止消息显示
  end
end)

一些有用的链接


免责声明

此代码是完全未经测试的,是我凭空想象编写的。如果代码不起作用并引发了一些错误,请通知我。我会进行更正。

2018-01-04 12:09:51