#pragma semicolon 1 #include #include #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; }