Advertisement
Guest User

Untitled

a guest
Oct 18th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.07 KB | None | 0 0
  1. if (SERVER) then AddCSLuaFile() end
  2.  
  3. ENT.Type = "anim"
  4. ENT.Base = "base_anim"
  5. ENT.Spawnable = true
  6. ENT.AdminSpawnable = true
  7.  
  8. ENT.Category = "DayZ Modules"
  9. ENT.PrintName = "Backpack Base"
  10.  
  11. ENT.Author = "Zephruz"
  12. ENT.Contact = "ScriptFodder"
  13.  
  14. ENT.RenderGroup = RENDERGROUP_TRANSLUCENT
  15.  
  16. function ENT:SetupDataTables()
  17. self:NetworkVar("String", 0, "BPType")
  18. self:NetworkVar("Entity", 0, "BPOwner")
  19. end
  20.  
  21. function ENT:Initialize()
  22. self.BackpackItems = {}
  23.  
  24. if (SERVER) then
  25. self:SetUseType( SIMPLE_USE )
  26.  
  27. self:SetupBPInfo("small_backpack")
  28.  
  29. self:NetworkVarNotify( "BPOwner", self.OnVarChanged )
  30. end
  31. end
  32.  
  33. if (CLIENT) then
  34. function ENT:Draw()
  35. local bpOwn = self:GetBPOwner()
  36.  
  37. -- self:SetPos(self:GetPos())
  38.  
  39. if (!self.GetBPOwner or !self:GetBPOwner():IsValid()) then
  40. self:DrawModel()
  41. else
  42. local m = Matrix()
  43. local att = bpOwn:GetAttachment(bpOwn:LookupAttachment("chest"))
  44. m:Translate(att.Pos)
  45. m:Rotate(att.Ang)
  46.  
  47. m:Translate(Vector(-9, 2, -5))
  48. m:Rotate(Angle(0, 180, 0))
  49.  
  50. self:SetPos(m:GetTranslation())
  51. self:SetAngles(m:GetAngles())
  52.  
  53. if (self:GetBPOwner() == LocalPlayer()) then
  54. if (GMODZ_bThirdPerson) then
  55. self:DrawModel()
  56. end
  57. else
  58. self:DrawModel()
  59. end
  60. end
  61.  
  62. self:DrawShadow(false)
  63. end
  64.  
  65. function ENT:OnRemove()
  66. local bpModel = self.BPModel
  67.  
  68. if (bpModel && bpModel:IsValid()) then
  69. bpModel:Remove()
  70. end
  71. end
  72. end
  73.  
  74. if (SERVER) then
  75. util.AddNetworkString("DZ_Backpacks.OpenGUI")
  76.  
  77. function ENT:Think()
  78. if (self.GetBPOwner && self:GetBPOwner() && self:GetBPOwner():IsValid()) then
  79. if (self:GetPos():Distance(self:GetBPOwner():GetPos()) > 350) then
  80. self:SetPos(self:GetBPOwner():GetPos())
  81. end
  82. end
  83. end
  84.  
  85.  
  86. ENT.NTTime = os.time() + 0.2
  87. function ENT:Touch(ent)
  88. if (!ent or !ent:IsValid()) then return false end
  89.  
  90. if (self.NTTime > os.time()) then return false end
  91. self.NTTime = os.time() + 0.2
  92.  
  93. local bpAllI = DZ_Backpacks.AllowedItems
  94.  
  95. for i=1,#bpAllI do
  96. if (!ent:GetClass():find(bpAllI[i])) then return false end
  97. end
  98.  
  99. self:AddItem({
  100. name = ent.PrintName,
  101. class = ent:GetClass(),
  102. model = ent:GetModel(),
  103. amt = 1,
  104. })
  105.  
  106. ent:Remove()
  107.  
  108. return true
  109. end
  110.  
  111. function ENT:SetupBPInfo(bpid)
  112. local bptype = DZ_Backpacks.Types[bpid]
  113.  
  114. if (bptype) then
  115. self:SetBPType(bpid)
  116.  
  117. self:SetModel( table.Random(bptype.models) )
  118. self:SetCollisionGroup( COLLISION_GROUP_NONE )
  119. self:PhysicsInit( SOLID_VPHYSICS )
  120. self:SetSolid( SOLID_VPHYSICS )
  121. self:PhysWake()
  122. self:DropToFloor()
  123. end
  124. end
  125.  
  126. function ENT:Use( act, call, t, use )
  127. if (call:GetBackpack() && call:GetBackpack() == self) then return false end
  128.  
  129. net.Start("DZ_Backpacks.OpenGUI")
  130. net.WriteEntity(self)
  131. net.WriteTable(self.BackpackItems)
  132. net.Send(call)
  133. end
  134.  
  135. function ENT:OnVarChanged(name, old, new)
  136. if (name == "BPOwner") then
  137. if (new && new:IsValid() && new:IsPlayer()) then
  138. self:SetPos(new:GetPos())
  139. self:SetParent(new, 0)
  140. else
  141. if (old && old:IsValid() && old:IsPlayer()) then
  142. self:SetPos(old:GetPos() + ply:GetForward()*100 + Vector(0,0,50))
  143. end
  144.  
  145. self:SetParent(nil)
  146.  
  147. self:Respawn()
  148. end
  149. end
  150. end
  151.  
  152. function ENT:AddItem(data)
  153. local bpInfo = (self.GetBPType && self:GetBPType() or false)
  154. bpInfo = (bpInfo && DZ_Backpacks.Types[bpInfo])
  155.  
  156. if (bpInfo) then
  157. if (table.Count(self.BackpackItems) > (bpInfo.size or 12)) then
  158. return false
  159. end
  160. end
  161.  
  162. local has = false
  163.  
  164. for i=1,table.Count(self.BackpackItems) do
  165. if (self.BackpackItems[i].class == data.class) then
  166. has = i
  167. end
  168. end
  169.  
  170. if (has) then
  171. self.BackpackItems[has].amt = self.BackpackItems[has].amt + data.amt
  172. else
  173. table.insert(self.BackpackItems, data)
  174. end
  175.  
  176. if (self.GetBPOwner && self:GetBPOwner():IsValid()) then
  177. DZ_Backpacks.Data:UpdatePlayer(self:GetBPOwner(), {
  178. type_bp = (self:GetBPType() or "small_backpack"),
  179. cont_bp = (self.BackpackItems or {}),
  180. })
  181. end
  182. end
  183. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement