Help my entitie to change target, if it near the initial one
1 replies, posted
Hello, i want to order my entities to change target ( to go to entitie CheckPoint in fact) if the player or npc or physics object or ground/sky is too close.. but i don't know how to do it any idea?
[lua]
include("shared.lua")
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
function ENT:SpawnFunction( ply, tr)
local SpawnPos = tr.HitPos + tr.HitNormal * 5000
local ent = ents.Create( "Test" )
ent:SetPos( SpawnPos )
ent:Spawn()
ent:Activate()
ent:SetVar("Owner",ply);
return ent
end
function ENT:Initialize()
self.Entity:SetModel( "models/katharsmodels/vipermk2/vipermk2_shuttle.mdl" )
self.Entity:PhysicsInit( SOLID_VPHYSICS )
self.Entity:SetMoveType( MOVETYPE_VPHYSICS )
self.Entity:SetSolid( SOLID_VPHYSICS )
local phys = self.Entity:GetPhysicsObject()
if (phys:IsValid()) then
phys:Wake()
phys:EnableGravity(false)
phys:EnableDrag(false)
phys:EnableCollisions(true)
end
self.Entity:SpawnPoint()
self.Target = nil
self.SecurityIsActivate = false
self.HasTarget = false
self.SecurityDistance = 3200
end
function ENT:Think()
if !self.SecurityIsActivate then
local ents = ents.FindInSphere(self:GetPos(), 30000)
for _, target in pairs(ents) do
if target:IsValid() then
if target:IsPlayer() or target:IsNPC() and target:Health() > 0 then
self.Target = target
self.HasTarget = true
end
end
end
end
end
function ENT:FindCheckpoint()
if self.SecurityIsActivate then
for k,v in pairs(ents.FindInSphere(self.Entity:GetPos(),90000)) do
if (v:IsValid() and v:GetClass() =="CheckPoint") then
self.Target = v
else
self.SecurityIsActivate = false
end
end
end
end
function ENT:SpawnPoint()
for i = 1,1 do
local c = (math.random(5000,6000))
local pos = Vector(0, 0, c)
if util.IsInWorld(pos) then
local Met = ents.Create("CheckPoint")
Met:SetPos(pos)
Met:Spawn()
Met:Activate()
end
end
end
function ENT:PhysicsUpdate(phys,deltatime)
if self.HasTarget then
local pos = self.Entity:GetPos()
self.Direction = (self.Entity:GetForward()*700);
local t={
secondstoarrive = 1,
pos = pos+self.Direction,
maxangular = 5000,
maxangulardamp = 10000,
maxspeed = 1000000,
maxspeeddamp = 10000,
dampfactor = 0.5,
teleportdistance = 7000,
angle = ( self.Target:GetPos() - pos ):Angle(),
deltatime = deltatime,
}
phys:ComputeShadowControl(t);
end
self.LastPos = self.Entity:GetPos()
end
[/lua]
my idea was to check if target was too close, under the SecurityDistance, self.SecurityIsActivate is activated, make the entity search the CheckPoint entity and make it as the new target... but it doesn't seem working... Any Help?
I cant help you with your Error but to optimse your Checkpoint searching:
use ents.FindByClass because it uses much less Resources at ents.findinSphere and then check if it is in range.
Sorry, you need to Log In to post a reply to this thread.