Объясняю суть, хочу сделать Энтити с моделькой NPC, который будет отвечать на вопросы, выбираемые в поле. Как на условном юнионе короче, кто подскажет, как это сделать? Код оттуда не совсем работает, нажимая на E ничего не появляется(
init.lua:
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")
function ENT:Initialize()
self:SetModel("models/other/ven/tk_basic_01/tk_basic.mdl")
self:SetBodygroup(0,1)
self:SetBodygroup(1,1)
self:PhysicsInit(SOLID_VPHYSICS)
self:SetMoveType(MOVETYPE_NONE)
self:SetSolid(SOLID_BBOX)
self:SetHullSizeNormal()
self:CapabilitiesAdd(bit.bor(CAP_ANIMATEDFACE, CAP_TURN_HEAD))
self:SetUseType(SIMPLE_USE)
self:DropToFloor()
self:SetMaxYawSpeed(90)
end
util.AddNetworkString("DrawNPCGUI")
function ENT:Use()
net.Start("NPCShopUI")
net.Send(ply)
end
end
cl_init.lua:
(весь код не вставляю, только часть отвечающую за интерфейс, который по идее должен вызываться на Е, не вставляю шрифты и диалоги)
local function NPCShopUI(len)
surface.PlaySound(table.Random(RandomSounds))
chat.AddText(col.o, "Капрал: ",ChatTextMessageColor, ChatTextMessage )
local NPCUI = vgui.Create( "DFrame" )
NPCUI:SetPos( ScrW()*0.35, ScrH()*0.75 )
NPCUI:SetSize( 545, 200 )
NPCUI:SetTitle( "" )
NPCUI:SetAlpha(0)
NPCUI:SetBackgroundBlur( true )
NPCUI:ShowCloseButton(false)
NPCUI:SetDraggable( false )
NPCUI:MakePopup()
NPCUI.Paint = function(self,w,h)
draw.RoundedBox(0,0,0,w,h,col.ba)
CreateThickOutlinedBox( 0,0,w,h,1,col.o )
end
NPCUI:AlphaTo(255,0.3,0)
local SelectedBox = vgui.Create( "DFrame",NPCUI )
SelectedBox:SetPos( ScrW()*0.35, ScrH()*0.625 )
SelectedBox:SetSize( 545, 35 )
SelectedBox:SetTitle( "Капрал:" )
SelectedBox:ShowCloseButton(false)
SelectedBox:SetDraggable( false )
SelectedBox:MakePopup()
SelectedBox.Paint = function(self,w,h)
draw.RoundedBox(0,0,0,w,h,col.ba)
CreateThickOutlinedBox( 0,0,w,h,1,col.o )
end
local richtext = vgui.Create( "RichText", SelectedBox )
richtext:Dock( FILL )
richtext:InsertColorChange( 192, 192, 192, 255 )
richtext:AppendText( "Добро пожаловать!" )
function richtext:PerformLayout()
self:SetFontInternal( "ChatFont" )
self:SetFGColor( Color( 255, 255, 255 ) )
end
local DermaList = vgui.Create( "DPanelList", NPCUI )
DermaList:SetPos( 5,30 )
DermaList:SetSize( NPCUI:GetWide()-10, NPCUI:GetTall()-35 )
DermaList:SetSpacing( 5 ) -- Spacing between items
DermaList:EnableHorizontal( false ) -- Only vertical items
DermaList:EnableVerticalScrollbar( true ) -- Allow scrollbar if you exceed the Y axis
local isSwitching = false
for k,v in pairs(iButtons) do
local DButton = vgui.Create( "DButton",layout )
DButton:SetText( v.text )
DButton:SetSize( 300, 25 )
DButton:SetTextColor(color_white)
DButton.DoClick = function()
end
DButton.Paint = function(self,w,h)
draw.RoundedBox(0,0,0,w,h,Color(255, 100, 80, 100))
CreateThickOutlinedBox( 0,0,w,h,1,col.ba )
end
DButton.DoClick = function()
if isSwitching then return end
isSwitching = true
SelectedBox:SizeTo( 545, 35, 0.3, 0)
richtext:SetText('')
timer.Simple(0.65,function()
richtext:SetText(v.info)
SelectedBox:SizeTo( 545, 100, 0.3, 0 )
timer.Simple(0.3,function() isSwitching = false end)
end)
end
DermaList:AddItem(DButton)
end
local CDButton = vgui.Create( "DButton",layout )
CDButton:SetText( "Мне пора!" )
CDButton:SetSize( 300, 25 )
CDButton:SetTextColor(color_white)
CDButton.DoClick = function()
if isSwitching then return end
surface.PlaySound(table.Random(RandomSounds))
NPCUI:Close()
end
CDButton.Paint = function(self,w,h)
draw.RoundedBox(0,0,0,w,h,Color(255, 100, 80, 100))
CreateThickOutlinedBox( 0,0,w,h,1,col.ba )
end
DermaList:AddItem(CDButton)
end
net.Receive("DrawNPCGUI", NPCShopUI)
shared.lua:
ENT.Base = "base_ai"
ENT.Type = "ai"
ENT.PrintName = "Помощь"
ENT.Category = "OtherNPC"
ENT.Author = "smbdy"
ENT.Spawnable = true
ENT.AutomaticFrameAdvance = true
init.lua:
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")
function ENT:Initialize()
self:SetModel("models/other/ven/tk_basic_01/tk_basic.mdl")
self:SetBodygroup(0,1)
self:SetBodygroup(1,1)
self:PhysicsInit(SOLID_VPHYSICS)
self:SetMoveType(MOVETYPE_NONE)
self:SetSolid(SOLID_BBOX)
self:SetHullSizeNormal()
self:CapabilitiesAdd(bit.bor(CAP_ANIMATEDFACE, CAP_TURN_HEAD))
self:SetUseType(SIMPLE_USE)
self:DropToFloor()
self:SetMaxYawSpeed(90)
end
util.AddNetworkString("DrawNPCGUI")
function ENT:Use()
net.Start("NPCShopUI")
net.Send(ply)
end
end
cl_init.lua:
(весь код не вставляю, только часть отвечающую за интерфейс, который по идее должен вызываться на Е, не вставляю шрифты и диалоги)
local function NPCShopUI(len)
surface.PlaySound(table.Random(RandomSounds))
chat.AddText(col.o, "Капрал: ",ChatTextMessageColor, ChatTextMessage )
local NPCUI = vgui.Create( "DFrame" )
NPCUI:SetPos( ScrW()*0.35, ScrH()*0.75 )
NPCUI:SetSize( 545, 200 )
NPCUI:SetTitle( "" )
NPCUI:SetAlpha(0)
NPCUI:SetBackgroundBlur( true )
NPCUI:ShowCloseButton(false)
NPCUI:SetDraggable( false )
NPCUI:MakePopup()
NPCUI.Paint = function(self,w,h)
draw.RoundedBox(0,0,0,w,h,col.ba)
CreateThickOutlinedBox( 0,0,w,h,1,col.o )
end
NPCUI:AlphaTo(255,0.3,0)
local SelectedBox = vgui.Create( "DFrame",NPCUI )
SelectedBox:SetPos( ScrW()*0.35, ScrH()*0.625 )
SelectedBox:SetSize( 545, 35 )
SelectedBox:SetTitle( "Капрал:" )
SelectedBox:ShowCloseButton(false)
SelectedBox:SetDraggable( false )
SelectedBox:MakePopup()
SelectedBox.Paint = function(self,w,h)
draw.RoundedBox(0,0,0,w,h,col.ba)
CreateThickOutlinedBox( 0,0,w,h,1,col.o )
end
local richtext = vgui.Create( "RichText", SelectedBox )
richtext:Dock( FILL )
richtext:InsertColorChange( 192, 192, 192, 255 )
richtext:AppendText( "Добро пожаловать!" )
function richtext:PerformLayout()
self:SetFontInternal( "ChatFont" )
self:SetFGColor( Color( 255, 255, 255 ) )
end
local DermaList = vgui.Create( "DPanelList", NPCUI )
DermaList:SetPos( 5,30 )
DermaList:SetSize( NPCUI:GetWide()-10, NPCUI:GetTall()-35 )
DermaList:SetSpacing( 5 ) -- Spacing between items
DermaList:EnableHorizontal( false ) -- Only vertical items
DermaList:EnableVerticalScrollbar( true ) -- Allow scrollbar if you exceed the Y axis
local isSwitching = false
for k,v in pairs(iButtons) do
local DButton = vgui.Create( "DButton",layout )
DButton:SetText( v.text )
DButton:SetSize( 300, 25 )
DButton:SetTextColor(color_white)
DButton.DoClick = function()
end
DButton.Paint = function(self,w,h)
draw.RoundedBox(0,0,0,w,h,Color(255, 100, 80, 100))
CreateThickOutlinedBox( 0,0,w,h,1,col.ba )
end
DButton.DoClick = function()
if isSwitching then return end
isSwitching = true
SelectedBox:SizeTo( 545, 35, 0.3, 0)
richtext:SetText('')
timer.Simple(0.65,function()
richtext:SetText(v.info)
SelectedBox:SizeTo( 545, 100, 0.3, 0 )
timer.Simple(0.3,function() isSwitching = false end)
end)
end
DermaList:AddItem(DButton)
end
local CDButton = vgui.Create( "DButton",layout )
CDButton:SetText( "Мне пора!" )
CDButton:SetSize( 300, 25 )
CDButton:SetTextColor(color_white)
CDButton.DoClick = function()
if isSwitching then return end
surface.PlaySound(table.Random(RandomSounds))
NPCUI:Close()
end
CDButton.Paint = function(self,w,h)
draw.RoundedBox(0,0,0,w,h,Color(255, 100, 80, 100))
CreateThickOutlinedBox( 0,0,w,h,1,col.ba )
end
DermaList:AddItem(CDButton)
end
net.Receive("DrawNPCGUI", NPCShopUI)
shared.lua:
ENT.Base = "base_ai"
ENT.Type = "ai"
ENT.PrintName = "Помощь"
ENT.Category = "OtherNPC"
ENT.Author = "smbdy"
ENT.Spawnable = true
ENT.AutomaticFrameAdvance = true