Advertisement
CorporalCompassion

Untitled

Jun 1st, 2015
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.43 KB | None | 0 0
  1. AddCSLuaFile("cl_init.lua")
  2. AddCSLuaFile("shared.lua")
  3. include("shared.lua")
  4.  
  5. util.AddNetworkString('NGII_PrinterUpdate')
  6. util.AddNetworkString('NGII_OpenMenu')
  7. util.AddNetworkString('NGII_TakeMoney')
  8. util.AddNetworkString('NGII_UninstallMod')
  9.  
  10. function ENT:Initialize()
  11.     self:SetModel("models/props_lab/reciever01b.mdl")
  12.     self:PhysicsInit(SOLID_VPHYSICS)
  13.     self:SetMoveType(MOVETYPE_VPHYSICS)
  14.     self:SetSolid(SOLID_VPHYSICS)
  15.     self:SetUseType(SIMPLE_USE)
  16.  
  17.     local phys = self:GetPhysicsObject()
  18.     phys:Wake()
  19.  
  20.     self.IsNgPrinter = true
  21.     self.Damage = 100
  22.  
  23.     self.Stats = {}
  24.     self.Stats['Level']         = 1
  25.     self.Stats['Experience']    = 0
  26.     self.Stats['Temperature']   = 0
  27.     self.Stats['StoredMoney']   = 0
  28.     self.Stats['Cooling']       = 0
  29.     self.Stats['PrintMul']      = sh_NGII.ExpTable[1].PrintMul
  30.     self.Stats['PrintSpeed']    = sh_NGII.PrintDelay
  31.     self.Stats['UpgradeSlots']  = 2
  32.     self.Stats['StorageSize']   = 400
  33.     self.Stats['ExpMul']        = 1
  34.     self.Stats['Upgrades'] = {}
  35.     for i=1, self.Stats.UpgradeSlots do
  36.         self.Stats.Upgrades[i] = { uName = nil, uModel = nil, uDescription = nil, uMods = {} }
  37.     end
  38.  
  39.     self:InitTimer()
  40. end
  41.  
  42. function ENT:Use( activator, caller )
  43.     if not self.dt.owning_ent:IsValid() then
  44.         self:Remove()
  45.         return
  46.     end
  47.  
  48.     self:UpdateInfo()
  49.     net.Start('NGII_OpenMenu')
  50.         net.WriteEntity( self )
  51.     net.Send( caller )
  52. end
  53.  
  54. function ENT:OnTakeDamage( dmg )
  55.     self.Damage = self.Damage - dmg:GetDamage()
  56.     if self.Damage <= 0 then
  57.         self:Burn()
  58.     end
  59. end
  60.  
  61. function ENT:InitTimer()
  62.     if self.Stats.PrintSpeed <= 0 then
  63.         self.Stats.PrintSpeed = 1
  64.     end
  65.  
  66.     timer.Simple( self.Stats.PrintSpeed, function()
  67.         if not self:IsValid() then return end
  68.         self:InitTimer()
  69.     end )
  70.  
  71.     if self.Stats.StoredMoney >= self.Stats.StorageSize then
  72.         self.Stats.StoredMoney = self.Stats.StorageSize
  73.         return
  74.     end
  75.  
  76.     if self.Stats.Temperature >= 100 then
  77.         self.Stats.Temperature = 100
  78.         return
  79.     end
  80.  
  81.     self:Print()
  82. end
  83.  
  84. function ENT:Print()
  85.     self.Stats.StoredMoney = self.Stats.StoredMoney + sh_NGII.PrintAmount * self.Stats.PrintMul
  86.  
  87.     if self.Stats.Level != #sh_NGII.ExpTable then
  88.         self.Stats.Experience = self.Stats.Experience + (sh_NGII.ExpAmount * self.Stats.ExpMul)
  89.         if self.Stats.Experience >= sh_NGII.ExpTable[self.Stats.Level].ExpReq then
  90.             self.Stats.Level = self.Stats.Level + 1
  91.             self.Stats.Experience = 0
  92.             self.Stats.PrintMul = sh_NGII.ExpTable[self.Stats.Level].PrintMul
  93.         end
  94.     end
  95.  
  96.     self.Stats.Temperature = self.Stats.Temperature + (sh_NGII.HeatAmount - self.Stats.Cooling)
  97.  
  98.     if self.Stats.Temperature >= 100 then
  99.         self.Stats.Temperature = 100
  100.         self:Burn()
  101.     end
  102.  
  103.     if self.Stats.StoredMoney >= self.Stats.StorageSize then
  104.         self.Stats.StoredMoney = self.Stats.StorageSize
  105.     end
  106.  
  107.     if self.Stats.Temperature < 0 then
  108.         self.Stats.Temperature = 0
  109.     end
  110.  
  111.     self:UpdateInfo()
  112. end
  113.  
  114. function ENT:Burn()
  115.     self:UpdateInfo()
  116.  
  117.     self:Ignite( 10, 5 )
  118.     timer.Simple( 10, function()
  119.         if not self:IsValid() then return end
  120.         self:Remove()
  121.     end)
  122. end
  123.  
  124. function ENT:UpdateInfo()
  125.     net.Start('NGII_PrinterUpdate')
  126.         net.WriteEntity( self )
  127.         net.WriteTable( self.Stats )
  128.     net.Broadcast()
  129. end
  130.  
  131. net.Receive('NGII_TakeMoney', function( TblSize )
  132.     local Printer = net.ReadEntity()
  133.     local Person = net.ReadEntity()
  134.  
  135.     if Printer.Stats.StoredMoney <= 0 then return end
  136.    
  137.     GAMEMODE:Notify(Person, 0, 4, "You have taken the stored money. $"..Printer.Stats.StoredMoney)
  138.  
  139.     Person:AddMoney(Printer.Stats.StoredMoney)
  140.     Printer.Stats.StoredMoney = 0
  141.  
  142.     Printer:UpdateInfo()
  143. end)
  144.  
  145. net.Receive('NGII_UninstallMod', function( TblSize )
  146.     local Printer = net.ReadEntity()
  147.     local UpgradeID = net.ReadInt( 16 )
  148.  
  149.     if Printer.Stats.Upgrades[UpgradeID].uClass == nil then return end
  150.    
  151.     for stat, value in pairs (Printer.Stats.Upgrades[UpgradeID].uMods) do
  152.         Printer.Stats[stat] = Printer.Stats[stat] - value
  153.     end
  154.  
  155.     local Upgrade = ents.Create(Printer.Stats.Upgrades[UpgradeID].uClass)
  156.     Upgrade:SetPos(LocalToWorld( Vector( 25, 0, 15 ), Angle( 0, 0, 0 ), Printer:GetPos(), Printer:GetAngles()))
  157.     Upgrade:Spawn()
  158.  
  159.     Printer.Stats.Upgrades[UpgradeID] = { uName = nil, uModel = nil, uDescription = nil, uMods = {} }
  160.  
  161.     Printer:UpdateInfo()
  162. end)
  163.  
  164. hook.Add('PlayerDisconnected', 'PrinterRemoval', function( ply )
  165.     local E_Printers = ents.FindByClass( "ng_e_printer" )
  166.     for i, p in pairs (E_Printers) do
  167.         if p.dt.owning_ent == ply then
  168.             p:Remove()
  169.             print('Printer owned by '..ply:Nick()..' has been removed due to disconnecting')
  170.         end
  171.     end
  172. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement