• Getowning_ent error.
    16 replies, posted
[CODE]function ENT:Think() local owner = self:Getowning_ent() self.owner = (IsValid(owner) and owner:Nick()) or DarkRP.getPhrase("unknown") end net.Receive("gui",function() printer = net.ReadEntity() local Frame = vgui.Create( "DFrame" ) Frame:SetSize( 300, 500 ) Frame:Center() Frame:SetTitle( "" ) Frame:SetVisible( true ) Frame:SetDraggable( true ) Frame:MakePopup() Frame:ShowCloseButton( true ) Frame.Paint = function (s , w , h) draw.RoundedBox(0,0,0,w,h,Color(51,51,51)) end local Avatar = vgui.Create( "AvatarImage", Frame ) Avatar:SetSize( 40, 40 ) Avatar:SetPos( 20, 345 ) Avatar:SetPlayer( printer:Getowning_ent(), 64 ) end) [/CODE] The ERROR : attempt to call method 'Getowning_ent' (a nil value) What would be the problem here? In shared.lua i've got this [CODE]function ENT:SetupDataTables() self:NetworkVar("Bool", 1, "Stone") self:NetworkVar("Bool", 2, "Muter"); self:NetworkVar("Bool", 3, "HP"); self:NetworkVar("Int", 2, "StoneTime"); self:NetworkVar("Int", 3, "MuterTime"); self:NetworkVar("Int", 4, "Money"); self:NetworkVar("Int", 0, "price"); self:NetworkVar("Entity", 3, "owning_ent") self:NetworkVar("Int", 1, "PrinterHealth"); self:NetworkVar("String", 0, "PrinterName"); self:NetworkVar("Bool", 0, "CoolerTouching"); end[/CODE] Any help would be amazing! Thank you [editline]23rd August 2017[/editline] in the shared.lua i've tried also setting the self:NetworkVar("Entity", 3, "owning_ent") to self:NetworkVar("Entity", 0, "owning_ent") yet nothing
Put a print in SetupDataTables to make sure it's running.
Where would i put the print? any chance you could show me?
In SetupDataTables.
yes, but where in there. Like this? [CODE] function ENT:SetupDataTables() print() self:NetworkVar("Bool", 1, "Stone") self:NetworkVar("Bool", 2, "Muter"); self:NetworkVar("Bool", 3, "HP"); self:NetworkVar("Int", 2, "StoneTime"); self:NetworkVar("Int", 3, "MuterTime"); self:NetworkVar("Int", 4, "Money"); self:NetworkVar("Int", 0, "price"); self:NetworkVar("Entity", 3, "owning_ent") self:NetworkVar("Int", 1, "PrinterHealth"); self:NetworkVar("String", 0, "PrinterName"); self:NetworkVar("Bool", 0, "CoolerTouching"); end [/CODE]
Sure, but you have to put a string inside to print.
so basically this? [CODE] function ENT:SetupDataTables() print("i could put something in here to tell me that its printing.") self:NetworkVar("Bool", 1, "Stone") self:NetworkVar("Bool", 2, "Muter"); self:NetworkVar("Bool", 3, "HP"); self:NetworkVar("Int", 2, "StoneTime"); self:NetworkVar("Int", 3, "MuterTime"); self:NetworkVar("Int", 4, "Money"); self:NetworkVar("Int", 0, "price"); self:NetworkVar("Entity", 3, "owning_ent") self:NetworkVar("Int", 1, "PrinterHealth"); self:NetworkVar("String", 0, "PrinterName"); self:NetworkVar("Bool", 0, "CoolerTouching"); end [/CODE] [editline]23rd August 2017[/editline] running, not printing lel [editline]23rd August 2017[/editline] Yeah, it's running it. What could be the error?
So is it printing or not?
cl_init.lua [CODE] include("shared.lua") function ENT:Initialize() end function ENT:Draw() self:DrawModel() end surface.CreateFont( "printer_font1", { font = "Trebuchet24", size = 16, weight = 640, blursize = 0, scanlines = 10, antialias = true, shadow = false, } ) surface.CreateFont( "printer_font2", { font = "Trebuchet24", size = 8, weight = 640, blursize = 0, scanlines = 10, antialias = true, shadow = false, } ) function ENT:Think() local owner = self:Getowning_ent() self.owner = (IsValid(owner) and owner:Nick()) or DarkRP.getPhrase("unknown") end net.Receive("gui",function() printer = net.ReadEntity() local Frame = vgui.Create( "DFrame" ) Frame:SetSize( 300, 500 ) Frame:Center() Frame:SetTitle( "" ) Frame:SetVisible( true ) Frame:SetDraggable( true ) Frame:MakePopup() Frame:ShowCloseButton( true ) Frame.Paint = function (s , w , h) draw.RoundedBox(0,0,0,w,h,Color(51,51,51)) end local Avatar = vgui.Create( "AvatarImage", Frame ) Avatar:SetSize( 40, 40 ) Avatar:SetPos( 20, 345 ) Avatar:SetPlayer( printer:Getowning_ent(), 64 ) end) [/CODE]
Can you post your shared and init?
the init is really long but sure.
Also, make printer a local variable, and do a class verification before calling the function. You should probably also use a more unique name than "gui"
init.lua [CODE] AddCSLuaFile("cl_init.lua") AddCSLuaFile("shared.lua") include("shared.lua") function ENT:Initialize() self:SetModel( self.printerModel ); self:PhysicsInit(SOLID_VPHYSICS); self:SetMoveType(MOVETYPE_VPHYSICS); self:SetSolid(SOLID_VPHYSICS); self:GetPhysicsObject():Wake(); self.sparking = false; self:SetPrinterHealth ( self.startingHP ); self:SetPrinterName( self.printerName ); self:SetMaterial( self.PrinterMaterial ) self:SetColor( self.PrinterColor ); self:SetUseType( SIMPLE_USE ); self.IsMoneyPrinter = true; self.sound = CreateSound( self, Sound( self.soundFile ) ); self.sound:SetSoundLevel( self.soundLevel ); self.sound:PlayEx(1, 100); self.BeenTouchedBy = {}; self:SetStone( false ); self:SetMuter( false ); self:Print(); self:HealthReduction(); self:UpgradeTimers(); end function ENT:UpgradeTimers() if ( !timer.Exists("batteryUpgrade"..self:EntIndex()) ) then timer.Create("batteryUpgrade"..self:EntIndex(), 1, 0, function() if ( self:GetStoneTime() >= 1 ) then self:SetStoneTime( self:GetStoneTime() - 1 ); else self:SetStone(false); end end) end if ( !timer.Exists("silencerUpgrade"..self:EntIndex()) ) then timer.Create("silencerUpgrade"..self:EntIndex(), 1, 0, function() if ( self:GetMuterTime() >= 1 ) then self:SetMuterTime( self:GetMuterTime() - 1 ); else self:SetMuter(false); self.sound:Play(); end end) end end function ENT:OnTakeDamage( dmg ) if ( self.burningup ) then return; end self:SetPrinterHealth( ( self:GetPrinterHealth() or 100 ) - dmg:GetDamage() ); if ( self:GetPrinterHealth() <= 30 ) then self:SetColor( self.PrinterLowHealthColor ); end if ( self:GetPrinterHealth() <= 0 ) then local RNG = self.printerExplodeRNG; if ( RNG == self.printerExplodeRNGEquals ) then self:BurstIntoFlames(); else self:Destruct(); self:Remove(); end end end function ENT:Destruct() local vPoint = self:GetPos() local effectdata = EffectData() effectdata:SetStart(vPoint) effectdata:SetOrigin(vPoint) effectdata:SetScale(1) util.Effect("Explosion", effectdata) DarkRP.notify(self:Getowning_ent(), 1, 4, DarkRP.getPhrase("money_printer_exploded")) end function ENT:Print() if ( !timer.Exists("timePrinting"..self:EntIndex()) ) then timer.Create("timePrinting"..self:EntIndex(), self.printTime, 0, function() if ( !self:GetStone() ) then self:SetMoney( self:GetMoney() + self.printMoney ); elseif ( self:GetStone() ) then self:SetMoney( self:GetMoney() + self.printMoneyBoosted ); end end) end end function ENT:BurstIntoFlames() DarkRP.notify(self:Getowning_ent(), 0, 4, DarkRP.getPhrase("money_printer_overheating")); self.burningup = true local timeburn = math.random(8, 18) self:Ignite(timebrun, 0); timer.Simple(timeburn, function() self:Fireball() end) end function ENT:HealthReduction() self.rngAttempts = 0; if ( !timer.Exists("healthLossTime"..self:EntIndex()) ) then timer.Create("healthLossTime"..self:EntIndex(), 1, 0, function() local rng = self.printerExplodeRNG; if ( rng == self.printerExplodeRNGEqual ) then if ( !self:GetStone() ) then self.rngAttempts = 0; self:SetPrinterHealth( self:GetPrinterHealth() - math.random(1,3) ); end else if ( !self:GetStone() ) then self.rngAttempts = self.rngAttempts + 1; end end end) end end function ENT:Fireball() -- This is just a standard function for the explosion to take place if not self:IsOnFire() then self.burningup = false return end local dist = math.random(20, 280) -- This is the explosion radius, don't make this any more higher than it is. self:Destruct() for k, v in pairs(ents.FindInSphere(self:GetPos(), dist)) do if not v:IsPlayer() and not v:IsWeapon() and v:GetClass() ~= "predicted_viewmodel" and not v.IsMoneyPrinter then v:Ignite(math.random(5, 22), 0) elseif v:IsPlayer() then local distance = v:GetPos():Distance(self:GetPos()) v:TakeDamage(distance / dist * 100, self, self) end end self:Remove() end function ENT:Touch( ent ) if ( !self.BeenTouchedBy[ent] ) then timer.Simple(0.01, function() if ( ent:IsPlayer() ) then return; end if ( ent:GetClass() == "tomz_production" ) then if ( !self:GetStone() ) then self:SetStone(true); self:SetStoneTime(self.stoneTime); ent:Remove(); else ent:SetText("Already Being Used"); timer.Simple(3.5, function() if ( IsValid(ent) ) then ent:SetText("Cash Upgrade"); end end) end end if ( ent:GetClass() == "tomz_silencer" ) then if ( !self:GetMuter() ) then self:SetMuter(true); self:SetMuterTime(self.muterTime); ent:Remove(); self.sound:Stop(); else ent:SetText("Already inserted"); timer.Simple(3.5, function() if ( IsValid(ent) ) then ent:SetText("Silencer Upgrade"); end end) end end if ( ent:GetClass() == "tomz_battery" ) then self:SetHP(true); self:SetPrinterHealth( self:GetPrinterHealth() + self.addHealth ); ent:Remove(); end self.BeenTouchedBy[ent] = true; timer.Simple(2, function() self.BeenTouchedBy[ent] = false; end) end) end end util.AddNetworkString("gui") util.AddNetworkString("take") util.AddNetworkString("bat") util.AddNetworkString("cash") util.AddNetworkString("mute") function ENT:Use( ply ) net.Start("gui") net.Send(ply) net.Receive("take",function() if ( self:GetMoney() > 0 && ply:IsPlayer() ) then money = self:GetMoney(); ply:addMoney(self:GetMoney()); self:SetMoney(0); DarkRP.notify( ply, 1, 5, "You just took $"..money.. " from your printer." ); end end) net.Receive("bat",function(len, ply) local battery = ents.Create("tomz_battery") battery:SetModel("models/freeman/printerupgrades_battery.mdl") battery:SetPos( ply:GetEyeTrace().HitPos ) battery:Spawn() end) net.Receive("cash",function(len, ply) local cash = ents.Create("tomz_production") cash:SetModel("models/freeman/printerupgrades_money.mdl") cash:SetPos( ply:GetEyeTrace().HitPos ) cash:Spawn() end) net.Receive("mute",function(len, ply) local mute = ents.Create("tomz_silencer") mute:SetModel("models/freeman/printerupgrades_mute.mdl") mute:SetPos( ply:GetEyeTrace().HitPos ) mute:Spawn() end) end function ENT:Think() if self:WaterLevel() > 0 th
You aren't writing an entity when you network send to "gui"
oh. is that the issue? [editline]23rd August 2017[/editline] Also could you please give an example of writing the entity. net.WriteEntity(what goes inside?) and if that is the correct net?
net.WriteEntity(self)
thank you! Ill contact you if its not working.
Sorry, you need to Log In to post a reply to this thread.