client:
[lua]
include(‘sh_init.lua’)
ENT.RenderGroup = RENDERGROUP_BOTH
function ENT:Draw()
self:DrawModel()
end
function ENT:BuildBonePositions(NumBones, NumPhysBones)
end
function ENT:DoRagdollBone(PhysBoneNum, BoneNum)
end
[/lua]
server:
[lua]
AddCSLuaFile(“cl_init.lua”)
AddCSLuaFile(“sh_init.lua”)
include(‘sh_init.lua’)
–[[
local schdWalk = ai_schedule.New(“Walking Randomly”) – Walk towards set entity --works!!!
schdWalk:AddTask(“FindNode”, {Class = “node_test”, Radius = 2000})
schdWalk:EngTask(“TASK_GET_PATH_TO_ENEMY”, 0)
schdWalk:EngTask(“TASK_WALK_PATH”,0)
schdWalk:EngTask(“TASK_WAIT_FOR_MOVEMENT”,0)
–]]
local schdFindTarget = ai_schedule.New(“Find Target”)
schdFindTarget:AddTask(“FindEnemy”, {Class = “player”, Radius = 2000})
schdFindTarget:EngTask(“TASK_GET_PATH_TO_RANGE_ENEMY_LKP_LOS”,0)
schdFindTarget:EngTask(“TASK_RUN_PATH”,0)
schdFindTarget:EngTask(“TASK_WAIT_FOR_MOVEMENT”,0)
local schdFireWeapon = ai_schedule.New(“Attack Enemy”)
schdFireWeapon:EngTask(“TASK_STOP_MOVING”,0)
schdFireWeapon:EngTask(“TASK_FACE_ENEMY”,0)
schdFireWeapon:EngTask(“TASK_PLAY_SEQUENCE”, ACT_RANGE_ATTACK1)
function ENT:TaskStart_FindNode(data)
–[[
local et = ents.FindInSphere(self:GetPos(), data.Radius or 512)
for k,v in ipairs(et) do
if (v != self && v:GetClass() == data.Class) then
self:SetEnemy(v, true)
self:UpdateEnemyMemory(v, v:GetPos())
self:TaskComplete()
return
end
end
self:SetEnemy(NULL)
–]]
end
function ENT:Task_FindNode(data)
local et = ents.FindInSphere(self:GetPos(), data.Radius or 512)
for k,v in ipairs(et) do
if (v != self && v:GetClass() == data.Class) then
self:SetEnemy(v, true)
self:UpdateEnemyMemory(v, v:GetPos())
self:TaskComplete()
return
end
end
self:SetEnemy(NULL)
end
function ENT:Think()
self:NextThink(CurTime())
return true
end
function ENT:SpawnFunction(ply, tr)
if !tr.HitWorld then return end
local ent = ents.Create("npc_test")
ent:SetPos(tr.HitPos)
ent:Spawn()
return ent
end
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_SIMPLE_RADIUS_DAMAGE |
CAP_MOVE_GROUND |
CAP_MOVE_SHOOT |
CAP_USE |
CAP_OPEN_DOORS |
CAP_TURN_HEAD |
CAP_WEAPON_RANGE_ATTACK1 |
CAP_WEAPON_RANGE_ATTACK2 |
CAP_WEAPON_MELEE_ATTACK1 |
CAP_WEAPON_MELEE_ATTACK2 |
CAP_INNATE_RANGE_ATTACK1 |
CAP_INNATE_RANGE_ATTACK2 |
CAP_INNATE_MELEE_ATTACK1 |
CAP_INNATE_MELEE_ATTACK2 |
CAP_USE_WEAPONS |
CAP_ANIMATEDFACE |
CAP_AIM_GUN)
self:SetMaxYawSpeed(5000)
self:SetHealth(100)
self:Give("weapon_ar2")
– self:AddRelationship(“player D_HT 99”)
end
function ENT:SelectSchedule()
if(!IsValid(self:GetEnemy()))then
self:StartSchedule(schdChase)
return
end
if(self:GetEnemy():GetPos():Distance(self:GetPos())<=75)then
self:StartSchedule(schdMeleeAttack)
else
self:StartSchedule(schdChase)
end
end
function SpawnNPC(ply)
local tr = ply:GetEyeTrace()
local npc = ents.Create(“npc_test”)
npc:SetPos(tr.HitPos)
npc:Spawn()
end
concommand.Add(“spawntestnpc”,SpawnNPC)
[/lua]
shared:
[lua]
ENT.Base = “base_ai”
ENT.Type = “ai”
ENT.PrintName = “TestNPC”
ENT.Author = “Clevin”
ENT.Contact = “Clevin”
ENT.Purpose = “Testing.”
ENT.Instructions = “Testing.”
ENT.AutomaticFrameAdvance = true
function ENT:OnRemove()
end
function ENT:PhysicsCollide(data, physobj)
end
function ENT:PhysicsUpdate(physobj)
end
function ENT:SetAutomaticFrameAdvance(bUsingAnim)
self.AutomaticFrameAdvance = bUsingAnim
end
[/lua]
It’s purely the attacking part, not the moving part that is causing me trouble.