Money system help?

Hello,

I need help with my Money System.
So i got a Money System that adds money with SetNW to the Players SteamID. But I Got a Bow And if i shoot it there comes an entity out of it.
But it cant get the Players SteamID out of the entity.
I added the SetOwner(self.Owner)

Error:



[gamemodes
amehere\gamemode\money.lua:34] attempt to call method 'SteamID' (a nil value)(Hook: OnNPCKilled)


Btw, It works with Melee Weapons Or Shotguns. It only does that with my bow or throwable SWEPS.

We could do with seeing your money.lua first of all.

Show us some code?

[lua]MoneySystem = {}
MoneySystem.File = “MoneyNameHerev5.txt”

MoneySystem.Database = {}
if (file.Exists(MoneySystem.File)) then
MoneySystem.Database = glon.decode(file.Read(MoneySystem.File))
end

function MoneySystem.FirstSpawn(ply)
local steamid = ply:SteamID()

local startermoney = 1000


if (MoneySystem.Database[steamid]) then 
	ply:ChatPrint("Welcome Back " .. ply:GetName() .. "!")
else
	MoneySystem.Database[steamid] = startermoney 
	ply:ChatPrint("Since this is your first time on the server, you are given " .. startermoney .. " Coins.")
end
ply:SetNWInt("money", MoneySystem.Database[steamid])

end
hook.Add(“PlayerInitialSpawn”, “MoneySystem FirstSpawn”, MoneySystem.FirstSpawn)

function MoneySystem.Add(ply, money)
steamid = ply:SteamID()
MoneySystem.Database[steamid] = MoneySystem.Database[steamid]+money
ply:SetNWInt(“money”, MoneySystem.Database[steamid])
end

function MoneySystem.Remove(ply, money)
steamid = ply:SteamID()
if MoneySystem.Database[steamid] > money then
MoneySystem.Database[steamid] = MoneySystem.Database[steamid]-money
ply:SetNWInt(“money”, MoneySystem.Database[steamid])
return true
else
return false
end
end

function MoneySystem.Save()
file.Write(MoneySystem.File, glon.encode(MoneySystem.Database))
end
hook.Add(“ShutDown”, “MoneySystem Save”, MoneySystem.Save)

timer.Create(“MoneySystem SaveTimer”, 600, 0, MoneySystem.Save)

function GM:OnNPCKilled( victim, ply, weapon )
MoneySystem.Remove(ply, 1)
MoneySystem.Add(ply, 11)

end

/*
use MoneySystem.Add(steamid, money) to add money
use MoneySystem.Remove(steamid, money) to remove money. This returns false if the player is unable to pay this amount, and true if he paid

*/[/lua]

Thats the Money.lua Need the SWEP Code to?

Can you use [noparse][lua]codehere[/lua][/noparse] when posting code please? Makes it so we can see the line numbers.

And from what I can read on that code. We’re going to need the SWEP code to.

Ah Sorry,
[lua]

SWEP.Contact = “Elqauto”
SWEP.Purpose = “”
SWEP.Instructions = “”
SWEP.Spawnable = true
SWEP.AdminSpawnable = false

–SWEP.Base = “weapon_cs_base”
SWEP.ViewModel = “models/aoc_weapon/v_longbow.mdl”
SWEP.WorldModel = “models/aoc_weapon/w_longbow.mdl”
SWEP.Primary.Automatic = false
SWEP.Primary.ClipSize = 1
SWEP.Primary.DefaultClip = 20
SWEP.Primary.Ammo = “XBowBolt”
SWEP.Primary.Delay = 1.8
SWEP.Primary.Damage = 200
SWEP.Primary.ReloadTime = 2.1
SWEP.Secondary.ClipSize = -1
SWEP.Secondary.DefaultClip = -1
SWEP.Secondary.Automatic = false
SWEP.Secondary.Ammo = “none”
SWEP.IronSightsPos = Vector( -5.2, -3, 3 )
SWEP.IronSightsAng = Vector( 2.8, -2.5, 3 )

// PLEASE DO NOT EDIT ANY CODE BELOW THIS LINE! UNLESS YOU KNOW WHAT YOU ARE DOING!

if ( SERVER ) then

AddCSLuaFile( "shared.lua" )

SWEP.HoldType			= "pistol"
SWEP.Weight				= 15
SWEP.AutoSwitchTo		= true
SWEP.AutoSwitchFrom		= false

end

if ( CLIENT ) then

SWEP.PrintName			= "Bow"			
SWEP.Author				= "Omen"
SWEP.Slot				= 4
SWEP.SlotPos			= 5
SWEP.IconLetter			= "r"
SWEP.DrawCrosshair 		= false
SWEP.DrawAmmo			= true
SWEP.ViewModelFlip		= false
SWEP.CSMuzzleFlashes	= false
surface.CreateFont( "csd", ScreenScale( 30 ), 500, true, true, "CSKillIcons" )
killicon.AddFont( "weapon_xbow", "CSKillIcons", SWEP.IconLetter, Color( 255, 80, 0, 255 ) )

end

function SWEP:Precache()

end

function SWEP:Initialize()

if ( SERVER ) then
	self:SetWeaponHoldType( self.HoldType )
end

self.Weapon:SetNetworkedBool( "Ironsights", false )

end

function SWEP:Reload()
self.Weapon:DefaultReload( ACT_VM_RELOAD );
self:SetIronsights( false )
self.Weapon:EmitSound( “Weapon_Crossbow.Reload” )
end

function SWEP:TakePrimaryAmmo( num )

if ( self.Weapon:Clip1() <= 0 ) then

	if ( self:Ammo1() <= 0 ) then return end
	
		self:Reload()
		
		self.Owner:RemoveAmmo( num, self.Weapon:GetPrimaryAmmoType() )
		
	return end
	
self.Weapon:SetClip1( self.Weapon:Clip1() - num )

end

function SWEP:PrimaryAttack()
self.Weapon:SetNextSecondaryFire( CurTime() + self.Primary.Delay )
self.Weapon:SetNextPrimaryFire( CurTime() + self.Primary.Delay )
if ( !self:CanPrimaryAttack() ) then return end

		self:TakePrimaryAmmo( 1 )
		
		self.Weapon:SendWeaponAnim( ACT_VM_PRIMARYATTACK )
		
		self.Weapon:EmitSound( "Weapon_Crossbow.Single" )
		
		self.Owner:SetAnimation( PLAYER_ATTACK1 )
		
		self.Weapon:SetNextPrimaryFire( CurTime() + self.Primary.Delay )
		
		
	self.Owner:ViewPunch(Angle(math.Rand(-1,1),math.Rand(-1,1),math.Rand(-9,-4))) --soft viewpunch
	
			if (!CLIENT) then
			
				local Ang = self.Owner:EyeAngles()
				
				Ang.pitch = Ang.pitch - 5
				
				self.Owner:SetEyeAngles( Ang ) --rough viewpunch
			
			end
if (SERVER) then


self.Bolt = ents.Create("sBolt")
self.Bolt:SetPos(self.Owner:GetShootPos() + self.Owner:GetForward()*34)
self.Bolt:SetAngles(self.Owner:EyeAngles() + Angle( 0, 0, 90 ))
self.Bolt:SetPhysicsAttacker(self.Owner)
self.Bolt:SetOwner(self.Owner:SteamID())
self.Bolt:Spawn()
self.Bolt:GetPhysicsObject():ApplyForceCenter(self.Owner:GetAimVector()*9800)

for k, v in pairs(ents.FindInSphere(self.Owner:GetPos(), 60)) do
if v:GetClass() == “env_fire” || v:GetClass() == “env_entity_igniter” || v:GetClass() == “env_firesource” || v:GetClass() == “env_fire_trail” || v:IsOnFire() then
– self.Bolt:Fire(“ignite”,"",0) --Easyer // you can get errors so use belove V

self.Fire = ents.Create(“env_fire_trail”)
self.Fire:SetPos(self.Bolt:GetPos())
self.Fire:SetParent(self.Bolt)
self.Fire:Spawn()
self.Fire:Fire(“kill”,"",10)
self.FireDamage = ents.Create(“point_hurt”)
self.FireDamage:SetPos(self.Bolt:GetPos())
self.FireDamage:SetParent(self.Bolt)
self.FireDamage:SetKeyValue( “DamageRadius”, 30 )
self.FireDamage:SetKeyValue( “Damage”, 7 )
self.FireDamage:SetKeyValue( “DamageDelay”, 0,2 )
self.FireDamage:SetKeyValue( “DamageType “, 2097152 ) – SlowBurn
self.FireDamage:Spawn()
self.FireDamage:Fire(“kill”,””,10)

	end
end

end
end

local IRONSIGHT_TIME = 0.25
function SWEP:GetViewModelPosition( pos, ang )

if ( !self.IronSightsPos ) then return pos, ang end

local bIron = self.Weapon:GetNetworkedBool( "Ironsights" )

if ( bIron != self.bLastIron ) then

	self.bLastIron = bIron 
	self.fIronTime = CurTime()
	
	if ( bIron ) then 
		self.SwayScale 	= 0.3
		self.BobScale 	= 0.1
	else 
		self.SwayScale 	= 1.0
		self.BobScale 	= 1.0
	end

end

local fIronTime = self.fIronTime or 0

if ( !bIron && fIronTime < CurTime() - IRONSIGHT_TIME ) then 
	return pos, ang 
end

local Mul = 1.0

if ( fIronTime > CurTime() - IRONSIGHT_TIME ) then

	Mul = math.Clamp( (CurTime() - fIronTime) / IRONSIGHT_TIME, 0, 1 )
	
	if (!bIron) then Mul = 1 - Mul end

end

local Offset	= self.IronSightsPos

if ( self.IronSightsAng ) then

	ang = ang * 1
	ang:RotateAroundAxis( ang:Right(), 		self.IronSightsAng.x * Mul )
	ang:RotateAroundAxis( ang:Up(), 		self.IronSightsAng.y * Mul )
	ang:RotateAroundAxis( ang:Forward(), 	self.IronSightsAng.z * Mul )


end

local Right 	= ang:Right()
local Up 		= ang:Up()
local Forward 	= ang:Forward()



pos = pos + Offset.x * Right * Mul
pos = pos + Offset.y * Forward * Mul
pos = pos + Offset.z * Up * Mul

return pos, ang

end

/---------------------------------------------------------
SetIronsights
---------------------------------------------------------
/
function SWEP:SetIronsights( b )

self.Weapon:SetNetworkedBool( "Ironsights", b )

end

SWEP.NextSecondaryAttack = 0
/---------------------------------------------------------
SecondaryAttack
---------------------------------------------------------
/
function SWEP:SecondaryAttack()

if ( !self.IronSightsPos ) then return end
if ( self.NextSecondaryAttack > CurTime() ) then return end

bIronsights = !self.Weapon:GetNetworkedBool( "Ironsights", false )

self:SetIronsights( bIronsights )

self.NextSecondaryAttack = CurTime() + 0.3

end

function SWEP:DrawHUD()
end

function SWEP:OnRestore()

self.NextSecondaryAttack = 0
self:SetIronsights( false )

end
[/lua]

You’re not using MoneySystem anywhere in your SWEP code.

[editline]05:25PM[/editline]

The problem is most likely your OnNPCKilled hook, why are you taking 1 “money” off the player before adding 11 “money” to the player?

Anyway add a IsPlayer(ply) check to your OnNPCKilled hook, should make it work.

Got it Thanks! <3