Advertisement
FlacoBey

Untitled

Feb 3rd, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.85 KB | None | 0 0
  1. #include sdktools
  2. #include sdkhooks
  3.  
  4. new bool:IsHealer[MAXPLAYERS+1] = false;
  5. new bool:IsUsing = false;
  6. static Handle hHealCount, hMaxHealth, hDurationRing, hDistance;
  7.  
  8. Handle HealTimer[MAXPLAYERS+1];
  9.  
  10. int g_HaloSprite;
  11. int g_BeamSprite;
  12. int yourColor[4] = {220, 20, 60, 255};
  13.  
  14. public OnPluginStart()
  15. {
  16.     hHealCount = CreateConVar("hCvarHealCount", "5", "Кол-во лечения", FCVAR_NONE, true, 1.0, true, 50000.0);
  17.     hMaxHealth = CreateConVar("hCvarMaxHeal", "75", "Максимальный прохил", FCVAR_NONE);
  18.     hDurationRing = CreateConVar("hCvarDuration", "15.0", "Время жизни кольца", FCVAR_NONE)
  19.     hDistance = CreateConVar("hCvarDuration", "600.0", "Дистаннция", FCVAR_NONE)
  20.     //CoolDown = CreateConVar("hCvarCoolDown", "15.0", "Кул даун юзания", FCVAR_NONE)
  21.     AutoExecConfig(true, "hMedicPlug");
  22. }
  23.  
  24. public OnMapStart()
  25. {
  26.     HookEvent("bullet_impact", hImpact)
  27.     HookEvent("player_afk", hAfkFix)
  28.     HookEvent("player_death", hDeath)
  29.     CreateTimer(30.0, hSetMedic, TIMER_FLAG_NO_MAPCHANGE)
  30.    
  31.     g_BeamSprite = PrecacheModel("materials/sprites/laserbeam.vmt", true);
  32.     g_HaloSprite = PrecacheModel("materials/sprites/halo01.vmt", true);
  33. }
  34.  
  35. public hDeath(Handle:event, const String:name[], bool:dontBroadcast)
  36. {
  37.     new client = GetClientOfUserId(GetEventInt(event, "userid"));
  38.     if(IsHealer[client])
  39.     {
  40.         PrintToChatAll("Медик погиб в перестрелке(земля ему пухом)", client)
  41.     }
  42. }
  43.  
  44. public hAfkFix(Handle:event, const String:name[], bool:dontBroadcast)
  45. {
  46.     new client = GetClientOfUserId(GetEventInt(event, "player"));
  47.     if(IsHealer[client])
  48.     {
  49.         IsHealer[client] = false;
  50.         new healer = GetAnyRandomSurvivor()
  51.         IsHealer[healer] = true;
  52.         PrintToChatAll("Медик %N отошёл от игры", client);
  53.         PrintToChatAll("%N стал новым медиком", healer);
  54.     }
  55. }
  56.  
  57. public hImpact(Handle:event, const String:name[], bool:dontBroadcast)
  58. {
  59.     new client = GetClientOfUserId(GetEventInt(event, "userid"));
  60.     new Float:f_Pos[3];
  61.     f_Pos[0] = GetEventFloat(event, "x");
  62.     f_Pos[1] = GetEventFloat(event, "y");
  63.     f_Pos[2] = GetEventFloat(event, "z");
  64.    
  65.     f_Pos[2] += 15;
  66.     if(IsUsing != true)
  67.     {
  68.         if(bIsSurvivor(client))
  69.         {
  70.             new weap = GetPlayerWeaponSlot(client, 1)
  71.             char sWeaponEx[32];
  72.             GetEntityClassname(weap, sWeaponEx, sizeof(sWeaponEx))
  73.             if(StrEqual(sWeaponEx, "weapon_pistol_magnum"))
  74.             {
  75.                 if(IsHealer[client])
  76.                 {
  77.                     TE_SetupBeamRingPoint(f_Pos, GetConVarFloat(hDistance), -600.1, g_BeamSprite, g_HaloSprite, 0, 66, GetConVarFloat(hDurationRing), 4.2, 1.0, yourColor, 20, 0)
  78.                     TE_SetupBeamRingPoint(f_Pos, GetConVarFloat(hDistance), -600.1, g_BeamSprite, g_HaloSprite, 0, 66, GetConVarFloat(hDurationRing), 4.2, 1.0, yourColor, 20, 0)
  79.                     TE_SendToAll();
  80.                    
  81.                     new Handle:pack;
  82.                    
  83.                     HealTimer[client] = CreateDataTimer(1.0, Healing, pack, TIMER_REPEAT);
  84.                     IsUsing = true;
  85.                     WritePackCell(pack, client);
  86.                     WritePackFloat(pack, f_Pos[0]);
  87.                     WritePackFloat(pack, f_Pos[1]);
  88.                     WritePackFloat(pack, f_Pos[2]);
  89.                     WritePackFloat(pack, GetEngineTime());
  90.                    
  91.                    
  92.                 //  CreateTimer(GetConVarFloat(hDurationRing), KillHeal, client);
  93.                 }
  94.             }
  95.         }
  96.     }
  97. }
  98.  
  99. public Action:Healing(Handle:timer, Handle:pack)
  100. {
  101.     float bPos[3], vPos[3];
  102.    
  103.     ResetPack(pack);
  104.     new client = ReadPackCell(pack);
  105.     bPos[0] = ReadPackFloat(pack);
  106.     bPos[1] = ReadPackFloat(pack);
  107.     bPos[2] = ReadPackFloat(pack);
  108.     new Float:time=ReadPackFloat(pack);
  109.    
  110.     if(GetEngineTime() - time < GetConVarFloat(hDurationRing))
  111.     {
  112.         for (new i = 1; i <= MaxClients; i++)
  113.         {
  114.             if(bIsSurvivor(i))
  115.             {
  116.                 GetEntPropVector(i, Prop_Send, "m_vecOrigin", vPos);
  117.                 float fTargetDistance = GetVectorDistance(bPos, vPos);
  118.                 if (fTargetDistance > GetConVarFloat(hDistance)) continue;
  119.                 new HP = GetClientHealth(i);
  120.                 if(HP < GetConVarInt(hMaxHealth))
  121.                 {
  122.                     SetEntityHealth(client, HP + GetConVarInt(hHealCount))
  123.                 }
  124.             }
  125.         }
  126.     }
  127.     else
  128.     {
  129.         IsUsing = false;
  130.         KillTimer(HealTimer[client]);
  131.         HealTimer[client] = INVALID_HANDLE;
  132.     }
  133. }
  134.  
  135. public Action:hSetMedic(Handle timer, any fuck)
  136. {
  137.     new client = GetAnyRandomSurvivor()
  138.     if(client > 0)
  139.     {
  140.         IsHealer[client] = true;
  141.         GiveFunction(client, "pistol_magnum")
  142.         PrintToChatAll("%N стал медиком", client);
  143.     }
  144. }
  145.  
  146. public OnClientPutInServer(client)
  147. {
  148.     //SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
  149.     SDKHook(client, SDKHook_WeaponCanUse, WeaponCanUse);
  150. }
  151.  
  152. public OnClientDisconnect(client)
  153. {
  154.     //SDKUnhook(client, SDKHook_OnTakeDamage, OnTakeDamage);
  155.     SDKUnhook(client, SDKHook_WeaponCanUse, WeaponCanUse);
  156.     if(IsHealer[client] == true)
  157.     {
  158.         IsHealer[client] = false;
  159.         new healer = GetAnyRandomSurvivor()
  160.         IsHealer[healer] = true;
  161.         PrintToChatAll("Медик %N покинул игру", client);
  162.         PrintToChatAll("%N стал новым медиком", healer);
  163.     }
  164.    
  165.     if (HealTimer[client] != INVALID_HANDLE)
  166.     {
  167.         KillTimer(HealTimer[client]);
  168.         HealTimer[client] = INVALID_HANDLE;
  169.     }
  170. }
  171.  
  172. public Action:WeaponCanUse(client, weapon)
  173. {
  174.     if(bIsSurvivor(client))
  175.     {
  176.         if(IsHealer[client])
  177.         {
  178.             new wepn = GetPlayerWeaponSlot(client, 1)
  179.             if (!IsValidEntity(wepn))
  180.             {
  181.                 return Plugin_Continue;
  182.             }
  183.             decl String:sWeaponEx[32];
  184.             GetEntityClassname(wepn, sWeaponEx, sizeof(sWeaponEx));
  185.            
  186.             new String:sClassName[64];
  187.             GetEntityClassname(weapon, sClassName, sizeof(sClassName));
  188.            
  189.             if(StrEqual(sWeaponEx, "weapon_pistol_magnum"))
  190.             {
  191.                 if(StrEqual(sClassName, "weapon_melee") || StrEqual(sClassName, "weapon_pistol"))
  192.                 {
  193.                     return Plugin_Handled;
  194.                 }
  195.             }
  196.         }
  197.     }
  198.     return Plugin_Continue;
  199. }
  200.  
  201. /*
  202. public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)  
  203. {
  204.     if(bIsSurvivor(victim) && bIsSurvivor(attacker))
  205.     {
  206.         if(IsHealer[attacker] == true)
  207.         {
  208.             decl String:classname[64];
  209.             GetClientWeapon(attacker, classname, sizeof(classname));
  210.             if(StrEqual(classname, "weapon_pistol_magnum"))
  211.             {
  212.                 damage = 0.0
  213.                 int heal = GetClientHealth(victim)
  214.                 if(GetConVarInt(hMaxHealth) < heal)
  215.                 {
  216.                     SetEntityHealth(victim, GetConVarInt(hHealCount) + 4);
  217.                 }
  218.             }
  219.         }
  220.     }
  221. }
  222. */
  223.  
  224. stock GetAnyRandomSurvivor()
  225. {
  226.     new electables = 0, pool[4];
  227.     for (new player = 1; player <= MaxClients; player++)
  228.     {
  229.         if (player > 0 && bIsSurvivor(player))
  230.         {
  231.             pool[electables] = player;
  232.             electables += 1;
  233.         }
  234.     }
  235.     return pool[GetRandomInt(0, electables)];
  236. }
  237.  
  238. void GiveFunction(int client, char[] name)
  239. {
  240.     char sBuf[32];
  241.     int flags = GetCommandFlags("give");
  242.     SetCommandFlags("give", flags & ~FCVAR_CHEAT);
  243.     FormatEx(sBuf, sizeof sBuf, "give %s", name);
  244.     FakeClientCommand(client, sBuf);
  245. }
  246.  
  247. stock bool bIsSurvivor(int client)
  248. {
  249.     return client > 0 && client <= MaxClients && IsClientInGame(client) && GetClientTeam(client) == 2 && !IsClientInKickQueue(client) && IsPlayerAlive(client);
  250. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement