I'm trying to make an SNPC run to a position if the player is not within range and then if the player enters his range again, I would like the NPC to run at the player like he normally would if I were to spawn him close to me.
This is my current code:
NPC_BASE
[lua]
// data.Radius = 512
local ForceThisPos = Vector(159.44537353516, 240.50567626953, -148)
function ENT:TaskStart_FindEnemy( data )
local enemy = NULL
local et = ents.FindInSphere( self:GetPos(), data.Radius )
for k, v in ipairs(et) do
if (v:IsValid() && v != self && v:GetClass() == data.Class) then
enemy = v
player.GetByID(1):ChatPrint("Targeting You")
self:SetEnemy(enemy, true)
self:UpdateEnemyMemory(enemy, enemy:GetPos())
self:TaskComplete()
player.GetByID(1):ChatPrint("TaskIsDone")
return
else
enemy = NULL
end
end
player.GetByID(1):ChatPrint("Couldnt find target")
self:SetEnemy(enemy)
self:SetLastPosition(ForceThisPos)
self:SetSchedule(SCHED_FORCED_GO_RUN)
player.GetByID(1):ChatPrint("UpdatingPosition")
end
[/lua]
The NPC itself:
[lua]
function ENT:SelectSchedule()
local schdChase = ai_schedule.New( "AIFighter Chase" ) //creates the schedule used for this npc
schdChase:AddTask( "FindEnemy", { Class = "player", Radius = self.ViewDistance } )
schdChase:EngTask( "TASK_GET_PATH_TO_ENEMY", 0 )
schdChase:EngTask( "TASK_RUN_PATH_TIMED", 0.1 )
schdChase:EngTask( "TASK_WAIT", 0.1 )
local close = false
local tbl = player.GetAll()
for k,v in pairs(tbl) do
if v:GetPos():Distance(self:GetPos()) < 120 then
close = true
end
end
if close then
schdChase:EngTask( "TASK_STOP_MOVING", 0 )
schdChase:EngTask( "TASK_FACE_ENEMY", 0 )
schdChase:AddTask( "PlaySequence", { Name = "swing", Speed = 3 } )
end
self:StartSchedule( schdChase )
end
[/lua]
When I spawn it far away from me it runs to the specified Vector then stops. But, when I get 500 units or less to it I get told that I am being targeted, but the SNPC will not attack me even though it is being told to.
the map you are using needs to have nodes.
i know for a fact that gm_construct has nodes so try it on that
I am testing it on gm_construct.
They do not attack me after, self:SetSchedule(SCHED_FORCED_GO_RUN) is called.
If I get within the units i set of 75 for the attack animation then they attack me.
Is SetSchedule blocking the radius/forloop and what would be a workaround?
what is self.ViewDistance set to?
it will only work if the contact is within that range
[QUOTE=G4MB!T;36910496]what is self.ViewDistance set to?
it will only work if the contact is within that range[/QUOTE]
data.Radius = 512
Same thing.
its not the same thing actually
data is not ENT (or self)
you need to declare ViewDistance on self or it will be nil (unless you already have)
im assuming because it says you are being targetted that its moving towards you?
[QUOTE=G4MB!T;36910616]its not the same thing actually
data is not ENT (or self)
you need to declare ViewDistance on self or it will be nil (unless you already have)
im assuming because it says you are being targetted that its moving towards you?[/QUOTE]
Sorry trying to be more descriptive.
ENT.ViewDistance = 500
The distance is already set. The npc doesnt track me though AKA update its schedule when it sees me.
Quoted: If I get within the units i set of 75 for the attack animation then they attack me (THIS IS AFTER THE FORCED RUN)
ok but does it chase after you?
Okay i'm going to explain this again.
I spawn the zombie close to me. It chases me. I get too far away from it, then it runs to the indicated Vector. I run close enough to it so it can chase me again but it doesn't chase me. It sets me as the enemy.
Would you rather have me say what I would like it to do? Then see if you can come up with something/
ye just post what you want it to do an ill give it a go
i should point out that SNPCs arent really my forte but i can work them a little :P
I know this will sound stupid but are you sure that its not reading you as an enemy then when it gets back the the vector it still reads you as an enemy but will only follow a "new" enemy? Have you tried it with other players?
Specifics:
I want the NPC to attack players only in a sphere around itself of 512.
I want them to chase the player till the player gets 512 away from the NPC.
Once the player gets far enough away I want the NPC to run back to a specific Vector on the map and stay there.
After that I want the NPC to attack players who go inside the circle again.
[editline]24th July 2012[/editline]
[QUOTE=LedZepp;36910851]I know this will sound stupid but are you sure that its not reading you as an enemy then when it gets back the the vector it still reads you as an enemy but will only follow a "new" enemy? Have you tried it with other players?[/QUOTE]
It doesn't matter. I am a player and that is what it's checking for.
you need to make a schedule for chasing the player (which you already have) and one for going to the vector.
when it the target moves out of the radius set the schedule to the one that tells it to go to the vector.
once the npc is at the vector switch it to the finding one.
make sense?
Yeah but not to sound dense or anything, but I don't know how to set the schedule to one that sets a vector. I wouldn't know how to set it up being the 2nd day working with NPCS.
ye me neither lol i dont work with SNPCs so.. i will me later on though
Hopefully someone figures something out then. The way that this script was before though was that you could be any distance and it would attack you and I didn't like that so I decided to look into SNPC's and they're pretty sweet to mess with. But a pain in the ass to make 'em work.
yep lol theres section on the old gmod wiki mirror on SNPCs im assuming you have looked into it but just for the sake of it heres the link:
[url]http://maurits.tv/data/garrysmod/wiki/wiki.garrysmod.com/indexde03.html[/url]
Yeah I have seen that before. I'm actually using this guys base from his running zombies. I'm planning on making 3 bases.
Works great because you can use any ragdoll because of bone matrix function:
[URL="http://www.garrysmod.org/downloads/?a=view&id=57236"]http://www.garrysmod.org/downloads/?a=view&id=57236[/URL]
IIRC for some odd reason SNPC's enemy/attacking system is very glitchy. When I was working with them in a gamemode I made a while back, I noticed sometimes they wouldn't target you, or the SNPC WOULD target you, but it wouldn't attack you. You'd be better off trying to use source NPC's
What do you mean by source NPC's?
he means the npcs that come with source.
like for hl2 its the zombies and the combine and shit
[QUOTE=G4MB!T;36917733]he means the npcs that come with source.
like for hl2 its the zombies and the combine and shit[/QUOTE]
Oh okay. Still though, what i'm asking for shouldn't be to the extent of not making it happen.
Sorry, you need to Log In to post a reply to this thread.