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

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

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

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

player motd opener

Статус пользователя CH0CAPIC
сообщение 14.5.2014, 17:54
Сообщение #1


Стаж: 12 лет

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

Нужен код для вызова админом motd у игрока. спасибо .
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Legenda
сообщение 14.5.2014, 17:59
Сообщение #2


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

show_motd
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 14.5.2014, 18:37
Сообщение #3


Стаж: 12 лет

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

Цитата(Legenda @ 14.5.2014, 16:59) *
show_motd


чтоб admin открывал у игрока motd.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 14.5.2014, 18:40
Сообщение #4


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

CH0CAPIC, поиск творит чудеса...

Код:
public show_menu(id)
{
new menu = menu_create("\rВыберите игрока", "menu_handler")

new s_Players[32], i_Num, i_Player, s_Name[64], s_Player[10]
get_players(s_Players, i_Num, "h")
for (new i; i < i_Num; i++)
{
i_Player = s_Players[i]

get_user_name(i_Player, s_Name, charsmax(s_Name))
num_to_str(i_Player, s_Player, charsmax(s_Player))
if(is_user_alive(i_Player)) format(s_Name, charsmax(s_Name), "\y%s", s_Name)
else format(s_Name, charsmax(s_Name), "\d%s", s_Name)
menu_additem(menu, s_Name, s_Player, 0)
}
menu_setprop(menu, MPROP_NEXTNAME, "\yВперед")
menu_setprop(menu, MPROP_BACKNAME, "\yНазад")
menu_setprop(menu, MPROP_EXITNAME, "\yВыход")

menu_display(id, menu, 0)
}
public menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new s_Data[32], s_Name[64], i_Access, i_Callback
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)

new i_Player = str_to_num(s_Data)

new Name[33], NameAdmin[33]
get_user_name(i_Player, Name, 31)
get_user_name(id, NameAdmin, 31)

if(is_user_connected(i_Player))
{
show_motd(i_Player,"/addons/amxmodx/data/твой мотд.txt","Название")
}
else
{
client_print(id, print_center, "Выберите другого игрока!")
show_menu(id)
}
menu_destroy(menu)
return PLUGIN_HANDLED
}

источник
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 14.5.2014, 18:42
Сообщение #5


Стаж: 12 лет

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

Цитата(Bloo @ 14.5.2014, 17:40) *
CH0CAPIC, поиск творит чудеса...

Код:
public show_menu(id)
{
new menu = menu_create("\rВыберите игрока", "menu_handler")

new s_Players[32], i_Num, i_Player, s_Name[64], s_Player[10]
get_players(s_Players, i_Num, "h")
for (new i; i < i_Num; i++)
{
i_Player = s_Players[i]

get_user_name(i_Player, s_Name, charsmax(s_Name))
num_to_str(i_Player, s_Player, charsmax(s_Player))
if(is_user_alive(i_Player)) format(s_Name, charsmax(s_Name), "\y%s", s_Name)
else format(s_Name, charsmax(s_Name), "\d%s", s_Name)
menu_additem(menu, s_Name, s_Player, 0)
}
menu_setprop(menu, MPROP_NEXTNAME, "\yВперед")
menu_setprop(menu, MPROP_BACKNAME, "\yНазад")
menu_setprop(menu, MPROP_EXITNAME, "\yВыход")

menu_display(id, menu, 0)
}
public menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new s_Data[32], s_Name[64], i_Access, i_Callback
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)

new i_Player = str_to_num(s_Data)

new Name[33], NameAdmin[33]
get_user_name(i_Player, Name, 31)
get_user_name(id, NameAdmin, 31)

if(is_user_connected(i_Player))
{
show_motd(i_Player,"/addons/amxmodx/data/твой мотд.txt","Название")
}
else
{
client_print(id, print_center, "Выберите другого игрока!")
show_menu(id)
}
menu_destroy(menu)
return PLUGIN_HANDLED
}

источник



спасибо по другому писал не смог найти.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 14.5.2014, 18:48
Сообщение #6


Стаж: 12 лет

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

еще не знаете код чтобы игрок не смог закрыть несколько минут motd ? пожалуйста.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
XyLiGaN
сообщение 14.5.2014, 18:55
Сообщение #7
Стаж: 13 лет
Город: Югорск

Сообщений: 11668
Благодарностей: 6450
Полезность: 1052

Меценат Меценат

Какой ужас... Какая-то деградация пошла прям... Люди разучились пользоваться поиском...
Ойй, не поиском, а умом...

Цитата(CH0CAPIC @ 14.5.2014, 22:48) *
еще не знаете код чтобы игрок не смог закрыть несколько минут motd ? пожалуйста.

Так ты скажи что тебе нужно?! А то ты сначало одно говоришь, а потом совершенно другое...
Всегда убивали такие люди... А потом кроют всех типо "вот вы все плохие, не помогаете мне, ничего не знаете и т.д."
ps.gif Относиться ко всем юзерам! Выкладывайте свою полную мысль и то что вам необходимо! А не кусочками или чего-либо не договаривая... Нам же тоже очень сложно понять то, чего вы хотите! Имейте уважение...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 14.5.2014, 19:02
Сообщение #8


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Цитата(CH0CAPIC @ 14.5.2014, 20:48) *
еще не знаете код чтобы игрок не смог закрыть несколько минут motd ? пожалуйста.

ни как
можно только заново открывать его
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 14.5.2014, 19:44
Сообщение #9


Стаж: 12 лет

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

У MastaMan-а есть подобные плагины, но мне нужна только та функция. Вы можете выложить только эту функцию?

MastaMan motd
Код:

#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <colorchat>

#define PLUGIN "MastaMotd's"
#define VERSION "2.5.0"
#define AUTHOR "MastaMan"

#define ACCESS ADMIN_SLAY

#define HTM_EXT "htm"
#define MAX_FILES 10

#define MSG_MAXSIZE 255
#define MSG_MINSIZE 64
#define URL_MAXSIZE 1024
#define MOTD_MAXSIZE 1200

// Предварительное кеширование дополнительных файлов шаблона.
// Если, вы используете свой шаблон, можете исопльзовать свои
// необходимые файлы.
// ПРИМЕЧАНИЕ: используйте не больше 30 файлов.
// ПРИМЕЧАНИЕ: помните, чем меньший размер файла, тем быстрее
// он закешируется!
// Просто измените, или допишите пути по аналогии.

new g_szGenericIMG[][] =
{
"addons/amxmodx/configs/mastamotds/images/template/tip.png",
"addons/amxmodx/configs/mastamotds/images/template/rb.jpg",
"addons/amxmodx/configs/mastamotds/images/template/lb.jpg",
"addons/amxmodx/configs/mastamotds/images/template/rt.jpg",
"addons/amxmodx/configs/mastamotds/images/template/lt.jpg",
"addons/amxmodx/configs/mastamotds/images/logo.png"
}

new g_szGeneratedCache[MAX_FILES + 1][MSG_MINSIZE]

new a_szFilesName[MAX_FILES + 1][MSG_MAXSIZE]
new a_szChatMessage[MAX_FILES + 1][MSG_MAXSIZE]

new g_CvarPluginEnable = 1

new g_szMotdIndex

new bool:NOW_VIEW[33]

/*---------------------------------------------------*/

/////////////////////////////////////////////////////////////////////
// ПРЕДВАРИТЕЛЬНОЕ КЕШИРОВАНИЕ ФАЙЛОВ
/////////////////////////////////////////////////////////////////////

// В этой функции так же происходит конфигурирование плагина!

public plugin_precache()
{

// Загрузка конфигурации
new szCfgDir[MSG_MINSIZE]
get_configsdir(szCfgDir, MSG_MINSIZE - 1)
formatex(szCfgDir, sizeof (szCfgDir) -1 , "%s/mastamotds/mastamotds.cfg", szCfgDir)
server_cmd("exec %s", szCfgDir)

// Если не найден файл конфигурации
if(!file_exists (szCfgDir))
{
g_CvarPluginEnable = 0
}

if(g_CvarPluginEnable)
{

// Отключаем все функции плагина, если конфигурация не найдена
// Админ-команды
// Формирование консольной команды показа MOTD окон
register_concmd("mm_showmotd", "f_CmdForceMotd", ACCESS, "<name or #userid> <name HTML file> - show MOTD")

// Команда для открытия меню показа MOTD окон
register_concmd ("mm_showmotd_menu", "player_menu", ACCESS, "Open player menu show MOTD")

// Разбор файла конфигурации
new szData[MSG_MAXSIZE]

new g_szFile = fopen(szCfgDir, "rt")

while(!feof(g_szFile))
{
fgets(g_szFile, szData, MSG_MAXSIZE - 1)

// Пропускаем разбор, если есть комментарии или строчка очень короткая
if(szData[0] == ';' || szData[0] == '/' || strlen(szData) < 3)
{
continue
}

// Парсим файл конфигурации, и автоматически создаем переменные
new g_szParam1[MSG_MINSIZE], g_szParam2[MSG_MINSIZE]

parse(szData, g_szParam1, sizeof (g_szParam1), g_szParam2, sizeof(g_szParam2));

register_cvar(g_szParam1, g_szParam2)
}
}

// Регистрация переменных

// Время в секундах между показами подсказок в чате.
new Float:szChatAnonse = get_cvar_float("mm_mastamotds_chat_time_anonce")
if(szChatAnonse != 0)
{
set_task(szChatAnonse, "f_ChatAnonse", 0, "", 0, "b")
}

// Создаем клиентские команды
new t_szCvarNum[MSG_MAXSIZE]
new t_szCvarFName[MSG_MAXSIZE]
new t_szClCmd[MSG_MAXSIZE]
new szSeparator[2] = ","
new g_szFilesPath[MSG_MAXSIZE]
new szCachedHTML[MSG_MAXSIZE], szDate[32], g_szRandomChar[5], g_szTmpCacheFile[MSG_MAXSIZE]
new szCacheDir[MSG_MAXSIZE], g_szTmpStr[2048],iLen
new bool:writeCache[MAX_FILES + 1]


for(new i = 1; i <= MAX_FILES; i++)
{
formatex(t_szCvarNum,MSG_MAXSIZE-1, "mm_mastamotds_file%d",i)

if(get_cvar_num(t_szCvarNum) == 1)
{
// Записываем в массив имена файлов из конфигурации
formatex(t_szCvarFName, MSG_MAXSIZE - 1, "mm_mastamotds_file%d_fname",i)
get_cvar_string(t_szCvarFName, a_szFilesName[i], MSG_MAXSIZE - 1)

// Создаем чат-команды
formatex(t_szClCmd, MSG_MAXSIZE - 1, "say /%s", a_szFilesName[i])
register_clcmd (t_szClCmd, "f_CmdChatMOTD", 0)

formatex(t_szClCmd, MSG_MAXSIZE - 1, "say_team /%s", a_szFilesName[i])
register_clcmd (t_szClCmd, "f_CmdChatMOTD", 0)

// Формируем подсказку в чате
if(i == 2 || equali(a_szFilesName[i-1], "") )
{
szSeparator = ""
}
else
{
szSeparator = ","
}

formatex(a_szChatMessage[i], MSG_MAXSIZE - 1, "%s /%s", szSeparator, a_szFilesName[i])

// Предварительное кешироване файлов, имена которых указаны в
// файле конфигурации плагина
if(!equali(a_szFilesName[i], "") || !equali(a_szFilesName[i], " ") || !equali(a_szFilesName[i], " ") /*|| equali(szMotdWeb, "") || equali(szMotdWeb, " ") || equali(szMotdWeb, " ")*/)
{
formatex(g_szFilesPath, MSG_MAXSIZE - 1, "addons/amxmodx/configs/mastamotds/%s.%s", a_szFilesName[i], HTM_EXT)

// Кеширование файлов во временную папку сервера

// Инициализация файла для хранения префиксов кеша
get_datadir(szCacheDir, MSG_MAXSIZE - 1)
formatex(szCacheDir, MSG_MAXSIZE - 1, "%s/mastamotds_cache.ini", szCacheDir)

// Проверка или файл для хранения префиксов существует, если нет, тогда создаем
if(!file_exists(szCacheDir))
{
writeCache[i] = true;

mm_log(2, "Не найден ^"%s^". Файл будет автоматически создан!", szCacheDir)
}
else
{
writeCache[i] = false;

read_file(szCacheDir, i - 1, g_szGeneratedCache[i - 1], MSG_MAXSIZE - 1, iLen)

if(strlen(g_szGeneratedCache[i - 1]) < 4 && !writeCache[i])
{
writeCache[i] = true

mm_log(2, "Не найден префикс кеша в ^"%s^", строчка ^"%d^" для файла %s.%s. Префикс будет автоматически сгенерирован!", szCacheDir, i, a_szFilesName[i], HTM_EXT)
}

formatex(g_szTmpCacheFile, MSG_MAXSIZE - 1, "cache/%s%s.%s", g_szGeneratedCache[i - 1], a_szFilesName[i], HTM_EXT)

if(!file_exists(g_szTmpCacheFile) && !writeCache[i])
{
writeCache[i] = true;

mm_log(2, "Не найден ^"%s^". Файл будет автоматически создан!", g_szTmpCacheFile)
}

if(file_size(g_szFilesPath, 0) != file_size(g_szTmpCacheFile, 0) && !writeCache[i])
{
writeCache[i] = true;

delete_file(g_szTmpCacheFile)

mm_log(2, "Обновление кеша! Возможно файл был изменен. CRC файла ^"%s^" не совпадает с ^"%s^"!", g_szFilesPath, g_szTmpCacheFile)
}
}

if(writeCache[i])
{
// Генерируем произвольное название файла кеша
format_time(szDate, sizeof(szDate) - 1, "%d%m%Y")

formatex(g_szRandomChar, sizeof(g_szRandomChar) - 1, "%c%c%c%c", random_num('a', 'z'), random_num('a', 'z'), random_num('a', 'z'), random_num('a', 'z'))
formatex(szCachedHTML, MSG_MAXSIZE - 1, "%s%s", g_szRandomChar, szDate)

// Записываем в файл новое значение кеша
write_file(szCacheDir, szCachedHTML, i - 1)

mm_log(1, "Сгенерирован новый префикс ^"%s^", для файла ^"%s.%s^"", szCachedHTML, a_szFilesName[i], HTM_EXT)

read_file(szCacheDir, i - 1, g_szGeneratedCache[i - 1], MSG_MAXSIZE - 1, iLen)
formatex(g_szTmpCacheFile, MSG_MAXSIZE - 1, "cache/%s%s.%s", g_szGeneratedCache[i - 1], a_szFilesName[i], HTM_EXT)

new file = fopen(g_szFilesPath, "rt")
new cachefile = fopen(g_szTmpCacheFile, "wt")

while(!feof(file))
{
fgets(file, g_szTmpStr, sizeof(g_szTmpStr))

fputs(cachefile, g_szTmpStr)
}

fclose(file)
fclose(cachefile)

mm_log(1, "Создан новый файл кеша ^"%s^"", g_szTmpCacheFile)

writeCache[i] = false;
}

if(file_exists(g_szFilesPath))
{
precache_generic(g_szTmpCacheFile)
}
else
{
mm_log(3, "Ошибка кеширования файла %s!", g_szTmpCacheFile)
}
}
else
{
mm_log(3, "Попытка кеширования файлов не удачна! Ошибка чтения имени файла из конфигурации!")
}

}
else
{
a_szChatMessage[i] = ""
}
}



// Предварительное кеширование рисунков
for(new i = 0; i < sizeof(g_szGenericIMG); i++)
{
if(file_exists(g_szGenericIMG[i]))
{
precache_generic(g_szGenericIMG[i])
}
else
{
server_cmd("echo [MastaMOTD's] Bad cache file %s", g_szGenericIMG[i])

mm_log(3, "Невозможно закешировать дополнительный файл ^"%s^"", g_szGenericIMG[i])
}
}

return PLUGIN_CONTINUE
}

/////////////////////////////////////////////////////////////////////
// ИНИЦИАЛИЗАЦИЯ ПЛАГИНА
/////////////////////////////////////////////////////////////////////

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

// Регистрация переменной версии плагина
register_cvar("mastamotd_ver", VERSION, FCVAR_SPONLY | FCVAR_SERVER)

// Загрузка словаря
register_dictionary("mastamotds.txt")

// Загрузка конфигурации
new szCfgDir[MSG_MINSIZE]
get_configsdir(szCfgDir, MSG_MINSIZE - 1)
formatex(szCfgDir, sizeof (szCfgDir) -1 , "%s/mastamotds/mastamotds.cfg", szCfgDir)
server_cmd("exec %s", szCfgDir)

// Если не найден файл конфигурации
if(!file_exists (szCfgDir))
{
server_cmd("echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
server_cmd("echo ")
server_cmd("echo ==============================================")
server_cmd("echo [MastaMOTD's] Not found ^"%s^"", szCfgDir)
server_cmd("echo [MastaMOTD's] Please reinstall plugin %s for solve this problem!", PLUGIN)
server_cmd("echo [MastaMOTD's] Visit www.amx-server.blogspot.com for check new version and more info")
server_cmd("echo ==============================================")
server_cmd("echo ")
server_cmd("echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")

mm_log(3, "Не найден файл конфигурации ^"%s^". Переустановите плагин или посетите www.amx-server.blogspot.com, для подробной информации", szCfgDir)

g_CvarPluginEnable = 0
}
}

/////////////////////////////////////////////////////////////////////
// ЧАТ-КОМАНДЫ
/////////////////////////////////////////////////////////////////////


public f_CmdChatMOTD(UID)
{
// Получаем индетификатор из массива с именами файлов
new szMotdFName[MSG_MAXSIZE]

read_argv(1, szMotdFName, MSG_MAXSIZE - 1)

for(new i = 2; i <= MAX_FILES; i++)
{
if(containi(szMotdFName, a_szFilesName[i]) != -1)
{
g_szMotdIndex = i

set_task(0.15, "f_ChatHandleMOTD", UID)
}
else
{
continue
}
}

return PLUGIN_HANDLED
}

public f_ChatHandleMOTD(UID)
{
// Объявляем используемые переменные
new szMotdTitle[MSG_MAXSIZE], szMotdFName[MSG_MAXSIZE], szMotdWeb[URL_MAXSIZE], szMotdBgColor[MSG_MAXSIZE]
new szMotdWidth[MSG_MAXSIZE], szMotdHeight[MSG_MAXSIZE]

// Парсим переменные
formatex(szMotdTitle, MSG_MAXSIZE - 1, "mm_mastamotds_file%d_title", g_szMotdIndex)
get_cvar_string(szMotdTitle, szMotdTitle, MSG_MAXSIZE - 1)

formatex(szMotdWeb, URL_MAXSIZE - 1, "mm_mastamotds_file%d_web", g_szMotdIndex)
get_cvar_string(szMotdWeb, szMotdWeb, sizeof(szMotdWeb) - 1)

formatex(szMotdWidth, MSG_MAXSIZE - 1, "mm_mastamotds_file%d_width", g_szMotdIndex)
get_cvar_string(szMotdWidth,szMotdWidth, MSG_MAXSIZE - 1)

formatex(szMotdHeight, MSG_MAXSIZE - 1, "mm_mastamotds_file%d_height", g_szMotdIndex)
get_cvar_string(szMotdHeight,szMotdHeight, MSG_MAXSIZE - 1)

get_cvar_string("mm_mastamotds_bgcolor", szMotdBgColor, MSG_MAXSIZE - 1)

//Сообщение об ошибке
// Проверяем на ввод пустых символов вместо имени файла
if(equali(a_szFilesName[g_szMotdIndex], "") || equali(a_szFilesName[g_szMotdIndex], " "))
{
ColorChat(UID, RED,"%L", UID, "MM_LANG_MOTD_FILE_NOT_FOUND2")
}

// Проверяем или есть запись в перменной mm_mastamotds_file_web
if(equali(szMotdWeb[0], "") || equali(szMotdWeb[0], " ") || equali(szMotdWeb[0], " "))
{
// Проверяем на физическое существование данного файла
formatex(szMotdFName, MSG_MAXSIZE - 1, "\addons\amxmodx\configs\mastamotds\%s.%s",a_szFilesName[g_szMotdIndex], HTM_EXT)

if(!file_exists(szMotdFName))
{
ColorChat (UID, RED,"%L", UID, "MM_LANG_MOTD_FILE_NOT_FOUND", a_szFilesName[g_szMotdIndex], HTM_EXT)

server_cmd("echo ")
server_cmd("echo ==============================================")
server_cmd("echo Not found ^"%s^"", a_szFilesName[g_szMotdIndex])
server_cmd("echo Please reinstall plugin %s for solve this problem or check your cfg!", PLUGIN)
server_cmd("echo ")
server_cmd("echo Visit www.amx-server.blogspot.com for check new version and more info")
server_cmd("echo ==============================================")
server_cmd("echo ")

mm_log(3, "Не найден файл ^"%s^".", a_szFilesName[g_szMotdIndex])

return PLUGIN_HANDLED
}

// Формируем html страницу при помощи тега iframe

formatex(szMotdFName, MOTD_MAXSIZE - 1, "<body style=^"padding:0px; margin:0px; background:%s^"><iframe src=^"cache/%s%s.%s^" width=^"%s^" height=^"%s^" frameborder=^"0^" scrolling=^"no^" align=^"center^">",szMotdBgColor, g_szGeneratedCache[g_szMotdIndex - 1], a_szFilesName[g_szMotdIndex], HTM_EXT, szMotdWidth, szMotdHeight)

}
else
{
// Формируем html страницу при помощи тега iframe
formatex(szMotdFName, MOTD_MAXSIZE - 1, "<body style=^"padding:0px; margin:0px; background:%s^"><iframe src=^"%s^" width=^"%s^" height=^"%s^" frameborder=^"0^" scrolling=^"no^" align=^"center^">",szMotdBgColor, szMotdWeb, szMotdWidth, szMotdHeight)
}

// Уведомление в чате об использовании команды игроком
if(get_cvar_num("mm_mastamotds_chat_use_cmd") == 1)
{
new szChat_UseCMD[MSG_MAXSIZE]
new szUserName[MSG_MINSIZE]
get_user_name(UID, szUserName, MSG_MINSIZE-1)
formatex(szChat_UseCMD, MSG_MAXSIZE - 1, "%L", UID, "MM_LANG_CHAT_USE_CMD", szUserName, szMotdTitle, a_szFilesName[g_szMotdIndex])

client_print (0, print_chat,szChat_UseCMD)

mm_log(1, "Игрок %s посмотрел ^"%s^".", szUserName, a_szFilesName[g_szMotdIndex])
}

// Показываем MOTD
show_motd (UID, szMotdFName, szMotdTitle)

return PLUGIN_HANDLED
}

/////////////////////////////////////////////////////////////////////
// КОНСОЛЬНЫЕ КОМАНДЫ
/////////////////////////////////////////////////////////////////////

// Объявляем используемые переменные
new szMotdTitle2[33][MSG_MAXSIZE], szMotdFName2[33][MSG_MAXSIZE], szMotdWeb2[33][URL_MAXSIZE]
new szUserName2, TIMER[33]
new g_szMotdShow2[33], g_szMotdHeight2[33][MSG_MAXSIZE], g_szMotdWidth2[33][MSG_MAXSIZE]

public f_CmdForceMotd(id, level, cid)
{
// Проверяем или пользователь - администратор
if (!cmd_access(id, level, cid, 2))
{
return PLUGIN_HANDLED
}


// Объявляем дополнительные переменные
new szMotdBgColor2[MSG_MAXSIZE]
new szMotdShow2[MSG_MAXSIZE]
new szMotdWidth2[MSG_MAXSIZE], szMotdHeight2[MSG_MAXSIZE]
new szPlayerName2[MSG_MAXSIZE], g_szMotdForceIndex, g_szAdminName[MSG_MINSIZE], g_szUserName2[MSG_MINSIZE]
new szChat_ADM_USE[MSG_MAXSIZE]

// Парсим консольную команду
read_argv(1, szPlayerName2, MSG_MAXSIZE - 1)

// Получаем ID игрока
szUserName2 = cmd_target(id, szPlayerName2, 0)

read_argv(2, szMotdFName2[szUserName2], MSG_MAXSIZE - 1)


// Проверяем или правильно получили имя
if(!szUserName2)
{
return PLUGIN_HANDLED
}

// Получаем индитификатор из массива с именами файлов
for(new i = 1; i <= MAX_FILES; i++)
{
if(containi(szMotdFName2[szUserName2], a_szFilesName[i]) != -1)
{
g_szMotdForceIndex = i
}
else
{
continue
}
}

// Парсим переменные
get_user_name(szUserName2, g_szUserName2, MSG_MINSIZE - 1)
get_user_name(id, g_szAdminName, MSG_MINSIZE - 1)

formatex(szMotdTitle2[szUserName2], MSG_MAXSIZE - 1, "mm_mastamotds_file%d_title", g_szMotdForceIndex)
get_cvar_string(szMotdTitle2[szUserName2], szMotdTitle2[szUserName2], MSG_MAXSIZE - 1)

formatex(szMotdWeb2[szUserName2], URL_MAXSIZE - 1, "mm_mastamotds_file%d_web", g_szMotdForceIndex)
get_cvar_string(szMotdWeb2[szUserName2], szMotdWeb2[szUserName2], URL_MAXSIZE - 1)

get_cvar_string("mm_mastamotds_bgcolor", szMotdBgColor2, MSG_MAXSIZE - 1)

/*----------------------------------*/

formatex(szMotdWidth2, MSG_MAXSIZE - 1, "mm_mastamotds_file%d_width", g_szMotdForceIndex)
get_cvar_string(szMotdWidth2, g_szMotdWidth2[szUserName2], MSG_MAXSIZE - 1)


formatex(szMotdHeight2, MSG_MAXSIZE - 1, "mm_mastamotds_file%d_height", g_szMotdForceIndex)
get_cvar_string(szMotdHeight2, g_szMotdHeight2[szUserName2], MSG_MAXSIZE - 1)

formatex(szMotdShow2, MSG_MINSIZE - 1, "mm_mastamotds_file%d_show", g_szMotdForceIndex)
g_szMotdShow2[szUserName2] = get_cvar_num(szMotdShow2)

// Сообщение об ошибке
// Проверяем на ввод пустых символов вместо имени файла
if(equali(szMotdFName2[szUserName2], "") || equali(szMotdFName2[szUserName2], " "))
{
console_print(id, "Please enter correct file name")
ColorChat (id, RED,"%L", id, "MM_LANG_MOTD_FILE_NOT_FOUND2")

return PLUGIN_HANDLED
}

// Проверяем или есть запись в перменной mm_mastamotds_file_web
if(equali(szMotdWeb2[szUserName2], "") || equali(szMotdWeb2[szUserName2], " ") || equali(szMotdWeb2[szUserName2], " "))
{
// Проверяем на физическое существование файла
formatex(szMotdFName2[szUserName2], MSG_MAXSIZE - 1, "\addons\amxmodx\configs\mastamotds\%s.%s",a_szFilesName[g_szMotdForceIndex], HTM_EXT)

if(!file_exists(szMotdFName2[szUserName2]))
{
read_argv(2, szMotdFName2[szUserName2], MSG_MAXSIZE - 1)

new szUnknownFile[MSG_MAXSIZE]
formatex(szUnknownFile, MSG_MAXSIZE - 1, "\addons\amxmodx\configs\mastamotds\%s.%s",szMotdFName2[szUserName2], HTM_EXT)

ColorChat (id, RED,"%L", id, "MM_LANG_MOTD_FILE_NOT_FOUND3", szUnknownFile)

server_cmd("echo ")
server_cmd("echo ==============================================")
server_cmd("echo File %s Not found", szUnknownFile)
server_cmd("echo Please enter correct file name or check your cfg.", PLUGIN)
server_cmd("echo ")
server_cmd("echo Visit www.amx-server.blogspot.com for check new version and more info...")
server_cmd("echo ==============================================")
server_cmd("echo ")

mm_log(3, "Не найден файл ^"%s^", или название введено не правильно!", szUnknownFile)

return PLUGIN_HANDLED
}

// Формируем html страницу при помощи тега iframe
formatex(szMotdFName2[szUserName2], MOTD_MAXSIZE - 1, "<body style=^"padding:0px; margin:0px; background:%s^"><iframe src=^"cache/%s%s.%s^" width=^"%s^" height=^"%s^" frameborder=^"0^" scrolling=^"no^" align=^"center^">", szMotdBgColor2, g_szGeneratedCache[g_szMotdForceIndex - 1], a_szFilesName[g_szMotdForceIndex], HTM_EXT, g_szMotdWidth2[szUserName2], g_szMotdHeight2[szUserName2])

}
else
{
// Формируем html страницу при помощи тега iframe
formatex(szMotdFName2[szUserName2], MOTD_MAXSIZE - 1, "<body style=^"padding:0px; margin:0px; background:%s^"><iframe src=^"%s^" width=^"%s^" height=^"%s^" frameborder=^"0^" scrolling=^"no^" align=^"center^">",szMotdBgColor2, szMotdWeb2[szUserName2], g_szMotdWidth2[szUserName2], g_szMotdHeight2[szUserName2])
}

// В зависимости от значения переменной формируем не закрывающиеся MOTD
if(g_szMotdShow2[szUserName2] < 2)
{
if(!NOW_VIEW[szUserName2])
{
// Уведомление в чате об использовании команды
if(get_cvar_num("mm_mastamotds_chat_use_cmd") == 1)
{
// Формируем чат - сообщение
formatex(szChat_ADM_USE, MSG_MAXSIZE - 1, "%L",0, "MM_LANG_CHAT_ADM_CMD", g_szAdminName, g_szUserName2, szMotdTitle2[szUserName2])

ColorChat(id, GREY, szChat_ADM_USE)
}

// Показываем MOTD
show_motd(szUserName2, szMotdFName2[szUserName2], szMotdTitle2[szUserName2])

mm_log(1, "Администратор ^"%s^" показал игроку ^'%s^" MOTD", g_szAdminName, g_szUserName2)
}
else
{
ColorChat(id, RED, "%L", id, "MM_LANG_CHAT_ADM_CMD3")

mm_log(1, "Администратор пытался показать MOTD несколько раз подряд")

return PLUGIN_HANDLED
}
}
else
{
// Проверяем или пользователь уже смотрит MOTD
if(!NOW_VIEW[szUserName2])
{
NOW_VIEW[szUserName2] = true

if(get_cvar_num("mm_mastamotds_chat_use_cmd") == 1)
{
// Формируем чат - сообщение
formatex(szChat_ADM_USE, MSG_MAXSIZE - 1, "%L",0, "MM_LANG_CHAT_ADM_CMD2", g_szAdminName, g_szUserName2, szMotdTitle2[szUserName2], g_szMotdShow2[szUserName2])

ColorChat(id, RED, szChat_ADM_USE)
}

// Устанавливаем таймер в зависимости от переменной, и компенисируем 1 секунду
TIMER[szUserName2] = g_szMotdShow2[szUserName2] - 1
set_task(1.0, "f_HUD_TIMER", szUserName2, _, 0, "a", TIMER[szUserName2])

// Следующая строка отвечает за "Не закрывающиеся MOTD"
// Открываем каждые 0.1 секунду MOTD, на определенный период
// Если возникает нагрузка на сервер - измените параметр 0.5 на 1.0
// и в конце строки удалите "* 2"
set_task(0.5, "f_CmdForceMotd_Handle", szUserName2, _, 0, "a", g_szMotdShow2[szUserName2] * 2)

// Включаем еффекты
if(get_cvar_num("mm_mastamotds_effect"))
{
f_EffectsStart(szUserName2)
client_cmd(szUserName2, "spk buttons/button1")
}

// Очищаем все 4 канала HUD сообщений, надписей итак не будет видно
for(new i = 1; i <= 4; i++)
{
set_hudmessage(_,_,_,_,_,_,_,_,_,_,i)
show_hudmessage(0, " ")
}

}
else
{
ColorChat(id, RED, "%L", id, "MM_LANG_CHAT_ADM_CMD3")

mm_log(1, "Администратор пытался показать MOTD несколько раз подряд")

return PLUGIN_HANDLED
}
}

return PLUGIN_HANDLED
}


public f_CmdForceMotd_Handle(szUserName2)
{
// Показываем MOTD
show_motd(szUserName2, szMotdFName2[szUserName2], szMotdTitle2[szUserName2])
}

public f_HUD_CLOSE_WINDOW(szUserName2)
{
if(!NOW_VIEW[szUserName2])
{
// Показываем сообщение о том что уже можно закрыть MOTD
set_hudmessage(0, 255, 0, -1.0, 0.01, 0, 0.0, 2.0, 2.0, 2.0, -1)
show_hudmessage(szUserName2, "%L", szUserName2, "MM_LANG_MOTD_CONTINUE")
}
}

public f_HUD_TIMER(szUserName2)
{
// Таймер обратного отсчета
// Если время таймера закончилось, выключаем еффекты и показываем сообщение
if(TIMER[szUserName2] <= 1)
{
NOW_VIEW[szUserName2] = false

if(get_cvar_num("mm_mastamotds_effect") == 1)
{
f_EffectsEnd(szUserName2)
}

set_task(3.0, "f_HUD_CLOSE_WINDOW", szUserName2)
}

TIMER[szUserName2]--


set_hudmessage(255, 0, 0, -1.0, 0.01, 2, 0.5, 2.0, 0.03, 0.1, -1)
show_hudmessage(szUserName2, "%L", szUserName2, "MM_LANG_MOTD_WARNING")


// Показываем оставшиеся секунды разным цветом
set_hudmessage(255, 0, 0, 0.7, 0.01, 0, 6.0, 1.05, 0.0, 0.0, -1)

if(TIMER[szUserName2] <= 8)
{
set_hudmessage(255, 255, 0, 0.7, 0.01, 0, 6.0, 1.05, 0.0, 0.0, -1)
}
if (TIMER[szUserName2] <= 4)
{
set_hudmessage(0, 255, 0, 0.7, 0.01, 0, 6.0, 1.05, 0.0, 0.0, -1)
}

show_hudmessage(0, " ")
show_hudmessage(szUserName2, "%L", szUserName2, "MM_LANG_MOTD_SEC", TIMER[szUserName2])

return PLUGIN_HANDLED
}

/////////////////////////////////////////////////////////////////////
// ПОДСКАЗКА В ЧАТЕ
/////////////////////////////////////////////////////////////////////

public f_ChatAnonse(id)
{
ColorChat (id, RED, "* %L^x04 %s%s%s%s%s%s%s%s%s", id, "MM_LANG_CHAT_ANONCE", a_szChatMessage[2], a_szChatMessage[3], a_szChatMessage[4], a_szChatMessage[5], a_szChatMessage[6], a_szChatMessage[7], a_szChatMessage[8], a_szChatMessage[9], a_szChatMessage[10])
}

///////////////////////////////
// !!!ЕФФЕКТЫ!!!
///////////////////////////////

#define EFFECT_TASK_ID 666

// Альфа-прозрачность затемненного экрана
// От 0 (прозрачный) до 255 (непрозрачный)
#define EFFECT_SCREEN_ALPHA 220

// Время затухания экрана
// в секундах
#define EFFECT_SCREEN_FADE 2

// Цвет экрана затухания в формате RGB
#define EFFECT_SCREEN_R 0
#define EFFECT_SCREEN_G 0
#define EFFECT_SCREEN_B 0

// Амплитуда потряхивания экрана
#define EFFECT_SHAKE_AMP 10

// Время в секундах потряхивания экрана
// От 0 до 10
#define EFFECT_SHAKE_DUR 10

// Частота потряхивания экрана
#define EFFECT_SHAKE_FREC 10

///////////////////////////////

public f_EffectsStart(szUserName2)
{
set_task(2.0, "f_Effects", szUserName2 + EFFECT_TASK_ID, "", 0, "b")

if(is_user_connected(szUserName2))
{
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, szUserName2)
write_short((1<<12) * EFFECT_SCREEN_FADE) // Время затухания
write_short(1<<12) // Продолжительность показа
write_short(0x0001) // Тип затухания
write_byte(EFFECT_SCREEN_R) // Red
write_byte(EFFECT_SCREEN_G) // Green
write_byte(EFFECT_SCREEN_B) // Blue
write_byte(EFFECT_SCREEN_ALPHA) // Альфа-прозрачность
message_end()


message_begin(MSG_ONE, get_user_msgid("ScreenShake"), _, szUserName2)
write_short((1<<12) * EFFECT_SHAKE_AMP) // Амплитуда
write_short((1<<12) * EFFECT_SHAKE_DUR) // Продолжительность
write_short((1<<12) * EFFECT_SHAKE_FREC) // Частота
message_end()
}
}

public f_Effects(UID)
{
new szUserName2 = UID - EFFECT_TASK_ID

if(is_user_connected(szUserName2))
{
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, szUserName2)
write_short(1<<0) // Время затухания
write_short(1<<0) // Продолжительность показа
write_short(0x0004) // Тип затухания
write_byte(EFFECT_SCREEN_R) // Red
write_byte(EFFECT_SCREEN_G) // Green
write_byte(EFFECT_SCREEN_B) // Blue
write_byte(EFFECT_SCREEN_ALPHA) // Альфа-прозрачность
message_end()


message_begin(MSG_ONE, get_user_msgid("ScreenShake"), _, szUserName2)
write_short((1<<12) * EFFECT_SHAKE_AMP) // Амплитуда
write_short((1<<12) * EFFECT_SHAKE_DUR) // Продолжительность
write_short((1<<12) * EFFECT_SHAKE_FREC) // Частота
message_end()

}
}

public f_EffectsEnd(szUserName2)
{
remove_task(szUserName2 + EFFECT_TASK_ID)

if(is_user_connected(szUserName2))
{
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, szUserName2)
write_short((1<<12) * EFFECT_SCREEN_FADE) // Время затухания
write_short((1<<12) * 1) // Продолжительность показа
write_short(0x0002) // Тип затухания
write_byte(EFFECT_SCREEN_R) // Red
write_byte(EFFECT_SCREEN_G) // Green
write_byte(EFFECT_SCREEN_B) // Blue
write_byte(EFFECT_SCREEN_ALPHA) // Альфа-прозрачность
message_end()
}
}

public client_disconnect(id)
{
remove_task(id + EFFECT_TASK_ID)
}

/////////////////////////////////////////////////////////////////////
// МЕНЮ
/////////////////////////////////////////////////////////////////////

new MM_LANG_TMP[MSG_MAXSIZE], szPlayerName[32]

// Формируем меню со списком игроков
public player_menu(id)
{
// Формируем заголовок меню
formatex(MM_LANG_TMP, MSG_MAXSIZE - 1, "\r%L", id, "MM_LANG_MENU1_TITLE")
// Создаем меню
new menu = menu_create (MM_LANG_TMP, "player_menu_handler")

// Объявляем новые переменные
new Players[32], pNum, tempid
new szName[32], szTempid[10]
get_players(Players, pNum)

// Строим меню с именами игроков
for ( new i; i<pNum; i++ )
{
tempid = Players[i]

get_user_name(tempid, szName, 31)
num_to_str (tempid, szTempid, 9)

// Добавляем новый пункт меню
menu_additem (menu, szName, szTempid, ACCESS)
}

// Добавляем пустой пункт меню
menu_addblank (menu, 1)

// Изменяем настройку, кол-во пунктов меню на 1 страницу меню.
// Устанавливаем 7 пунктов меню
menu_setprop (menu, MPROP_PERPAGE, 7)

// Переименовываем стандартный пункт меню BACK
formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MENU_BACK")
menu_setprop (menu, MPROP_BACKNAME, MM_LANG_TMP)

// Переименовываем стандартный пункт меню NEXT
formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MENU_NEXT")
menu_setprop (menu, MPROP_NEXTNAME, MM_LANG_TMP)

// Переименовываем стандартный пункт меню EXIT
formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MENU_EXIT")
menu_setprop (menu, MPROP_EXITNAME, MM_LANG_TMP)

// Отображаем меню
menu_display (id, menu, 0)

return PLUGIN_HANDLED
}

// Получение индитификаторов игрков
public player_menu_handler (id, menu, item)
{
if (item == MENU_EXIT)
{
// Прячем меню
menu_destroy (menu)

return PLUGIN_HANDLED
}

new Data[6], iName[MSG_MINSIZE]
new access, callback, tempid

// Получаем информацию по нажатию на один из пунктов меню
menu_item_getinfo (menu, item, access, Data, 5, iName, MSG_MINSIZE - 1, callback)

// Получаем ID игрока
tempid = str_to_num (Data)
get_user_name(tempid, szPlayerName, 31)

if (is_user_connected(tempid))
{
// Переход к следующему меню
choice_motd_menu(id)
}

// Прячем меню
menu_destroy (menu)

return PLUGIN_HANDLED
}

// Меню выбора MOTD
public choice_motd_menu(id)
{

// Формируем заголовок меню
formatex(MM_LANG_TMP, MSG_MAXSIZE - 1, "\r%L", id, "MM_LANG_MENU2_TITLE")
// Создаем меню
new menu = menu_create (MM_LANG_TMP, "choice_motd_menu_handler")

// Формируем список всех MOTD
new szMotdShow3[MSG_MINSIZE], g_szMotdShow3[MAX_FILES + 1], szTempid[5]

for(new i = 1; i <= MAX_FILES; i++)
{
if(equali(a_szFilesName[i], "") || equali(a_szFilesName[i], " "))
{
continue
}

// Парсим настройку времени показа MOTD
formatex(szMotdShow3, MSG_MINSIZE - 1, "mm_mastamotds_file%d_show", i)
g_szMotdShow3[i] = get_cvar_num(szMotdShow3)

// Меняем цвет пунктов меню в зависимости от времени показа
if(g_szMotdShow3[i] < 2)
{
formatex(MM_LANG_TMP, MSG_MAXSIZE - 1, "\w%s", a_szFilesName[i])
}
if(2 < g_szMotdShow3[i] <= 10)
{
formatex(MM_LANG_TMP, MSG_MAXSIZE - 1, "\y%s (%L)", a_szFilesName[i], id, "MM_LANG_MOTD_SEC", g_szMotdShow3[i])
}
if(g_szMotdShow3[i] > 10)
{
formatex(MM_LANG_TMP, MSG_MAXSIZE - 1, "\r%s (%L)", a_szFilesName[i], id, "MM_LANG_MOTD_SEC", g_szMotdShow3[i])
}

szTempid[0] = i

// Добавляем пункт меню
menu_additem (menu, MM_LANG_TMP, szTempid, ACCESS)
}

menu_setprop (menu, MPROP_EXIT, MEXIT_ALL)

// Переименовываем стандартный пункт меню BACK
formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MENU_BACK")
menu_setprop (menu, MPROP_BACKNAME, MM_LANG_TMP)

// Переименовываем стандартный пункт меню NEXT
formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MENU_NEXT")
menu_setprop (menu, MPROP_NEXTNAME, MM_LANG_TMP)

// Переименовываем стандартный пункт меню EXIT
formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MENU_BACK_LIST")
menu_setprop (menu, MPROP_EXITNAME, MM_LANG_TMP)

// Отображаем меню
menu_display(id, menu, 0)
}
public choice_motd_menu_handler (id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy (menu)

if (is_user_connected(id))
{
player_menu (id)
}

return PLUGIN_HANDLED
}

new data[6], iName[MSG_MINSIZE];
new access, callback;

// Получаем информацию от нажатого пункта меню
menu_item_getinfo (menu, item, access, data,5, iName, MSG_MINSIZE - 1, callback);

// Показываем MOTD
server_cmd ("mm_showmotd ^"%s^" ^"%s^"", szPlayerName, iName[2])

// Выходим из меню
menu_destroy (menu)

// Возвращаемся назад к первому меню
player_menu (id)

return PLUGIN_HANDLED;
}

/////////////////////////////////////////////////////////////////////
// Ведение логов
/////////////////////////////////////////////////////////////////////

// Объявляем новые переменные
new szLogDir[256]
new szTmpLogMsg[256]
new szLogMsg[1024]

mm_log(type, text[], any:...)
{
// Проверяем настройку, разрешающая логгирование
if(get_cvar_num("mm_mastamotds_log"))
{
if(type)
{
// Объявляем новые переменные
new szDate[32], szTime[32]
// Формируем Дату и Время
format_time(szDate, sizeof(szDate) - 1, "%d-%m-%Y")
format_time(szTime, sizeof(szTime) - 1, "%H:%M:%S")

// Назначаем в какой файл писать лог
get_localinfo("amxx_logs", szLogDir, sizeof(szLogDir) - 1)
formatex(szLogDir, sizeof(szLogDir) - 1, "%s/mastamotds(%s).txt", szLogDir, szDate)

// Формируем в единую строку текст и параметры
format_args(szTmpLogMsg, sizeof(szTmpLogMsg) - 1, 1)

// Формируем заново дату
format_time(szDate, sizeof(szDate) - 1, "%d/%m/%Y")

// В зависимости от типа формируем тип сообщения
switch(type)
{
case 1:
{
formatex(szLogMsg, sizeof(szLogMsg) - 1, "Дата: %s | Время: %s | [*] [СООБЩЕНИЕ]: %s", szDate, szTime, szTmpLogMsg)
}
case 2:
{
formatex(szLogMsg, sizeof(szLogMsg) - 1, "Дата: %s | Время: %s | [?] [НЕПОЛАДКА]: %s", szDate, szTime, szTmpLogMsg)
}
case 3:
{
formatex(szLogMsg, sizeof(szLogMsg) - 1, "Дата: %s | Время: %s | [!] [КРИТИЧЕСКАЯ ОШИБКА]: %s", szDate, szTime, szTmpLogMsg)
}
}

// Формируем первую строку в логе
formatex(szTmpLogMsg, MSG_MAXSIZE - 1, "Файл сгенерирован MastaMOTD's %s. Последнее обновление лога %s %s", VERSION, szDate, szTime)

// Записываем в лог первую строку
write_file(szLogDir, szTmpLogMsg, 0)

// Записываем в лог сообщение
write_file(szLogDir, "---------------------------------------------------", -1)
write_file(szLogDir, szLogMsg, -1)
}
}

// Это здесь не обязательно, но без этой записи возникает ошибка
if (text[0] == 0)
{
return
}
}


вроде вот отсюда начинается думаю: 558 // Проверяем или пользователь уже смотрит MOTD

Отредактировал: CH0CAPIC, - 14.5.2014, 19:45
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: