[fork] Random Weapons WarmUP 2.4.9

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
43
Реакции
-4
Помог
2 раз(а)
Ошибка
Не работает плагин, разминки нет
ОС
Linux
Amx Mod X
1.9.0
Билд
ReHLDS version: 3.7.0.692-dev
ReGamedll
ReGameDLL version: 5.18.0.474-dev
Версия Metamod
Metamod-r v1.3.0.128, API (5:13)
Список метамодулей
[ 1] Reunion          RUN   -    reunion_mm_i386.so          v0.1.0.92        ini  Start Never
[ 2] VoiceTranscoder RUN - VoiceTranscoder.so v2017RC5 ini ANY ANY
[ 3] ReSRDetector RUN - resrdetector_mm_i386.so v0.1.0 ini Chlvl ANY
[ 4] Rechecker RUN - rechecker_mm_i386.so v2.5 ini Chlvl ANY
[ 5] ReSemiclip RUN - resemiclip_mm_i386.so v2.3.9 ini Chlvl ANY
[ 6] ReAuthCheck RUN - reauthcheck_mm_i386.so v0.1.6 ini Start Never
[ 7] WHBlocker RUN - whblocker_mm_i386.so v1.5.697 ini Chlvl ANY
[ 8] AMX Mod X RUN - amxmodx_mm_i386.so v1.9.0.5263 ini Start ANY
[ 9] ReAimDetector RUN - reaimdetector_amxx_i386.so v0.2.2 pl8 ANY Never
[10] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5263 pl8 ANY ANY
[11] Engine RUN - engine_amxx_i386.so v1.9.0.5263 pl8 ANY ANY
[12] MySQL RUN - mysql_amxx_i386.so v1.9.0.5263 pl8 ANY ANY
[13] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5263 pl8 ANY ANY
[14] ReAPI RUN - reapi_amxx_i386.so v5.15.0.197-dev pl8 ANY Never
[15] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5263 pl8 ANY ANY
[16] Fun RUN - fun_amxx_i386.so v1.9.0.5263 pl8 ANY ANY
[17] CSX RUN - csx_amxx_i386.so v1.9.0.5263 pl8 ANY ANY
[18] SxGeo RUN - sxgeo_amxx_i386.so v2.2 pl8 ANY Never
Список плагинов
[  1] ReAimDetector API       0.2.2       ReHLDS Team       reaimdetector.a  running  
[ 2] [190] Cvar On Map 20.06.06 SKAJIbnEJIb cvar_on_map.amx running
[ 3] Advanced Client Checke 0.3.6 Mistrick cmdchecker.amxx running
[ 4] [AmxBans RBS] Sounds b 1.0 AlexandrFiner bans_sound.amxx running
[ 5] [190] AMXBans RBS 20.06.06 SKAJIbnEJIb & La amxbans_rbs.amx running
[ 6] Menus Front-End 20.06.06 SKAJIbnEJIb & AM amxmodmenu_rbs. running
[ 7] [190] CsStats MySQL 20.06.06 SKAJIbnEJIb csstats_mysql.a running
[ 8] [ReAPI][ReAMX] Ultimat 17.08.28 SKAJIbnEJIb ultimate_gag_re running
[ 9] [ReAMX] Ultimate Gag 17.12.22BE SKAJIbnEJIb ultimate_gag.am running
[ 10] [190] VoteBan RBS 20.06.06 SKAJIbnEJIb voteban_rbs.amx running
[ 11] [190] Chat Controller 20.06.06 SKAJIbnEJIb chat_controller running
[ 12] Team Balance Control 1.3.9 gyxoBka TeamBalanceCont running
[ 13] Admin Commands 1.9.0.5263 AMXX Dev Team admincmd.amxx running
[ 14] Slots Reservation 1.9.0.5263 AMXX Dev Team adminslots.amxx running
[ 15] Commands Menu 1.9.0.5263 AMXX Dev Team cmdmenu.amxx running
[ 16] Players Menu 1.9.0.5263 AMXX Dev Team plmenu.amxx running
[ 17] [190] MapsMenu RBS 20.06.06 SKAJIbnEJIb & AM mapsmenu_rbs.am running
[ 18] Mode 2x2 2.5re s1lent mode.amxx running
[ 19] Plugin Menu 1.9.0.5263 AMXX Dev Team pluginmenu.amxx running
[ 20] [190] High Ping Kicker 20.06.06 SKAJIbnEJIb hpk_rbs.amxx running
[ 21] Admin Chat 1.9.0.5263 AMXX Dev Team adminchat.amxx running
[ 22] Admin Votes 1.9.0.5263 AMXX Dev Team adminvote.amxx running
[ 23] are you trying to get why? you're going to semicolon.amxx running
[ 24] FocusOnVotemap 1.2.1 Boec[SpecOPs] focus_on_votema running
[ 25] [190] NextMap 18.09.25 SKAJIbnEJIb & AM nextmap.amxx running
[ 26] [190] MapChooser RBS 20.08.02 SKAJIbnEJIb & UF mapchooser_rbs. running
[ 27] [190] TimeLeft 18.09.25 SKAJIbnEJIb & AM timeleft.amxx running
[ 28] [190] Radio RBS 20.06.06 SKAJIbnEJIb radio_rbs.amxx running
[ 29] Pause Plugins 1.9.0.5263 AMXX Dev Team pausecfg.amxx running
[ 30] [190] Stats Configurat 20.06.06 SKAJIbnEJIb & AM statscfg_rbs.am running
[ 31] [190] StatsX RBS 20.06.06 SKAJIbnEJIb & AM statsx_rbs.amxx running
[ 32] [190] Army Ranks Ultim 20.06.06 SKAJIbnEJIb army_ranks_ulti running
[ 33] [190] AR Bets 20.06.06 SKAJIbnEJIb ar_bets.amxx running
[ 34] [190] Ultimate Informe 20.06.06 SKAJIbnEJIb ultimate_inform running
[ 35] [190] Chat RBS 20.06.06 SKAJIbnEJIb chat_rbs.amxx running
[ 36] [182] Spect Bot 17.08.28 SKAJIbnEJIb & Bo SpectBot.amxx running
[ 37] [190] Skill ELO 20.06.06 SKAJIbnEJIb skill_elo.amxx running
[ 38] [190] VoteRR RBS 20.06.06 SKAJIbnEJIb & ka voterr_rbs.amxx running
[ 39] [190] Ultimate Weapons 20.06.06 SKAJIbnEJIb ultimate_weapon running
[ 40] [190] VIP RBS 20.07.20 SKAJIbnEJIb vip_rbs.amxx running
[ 41] [190] Ad From Server 20.06.06 SKAJIbnEJIb ad_from_server. running
[ 42] [190] Stimulation RBS 20.06.06 SKAJIbnEJIb stimulation_rbs running
[ 43] [190] Kill Assist RBS 20.06.06 SKAJIbnEJIb & Di killassist_rbs. running
[ 44] Weapon Model + Sound R 1.2 GHW_Chronic new_weapons.amx running
[ 45] [DD] Quick defuse 1.0 Deadly|Darkness dd_qdefuse.amxx running
[ 46] ResetScore 1.0 Leo_[BH] resetscore_reap running
[ 47] [ReAPI] Ghost after de 0.0.2 steelzzz ghost.amxx running
[ 48] [ReAPI:AMXX] Buy Nades 0.0.3a steelzorrr amxx_buy_nades_ running
[ 49] Custom skies 0.0.1 Nordic Warrior CustomSkies.amx running
[ 50] Grenade Effects 1.4 F@nt0M, d3m37r4 grenade_effects running
[ 51] [ReAPI] Hint blocker 0.1.0 F@tn0M reapi_hint_bloc running
[ 52] AFK Control 1.4.1 [Rnd neygomon afk_control.amx running
[ 53] [ReAPI] Silly C4 2.0 F@ntoM & Cheap_S reapi_sillyc4.a running
[ 54] No Bhop and SGS/DDRun 1.1 Denzer no_bhop_sgs.amx running
[ 55] [ReAPI] Colored Flash 1.0 ReHLDS Team colored_flash_t running
[ 56] Hide Server Cvars 1.0 DJ_WEST hide_cvars.amxx running
[ 57] [SxGeo] Connect Info 1.0 s1lent sxgeo_connect_i running
[ 58] [ReAPI] AWPoff 1.3 PAffAEJIkA :3 awp_off.amxx running
[ 59] Lie Flat Optimized 1.1 Nomexous lie_flat_optimi running
[ 60] [190] Parachute RBS 20.06.06 SKAJIbnEJIb & KR parachute_rbs.a running
[ 61] [AMXX] Bomb Sounds 0.0.1 steelzzz bomb_sounds.amx running
[ 62] Custom Smoke 1.09 bionext custom_smoke.am running
[ 63] Crux Ansata 1.0 fl0wer crux_ansata.amx running
[ 64] [ReAPI] Healthnade 0.0.3 F@nt0M reapi_healthnad running
[ 65] Weapon Kill 1.2 Slove. & AcE weaponkill.amxx running
[ 66] [190] Ultimate Knife 20.06.06 SKAJIbnEJIb ultimate_knife. running
[ 67] [190] ESP RBS 20.06.06 SKAJIbnEJIb & Ko esp_rbs.amxx running
[ 68] Game Sounds 1.1 maFFyoZZyk game_sounds.amx running
[ 69] [190] Top Award RBS 20.06.06 SKAJIbnEJIb topaward_rbs.am running
[ 70] Damager 0.0.6 steelzzz damager.amxx running
[ 71] [190] DemoRecorder RBS 20.06.06 SKAJIbnEJIb demorecorder_rb running
[ 72] Kills Counter 1.0 Safety1st killscounter.am running
[ 73] InName Combo Kills 0.0.2 wopox1337 InName_Combo_Ki running
[ 74] Smoke 1.0 Author Grentrail.amxx running
[ 75] [190] Piss RBS 20.06.06 SKAJIbnEJIb & KR piss_rbs.amxx running
[ 76] [190] Ultimate Models 20.06.06 SKAJIbnEJIb ultimate_models running
[ 77] Potti 1.40 p3tsin potti.amxx running
[ 78] Меню потти Only Locky pottimenu.amxx running
[ 79] [ReAPI] Random Weapons 2.4.9 neugomon/h1k3 random_weapons_ running
Автор плагина
neygomon + h1k3
Версия плагина
2.4.9
Исходный код
#include <amxmodx>
#include <reapi>

/*■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/
#define TIME_RR 40 // Время разминки
#define NUM_RR 2 // Кол-во рестартов
#define LATENCY 1.5 // Задержка между рестартами
#define DM_MODE 1 // Возрождение после смерти; 0 - отключить (будет длится раунд или до победы)
#define PROTECTED 2 // Сколько секунд действует защита после возрождения (актуально для DM_MODE); 0 - отключить

#define SOUND // Музыка под час разминки
#define STOP_PLUGS // Отключать плагины на время разминки
#define OFF_RR // Отключать этот плагин на указанных картах
//#define REMOVE_MAP_WPN // Удалять ентити мешающие разминке на картах типа: awp_, 35hp_ и т.п. [по умолчанию выкл.]
//#define BLOCK // Запрет поднятия оружия с земли (не актуально при вкл. #define REMOVE_MAP_WPN) [по умолчанию выкл.]
//#define STOP_STATS // Отключать запись статистики на время разминки CSStatsX SQL by serfreeman1337 0.7.4+1 [по умолчанию выкл.]
/*■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/

#if defined REMOVE_MAP_WPN
#include <hamsandwich>
#endif

#if defined SOUND
new const soundRR[][] = // Указывать звук, например 1.mp3
{
"sound/crim/crim1.mp3",
"sound/crim/crim2.mp3",
"sound/crim/crim3.mp3"
}
#endif

#if defined STOP_PLUGS
new g_arPlugins[][] = // Указывать название плагинов для отключения, например test.amxx
{
"test.amxx",
"test2.amxx"
}
#endif

#if DM_MODE == 0
new HookChain:fwd_RRound;
new g_iRound;
#endif

#if defined REMOVE_MAP_WPN
new HamHook:fwd_Equip,
HamHook:fwd_WpnStrip,
HamHook:fwd_Entity;
#endif

#if defined STOP_STATS
new g_iHudSync;
#endif
new g_szWeapon[32];
new g_iImmunuty, g_iRespawn, g_iWp, g_iHudSync2;
new HookChain:fwd_NewRound,
#if defined BLOCK
HookChain:fwd_BlockEntity,
#endif
HookChain:fwd_Spawn,
HookChain:fwd_GiveC4;

const TASK_TIMER_ID = 33264;
new pCurrentMode;
public plugin_init()
{
register_plugin("[ReAPI] Random Weapons WarmUP", "2.4.9", "neugomon/h1k3");

RegisterHookChain(RG_RoundEnd, "fwdRoundEnd", true);
DisableHookChain(fwd_NewRound = RegisterHookChain(RG_CSGameRules_CheckMapConditions, "fwdRoundStart", true));
DisableHookChain(fwd_Spawn = RegisterHookChain(RG_CBasePlayer_Spawn, "fwdPlayerSpawnPost", true));
DisableHookChain(fwd_GiveC4 = RegisterHookChain(RG_CSGameRules_GiveC4, "fwdGiveC4", false));

#if defined REMOVE_MAP_WPN
DisableHamForward(fwd_Equip = RegisterHam(Ham_Use, "game_player_equip", "CGamePlayerEquip_Use", false));
DisableHamForward(fwd_WpnStrip = RegisterHam(Ham_Use, "player_weaponstrip", "CStripWeapons_Use", false));
DisableHamForward(fwd_Entity = RegisterHam(Ham_CS_Restart, "armoury_entity", "CArmoury_Restart", false));
#endif

#if DM_MODE == 0
EnableHookChain(fwd_RRound = RegisterHookChain(RG_CSGameRules_RestartRound, "fwdRestartRound_Pre"));
#endif

#if defined BLOCK
DisableHookChain(fwd_BlockEntity = RegisterHookChain(RG_CBasePlayer_HasRestrictItem, "fwdHasRestrictItemPre", false));
register_clcmd("drop", "ClCmd_Drop");
#endif

g_iImmunuty = get_cvar_pointer("mp_respawn_immunitytime");
g_iRespawn = get_cvar_pointer("mp_forcerespawn");
#if defined STOP_STATS
g_iHudSync = CreateHudSyncObj();
#endif
g_iHudSync2 = CreateHudSyncObj();

state warmupOff;

pCurrentMode = register_cvar("rww_last", "-1");

#if defined OFF_RR
new sPref[][] = { "awp_", "aim_", "fy_", "$", "cs_", "35hp" }; // Указывать префиксы карт на которых плагин не будет работать
new map[32]; get_mapname(map, charsmax(map));
for(new i; i < sizeof sPref; i++)
{
if(containi(map, sPref[i]) != -1)
{
pause("ad");
return;
}
}
#endif
}

public plugin_end() <warmupOff> {}

public plugin_end() <warmupOn>
{
finishWurmUp();
}

#if defined BLOCK
public fwdHasRestrictItemPre()
{
SetHookChainReturn(ATYPE_INTEGER, true);
return HC_SUPERCEDE;
}

public ClCmd_Drop() <warmupOff>
return PLUGIN_CONTINUE;

public ClCmd_Drop() <warmupOn>
return PLUGIN_HANDLED;
#endif


#if defined SOUND
public plugin_precache()
{
for(new i = 0; i < sizeof(soundRR); i++)
{
precache_generic(soundRR[i]);
}
}
#endif

public fwdRoundEnd(WinStatus:status, ScenarioEventEndRound:event, Float:tmDelay)
if(event == ROUND_GAME_COMMENCE)
EnableHookChain(fwd_NewRound);

public fwdRoundStart()
{
state warmupOn;

#if defined REMOVE_MAP_WPN
EnableHamForward(fwd_Equip);
EnableHamForward(fwd_WpnStrip);
EnableHamForward(fwd_Entity);
#endif

DisableHookChain(fwd_NewRound);
EnableHookChain(fwd_Spawn);
EnableHookChain(fwd_GiveC4);

set_pcvar_num(g_iRespawn, DM_MODE);
set_pcvar_num(g_iImmunuty, PROTECTED);

#if DM_MODE >= 1
set_cvar_string("mp_round_infinite", "1");
set_task(1.0, "Show_Timer", .flags = "a", .repeat = TIME_RR);
#endif

#if DM_MODE == 0
set_task(1.0, "Hud_Message", .flags = "a", .repeat = 25 );
#endif

#if defined SOUND
static cmd[64];
formatex(cmd, 63, "mp3 play ^"%s^"", soundRR[random(sizeof(soundRR))]);
client_cmd(0, "%s", cmd);
#endif

#if defined STOP_STATS
set_cvar_num("csstats_pause", 1);
#endif

#if defined BLOCK
EnableHookChain(fwd_BlockEntity);
#endif

#if defined STOP_PLUGS
PluginController(1);
#endif

g_iWp = get_pcvar_num(pCurrentMode);
g_iWp++;

switch(g_iWp)
{
case 0: formatex(g_szWeapon, charsmax(g_szWeapon), "M4A1");
case 1: formatex(g_szWeapon, charsmax(g_szWeapon), "AK-47");
case 2: formatex(g_szWeapon, charsmax(g_szWeapon), "МP5");
case 3: formatex(g_szWeapon, charsmax(g_szWeapon), "SG-550");
case 4: formatex(g_szWeapon, charsmax(g_szWeapon), "Famas");
case 5: formatex(g_szWeapon, charsmax(g_szWeapon), "SCOUT");
case 6: formatex(g_szWeapon, charsmax(g_szWeapon), "XM1014");
case 7: formatex(g_szWeapon, charsmax(g_szWeapon), "M3");
}

set_pcvar_num(pCurrentMode, g_iWp==7?-1:g_iWp);
}

public fwdPlayerSpawnPost(const id)
{
if(!is_user_alive(id))
return;

#if defined REMOVE_MAP_WPN
InvisibilityArmourys();
#endif

BuyZone_ToogleSolid(SOLID_NOT);
rg_remove_all_items(id);
set_member_game(m_bMapHasBuyZone, true);
rg_give_item(id, "weapon_knife");

switch(g_iWp)
{
case 0:
{
rg_give_item(id, "weapon_m4a1");
rg_set_user_bpammo(id, WEAPON_M4A1, 90);
}
case 1:
{
rg_give_item(id, "weapon_ak47");
rg_set_user_bpammo(id, WEAPON_AK47, 90);
}
case 2:
{
rg_give_item(id, "weapon_mp5navy");
rg_set_user_bpammo(id, WEAPON_MP5N, 120);
}
case 3:
{
rg_give_item(id, "weapon_sg550");
rg_set_user_bpammo(id, WEAPON_SG550, 90);
}
case 4:
{
rg_give_item(id, "weapon_famas");
rg_set_user_bpammo(id, WEAPON_FAMAS, 90);
}
case 5:
{
rg_give_item(id, "weapon_scout");
rg_set_user_bpammo(id, WEAPON_SCOUT, 30);
}
case 6:
{
rg_give_item(id, "weapon_xm1014");
rg_set_user_bpammo(id, WEAPON_XM1014, 50);
}
case 7:
{
rg_give_item(id, "weapon_m3");
rg_set_user_bpammo(id, WEAPON_M3, 50);
}
}
}

public fwdGiveC4()
{
return HC_SUPERCEDE;
}

#if DM_MODE >= 1
public Show_Timer()
{
static timer = -1;
if(timer == -1) timer = TIME_RR;

switch(--timer)
{
case 0:
{
finishWurmUp();
timer = -1;
}
default:
{
#if defined STOP_STATS
set_hudmessage(255, 0, 0, .x = -1.0, .y = 0.05, .holdtime = 0.9, .channel = -1);
ShowSyncHudMsg(0, g_iHudSync, "[Статистика Отключена]");
#endif
set_hudmessage(135, 206, 235, .x = -1.0, .y = 0.08, .holdtime = 0.9, .channel = -1);
ShowSyncHudMsg(0, g_iHudSync2, "Разминка на %s!^nРестарт через %d сек", g_szWeapon, timer);
}
}
}
#endif

#if DM_MODE == 0
public fwdRestartRound_Pre()
{
g_iRound++;

if(g_iRound >= 2) {
DisableHookChain(fwd_RRound);
finishWurmUp();
}
}

public Hud_Message()
{
#if defined STOP_STATS
set_hudmessage(255, 0, 0, .x = -1.0, .y = 0.05, .holdtime = 0.9, .channel = -1);
ShowSyncHudMsg(0, g_iHudSync, "[Статистика Отключена]");
#endif
set_hudmessage(135, 206, 235, .x = -1.0, .y = 0.08, .holdtime = 0.9, .channel = -1);
ShowSyncHudMsg(0, g_iHudSync2, "Разминка на %s!", g_szWeapon);
}
#endif

public SV_Restart()
{
set_cvar_num("sv_restart", 1);
set_task(2.0, "End_RR");
}

public End_RR()
{
#if defined STOP_STATS
set_hudmessage(255, 0, 0, .x = -1.0, .y = 0.05, .holdtime = 5.0, .channel = -1);
ShowSyncHudMsg(0, g_iHudSync, "[Статистика Включена]");
#endif
set_hudmessage(135, 206, 235, .x = -1.0, .y = 0.08, .holdtime = 5.0, .channel = -1);
ShowSyncHudMsg(0, g_iHudSync2, "Разминка окончена!");
for(new i = 1; i <= MaxClients; i++)
{
if(is_user_alive(i))
{
rg_remove_items_by_slot(i, PRIMARY_WEAPON_SLOT);
}
}
}

#if defined REMOVE_MAP_WPN
public CArmoury_Restart(const pArmoury)
{
return HAM_SUPERCEDE;
}

public CGamePlayerEquip_Use()
{
return HAM_SUPERCEDE;
}

public CStripWeapons_Use()
{
return HAM_SUPERCEDE;
}

InvisibilityArmourys()
{
new pArmoury = NULLENT
while((pArmoury = rg_find_ent_by_class(pArmoury, "armoury_entity")))
{
if(get_member(pArmoury, m_Armoury_iCount) > 0)
{
set_entvar(pArmoury, var_effects, get_entvar(pArmoury, var_effects) | EF_NODRAW)
set_entvar(pArmoury, var_solid, SOLID_NOT)
set_member(pArmoury, m_Armoury_iCount, 0)
}
}
}
#endif

finishWurmUp()
{
state warmupOff;

BuyZone_ToogleSolid(SOLID_TRIGGER);

#if defined REMOVE_MAP_WPN
DisableHamForward(fwd_Equip);
DisableHamForward(fwd_WpnStrip);
DisableHamForward(fwd_Entity);
#endif

DisableHookChain(fwd_Spawn);
DisableHookChain(fwd_GiveC4);

set_cvar_string("mp_forcerespawn", "0");
set_cvar_string("mp_respawn_immunitytime", "0");
set_cvar_string("mp_round_infinite", "0");

#if defined STOP_STATS
set_cvar_num("csstats_pause", 0);
#endif

#if defined BLOCK
DisableHookChain(fwd_BlockEntity);
#endif

#if defined STOP_PLUGS
PluginController(0);
#endif

#if NUM_RR > 1
set_task(LATENCY, "SV_Restart", .flags = "a", .repeat = NUM_RR);
#else
SV_Restart();
#endif

remove_task(TASK_TIMER_ID);
}

stock PluginController(stop)
{
for(new i; i < sizeof g_arPlugins; i++)
{
if(stop)pause ("ac", g_arPlugins[i]);
else unpause("ac", g_arPlugins[i]);
}
}

stock BuyZone_ToogleSolid(const solid)
{
new entityIndex = 0;
while ((entityIndex = rg_find_ent_by_class(entityIndex, "func_buyzone")))
set_entvar(entityIndex, var_solid, solid);
}
Здравствуйте, подскажите пожалуйста, что может быть, плагин установил, сервер перезагрузил, зашел проверить его, но разминки нет, поменял карту, всё равно не работает разминка, хотя плагин работает
 
В этой теме было размещено решение! Перейти к решению.
Сообщения
43
Реакции
-4
Помог
2 раз(а)
Всё разобрался сам, почему не работала разминка! Не работала из за того что стояло mp_round_infinite b, поставил на 0 Всё работает как положено
Тему можно закрыть
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу