include <amxmodx>
#include <amxmisc>
#include <reapi>
#define AUTO_CREATE_CONFIG //Đвто-Ńоздание конфига. (включать только еŃли включен режим MASK_ALL_MODE)
#define MULTI_LANGUAGE(%0) fmt("%L", LANG_SERVER, %0)
#define ACCESS_FLAG_MENU (ADMIN_BAN|ADMIN_USER) //Maske menusune erisecek yetkililer
#define MASK_ALL_MODE //Etkinlestirilirse giren herkese otomatik maske verilir
//#define MASK_ACCESS //MASK_ALL_MODE Etkinlestirildiginde calisir (Maske sadece ACCESS_FLAG_MENU kisminda ayarlanilan yetkililere verilir)
new const PLUGIN[] = "COVID mode";
new const VERSION[] = "1.0.4";
new const AUTHOR[] = "wellasgood";
new const MEDICAL_MODEL[] = "models/med-mask.mdl";
new Model, Entity[MAX_PLAYERS+1];
#if defined MASK_ALL_MODE
new bool:Check[MAX_PLAYERS+1];
enum _:CVAR_DATA
{
MASK_HEALTH_EN,
MASK_HEALTH_NUM,
MASK_HEALTH_MSG
};
new eCvarData[CVAR_DATA], bool:CheckHealth[MAX_PLAYERS+1];
#endif
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_dictionary("covid.txt");
register_clcmd("say /covid", "cmdOpenMenu");
register_clcmd("say /cv", "cmdOpenMenu");
register_clcmd("say /maske", "cmdOpenMenu");
register_menu("CovidMenu", 1023, "Handle_CovidMenu", 0);
#if defined MASK_ALL_MODE
RegisterHookChain(RG_CBasePlayer_Spawn, "EventSpawn", true);
RegCvars();
#if defined AUTO_CREATE_CONFIG
AutoExecConfig(true, "COVID mode");
#endif
#endif
}
#if defined MASK_ALL_MODE
RegCvars()
{
bind_pcvar_num(create_cvar(
.name = "cv_mask_health_en",
.string = "1",
.description = MULTI_LANGUAGE("DESCRIPTION_CVAR_HEALTH_EN"),
.has_min = true,
.min_val = 0.0,
.has_max = true,
.max_val = 1.0),
eCvarData[MASK_HEALTH_EN]
);
bind_pcvar_num(create_cvar(
.name = "cv_mask_health_num",
.string = "5",
.description = MULTI_LANGUAGE("DESCRIPTION_CVAR_HEALTH_NUM"),
.has_min = false,
.min_val = 0.0,
.has_max = false,
.max_val = 0.0),
eCvarData[MASK_HEALTH_NUM]
);
bind_pcvar_num(create_cvar(
.name = "cv_mask_health_msg",
.string = "1",
.description = MULTI_LANGUAGE("DESCRIPTION_CVAR_HEALTH_MSG"),
.has_min = true,
.min_val = 0.0,
.has_max = true,
.max_val = 1.0),
eCvarData[MASK_HEALTH_MSG]
);
}
#endif
public plugin_precache()
{
if(!file_exists(fmt("\%s", MEDICAL_MODEL)))
{
set_fail_state(MULTI_LANGUAGE("COVID_ERRROR_MSG"));
}
else
{
Model = precache_model(MEDICAL_MODEL);
}
}
#if defined MASK_ALL_MODE
public client_putinserver(PlayerID)
{
if(is_user_bot(PlayerID) || is_user_hltv(PlayerID))
{
return;
}
Check[PlayerID] = false;
if(eCvarData[MASK_HEALTH_EN])
{
CheckHealth[PlayerID] = false;
}
#if defined MASK_ACCESS
if(get_user_flags(PlayerID) & ACCESS_FLAG_MENU)
{
CreateEnt(PlayerID);
}
#else
CreateEnt(PlayerID);
#endif
}
public EventSpawn(PlayerID)
{
if(!is_user_alive(PlayerID))
{
return;
}
if(eCvarData[MASK_HEALTH_EN])
{
if(CheckHealth[PlayerID])
{
new Float:HP = get_entvar(PlayerID, var_health);
set_entvar(PlayerID, var_health, HP - eCvarData[MASK_HEALTH_NUM]);
if(eCvarData[MASK_HEALTH_MSG])
{
HealthMsg(PlayerID, 2);
}
}
}
if(Entity[PlayerID] && is_entity(Entity[PlayerID]))
{
if(!Check[PlayerID])
{
SetMask(PlayerID);
}
}
}
#endif
public client_disconnected(PlayerID)
{
RemoveMask(PlayerID);
}
public cmdOpenMenu(PlayerID)
{
if(get_user_flags(PlayerID) & ACCESS_FLAG_MENU)
{
CovidMenu(PlayerID);
}
return PLUGIN_HANDLED;
}
CovidMenu(PlayerID)
{
new Menu[MAX_MENU_LENGTH], Keys = MENU_KEY_1|MENU_KEY_0;
new Len = formatex(Menu, charsmax(Menu), "%L^n^n", PlayerID, "COVID_MENU_TITLE");
Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r[1] \y# \w%L \y[\r%L\y]^n^n", PlayerID, "COVID_MENU_ITEM_INFO", PlayerID, Entity[PlayerID] == 0 ? "COVID_MENU_ITEM_OFF" : "COVID_MENU_ITEM_ON");
formatex(Menu[Len], charsmax(Menu) - Len, "\r[0] \y# \w%L", PlayerID, "COVID_MENU_EXIT");
return show_menu(PlayerID, Keys, Menu, -1, "CovidMenu");
}
public Handle_CovidMenu(PlayerID, Keys)
{
switch(Keys)
{
case 0:
{
if(Entity[PlayerID] && is_entity(Entity[PlayerID]))
{
RemoveMask(PlayerID);
#if defined MASK_ALL_MODE
Check[PlayerID] = false;
if(eCvarData[MASK_HEALTH_EN])
{
CheckHealth[PlayerID] = true;
HealthMsg(PlayerID, 1);
}
#endif
}
else
{
CreateEnt(PlayerID);
SetMask(PlayerID);
#if defined MASK_ALL_MODE
Check[PlayerID] = true;
if(eCvarData[MASK_HEALTH_EN])
{
CheckHealth[PlayerID] = false;
HealthMsg(PlayerID, 1);
}
#endif
}
}
case 9:
{
return PLUGIN_HANDLED;
}
}
CovidMenu(PlayerID);
return PLUGIN_HANDLED;
}
SetMask(PlayerID)
{
set_entvar(Entity[PlayerID], var_body, 0);
}
RemoveMask(PlayerID)
{
if(Entity[PlayerID] && is_entity(Entity[PlayerID]))
{
set_entvar(Entity[PlayerID], var_flags, FL_KILLME);
set_entvar(Entity[PlayerID], var_nextthink, get_gametime());
Entity[PlayerID] = 0;
}
}
CreateEnt(PlayerID)
{
if((Entity[PlayerID] = rg_create_entity("info_target")))
{
set_entvar(Entity[PlayerID], var_classname, "_covid_medical_mask");
set_entvar(Entity[PlayerID], var_model, MEDICAL_MODEL);
set_entvar(Entity[PlayerID], var_modelindex, Model);
set_entvar(Entity[PlayerID], var_movetype, MOVETYPE_FOLLOW);
set_entvar(Entity[PlayerID], var_aiment, PlayerID);
}
}
#if defined MASK_ALL_MODE
HealthMsg(PlayerID, num)
{
client_print_color(PlayerID, print_team_default, "%l", num == 1 ? "COVID_HEALTH_MSG_PRE" : "COVID_HEALTH_MSG_POST", eCvarData[MASK_HEALTH_NUM]);
}
#endif