FlacoBey

Untitled

Jun 1st, 2019
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.71 KB | None | 0 0
  1. #include sdktools
  2. #include sdkhooks
  3.  
  4. #pragma semicolon 1
  5. #pragma newdecls required
  6.  
  7. #define TEAM_SURVIVORS  2
  8. #define TEAM_INFECTED   3
  9.  
  10. Handle distance, Fling, FlingDamage;
  11.  
  12. Handle sdkCallPushPlayer = INVALID_HANDLE;
  13. Handle GameConf = INVALID_HANDLE;
  14.  
  15. public void OnPluginStart()
  16. {
  17.     distance    = CreateConVar("sv_rang_rock_stun", "400.0", "", FCVAR_NONE);
  18.     Fling    = CreateConVar("sv_power_rock_of_fling", "450.0", "", FCVAR_NONE);
  19.     FlingDamage    = CreateConVar("sv_rock_damage_fling", "1", "", FCVAR_NONE);
  20.    
  21.     GameConf = LoadGameConfigFile("l4d2_detonationforce");
  22.        
  23.     StartPrepSDKCall(SDKCall_Player);
  24.     PrepSDKCall_SetFromConf(GameConf, SDKConf_Signature, "CTerrorPlayer_Fling");
  25.     PrepSDKCall_AddParameter(SDKType_Vector, SDKPass_ByRef);
  26.     PrepSDKCall_AddParameter(SDKType_PlainOldData, SDKPass_Plain);
  27.     PrepSDKCall_AddParameter(SDKType_CBasePlayer, SDKPass_Pointer);
  28.     PrepSDKCall_AddParameter(SDKType_Float, SDKPass_Plain);
  29.     sdkCallPushPlayer = EndPrepSDKCall();
  30.    
  31.     CloseHandle(GameConf);
  32.  
  33. }
  34.  
  35. public void OnEntityDestroyed(int entity)
  36. {
  37.     if(IsValidEntity(entity) && IsValidEdict(entity))
  38.     {
  39.         char g_classname[20];
  40.         GetEdictClassname(entity, g_classname, 20);
  41.         if(StrEqual(g_classname, "tank_rock", true) && GetEntProp(entity, Prop_Send, "m_iTeamNum") >= 0)
  42.         {
  43.             for(int i = 1; i <= MaxClients; ++i)
  44.             {
  45.                 if(bIsSurvivor(i))
  46.                 {
  47.                     float fDamagerPos[3], fDangerPos[3];
  48.                     GetEntPropVector(entity, Prop_Send, "m_vecOrigin", fDamagerPos);
  49.                     GetEntPropVector(i, Prop_Send, "m_vecOrigin", fDangerPos);
  50.                     float fTargetDistance = GetVectorDistance(fDamagerPos, fDangerPos);
  51.                     if (fTargetDistance > GetConVarFloat(distance)) continue;
  52.                     Fly(entity, i, GetConVarFloat(Fling));
  53.                     DamageEffect(i, GetConVarInt(FlingDamage));
  54.                 }
  55.             }
  56.         }
  57.     }
  58. }
  59.  
  60. public int Fly(int explosion, int target, float power)
  61. {
  62.     if(target <= 0 || !IsValidEntity(target) || !IsValidEdict(target))
  63.         return;
  64.  
  65.     float targetPos[3], explosionPos[3], traceVec[3], resultingFling[3];
  66.    
  67.     GetEntPropVector(target, Prop_Data, "m_vecOrigin", targetPos);    
  68.     GetEntPropVector(explosion, Prop_Data,"m_vecOrigin", explosionPos);
  69.    
  70.     power = power - GetVectorDistance(targetPos,explosionPos);
  71.    
  72.     if(power < 1) return;
  73.  
  74.     MakeVectorFromPoints(explosionPos, targetPos, traceVec);
  75.     GetVectorAngles(traceVec, resultingFling);
  76.        
  77.     resultingFling[0] = Cosine(DegToRad(resultingFling[1])) * power;
  78.     resultingFling[1] = Sine(DegToRad(resultingFling[1])) * power;
  79.     resultingFling[2] = power + (power * 0.5);
  80.  
  81.     if (GetClientTeam(target) == TEAM_SURVIVORS)
  82.     {
  83.         SDKCall(sdkCallPushPlayer, target, resultingFling, 76, target, 2.0);
  84.     }
  85. }
  86.  
  87. public void DamageEffect(int target, int damage)
  88. {
  89.     char sDamage[12];
  90.     IntToString(damage, sDamage, sizeof(sDamage));
  91.     int pointHurt = CreateEntityByName("point_hurt");
  92.     DispatchKeyValue(target, "targetname", "hurtme");
  93.     DispatchKeyValue(pointHurt, "Damage", sDamage);
  94.     DispatchKeyValue(pointHurt, "DamageTarget", "hurtme");
  95.     DispatchKeyValue(pointHurt, "DamageType", "65536");
  96.     DispatchSpawn(pointHurt);
  97.     AcceptEntityInput(pointHurt, "Hurt");
  98.     AcceptEntityInput(pointHurt, "Kill");
  99.     DispatchKeyValue(target, "targetname", "cake");
  100. }
  101.  
  102. stock bool bIsSurvivor(int client)
  103. {
  104.     return client > 0 && client <= MaxClients && IsClientInGame(client) && GetClientTeam(client) == 2 && !IsClientInKickQueue(client) && IsPlayerAlive(client);
  105. }
Advertisement
Add Comment
Please, Sign In to add comment