• ERROR attempt to call method 'Team' <a nil value>
    9 replies, posted
Hey guys, I am making an experience and money system that works fine when I kill a player with default weapons from gmod (such as pistol/crowbar/smg/etc.) but when I use my custom SWEP (magnum) to kill the player I get the following error: [code] [ERROR] gamemodes/gamemodename/gamemode/init.lua:55: attempt to call method 'Team' <a nil value> 1. unknown - gamemodes/gamemodename/gamemode/init.lua:55 2. FireBullets - [C]:-1 3. unknown - gamemodes/gamemodename/entities/weapons/weapon_magnum.lua:65[/code] When getting killed by the SWEP (magnum) I get changed to some non-assigned team then respawn and this error shows up: [code] [ERROR] gamemodes/gamemodename/gamemode/init.lua:55: attempt to call method 'Team' <a nil value> 1. unknown - gamemodes/gamemodename/gamemode/init.lua:55 [/code] It is my belief that the SWEP messes up what team I am on when I die (as opposed to the default gmod weapons not messing up the teams) but am not sure how to correct this. Here is the related code for the init.lua: [code] function GM:PlayerDeath( ply, item, attacker ) print( "Player: " .. ply:Nick() .. " has died." ) if( ply:Team() == 4 && attacker:Team() != 4 ) then -- Line 55 (Team 4 is the only team that cannot use the magnum, Team 2 and 3 can use it) attacker:StatsAddXP( 50 ) attacker:StatsAddCoins( 50 ) elseif ( ply:Team() == 3 && attacker:Team() == 4 ) then attacker:StatsAddXP( 10 ) attacker:StatsAddCoins( 10 ) elseif ( ply:Team() == 2 && attacker:Team() == 4 ) then attacker:StatsAddXP( 10 ) attacker:StatsAddCoins( 10 ) end ply:SetTeam( 2 ) end [/code] Here is the related code for the magnum SWEP: [code] function SWEP:PrimaryAttack() if( not self:CanPrimaryAttack() ) then return end local ply = self.Owner local Bullet = {} Bullet.Num = self.Primary.NumShots Bullet.Src = ply:GetShootPos() Bullet.Dir = ply:GetAimVector() Bullet.Spread = Vector( self.Primary.Spread, self.Primary.Spread, 0 ) Bullet.Tracer = 0 Bullet.Damage = self.Primary.Damage Bullet.AmmoType = self.Primary.Ammo self:ShootEffects() self:FireBullets( Bullet ) -- Line 65 ..... end [/code]
Maybe the attacker it's not a player
Check that attacker is a player before calling player-only metafunctions. Attacker can also be an entity, and therefore Team would be a nil method. [editline]e[/editline] Damn ninja.
That makes sense. It's hard for me to test as I need a friend online to help but would attacker:GetOwner():Team() work to output the player team?
[QUOTE=Holywiremod;47712258]That makes sense. It's hard for me to test as I need a friend online to help but would attacker:GetOwner():Team() work to output the player team?[/QUOTE] Only if the attacker was an entity and that entity had an owner.
wouldn't just attcker:IsPlayer() be sufficient here?
Just got a friend to help and I put in attacker:GetOwner():Team() The problem is fixed. The attacker was the SWEP thus the owner must have been a player. Thanks for the help! Much appreciated.
[QUOTE=Holywiremod;47712410]Just got a friend to help and I put in attacker:GetOwner():Team() The problem is fixed. The attacker was the SWEP thus the owner must have been a player. Thanks for the help! Much appreciated.[/QUOTE] What happens when an npc kills you then?
[QUOTE=James xX;47712530]What happens when an npc kills you then?[/QUOTE] I'm not sure, NPCs aren't used in my gamemode. For arguments sake if an NPC did kill a player it would be best the NPC didn't receive XP and Coins anyway lol. It is likely an error would trigger though so I do appreciate you bringing that up.
[QUOTE=Holywiremod;47713355]I'm not sure, NPCs aren't used in my gamemode. For arguments sake if an NPC did kill a player it would be best the NPC didn't receive XP and Coins anyway lol. It is likely an error would trigger though so I do appreciate you bringing that up.[/QUOTE] Just run the check IsPlayer on the entity, and that will solve the case in one check
Sorry, you need to Log In to post a reply to this thread.