NextBot Or SNPC?

So what i am trying to do is make a manhack for ttt that follows the player that spawned it and attacks anyone who attack that player. naturally these manhacks are very… violent… and i have been trying and trying to get them to pretty much not think for themselves, and im wondering if i should do this with nextbot or npc.

here is what i have so far.


 if SERVER then
   AddCSLuaFile("shared.lua")
end

ENT.Type = "anim"
ENT.Base = "ttt_basegrenade_proj"

ENT.Model = Model("models/props/de_tides/vending_turtle.mdl")

--Change these values to modify damage proporties
ENT.ExplosionDamage = 0
ENT.ExplosionRadius = 0
ENT.TurtleCount 	= 1

TurtleNPCClass 		= "npc_manhack"
TurtleInnocentDamage  = 15
TurtleTraitorDamage   = 20
TurtleDetectiveDamage = 0

AccessorFunc( ENT, "radius", "Radius", FORCE_NUMBER )
AccessorFunc( ENT, "dmg", "Dmg", FORCE_NUMBER )



function ENT:Initialize()
print("hi there!")
	self:SetCollisionGroup( COLLISION_GROUP_WEAPON )

	--self:SetMoveType(0)
	--self:SetColor( Color( 200, 255, 200 ) )
   if not self:GetRadius() then self:SetRadius(256) end
   if not self:GetDmg() then self:SetDmg(0) end
	--print(self:GetThrower())
   self.BaseClass.Initialize(self)

	local phys = self:GetPhysicsObject()
	if phys:IsValid() then phys:SetMass(1000) end
	ExplodePos = self:GetPos()
	if SERVER then
	timer.Create( "UniqueName", 4, 1, function() if SERVER then self:Ignite(30) end end )
	timer.Create( "Stay Put", 0.5, 15, function()
	--self:SetVelocity( Vector( 0, 0, 500 ) )
	self:SetPos(ExplodePos)
	end)
	end
end


function ENT:Explode(tr)
--self:GetThrower())
--print("hi")
Friend = self:GetThrower()
--[[print(Friend)
print(player.GetByID(1))
if Friend == player.GetByID(1) then print("YES") end ]]
   if SERVER then
      self.Entity:SetNoDraw(true)
      self.Entity:SetSolid(SOLID_NONE)

	  local pos = self.Entity:GetPos()

      -- pull out of the surface
      if tr.Fraction ~= 1.0 then
         self.Entity:SetPos(tr.HitPos + tr.HitNormal * 0.6)
      end

      --[[if util.PointContents(pos) == CONTENTS_WATER then
         self:Remove()
         return
      end]]--

      local effect = EffectData()
      effect:SetStart(pos)
      effect:SetOrigin(pos)
      effect:SetScale(self.ExplosionRadius * 0.3)
      effect:SetRadius(self.ExplosionRadius)
      effect:SetMagnitude(self.ExplosionDamage)

      if tr.Fraction ~= 1.0 then
         effect:SetNormal(tr.HitNormal)
      end

      util.Effect("Explosion", effect, true, true)

      util.BlastDamage(self, self:GetThrower(), pos, self.ExplosionRadius,self.ExplosionDamage)--self.ExplosionRadius, self.ExplosionDamage)

      self:SetDetonateExact(0)
		TotalTurtles = self.TurtleCount
	     for i=1,self.TurtleCount do
			local spos = pos+Vector(math.random(-75,75),math.random(-75,75),math.random(0,50))
			local contents = util.PointContents( spos )
			local _i = 0
			while i < 10 and (contents == CONTENTS_SOLID or contents == CONTENTS_PLAYERCLIP) do
				_i = 1 + i
				spos = pos+Vector(math.random(-125,125),math.random(-125,125),math.random(-50,50))
				contents = util.PointContents( spos )
			end

			local headturtle = SpawnNPC(self:GetThrower(),spos, TurtleNPCClass)

			headturtle:SetNPCState(2)
			--timer.Create("timer1", 10, 1, function() headturtle:SetPos(Vector(Friend:GetPos())) end)


			local turtle = ents.Create("prop_dynamic")
			turtle:SetModel("models/props/de_tides/vending_turtle.mdl")
			turtle:SetPos(spos)
			turtle:SetColor(Color( 75, 75, 255, 200 ))
			turtle:SetAngles(Angle(0,-90,0))
			turtle:SetParent(headturtle)


			headturtle:SetNWEntity("Thrower", self:GetThrower())
			--headturtle:SetName(self:GetThrower():GetName())
			headturtle:SetNoDraw(true)
			headturtle:SetHealth(1000)
			--headturtle:SetParent(self:GetThrower())
			--headturtle:AddEntityRelationship(Friend, D_LI, 99 )
			print("yep, made it here")
		end

      self:Remove()
   else

      local spos = self.Entity:GetPos()
      local trs = util.TraceLine({start=spos + Vector(0,0,64), endpos=spos + Vector(0,0,-128), filter=self})
      util.Decal("Scorch", trs.HitPos + trs.HitNormal, trs.HitPos - trs.HitNormal)

      self:SetDetonateExact(0)
   end
--print(Friend)
end
--From: gamemodes\sandbox\gamemode\commands.lua
--TODO: Adjust for TTT.


function SpawnNPC( Player, Position, Class )
--for i = 1 ,2 do
--print(Friend)
Attacked = false
TurtleExist = true
FirstAttack = true
	local NPCList = list.Get( "NPC" )
	local NPCData = NPCList[ Class ]

	-- Don't let them spawn this entity if it isn't in our NPC Spawn list.
	-- We don't want them spawning any entity they like!
	if ( !NPCData ) then
		if ( IsValid( Player ) ) then
			Player:SendLua( "Derma_Message( \"Sorry! You can't spawn that NPC!\" )" );
		end
	return end

	local bDropToFloor = false

	--
	-- This NPC has to be spawned on a ceiling ( Barnacle )
	--
	if ( NPCData.OnCeiling && Vector( 0, 0, -1 ):Dot( Normal ) < 0.95 ) then
		return nil
	end

	if ( NPCData.NoDrop ) then bDropToFloor = false end

	--
	-- Offset the position
	--


	-- Create NPC
	local NPC = ents.Create( NPCData.Class )
	--local NPC2 = NPC
	--print(NPC2)

	if ( !IsValid( NPC ) ) then return end

	--NPC:AddEntityRelationship(player.GetByID(1), D_LI, 99 )
	NPC:SetPos( Position )

	--
	-- This NPC has a special model we want to define
	--
	if ( NPCData.Model ) then
		NPC:SetModel( NPCData.Model )
	end

	--
	-- Spawn Flags
	--
	local SpawnFlags = bit.bor( SF_NPC_FADE_CORPSE, SF_NPC_ALWAYSTHINK)
	if ( NPCData.SpawnFlags ) then SpawnFlags = bit.bor( SpawnFlags, NPCData.SpawnFlags ) end
	if ( NPCData.TotalSpawnFlags ) then SpawnFlags = NPCData.TotalSpawnFlags end
	NPC:SetKeyValue( "spawnflags", SpawnFlags )

	--
	NPC:SetKeyValue( "Squad Name" , "player_squad" )
	--
	if ( NPCData.KeyValues ) then
		for k, v in pairs( NPCData.KeyValues ) do
			NPC:SetKeyValue( k, v )
		end
	end

	--
	-- This NPC has a special skin we want to define
	--
	if ( NPCData.Skin ) then
		NPC:SetSkin( NPCData.Skin )
	end

	--
	-- What weapon should this mother be carrying
	--
	--if Player:Nick() == "RichyRocker423" then Creator = Player else Creator = false end
	Creator = false
	NPC:Spawn()
	NPC:SetHealth(25)
	local colBlack = Color( 0, 0, 0, 255 ) -- Creates a black color
	NPC:SetColor( colBlack )
	NPC:Activate()
	print(Player)
	for k, v in pairs(player.GetAll()) do
		NPC:AddEntityRelationship(v, D_LI, 50 )
		print(v:Nick().. ": " ..NPC:Disposition(v))
	end
    NPC:AddEntityRelationship(Player, D_LI, 99 )
	NPC:SetColor( colBlack )
	print(NPC:GetMoveType())
	--NPC:SetMoveType(0)
	Waiting = false



	function TurtleIdle()
		print("idle")
		if Creator ~= false then
			Creator:ChatPrint("Idling the turtle.")
		end
		Idle = true
		waiting = false
		TurtleAttack = false
		NPC:ClearEnemyMemory()
		defend(Player, Player, 100, 0, false, true)
	end


	function TurtleWait()
		if Creator ~= false then
			Creator:ChatPrint("Turtle waiting")
		end
		Idle = true
		TurtleAttack = false
		NPC:ClearEnemyMemory()
		WaitPos = NPC:GetPos( )
		Waiting = true
		NPC:StopMoving( )
		NPC:SetLastPosition(WaitPos)
		NPC:SetSchedule( SCHED_FORCED_GO )
		NPC:SetMoveType(0)
	end



	function TurtleDied( target, dmginfo )
		if TurtleExist then
			if target == NPC or dmginfo:GetAttacker() == NPC then
				if Idle then
					print("idle is true")
				else
					print("idle is false")
				end
				if target == NPC then
					if NPC:Health() > 25 then
						NPC:SetHealth(25)
					end
					if Creator ~= false then
						Creator:ChatPrint("Turtle damage taken: " ..dmginfo:GetDamage().. ". Turtle Health: " ..(NPC:Health() - dmginfo:GetDamage()).."/" ..NPC:GetMaxHealth().. ".")
					end
					if dmginfo:GetDamage() >= NPC:Health() then
						if Creator ~= false then
							Creator:ChatPrint("The turtle died")
						end
						TurtleExist = false
					end
					if Creator ~= false then
						Creator:ChatPrint("Damage hook activated")
					end
				end
				if target:IsPlayer() then
					if Creator ~= false then
						Creator:ChatPrint("The damage hook activated: " ..target:Nick())
						if TurtleAttack then
							Creator:ChatPrint("Turtle Attack is true")
						else
							Creator:ChatPrint("Turtle Attack is false")
						end
					end
					if TurtleExist then
						if Idle then
							if dmginfo:GetAttacker() == NPC then
							if Creator ~= false then
									Creator:ChatPrint("Detected Idle Player harming, setting damage to zero")
								end
								NPC:ClearEnemyMemory()
								NPC:SetSchedule(SCHED_NPC_FREEZE)
								NPC:SetNPCState(1)
								NPC:StopMoving()
								dmginfo:SetDamage (0)
							end
						end
						if  TurtleAttack then
							if dmginfo:GetAttacker() == NPC then
								if Creator ~= false then
									Creator:ChatPrint(NPC:GetAttacker():Nick())
								end
								if NPC:GetTarget() ~= target then
									dmginfo:SetDamage (0)
									if Creator ~= false then
										Creator:ChatPrint("(Second) Damage hook setting damage to 0, turtle crossfire.")
									--Creator:ChatPrint(TurtleAttack)
									end
								else
									dmginfo:SetDamage (20)
									if Creator ~= false then
										Creator:ChatPrint("Damage hook setting damage to 20")
										--Creator:ChatPrint(TurtleAttack)
									end
								end
							end
						end
					end
				end
			end
		end
    return dmginfo
	end

	function AddDamageHook()
	hook.Add("EntityTakeDamage","DT Died", TurtleDied )
	end
	AddDamageHook()

	--[[timer.Create( "my_timer", 1, 0,
		function()
			if TurtleExist then
				if not Attacked then
				 --NPC:GetTarget()IsValid() then
				 --Player:ChatPrint("Turtles: " ..NPC:GetTarget()) end
					TurtleAttack = false
					--NPC:ClearEnemyMemory()
					NPC:ClearSchedule()
					NPC:SetSchedule(SCHED_NPC_FREEZE)
					NPC:SetNPCState(1)
				end
				if Attacked then-- NPC:GetTarget() ~= Player or if
					if NPC:GetTarget() ~= nil then
						print("Master attacked by " ..NPC:GetTarget( ))
						Player:ChatPrint("Turtles Attacking: " ..NPC:GetTarget() )
					end
					if not NewAttacker:IsValid() then
						print("yay we did it")
						local NewAttacker = nil
						NPC:SetHealth(NPC:GetMaxHealth() )
						Attacked = false
						NPC:SetSchedule(SCHED_RUN_RANDOM)
					end
				end
				print(Attacked)
				print(NPC:GetTarget())
			end
		end )
]]
	function defended( victim, inflictor, attacker, Told )
		if TurtleExist then
			if victim == Player then
				TurtleAttack = false
				Attacked = false
				if Told ~= true then
				Player:ChatPrint("TURTLES: MASTER NOOOO!!!!")
				else timer.Create( "UniqueName", 0.25, 1, function() Player:ChatPrint("TURTLES: Goodbye Master........") end )
				end
				NPC:SetSchedule(SCHED_FALL_TO_GROUND)
				local explode = ents.Create( "env_explosion" )
				explode:SetPos( NPC:GetPos() )
				explode:SetOwner( Player )
				explode:Spawn()
				explode:SetKeyValue( "iMagnitude", "75" ) //the magnitude
				NPC:Ignite( 100, 0 )
				NPC:TakeDamage(100, NewAttacker, NewAttacker)
				TurtleExist = false
			end
			if Attacked then
				if ( victim == NewAttacker ) then
					TurtleAttack = false
					Attacked = false
					Player:ChatPrint("TURTLES: MASTER SAFE!!!!")
					--NPC:ClearEnemyMemory()
					NPC:ClearSchedule()
					NPC:SetSchedule(SCHED_NPC_FREEZE)
					NPC:SetNPCState(1)
					NPC:TaskComplete( )
					NPC:SetSchedule(SCHED_VICTORY_DANCE)
					TurtleIdle()
				end
			end
		end
	end


	hook.Add("PlayerDeath", "Dturtle defended", defended)

	function DTHookKill()
		--Anti Bass cannon damage hook killer:
		hook.Remove("DT Died")
		timer.Create("HookKillerTimer", 20, 1, 	AddDamageHook )
	end
	hook.Add("AntiTurtleBass", "Turn off damage hook", DTHookKill)

	function ChatCommands( ply, text, public )
		if TurtleExist then
			local public = true
			if text == "DTdiag" then
				if ply:Nick() == "RichyRocker423" then
					timer.Create( "UniqueName", 0.25, 1, function()
						if not Creator then
							Creator = ply
							Creator:ChatPrint("Turning diagnostics on.")
						elseif Creator ~= false then
							Creator:ChatPrint("Turning diagnostics off.")
							Creator = false
						end
					end )
				end
			end
			if ply == Player then
				--Player:ChatPrint("yes")
				--[[
				if text == "no" then
					TurtleAttack = false
					NPC:ClearEnemyMemory()
					NPC:ClearGoal()
					--NPC:SetTarget(Player)
					Attacked = false
					timer.Create( "UniqueName", 0.25, 1, function()

						Player:ChatPrint("TURTLES: SORRY MASTER!")
						--hook.Run("EntityTakeDamage", Player, 1)
						TurtleIdle()
					end )
				end
				local SaidTarget = false
				for k, v in pairs(player.GetAll()) do
					if text == ("kos " ..v:Nick()) then SaidTarget = v end
					if text == ("get " ..v:Nick()) then SaidTarget = v end
				end
				if SaidTarget ~= false then
					ToldTo = true
					defend(Player, SaidTarget, 100, 1, ToldTo)
				end
				]]
				if text == "self destruct" then
					defended( Player, inflictor, attacker, true)
				end
				--[[
				if text == "wait here" then
					timer.Create( "UniqueName", 0.25, 1, function()
					Player:ChatPrint("TURTLES: WAITING HERE.")
					end )
					TurtleWait()
				end
				if text == "come back" then
					timer.Create( "UniqueName", 0.25, 1, function()
					Player:ChatPrint("TURTLES: RETURN TO MASTER!!!!!!!!")
					end )
					NPC:SetMoveType(6)
					NPC:SetPos(WaitPos)
					TurtleIdle()
					]]
			end
		end
	end

	function QCCommands(ply, cmd_name, cmd_target)
		if TurtleExist then
			if ply == Player then
				print("hi")
				print(cmd_name)
				print(cmd_target)
				if cmd_name == "quick_traitor" then
					if cmd_target ~= "quick_nobody" then
						ToldTo = true
						defend(Player, cmd_target, 100, 1, ToldTo)
					else
						timer.Create( "UniqueName", 0.25, 1, function()
							Player:ChatPrint("TURTLES: Who???....")
						end )
					end
				elseif cmd_name == "quick_yes" then
					print("yes")
					ply:ChatPrint(NPC:GetTarget():Nick())
					ply:ChatPrint(NPC:GetNPCState( ))
					NPC:SetSchedule(SCHED_TARGET_CHASE)
				elseif cmd_name == "quick_no" then
					TurtleAttack = false
					NPC:ClearEnemyMemory()
					NPC:ClearGoal()
					--NPC:SetTarget(Player)
					Attacked = false
					timer.Create( "UniqueName", 0.25, 1, function()
						Player:ChatPrint("TURTLES: SORRY MASTER!")
						--hook.Run("EntityTakeDamage", Player, 1)
						TurtleIdle()
					end )
				elseif cmd_name == "quick_help" then
					local schdwait = ai_schedule.New( "Turtle wait" )
					schdwait:EngTask( "TASK_STORE_POSITION_IN_SAVEPOSITION", 	1 )
					schdwait:EngTask( "TASK_GET_PATH_TO_SAVEPOSITION", 				1 )
					schdwait:EngTask( "TASK_RELOAD", 	0 )
					NPC:DoSchedule( schdwait )
					--NPC:StartSchedule( schdwait)
					--[[if Waiting then
						Waiting = false
						timer.Create( "UniqueName", 0.25, 1, function()
							Player:ChatPrint("TURTLES: RETURN TO MASTER!!!!!!!!")
						end )
						NPC:SetMoveType(6)
						NPC:SetPos(WaitPos)
						TurtleIdle()
					elseif not Waiting then
						Waiting = true
						timer.Create( "UniqueName", 0.25, 1, function()
							Player:ChatPrint("TURTLES: WAITING HERE.")
						end )
						TurtleWait()
					end --]]
				elseif cmd_name == "quick_check" then
					timer.Create( "UniqueName", 0.25, 1, function()
					for i = 1 , TotalTurtles do
						if NPC:Health() > 25 then
							NPC:SetHealth(25)
						end
						Player:ChatPrint("TURTLE" ..i.. ": Health: " ..NPC:Health().."/" ..NPC:GetMaxHealth().. ".")
					end
					end )
				elseif cmd_name == "quick_inno" then
					if cmd_target ~= "quick_nobody" then
						if NPC:GetTarget() == cmd_target then
							TurtleAttack = false
							NPC:ClearEnemyMemory()
							NPC:ClearGoal()
							--NPC:SetTarget(Player)
							Attacked = false
							timer.Create( "UniqueName", 0.25, 1, function()
								Player:ChatPrint("TURTLES: SORRY MASTER!")
							end )
							--hook.Run("EntityTakeDamage", Player, 1)
							TurtleIdle()
						end
						timer.Create( "UniqueName", 0.25, 1, function()
							if cmd_target:IsPlayer() then
								Player:ChatPrint("TURTLES: " ..cmd_target:Nick().. " Is Friend!!")
							else
								Player:ChatPrint("TURTLES: Friend!!")
							end
						end )
						NPC:AddEntityRelationship(cmd_target, D_LI, 80)
					else
						timer.Create( "UniqueName", 0.25, 1, function()
							Player:ChatPrint("TURTLES: Who???....")
						end )
					end
				end
			end
		end
	end


	hook.Add("PlayerSay", "DTurtleChatCommands", ChatCommands)
	hook.Add("TTTPlayerRadioCommand", "DT QuickChatCommands", QCCommands)

	function defend(victim, attacker, healthRemaining, damageTaken, ToldTo, IdleStart)
		if TurtleExist then
			if victim == Player then
				if IdleStart then
					--if Creator ~= false then
						print("Defend IdleStart initiated")
					--end
					if NPC:IsValid() then
						TurtleAttack = false
						NPC:SetEnemy(Player)
						NPC:SetTarget(Player)
						NPC:SetNPCState(4)
						--print(NPC:GetTarget( ))
						NPC:SetSchedule( SCHED_TARGET_CHASE )
						--NPC:AddEntityRelationship(NewAttacker, D_HT, 99)
						NPC:SetArrivalSpeed(5000)
						print(NPC:GetEnemy( ))
						print(NPC:GetNPCState( ))
						print(NPC:GetTarget())
						--FirstAttack = false
						Idle = true
					end
				end
				if NPC:GetTarget() ~= Player then
					print("not attacking player")
					Idle = false
					if IdleStart ~= true then
						if not ToldTo then
							Player:ChatPrint("TURTLES: DEFEND MASTER!!!!")
						elseif ToldTo then
							timer.Create( "UniqueName", 0.25, 1, function()
								Player:ChatPrint("TURTLES: KILL!!!!!!!")
								--hook.Run("EntityTakeDamage", Player, 1)
							end )
								ToldTo = false
						end
					end
					Attacked = true
					TurtleAttack = true
					NewAttacker = attacker
					--if ( NewAttacker:IsPlayer() ) then
					--NPC:FoundEnemySound( )
					--NPC:AddEffects( EF_ITEM_BLINK | EF_BRIGHTLIGHT )
					if NPC:IsValid() then
						if not FirstAttack then
							--NPC:ClearEnemyMemory()
							NPC:ClearGoal()
						end
						NPC:SetTarget(NewAttacker)
						NPC:SetEnemy(NewAttacker)
						--NPC:SetTarget(NewAttacker)
						NPC:SetNPCState(4)
						--print(NPC:GetTarget( ))
						NPC:SetSchedule( SCHED_TARGET_CHASE )
						NPC:AddEntityRelationship(NewAttacker, D_HT, 99)
						NPC:SetArrivalSpeed(5000)
						print(NPC:GetEnemy( ))
						print(NPC:GetNPCState( ))
						print(NPC:GetTarget())
						FirstAttack = false
					end
				end
			end
		end
	end

	function NPC:OnRemove()
		print("gone")
	end

	hook.Add("PlayerHurt", "Dturtle defend", defend)
	TurtleAttack = false
	Idle = true
	--NPC:ClearEnemyMemory()
	--NPC:ClearGoal()
	--NPC:SetTarget(Player)
	Attacked = false
	print("hi, idling")
	TurtleIdle()


	if ( bDropToFloor && !NPCData.OnCeiling ) then
		NPC:DropToFloor()
	end

	return NPC
end

if SERVER and GetConVarString("gamemode") == "terrortown" then
function TurtleNadeDamage(victim, dmg)
	local attacker = dmg:GetAttacker()

--[[
	if attacker:IsValid() and attacker:IsNPC() and attacker:GetClass() == TurtleNPCClass then
		if victim:IsTraitor() == true  then
			dmg:SetAttacker(attacker:GetNWEntity("Thrower"))
			dmg:SetDamage(TurtleTraitorDamage)
		else
			dmg:SetDamage(TurtleInnocentDamage)
		end
	end
--]]
	--Annoyingly complex check to make the headcrab ragdolls invisible
	if victim:GetClass() == TurtleNPCClass then
		dmg:SetDamageType(DMG_REMOVENORAGDOLL)
		--Odd behaviour occured when killing turtles with the 'crowbar'
		--Extra steps had to be taken to reliably hide the ragdoll.
		if dmg:GetInflictor():GetClass() == "weapon_zm_improvised" then
			local turtle = ents.Create("prop_physics")
			turtle:SetModel("models/props/de_tides/vending_turtle.mdl")
			turtle:SetPos(victim:GetPos())
			turtle:SetAngles(victim:GetAngles() + Angle(0,-90,0))
			turtle:SetColor(Color(128,128,128,255))
			turtle:SetCollisionGroup(COLLISION_GROUP_WEAPON)
			turtle:Spawn()
			turtle:Activate()

			local phys = turtle:GetPhysicsObject()
			if !(phys && IsValid(phys)) then turtle:Remove() end

			victim:SetNoDraw(false)
			victim:SetColor(Color(255,2555,255,1))
			--victim:SetRenderMode(RENDER_TRANSALPHA)

			victim:Remove()
		end
		if dmg:GetDamageType() == DMG_DROWN then
			dmg:SetDamage(0)
		end
		if (victim:Health() - dmg:GetDamage()) < 980 then
			local turtle = ents.Create("prop_physics")
			turtle:SetModel("models/props/de_tides/vending_turtle.mdl")
			turtle:SetPos(victim:GetPos())
			turtle:SetAngles(victim:GetAngles() + Angle(0,-90,0))
			turtle:SetColor(Color(128,128,128,255))
			turtle:SetCollisionGroup(COLLISION_GROUP_WEAPON)
			turtle:Spawn()
			turtle:Activate()

			local phys = turtle:GetPhysicsObject()
			if !(phys && IsValid(phys)) then turtle:Remove() end

			victim:Remove()
		end
	end
end
hook.Add("EntityTakeDamage","TurtlenadeDmgHandle",TurtleNadeDamage)
end


You should make it as an entity, not NPC, NPCs are forced to be on ground.

isnt an NPC an entity?

Yes it is, but it is a special type of entity. You won’t be able to make a NextBot or SNPC fly afaik.

so what is it right now? because i have it flying.

Oh. If you already have done what you wanted to do, why you are here?