Comparing sensitive data, confidential files or internal emails?

Most legal and privacy policies prohibit uploading sensitive data online. Diffchecker Desktop ensures your confidential information never leaves your computer. Work offline and compare documents securely.

точно твоё авторство?)

Created Diff never expires
243 removals
385 lines
252 additions
398 lines
/**
* Copyright (C) Dev-CS Team, 2018
*
* This software is licensed under the GNU General Public License, version 3 or higher.
* Additional exceptions apply. For full license details, see LICENSE.txt or visit:
* https://alliedmods.net/amxmodx-license
*
* Description:
* This plugin add a new grenade item to game names as 'HealthNade'.
* The grenade will give additional health of allies (or all) nearby.
*
* Changelog:
* - 0.0.1 (20.11.17):
* - Init;
* - 0.0.2 (23.11.17):
* - FIX: AMXX 1.8.2 compilation;
* - Removed HamSandwich module.
* - 0.0.3 (25.12.17):
* - FIX: some bugs with 'emessage' flood; (Thanks to Mistrick)
* - Removed AMXX 1.8.2 support;
* - 0.0.4 (09.08.18):
* - FIX: The blinding effect is no longer reset;
* - Add: ScreenFade effect settings;
* - Add: Customisable models use (on/off);
* - Rework function for restrict item;
* - Simply API: SHN_S(G)etStatus (realy nned it?!);
*
* TODO:
* - Change the principle of the replacement Item (smart replacement).
*
* Credits: Arkshine, https://forums.alliedmods.net/showpost.php?p=1567176&postcount=16
*/

#include <amxmodx>
#include <amxmodx>
#include <fakemeta>
#include <fakemeta>
#include <engine>
#include <engine>
#include <fun>
#include <fun>
#include <csx>
#include <csx>


/* Settings */
#pragma semicolon 1
/* Enable action only for the privileged */
// #define ACCESS_FLAGS ( ADMIN_LEVEL_H )


/* Enable action only for teammates */
new const szPluginInfo[][] = {"Smoke HealthNade", "1.1", "medusa + ApXuTekToR"};
// #define ONLY_FOR_TEAMMATES


/* Enable Screenfade effect */
#define SUPPORT_GAMECMS
#define EFFECT_SCREENFADE


const HEALTH_TO_HEAL = 50;
#if defined SUPPORT_GAMECMS
const HEALTH_MAX = 100;
native Array:cmsapi_get_user_services(const index, const szAuth[] = "", const szService[] = "", serviceID = 0, bool:part = false);
const HEAL_RADIUS = 300;
#endif


/* You can disable those models */
#define MODEL_V "models/health_nade/v_he_mk_nade.mdl"
#define MODEL_V "models/v_he_mk_nade.mdl"
#define MODEL_P "models/health_nade/p_he_mk_nade.mdl"
#define MODEL_P "models/p_he_mk_nade.mdl"
#define MODEL_W "models/health_nade/w_he_mk_nade.mdl"
#define MODEL_W "models/w_he_mk_nade.mdl"


new const SPRITE_EXPLODE1[] = "sprites/heal_explode.spr";
new const SPRITE_EXPLODE1[] = "sprites/health_nade/heal_explode.spr";
new const SPRITE_PROS[] = "sprites/heal_shape.spr";
new const SPRITE_PROS[] = "sprites/health_nade/heal_shape.spr";


new const SOUND_HEAL[] = "woomen_expr.wav";
new const SOUND_HEAL[] = "health_nade/woomen_expr.wav";
/* End of settings */


enum {
enum {
XO_WEAPON = 4,
XO_WEAPON = 4,
XO_CGRENADE = 5,
XO_CGRENADE = 5,
m_pPlayer = 41,
m_pPlayer = 41,
m_usEvent = 114
m_usEvent = 114
}
}


new const EXCLASS[] = "grenade";
new const EXCLASS[] = "grenade";


enum { STATUSICON_HIDE = 0, STATUSICON_FLASH = 2 };
enum { STATUSICON_HIDE = 0, STATUSICON_FLASH = 2 };


const flagSmokeEvent = (1 << 1);
const flagSmokeEvent = (1 << 1);


#define IsSgGrenade(%1) (get_pdata_int(%1, m_usEvent, XO_CGRENADE) & flagSmokeEvent)
#define IsSgGrenade(%1) (get_pdata_int(%1, m_usEvent, XO_CGRENADE) & flagSmokeEvent)


#define _GetEntOwner(%1) pev(%1, pev_owner)
#define _GetEntOwner(%1) pev(%1, pev_owner)
#define _GetEntOrigin(%1,%2) pev(%1, pev_origin, %2)
#define _GetEntOrigin(%1,%2) pev(%1, pev_origin, %2)


#define _SetViewModel(%1,%2) set_pev(%1, pev_viewmodel2, %2)
#define _SetViewModel(%1,%2) set_pev(%1, pev_viewmodel2, %2)
#define _SetWeaponModel(%1,%2) set_pev(%1, pev_weaponmodel2, %2)
#define _SetWeaponModel(%1,%2) set_pev(%1, pev_weaponmodel2, %2)
#define _SetWorldModel(%1,%2) engfunc(EngFunc_SetModel, %1, %2)
#define _SetWorldModel(%1,%2) engfunc(EngFunc_SetModel, %1, %2)


#define _RemoveEntity(%1) engfunc(EngFunc_RemoveEntity, %1)
#define _RemoveEntity(%1) engfunc(EngFunc_RemoveEntity, %1)


#define _get_blindStartTime(%1) get_ent_data_float(%1, "CBasePlayer", "m_blindStartTime")
#define _get_blindStartTime(%1) get_ent_data_float(%1, "CBasePlayer", "m_blindStartTime")
#define _get_blindFadeTime(%1) get_ent_data_float(%1, "CBasePlayer", "m_blindFadeTime")
#define _get_blindFadeTime(%1) get_ent_data_float(%1, "CBasePlayer", "m_blindFadeTime")


#if AMXX_VERSION_NUM < 183
#if AMXX_VERSION_NUM < 183
#error [ERROR]: AMXX 1.8.2 - not supported (cuz use new fakemeta natives)!
#error [ERROR]: AMXX 1.8.2 - not supported (cuz use new fakemeta natives)!
#endif
#endif


new g_MsgId_StatusIcon, g_MsgId_ScreenFade;
new g_MsgId_StatusIcon, g_MsgId_ScreenFade;


new g_pFirstExplosion,
new g_pFirstExplosion,
g_pPros,
g_pPros,
g_pCircle;
g_pCircle;


enum status_s { status_DISABLED = 0, status_ENABLED = 1 };
enum status_s { status_DISABLED = 0, status_ENABLED = 1 };
new status_s: g_bCanUseItem = status_ENABLED;
new status_s: g_bCanUseItem = status_ENABLED;


new const VERSION[] = "0.0.4";
enum e_cvars {
c_AccessUse_Nade,
c_AccessFlags[16],
c_AccessServices[32],
c_HealTeammates_Or_All,

c_GiveHealth_Num,
c_GiveHealth_Limite,
c_GiveHealth_Radius,

c_ScreenFade_Effects,
}
new cvars[e_cvars];


public plugin_natives()
public plugin_natives()
{
{
register_native("SHN_SetStatus", "native__SetStatus", .style = 0);
register_native("SHN_SetStatus", "native__SetStatus", .style = 0);
register_native("SHN_GetStatus", "native__GetStatus", .style = 0);
register_native("SHN_GetStatus", "native__GetStatus", .style = 0);
}
}


public plugin_init() {
public plugin_init() {
register_plugin("Smoke: HealthNade", VERSION, "wopox1337");
g_MsgId_StatusIcon = get_user_msgid("StatusIcon");
g_MsgId_ScreenFade = get_user_msgid("ScreenFade");
register_touch(EXCLASS, "*", "CGrenade_ExplodeTouch");
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1");
initCvars();


g_MsgId_StatusIcon = get_user_msgid("StatusIcon");
register_srvcmd("HealthNade_lockmap", "Check_LockMap");
g_MsgId_ScreenFade = get_user_msgid("ScreenFade");


register_touch(EXCLASS, "*", "CGrenade_ExplodeTouch");
new szConfigsDir[256];
get_localinfo("amxx_configsdir", szConfigsDir, charsmax(szConfigsDir));
server_cmd("exec %s/SevCorp/HelthNade.cfg", szConfigsDir);
server_exec();
}


register_event("CurWeapon", "Event_CurWeapon", "be", "1=1");
#if defined SUPPORT_GAMECMS
public plugin_cfg() {
if(is_plugin_loaded("GameCMS_API") == INVALID_PLUGIN_ID)
{
log_amx("WARNING: gamecms_api.amxx isn't loaded! Plugin Stopped.");
pause("a");
return;
}
}
}
#endif


public plugin_precache() {
public plugin_precache() {
#if defined MODEL_V
register_plugin(szPluginInfo[0], szPluginInfo[1], szPluginInfo[2]);
precache_model(MODEL_V);
precache_model(MODEL_V);
#endif
precache_model(MODEL_P);
#if defined MODEL_P
precache_model(MODEL_W);
precache_model(MODEL_P);
g_pFirstExplosion = precache_model(SPRITE_EXPLODE1);
g_pPros = precache_model(SPRITE_PROS);
g_pCircle = precache_model("sprites/shockwave.spr");
precache_sound(SOUND_HEAL);

}

public initCvars() {
register_cvar("HelthGrenade_AccessUse_Nade", "0");
register_cvar("HelthGrenade_AccessFlags", "m");
#if defined SUPPORT_GAMECMS
register_cvar("HelthGrenade_AccessServices", "_healthnade");
#endif
#endif
#if defined MODEL_W
register_cvar("HelthGrenade_HealTeammates_Or_All", "0");
precache_model(MODEL_W);

register_cvar("HelthGrenade_GiveHealth_Num", "50");
register_cvar("HelthGrenade_GiveHealth_Limite", "110");
register_cvar("HelthGrenade_GiveHealth_Radius", "300");
register_cvar("HelthGrenade_ScreenFade_Effects", "1");

get_cvar_string("HelthGrenade_AccessFlags", cvars[c_AccessFlags], charsmax(cvars[c_AccessFlags]));
#if defined SUPPORT_GAMECMS
get_cvar_string("HelthGrenade_AccessServices", cvars[c_AccessServices], charsmax(cvars[c_AccessServices]));
#endif
#endif

cvars[c_AccessUse_Nade] = get_cvar_num("HelthGrenade_AccessUse_Nade");
g_pFirstExplosion = precache_model(SPRITE_EXPLODE1);
cvars[c_HealTeammates_Or_All] = get_cvar_num("HelthGrenade_HealTeammates_Or_All");
g_pPros = precache_model(SPRITE_PROS);
g_pCircle = precache_model("sprites/shockwave.spr");


precache_sound(SOUND_HEAL);
cvars[c_GiveHealth_Num] = get_cvar_num("HelthGrenade_GiveHealth_Num");
cvars[c_GiveHealth_Limite] = get_cvar_num("HelthGrenade_GiveHealth_Limite");
cvars[c_GiveHealth_Radius] = get_cvar_num("HelthGrenade_GiveHealth_Radius");
cvars[c_ScreenFade_Effects] = get_cvar_num("HelthGrenade_ScreenFade_Effects");
}
}


public Event_CurWeapon(pPlayer) {
public Event_CurWeapon(pPlayer) {
enum { WeaponID = 2 };
enum { WeaponID = 2 };
if(read_data(WeaponID) == CSW_SMOKEGRENADE) {
if(read_data(WeaponID) == CSW_SMOKEGRENADE) {
if(!IsAllowedToUse(pPlayer)) return;
if(!IsAllowedToUse(pPlayer)) return;

OnPlayer_SetViewModels(pPlayer);
#if defined MODEL_V
Send_StatusIcon__Cross(pPlayer);
OnPlayer_SetViewModels(pPlayer);
} else Send_StatusIcon__Cross(pPlayer, .status = STATUSICON_HIDE);
#endif

Send_StatusIcon__Cross(pPlayer);
}
else Send_StatusIcon__Cross(pPlayer, .status = STATUSICON_HIDE);
}
}


public grenade_throw(pPlayer, pEnt, w_id) {
public grenade_throw(pPlayer, pEnt, w_id) {
if(w_id != CSW_SMOKEGRENADE)
if(w_id != CSW_SMOKEGRENADE)
return;
return;


if(!IsAllowedToUse(pPlayer))
if(!IsAllowedToUse(pPlayer))
return;
return;


#if defined MODEL_W
OnGrenade_SetWorldModel(pEnt);
OnGrenade_SetWorldModel(pEnt);
#endif
}
}


public CGrenade_ExplodeTouch(const pEnt, const pOther) {
public CGrenade_ExplodeTouch(const pEnt, const pOther) {
// Filter to another grenades type
if(!IsSgGrenade(pEnt))
if(!IsSgGrenade(pEnt))
return;
return;

static iOwner; iOwner = _GetEntOwner(pEnt);

if(!IsAllowedToUse(iOwner))
return;

static Float: fOrigin[3], iOrigin[3];
_GetEntOrigin(pEnt, fOrigin);
FVecIVec(fOrigin, iOrigin);


// Show visuals
static iOwner; iOwner = _GetEntOwner(pEnt);
Send_Explode(iOrigin);
Send_Pros(iOrigin);
Send_ShockWave(iOrigin);
OnGrenade_PlaySound(pEnt);


// Removed default smoke entity, and his detonate event accordingly
if(!IsAllowedToUse(iOwner))
OnGrenade_RemoveByTouch(pEnt);
return;


// Action on near players
static Float: fOrigin[3], iOrigin[3];
HealPlayersOnRadius(iOwner, fOrigin);
_GetEntOrigin(pEnt, fOrigin);
FVecIVec(fOrigin, iOrigin);
Send_Explode(iOrigin);
Send_Pros(iOrigin);
Send_ShockWave(iOrigin);
OnGrenade_PlaySound(pEnt);
OnGrenade_RemoveByTouch(pEnt);
HealPlayersOnRadius(iOwner, fOrigin);
}
}


stock HealPlayersOnRadius(pInflictor, Float: fOrigin[3]) {
stock HealPlayersOnRadius(pInflictor, Float: fOrigin[3]) {
for(new pPlayer = 1; pPlayer <= MaxClients; pPlayer++) {
for(new pPlayer = 1; pPlayer <= MaxClients; pPlayer++) {
if(is_user_alive(pPlayer)) {
if(is_user_alive(pPlayer)) {


#if !defined ONLY_FOR_TEAMMATES
if(cvars[c_HealTeammates_Or_All] == 1) {
if(get_user_team(pInflictor) != get_user_team(pPlayer))
if(get_user_team(pInflictor) != get_user_team(pPlayer))
continue;
continue;
#endif
}
#pragma unused pInflictor


static Float: playerOrigin[3];
#pragma unused pInflictor
_GetEntOrigin(pPlayer, playerOrigin);


if(get_distance_f(fOrigin, playerOrigin) < HEAL_RADIUS)
static Float: playerOrigin[3];
OnPlayer_HealEvent(pPlayer);
_GetEntOrigin(pPlayer, playerOrigin);
}

}
if(get_distance_f(fOrigin, playerOrigin) < cvars[c_GiveHealth_Radius])
OnPlayer_HealEvent(pPlayer);
}
}
}
}


stock OnPlayer_HealEvent(const pPlayer) {
stock OnPlayer_HealEvent(const pPlayer) {
set_user_health(pPlayer, min(get_user_health(pPlayer) + HEALTH_TO_HEAL, HEALTH_MAX));
if((get_user_health(pPlayer) + cvars[c_GiveHealth_Num]) < cvars[c_GiveHealth_Limite]) {
set_user_health(pPlayer, (get_user_health(pPlayer) + cvars[c_GiveHealth_Num]));
} else if((get_user_health(pPlayer) + cvars[c_GiveHealth_Num]) >= cvars[c_GiveHealth_Limite]) {
set_user_health(pPlayer, cvars[c_GiveHealth_Limite]);
}


#if defined EFFECT_SCREENFADE
if(cvars[c_ScreenFade_Effects] == 1) {
if(!IsBlind(pPlayer))
if(!IsBlind(pPlayer)) __UTIL_ScreenFade(pPlayer);
__UTIL_ScreenFade(pPlayer);
}
#endif
}
}


#if (defined MODEL_V || defined MODEL_P)
stock OnPlayer_SetViewModels(const pPlayer) {
stock OnPlayer_SetViewModels(const pPlayer) {
#if defined MODEL_V
_SetViewModel(pPlayer, MODEL_V);
_SetViewModel(pPlayer, MODEL_V);
_SetWeaponModel(pPlayer, MODEL_P);
#endif
#if defined MODEL_P
_SetWeaponModel(pPlayer, MODEL_P);
#endif
}
}
#endif


stock OnGrenade_SetWorldModel(const pEnt)
stock OnGrenade_SetWorldModel(const pEnt)
_SetWorldModel(pEnt, MODEL_W);
_SetWorldModel(pEnt, MODEL_W);


stock OnGrenade_RemoveByTouch(const pEnt)
stock OnGrenade_RemoveByTouch(const pEnt)
_RemoveEntity(pEnt);
_RemoveEntity(pEnt);


stock Send_StatusIcon__Cross(const pPlayer, status = STATUSICON_FLASH) {
stock Send_StatusIcon__Cross(const pPlayer, status = STATUSICON_FLASH) {
message_begin(MSG_ONE_UNRELIABLE, g_MsgId_StatusIcon, .player = pPlayer);
message_begin(MSG_ONE_UNRELIABLE, g_MsgId_StatusIcon, .player = pPlayer);
write_byte(status);
write_byte(status);
write_string("cross");
write_string("cross");
write_byte(0);
write_byte(0);
write_byte(255);
write_byte(255);
write_byte(0);
write_byte(0);
message_end();
message_end();
}
}


stock OnGrenade_PlaySound(const pEnt)
stock OnGrenade_PlaySound(const pEnt)
engfunc(EngFunc_EmitSound, pEnt, CHAN_WEAPON, SOUND_HEAL, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
engfunc(EngFunc_EmitSound, pEnt, CHAN_WEAPON, SOUND_HEAL, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);




stock Send_Explode(iOrigin[3]) {
stock Send_Explode(iOrigin[3]) {
emessage_begin(MSG_PVS, SVC_TEMPENTITY);
emessage_begin(MSG_PVS, SVC_TEMPENTITY);
ewrite_byte(TE_EXPLOSION);
ewrite_byte(TE_EXPLOSION);
ewrite_coord(iOrigin[0]);
ewrite_coord(iOrigin[0]);
ewrite_coord(iOrigin[1]);
ewrite_coord(iOrigin[1]);
ewrite_coord(iOrigin[2] + 65);
ewrite_coord(iOrigin[2] + 65);
ewrite_short(g_pFirstExplosion);
ewrite_short(g_pFirstExplosion);
ewrite_byte(30);
ewrite_byte(30);
ewrite_byte(20);
ewrite_byte(20);
ewrite_byte(TE_EXPLFLAG_NOSOUND | TE_EXPLFLAG_NOPARTICLES);
ewrite_byte(TE_EXPLFLAG_NOSOUND | TE_EXPLFLAG_NOPARTICLES);
emessage_end();
emessage_end();
}
}


stock Send_Pros(iOrigin[3]) {
stock Send_Pros(iOrigin[3]) {
emessage_begin(MSG_PVS, SVC_TEMPENTITY);
emessage_begin(MSG_PVS, SVC_TEMPENTITY);
ewrite_byte(TE_SPRITETRAIL);
ewrite_byte(TE_SPRITETRAIL);
ewrite_coord(iOrigin[0]);
ewrite_coord(iOrigin[0]);
ewrite_coord(iOrigin[1]);
ewrite_coord(iOrigin[1]);
ewrite_coord(iOrigin[2] + 20);
ewrite_coord(iOrigin[2] + 20);
ewrite_coord(iOrigin[0]);
ewrite_coord(iOrigin[0]);
ewrite_coord(iOrigin[1]);
ewrite_coord(iOrigin[1]);
ewrite_coord(iOrigin[2] + 80);
ewrite_coord(iOrigin[2] + 80);
ewrite_short(g_pPros);
ewrite_short(g_pPros);
ewrite_byte(20);
ewrite_byte(20);
ewrite_byte(20);
ewrite_byte(20);
ewrite_byte(4);
ewrite_byte(4);
ewrite_byte(20);
ewrite_byte(20);
ewrite_byte(10);
ewrite_byte(10);
emessage_end();
emessage_end();
}
}


stock Send_ShockWave(iOrigin[3]) {
stock Send_ShockWave(iOrigin[3]) {
emessage_begin(MSG_PVS, SVC_TEMPENTITY);
emessage_begin(MSG_PVS, SVC_TEMPENTITY);
ewrite_byte(TE_BEAMCYLINDER);
ewrite_byte(TE_BEAMCYLINDER);
ewrite_coord(iOrigin[0]);
ewrite_coord(iOrigin[0]);
ewrite_coord(iOrigin[1]);
ewrite_coord(iOrigin[1]);
ewrite_coord(iOrigin[2]);
ewrite_coord(iOrigin[2]);
ewrite_coord(iOrigin[0]);
ewrite_coord(iOrigin[0]);
ewrite_coord(iOrigin[1]);
ewrite_coord(iOrigin[1]);
ewrite_coord(iOrigin[2] + HEAL_RADIUS);
ewrite_coord(iOrigin[2] + cvars[c_GiveHealth_Radius]);
ewrite_short(g_pCircle);
ewrite_short(g_pCircle);
ewrite_byte(0);
ewrite_byte(0);
ewrite_byte(1);
ewrite_byte(1);
ewrite_byte(5);
ewrite_byte(5);
ewrite_byte(30);
ewrite_byte(30);
ewrite_byte(1);
ewrite_byte(1);
ewrite_byte(10);
ewrite_byte(10);
ewrite_byte(255);
ewrite_byte(255);
ewrite_byte(40);
ewrite_byte(40);
ewrite_byte(255);
ewrite_byte(255);
ewrite_byte(5);
ewrite_byte(5);
emessage_end();
emessage_end();
}
}


stock __UTIL_ScreenFade(const pPlayer, iColor[3] = {170, 255, 0}, iAlpha = 80, Float: flFxTime = 1.0, Float: flHoldTime = 0.3) {
stock __UTIL_ScreenFade(const pPlayer, iColor[3] = {170, 255, 0}, iAlpha = 80, Float: flFxTime = 1.0, Float: flHoldTime = 0.3) {
const FFADE_IN = 0x0000;
const FFADE_IN = 0x0000;


emessage_begin(MSG_ONE_UNRELIABLE, g_MsgId_ScreenFade, .player = pPlayer);
emessage_begin(MSG_ONE_UNRELIABLE, g_MsgId_ScreenFade, .player = pPlayer);
ewrite_short(FixedUnsigned16(flFxTime));
ewrite_short(FixedUnsigned16(flFxTime));
ewrite_short(FixedUnsigned16(flHoldTime));
ewrite_short(FixedUnsigned16(flHoldTime));
ewrite_short(FFADE_IN);
ewrite_short(FFADE_IN);
ewrite_byte(iColor[0]);
ewrite_byte(iColor[0]);
ewrite_byte(iColor[1]);
ewrite_byte(iColor[1]);
ewrite_byte(iColor[2]);
ewrite_byte(iColor[2]);
ewrite_byte(iAlpha);
ewrite_byte(iAlpha);
emessage_end();
emessage_end();
}
}


stock FixedUnsigned16(Float:flValue, iScale = (1 << 12)) {
stock FixedUnsigned16(Float:flValue, iScale = (1 << 12)) {
return clamp(floatround(flValue * iScale), 0, 0xFFFF);
return clamp(floatround(flValue * iScale), 0, 0xFFFF);
}

stock IsUserHaveAccessToUse(const pPlayer) {
// Anytime we can add other checks like cached bool
return (get_user_flags(pPlayer) & ACCESS_FLAGS);
}
}


bool: IsAllowedToUse(pPlayer) {
bool: IsAllowedToUse(pPlayer) {
#pragma unused pPlayer
#pragma unused pPlayer


#if defined ACCESS_FLAGS
if(cvars[c_AccessUse_Nade] == 1) {
if(!IsUserHaveAccessToUse(pPlayer)) {
if(!(checkAccess(pPlayer, cvars[c_AccessFlags]))) {
return false;
return false;
}
}
}
#if defined SUPPORT_GAMECMS
else if(cvars[c_AccessUse_Nade] == 2) {
static Array:Services;
Services = cmsapi_get_user_services(pPlayer, "", cvars[c_AccessServices]);
if(!Services) {
return false;
}
}
#endif
#endif


if(g_bCanUseItem == status_DISABLED) {
if(g_bCanUseItem == status_DISABLED) {
// client_print_color(pPlayer, print_team_red, "^3 You no may use this grenade now!");
client_print_color(pPlayer, print_team_default, "^3[^4Nade^3] ^1Лечебная граната выключена^4!");
return false;
return false;
}
}

return true;
// Also you can add another conditions there...
return true;
}
}


stock bool: IsBlind(pPlayer) {
stock bool: IsBlind(pPlayer) {
return bool:(Float: _get_blindStartTime(pPlayer) + Float: _get_blindFadeTime(pPlayer) >= get_gametime());
return bool:(Float: _get_blindStartTime(pPlayer) + Float: _get_blindFadeTime(pPlayer) >= get_gametime());
}

checkAccess(const pPlayer, const flags[]){
return (get_user_flags(pPlayer) & read_flags(flags));
}
}


/* API?! */
/* API?! */


/**
/**
* Set item status to use.
* Set item status to use.
*
*
* @note Usage examples:
* @note Usage examples:
* SHN_SetStatus(1);
* SHN_SetStatus(1);
*
*
* @param status: 1 - enabled / 0 - disabled
* @param status: 1 - enabled / 0 - disabled
*
*
* @noreturn
* @noreturn
*/
*/
// native SHN_SetStatus(status)
// native SHN_SetStatus(status)
public native__SetStatus(plugin_id, argc)
public native__SetStatus(plugin_id, argc)
{
{
enum { arg_status = 1 };
enum { arg_status = 1 };


g_bCanUseItem = get_param(arg_status) == 1 ? status_ENABLED : status_DISABLED;
g_bCanUseItem = get_param(arg_status) == 1 ? status_ENABLED : status_DISABLED;
}
}


/**
/**
* Retrieves the item status to use.
* Retrieves the item status to use.
*
*
* @note Usage examples:
* @note Usage examples:
* SHN_GetStatus();
* SHN_GetStatus();
*
*
* @return Current status: 1 - enabled / 0 - disabled
* @return Current status: 1 - enabled / 0 - disabled
*/
*/
// native SHN_GetStatus()
// native SHN_GetStatus()
public native__GetStatus(plugin_id, argc)
public native__GetStatus(plugin_id, argc)
{
{
return g_bCanUseItem == status_ENABLED ? status_ENABLED : status_DISABLED;
return g_bCanUseItem == status_ENABLED ? status_ENABLED : status_DISABLED;
}

/* ============= Блокировка карт =========================== */
public Check_LockMap()
{
new getmap[32], map[32];
read_args(getmap, charsmax(getmap));
remove_quotes(getmap);

get_mapname(map, charsmax(map));

if(!strcmp(getmap, map, true))
{
pause("ad");
}
}
}