Advertisement
FlacoBey

Untitled

Jun 16th, 2019
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 24.78 KB | None | 0 0
  1. #pragma semicolon 1
  2. #pragma newdecls required
  3.  
  4. #include <sdktools>
  5. #include <sdkhooks>
  6.  
  7. Handle sdkSetAttack;
  8.  
  9. float weapon_autoshotgun = 1650.0;
  10. float weapon_hunting_rifle = 660.0;
  11. float weapon_pistol = 880.0;
  12. float weapon_pistol_magnum = 1980.0;
  13. float weapon_pumpshotgun = 1650.0;
  14. float weapon_rifle = 1100.0;
  15. float weapon_rifle_ak47 = 1100.0;
  16. float weapon_rifle_desert = 1100.0;
  17. float weapon_rifle_m60 = 1320.0;
  18. float weapon_rifle_sg552 = 1100.0;
  19. float weapon_shotgun_chrome = 1540.0;
  20. float weapon_shotgun_spas = 1540.0;
  21. float weapon_smg = 880.0;
  22. float weapon_smg_mp5 = 880.0;
  23. float weapon_smg_silenced = 880.0;
  24. float weapon_sniper_awp = 1870.0;
  25. float weapon_sniper_military = 1320.0;
  26. float weapon_sniper_scout = 1320.0;
  27.  
  28. float weapon_grenade_launcher  = 2200.0;
  29. float weapon_pipe_bomb = 2200.0;
  30.  
  31. int iChance = 2;
  32.  
  33. public void OnPluginStart()
  34. {
  35.     HookEvent("weapon_fire", EventFire);
  36. }
  37.  
  38. public Action EventFire(Handle event, const char[] name, bool dontbroadcast)
  39. {
  40.     int client = GetClientOfUserId(GetEventInt(event, "userid"));
  41.     int weapon = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
  42.     if(IsValidEntity(weapon))
  43.     {
  44.         char weaponname[36];
  45.         GetEntityClassname(weapon, weaponname, sizeof(weaponname));
  46.         if(bIsSurvivor(client))
  47.         {
  48.             float vPos[3], vTargetPos[3];
  49.             GetClientEyePosition(client, vPos);
  50.             if(strcmp(weaponname, "weapon_autoshotgun") == 0)
  51.             {
  52.                 for(int i = 33; i <= 2048; i++)
  53.                 {
  54.                     if(IsCommonInfected(i))
  55.                     {
  56.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  57.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  58.                         if(IsVisibleTo(vPos, vTargetPos))
  59.                         {
  60.                             if(fTargetDistance < weapon_autoshotgun)
  61.                             {
  62.                                 SetAttack(i);
  63.                             }
  64.                         }
  65.                         else
  66.                         {
  67.                             if(GetRandomInt(0, 100) <= iChance)
  68.                             {
  69.                                 if(fTargetDistance < weapon_autoshotgun)
  70.                                 {
  71.                                     SetAttack(i);
  72.                                 }
  73.                             }
  74.                         }
  75.                     }
  76.                 }
  77.             }
  78.             else if(strcmp(weaponname, "weapon_hunting_rifle") == 0)
  79.             {
  80.                 for(int i = 33; i <= 2048; i++)
  81.                 {
  82.                     if(IsCommonInfected(i))
  83.                     {
  84.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  85.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  86.                         if(IsVisibleTo(vPos, vTargetPos))
  87.                         {
  88.                             if(fTargetDistance < weapon_hunting_rifle)
  89.                             {
  90.                                 SetAttack(i);
  91.                             }
  92.                         }
  93.                         else
  94.                         {
  95.                             if(GetRandomInt(0, 100) <= iChance)
  96.                             {
  97.                                 if(fTargetDistance < weapon_hunting_rifle)
  98.                                 {
  99.                                     SetAttack(i);
  100.                                 }
  101.                             }
  102.                         }
  103.                     }
  104.                 }
  105.             }
  106.             else if(strcmp(weaponname, "weapon_pistol") == 0)
  107.             {
  108.                 for(int i = 33; i <= 2048; i++)
  109.                 {
  110.                     if(IsCommonInfected(i))
  111.                     {
  112.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  113.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  114.                         if(IsVisibleTo(vPos, vTargetPos))
  115.                         {
  116.                             if(fTargetDistance < weapon_pistol)
  117.                             {
  118.                                 SetAttack(i);
  119.                             }
  120.                         }
  121.                         else
  122.                         {
  123.                             if(GetRandomInt(0, 100) <= iChance)
  124.                             {
  125.                                 if(fTargetDistance < weapon_pistol)
  126.                                 {
  127.                                     SetAttack(i);
  128.                                 }
  129.                             }
  130.                         }
  131.                     }
  132.                 }
  133.             }
  134.             else if(strcmp(weaponname, "weapon_pistol_magnum") == 0)
  135.             {
  136.                 for(int i = 33; i <= 2048; i++)
  137.                 {
  138.                     if(IsCommonInfected(i))
  139.                     {
  140.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  141.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  142.                         if(IsVisibleTo(vPos, vTargetPos))
  143.                         {
  144.                             if(fTargetDistance < weapon_pistol_magnum)
  145.                             {
  146.                                 SetAttack(i);
  147.                             }
  148.                         }
  149.                         else
  150.                         {
  151.                             if(GetRandomInt(0, 100) <= iChance)
  152.                             {
  153.                                 if(fTargetDistance < weapon_pistol_magnum)
  154.                                 {
  155.                                     SetAttack(i);
  156.                                 }
  157.                             }
  158.                         }
  159.                     }
  160.                 }
  161.             }
  162.             else if(strcmp(weaponname, "weapon_pumpshotgun") == 0)
  163.             {
  164.                 for(int i = 33; i <= 2048; i++)
  165.                 {
  166.                     if(IsCommonInfected(i))
  167.                     {
  168.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  169.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  170.                         if(IsVisibleTo(vPos, vTargetPos))
  171.                         {
  172.                             if(fTargetDistance < weapon_pumpshotgun)
  173.                             {
  174.                                 SetAttack(i);
  175.                             }
  176.                         }
  177.                         else
  178.                         {
  179.                             if(GetRandomInt(0, 100) <= iChance)
  180.                             {
  181.                                 if(fTargetDistance < weapon_pumpshotgun)
  182.                                 {
  183.                                     SetAttack(i);
  184.                                 }
  185.                             }
  186.                         }
  187.                     }
  188.                 }
  189.             }
  190.             else if(strcmp(weaponname, "weapon_rifle") == 0)
  191.             {
  192.                 for(int i = 33; i <= 2048; i++)
  193.                 {
  194.                     if(IsCommonInfected(i))
  195.                     {
  196.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  197.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  198.                         if(IsVisibleTo(vPos, vTargetPos))
  199.                         {
  200.                             if(fTargetDistance < weapon_rifle)
  201.                             {
  202.                                 SetAttack(i);
  203.                             }
  204.                         }
  205.                         else
  206.                         {
  207.                             if(GetRandomInt(0, 100) <= iChance)
  208.                             {
  209.                                 if(fTargetDistance < weapon_rifle)
  210.                                 {
  211.                                     SetAttack(i);
  212.                                 }
  213.                             }
  214.                         }
  215.                     }
  216.                 }
  217.             }
  218.             else if(strcmp(weaponname, "weapon_rifle_ak47") == 0)
  219.             {
  220.                 for(int i = 33; i <= 2048; i++)
  221.                 {
  222.                     if(IsCommonInfected(i))
  223.                     {
  224.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  225.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  226.                         if(IsVisibleTo(vPos, vTargetPos))
  227.                         {
  228.                             if(fTargetDistance < weapon_rifle_ak47)
  229.                             {
  230.                                 SetAttack(i);
  231.                             }
  232.                         }
  233.                         else
  234.                         {
  235.                             if(GetRandomInt(0, 100) <= iChance)
  236.                             {
  237.                                 if(fTargetDistance < weapon_rifle_ak47)
  238.                                 {
  239.                                     SetAttack(i);
  240.                                 }
  241.                             }
  242.                         }
  243.                     }
  244.                 }
  245.             }
  246.             else if(strcmp(weaponname, "weapon_rifle_desert") == 0)
  247.             {
  248.                 for(int i = 33; i <= 2048; i++)
  249.                 {
  250.                     if(IsCommonInfected(i))
  251.                     {
  252.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  253.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  254.                         if(IsVisibleTo(vPos, vTargetPos))
  255.                         {
  256.                             if(fTargetDistance < weapon_rifle_desert)
  257.                             {
  258.                                 SetAttack(i);
  259.                             }
  260.                         }
  261.                         else
  262.                         {
  263.                             if(GetRandomInt(0, 100) <= iChance)
  264.                             {
  265.                                 if(fTargetDistance < weapon_rifle_desert)
  266.                                 {
  267.                                     SetAttack(i);
  268.                                 }
  269.                             }
  270.                         }
  271.                     }
  272.                 }
  273.             }
  274.             else if(strcmp(weaponname, "weapon_rifle_m60") == 0)
  275.             {
  276.                 for(int i = 33; i <= 2048; i++)
  277.                 {
  278.                     if(IsCommonInfected(i))
  279.                     {
  280.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  281.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  282.                         if(IsVisibleTo(vPos, vTargetPos))
  283.                         {
  284.                             if(fTargetDistance < weapon_rifle_m60)
  285.                             {
  286.                                 SetAttack(i);
  287.                             }
  288.                         }
  289.                         else
  290.                         {
  291.                             if(GetRandomInt(0, 100) <= iChance)
  292.                             {
  293.                                 if(fTargetDistance < weapon_rifle_m60)
  294.                                 {
  295.                                     SetAttack(i);
  296.                                 }
  297.                             }
  298.                         }
  299.                     }
  300.                 }
  301.             }
  302.             else if(strcmp(weaponname, "weapon_rifle_sg552") == 0)
  303.             {
  304.                 for(int i = 33; i <= 2048; i++)
  305.                 {
  306.                     if(IsCommonInfected(i))
  307.                     {
  308.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  309.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  310.                         if(IsVisibleTo(vPos, vTargetPos))
  311.                         {
  312.                             if(fTargetDistance < weapon_rifle_sg552)
  313.                             {
  314.                                 SetAttack(i);
  315.                             }
  316.                         }
  317.                         else
  318.                         {
  319.                             if(GetRandomInt(0, 100) <= iChance)
  320.                             {
  321.                                 if(fTargetDistance < weapon_rifle_sg552)
  322.                                 {
  323.                                     SetAttack(i);
  324.                                 }
  325.                             }
  326.                         }
  327.                     }
  328.                 }
  329.             }
  330.             else if(strcmp(weaponname, "weapon_shotgun_chrome") == 0)
  331.             {
  332.                 for(int i = 33; i <= 2048; i++)
  333.                 {
  334.                     if(IsCommonInfected(i))
  335.                     {
  336.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  337.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  338.                         if(IsVisibleTo(vPos, vTargetPos))
  339.                         {
  340.                             if(fTargetDistance < weapon_shotgun_chrome)
  341.                             {
  342.                                 SetAttack(i);
  343.                             }
  344.                         }
  345.                         else
  346.                         {
  347.                             if(GetRandomInt(0, 100) <= iChance)
  348.                             {
  349.                                 if(fTargetDistance < weapon_shotgun_chrome)
  350.                                 {
  351.                                     SetAttack(i);
  352.                                 }
  353.                             }
  354.                         }
  355.                     }
  356.                 }
  357.             }
  358.             else if(strcmp(weaponname, "weapon_shotgun_spas") == 0)
  359.             {
  360.                 for(int i = 33; i <= 2048; i++)
  361.                 {
  362.                     if(IsCommonInfected(i))
  363.                     {
  364.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  365.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  366.                         if(IsVisibleTo(vPos, vTargetPos))
  367.                         {
  368.                             if(fTargetDistance < weapon_shotgun_spas)
  369.                             {
  370.                                 SetAttack(i);
  371.                             }
  372.                         }
  373.                         else
  374.                         {
  375.                             if(GetRandomInt(0, 100) <= iChance)
  376.                             {
  377.                                 if(fTargetDistance < weapon_shotgun_spas)
  378.                                 {
  379.                                     SetAttack(i);
  380.                                 }
  381.                             }
  382.                         }
  383.                     }
  384.                 }
  385.             }
  386.             else if(strcmp(weaponname, "weapon_smg") == 0)
  387.             {
  388.                 for(int i = 33; i <= 2048; i++)
  389.                 {
  390.                     if(IsCommonInfected(i))
  391.                     {
  392.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  393.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  394.                         if(IsVisibleTo(vPos, vTargetPos))
  395.                         {
  396.                             if(fTargetDistance < weapon_smg)
  397.                             {
  398.                                 SetAttack(i);
  399.                             }
  400.                         }
  401.                         else
  402.                         {
  403.                             if(GetRandomInt(0, 100) <= iChance)
  404.                             {
  405.                                 if(fTargetDistance < weapon_smg)
  406.                                 {
  407.                                     SetAttack(i);
  408.                                 }
  409.                             }
  410.                         }
  411.                     }
  412.                 }
  413.             }
  414.             else if(strcmp(weaponname, "weapon_smg_mp5") == 0)
  415.             {
  416.                 for(int i = 33; i <= 2048; i++)
  417.                 {
  418.                     if(IsCommonInfected(i))
  419.                     {
  420.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  421.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  422.                         if(IsVisibleTo(vPos, vTargetPos))
  423.                         {
  424.                             if(fTargetDistance < weapon_smg_mp5)
  425.                             {
  426.                                 SetAttack(i);
  427.                             }
  428.                         }
  429.                         else
  430.                         {
  431.                             if(GetRandomInt(0, 100) <= iChance)
  432.                             {
  433.                                 if(fTargetDistance < weapon_smg_mp5)
  434.                                 {
  435.                                     SetAttack(i);
  436.                                 }
  437.                             }
  438.                         }
  439.                     }
  440.                 }
  441.             }
  442.             else if(strcmp(weaponname, "weapon_smg_silenced") == 0)
  443.             {
  444.                 for(int i = 33; i <= 2048; i++)
  445.                 {
  446.                     if(IsCommonInfected(i))
  447.                     {
  448.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  449.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  450.                         if(IsVisibleTo(vPos, vTargetPos))
  451.                         {
  452.                             if(fTargetDistance < weapon_smg_silenced)
  453.                             {
  454.                                 SDKCall(sdkSetAttack, i);
  455.                             }
  456.                         }
  457.                         else
  458.                         {
  459.                             if(GetRandomInt(0, 100) <= iChance)
  460.                             {
  461.                                 if(fTargetDistance < weapon_smg_silenced)
  462.                                 {
  463.                                     SetAttack(i);
  464.                                 }
  465.                             }
  466.                         }
  467.                     }
  468.                 }
  469.             }
  470.             else if(strcmp(weaponname, "weapon_sniper_awp") == 0)
  471.             {
  472.                 for(int i = 33; i <= 2048; i++)
  473.                 {
  474.                     if(IsCommonInfected(i))
  475.                     {
  476.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  477.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  478.                         if(IsVisibleTo(vPos, vTargetPos))
  479.                         {
  480.                             if(fTargetDistance < weapon_sniper_awp)
  481.                             {
  482.                                 SetAttack(i);
  483.                             }
  484.                         }
  485.                         else
  486.                         {
  487.                             if(GetRandomInt(0, 100) <= iChance)
  488.                             {
  489.                                 if(fTargetDistance < weapon_sniper_awp)
  490.                                 {
  491.                                     SetAttack(i);
  492.                                 }
  493.                             }
  494.                         }
  495.                     }
  496.                 }
  497.             }
  498.             else if(strcmp(weaponname, "weapon_sniper_military") == 0)
  499.             {
  500.                 for(int i = 33; i <= 2048; i++)
  501.                 {
  502.                     if(IsCommonInfected(i))
  503.                     {
  504.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  505.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  506.                         if(IsVisibleTo(vPos, vTargetPos))
  507.                         {
  508.                             if(fTargetDistance < weapon_sniper_military)
  509.                             {
  510.                                 SetAttack(i);
  511.                             }
  512.                         }
  513.                         else
  514.                         {
  515.                             if(GetRandomInt(0, 100) <= iChance)
  516.                             {
  517.                                 if(fTargetDistance < weapon_sniper_military)
  518.                                 {
  519.                                     SetAttack(i);
  520.                                 }
  521.                             }
  522.                         }
  523.                     }
  524.                 }
  525.             }
  526.             else if(strcmp(weaponname, "weapon_sniper_scout") == 0)
  527.             {
  528.                 for(int i = 33; i <= 2048; i++)
  529.                 {
  530.                     if(IsCommonInfected(i))
  531.                     {
  532.                         GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  533.                         float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  534.                         if(IsVisibleTo(vPos, vTargetPos))
  535.                         {
  536.                             if(fTargetDistance < weapon_sniper_scout)
  537.                             {
  538.                                 SetAttack(i);
  539.                             }
  540.                         }
  541.                         else
  542.                         {
  543.                             if(GetRandomInt(0, 100) <= iChance)
  544.                             {
  545.                                 if(fTargetDistance < weapon_sniper_scout)
  546.                                 {
  547.                                     SetAttack(i);
  548.                                 }
  549.                             }
  550.                         }
  551.                     }
  552.                 }
  553.             }
  554.         }
  555.     }
  556.     return Plugin_Continue;
  557. }
  558.  
  559. public void OnEntityDestroyed(int entity)
  560. {
  561.     if(IsValidEntity(entity) && IsValidEdict(entity))
  562.     {
  563.         char sTypeEx[36];
  564.         GetEntityClassname(entity, sTypeEx, sizeof(sTypeEx));
  565.         if(strcmp(sTypeEx, "grenade_launcher_projectile") == 0)
  566.         {
  567.             float vPos[3], vTargetPos[3];
  568.             GetEntPropVector(entity, Prop_Send, "m_vecOrigin", vPos);
  569.             for(int i = 33; i <= 2048; i++)
  570.             {
  571.                 if(IsCommonInfected(i))
  572.                {
  573.                     GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  574.                     float fTargetDistance = GetVectorDistance(vPos, vTargetPos);
  575.                     if(fTargetDistance <= weapon_grenade_launcher)
  576.                     {
  577.                         SetAttack(i);
  578.                     }
  579.                 }
  580.             }
  581.         }
  582.         else if(strcmp(sTypeEx, "pipe_bomb_projectile") == 0)
  583.        {
  584.             float vPos[3], vTargetPos[3];
  585.             GetEntPropVector(entity, Prop_Send, "m_vecOrigin", vPos);
  586.             for(int i = 33; i <= 2048; i++)
  587.             {
  588.                 if(IsCommonInfected(i))
  589.                 {
  590.                     GetEntPropVector(i, Prop_Send, "m_vecOrigin", vTargetPos);
  591.                     float fTargetDistance = GetVectorDistance(vPos, vTargetPos);  
  592.                     if(fTargetDistance <= weapon_pipe_bomb)
  593.                     {
  594.                         SetAttack(i);
  595.                     }
  596.                 }
  597.             }
  598.         }
  599.     }
  600. }
  601.  
  602. stock void SetAttack(int i)
  603. {
  604.     Handle hGameConf = LoadGameConfigFile("SetAttackSurvivorCommons");
  605.     StartPrepSDKCall(SDKCall_Entity);
  606.     if( PrepSDKCall_SetFromConf(hGameConf, SDKConf_Signature, "SetAttackToSurvivors") == false )
  607.         SetFailState("Could not load the \"SetAttackToSurvivors\" gamedata signature.");
  608.     sdkSetAttack = EndPrepSDKCall();
  609.     SDKCall(sdkSetAttack, i);
  610.     sdkSetAttack = null;
  611.     delete hGameConf;
  612.     delete sdkSetAttack;
  613. }
  614.  
  615. static bool IsVisibleTo(float position[3], float targetposition[3])
  616. {
  617.     float vAngles[3], vLookAt[3];
  618.    
  619.     MakeVectorFromPoints(position, targetposition, vLookAt);
  620.     GetVectorAngles(vLookAt, vAngles);
  621.  
  622.     Handle trace = TR_TraceRayFilterEx(position, vAngles, MASK_SHOT, RayType_Infinite, _TraceFilter);
  623.    
  624.     bool isVisible = false;
  625.     if (TR_DidHit(trace))
  626.     {
  627.         float vStart[3];
  628.         TR_GetEndPosition(vStart, trace);
  629.        
  630.         if ((GetVectorDistance(position, vStart, false) + 25.0) >= GetVectorDistance(position, targetposition))
  631.         {
  632.             isVisible = true;
  633.         }
  634.     }
  635.    
  636.     return isVisible;
  637. }
  638.  
  639. public bool _TraceFilter(int entity, int contentsMask)
  640. {
  641.     if (IsValidEntity(entity))
  642.     {
  643.         return false;
  644.     }
  645.     return true;
  646. }
  647.  
  648. stock bool bIsSurvivor(int client)
  649. {
  650.     return client > 0 && client <= MaxClients && IsClientInGame(client) && GetClientTeam(client) == 2 && !IsClientInKickQueue(client) && IsPlayerAlive(client);
  651. }
  652.  
  653. stock bool IsCommonInfected(int entity)
  654. {
  655.     if (entity > 33 && IsValidEntity(entity) && IsValidEdict(entity))
  656.     {
  657.         char entType[64];
  658.         GetEdictClassname(entity, entType, sizeof(entType));
  659.         return StrEqual(entType, "infected");
  660.     }
  661.     return false;
  662. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement