FlacoBey

Untitled

Jan 6th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.08 KB | None | 0 0
  1. #include <sdktools>
  2. #include <sdkhooks>
  3.  
  4. #pragma semicolon 1
  5.  
  6. #define ZOMBIECLASS_TANK 8
  7.  
  8. new bool:lateLoad;
  9. char sDataFilePath[PLATFORM_MAX_PATH];
  10. new bool:g_HeadShot = false;
  11. new bool:Chat = false;
  12. public APLRes:AskPluginLoad2(Handle:plugin, bool:late, String:error[], errMax)
  13. {
  14.     lateLoad = late;
  15.     return APLRes_Success;    
  16. }
  17.  
  18. public OnPluginStart()
  19. {
  20.     RegAdminCmd("sm_dmgt", blyat, ADMFLAG_ROOT);
  21.     if (lateLoad)
  22.     {
  23.         for (new client = 1; client <= MaxClients; client++)
  24.         {
  25.             if (IsClientInGame(client))
  26.             {
  27.                 OnClientPutInServer(client);
  28.             }
  29.         }
  30.     }
  31.     BuildPath(Path_SM, sDataFilePath, sizeof(sDataFilePath), "data/weapons_damage_tank.ini");
  32.     if (!FileExists(sDataFilePath))
  33.     {
  34.         new Handle:open_path = OpenFile(sDataFilePath, "w");
  35.         WriteFileLine(open_path, "");
  36.         CloseHandle(open_path);
  37.         PrintToServer("Error Code: WSP-EC-01A");
  38.         KvWriteToFile(sDataFilePath);
  39.     }
  40.     HookEvent("player_hurt", OnPlayerHurt);
  41. }
  42.  
  43. public Action:blyat(client, args)
  44. {
  45.     if(Chat == false)
  46.     {
  47.         PrintToChatAll("%N выключил лог урона по танку", client);
  48.         Chat = true;
  49.     }
  50.     else if(Chat == true)
  51.     {
  52.         PrintToChatAll("%N включил лог урона по танку", client);
  53.         Chat = false;
  54.     }
  55. }
  56.  
  57. public Action:OnPlayerHurt(Handle:event, const String:name[], bool:dontBrodcast)
  58. {
  59.     new hitgroup = GetEventInt(event, "hitgroup");
  60.     SetEventInt(event, "dmg_health", 0);
  61.    
  62.     if(hitgroup == 1)
  63.     {
  64.         g_HeadShot = true;
  65.     }
  66.     else
  67.     {
  68.         g_HeadShot = false;
  69.     }
  70. }
  71.  
  72. void KvWriteToFile(const char[] path)
  73. {
  74.     KeyValues kv = new KeyValues("DamageTank");
  75.     kv.SetNum("weapon_autoshotgun/DamageForTank", 1);
  76.     kv.SetNum("weapon_hunting_rifle/DamageForTank", 1);
  77.     kv.SetNum("weapon_pistol/DamageForTank", 1);
  78.     kv.SetNum("weapon_rifle_ak47/DamageForTank", 1);
  79.     kv.SetNum("weapon_rifle/DamageForTank", 1);
  80.     kv.SetNum("weapon_pumpshotgun/DamageForTank", 1);
  81.     kv.SetNum("weapon_sniper_awp/DamageForTank", 1);
  82.     kv.SetNum("weapon_shotgun_chrome/DamageForTank", 1);
  83.     kv.SetNum("weapon_pistol_magnum/DamageForTank", 1);
  84.     kv.SetNum("weapon_shotgun_spas/DamageForTank", 1);
  85.     kv.SetNum("weapon_smg/DamageForTank", 1);
  86.     kv.SetNum("weapon_smg_mp5 /DamageForTank", 1);
  87.     kv.SetNum("weapon_smg_silenced/DamageForTank", 1);
  88.     kv.SetNum("weapon_sniper_military/DamageForTank", 1);
  89.     kv.SetNum("weapon_rifle_sg552/DamageForTank", 1);
  90.     kv.SetNum("weapon_sniper_scout/DamageForTank", 1);
  91.     kv.SetNum("weapon_rifle_m60/DamageForTank", 1);
  92.     kv.SetNum("weapon_rifle_desert/DamageForTank", 1);
  93.     kv.SetNum("weapon_autoshotgun/DamageTankHeadShot", 1);
  94.     kv.SetNum("weapon_hunting_rifle/DamageTankHeadShot", 1);
  95.     kv.SetNum("weapon_pistol/DamageTankHeadShot", 1);
  96.     kv.SetNum("weapon_rifle_ak47/DamageTankHeadShot", 1);
  97.     kv.SetNum("weapon_rifle/DamageTankHeadShot", 1);
  98.     kv.SetNum("weapon_pumpshotgun/DamageTankHeadShot", 1);
  99.     kv.SetNum("weapon_sniper_awp/DamageTankHeadShot", 1);
  100.     kv.SetNum("weapon_shotgun_chrome/DamageTankHeadShot", 1);
  101.     kv.SetNum("weapon_pistol_magnum/DamageTankHeadShot", 1);
  102.     kv.SetNum("weapon_shotgun_spas/DamageTankHeadShot", 1);
  103.     kv.SetNum("weapon_smg/DamageTankHeadShot", 1);
  104.     kv.SetNum("weapon_smg_mp5 /DamageTankHeadShot", 1);
  105.     kv.SetNum("weapon_smg_silenced/DamageTankHeadShot", 1);
  106.     kv.SetNum("weapon_sniper_military/DamageTankHeadShot", 1);
  107.     kv.SetNum("weapon_rifle_sg552/DamageTankHeadShot", 1);
  108.     kv.SetNum("weapon_sniper_scout/DamageTankHeadShot", 1);
  109.     kv.SetNum("weapon_rifle_m60/DamageTankHeadShot", 1);
  110.     kv.SetNum("weapon_rifle_desert/DamageTankHeadShot", 1);
  111.  
  112.  
  113.     kv.ExportToFile(path);
  114.  
  115.     delete kv;
  116. }
  117.  
  118. public OnClientPutInServer(client)
  119. {
  120.     SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
  121. }
  122.  
  123. public OnClientDisconnect(client)
  124. {
  125.     SDKUnhook(client, SDKHook_OnTakeDamage, OnTakeDamage);
  126. }
  127.  
  128. public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)  
  129. {
  130.     if (!(damagetype & DMG_BURN || damagetype & DMG_BLAST))
  131.     {
  132.         if(bIsSurvivor(attacker))
  133.         {
  134.             if (IsValidTank(victim))
  135.             {
  136.                 KeyValues kv = new KeyValues("DamageTank");
  137.                 if (kv.ImportFromFile(sDataFilePath))
  138.                 {
  139.                     decl String:classname[64];
  140.                     GetClientWeapon(attacker, classname, sizeof(classname));
  141.                     if (KvJumpToKey(kv, classname, true))
  142.                     {
  143.                         if(Chat == true)
  144.                         {
  145.                             int heal = GetClientHealth(victim);
  146.                             PrintToChatAll("Tank_Health=%i", heal);
  147.                         }
  148.                         new num = KvGetNum(kv, "DamageForTank", 1);
  149.                         damage = (damage * 0) + num;
  150.                         if(g_HeadShot == true)
  151.                         {
  152.                             num = KvGetNum(kv, "DamageTankHeadShot", 1);
  153.                             damage = (damage * 0) + num;
  154.                         }
  155.                         return Plugin_Changed;
  156.                     }
  157.                 }
  158.             }
  159.         }
  160.     }
  161.     return Plugin_Continue;
  162. }
  163.  
  164. stock bool bIsSurvivor(int client)
  165. {
  166.     return client > 0 && client <= MaxClients && IsClientInGame(client) && GetClientTeam(client) == 2 && !IsClientInKickQueue(client) && IsPlayerAlive(client);
  167. }
  168.  
  169. public IsValidTank(client)
  170. {
  171.     if (IsValidClient(client) && GetClientTeam(client) == 3)
  172.     {
  173.         new class = GetEntProp(client, Prop_Send, "m_zombieClass");
  174.        
  175.         if (class == ZOMBIECLASS_TANK)
  176.             return true;
  177.        
  178.         return false;
  179.     }
  180.    
  181.     return false;
  182. }
  183.  
  184. public IsValidClient(client)
  185. {
  186.     if (client <= 0)
  187.         return false;
  188.        
  189.     if (client > MaxClients)
  190.         return false;
  191.        
  192.     if (!IsClientInGame(client))
  193.         return false;
  194.        
  195.     if (!IsPlayerAlive(client))
  196.         return false;
  197.  
  198.     return true;
  199. }
Advertisement
Add Comment
Please, Sign In to add comment