Hello, I'm developing new gamemode that is inspired by Splinter Cell: Chaos Theory. So I am a fairly good Lua coder, but I'm having trouble with NPC Relationships.
[CODE]hook.Add("Think", "stealthAI", function()
local light = (render.GetLightColor(LocalPlayer():GetPos())*Vector(255,255,255)):Length()*0.9
local npc = ents.FindByClass("npc_*")
local ply = LocalPlayer()
if light < 3.0 then
npc:AddEntityRelationship(ply, D_NU, 10)
end
end)[/CODE]
And I get this error when I walk into the dark.
[CODE][ERROR] gamemodes/thekiller/gamemode/cl_init.lua:71: attempt to call method 'AddEntityRelationship' (a nil value)
1. v - gamemodes/thekiller/gamemode/cl_init.lua:71
2. unknown - lua/includes/modules/hook.lua:84
[/CODE]
Does anyone know a fix for this?
AddEntityRelationship is a serverside function.
Is your script shared/clientsided?
Edit: Nevermind, it is clientsided. You used LocalPlayer().
I think if you did a 'for' loop through player.GetHumans() then set the relationship then it'd work serverside with no networking needed. (Probably don't use player.GetAll() since it would check bots as well)
[QUOTE=MPan1;49038126]I think if you did a 'for' loop through player.GetHumans() then set the relationship then it'd work serverside with no networking needed. (Probably don't use player.GetAll() since it would check bots as well)[/QUOTE]
I'll try that. Thanks for the help!
[editline]3rd November 2015[/editline]
[QUOTE=MPan1;49038126]I think if you did a 'for' loop through player.GetHumans() then set the relationship then it'd work serverside with no networking needed. (Probably don't use player.GetAll() since it would check bots as well)[/QUOTE]
Nope, it didn't work. I believe that it should have worked.
[CODE]
hook.Add("Think", "stealthAI", function()
for k,v in pairs(player.GetHumans()) do
local light = (render.GetLightColor(v:GetPos())*Vector(255,255,255)):Length()
local npc = ents.FindByClass("npc_combine_s")
if light > 3.0 then
npc:AddEntityRelationship(ply, D_NU, 99)
end
end
end)[/CODE]
Sorry, should've tested that myself. Don't know what the problem is though since I'm just a cardboard box
Doesn't ents.FindByClass return a table? You cant run AddEntityRelationship on a table.
[editline]asd[/editline]
Example courtesy to the wiki
[lua]function ENT:Think()
local enemy = ents.FindByClass( "npc_*" ) --Find any spawned entity in map with class beginning at npc
for _, x in pairs( enemy ) do --for every found entity do
if !x:IsNPC() then return end -- if found entity is not NPC then do nothing
if x:GetClass() != self:GetClass() then -- if found entity is not self entity then continue
x:AddEntityRelationship( self, D_HT, 99 ) -- found entity will hate self entity
self:AddEntityRelationship( x, D_HT, 99 ) -- self entity will hate found entity
end
end
end[/lua]
[QUOTE=austinn2003;49041295]I'll try that. Thanks for the help!
[editline]3rd November 2015[/editline]
Nope, it didn't work. I believe that it should have worked.
[CODE]
hook.Add("Think", "stealthAI", function()
for k,v in pairs(player.GetHumans()) do
local light = (render.GetLightColor(v:GetPos())*Vector(255,255,255)):Length()
local npc = ents.FindByClass("npc_combine_s")
if light > 3.0 then
npc:AddEntityRelationship(ply, D_NU, 99)
end
end
end)[/CODE][/QUOTE]
You also used for k,v with player.GetHumans, but defined the current player value as "ply" instead of "v".
Also what above said, ents.Find returns a table.
[QUOTE=DeathWard;49046605]You also used for k,v with player.GetHumans, but defined the current player value as "ply" instead of "v".
Also what above said, ents.Find returns a table.[/QUOTE]
Oh, I'm so stupid. Thanks for telling me! I'll fix that and see if that works.
[QUOTE=DeathWard;49046605]You also used for k,v with player.GetHumans, but defined the current player value as "ply" instead of "v".
Also what above said, ents.Find returns a table.[/QUOTE]
Hmm.. It seems the relationship function doesn't seem to work. I've asked my friend about this and he said, "All of the default Half Life 2 enemies have hard coded relationships." Has anyone got the relationship function to work?
[QUOTE=austinn2003;49056022]Hmm.. It seems the relationship function doesn't seem to work. I've asked my friend about this and he said, "All of the default Half Life 2 enemies have hard coded relationships." Has anyone got the relationship function to work?[/QUOTE]
Can you show current code?
Instead of looping through all players, why not instead use ents.FindInSphere() based on NPC's location.
I'm changing my gamemode. I will not need this. I am tagging this as solved.
Sorry, you need to Log In to post a reply to this thread.