Advertisement
Guest User

Untitled

a guest
Jun 25th, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.55 KB | None | 0 0
  1. entity  multi_ent;
  2. float   multi_damage;
  3.  
  4. void() ClearMultiDamage =
  5. {
  6.     multi_ent = world;
  7.     multi_damage = 0;
  8. };
  9.  
  10. void() ApplyMultiDamage =
  11. {
  12.     if (multi_ent == world)
  13.         return;
  14.  
  15.     Damage(multi_ent, self, self, multi_damage, "shotgun");
  16. };
  17.  
  18. void(entity hit, float damage) AddMultiDamage =
  19. {
  20.     if (hit == world)
  21.         return;
  22.  
  23.     if (hit != multi_ent)
  24.     {
  25.         ApplyMultiDamage();
  26.         multi_damage = damage;
  27.         multi_ent = hit;
  28.     }
  29.     else
  30.         multi_damage = multi_damage + damage;
  31. };
  32.  
  33. void(float damage, vector dir) TraceAttack =
  34. {
  35.     local vector vel, org;
  36.  
  37.     vel = normalize(dir + v_up*crandom() + v_right*crandom());
  38.     vel = vel + 2*trace_plane_normal;
  39.     vel = vel * 4;
  40.  
  41.     org = trace_endpos - dir*8;
  42.  
  43.     W_Impact (trace_ent, org, vel, damage*8, TE_GUNSHOT);
  44.  
  45.     if (trace_ent.takedamage)
  46.         AddMultiDamage (trace_ent, damage);
  47. };
  48.  
  49. void(float shotcount, vector spread) FireBullets =
  50. {
  51.     local vector direction;
  52.     local vector src;
  53.     local entity ignore;
  54.  
  55.     makevectors(self.v_angle);
  56.  
  57.     ClearMultiDamage();
  58.     while (shotcount > 0)
  59.     {
  60.         src = self.origin + v_forward*10;
  61.         src_z = self.absmin_z + self.size_z * 0.7;
  62.         direction = v_forward + crandom()*spread_x*v_right + crandom()*spread_y*v_up;
  63.  
  64.         ignore = self;
  65.         do
  66.         {
  67.             traceline (src, src + direction*2048, FALSE, ignore);
  68.             if (trace_fraction != 1)
  69.             {
  70.                 TraceAttack (4, direction);
  71.                 src = trace_endpos;
  72.                 ignore = trace_ent;
  73.             }
  74.         } while ((trace_ent != world) && (trace_fraction != 1)/* && (trace_ent.solid != SOLID_BSP)*/);
  75.  
  76.         shotcount = shotcount - 1;
  77.     }
  78.     ApplyMultiDamage();
  79. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement