Request Advanced (Система тикетов к администраторам)

diller110

Добрая душа
Сообщения
353
Реакции
278
Здравствуйте, мне очень понравился плагин Request!, но после обновления, подключения к нему базы данных автором, он стал громоздким, очень баганутым. Да и мне захотелось немного поменять его структуру.
attachment.php

Вот отличия от оригинальной версии:
Заявки записываются в key values файл.
Меню пользователя, с добавлением новой заявки, прочтением своей последней или её удалением.
Меню администратора, с просмотром всех заявок, установлением статуса просмотра.

Отличительной особенностью является присваивание каждой заявке статуса: 1) Просмотрено 2) Не просмотрено 3) Принято 4) Отказано.
Игрок сможет посмотреть статус своих заявок, и я считаю это крутым)

Спасибо R1KO и AlmazOn за помощь!

Версия от 23:00 9.03 - Добавление заявок теперь полностью рабочее.
Версия от 02:00 10.03 - Совместим только с 1.7.
Версия от 05:00 10.03 - 0.4 Первые попытки запилить меню управления заявками.
Версия от 05:00 16.03 - Полностью рабочая версия, меню администратора тоже есть, но только с просмотром заявок.
 

Вложения

  • Requests.smx
    9.5 КБ · Просмотры: 13
  • Requests.sp
    11.1 КБ · Просмотры: 24
  • request.jpg
    request.jpg
    12.7 КБ · Просмотры: 466
Последнее редактирование:

diller110

Добрая душа
Сообщения
353
Реакции
278
Как можно оптимизировать поиск в блоках элемента совпадающего с ником игрока. (Функция выдачи последней заявки)

Заменил while на if
 

Вложения

  • lastrequest.sp
    729 байт · Просмотры: 5
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
diller110, думаю, получше будет где-то так:
PHP:
public LookLastRequest(any:client){
    KvRewind(RequestKV);
    decl String:Msg[300], String:nick[MAX_NAME_LENGTH];
	GetClientName(client, nick, MAX_NAME_LENGTH);
    for(new temp=ramount; temp>1; temp--){
        IntToString(temp, Msg, 5);
        KvJumpToKey(RequestKV, Msg, false);
        KvGetString(RequestKV, "nickname", Msg, MAX_NAME_LENGTH);
        if(strcmp(nick, Msg, false) == 0) break;
    }
    KvRewind(RequestKV);
    IntToString(temp, Msg, 5);
    KvJumpToKey(RequestKV, Msg, false);
    KvGetString(RequestKV, "request", Msg, 300);
    PrintToChat(client, "Ваша последняя заявка: %s", Msg);
    KvRewind(RequestKV);
}
С Keyvalues мало работал, не уверен, чтобы здесь что-то советовать.
Ещё, наверное, можно так:
PHP:
public LookLastRequest(any:client){
    KvRewind(RequestKV);
    decl String:Msg[300], String:nick[MAX_NAME_LENGTH];
    GetClientName(client, nick, MAX_NAME_LENGTH);
    for(new temp=ramount; temp>1; temp--){
        IntToString(temp, Msg, 5);
        KvJumpToKey(RequestKV, Msg, false);
        KvGetString(RequestKV, "nickname", Msg, MAX_NAME_LENGTH);
        if(strcmp(nick, Msg, false) == 0)
		{
			KvGetString(RequestKV, "request", Msg, 300);
			PrintToChat(client, "Ваша последняя заявка: %s", Msg);
			KvRewind(RequestKV);
			return;
		}
    }
    KvRewind(RequestKV);
    IntToString(temp, Msg, 5);
    KvJumpToKey(RequestKV, Msg, false);
    KvGetString(RequestKV, "request", Msg, 300);
    PrintToChat(client, "Ваша последняя заявка: %s", Msg);
    KvRewind(RequestKV);
}
Или же, потратив ещё 5 байт памяти (локально):
PHP:
public LookLastRequest(any:client){
    KvRewind(RequestKV);
    decl String:Msg[300], String:nick[MAX_NAME_LENGTH], String:strtemp[5];
	GetClientName(client, nick, MAX_NAME_LENGTH);
    for(new temp=ramount; temp>1; temp--){
        IntToString(temp, strtemp, 5);
        KvJumpToKey(RequestKV, strtemp, false);
        KvGetString(RequestKV, "nickname", Msg, MAX_NAME_LENGTH);
        if(strcmp(nick, Msg, false) == 0) break;
    }
	KvGetString(RequestKV, "request", Msg, 300);
    PrintToChat(client, "Ваша последняя заявка: %s", Msg);
    KvRewind(RequestKV);
}
Однако, для 3 варианта ramount обязательно должна быть больше 1.
А вообще, система кажется немного странной)
 
Последнее редактирование:

diller110

Добрая душа
Сообщения
353
Реакции
278
Не успел понять первый вариант, появился второй, а теперь уже 3) Во втором забыл убрать кусок кода, или я недопонял?

Система согласен не идеальная, но надеюсь работа для пользователя будет приятной.
 

Just-Skill

Участник
Сообщения
85
Реакции
11
Здравствуйте, мне очень понравился плагин Request!, но после обновления, подключения к нему базы данных автором, он стал громоздким, очень баганутым. Да и мне захотелось немного поменять его структуру.

Вот отличия от оригинальной версии:
Заявки записываются в key values файл.
Меню пользователя, с добавлением новой заявки, прочтением своей последней или её удалением.
Меню администратора, с просмотром всех заявок, установлением статуса просмотра.

Отличительной особенностью является присваивание каждой заявке статуса: 1) Просмотрено 2) Не просмотрено 3) Принято 4) Отказано.
Игрок сможет посмотреть статус своих заявок, и я считаю это крутым)

Сделал пока 1 пункт меню, добавление заявки.
Кинул в этот раздел, разумеется, потому что не работает. Прошу помочь.
Спасибо R1KO пофиксил важный баг, могу продолжать писать.

Версия от 23:00 9.03 - Добавление заявок теперь полностью рабочее.


Спасибо! Как раз хотел попросить этот плагин!
 

diller110

Добрая душа
Сообщения
353
Реакции
278
AlmazON, Нет я уверен, что что-то не так!)
if(strcmp(nick, Msg, false) == 0)
{
KvGetString(RequestKV, "request", Msg, 300);
PrintToChat(client, "Ваша последняя заявка: %s", Msg);
KvRewind(RequestKV);
return;
}
}
KvRewind(RequestKV);
IntToString(temp, Msg, 5);
KvJumpToKey(RequestKV, Msg, false);
KvGetString(RequestKV, "request", Msg, 300);
PrintToChat(client, "Ваша последняя заявка: %s", Msg);
KvRewind(RequestKV);
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Что? return; оборвёт цикл и выйдет из функции, дальше него код не будет прочтён, если ники совпадут. Если не совпадают - код будет прочитан до самого конца (а те 4 "лишние" строчки тогда - нет).
 

diller110

Добрая душа
Сообщения
353
Реакции
278
AlmazON, Все. Понял)
В этом варианте можно при несовпадении написать "Вы не оставляли заявок"
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
В этом варианте можно при несовпадении написать "Вы не оставляли заявок"
Тем более! Просто сообщение в чат и всё:
PHP:
PrintToChat(client, "Вы не оставляли заявок");
KvRewind(RequestKV);
 

diller110

Добрая душа
Сообщения
353
Реакции
278
PHP:
public DeleteOwnRequest(any:client)
{
    KvRewind(RequestKV);
    decl String:Msg[300], String:nick[MAX_NAME_LENGTH];
    GetClientName(client, nick, MAX_NAME_LENGTH);
    for(new temp=ramount; temp>1; temp--){
        IntToString(temp, Msg, 5);
        KvJumpToKey(RequestKV, Msg, false);
        KvGetString(RequestKV, "nickname", Msg, MAX_NAME_LENGTH);
        if(strcmp(nick, Msg, false) == 0) {
            KvDeleteThis(RequestKV);
            PrintToChat(client, "\x06[Request] \x01Ваша последняя заявка удалена.");
            KvRewind(RequestKV);
            return;
        }
    }
    PrintToChat(client, "\x06[Request] \x01Вы не оставляли заявок, или они были удалены.");
    KvRewind(RequestKV);
}
KvDeleteThis(RequestKV); уместна при удалении заявки? например вот такой: Оффтоп


Upd: Решил использовать переходный синтаксис 1.7, забавная странность, Handle Menu, а затем и все его использующие компоненты начали жаловаться:
Requests.sp(64) : error 174: symbol 'Menu' is a type and cannot be used as a value
Ясно что это из-за новой системы тэгов, но на страницах про новую версию слова Menu, вообще не встречаются, что немного смутило.

Добавлено через 15 часов 32 минуты
Все обновил плагин до полностью рабочего состояния. Админам добавляется пункт "Управление заявками", где можно просмотреть и установить статус на данную заявку.

Из возможных ошибок:
1.Не знаю как поведет себя key values если в заявке будут кавычки.
2.Пункты статистики неактивны, мне норм, если кому-нибудь понадобится сделаю.
3.В админ меню нет пункта удалить заявку. Мне норм, если кому-нибудь понадобится сделаю.
4.Возможно не плохо было бы добавить систему сортировки keyvalues при выключении плагина, все id заявок отсчитывать от 0,1,2... Сейчас же при 100 заявках, все алгоритмы будут выполнятся ровно 100 раз, даже если половина заявок удалена.
 
Последнее редактирование:

Похожие темы

Сверху Снизу