When a player is spectated, they still have their weapons and player model. They also don't spectate an entity with spectateEntity.
Post your code, how else are we meant to know what you're doing wrong?
[/SUB][QUOTE=Internet1001;44394703]Post your code, how else are we meant to know what you're doing wrong?[/QUOTE]
ent:Spectate( OBS_MODE_CHASE )
ent:SpectateEntity( ply )
the ent is the the spectating player, and ply is the player that ent is going to be spectating.
Post the full code, we can't tell what's going on with just those two functions alone.
This is the function it's in. It's in the init.lua of a gamemode.
function GM:Think()
net.Receive( "RightClick", function( length, ply )
local value = tonumber(net.ReadString())
if value == 0 then
--if ply:GetNWInt( "Cloaked" ) == 1 then
ply:SetNWInt( "Cloaked", 0 )
ply:SetMaterial( "models/glass" )
ply:DrawShadow( true )
elseif value == 1 then
--elseif ply:GetNWInt( "Cloaked" ) == 0 then
ply:SetNWInt( "Cloaked", 1 )
ply:SetMaterial( "sprites/heatwave" )
ply:DrawShadow( false )
end
end)
net.Receive( "E", function( length, ply )
local tr = ply:GetEyeTrace()
local ent = tr.Entity
print(ply:GetNWInt( "Disguised" ))
if tr.Entity ~= nil then
--if IsValid(tr.Entity) then
local entX = tr.Entity:GetPos().x
local entY = tr.Entity:GetPos().y
local entZ = tr.Entity:GetPos().z
local plyX = ply:GetPos().x
local plyY = ply:GetPos().y
local plyZ = ply:GetPos().z
local dX = (entX-plyX)^2
local dY = (entY-plyY)^2
local dZ = (entZ-plyZ)^2
local distance = math.sqrt( dX + dY + dZ )
if ply:GetNWInt( "Disguised" ) == 0 then
if distance <= 120 and ply:GetNWInt( "Disguised" ) == 0 then
if ent:IsPlayer() then
if ply:GetNWInt( "Cloaked" ) == 0 then
local PlyModel = ent:GetModel()
local PlyPos = ent:GetPos()
local PlyWeps = ent:GetWeapons() -- This is a table, get the stuff with a for loop
ent:Spectate( OBS_MODE_CHASE )
ent:SpectateEntity( ply )
--ply:SetModel( PlyModel )
--ply:SetPos( PlyPos )
--ent:Spectate( OBS_MODE_ROAMING )
--ent:SpectateEntity( ply )
--[[for i,wep in pairs(PlyWeps) do
ply:Give( wep )
end]]
ply:SetNWInt( "Disguised", 1 )
ply:SetNWInt( "Cloaked", 0 )
end
elseif ent:GetClass() == "prop_physics" then
ply:Spectate( OBS_MODE_CHASE )
ply:SpectateEntity( ent )
ply:SetNWInt( "SpectateEnt", ent )
ply:SetNWInt( "Disguised", 1 )
ply:SetNWInt( "Cloaked", 0 )
end
end
elseif ply:GetNWInt( "Disguised" ) == 1 then
if ent:GetClass() == "prop_physics" then
ply:UnSpectate()
ply:SetNWInt( "Cloaked", 1 )
ply:SetNWInt( "Disguised", 0 )
local plyPos = ply:GetPos()
local HitPos = ply:GetEyeTrace().HitPos
local eyePos = ply:EyePos()
local eyeAng = ply:EyeAngles()
ply:KillSilent()
ply:Spawn()
ply:SetPos( plyPos )
ply:SetMaterial( "sprites/heatwave" )
ply:DrawShadow( false )
ply:SetEyeAngles( eyeAng )
-- z x y
--print(ToaX)
--print(HitPos:Angle())
elseif ent:IsPlayer() then
ent:UnSpectate()
ent:KillSilent()
ent:Spawn()
ply:SetNWInt( "Cloaked", 1 )
ply:SetNWInt( "Disguised", 0 )
local plyPos = ply:GetPos()
local HitPos = ply:GetEyeTrace().HitPos
local eyePos = ply:EyePos()
local eyeAng = ply:EyeAngles()
ply:KillSilent()
ply:Spawn()
ply:SetPos( plyPos )
ply:SetMaterial( "sprites/heatwave" )
ply:DrawShadow( false )
ply:SetEyeAngles( eyeAng )
end
end
--end
end
end)
net.Receive( "Cloak", function( length, ply )
ply:SetNWInt( "CloakPanel", net.ReadEntity() )
end)
end
[CODE]
function GM:Think()
net.Receive( "RightClick", function( length, ply )
local value = tonumber(net.ReadString())
if value == 0 then
--if ply:GetNWInt( "Cloaked" ) == 1 then
ply:SetNWInt( "Cloaked", 0 )
ply:SetMaterial( "models/glass" )
ply:DrawShadow( true )
elseif value == 1 then
--elseif ply:GetNWInt( "Cloaked" ) == 0 then
ply:SetNWInt( "Cloaked", 1 )
ply:SetMaterial( "sprites/heatwave" )
ply:DrawShadow( false )
end
end)
net.Receive( "E", function( length, ply )
local tr = ply:GetEyeTrace()
local ent = tr.Entity
print(ply:GetNWInt( "Disguised" ))
if tr.Entity ~= nil then
--if IsValid(tr.Entity) then
local entX = tr.Entity:GetPos().x
local entY = tr.Entity:GetPos().y
local entZ = tr.Entity:GetPos().z
local plyX = ply:GetPos().x
local plyY = ply:GetPos().y
local plyZ = ply:GetPos().z
local dX = (entX-plyX)^2
local dY = (entY-plyY)^2
local dZ = (entZ-plyZ)^2
local distance = math.sqrt( dX + dY + dZ )
if ply:GetNWInt( "Disguised" ) == 0 then
if distance <= 120 and ply:GetNWInt( "Disguised" ) == 0 then
if ent:IsPlayer() then
if ply:GetNWInt( "Cloaked" ) == 0 then
local PlyModel = ent:GetModel()
local PlyPos = ent:GetPos()
local PlyWeps = ent:GetWeapons() -- This is a table, get the stuff with a for loop
ent:Spectate( OBS_MODE_CHASE )
ent:SpectateEntity( ply )
--ply:SetModel( PlyModel )
--ply:SetPos( PlyPos )
--ent:Spectate( OBS_MODE_ROAMING )
--ent:SpectateEntity( ply )
--[[for i,wep in pairs(PlyWeps) do
ply:Give( wep )
end]]
ply:SetNWInt( "Disguised", 1 )
ply:SetNWInt( "Cloaked", 0 )
end
elseif ent:GetClass() == "prop_physics" then
ply:Spectate( OBS_MODE_CHASE )
ply:SpectateEntity( ent )
ply:SetNWInt( "SpectateEnt", ent )
ply:SetNWInt( "Disguised", 1 )
ply:SetNWInt( "Cloaked", 0 )
end
end
elseif ply:GetNWInt( "Disguised" ) == 1 then
if ent:GetClass() == "prop_physics" then
ply:UnSpectate()
ply:SetNWInt( "Cloaked", 1 )
ply:SetNWInt( "Disguised", 0 )
local plyPos = ply:GetPos()
local HitPos = ply:GetEyeTrace().HitPos
local eyePos = ply:EyePos()
local eyeAng = ply:EyeAngles()
ply:KillSilent()
ply:Spawn()
ply:SetPos( plyPos )
ply:SetMaterial( "sprites/heatwave" )
ply:DrawShadow( false )
ply:SetEyeAngles( eyeAng )
-- z x y
--print(ToaX)
--print(HitPos:Angle())
elseif ent:IsPlayer() then
ent:UnSpectate()
ent:KillSilent()
ent:Spawn()
ply:SetNWInt( "Cloaked", 1 )
ply:SetNWInt( "Disguised", 0 )
local plyPos = ply:GetPos()
local HitPos = ply:GetEyeTrace().HitPos
local eyePos = ply:EyePos()
local eyeAng = ply:EyeAngles()
ply:KillSilent()
ply:Spawn()
ply:SetPos( plyPos )
ply:SetMaterial( "sprites/heatwave" )
ply:DrawShadow( false )
ply:SetEyeAngles( eyeAng )
end
end
end
end)
net.Receive( "Cloak", function( length, ply )
ply:SetNWInt( "CloakPanel", net.ReadEntity() )
end)
end
[/CODE]
I tried to format this as best as possible, but HTML is messing with my indents
(This is the same code as above, just more readable)
[QUOTE=Stargazer808;44394651]When a player is spectated, they still have their weapons and player model. They also don't spectate an entity with spectateEntity.[/QUOTE]
You may either need to switch their team to TEAM_SPECTATOR / kill them, or in PreDrawPlayer return true; to not render them if they're spectating.
Or, he could try using ply:StripWeapons() and ply:SetNoDraw(true).
Those two would solve his problems, without doing that.
[QUOTE=Leystryku;44396684]Or, he could try using ply:StripWeapons() and ply:SetNoDraw(true).
Those two would solve his problems, without doing that.[/QUOTE]
Interesting. But when he leaves spectate mode he'd need to be given his weapons again.
I do this:
[lua]local PLAYER = FindMetaTable( "Player" );
function PLAYER:Invisible( )
// If we don't have a variable defined to hold the status of invisibility, or the cache variable isn't defined, or the cache has expired
if ( !self.__Invisible || !self.__InvisibleCache || CurTime( ) - self.__InvisibleCache > 1 ) then
// Update the invisibility status
self.__Invisible = self:GetNWInt( "Disguised" );
// Update the cache
self.__InvisibleCache = CurTime( );
end
// Return it
return self.__Invisible;
end
//
// Hook to see if player is rendered or not
// Returns: boolean preventDraw
function GM:PrePlayerDraw( Player )
if ( Player:Invisible( ) ) then
return true;
end
return false;
end[/lua]
Where PLAYER:Invisible is a custom function which returns true or false depending on whether or not they're invisible. This hides weapons and the player. Instead of hard-coding it, it can be written as a hook:
[lua]// If added as a hook, respect other hooks which may call it, only return true; for logic which should hide the player.
hook.Add( "PrePlayerDraw", "HideSpectatingPlayers", function( Player )
if ( Player:Invisible( ) ) then
return true;
end
end );[/lua]
EDIT: Edited to include Invisible in your context; read this as to why I "cached" it: [url]https://dl.dropboxusercontent.com/u/26074909/tutoring/benchmarking_tips/benchmarking_nw_vars.lua[/url]
[url]https://dl.dropboxusercontent.com/u/26074909/tutoring/benchmarking_tips/benchmarking_hud_stuff.lua[/url]
Sorry, you need to Log In to post a reply to this thread.