#pragma semicolon 1
#include <sourcemod>
#include <cstrike>
#define PLUGIN_VERSION "1.0"
#define MSG "\x03[Medkits] \x01%t"
public Plugin:myinfo =
{
name = "Medkit",
author = "Push",
description = "Allow to use medkits",
version = PLUGIN_VERSION,
url = "http://css-quad.ru"
};
new Handle:medkit_team = INVALID_HANDLE;
new Handle:medkit_amount = INVALID_HANDLE;
new Handle:medkit_health_ps = INVALID_HANDLE;
new Handle:medkit_fullhealth = INVALID_HANDLE;
new Handle:medkit_maxhealth = INVALID_HANDLE;
new Handle:medkit_timer_tick = INVALID_HANDLE;
new bool:bAlreadyUses[MAXPLAYERS+1];
new Handle:hTimer[MAXPLAYERS+1] = INVALID_HANDLE;
new iMedKits[MAXPLAYERS+1], iHPCount[MAXPLAYERS+1];
public OnPluginStart()
{
LoadTranslations("medkit.phrases");
medkit_team = CreateConVar("medkit_team","1","1 - all/2 - t/3 - ct");
medkit_amount = CreateConVar("medkit_amount","5","amount of medkits for player");
medkit_health_ps = CreateConVar("medkit_health_ps","5","health per secound");
medkit_fullhealth = CreateConVar("medkit_fullhealth","30","full health");
medkit_timer_tick = CreateConVar("medkit_timer_tick","0.5","timer ticks");
medkit_maxhealth = CreateConVar("medkit_maxhealth","101","maximum health");
HookEvent("round_start",OnRoundStart);
HookEvent("round_end",OnRoundEnded);
RegConsoleCmd("medkit",GiveMedKit);
}
public OnRoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
for(new i = 1; i < MaxClients; i++){
hTimer[i] = INVALID_HANDLE;
iMedKits[i] = GetConVarInt(medkit_amount);
bAlreadyUses[i] = false;
iHPCount[i] = 0;
}
}
public OnRoundEnded(Handle:event, const String:name[], bool:dontBroadcast)
{
for(new i=1;i<=MaxClients;i++)
{
if(bAlreadyUses[i] && hTimer[i] != INVALID_HANDLE)
KillTimer(hTimer[i]);
}
}
public Action:GiveMedKit(client,args)
{
if(args || bAlreadyUses[client]) return Plugin_Continue;
if(GetClientHealth(client) >= GetConVarInt(medkit_maxhealth))
{
PrintToChat(client,MSG,"You already have maximum health");
return Plugin_Continue;
}
bAlreadyUses[client] = true;
new cvTeam = GetConVarInt(medkit_team);
new iTeam = (cvTeam == 1 ? 0 : (cvTeam == 2 ? CS_TEAM_T : CS_TEAM_CT));
new Float:fTimerTicks = GetConVarFloat(medkit_timer_tick);
iMedKits[client]--;
if((!iTeam || GetClientTeam(client) == iTeam) && fTimerTicks && IsPlayerAlive(client))
{
if(iMedKits[client] == -1)
{
PrintToChat(client,MSG,"You have not more kits");
return Plugin_Continue;
}
PrintToChat(client,MSG,"Left",iMedKits[client]);
hTimer[client] = CreateTimer(fTimerTicks,GiveHealth,client,TIMER_REPEAT);
}
return Plugin_Continue;
}
public Action:GiveHealth(Handle:timer,any:client)
{
new MaxHealth = GetConVarInt(medkit_maxhealth), iHPFull = GetConVarInt(medkit_fullhealth), iAddiction;
if(GetConVarInt(medkit_health_ps) > iHPFull)
SetConVarInt(medkit_health_ps,iHPFull);
new iHPPSec = GetConVarInt(medkit_health_ps);
if(GetClientHealth(client) > MaxHealth)
SetEntityHealth(client,MaxHealth);
if(IsPlayerAlive(client) && (GetClientHealth(client) == MaxHealth || iHPCount[client] >= iHPFull))
{
iHPCount[client] = 0;
bAlreadyUses[client] = false;
PrintToChat(client,MSG,"You cant have more health");
KillTimer(timer);
return Plugin_Continue;
}
iHPCount[client] += iHPPSec;
if(iHPCount[client] <= iHPFull){
iAddiction = GetClientHealth(client) + iHPPSec;
}
else if(iHPCount[client] > iHPFull)
{
iAddiction = (GetClientHealth(client) + iHPPSec) - (iHPCount[client] - iHPFull);
iHPCount[client] = iHPFull;
}
SetEntityHealth(client, MaxHealth >= iAddiction ? iAddiction : iAddiction - (iAddiction - MaxHealth));
return Plugin_Continue;
}
Comments