- Регистрация
- 1 Май 2014
- Сообщения
- 611
- Лучшие ответы
- 1
- Репутация
- 205
Описание:
"/bug" - работает как на вывод диалога так и принимает текст без диалога, из под команды.
"/buglist" - работает страницами, их количество не ограничено.
Столбец текст в "/buglist" в случаи если символов больше 30 сокращается, просмотреть полностью можно выбрав пункт.
Присутствует возможность удалить репорт выбрав его и нажав "Удалить".
Присутствует сохранение, а так же загрузка репортов из бд.
Скриншоты:
Ко всем макросам:
PHP:
#define MAX_BUGS 5000
Ко всем массивам:
PHP:
new gBugDataName[MAX_BUGS][25];
new gBugDataText[MAX_BUGS][128];
new gBugDataDate[MAX_BUGS][20];
new playerBugListPage[MAX_PLAYERS];
new playerBugListItem[MAX_PLAYERS char];
new playerBugListData[MAX_PLAYERS][15];
Ко всем командам:
PHP:
CMD:bug(playerid, params[])
{
if(!params[0]) ShowPlayerDialog(playerid, 7771, DIALOG_STYLE_INPUT, "Баг репорт", "Опишите баг кратко и ясно, строка ограничина 128 символами, постарайтесь вместить:", "Принять", "Закрыть");
else
{
if(strlen(params) < 10 || strlen(params) > 125) SendClientMessage(playerid, -1, "Описание должно содержать не менее 10 символов, и не более 125.");
else
{
new id = -1;
for(new i; i < MAX_BUGS; i++) if(!gBugDataName[i][0]) { id = i; break; }
if(id == -1) SendClientMessage(playerid, -1, "Баг репорт переполнен.");
else
{
new year, month, day, hour, minute, second, string[260];
getdate(year, month, day);
gettime(hour, minute, second);
GetPlayerName(playerid, gBugDataName[id], 25);
strmid(gBugDataText[id], params, 0, strlen(params), 128);
format(gBugDataDate[id], 20, "%i/%i/%i %i:%i:%i", year, month, day, hour, minute, second);
format(string, sizeof(string), "INSERT INTO `bugs` (`id`, `name`, `text`, `date`) VALUES ('%i', '%s', '%s', '%s')", id, gBugDataName[id], gBugDataText[id], gBugDataDate[id]);
mysql_pquery(dbConnect, string);
SendClientMessage(playerid, -1, "Благодарим вас за найденный баг.");
}
}
}
return 1;
}
CMD:buglist(playerid, params[])
{
playerBugListPage[playerid] = 1;
ShowBugList(playerid);
return 1;
}
Ко всем стокам:
PHP:
stock ShowBugList(playerid)
{
new text[128], header[32], string[1400] = "№\tИгрок\tДата\tТекст\n", count, next, id, page = playerBugListPage[playerid];
for(new i; i < MAX_BUGS; i++) if(gBugDataName[i][0])
{
if(count >= (page * 15) && count < (page * 15) + 15) next++;
if(count >= (page - 1) * 15 && count < ((page - 1) * 15) + 15)
{
strmid(text, gBugDataText[i], 0, strlen(gBugDataText[i]), 128);
if(strlen(text) > 30)
{
strdel(text, 28, strlen(text));
strcat(text, "...");
}
playerBugListData[playerid][id++] = i;
format(string, sizeof(string), "%s%i\t%s\t%s\t%s\n", string, (i + 1), gBugDataName[i], gBugDataDate[i], text);
}
count++;
}
if(next) strcat(string, "Следующая страница\n");
if(page > 1) strcat(string, "Предыдущая страница");
format(header, sizeof(header), "Баг репорт, страница: %i", page);
ShowPlayerDialog(playerid, 7772, DIALOG_STYLE_TABLIST_HEADERS, header, string, "Выбрать", "Закрыть");
}
В public OnDialogResponse, ко всем case:
PHP:
case 7771: if(response)
{
if(strlen(inputtext) < 10 || strlen(inputtext) > 125)
{
ShowPlayerDialog(playerid, 7771, DIALOG_STYLE_INPUT, "Баг репорт", "Опишите баг кратко и ясно, строка ограничина 128 символами, постарайтесь вместить:", "Принять", "Закрыть");
SendClientMessage(playerid, -1, "Описание должно содержать не менее 10 символов, и не более 125.");
}
else
{
new id = -1;
for(new i; i < MAX_BUGS; i++) if(!gBugDataName[i][0]) { id = i; break; }
if(id == -1) SendClientMessage(playerid, -1, "Баг репорт переполнен.");
else
{
new year, month, day, hour, minute, second, string[260];
getdate(year, month, day);
gettime(hour, minute, second);
GetPlayerName(playerid, gBugDataName[id], 25);
strmid(gBugDataText[id], inputtext, 0, strlen(inputtext), 128);
format(gBugDataDate[id], 20, "%i/%i/%i %i:%i:%i", year, month, day, hour, minute, second);
format(string, sizeof(string), "INSERT INTO `bugs` (`id`, `name`, `text`, `date`) VALUES ('%i', '%s', '%s', '%s')", id, gBugDataName[id], gBugDataText[id], gBugDataDate[id]);
mysql_pquery(dbConnect, string);
SendClientMessage(playerid, -1, "Благодарим вас за найденный баг.");
}
}
}
case 7772:
{
if(!response) playerBugListPage[playerid] = 0;
else
{
if(!strcmp(inputtext, "Следующая страница"))
{
playerBugListPage[playerid]++;
ShowBugList(playerid);
}
else if(!strcmp(inputtext, "Предыдущая страница"))
{
playerBugListPage[playerid]--;
ShowBugList(playerid);
}
else
{
new list = playerBugListData[playerid][listitem];
if(!gBugDataName[list][0]) ShowBugList(playerid);
else
{
new header[16], string[175];
format(header, sizeof(header), "№%i", list);
format(string, sizeof(string), "Отправил: %s\nДата: %s\nОписание: %s", gBugDataName[list], gBugDataDate[list], gBugDataText[list]);
playerBugListItem{playerid} = listitem;
ShowPlayerDialog(playerid, 7773, DIALOG_STYLE_MSGBOX, header, string, "Удалить", "Назад");
}
}
}
}
case 7773:
{
if(!response) ShowBugList(playerid);
else
{
new list = playerBugListData[playerid][playerBugListItem{playerid}];
if(!gBugDataName[list][0]) ShowBugList(playerid);
else
{
gBugDataName[list] = "";
gBugDataText[list] = "";
gBugDataDate[list] = "";
new string[46];
format(string, sizeof(string), "DELETE FROM `bugs` WHERE `id` = '%i'", list);
mysql_pquery(dbConnect, string);
format(string, sizeof(string), "Репорт №%i успешно удален.", (list + 1));
SendClientMessage(playerid, -1, string);
#if defined foreach
foreach(Player, i)
#else
for(new i = GetPlayerPoolSize(); i >= 0; i--) if(IsPlayerConnected(i))
#endif
{
if(playerBugListPage[i]) ShowBugList(i);
}
}
}
}
В public OnGameModeInit, для MySql R39.6:
PHP:
new Cache:cache = mysql_query(dbConnect, "SELECT * FROM `bugs`"), rows = cache_num_rows(dbConnect);
if(rows)
{
for(new i, id; i < rows; i++)
{
id = cache_get_field_content_int(i, "id", dbConnect);
cache_get_field_content(i, "name", gBugDataName[id], dbConnect, 25);
cache_get_field_content(i, "text", gBugDataText[id], dbConnect, 128);
cache_get_field_content(i, "date", gBugDataDate[id], dbConnect, 20);
}
}
cache_delete(cache);
В public OnGameModeInit, для MySql R41.4:
PHP:
new Cache:cache = mysql_query(dbConnect, "SELECT * FROM `bugs`"), rows;
cache_get_row_count(rows);
if(rows)
{
for(new i, id; i < rows; i++)
{
cache_get_value_name_int(i, "id", id);
cache_get_value_name(i, "name", gBugDataName[id], 25);
cache_get_value_name(i, "text", gBugDataText[id], 128);
cache_get_value_name(i, "date", gBugDataDate[id], 20);
}
}
cache_delete(cache);
Ну и самом собой не забываем сменить dbConnect на свою переменную хранящую подключение.
В базу данных импортируем таблицу:
PHP:
CREATE TABLE IF NOT EXISTS `bugs` (
`id` int(11) NOT NULL,
`name` varchar(25) NOT NULL,
`text` varchar(128) NOT NULL,
`date` varchar(20) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Если возникли проблемы с кодировкой, в public OnGameModeInit:
PHP:
mysql_query(dbConnect, "SET NAMES cp1251", false);
mysql_set_charset("cp1251");
Автор: Richie56
Последнее редактирование: