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

Тема в разделе "Программирование / Скриптинг", создана пользователем diller110, 9 мар 2015.

  1. diller110

    diller110

    Сообщения:
    138
    Симпатии:
    48
    Здравствуйте, мне очень понравился плагин Request!, но после обновления, подключения к нему базы данных автором, он стал громоздким, очень баганутым. Да и мне захотелось немного поменять его структуру.
    [​IMG]
    Вот отличия от оригинальной версии:
    Заявки записываются в 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 КБ
      Просмотров:
      0
    • Requests.sp
      Размер файла:
      11,1 КБ
      Просмотров:
      6
    • request.jpg
      request.jpg
      Размер файла:
      14,7 КБ
      Просмотров:
      370
    Последнее редактирование: 10 мар 2015
    Just-Skill нравится это.
  2. diller110

    diller110

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

    Заменил while на if
     

    Вложения:

    • lastrequest.sp
      Размер файла:
      729 байт
      Просмотров:
      3
    Последнее редактирование: 9 мар 2015
    Just-Skill нравится это.
  3. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.539
    Симпатии:
    1.984
    diller110, думаю, получше будет где-то так:
    PHP:
    public LookLastRequest(any:client){
        
    KvRewind(RequestKV);
        
    decl String:Msg[300], String:nick[MAX_NAME_LENGTH];
        
    GetClientName(clientnickMAX_NAME_LENGTH);
        for(new 
    temp=ramounttemp>1temp--){
            
    IntToString(tempMsg5);
            
    KvJumpToKey(RequestKVMsgfalse);
            
    KvGetString(RequestKV"nickname"MsgMAX_NAME_LENGTH);
            if(
    strcmp(nickMsgfalse) == 0) break;
        }
        
    KvRewind(RequestKV);
        
    IntToString(tempMsg5);
        
    KvJumpToKey(RequestKVMsgfalse);
        
    KvGetString(RequestKV"request"Msg300);
        
    PrintToChat(client"Ваша последняя заявка: %s"Msg);
        
    KvRewind(RequestKV);
    }
    С Keyvalues мало работал, не уверен, чтобы здесь что-то советовать.
    Ещё, наверное, можно так:
    PHP:
    public LookLastRequest(any:client){
        
    KvRewind(RequestKV);
        
    decl String:Msg[300], String:nick[MAX_NAME_LENGTH];
        
    GetClientName(clientnickMAX_NAME_LENGTH);
        for(new 
    temp=ramounttemp>1temp--){
            
    IntToString(tempMsg5);
            
    KvJumpToKey(RequestKVMsgfalse);
            
    KvGetString(RequestKV"nickname"MsgMAX_NAME_LENGTH);
            if(
    strcmp(nickMsgfalse) == 0)
            {
                
    KvGetString(RequestKV"request"Msg300);
                
    PrintToChat(client"Ваша последняя заявка: %s"Msg);
                
    KvRewind(RequestKV);
                return;
            }
        }
        
    KvRewind(RequestKV);
        
    IntToString(tempMsg5);
        
    KvJumpToKey(RequestKVMsgfalse);
        
    KvGetString(RequestKV"request"Msg300);
        
    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(clientnickMAX_NAME_LENGTH);
        for(new 
    temp=ramounttemp>1temp--){
            
    IntToString(tempstrtemp5);
            
    KvJumpToKey(RequestKVstrtempfalse);
            
    KvGetString(RequestKV"nickname"MsgMAX_NAME_LENGTH);
            if(
    strcmp(nickMsgfalse) == 0) break;
        }
        
    KvGetString(RequestKV"request"Msg300);
        
    PrintToChat(client"Ваша последняя заявка: %s"Msg);
        
    KvRewind(RequestKV);
    }
    Однако, для 3 варианта ramount обязательно должна быть больше 1.
    А вообще, система кажется немного странной)
     
    Последнее редактирование: 10 мар 2015
    diller110 нравится это.
  4. diller110

    diller110

    Сообщения:
    138
    Симпатии:
    48
    Не успел понять первый вариант, появился второй, а теперь уже 3) Во втором забыл убрать кусок кода, или я недопонял?

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

    Just-Skill

    Сообщения:
    85
    Симпатии:
    6

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

    diller110

    Сообщения:
    138
    Симпатии:
    48
    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);
    }
     
  7. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.539
    Симпатии:
    1.984
    Что? return; оборвёт цикл и выйдет из функции, дальше него код не будет прочтён, если ники совпадут. Если не совпадают - код будет прочитан до самого конца (а те 4 "лишние" строчки тогда - нет).
     
    diller110 нравится это.
  8. diller110

    diller110

    Сообщения:
    138
    Симпатии:
    48
    AlmazON, Все. Понял)
    В этом варианте можно при несовпадении написать "Вы не оставляли заявок"
     
    Just-Skill нравится это.
  9. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.539
    Симпатии:
    1.984
    Тем более! Просто сообщение в чат и всё:
    PHP:
    PrintToChat(client"Вы не оставляли заявок");
    KvRewind(RequestKV);
     
    diller110 нравится это.
  10. diller110

    diller110

    Сообщения:
    138
    Симпатии:
    48
    PHP:
    public DeleteOwnRequest(any:client)
    {
        
    KvRewind(RequestKV);
        
    decl String:Msg[300], String:nick[MAX_NAME_LENGTH];
        
    GetClientName(clientnickMAX_NAME_LENGTH);
        for(new 
    temp=ramounttemp>1temp--){
            
    IntToString(tempMsg5);
            
    KvJumpToKey(RequestKVMsgfalse);
            
    KvGetString(RequestKV"nickname"MsgMAX_NAME_LENGTH);
            if(
    strcmp(nickMsgfalse) == 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 раз, даже если половина заявок удалена.
     
    Последнее редактирование: 10 мар 2015
    Just-Skill нравится это.