Advertisement
Guest User

Untitled

a guest
Dec 15th, 2010
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.22 KB | None | 0 0
  1. main()
  2. {
  3.     level.effects["bark"]=loadfx("fx/impacts/large_woodhit.efx");
  4.     level.effects["brick"]=loadfx("fx/impacts/small_brick.efx");
  5.     level.effects["carpet"]=loadfx("fx/impacts/default_hit.efx");
  6.     level.effects["cloth"]=loadfx("fx/impacts/cloth_hit.efx");
  7.     level.effects["concrete"]=loadfx("fx/impacts/small_concrete.efx");
  8.     level.effects["dirt"]=loadfx("fx/impacts/small_dirt.efx");
  9.     level.effects["flesh"]=loadfx("fx/impacts/flesh_hit.efx");
  10.     level.effects["foliage"]=loadfx("fx/impacts/small_foliage.efx");
  11.     level.effects["glass"]=loadfx("fx/impacts/small_glass.efx");
  12.     level.effects["grass"]=loadfx("fx/impacts/small_grass.efx");
  13.     level.effects["gravel"]=loadfx("fx/impacts/small_gravel.efx");
  14.     level.effects["ice"]=loadfx("fx/impacts/small_snowhit.efx");
  15.     level.effects["metal"]=loadfx("fx/impacts/small_metalhit.efx");
  16.     level.effects["mud"]=loadfx("fx/impacts/small_mud.efx");
  17.     level.effects["paper"]=loadfx("fx/impacts/default_hit.efx");
  18.     level.effects["plaster"]=loadfx("fx/impacts/small_concrete.efx");
  19.     level.effects["rock"]=loadfx("fx/impacts/small_rock.efx");
  20.     level.effects["sand"]=loadfx("fx/impacts/small_dirt.efx");
  21.     level.effects["snow"]=loadfx("fx/impacts/small_snowhit.efx");
  22.     level.effects["water"]=loadfx("fx/impacts/small_waterhit.efx");
  23.     level.effects["wood"]=loadfx("fx/impacts/large_woodhit.efx");
  24.     level.effects["asphalt"]=loadfx("fx/impacts/small_concrete.efx");
  25.     level.effects["default"]=loadfx("fx/impacts/default_hit.efx");
  26.     level thread waitforconnect();
  27. }
  28.  
  29. waitforconnect()
  30. {
  31.     for(;;)
  32.     {
  33.         level waittill("connecting",player);
  34.         player thread waitforspawn();
  35.         player thread spawneye();
  36.     }
  37. }
  38.  
  39. waitforspawn()
  40. {
  41.     self endon("disconnect");
  42.     for(;;)
  43.     {
  44.         self waittill("spawned_player");
  45.         self thread wallfire();
  46.     }
  47. }
  48.  
  49.  
  50. wallfire()
  51. {
  52.     self endon("disconnect");
  53.     self endon("killed_player");
  54.     ammo=self getweaponslotclipammo(self getcurrentweaponslot());
  55.     oldammo=ammo;
  56.     oldangles=self getplayerangles();
  57.     weap=self getcurrentweapon();
  58.     oldweap=weap;
  59.     for(;;)
  60.     {
  61.         weap=self getcurrentweapon();
  62.         ammo=self getweaponslotclipammo(self getcurrentweaponslot());
  63.         if(self attackbuttonpressed()&&ammo<oldammo&&oldweap==weap&&wallpenetrating(weap)>0)
  64.         {
  65.             angles=self getplayerangles();
  66.             newangles=((oldangles[0]*1+angles[0]*2)/3,angles[1],angles[2]);
  67.             forward=maps\mp\_utility::vectorscale(anglestoforward(newangles),10000);
  68.             smallforward=vectornormalize(forward);
  69.             point=self geteyepos();
  70.             getpoint=bullettrace(point,point-smallforward,false,undefined);
  71.             point=getpoint["position"];
  72.             players=bullettrace(point,point+forward,true,self);
  73.             firsttrace=bullettrace(point,point+forward,false,undefined);
  74.             if(firsttrace["fraction"]<1&&!isplayer(players["entity"]))
  75.             {
  76.                 maxdist=wallpenetrating(weap);
  77.                 {
  78.                     secondtrace=bullettrace(firsttrace["position"]+smallforward,firsttrace["position"]+forward,true,self);
  79.                     traceback=bullettrace(secondtrace["position"],firsttrace["position"],false,undefined);
  80.                     wall=distance(firsttrace["position"],traceback["position"]);
  81.                     if(!isdefined(secondtrace["entity"])&&secondtrace["fraction"]<1&&distance(secondtrace["position"],point)<maxrange(weap))
  82.                         placebullethole(secondtrace,firsttrace["position"]);
  83.                     if(traceback["fraction"]<1&&wall<maxdist)
  84.                         placebullethole(traceback,secondtrace["position"]);
  85.                 }
  86.                 if(isplayer(secondtrace["entity"]))
  87.                 {
  88.                     maxdmg=getthroughwalldamage(weap);
  89.                     dmgmulti=(maxdist-wall)/maxdist;
  90.                     mxrange=maxrange(weap);
  91.                     distancemulti=(mxrange-distance(secondtrace["position"],point))/mxrange;
  92.                     damage=int(maxdmg*dmgmulti*distancemulti);
  93.                     if(damage>0&&secondtrace["entity"]!=self)
  94.                     {
  95.                         iDflags=0;
  96.                         sMeansofDeath=getweaponMOD(weap);
  97.                         vDir=vectornormalize(secondtrace["position"]-self.origin);
  98.                         if(distancesquared(secondtrace["entity"] geteyepos(),secondtrace["position"])<8*8)
  99.                         {
  100.                             damage=int(damage*2);
  101.                             sHitloc="head";
  102.                         }
  103.                         else
  104.                             sHitloc="none";
  105.                         secondtrace["entity"] maps\mp\gametypes\_callbacksetup::CodeCallback_PlayerDamage(self, self, damage, iDFlags, sMeansOfDeath, weap, self.origin, vDir, sHitLoc, 0);
  106.                     }
  107.                 }
  108.             }
  109.         }
  110.         oldammo=ammo;
  111.         oldweap=weap;
  112.         oldangles=self getplayerangles();
  113.         wait 0.05;
  114.     }
  115. }
  116.        
  117. getcurrentweaponslot()
  118. {
  119.     if(self getcurrentweapon()!=self getweaponslotweapon("primaryb"))
  120.         return "primary";
  121.     else
  122.         return "primaryb";
  123. }
  124.  
  125. getthroughwalldamage(weap)
  126. {
  127.     switch(weap)
  128.     {
  129.     case "springfield_mp":
  130.     case "enfield_scope_mp":
  131.     case "mosin_nagant_sniper_mp":
  132.     case "kar98k_sniper_mp":
  133.     case "mosin_nagant_mp":
  134.     case "enfield_mp":
  135.     case "kar98k_mp":
  136.         return 100;
  137.     case "m1carbine_mp":
  138.     case "m1garand_mp":
  139.     case "SVT40_mp":
  140.     case "g43_mp":
  141.         return 38;
  142.     case "bar_mp":
  143.     case "bren_mp":
  144.     case "mp44_mp":
  145.         return 40;
  146.     case "thompson_mp":
  147.     case "sten_mp":
  148.     case "greasegun_mp":
  149.     case "mp40_mp":
  150.         return 36;
  151.     case "ppsh_mp":
  152.         return 30;
  153.     case "PPS42_mp":
  154.         return 40;
  155.     case "shotgun_mp":
  156.         return 40;
  157.     case "TT30_mp":
  158.         return 20;
  159.     case "webley_mp":
  160.         return 20;
  161.     case "colt_mp":
  162.         return 20;
  163.     case "luger_mp":
  164.         return 20;
  165.     default:
  166.         return 70;
  167.     }
  168. }
  169.  
  170. wallpenetrating(weap)
  171. {
  172.     switch(weap)
  173.     {
  174.     case "springfield_mp":
  175.     case "enfield_scope_mp":
  176.     case "mosin_nagant_sniper_mp":
  177.     case "kar98k_sniper_mp":
  178.     case "mosin_nagant_mp":
  179.     case "kar98k_mp":
  180.     case "enfield_mp":
  181.     case "m1carbine_mp":
  182.     case "m1garand_mp":
  183.     case "SVT40_mp":
  184.     case "g43_mp":
  185.     case "bar_mp":
  186.     case "bren_mp":
  187.     case "mp44_mp":
  188.     case "thompson_mp":
  189.     case "sten_mp":
  190.     case "greasegun_mp":
  191.     case "mp40_mp":
  192.     case "ppsh_mp":
  193.     case "PPS42_mp":
  194.     case "shotgun_mp":
  195.         return 25;
  196.     case "TT30_mp":
  197.     case "webley_mp":
  198.     case "colt_mp":
  199.     case "luger_mp":
  200.         return 15;
  201.     case "panzerschreck_mp":
  202.     case "panzerfaust_mp":
  203.         return 0;
  204.  
  205.     default:
  206.         return 0;
  207.     }
  208. }
  209.  
  210. maxrange(weap)
  211. {
  212.     switch(weap)
  213.     {
  214.     case "springfield_mp":
  215.     case "enfield_scope_mp":
  216.     case "mosin_nagant_sniper_mp":
  217.     case "kar98k_sniper_mp":
  218.     case "mosin_nagant_mp":
  219.         return 10000;
  220.     case "kar98k_mp":
  221.     case "enfield_mp":
  222.         return 5000;
  223.     case "m1carbine_mp":
  224.     case "m1garand_mp":
  225.         return 4000;
  226.     case "SVT40_mp":
  227.     case "g43_mp":
  228.         return 4000;
  229.     case "bar_mp":
  230.     case "bren_mp":
  231.     case "mp44_mp":
  232.         return 3500;
  233.     case "thompson_mp":
  234.     case "sten_mp":
  235.     case "greasegun_mp":
  236.     case "mp40_mp":
  237.         return 3000;
  238.     case "ppsh_mp":
  239.     case "PPS42_mp":
  240.         return 2500;
  241.     case "shotgun_mp":
  242.         return 1000;
  243.     case "TT30_mp":
  244.     case "webley_mp":
  245.     case "colt_mp":
  246.     case "luger_mp":
  247.         return 1000;
  248.     case "panzerschreck_mp":
  249.     case "panzerfaust_mp":
  250.         return 0;
  251.     default:
  252.         return 0;
  253.     }
  254. }
  255.  
  256. getweaponMOD(weap)
  257. {
  258.     switch(weap)
  259.     {
  260.     case "springfield_mp":
  261.     case "enfield_scope_mp":
  262.     case "mosin_nagant_sniper_mp":
  263.     case "kar98k_sniper_mp":
  264.     case "mosin_nagant_mp":
  265.     case "kar98k_mp":
  266.     case "enfield_mp":
  267.         return "MOD_RIFLE_BULLET";
  268.     case "m1carbine_mp":
  269.     case "m1garand_mp":
  270.     case "SVT40_mp":
  271.     case "g43_mp":
  272.     case "bar_mp":
  273.     case "bren_mp":
  274.     case "mp44_mp":
  275.     case "thompson_mp":
  276.     case "sten_mp":
  277.     case "greasegun_mp":
  278.     case "mp40_mp":
  279.     case "ppsh_mp":
  280.     case "PPS42_mp":
  281.     case "shotgun_mp":
  282.         return "MOD_RIFLE_BULLET";
  283.     case "TT30_mp":
  284.     case "webley_mp":
  285.     case "colt_mp":
  286.     case "luger_mp":
  287.         return "MOD_PISTOL_BULLET";
  288.     case "panzerschreck_mp":
  289.     case "panzerfaust_mp":
  290.         return"MOD_PROJECTILE";
  291.     default:
  292.         return "MOD_UNKNOWN";
  293.     }
  294. }
  295.  
  296.        
  297. spawneye()
  298. {
  299.     self endon("disconnect");
  300.     for(;;)
  301.     {
  302.         self waittill("spawned_player");
  303.         wait 0.05;
  304.         if(isalive(self))
  305.         {
  306.             self.eyemarker=spawn("script_origin",self.origin);
  307.             self.eyemarker linkto(self,"tag_eye",(0,0,0),(0,0,0));
  308.         }
  309.         while(isalive(self))
  310.             wait 0.05;
  311.         self.eyemarker unlink();
  312.         self.eyemarker delete();
  313.     }
  314. }
  315.  
  316.        
  317.  
  318.  
  319. geteyepos()
  320. {
  321.     if(isdefined(self.eyemarker))
  322.     {
  323.         if(distancesquared(self.eyemarker.origin,self.origin)>0)
  324.             return self.eyemarker.origin;
  325.         else
  326.             return self geteye();
  327.     }
  328.     else
  329.     {
  330.         return self geteye();
  331.     }
  332. }
  333.  
  334. placebullethole(trace,startpoint)
  335. {
  336.     fx=trace["surfacetype"];
  337.     if(isdefined(level.effects[fx]))
  338.         effect=level.effects[fx];
  339.     else
  340.         effect=level.effects["default"];
  341.  
  342.     normal=vectornormalize(trace["normal"]);
  343.     playfx(effect,trace["position"],normal);
  344. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement