Advertisement
Guest User

Untitled

a guest
Jul 26th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.52 KB | None | 0 0
  1. // I took a look on Kogitsune's wiretrap code
  2. // I took the .phy of the crossbow_bolt made by Silver Spirit
  3.  
  4. AddCSLuaFile("cl_init.lua")
  5. AddCSLuaFile("shared.lua")
  6. include('shared.lua')
  7.  
  8. /*---------------------------------------------------------
  9.   Name: ENT:Initialize()
  10. ---------------------------------------------------------*/
  11. function ENT:Initialize()
  12.  
  13.     self.Owner = self.Entity:GetOwner()
  14.  
  15.     if !ValidEntity(self.Owner) then
  16.         self:Remove()
  17.         return
  18.     end
  19.  
  20.     self.Entity:SetModel("models/crossbow_bolt.mdl")
  21.     self.Entity:PhysicsInit(SOLID_VPHYSICS)
  22.     self.Entity:SetMoveType(MOVETYPE_VPHYSICS)
  23.     self.Entity:SetSolid(SOLID_VPHYSICS)
  24.     self.Entity:DrawShadow(false)
  25.    
  26. //  self.Entity:SetCollisionGroup(COLLISION_GROUP_WEAPON)
  27.    
  28.     local phys = self.Entity:GetPhysicsObject()
  29.    
  30.     if (phys:IsValid()) then
  31.         phys:EnableGravity(false)
  32.         phys:EnableDrag(false)
  33.         phys:SetMass(2)
  34.             phys:Wake()
  35.         phys:AddGameFlag(FVPHYSICS_NO_IMPACT_DMG)
  36.         phys:AddGameFlag(FVPHYSICS_NO_NPC_IMPACT_DMG)
  37.         phys:AddGameFlag(FVPHYSICS_PENETRATING)
  38.     end
  39.  
  40.     self.Moving = true
  41. end
  42.  
  43. /*---------------------------------------------------------
  44.   Name: ENT:Think()
  45. ---------------------------------------------------------*/
  46. function ENT:Think()
  47.  
  48.     local phys      = self.Entity:GetPhysicsObject()
  49.     local ang       = self.Entity:GetForward() * 100000
  50.     local up        = self.Entity:GetUp() * -800
  51.  
  52.     local force     = ang + up
  53.  
  54.     phys:ApplyForceCenter(force)
  55.  
  56.     if (self.Entity.HitWeld) then  
  57.         self.HitWeld = false  
  58.         constraint.Weld(self.Entity.HitEnt, self.Entity, 0, 0, 0, true)  
  59.     end
  60. end
  61.  
  62. /*---------------------------------------------------------
  63.   Name: ENT:Impact()
  64. ---------------------------------------------------------*/
  65. function ENT:Impact(sent, normal, pos)
  66.  
  67.     if not ValidEntity(self) then
  68.         return
  69.     end
  70.  
  71.     local tr, info
  72.  
  73.     tr = {}
  74.         tr.start = self:GetPos()
  75.         tr.filter = {self, self.Owner}
  76.         tr.endpos = pos
  77.     tr = util.TraceLine(tr)
  78.  
  79.     if tr.HitSky then self:Remove() return end
  80.  
  81.     bullet = {}
  82.     bullet.Num    = 1
  83.     bullet.Src    = pos
  84.     bullet.Dir    = normal
  85.     bullet.Spread = Vector(0, 0, 0)
  86.     bullet.Tracer = 0
  87.     bullet.Force  = 0
  88.     bullet.Damage = 0
  89.     self.Entity:FireBullets(bullet)
  90.  
  91.     if not sent:IsPlayer() and not sent:IsNPC() then
  92.         local effectdata = EffectData()
  93.             effectdata:SetOrigin(pos - normal * 10)
  94.             effectdata:SetEntity(self.Entity)
  95.             effectdata:SetStart(pos)
  96.             effectdata:SetNormal(normal)
  97.         util.Effect("effect_mad_shotgunsmoke", effectdata)
  98.     end
  99.  
  100.     if ValidEntity(sent) then
  101.         info = DamageInfo()
  102.             info:SetAttacker(self.Owner)
  103.             info:SetInflictor(self)
  104.             info:SetDamageType(DMG_GENERIC | DMG_SHOCK)
  105.             info:SetDamage(100)
  106.             info:SetMaxDamage(100)
  107.             info:SetDamageForce(tr.HitNormal * 10)
  108.  
  109.         self.Entity:EmitSound("Weapon_Crossbow.BoltHitBody")
  110.         sent:TakeDamageInfo(info)
  111.  
  112.         self.Entity:Remove()
  113.         return
  114.     end
  115.    
  116.     self.Entity:EmitSound("Weapon_Crossbow.BoltHitWorld")
  117.  
  118.     // We've hit a prop, so let's weld to it
  119.     // Also embed this in the object for looks
  120.  
  121.     self:SetPos(pos - normal * 10)
  122.     self:SetAngles(normal:Angle())
  123.    
  124.     if not ValidEntity(sent) then
  125.         self:GetPhysicsObject():EnableMotion(false)
  126.     end
  127.  
  128.     self.Entity:Fire("kill", "", 10)
  129. end
  130.  
  131. /*---------------------------------------------------------
  132.   Name: ENT:PhysicsCollide()
  133. ---------------------------------------------------------*/
  134. function ENT:PhysicsCollide(data, phys)
  135.  
  136.     if self.Moving then
  137.         self.Moving = false
  138.         phys:Sleep()
  139.         self.Entity:Impact(data.HitEntity, data.HitNormal, data.HitPos)
  140.     end
  141. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement