Advertisement
FlacoBey

Чтобы таблетки и адрик работал постепенно

Jun 20th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.22 KB | None | 0 0
  1. #pragma semicolon 1
  2. #pragma newdecls required
  3.  
  4. public void OnPluginStart()
  5. {
  6.     HookEvent("adrenaline_used", AdrenalineUsed_Event);
  7.     HookEvent("pills_used", PillsUsed_Event);
  8.    
  9.     Handle g_hPillCvar = FindConVar("pain_pills_health_value");
  10.     Handle g_hAdrenCvar = FindConVar("adrenaline_health_buffer");
  11.     SetConVarInt(g_hPillCvar, 0);
  12.     SetConVarInt(g_hAdrenCvar, 0);
  13. }
  14.  
  15. public Action PillsUsed_Event(Event event, const char[] name, bool dontBroadcast)
  16. {
  17.     int client = GetClientOfUserId(event.GetInt("userid"));
  18.     HealEntityOverTime(client, 1.5, 1, 55);
  19. }
  20.  
  21. public Action AdrenalineUsed_Event(Event event, const char[] name, bool dontBroadcast)
  22. {
  23.     int client = GetClientOfUserId(event.GetInt("userid"));
  24.     HealEntityOverTime(client, 0.8, 1, 20);
  25. }
  26.  
  27. stock Action HealEntityOverTime(int client, float interval, any increment, int total)
  28. {
  29.     if(!client || !IsClientInGame(client) || !IsPlayerAlive(client))    return Plugin_Handled;
  30.  
  31.     if(increment >= total)
  32.         HealTowardsMax(client, total, 100);
  33.     else
  34.     {
  35.         HealTowardsMax(client, increment, 100);
  36.         DataPack myDP;
  37.         CreateDataTimer(interval, HotPills, myDP, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
  38.         WritePackCell(myDP, client);
  39.         WritePackCell(myDP, increment);
  40.         WritePackCell(myDP, total-increment);
  41.         WritePackCell(myDP, 100);
  42.     }
  43.     return Plugin_Continue;
  44. }
  45.  
  46. public Action HotPills(Handle timer, DataPack pack)
  47. {
  48.     ResetPack(pack);
  49.     int client = ReadPackCell(pack);
  50.     int increment = ReadPackCell(pack);
  51.     DataPackPos pos = GetPackPosition(pack);
  52.     int remaining = ReadPackCell(pack);
  53.     int maxhp = ReadPackCell(pack);
  54.    
  55.     if(client==0 || !IsClientInGame(client) || !IsPlayerAlive(client))
  56.     {
  57.         return Plugin_Stop;
  58.     }
  59.    
  60.     if(increment >= remaining)
  61.     {
  62.         HealTowardsMax(client, remaining, maxhp);
  63.         return Plugin_Stop;
  64.     }
  65.     HealTowardsMax(client, increment, maxhp);
  66.     SetPackPosition(pack, pos);
  67.     WritePackCell(pack, remaining-increment);
  68.    
  69.     return Plugin_Continue;
  70. }
  71.  
  72. stock void HealTowardsMax(int client, int amount, int max)
  73. {
  74.     float hb = float(amount) + GetEntPropFloat(client, Prop_Send, "m_healthBuffer");
  75.     float overflow = (hb + GetClientHealth(client)) - max;
  76.     if(overflow > 0)
  77.         hb -= overflow;
  78.     SetEntPropFloat(client, Prop_Send, "m_healthBuffer", hb);
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement