Garry的模组菜单脚本(Lua)

```function Team_Swap()

-- 创建一个 DFrame 对象,并设置它的属性 local Backg = vgui.Create( "DFrame" ) Backg:SetSize( ScrW() / 2, ScrH() / 2 ) Backg:SetPos ( ScrW() / 2, ScrH() / 2 ) Backg:SetTitle( "Swap Teams" ) Backg:SetVisible ( true ) Backg:SetDraggable ( true ) Backg:ShowCloseButton ( true ) Backg:MakePopup()

-- 创建一个 DColorButton 对象,并设置它的属性和点击事件 local DColorButton = vgui.Create ( "DColorButton", Backg ) DColorButton:SetPos( 40, 40 ) DColorButton:Paint( 100, 40 ) DColorButton:SetSize( 100, 40 ) DColorButton:SetText( "Join Red Team", Color( 221,78,76 ) ) DColorButton:SetColor( Color( 221,78,76 ) function DColorButton:DoClick(player) -- 当 DColorButton 被点击时,获取玩家对象并将其加入 Red 队伍 player:Kill() player:SetTeam(1) player:Spawn() end end

-- 向控制台添加一个指令,当执行该指令时调用 Team_Swap 函数 concommand.Add( "set_team", Team_Swap )```

这段代码的运行很顺利... 直到你点了它唯一的目的:按钮 当按钮被点击时,控制台会返回以下文本:

newrecycle]set_team

[ERROR] gamemodes/capturetheflag/gamemode/cl_init.lua:32: attempt to index local 'player' (a nil value) 1. DoClick - gamemodes/capturetheflag/gamemode/cl_init.lua:32 2. unknown - lua/vgui/dlabel.lua:218

[n3wr3cycl3|20|STEAM_0:1:59994487] Lua Error:

[ERROR] gamemodes/capturetheflag/gamemode/cl_init.lua:32: attempt to index local 'player' (a nil value) 1. DoClick - gamemodes/capturetheflag/gamemode/cl_init.lua:32 2. unknown - lua/vgui/dlabel.lua:218

请帮帮我!

点赞
用户4273199
用户4273199

首先:您混合使用了客户端(vgui)和服务器端(Player:SetTeam())的东西。

(您遇到这个错误的原因在客户端脚本中)

我的建议:

客户端脚本:

function Team_Select()
    local Backg = vgui.Create( "DFrame" )
    Backg:SetSize( ScrW() / 2, ScrH() / 2 )
    Backg:SetPos ( ScrW() / 2, ScrH() / 2 )
    Backg:SetTitle( "Swap Teams" )
    Backg:SetVisible ( true )
    Backg:SetDraggable ( true )
    Backg:ShowCloseButton ( true )
    Backg:MakePopup()

    local TeamRedButton = vgui.Create ( "DColorButton", Backg )
    TeamRedButton:SetPos( 40, 40 )
    TeamRedButton:Paint( 100, 40 )
    TeamRedButton:SetSize( 100, 40 )
    TeamRedButton:SetText( "Join Red Team", Color( 221,78,76 ) )
    TeamRedButton:SetColor( Color( 221,78,76 )
    function TeamRedButton:DoClick() -- DoClick has 0 Params
        RunConsoleCommand("switchteam", "red")
    end
end
concommand.Add( "chooseteam", Team_Select )

服务器端脚本:

function Team_Switch( --[[ Player ]] player, --[[ String ]] cmd, --[[ Table ]] args)
    --从表格中获取参数(在我的示例中为红色队伍的"red"),并将 player 移动到选择的团队中。
end
concommand.Add("switchteam", Team_Switch)

客户端脚本只是用户界面。实际的团队切换由服务器处理,并且可以从客户端控制台初始化。用户可以直接执行 switchteam red

来源:我的经验和 GMod Wiki

2015-06-22 18:10:18