Pushok icon

SourcePawn Medkit

Pushok | PRO | 03/07/11 07:25:58 PM UTC | 0 ⭐ | 720 👁️ | Never ⏰ | []
Pawn |

3.71 KB

|

None

|

0 👍

/

0 👎

#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