1. -- RRPX Money Printer by philxyz  edited by Ninjarudo
  2. AddCSLuaFile("cl_init.lua")
  3. AddCSLuaFile("shared.lua")
  4. include("shared.lua")
  5.  
  6. local printAmount = CreateConVar( "DARKRP_GOLDEN_PRINTER_AMOUNT", 1000, FCVAR_NOTIFY )
  7. local printAmount = CreateConVar( "DARKRP_GOLDEN_PRINTER_AMOUNT", 1000, FCVAR_NOTIFY )
  8.  
  9. function ENT:Initialize()
  10.     self:SetModel("models/props_lab/reciever01a.mdl")
  11.     self:SetColor(100,100,0, 255)
  12.     self:SetNWInt("Vaulted", 0 )
  13.     self:PhysicsInit(SOLID_VPHYSICS)
  14.     self:SetMoveType(MOVETYPE_VPHYSICS)
  15.     self:SetSolid(SOLID_VPHYSICS)
  16.     local phys = self:GetPhysicsObject()
  17.     if phys:IsValid() then phys:Wake() end
  18.     self.sparking = false
  19.     self.damage = 200
  20.     self.IsMoneyPrinter = true
  21.     timer.Simple(5, self.CreateMoneybag, self)
  22. end
  23.  
  24.  function ENT:Use(activator,caller)
  25.     local amount = self:GetNWInt("Vaulted") or 0
  26.     if amount > 0 then
  27.         Notify(activator, 0, 4, "You have recieved " .. CUR ..( amount or 0 ) .. "!")
  28.         if activator != self.dt.owning_ent then
  29.             Notify(self.dt.owning_ent, 1, 4, "Your Golden Money Printer has been cleaned out!")
  30.         end
  31.         activator:AddMoney(amount or 0)
  32.         self:SetNWInt("Vaulted", 0)
  33.     end
  34. end
  35.  
  36. function ENT:OnTakeDamage(dmg)
  37.     if self.burningup then return end
  38.  
  39.     self.damage = self.damage - dmg:GetDamage()
  40.     if self.damage <= 0 then
  41.         local rnd = math.random(1, 10)
  42.         if rnd < 3 then
  43.             self:BurstIntoFlames()
  44.         else
  45.             self:Destruct()
  46.             self:Remove()
  47.         end
  48.     end
  49. end
  50.  
  51. function ENT:Destruct()
  52.     local vPoint = self:GetPos()
  53.     local effectdata = EffectData()
  54.     effectdata:SetStart(vPoint)
  55.     effectdata:SetOrigin(vPoint)
  56.     effectdata:SetScale(1)
  57.     util.Effect("Explosion", effectdata)
  58.     Notify(self.dt.owning_ent, 1, 4, "Your Golden Money Printer has exploded!")
  59. end
  60.  
  61. function ENT:Fireball()
  62.     if not self:IsOnFire() then return end
  63.     local dist = math.random(30, 300) -- Explosion radius
  64.     self:Destruct()
  65.     for k, v in pairs(ents.FindInSphere(self:GetPos(), dist)) do
  66.         if not v:IsPlayer() and not v.IsMoneyPrinter then v:Ignite(math.random(5, 22), 0) end
  67.     end
  68.     self:Remove()
  69. end
  70.  
  71. local function PrintMore(ent)
  72.     if ValidEntity(ent) then
  73.         ent.sparking = true
  74.         timer.Simple(1, ent.CreateMoneybag, ent)
  75.     end
  76. end
  77.  
  78. function ENT:CreateMoneybag()
  79.     if not ValidEntity(self) then return end
  80.     if self:IsOnFire() then return end
  81.    
  82.     -- if math.random(1, 22) == 3 then self:BurstIntoFlames() end
  83.  
  84.     if printAmount == 0 then
  85.         printAmount = 1000
  86.     end
  87.  
  88.     -- self.dt.amount = self.dt.amount + amount
  89.     self:SetNWInt("Vaulted", self:GetNWInt("Vaulted") + printAmount)
  90.    
  91.     self.sparking = false
  92.     -- timer.Simple(math.random(100, 150), PrintMore, self)
  93.     timer.Simple( 10, PrintMore, self)
  94. end
  95.  
  96. function ENT:Think()
  97.     if not self.sparking then return end
  98.  
  99.     local effectdata = EffectData()
  100.     effectdata:SetOrigin(self:GetPos())
  101.     effectdata:SetMagnitude(1)
  102.     effectdata:SetScale(1)
  103.     effectdata:SetRadius(2)
  104.     util.Effect("Sparks", effectdata)
  105. end