Advertisement
FlacoBey

Untitled

Jan 30th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.67 KB | None | 0 0
  1. #include <sourcemod>
  2. #include <sdktools>
  3. #include <sdkhooks>
  4.  
  5. #pragma semicolon 1
  6.  
  7. #define ZOMBIECLASS_TANK 8
  8.  
  9. new bool:lateLoad;
  10. char sDataFilePath[PLATFORM_MAX_PATH];
  11. int num;
  12. float fTargetDistance;
  13.  
  14. public APLRes:AskPluginLoad2(Handle:plugin, bool:late, String:error[], errMax)
  15. {
  16.     lateLoad = late;
  17.     return APLRes_Success;    
  18. }
  19.  
  20. public OnPluginStart()
  21. {
  22.     HookEvent("player_hurt", APlayerGotHurt);
  23.     if (lateLoad)
  24.     {
  25.         for (new client = 1; client <= MaxClients; client++)
  26.         {
  27.             if (IsClientInGame(client))
  28.             {
  29.                 OnClientPutInServer(client);
  30.             }
  31.         }
  32.     }
  33.     BuildPath(Path_SM, sDataFilePath, sizeof(sDataFilePath), "data/weapons_distance.ini");
  34.     if (!FileExists(sDataFilePath))
  35.     {
  36.         new Handle:open_path = OpenFile(sDataFilePath, "w");
  37.         WriteFileLine(open_path, "");
  38.         CloseHandle(open_path);
  39.         PrintToServer("Error Code: WSP-EC-01A");
  40.         KvWriteToFile(sDataFilePath);
  41.     }
  42. }
  43.  
  44. public Action:APlayerGotHurt(Handle:event, const String:ename[], bool:dontBroadcast)
  45. {
  46.     int dmg = GetEventInt(event, "dmg_health");
  47.     PrintToChatAll("Урон который нанёся - %i", dmg);
  48.     PrintToChatAll("Сколько урона если без учитываения дистанции - %i", dmg + num);
  49. }
  50.  
  51. void KvWriteToFile(const char[] path)
  52. {
  53.     KeyValues kv = new KeyValues("Distance");
  54.     kv.SetNum("DistanceForEveryWeapon", 1);
  55.    
  56.     kv.SetNum("weapon_autoshotgun/Damage", 1);
  57.     kv.SetNum("weapon_hunting_rifle/Damage", 1);
  58.     kv.SetNum("weapon_pistol/Damage", 1);
  59.     kv.SetNum("weapon_rifle_ak47/Damage", 1);
  60.     kv.SetNum("weapon_rifle/Damage", 1);
  61.     kv.SetNum("weapon_pumpshotgun/Damage", 1);
  62.     kv.SetNum("weapon_sniper_awp/Damage", 1);
  63.     kv.SetNum("weapon_shotgun_chrome/Damage", 1);
  64.     kv.SetNum("weapon_pistol_magnum/Damage", 1);
  65.     kv.SetNum("weapon_grenade_launcher/Damage", 1);
  66.     kv.SetNum("weapon_shotgun_spas/Damage", 1);
  67.     kv.SetNum("weapon_smg/Damage", 1);
  68.     kv.SetNum("weapon_smg_mp5 /Damage", 1);
  69.     kv.SetNum("weapon_smg_silenced/Damage", 1);
  70.     kv.SetNum("weapon_sniper_military/Damage", 1);
  71.     kv.SetNum("weapon_rifle_sg552/Damage", 1);
  72.     kv.SetNum("weapon_sniper_scout/Damage", 1);
  73.     kv.SetNum("weapon_rifle_m60/Damage", 1);
  74.     kv.SetNum("weapon_rifle_desert/Damage", 1);
  75.  
  76.     kv.ExportToFile(path);
  77.  
  78.     delete kv;
  79. }
  80.  
  81. public OnClientPutInServer(client)
  82. {
  83.     SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
  84. }
  85.  
  86. public OnClientDisconnect(client)
  87. {
  88.     SDKUnhook(client, SDKHook_OnTakeDamage, OnTakeDamage);
  89. }
  90.  
  91. public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)  
  92. {
  93.     if (IsValidInfected(victim))
  94.     {
  95.         KeyValues kv = new KeyValues("Distance");
  96.         if (kv.ImportFromFile(sDataFilePath))
  97.         {
  98.             new DistanceI = KvGetNum(kv, "DistanceForEveryWeapon", 1);
  99.             decl String:classname[64];
  100.             GetClientWeapon(attacker, classname, sizeof(classname));
  101.             if (KvJumpToKey(kv, classname, true))
  102.             {
  103.                 float fDamagerPos[3], fDangerPos[3];
  104.                 GetEntPropVector(attacker, Prop_Send, "m_vecOrigin", fDamagerPos);
  105.                 GetEntPropVector(victim, Prop_Send, "m_vecOrigin", fDangerPos);
  106.                 fTargetDistance = GetVectorDistance(fDamagerPos, fDangerPos);
  107.                 if (fTargetDistance > DistanceI)
  108.                 {
  109.                     num = KvGetNum(kv, "Damage", 1);
  110.                     damage -= num;
  111.                     PrintToChatAll("Дистанция - %i",  RoundToCeil(fTargetDistance));
  112.                     return Plugin_Changed;
  113.                 }
  114.             }
  115.         }
  116.     }
  117.  
  118.     return Plugin_Continue;
  119. }
  120.  
  121. stock bool:IsValidInfected( client )
  122. {
  123.     if ( client < 1 || client > MaxClients ) return false;
  124.     if ( !IsClientConnected( client )) return false;
  125.     if ( !IsClientInGame( client )) return false;
  126.     if ( GetClientTeam( client ) != 3 ) return false;
  127.     return true;
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement