GMOD Lua 使用类型并不重要?

最近,我一直在为Garry's Mod创建一个模拟HarborRP游戏模式,我正在尝试重新创建Smuggler NPC(如果你玩过HarborRP,你会知道我在说什么)。基本上,我想要这个NPC在玩家按下使用键时打开一个Derma-Frame窗口。我已经创建了NPC和所有的东西,但是当玩家仅仅按下NPC上的使用键时,就会弹出数百个窗口。我已经将NPC/Entity的使用类型设置为SIMPLE_USE,但好像并不重要,因为会弹出很多窗口。VGUI/Derma Frame的设置为MakePopup(),但那也没有用。看看你能不能找到问题所在,我对LUA的知识很少。

init.lua 文件:

include("shared.lua")
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")

util.AddNetworkString("smug")
hook.Add("PlayerUse", "menuu", function(ply, ent)

    net.Start("smug")
    net.Send(ply)

end)

function ENT:Initialize()
    self:SetModel('models/humans/group01/female_01.mdl')
    self:SetHullType(HULL_HUMAN)
    self:SetHullSizeNormal()
    self:SetNPCState(NPC_STATE_SCRIPT)
    self:SetSolid(SOLID_BBOX)
    self:SetUseType(SIMPLE_USE)
    self:DropToFloor()
end

cl_init.lua 文件:

include("shared.lua")

function ENT:Draw()
    self.Entity:DrawModel()
end

net.Receive("smug", function()
if( !frame ) then
    local frame = vgui.Create("DFrame")

    frame:SetSize(900,600)
    frame:SetPos(ScrW()/2-450,ScrH()/2-300)
    frame:SetVisible(true)
    frame:MakePopup()

    frame:SetDeleteOnClose(true)
    elseif (frame) then print("HI")
end
end)

shared.lua 文件:

ENT.Base = "base_ai"
ENT.Type = "ai"
ENT.PrintName = "[DEV] Smuggler NPC"
ENT.Category = "InVaLiD's HBRP Entities"
ENT.Author = "InVaLiD"
ENT.Spawnable = true
ENT.AdminSpawnable = true
ENT.AutomaticFrameAdvance = true

请注意:

  1. 所有这些文件都在addons/smug_npc/lua/entities/文件夹中。
  2. 是的,我知道我给东西起奇怪的名字,那只是我。
  3. 我基本上没有关于lua的知识,所以请解释得清楚明白。
  4. 我真的非常感谢你们的帮助,以及你们愿意帮助别人解决问题的意愿,即使你们可以用这些时间做更有意义的事情,也请知道我感激你们,谢谢!
点赞
用户3306144
用户3306144

你需要将实现 net.Send 的代码放到实体的 ENT:Use 函数中,而不是 PlayerUse 钩子函数中。

function ENT:Use(ply)
    net.Start("smug")
    net.Send(ply)
end

你的代码中已经拥有下面这行,它在 initialize 函数中实现了当玩家按下 E 键时使实体调用 ENT:Use 函数,这似乎是你所想要的,所以很好:

self:SetUseType(SIMPLE_USE)

我也建议你在需要时查看 GMod 论坛以获取开发者帮助。

GMod 论坛:https://gmod.facepunch.com/f

2017-11-28 02:01:07