Advertisement
FlacoBey

Untitled

Jan 31st, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.11 KB | None | 0 0
  1. #include <sourcemod>
  2. #include <sdktools>
  3. #include <sdkhooks>
  4.  
  5. #pragma semicolon 1
  6. #pragma tabsize 0
  7.  
  8. new bool:lateLoad;
  9. char sDataFilePath[PLATFORM_MAX_PATH];
  10. int num;
  11. float fTargetDistance;
  12. new bool:isChat = false;
  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.     RegAdminCmd("sm_logdistance", LogDistance, ADMFLAG_ROOT);
  43. }
  44.  
  45. public Action:LogDistance(client, args)
  46. {
  47.     if(isChat == false)
  48.     {
  49.         isChat = true;
  50.         PrintToChatAll("Лог дистанции включён");
  51.     }
  52.     else if(isChat == true)
  53.     {
  54.         isChat = false;
  55.         PrintToChatAll("Лог дистанции выключён");
  56.     }
  57. }
  58.  
  59. public Action:APlayerGotHurt(Handle:event, const String:ename[], bool:dontBroadcast)
  60. {
  61.     int dmg = GetEventInt(event, "dmg_health");
  62.     PrintToChatAll("Урон который нанёся - %i", dmg);
  63.     PrintToChatAll("Сколько урона если без учитываения дистанции - %i", dmg + num);
  64. }
  65.  
  66. void KvWriteToFile(const char[] path)
  67. {
  68.     KeyValues kv = new KeyValues("Distance");
  69.     kv.SetNum("DistanceForEveryWeapon", 1);
  70.     kv.SetNum("DistanceForEveryWeapon_2", 1);
  71.     kv.SetNum("DistanceForEveryWeapon_3", 1);
  72.     kv.SetNum("DistanceForEveryWeapon_4", 1);
  73.     kv.SetNum("DistanceForEveryWeapon_5", 1);
  74.    
  75.     kv.SetNum("weapon_autoshotgun/Damage", 1);
  76.     kv.SetNum("weapon_hunting_rifle/Damage", 1);
  77.     kv.SetNum("weapon_pistol/Damage", 1);
  78.     kv.SetNum("weapon_rifle_ak47/Damage", 1);
  79.     kv.SetNum("weapon_rifle/Damage", 1);
  80.     kv.SetNum("weapon_pumpshotgun/Damage", 1);
  81.     kv.SetNum("weapon_sniper_awp/Damage", 1);
  82.     kv.SetNum("weapon_shotgun_chrome/Damage", 1);
  83.     kv.SetNum("weapon_pistol_magnum/Damage", 1);
  84.     kv.SetNum("weapon_grenade_launcher/Damage", 1);
  85.     kv.SetNum("weapon_shotgun_spas/Damage", 1);
  86.     kv.SetNum("weapon_smg/Damage", 1);
  87.     kv.SetNum("weapon_smg_mp5 /Damage", 1);
  88.     kv.SetNum("weapon_smg_silenced/Damage", 1);
  89.     kv.SetNum("weapon_sniper_military/Damage", 1);
  90.     kv.SetNum("weapon_rifle_sg552/Damage", 1);
  91.     kv.SetNum("weapon_sniper_scout/Damage", 1);
  92.     kv.SetNum("weapon_rifle_m60/Damage", 1);
  93.     kv.SetNum("weapon_rifle_desert/Damage", 1);
  94.    
  95.     kv.SetNum("weapon_autoshotgun/Damage_2", 1);
  96.     kv.SetNum("weapon_hunting_rifle/Damage_2", 1);
  97.     kv.SetNum("weapon_pistol/Damage_2", 1);
  98.     kv.SetNum("weapon_rifle_ak47/Damage_2", 1);
  99.     kv.SetNum("weapon_rifle/Damage_2", 1);
  100.     kv.SetNum("weapon_pumpshotgun/Damage_2", 1);
  101.     kv.SetNum("weapon_sniper_awp/Damage_2", 1);
  102.     kv.SetNum("weapon_shotgun_chrome/Damage_2", 1);
  103.     kv.SetNum("weapon_pistol_magnum/Damage_2", 1);
  104.     kv.SetNum("weapon_grenade_launcher/Damage_2", 1);
  105.     kv.SetNum("weapon_shotgun_spas/Damage_2", 1);
  106.     kv.SetNum("weapon_smg/Damage_2", 1);
  107.     kv.SetNum("weapon_smg_mp5 /Damage_2", 1);
  108.     kv.SetNum("weapon_smg_silenced/Damage_2", 1);
  109.     kv.SetNum("weapon_sniper_military/Damage_2", 1);
  110.     kv.SetNum("weapon_rifle_sg552/Damage_2", 1);
  111.     kv.SetNum("weapon_sniper_scout/Damage_2", 1);
  112.     kv.SetNum("weapon_rifle_m60/Damage_2", 1);
  113.     kv.SetNum("weapon_rifle_desert/Damage_2", 1);
  114.    
  115.     kv.SetNum("weapon_autoshotgun/Damage_3", 1);
  116.     kv.SetNum("weapon_hunting_rifle/Damage_3", 1);
  117.     kv.SetNum("weapon_pistol/Damage_3", 1);
  118.     kv.SetNum("weapon_rifle_ak47/Damage_3", 1);
  119.     kv.SetNum("weapon_rifle/Damage_3", 1);
  120.     kv.SetNum("weapon_pumpshotgun/Damage_3", 1);
  121.     kv.SetNum("weapon_sniper_awp/Damage_3", 1);
  122.     kv.SetNum("weapon_shotgun_chrome/Damage_3", 1);
  123.     kv.SetNum("weapon_pistol_magnum/Damage_3", 1);
  124.     kv.SetNum("weapon_grenade_launcher/Damage_3", 1);
  125.     kv.SetNum("weapon_shotgun_spas/Damage_3", 1);
  126.     kv.SetNum("weapon_smg/Damage_3", 1);
  127.     kv.SetNum("weapon_smg_mp5 /Damage_3", 1);
  128.     kv.SetNum("weapon_smg_silenced/Damage_3", 1);
  129.     kv.SetNum("weapon_sniper_military/Damage_3", 1);
  130.     kv.SetNum("weapon_rifle_sg552/Damage_3", 1);
  131.     kv.SetNum("weapon_sniper_scout/Damage_3", 1);
  132.     kv.SetNum("weapon_rifle_m60/Damage_3", 1);
  133.     kv.SetNum("weapon_rifle_desert/Damage_3", 1);
  134.    
  135.     kv.SetNum("weapon_autoshotgun/Damage_4", 1);
  136.     kv.SetNum("weapon_hunting_rifle/Damage_4", 1);
  137.     kv.SetNum("weapon_pistol/Damage_4", 1);
  138.     kv.SetNum("weapon_rifle_ak47/Damage_4", 1);
  139.     kv.SetNum("weapon_rifle/Damage_4", 1);
  140.     kv.SetNum("weapon_pumpshotgun/Damage_4", 1);
  141.     kv.SetNum("weapon_sniper_awp/Damage_4", 1);
  142.     kv.SetNum("weapon_shotgun_chrome/Damage_4", 1);
  143.     kv.SetNum("weapon_pistol_magnum/Damage_4", 1);
  144.     kv.SetNum("weapon_grenade_launcher/Damage_4", 1);
  145.     kv.SetNum("weapon_shotgun_spas/Damage_4", 1);
  146.     kv.SetNum("weapon_smg/Damage_4", 1);
  147.     kv.SetNum("weapon_smg_mp5 /Damage_4", 1);
  148.     kv.SetNum("weapon_smg_silenced/Damage_4", 1);
  149.     kv.SetNum("weapon_sniper_military/Damage_4", 1);
  150.     kv.SetNum("weapon_rifle_sg552/Damage_4", 1);
  151.     kv.SetNum("weapon_sniper_scout/Damage_4", 1);
  152.     kv.SetNum("weapon_rifle_m60/Damage_4", 1);
  153.     kv.SetNum("weapon_rifle_desert/Damage_4", 1);
  154.    
  155.     kv.SetNum("weapon_autoshotgun/Damage_5", 1);
  156.     kv.SetNum("weapon_hunting_rifle/Damage_5", 1);
  157.     kv.SetNum("weapon_pistol/Damage_5", 1);
  158.     kv.SetNum("weapon_rifle_ak47/Damage_5", 1);
  159.     kv.SetNum("weapon_rifle/Damage_5", 1);
  160.     kv.SetNum("weapon_pumpshotgun/Damage_5", 1);
  161.     kv.SetNum("weapon_sniper_awp/Damage_5", 1);
  162.     kv.SetNum("weapon_shotgun_chrome/Damage_5", 1);
  163.     kv.SetNum("weapon_pistol_magnum/Damage_5", 1);
  164.     kv.SetNum("weapon_grenade_launcher/Damage_5", 1);
  165.     kv.SetNum("weapon_shotgun_spas/Damage_5", 1);
  166.     kv.SetNum("weapon_smg/Damage_5", 1);
  167.     kv.SetNum("weapon_smg_mp5 /Damage_5", 1);
  168.     kv.SetNum("weapon_smg_silenced/Damage_5", 1);
  169.     kv.SetNum("weapon_sniper_military/Damage_5", 1);
  170.     kv.SetNum("weapon_rifle_sg552/Damage_5", 1);
  171.     kv.SetNum("weapon_sniper_scout/Damage_5", 1);
  172.     kv.SetNum("weapon_rifle_m60/Damage_5", 1);
  173.     kv.SetNum("weapon_rifle_desert/Damage_5", 1);
  174.  
  175.     kv.ExportToFile(path);
  176.  
  177.     delete kv;
  178. }
  179.  
  180. public OnClientPutInServer(client)
  181. {
  182.     SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
  183. }
  184.  
  185. public OnClientDisconnect(client)
  186. {
  187.     SDKUnhook(client, SDKHook_OnTakeDamage, OnTakeDamage);
  188. }
  189.  
  190. public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)  
  191. {
  192.     if (IsValidInfected(victim))
  193.     {
  194.         if(bIsSurvivor(attacker))
  195.         {
  196.             KeyValues kv = new KeyValues("Distance");
  197.             if (kv.ImportFromFile(sDataFilePath))
  198.             {
  199.                 new DistanceI = KvGetNum(kv, "DistanceForEveryWeapon", 1);
  200.                 new DistanceI2 = KvGetNum(kv, "DistanceForEveryWeapon_2", 1);
  201.                 new DistanceI3 = KvGetNum(kv, "DistanceForEveryWeapon_3", 1);
  202.                 new DistanceI4 = KvGetNum(kv, "DistanceForEveryWeapon_4", 1);
  203.                 new DistanceI5 = KvGetNum(kv, "DistanceForEveryWeapon_5", 1);
  204.                
  205.                 decl String:classname[64];
  206.                 GetClientWeapon(attacker, classname, sizeof(classname));
  207.                 if (KvJumpToKey(kv, classname, true))
  208.                 {
  209.                     float fDamagerPos[3], fDangerPos[3];
  210.                     GetEntPropVector(attacker, Prop_Send, "m_vecOrigin", fDamagerPos);
  211.                     GetEntPropVector(victim, Prop_Send, "m_vecOrigin", fDangerPos);
  212.                     fTargetDistance = GetVectorDistance(fDamagerPos, fDangerPos);
  213.                     if (fTargetDistance > DistanceI5)
  214.                     {
  215.                         num = KvGetNum(kv, "Damage_5", 1);
  216.                         damage -= num;
  217.                         PrintToChatAll("Дистанция - %i (Дистнция 5-ая)",  RoundToCeil(fTargetDistance));
  218.                     }
  219.                     else if (fTargetDistance > DistanceI4)
  220.                     {
  221.                         num = KvGetNum(kv, "Damage_4", 1);
  222.                         damage -= num;
  223.                         PrintToChatAll("Дистанция - %i (Дистнция 4-ая)",  RoundToCeil(fTargetDistance));
  224.                     }
  225.                     else if (fTargetDistance > DistanceI3)
  226.                     {
  227.                         num = KvGetNum(kv, "Damage_3", 1);
  228.                         damage -= num;
  229.                         PrintToChatAll("Дистанция - %i (Дистнция 3-ая)",  RoundToCeil(fTargetDistance));
  230.                     }
  231.                     else if (fTargetDistance > DistanceI2)
  232.                     {
  233.                         num = KvGetNum(kv, "Damage_2", 1);
  234.                         damage -= num;
  235.                         PrintToChatAll("Дистанция - %i (Дистнция 2-ая)",  RoundToCeil(fTargetDistance));
  236.                     }
  237.                     else if (fTargetDistance > DistanceI)
  238.                     {
  239.                         num = KvGetNum(kv, "Damage", 1);
  240.                         damage -= num;
  241.                         PrintToChatAll("Дистанция - %i (Дистнция 1-ая)",  RoundToCeil(fTargetDistance));
  242.                     }
  243.                     return Plugin_Changed;
  244.                 }
  245.             }
  246.         }
  247.     }
  248.  
  249.     return Plugin_Continue;
  250. }
  251.  
  252. stock bool bIsSurvivor(int client)
  253. {
  254.     return client > 0 && client <= MaxClients && IsClientInGame(client) && GetClientTeam(client) == 2 && !IsClientInKickQueue(client) && IsPlayerAlive(client);
  255. }
  256.  
  257. stock bool:IsValidInfected( client )
  258. {
  259.     if ( client < 1 || client > MaxClients ) return false;
  260.     if ( !IsClientConnected( client )) return false;
  261.     if ( !IsClientInGame( client )) return false;
  262.     if ( GetClientTeam( client ) != 3 ) return false;
  263.     return true;
  264. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement