Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

steam models

, Плагин глюкнул
Статус пользователя Art of fighters
сообщение 9.3.2015, 18:59
Сообщение #1


Стаж: 15 лет
Город: Санкт-Петербург


Сообщений: 242
Благодарностей: 28
Полезность: 8

Поставил на сервере плагин steam_models.amxx с начала всё работало нормально, потом захожу на сервер и не могу понять что происходит.

На ментовской респе стоят 2 тера ,оба Steam и модели у них простые, как мне сказали такая фигня происходит когда автобалансом перекидывает, и даже если игроки находятся в положенной команде, то модель у них простая.
Глюк произошёл на заполненном сервере.

Код:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <amxmisc>

#pragma semicolon 1

#define MAX_PLAYERS 32

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

new g_iBitClientAccess, g_iBitCustomModel;

///модели для steam игроков, плагин работает только с dproto.
new const model_CT[] = "steamct"; // Название модели для CT
new const model_TE[] = "steamte"; // Название модели для T

public plugin_init()
{
///////original code///////
// register_plugin("Lady Models", "0.1b", "Freedo.m");
///////original code///////

register_plugin("Steam Models", "0.1b+mod.leg", "Freedo.m");
RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawn_Post", 1);
register_forward(FM_SetClientKeyValue, "FM_SetClientKeyValue_Pre", 0);
}

public plugin_precache()
{
//// Author ill ?)
new buffer[128];
formatex(buffer, charsmax(buffer), "models/player/stct/steamct.mdl", model_CT, model_CT);
precache_model(buffer);
formatex(buffer, charsmax(buffer), "models/player/stte/steamte.mdl", model_TE, model_TE);
precache_model(buffer);
}

public client_putinserver(id)
{
if (is_user_steam(id))
BIT_ADD(g_iBitClientAccess, id);
}

public client_disconnect(id)
{
BIT_SUB(g_iBitClientAccess, id);
BIT_SUB(g_iBitCustomModel, id);
}

public Ham_PlayerSpawn_Post(id)
{
if(BIT_VALID(g_iBitClientAccess, id) && is_user_alive(id))
{
switch(cs_get_user_team(id))
{
case CS_TEAM_T: fm_cs_set_user_model(id, model_TE);
case CS_TEAM_CT: fm_cs_set_user_model(id, model_CT);
}
}
}

new g_szPlayerModel[MAX_PLAYERS + 1][32];

public FM_SetClientKeyValue_Pre(id, const szInfobuffer[], const szKey[])
{
if(BIT_VALID(g_iBitCustomModel, id) && equal(szKey, "model"))
{
static szCurrentModel[32];
fm_cs_get_user_model(id, szCurrentModel, charsmax(szCurrentModel));
if(!equal(szCurrentModel, g_szPlayerModel[id])) fm_cs_set_user_model(id, g_szPlayerModel[id]);
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}

stock fm_cs_get_user_model(id, szModel[], szLen) engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", szModel, szLen);
stock fm_cs_set_user_model(id, const szModelName[])
{
engfunc(EngFunc_SetClientKeyValue, id, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", szModelName);
copy(g_szPlayerModel[id], charsmax(g_szPlayerModel[]), szModelName);
BIT_ADD(g_iBitCustomModel, id);
}

stock fm_cs_reset_user_model(id)
{
BIT_SUB(g_iBitCustomModel, id);
dllfunc(DLLFunc_ClientUserInfoChanged, id, engfunc(EngFunc_GetInfoKeyBuffer, id));
}

stock bool:is_user_steam(id)
{
// Author Sh0oter
static dp_pointer;
if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
{
server_cmd("dp_clientinfo %d", id);
server_exec();
return (get_pcvar_num(dp_pointer) == 2) ? true : false ;
}
return false;
}


Build 6153
META LIST
[ 1] dproto_EF RUN - dproto_i386.so v0.9.391 ini Start Never
[ 2] AMX Mod X RUN - amxmodx_mm_i386. v1.8.2 ini Start ANY
[ 3] VoiceTranscoder RUN - vtc.so v80 ini ANY ANY
[ 4] Cust. Flood Fix RUN - cf_fix_mm_i386.s v1.1 ini Start Never
[ 5] ProcessCmds RUN - processcmds_mm_i v1.0.2 ini Start Never
[ 6] WHBlocker RUN - whblocker_mm_i38 v1.5.370 ini Chlvl ANY
[ 7] NetBufExtender RUN - nbex.so v1.0 ini ANY Never
[ 8] UserInfoNetOpti RUN - uino.so v1.0 ini ANY Never
[ 9] LocalizeBug Fix RUN - localizebugfix_m v2.3 ini Start Never
[10] MySQL RUN - mysql_amxx_i386. v1.8.2 pl2 ANY ANY
[11] FakeMeta RUN - fakemeta_amxx_i3 v1.8.2 pl2 ANY ANY
[12] Fun RUN - fun_amxx_i386.so v1.8.2 pl2 ANY ANY
[13] CStrike RUN - cstrike_amxx_i38 v1.8.2 pl2 ANY ANY
[14] Engine RUN - engine_amxx_i386 v1.8.2 pl2 ANY ANY
[15] CSX RUN - csx_amxx_i386.so v1.8.2 pl2 ANY ANY
[16] Ham Sandwich RUN - hamsandwich_amxx v1.8.2 pl2 ANY ANY
[17] Semiclip RUN - semiclip_mm_i386 v1.9f ini ANY ANY
[18] hackdetector RUN - hackdetector_amx v0.13.20 pl2 ANY ANY

Плагины
amxbans_core.amxx
amxbans_main.amxx
admincmd.amxx
adminhelp.amxx
adminslots.amxx
adminvote.amxx
adminchat.amxx
amxgag.amxx
voteban.amxx
autorestart.amxx
ad_manager.amxx
admin_blanks.amxx
admin_check.amxx
afk_manager.amxx
amx_bancs.amxx
amx_kiker.amxx
autoreload_on_newround.amxx
customsky.amxx
c4timer.amxx
sillyc4.amxx
;steam_models.amxx
spritesESP.amxx
csnadedrops.amxx
cmdmenu.amxx
damager_only_admin.amxx
demorecorder.amxx
Descriptive_Fire_in_the_hole.amxx
team_grenade_trail_only_dead_players.amxx
game_destroyer.amxx
killscounter.amxx
HostnameTimeleft.amxx
nademessages.amxx
NewResetScore.amxx
mapmanager_ru.amxx
imessage.amxx
mapsmenu.amxx
menufront.amxx
miscstats.amxx
multilingual.amxx
parachute_rbs.amxx
pausecfg.amxx
plmenu.amxx
players_info.amxx
restmenu.amxx
scrollmsg.amxx
speclist.amxx
stats_logging.amxx
statscfg.amxx
statsx.amxx
info_rank.amxx
instant_autoteambalance.amxx
telemenu.amxx
pluginmenu.amxx
weaponmenu_ru.amxx
Smoke_FIX.amxx
vip_weapon.amxx
ct_steam_tag.amxx
colored_translit.amxx
colored_translit_config.amxx


Отредактировал: Art of fighters, - 9.3.2015, 19:01
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя MiXa
сообщение 9.3.2015, 19:28
Сообщение #2


Стаж: 12 лет

Сообщений: 415
Благодарностей: 91
Полезность: 181

Art of fighters, попробуй через reset_hud

с помощью Ham_Spawn ты выдаешь модель только во время спауна игрока

Код:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <amxmisc>

#pragma semicolon 1

#define MAX_PLAYERS 32

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

new g_iBitClientAccess, g_iBitCustomModel;

///модели для steam игроков, плагин работает только с dproto.
new const model_CT[] = "steamct"; // Название модели для CT
new const model_TE[] = "steamte"; // Название модели для T

public plugin_init()
{
///////original code///////
// register_plugin("Lady Models", "0.1b", "Freedo.m");
///////original code///////

register_plugin("Steam Models", "0.1b+mod.leg", "Freedo.m");
register_event("ResetHUD","Ham_PlayerSpawn_Post","be","1=1")
register_forward(FM_SetClientKeyValue, "FM_SetClientKeyValue_Pre", 0);
}

public plugin_precache()
{
//// Author ill ?)
new buffer[128];
formatex(buffer, charsmax(buffer), "models/player/stct/steamct.mdl", model_CT, model_CT);
precache_model(buffer);
formatex(buffer, charsmax(buffer), "models/player/stte/steamte.mdl", model_TE, model_TE);
precache_model(buffer);
}

public client_putinserver(id)
{
if (is_user_steam(id))
BIT_ADD(g_iBitClientAccess, id);
}

public client_disconnect(id)
{
BIT_SUB(g_iBitClientAccess, id);
BIT_SUB(g_iBitCustomModel, id);
}

public Ham_PlayerSpawn_Post(id)
{
if(BIT_VALID(g_iBitClientAccess, id) && is_user_alive(id))
{
switch(cs_get_user_team(id))
{
case CS_TEAM_T: fm_cs_set_user_model(id, model_TE);
case CS_TEAM_CT: fm_cs_set_user_model(id, model_CT);
}
}
}

new g_szPlayerModel[MAX_PLAYERS + 1][32];

public FM_SetClientKeyValue_Pre(id, const szInfobuffer[], const szKey[])
{
if(BIT_VALID(g_iBitCustomModel, id) && equal(szKey, "model"))
{
static szCurrentModel[32];
fm_cs_get_user_model(id, szCurrentModel, charsmax(szCurrentModel));
if(!equal(szCurrentModel, g_szPlayerModel[id])) fm_cs_set_user_model(id, g_szPlayerModel[id]);
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}

stock fm_cs_get_user_model(id, szModel[], szLen) engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", szModel, szLen);
stock fm_cs_set_user_model(id, const szModelName[])
{
engfunc(EngFunc_SetClientKeyValue, id, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", szModelName);
copy(g_szPlayerModel[id], charsmax(g_szPlayerModel[]), szModelName);
BIT_ADD(g_iBitCustomModel, id);
}

stock fm_cs_reset_user_model(id)
{
BIT_SUB(g_iBitCustomModel, id);
dllfunc(DLLFunc_ClientUserInfoChanged, id, engfunc(EngFunc_GetInfoKeyBuffer, id));
}

stock bool:is_user_steam(id)
{
// Author Sh0oter
static dp_pointer;
if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
{
server_cmd("dp_clientinfo %d", id);
server_exec();
return (get_pcvar_num(dp_pointer) == 2) ? true : false ;
}
return false;
}


Отредактировал: MiXa, - 9.3.2015, 19:38


Допомога з встановлення / налаштування / оновлення за $ :>>> Сервери \ Моди \ Плагіни \ Модулі
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Art of fighters
сообщение 9.3.2015, 20:24
Сообщение #3


Стаж: 15 лет
Город: Санкт-Петербург


Сообщений: 242
Благодарностей: 28
Полезность: 8

Цитата(MiXa @ 9.3.2015, 20:28) *
Art of fighters, попробуй через reset_hud

с помощью Ham_Spawn ты выдаешь модель только во время спауна игрока

Код:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <amxmisc>

#pragma semicolon 1

#define MAX_PLAYERS 32

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

new g_iBitClientAccess, g_iBitCustomModel;

///модели для steam игроков, плагин работает только с dproto.
new const model_CT[] = "steamct"; // Название модели для CT
new const model_TE[] = "steamte"; // Название модели для T

public plugin_init()
{
///////original code///////
// register_plugin("Lady Models", "0.1b", "Freedo.m");
///////original code///////

register_plugin("Steam Models", "0.1b+mod.leg", "Freedo.m");
register_event("ResetHUD","Ham_PlayerSpawn_Post","be","1=1")
register_forward(FM_SetClientKeyValue, "FM_SetClientKeyValue_Pre", 0);
}

public plugin_precache()
{
//// Author ill ?)
new buffer[128];
formatex(buffer, charsmax(buffer), "models/player/stct/steamct.mdl", model_CT, model_CT);
precache_model(buffer);
formatex(buffer, charsmax(buffer), "models/player/stte/steamte.mdl", model_TE, model_TE);
precache_model(buffer);
}

public client_putinserver(id)
{
if (is_user_steam(id))
BIT_ADD(g_iBitClientAccess, id);
}

public client_disconnect(id)
{
BIT_SUB(g_iBitClientAccess, id);
BIT_SUB(g_iBitCustomModel, id);
}

public Ham_PlayerSpawn_Post(id)
{
if(BIT_VALID(g_iBitClientAccess, id) && is_user_alive(id))
{
switch(cs_get_user_team(id))
{
case CS_TEAM_T: fm_cs_set_user_model(id, model_TE);
case CS_TEAM_CT: fm_cs_set_user_model(id, model_CT);
}
}
}

new g_szPlayerModel[MAX_PLAYERS + 1][32];

public FM_SetClientKeyValue_Pre(id, const szInfobuffer[], const szKey[])
{
if(BIT_VALID(g_iBitCustomModel, id) && equal(szKey, "model"))
{
static szCurrentModel[32];
fm_cs_get_user_model(id, szCurrentModel, charsmax(szCurrentModel));
if(!equal(szCurrentModel, g_szPlayerModel[id])) fm_cs_set_user_model(id, g_szPlayerModel[id]);
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}

stock fm_cs_get_user_model(id, szModel[], szLen) engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", szModel, szLen);
stock fm_cs_set_user_model(id, const szModelName[])
{
engfunc(EngFunc_SetClientKeyValue, id, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", szModelName);
copy(g_szPlayerModel[id], charsmax(g_szPlayerModel[]), szModelName);
BIT_ADD(g_iBitCustomModel, id);
}

stock fm_cs_reset_user_model(id)
{
BIT_SUB(g_iBitCustomModel, id);
dllfunc(DLLFunc_ClientUserInfoChanged, id, engfunc(EngFunc_GetInfoKeyBuffer, id));
}

stock bool:is_user_steam(id)
{
// Author Sh0oter
static dp_pointer;
if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
{
server_cmd("dp_clientinfo %d", id);
server_exec();
return (get_pcvar_num(dp_pointer) == 2) ? true : false ;
}
return false;
}


Знать бы что это)) я в этом не особо шарю)

Ещё кое что заметил...когда игрока с этой моделью убивают, труп сразу исчезает.

Отредактировал: Art of fighters, - 9.3.2015, 20:26
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MiXa
сообщение 11.3.2015, 14:58
Сообщение #4


Стаж: 12 лет

Сообщений: 415
Благодарностей: 91
Полезность: 181

Цитата(Art of fighters @ 9.3.2015, 20:24) *
Знать бы что это)) я в этом не особо шарю)

Ещё кое что заметил...когда игрока с этой моделью убивают, труп сразу исчезает.


это уже не плагин, а твой конфиг
cl_corpsestay - эта команда отвечает за продолжительность сохранения трупов на мапе
по умолчанию установленно 600 , у меня установлено 64 , тк зачем мне эти трупы


Допомога з встановлення / налаштування / оновлення за $ :>>> Сервери \ Моди \ Плагіни \ Модулі
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя make89
сообщение 11.3.2015, 15:04
Сообщение #5


Стаж: 13 лет

Сообщений: 79
Благодарностей: 7
Полезность: 71

Первый раз слышу такое название модели поменяй.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Art of fighters
сообщение 12.3.2015, 2:15
Сообщение #6


Стаж: 15 лет
Город: Санкт-Петербург


Сообщений: 242
Благодарностей: 28
Полезность: 8

Цитата(MiXa @ 11.3.2015, 15:58) *
это уже не плагин, а твой конфиг
cl_corpsestay - эта команда отвечает за продолжительность сохранения трупов на мапе
по умолчанию установленно 600 , у меня установлено 64 , тк зачем мне эти трупы

А остальные то трупы почему не исчезают тогда?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Art of fighters
сообщение 12.3.2015, 2:21
Сообщение #7


Стаж: 15 лет
Город: Санкт-Петербург


Сообщений: 242
Благодарностей: 28
Полезность: 8

Цитата(make89 @ 11.3.2015, 16:04) *
Первый раз слышу такое название модели поменяй.


А какая разница какое название модели?
Плагин то работает пока кого нибудь с моделью не перекинет за другую команду...в итоге игрок steam которого перекинуло автобалансом от теров к ментам, бегает с моделью террориста, прочем с простой моделью arctic или terror ,точно не помню.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Valer4
сообщение 15.3.2015, 14:11
Сообщение #8
Стаж: 11 лет

Сообщений: 176
Благодарностей: 46
Полезность: < 0

Если у них модели после проверки на стим не правильные это ошибка дпрото.

Отредактировал: Valer4, - 15.3.2015, 14:12
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SiziF
сообщение 14.3.2017, 17:00
Сообщение #9


Стаж: 15 лет

Сообщений: 1042
Благодарностей: 133
Полезность: 18

Стоит такой же плагин.
Скриптеры,подскажите,и если можно-внесите правку,чтоб если игрок админ и со стима-ему не меняло модель на стимовскую.Так как у админов свои модели.
Можно ли так?У всех випов и админов есть флаг "b",плагин чекает если флаг у игрока есть-модель не меняется.
Спасибо.
Думаю кому-то еще пригодится.

Cкрытый текст
Код:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <amxmisc>

#pragma semicolon 1

#define MAX_PLAYERS 32

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

new g_iBitClientAccess, g_iBitCustomModel;

///модели для steam игроков, плагин работает только с dproto.
new const model_CT[] = "st_c"; // Название модели для CT
new const model_TE[] = "st_t"; // Название модели для T

public plugin_init()
{
///////original code///////
// register_plugin("Lady Models", "0.1b", "Freedo.m");
///////original code///////

register_plugin("Steam Models", "0.1b+mod.leg", "Freedo.m");
RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawn_Post", 1);
register_forward(FM_SetClientKeyValue, "FM_SetClientKeyValue_Pre", 0);
}

public plugin_precache()
{
//// Author ill ?)
new buffer[128];
formatex(buffer, charsmax(buffer), "models/player/%s/%s.mdl", model_CT, model_CT);
precache_model(buffer);
formatex(buffer, charsmax(buffer), "models/player/%s/%s.mdl", model_TE, model_TE);
precache_model(buffer);
}

public client_putinserver(id)
{
if (is_user_steam(id) && !is_user_admin(id))
BIT_ADD(g_iBitClientAccess, id);
}

public client_disconnect(id)
{
BIT_SUB(g_iBitClientAccess, id);
BIT_SUB(g_iBitCustomModel, id);
}

public Ham_PlayerSpawn_Post(id)
{
if(BIT_VALID(g_iBitClientAccess, id) && is_user_alive(id))
{
switch(cs_get_user_team(id))
{
case CS_TEAM_T: fm_cs_set_user_model(id, model_TE);
case CS_TEAM_CT: fm_cs_set_user_model(id, model_CT);
}
}
}

new g_szPlayerModel[MAX_PLAYERS + 1][32];

public FM_SetClientKeyValue_Pre(id, const szInfobuffer[], const szKey[])
{
if(BIT_VALID(g_iBitCustomModel, id) && equal(szKey, "model"))
{
static szCurrentModel[32];
fm_cs_get_user_model(id, szCurrentModel, charsmax(szCurrentModel));
if(!equal(szCurrentModel, g_szPlayerModel[id])) fm_cs_set_user_model(id, g_szPlayerModel[id]);
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}

stock fm_cs_get_user_model(id, szModel[], szLen) engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", szModel, szLen);
stock fm_cs_set_user_model(id, const szModelName[])
{
engfunc(EngFunc_SetClientKeyValue, id, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", szModelName);
copy(g_szPlayerModel[id], charsmax(g_szPlayerModel[]), szModelName);
BIT_ADD(g_iBitCustomModel, id);
}

stock fm_cs_reset_user_model(id)
{
BIT_SUB(g_iBitCustomModel, id);
dllfunc(DLLFunc_ClientUserInfoChanged, id, engfunc(EngFunc_GetInfoKeyBuffer, id));
}

stock bool:is_user_steam(id)
{
// Author Sh0oter
static dp_pointer;
if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
{
server_cmd("dp_clientinfo %d", id);
server_exec();
return (get_pcvar_num(dp_pointer) == 2) ? true : false ;
}
return false;
}


Отредактировал: SiziF, - 14.3.2017, 17:03
Прикрепленные файлы:
Прикрепленный файл  steam_models.sma ( 3,05 килобайт ) Кол-во скачиваний: 11
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: