// Автор плагина: 6u3oH (https://vk.com/6u3oh)
// Еще больше плагинов в группе: https://vk.com/plugins_store
// При возникновении багов пишите в тему: https://vk.com/topic-53135352_39904406
new const PLUGIN_NAME[] = "Knife Arena";
new const PLUGIN_VERSION[] = "1.0";
new const PLUGIN_AUTHOR[] = "6u3oH";
const ARENA_SETTINGS_ACCESS = ADMIN_IMMUNITY; // Флаг доступа к меню настроек арены
const ARENA_DUEL_TIMER_PRE = 10; // Время подготовки перед дуэлью (сек)
const ARENA_DUEL_TIMER_FIGHT = 180; // Время битвы на арене (сек)
const ARENA_DUEL_ROUNDS = 10; // Кол-во раундов на арене
const ARENA_DUEL_HEALTH = 50; // Устанавливаемое здоровье дуэлянтам
const ARENA_DUEL_AWARDS = 6000; // Награда за победу
new const ARENA_CLASSNAME[] = "arena";
new const ARENA_PREFIX[] = "Арена";
new const ARENA_MODEL[] = "models/arena/arena.mdl";
new const Float: ARENA_MINSIZE[] = {-337.0, -237.0, -2.5};
new const Float: ARENA_MAXSIZE[] = {337.0, 237.0, 2.5};
const ARENA_SEC_KEY = 0x846;
const TASK_DUEL_PRE = 0x131;
const TASK_ARENA = 0x152;
new g_iMaxPlayers, g_iArenaSettingsMenu, g_iArenaEnt, g_iArenaState, g_iSpriteBeam;
new g_iDuelantOne, g_iDuelantTwo, g_iDuelRound, g_iDuelTimerPre, g_iDuelTimer, g_iDuelantKillsOne, g_iDuelantKillsTwo;
new g_sArenaCfgSaveFile[256];
new HamHook: g_iFwdSpawn, HamHook: g_iFwdKilled, HamHook: g_iFwdTakeDmg;
precache_model(ARENA_MODEL);
g_iSpriteBeam = precache_model("sprites/zbeam3.spr");
public client_disconnected(id)
for(new iPlayer = 1; iPlayer <= g_iMaxPlayers; iPlayer++)
if(g_iTempID[iPlayer] == id)
g_iTempID[iPlayer] = FM_NULLENT;
if(g_iArenaState == ARENA_STATE_BLOCK && id == g_iDuelantOne || id == g_iDuelantTwo)
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
register_clcmd("arena_settings", "Clcmd_ArenaSettings");
register_clcmd("say /arena", "Clcmd_ArenaMenu");
register_clcmd("say_team /arena", "Clcmd_ArenaMenu");
register_clcmd("say /duel", "Clcmd_ArenaMenu");
register_clcmd("say_team /duel", "Clcmd_ArenaMenu");
DisableHamForward(g_iFwdSpawn = RegisterHam(Ham_Spawn, "player", "fwHam_SpawnPlayer_Post", 1));
DisableHamForward(g_iFwdKilled = RegisterHam(Ham_Killed, "player", "fwHam_KilledPlayer_Post", 1));
DisableHamForward(g_iFwdTakeDmg = RegisterHam(Ham_TakeDamage, "player", "fwHam_TakeDmgPlayer_Pre", 0));
create_menu_arena_settings();
g_iMaxPlayers = get_maxplayers();
public Clcmd_ArenaSettings(id)
color_print(id, "!y[!g%s!y] !yТолько для живых", ARENA_PREFIX);
if(~get_user_flags(id) & ARENA_SETTINGS_ACCESS)
color_print(id, "!y[!g%s!y] !yУ вас нет доступа", ARENA_PREFIX);
if(g_iArenaState == ARENA_STATE_BLOCK)
color_print(id, "!y[!g%s!y] !yАрена занята боем", ARENA_PREFIX);
menu_display(id, g_iArenaSettingsMenu);
public ArenaSettings_Handler(id, iMenu, iItem)
if(iItem == MENU_EXIT || g_iArenaState == ARENA_STATE_BLOCK || !is_user_alive(id))
if(is_valid_ent(g_iArenaEnt))
color_print(id, "!y[!g%s!y] !yАрена уже создана", ARENA_PREFIX);
get_origin_aiming(id, fOrigin);
arena_platform_create(fOrigin);
g_iArenaState = ARENA_STATE_EDIT;
color_print(id, "!y[!g%s!y] !yАрена успешно создана", ARENA_PREFIX);
if(!is_valid_ent(g_iArenaEnt))
color_print(id, "!y[!g%s!y] !yАрена не создана", ARENA_PREFIX);
if(g_iArenaState != ARENA_STATE_EDIT)
color_print(id, "!y[!g%s!y] !yАрена должна быть в режиме редактирования", ARENA_PREFIX);
static iAxis[6]; iAxis = {0, 0, 1, 1, 2, 2};
static iValue[6]; iValue = {10, -10, 10, -10, 10, -10};
static Float: fOrigin[3];
entity_get_vector(g_iArenaEnt, EV_VEC_origin, fOrigin);
fOrigin[iAxis[iItem-1]] += iValue[iItem-1];
entity_set_vector(g_iArenaEnt, EV_VEC_origin, fOrigin);
if(!is_valid_ent(g_iArenaEnt))
color_print(id, "!y[!g%s!y] !yАрена не создана", ARENA_PREFIX);
if(entity_get_int(g_iArenaEnt, EV_INT_solid) == SOLID_TRIGGER)
color_print(id, "!y[!g%s!y] !yАрена уже сохранена", ARENA_PREFIX);
static Float: fOrigin[3], sOrigin[3][8], sData[32];
entity_get_vector(g_iArenaEnt, EV_VEC_origin, fOrigin);
float_to_str(fOrigin[0], sOrigin[0], 7);
float_to_str(fOrigin[1], sOrigin[1], 7);
float_to_str(fOrigin[2], sOrigin[2], 7);
formatex(sData, charsmax(sData), "%s %s %s", sOrigin[0], sOrigin[1], sOrigin[2]);
write_file(g_sArenaCfgSaveFile, sData, 1);
entity_set_int(g_iArenaEnt, EV_INT_solid, SOLID_TRIGGER);
set_rendering(g_iArenaEnt, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0);
g_iArenaState = ARENA_STATE_READY;
color_print(id, "!y[!g%s!y] !yАрена скрыта, сохранена и готова к боям", ARENA_PREFIX);
if(!is_valid_ent(g_iArenaEnt))
color_print(id, "!y[!g%s!y] !yАрена не создана", ARENA_PREFIX);
if(g_iArenaState == ARENA_STATE_EDIT)
color_print(id, "!y[!g%s!y] !yАрена уже в режиме редактирования", ARENA_PREFIX);
entity_set_int(g_iArenaEnt, EV_INT_solid, SOLID_BBOX);
set_rendering(g_iArenaEnt, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 255);
g_iArenaState = ARENA_STATE_EDIT;
color_print(id, "!y[!g%s!y] !yАрена переведена в режим редактирования", ARENA_PREFIX);
if(!is_valid_ent(g_iArenaEnt))
color_print(id, "!y[!g%s!y] !yАрена не создана", ARENA_PREFIX);
remove_entity(g_iArenaEnt);
write_file(g_sArenaCfgSaveFile, "", 1);
g_iArenaState = ARENA_STATE_NOT;
color_print(id, "!y[!g%s!y] !yАрена удалена", ARENA_PREFIX);
menu_display(id, g_iArenaSettingsMenu);
public Clcmd_ArenaMenu(id)
color_print(id, "!y[!g%s!y] !yАрена для живых", ARENA_PREFIX);
if(g_iArenaState != ARENA_STATE_READY)
color_print(id, "!y[!g%s!y] !yАрена в данный момент недоступна", ARENA_PREFIX);
new iTeam = get_user_team(id), iMenu = menu_create("\rВыбор противника для арены\w", "ChooseEnemy_Handler"), iCount;
static sName[32], sID[3];
for(new iPlayer = 1; iPlayer <= g_iMaxPlayers; iPlayer++)
if(!is_user_alive(iPlayer))
if(iTeam == get_user_team(iPlayer))
get_user_name(iPlayer, sName, charsmax(sName));
num_to_str(iPlayer, sID, charsmax(sID));
menu_additem(iMenu, sName, sID);
menu_setprop(iMenu, MPROP_BACKNAME, "Назад");
menu_setprop(iMenu, MPROP_NEXTNAME, "Далее");
menu_setprop(iMenu, MPROP_EXITNAME, "Выход");
color_print(id, "!y[!g%s!y] !yНет игроков для битвы на арене", ARENA_PREFIX);
public ChooseEnemy_Handler(id, iMenu, iItem)
new sID[3], sTemp[1], iPlayer;
menu_item_getinfo(iMenu, iItem, iPlayer, sID, charsmax(sID), sTemp, charsmax(sTemp), iPlayer);
iPlayer = str_to_num(sID);
if(is_user_alive(id) && is_user_alive(iPlayer) && g_iArenaState == ARENA_STATE_READY)
static sName[32], sInfo[128];
get_user_name(id, sName, charsmax(sName));
formatex(sInfo, charsmax(sInfo), "\y%s \wвызвал вас на дуэль", sName);
new iMenuEnemy = menu_create(sInfo, "ChooseEnemyAgree_Handler");
menu_additem(iMenuEnemy, "Согласиться");
menu_setprop(iMenuEnemy, MPROP_EXITNAME, "Отказаться");
menu_display(iPlayer, iMenuEnemy, 0);
public ChooseEnemyAgree_Handler(iPlayer, iMenu, iItem)
if(iItem == ITEM_IGNORE && is_user_alive(iPlayer) && is_user_alive(g_iTempID[iPlayer]) && g_iArenaState == ARENA_STATE_READY)
start_duel_pre(g_iTempID[iPlayer], iPlayer);
else if(is_user_connected(g_iTempID[iPlayer]))
color_print(g_iTempID[iPlayer], "!y[!g%s!y] !yБитва на арене отменена", ARENA_PREFIX);
public start_duel_pre(id, iPlayer)
g_iArenaState = ARENA_STATE_BLOCK;
entity_set_int(g_iArenaEnt, EV_INT_solid, SOLID_BBOX);
set_rendering(g_iArenaEnt, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 255);
EnableHamForward(g_iFwdSpawn);
EnableHamForward(g_iFwdKilled);
EnableHamForward(g_iFwdTakeDmg);
ExecuteHamB(Ham_CS_RoundRespawn, id);
ExecuteHamB(Ham_CS_RoundRespawn, iPlayer);
teleport_to_points(id, DUELANT_ONE);
teleport_to_points(iPlayer, DUELANT_TWO);
entity_set_int(id, EV_INT_flags, entity_get_int(id, EV_INT_flags) | FL_FROZEN);
entity_set_int(iPlayer, EV_INT_flags, entity_get_int(iPlayer, EV_INT_flags) | FL_FROZEN);
entity_set_float(id, EV_FL_takedamage, DAMAGE_NO);
entity_set_float(iPlayer, EV_FL_takedamage, DAMAGE_NO);
g_iDuelTimerPre = ARENA_DUEL_TIMER_PRE;
g_iDuelantKillsOne = g_iDuelantKillsTwo = 0;
set_task(1.0, "Task_DuelPre", TASK_DUEL_PRE, .flags = "b");
if(--g_iDuelTimerPre <= 0)
if(is_user_alive(g_iDuelantOne))
entity_set_int(g_iDuelantOne, EV_INT_flags, entity_get_int(g_iDuelantOne, EV_INT_flags) & ~FL_FROZEN);
entity_set_float(g_iDuelantOne, EV_FL_takedamage, DAMAGE_YES);
if(is_user_alive(g_iDuelantTwo))
entity_set_int(g_iDuelantTwo, EV_INT_flags, entity_get_int(g_iDuelantTwo, EV_INT_flags) & ~FL_FROZEN);
entity_set_float(g_iDuelantTwo, EV_FL_takedamage, DAMAGE_YES);
remove_task(TASK_DUEL_PRE);
g_iDuelTimer = ARENA_DUEL_TIMER_FIGHT;
set_task(1.0, "Task_Arena", TASK_ARENA, .flags = "b");
if(is_user_alive(g_iDuelantOne))
create_beam_cylinder(g_iDuelantOne);
if(is_user_alive(g_iDuelantTwo))
create_beam_cylinder(g_iDuelantTwo);
static sName1[32], sName2[32];
get_user_name(g_iDuelantOne, sName1, charsmax(sName1));
get_user_name(g_iDuelantTwo, sName2, charsmax(sName2));
set_dhudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), -1.0, 0.15, 0, 0.1, 1.0, 0.1, 0.1);
show_dhudmessage(g_iDuelantOne, "Дуэль^n[%s vs %s]^nПодготовка: %i сек", sName1, sName2, g_iDuelTimerPre);
show_dhudmessage(g_iDuelantTwo, "Дуэль^n[%s vs %s]^nПодготовка: %i сек", sName1, sName2, g_iDuelTimerPre);
if(is_user_alive(g_iDuelantOne) && is_user_alive(g_iDuelantTwo))
formatex(sTime, charsmax(sTime), "%i мин %i сек", g_iDuelTimer / 60, g_iDuelTimer % 60);
else if(g_iDuelTimer > 0)
formatex(sTime, charsmax(sTime), "%i сек", g_iDuelTimer);
static sName1[32], sName2[32];
get_user_name(g_iDuelantOne, sName1, charsmax(sName1));
get_user_name(g_iDuelantTwo, sName2, charsmax(sName2));
set_dhudmessage(255, 0, 0, -1.0, 0.01, 0, 0.1, 1.0, 0.1, 0.1);
show_dhudmessage(0, "Дуэль [%s]^n[%s vs %s]^nРаунд: [%i/%i]^nСчёт: [%i | %i]", sTime, sName1, sName2, g_iDuelRound, ARENA_DUEL_ROUNDS, g_iDuelantKillsOne, g_iDuelantKillsTwo);
check_is_duelant_to_plat(g_iDuelantOne);
check_is_duelant_to_plat(g_iDuelantTwo);
public fwHam_SpawnPlayer_Post(id)
entity_set_float(id, EV_FL_health, float(ARENA_DUEL_HEALTH));
fm_strip_user_weapons(id);
fm_give_item(id, "weapon_knife");
teleport_to_points(id, DUELANT_ONE);
else if(id == g_iDuelantTwo)
entity_set_float(id, EV_FL_health, float(ARENA_DUEL_HEALTH));
fm_strip_user_weapons(id);
fm_give_item(id, "weapon_knife");
teleport_to_points(id, DUELANT_TWO);
public fwHam_KilledPlayer_Post(id)
if(++g_iDuelRound > ARENA_DUEL_ROUNDS)
if(is_user_connected(g_iDuelantOne))
ExecuteHamB(Ham_CS_RoundRespawn, g_iDuelantOne);
if(is_user_connected(g_iDuelantTwo))
ExecuteHamB(Ham_CS_RoundRespawn, g_iDuelantTwo);
else if(id == g_iDuelantTwo)
if(++g_iDuelRound >= ARENA_DUEL_ROUNDS)
if(is_user_connected(g_iDuelantOne))
ExecuteHamB(Ham_CS_RoundRespawn, g_iDuelantOne);
if(is_user_connected(g_iDuelantTwo))
ExecuteHamB(Ham_CS_RoundRespawn, g_iDuelantTwo);
public fwHam_TakeDmgPlayer_Pre(iVictim, iInflictor, iAttacker, Float: fDmg, iTypeDmg)
return (iVictim == g_iDuelantOne && iAttacker != g_iDuelantTwo ||
iVictim == g_iDuelantTwo && iAttacker != g_iDuelantOne) ? HAM_SUPERCEDE : HAM_IGNORED;
public teleport_to_points(id, iDuelantNum)
entity_get_vector(g_iArenaEnt, EV_VEC_origin, fOrigin);
case DUELANT_ONE: fOrigin[0] -= 300;
case DUELANT_TWO: fOrigin[0] += 300;
entity_set_vector(id, EV_VEC_origin, fOrigin);
public check_is_duelant_to_plat(id)
new iEnt, iTrace, Float: fOriginStart[3], Float: fOriginEnd[3];
entity_get_vector(id, EV_VEC_origin, fOriginStart);
fOriginEnd = fOriginStart; fOriginEnd[2] -= 500;
engfunc(EngFunc_TraceLine, fOriginStart, fOriginEnd, 0, id, iTrace);
iEnt = get_tr2(iTrace, TR_pHit);
if(!pev_valid(iEnt) || entity_get_int(iEnt, EV_INT_iuser1) != ARENA_SEC_KEY)
teleport_to_points(g_iDuelantOne, DUELANT_ONE);
teleport_to_points(g_iDuelantTwo, DUELANT_TWO);
public create_menu_arena_settings()
g_iArenaSettingsMenu = menu_create("\rНастройки арены", "ArenaSettings_Handler");
menu_additem(g_iArenaSettingsMenu, "\yУстановить");
menu_additem(g_iArenaSettingsMenu, "\wСместить \yвперёд");
menu_additem(g_iArenaSettingsMenu, "\wСместить \yназад");
menu_additem(g_iArenaSettingsMenu, "\wСместить \yвправо");
menu_additem(g_iArenaSettingsMenu, "\wСместить \yвлево");
menu_additem(g_iArenaSettingsMenu, "\wСместить \yвверх");
menu_additem(g_iArenaSettingsMenu, "\wСместить \yвниз");
menu_additem(g_iArenaSettingsMenu, "Сохранить");
menu_additem(g_iArenaSettingsMenu, "Редактировать");
menu_additem(g_iArenaSettingsMenu, "Удалить");
menu_setprop(g_iArenaSettingsMenu, MPROP_BACKNAME, "\wНазад");
menu_setprop(g_iArenaSettingsMenu, MPROP_NEXTNAME, "Далее");
menu_setprop(g_iArenaSettingsMenu, MPROP_EXITNAME, "Выход");
public check_cfg_save_file()
if(!dir_exists("addons/amxmodx/data/arena"))
mkdir("addons/amxmodx/data/arena")
new sData[32]; get_mapname(sData, charsmax(sData));
formatex(g_sArenaCfgSaveFile, charsmax(g_sArenaCfgSaveFile), "addons/amxmodx/data/arena/%s.cfg", sData);
write_file(g_sArenaCfgSaveFile, "[Система сохранения координат арены] [by 6u3oH]", 0);
new sOrigin[3][8], Float: fOrigin[3], iLen;
read_file(g_sArenaCfgSaveFile, 1, sData, charsmax(sData), iLen);
g_iArenaState = ARENA_STATE_NOT;
parse(sData, sOrigin[0], 7, sOrigin[1], 7, sOrigin[2], 7);
fOrigin[0] = str_to_float(sOrigin[0]);
fOrigin[1] = str_to_float(sOrigin[1]);
fOrigin[2] = str_to_float(sOrigin[2]);
arena_platform_create(fOrigin);
entity_set_int(g_iArenaEnt, EV_INT_solid, SOLID_TRIGGER);
set_rendering(g_iArenaEnt, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0);
g_iArenaState = ARENA_STATE_READY;
public arena_platform_create(Float: fOrigin[3])
g_iArenaEnt = create_entity("info_null");
entity_set_string(g_iArenaEnt, EV_SZ_classname, ARENA_CLASSNAME);
entity_set_int(g_iArenaEnt, EV_INT_solid, SOLID_BBOX);
entity_set_int(g_iArenaEnt, EV_INT_movetype, MOVETYPE_FLY);
entity_set_int(g_iArenaEnt, EV_INT_iuser1, ARENA_SEC_KEY);
entity_set_vector(g_iArenaEnt, EV_VEC_origin, fOrigin);
entity_set_model(g_iArenaEnt, ARENA_MODEL);
entity_set_size(g_iArenaEnt, ARENA_MINSIZE, ARENA_MAXSIZE);
public get_origin_aiming(id, Float: fData[3])
new Float: fOrigin[3], Float: fViewOfs[3];
entity_get_vector(id, EV_VEC_origin, fOrigin);
entity_get_vector(id, EV_VEC_view_ofs, fViewOfs);
fOrigin[i] += fViewOfs[i];
entity_get_vector(id, EV_VEC_v_angle, fData);
engfunc(EngFunc_MakeVectors, fData);
global_get(glb_v_forward, fData);
fData[i] = fData[i] * 9999.0 + fOrigin[i];
engfunc(EngFunc_TraceLine, fOrigin, fData, IGNORE_MONSTERS, id, 0);
get_tr2(0, TR_vecEndPos, fData);
public duel_reset_settings()
entity_set_int(g_iArenaEnt, EV_INT_solid, SOLID_TRIGGER);
set_rendering(g_iArenaEnt, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0);
if(is_user_alive(g_iDuelantOne))
entity_set_int(g_iDuelantOne, EV_INT_flags, entity_get_int(g_iDuelantOne, EV_INT_flags) & ~FL_FROZEN);
entity_set_float(g_iDuelantOne, EV_FL_takedamage, DAMAGE_YES);
ExecuteHamB(Ham_CS_RoundRespawn, g_iDuelantOne);
if(is_user_alive(g_iDuelantTwo))
entity_set_int(g_iDuelantTwo, EV_INT_flags, entity_get_int(g_iDuelantTwo, EV_INT_flags) & ~FL_FROZEN);
entity_set_float(g_iDuelantTwo, EV_FL_takedamage, DAMAGE_YES);
ExecuteHamB(Ham_CS_RoundRespawn, g_iDuelantTwo);
g_iArenaState = ARENA_STATE_READY;
g_iDuelantOne = FM_NULLENT;
g_iDuelantTwo = FM_NULLENT;
static sName1[32], sName2[32];
get_user_name(g_iDuelantOne, sName1, charsmax(sName1));
get_user_name(g_iDuelantTwo, sName2, charsmax(sName2));
color_print(0, "!y[!g%s!y] !g%s !yи !g%s !yза бездействие в дуэли ничего не получают", ARENA_PREFIX, sName1, sName2);
else if(g_iDuelantKillsOne > g_iDuelantKillsTwo)
fm_set_user_money(g_iDuelantOne, fm_get_user_money(g_iDuelantOne) + ARENA_DUEL_AWARDS);
color_print(0, "!y[!g%s!y] !g%s !yпобедил !g%s !yв дуэли и получает !g%i$", ARENA_PREFIX, sName1, sName2, ARENA_DUEL_AWARDS);
else if(g_iDuelantKillsOne < g_iDuelantKillsTwo)
fm_set_user_money(g_iDuelantTwo, fm_get_user_money(g_iDuelantTwo) + ARENA_DUEL_AWARDS);
color_print(0, "!y[!g%s!y] !g%s !yпобедил !g%s !yв дуэли и получает !g%i$", ARENA_PREFIX, sName2, sName1, ARENA_DUEL_AWARDS);
fm_set_user_money(g_iDuelantOne, fm_get_user_money(g_iDuelantOne) + ARENA_DUEL_AWARDS / 2);
fm_set_user_money(g_iDuelantTwo, fm_get_user_money(g_iDuelantTwo) + ARENA_DUEL_AWARDS / 2);
color_print(0, "!y[!g%s!y] !g%s !yи !g%s !yсыграли в ничью на дуэли и получают !g%i$", ARENA_PREFIX, sName1, sName2, ARENA_DUEL_AWARDS / 2);
public create_beam_cylinder(id)
entity_get_vector(id, EV_VEC_origin, fOrigin);
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0);
write_byte(TE_BEAMCYLINDER);
engfunc(EngFunc_WriteCoord, fOrigin[0]);
engfunc(EngFunc_WriteCoord, fOrigin[1]);
engfunc(EngFunc_WriteCoord, fOrigin[2]);
engfunc(EngFunc_WriteCoord, fOrigin[0]);
engfunc(EngFunc_WriteCoord, fOrigin[1]);
engfunc(EngFunc_WriteCoord, fOrigin[2] + 400.0);
write_short(g_iSpriteBeam);
switch(get_user_team(id))
public fm_get_user_money(id)
return get_pdata_int(id, 0x73);
public fm_set_user_money(id, iMoney)
iMsg = get_user_msgid("Money");
set_pdata_int(id, 0x73, iMoney);
message_begin(MSG_ONE, iMsg, {0, 0, 0}, id);
public fm_strip_user_weapons(id)
new iEnt = create_entity("player_weaponstrip");
dllfunc(DLLFunc_Spawn, iEnt);
dllfunc(DLLFunc_Use, iEnt, id);
engfunc(EngFunc_RemoveEntity, iEnt);
public fm_give_item(id, const sItem[])
new iEnt = create_entity(sItem);
entity_get_vector(id, EV_VEC_origin, fOrigin);
entity_set_vector(iEnt, EV_VEC_origin, fOrigin);
entity_set_int(iEnt, EV_INT_spawnflags, entity_get_int(iEnt, EV_INT_spawnflags) | SF_NORESPAWN);
dllfunc(DLLFunc_Spawn, iEnt);
dllfunc(DLLFunc_Touch, iEnt, id);
public color_print(const id, const input[], any:...)
new count = 1, players[32]; static msg[191], iMsg;
iMsg = get_user_msgid("SayText");
vformat(msg, 190, input, 3);
replace_all(msg, 190, "!g", "^4"); // Green Color
replace_all(msg, 190, "!y", "^1"); // Default Color
replace_all(msg, 190, "!t", "^3"); // Team Color
get_players(players, count, "ch");
for(new i = 0; i < count; i++)
if(is_user_connected(players[i]))
message_begin(MSG_ONE_UNRELIABLE, iMsg, _, players[i]);