FlacoBey

Untitled

Jul 31st, 2019
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.26 KB | None | 0 0
  1. #pragma semicolon 1
  2. #pragma newdecls required
  3.  
  4. #include <sourcemod>
  5. #include <sdktools>
  6. #include <sdkhooks>
  7.  
  8. ConVar cDamage, cRange, cDistance, cSpeed; 
  9. float g_iDamage, g_iRange, g_iDistance, g_iSpeed;
  10.  
  11. int g_iVelocity;
  12.  
  13. public Plugin myinfo =
  14. {
  15.     name = "[L4D2] Spitter",
  16.     author = "BHaType",
  17.     description = "spitter",
  18.     version = "0.0.1",
  19.     url = "N/A"
  20. }
  21.  
  22. public void OnPluginStart()
  23. {
  24.     cDamage     = CreateConVar("magic_spitter_damage"       , "5.0" , "Number of damage"        , FCVAR_NONE);
  25.     cRange      = CreateConVar("magic_spitter_range"        , "60.0"    , "Range of hit"            , FCVAR_NONE);
  26.     cDistance   = CreateConVar("magic_spitter_distance" , "950.0"   , "Distance of detect"      , FCVAR_NONE);
  27.     cSpeed      = CreateConVar("magic_spitter_speed"        , "5.5" , "Speed of magic items"    , FCVAR_NONE);
  28.  
  29.     g_iDamage   = cDamage.FloatValue;
  30.     g_iRange    = cRange.FloatValue;
  31.     g_iDistance = cDistance.FloatValue;
  32.     g_iSpeed    = cSpeed.FloatValue;
  33.    
  34.     cDamage.AddChangeHook(IntsCvar);
  35.     cRange.AddChangeHook(IntsCvar);
  36.     cDistance.AddChangeHook(IntsCvar);
  37.     cSpeed.AddChangeHook(IntsCvar);
  38.    
  39.     g_iVelocity = FindSendPropInfo("CBasePlayer", "m_vecVelocity[0]");
  40.    
  41.     AutoExecConfig(true, "spitter_aimbot");
  42. }
  43. public void IntsCvar(ConVar convar, const char[] oldValue, const char[] newValue)
  44. {
  45.     g_iDamage   = cDamage.FloatValue;
  46.     g_iRange    = cRange.FloatValue;
  47.     g_iDistance = cDistance.FloatValue;
  48.     g_iSpeed = cSpeed.FloatValue;
  49. }
  50.  
  51. public void OnEntityCreated(int entity, const char[] name)
  52. {
  53.     if(IsValidEntity(entity) && strcmp(name, "spitter_projectile") == 0)
  54.         CreateTimer(0.1, PreThink, EntIndexToEntRef(entity), TIMER_REPEAT);
  55. }
  56.  
  57.  
  58. public Action PreThink (Handle timer, int index)
  59. {
  60.     index = EntRefToEntIndex(index);
  61.     if(index != INVALID_ENT_REFERENCE && IsValidEntity(index))
  62.     {
  63.         Tracering(index);
  64.     }
  65.     else
  66.         return Plugin_Stop;
  67.     return Plugin_Continue;
  68. }
  69.  
  70. void Tracering(int iEnt)
  71. {
  72.     float vPos[3], vVel[3], flDistance;
  73.    
  74.     GetEntPropVector(iEnt, Prop_Send, "m_vecOrigin", vPos);
  75.     GetEntDataVector(iEnt, g_iVelocity, vVel);
  76.    
  77.     float vLenght = GetVectorLength(vVel);
  78.  
  79.     NormalizeVector(vVel, vVel);
  80.    
  81.     int client = lucker(iEnt);
  82.  
  83.     if(client > 0 && IsValidEntity(client))
  84.     {
  85.         float vEnemy[3], vVelEnemy[3], vDir[3], doubleVel[3];
  86.  
  87.         GetClientEyePosition(client, vEnemy);
  88.         GetEntDataVector(client, g_iVelocity, vVelEnemy);
  89.        
  90.         flDistance = GetVectorDistance(vPos, vEnemy);
  91.         if(flDistance <= g_iRange)
  92.         {
  93.             SDKHooks_TakeDamage(client, iEnt, iEnt, g_iDamage, 1);
  94.             AcceptEntityInput(iEnt, "kill");
  95.         }
  96.        
  97.         SetEntityGravity(iEnt, 0.01);
  98.        
  99.         SubtractVectors(vEnemy, vPos, vDir);
  100.         NormalizeVector(vDir, vDir);
  101.         ScaleVector(vDir, 0.5);
  102.         AddVectors(vVel, vDir, doubleVel);
  103.         NormalizeVector(doubleVel, doubleVel);
  104.         ScaleVector(doubleVel, vLenght + g_iSpeed);
  105.         TeleportEntity(iEnt, NULL_VECTOR, NULL_VECTOR, doubleVel);
  106.        
  107.     }
  108.     else
  109.         SetEntProp(iEnt, Prop_Data, "m_iHammerID", 0);
  110. }
  111.  
  112. int lucker(int index)
  113. {
  114.     float vPos[3], vPosEntity[3], vDistance = 100000.0, flDistance;
  115.     int count = -1;
  116.     GetEntPropVector(index, Prop_Send, "m_vecOrigin", vPos);
  117.     for(int i = 1; i <= MaxClients; i++)
  118.     {
  119.         if(IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i) && IsVisibleTo(i, index))
  120.         {
  121.             GetEntPropVector(i, Prop_Send, "m_vecOrigin", vPosEntity);
  122.             flDistance = GetVectorDistance(vPosEntity, vPos);
  123.             if(flDistance < vDistance && flDistance <= g_iDistance)
  124.             {
  125.                 vDistance = flDistance;
  126.                 count = i;
  127.             }
  128.         }
  129.     }
  130.    
  131.     return count;
  132. }
  133.  
  134. static bool IsVisibleTo(int client, int entity)
  135. {
  136.     float vAngles[3], vOrigin[3], vEnt[3], vLookAt[3];
  137.    
  138.     GetClientEyePosition(client, vOrigin);
  139.     GetEntPropVector(entity, Prop_Send, "m_vecOrigin", vEnt);
  140.     vEnt[2] += 64.0;
  141.    
  142.     MakeVectorFromPoints(vOrigin, vEnt, vLookAt);
  143.    
  144.     GetVectorAngles(vLookAt, vAngles);
  145.    
  146.     Handle trace = TR_TraceRayFilterEx(vOrigin, vAngles, MASK_SHOT, RayType_Infinite, TraceFilter, entity);
  147.    
  148.     bool isVisible = false;
  149.     if (TR_DidHit(trace))
  150.     {
  151.         float vStart[3];
  152.         TR_GetEndPosition(vStart, trace);
  153.        
  154.         if ((GetVectorDistance(vOrigin, vStart, false) + 25.0) >= GetVectorDistance(vOrigin, vEnt))
  155.         {
  156.             isVisible = true;
  157.         }
  158.     }
  159.     delete trace;
  160.     return isVisible;
  161. }
  162.  
  163. public bool TraceFilter(int entity, int mask, any data)
  164. {
  165.     if(entity == data)
  166.         return false;
  167.     return true;
  168. }
Advertisement
Add Comment
Please, Sign In to add comment