最近,我一直在为Garry的Mod制作一个模仿的HarborRP游戏表情,我正在尝试重新创建走私者NPC (如果你曾经玩过HarborRP,你会知道我的意思),所以基本上我希望当玩家按下他们的使用键时,NPC打开一个真皮框窗口。我创建了NPC,所有这些都是这样的,但是当播放器按下NPC上的use键时,会弹出100万个窗口,我将NPC/Entity的use类型设置为SIMPLE_USE,但这似乎并不重要,因为弹出了这么多窗口。VGUI/Derma框架的设置设置为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
需要注意的东西
发布于 2017-11-28 02:01:07
您需要将执行net.Send的代码放入实体ENT:Use函数,而不是放在PlayerUse钩子上。
function ENT:Use(ply)
net.Start("smug")
net.Send(ply)
end
在初始化函数中的代码中已经包含了下面一行,使实体在播放器按E时只调用ENT:Use函数一次,这似乎是很好的做法:
self:SetUseType(SIMPLE_USE)
此外,如果将来需要开发人员的帮助,我建议查看gmod论坛。
GMod论坛:https://gmod.facepunch.com/f
https://stackoverflow.com/questions/47504289
复制相似问题