Snpc

My snpc is not working when a press the use key on it. I do not get a error in my console and i don’t get the user message. Here are the init.lua and cl_init.lua in my entity.

Init.lua
[lua]AddCSLuaFile( “cl_init.lua” )
AddCSLuaFile( “shared.lua” )
include(‘shared.lua’)
function ENT:Initialize( )
self.Entity:SetModel( “models/Humans/Group01/Female_01.mdl” )
self.Entity:SetHullType( HULL_HUMAN )
self.Entity:SetUseType( SIMPLE_USE )
self.Entity:SetHullSizeNormal( )
self.Entity:SetSolid( SOLID_BBOX )
self.Entity:CapabilitiesAdd( CAP_ANIMATEDFACE | CAP_TURN_HEAD )
self.Entity:SetMaxYawSpeed( 5000 )
end
function ENT:AcceptInput( name, activator, caller, data )
if caller:IsPlayer() then
umsg.Start(“shopmenu”, caller)
umsg.End()
end

end
local schdChase = ai_schedule.New( “AIFighter Chase” ) //creates the schedule used for this npc

// Run away randomly (first objective in task)
schdChase:EngTask( "TASK_GET_PATH_TO_RANDOM_NODE", 	128 )
schdChase:EngTask( "TASK_RUN_PATH", 				0 )
schdChase:EngTask( "TASK_WAIT_FOR_MOVEMENT", 	0 )
schdChase:AddTask( "PlaySequence", 				{ Name = "cheer1", Speed = 1 } )

// Find an enemy and run to it (second objectives in task)
schdChase:AddTask( "FindEnemy", 		{ Class = "player", Radius = 2000 } )
schdChase:EngTask( "TASK_GET_PATH_TO_RANGE_ENEMY_LKP_LOS", 	0 )
schdChase:EngTask( "TASK_RUN_PATH", 				0 )
schdChase:EngTask( "TASK_WAIT_FOR_MOVEMENT", 	0 )

// Shoot it (third objective in task)
schdChase:EngTask( "TASK_STOP_MOVING", 			0 )
schdChase:EngTask( "TASK_FACE_ENEMY", 			0 )
schdChase:EngTask( "TASK_ANNOUNCE_ATTACK", 		0 )
schdChase:EngTask( "TASK_RANGE_ATTACK1", 		0 )
schdChase:EngTask( "TASK_RELOAD", 				0 )
//schedule is looped till you give it a different schedule

function ENT:Initialize()

self:SetModel( "models/Humans/Group01/Female_01.mdl" )

self:SetHullType( HULL_HUMAN );
self:SetHullSizeNormal();

self:SetSolid( SOLID_BBOX ) 
self:SetMoveType( MOVETYPE_STEP )

self:CapabilitiesAdd( CAP_MOVE_GROUND | CAP_OPEN_DOORS | CAP_ANIMATEDFACE | CAP_TURN_HEAD | CAP_USE_SHOT_REGULATOR | CAP_AIM_GUN )

self:SetMaxYawSpeed( 5000 )

//don't touch stuff above here
self:SetHealth(100)
self:Give( "weapon_ak47" ) //Can be given sweps.

end

function ENT:OnTakeDamage(dmg)
self:SetHealth(self:Health() - dmg:GetDamage())
if self:Health() <= 0 then //run on death
self:SetSchedule( SCHED_FALL_TO_GROUND ) //because it’s given a new schedule, the old one will end.
end
end

/---------------------------------------------------------
Name: SelectSchedule
---------------------------------------------------------
/
function ENT:SelectSchedule()

self:StartSchedule( schdChase ) //run the schedule we created earlier

end
[/Lua]

cl_init.lua
[lua]include(‘shared.lua’)
include(‘init.lua’)
function myMenu()
local DFrame1
DFrame1 = vgui.Create(‘DFrame’)
DFrame1:SetSize(674, 252)
DFrame1:Center
DFrame1:SetTitle(‘My Place Shop’)
DFrame1:SetSizable(true)
DFrame1:SetDeleteOnClose(false)
DFrame1:MakePopup()
end
usermessage.Hook(“shopmenu”,myMenu)

ENT.RenderGroup = RENDERGROUP_BOTH

/---------------------------------------------------------
Name: Draw
Desc: Draw it!
---------------------------------------------------------
/
function ENT:Draw()
self.Entity:DrawModel()
end

/---------------------------------------------------------
Name: DrawTranslucent
Desc: Draw translucent
---------------------------------------------------------
/
function ENT:DrawTranslucent()

// This is here just to make it backwards compatible.
// You shouldn't really be drawing your model here unless it's translucent

self:Draw()

end

/---------------------------------------------------------
Name: BuildBonePositions
Desc:
---------------------------------------------------------
/
function ENT:BuildBonePositions( NumBones, NumPhysBones )

// You can use this section to position the bones of
// any animated model using self:SetBonePosition( BoneNum, Pos, Angle )

// This will override any animation data and isn't meant as a 
// replacement for animations. We're using this to position the limbs
// of ragdolls.

end

/---------------------------------------------------------
Name: SetRagdollBones
Desc:
---------------------------------------------------------
/
function ENT:SetRagdollBones( bIn )

// If this is set to true then the engine will call 
// DoRagdollBone (below) for each ragdoll bone.
// It will then automatically fill in the rest of the bones

self.m_bRagdollSetup = bIn

end

/---------------------------------------------------------
Name: DoRagdollBone
Desc:
---------------------------------------------------------
/
function ENT:DoRagdollBone( PhysBoneNum, BoneNum )

// self:SetBonePosition( BoneNum, Pos, Angle )

end
[/Lua]

Try this

You don’t have to make it a shop, but it gives you a basic overview of how to make it accept players when they press a certain key on them.

Thats what I used.

You’ve missed out a vital part in the ENT:AcceptInput function.

[lua]if calller:IsPlayer() and name == “Use” then[/lua]

That tutorial is a mess, as i stated before you should use KeyPress and traces, means you can get the NPC useable through glass and stuff, but that method works if you want to make it simple

Still nothing.

I’m going to clean up that tutorial with a completed example at the end.

Cool beans.



function ENT:AcceptInput(activator)   
    if activator:IsPlayer() then    
        umsg.Start("shopmenu", activator)   
        umsg.End()   
    end 


try that

H4rDm0D : Your missing an end on that function :stuck_out_tongue:

[LUA]
function ENT:AcceptInput(activator)
if activator:IsPlayer() then
umsg.Start(“shopmenu”, activator)
umsg.End()
end
end
[/LUA]

now …

or you could use



function ENT:Use(activator)
if activator:IsPlayer() and activator:IsAlive() then
umsg.Start("shopmenu", activator)
umsg.End()
end
end


[Lua]function ENT:AcceptInput(activator, pl)
if ( pl:KeyPressed( IN_USE ) ) then
umsg.Start(“shopmenu”, activator)
umsg.End()
end
end
[/Lua]
Ok I changed to look for key presses and it worked.