Ядро плагина [Achievements] Core 1.6

Достижения для игроков на сервер.

  1. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    352
    Симпатии:
    845
    Пользователь Reiko1231 разместил новый ресурс:

    [Achievements] Core - Достижения для игроков на сервер.

    Узнать больше об этом ресурсе...
     
    Wise Hand, pracc, komashchenko и 7 другим нравится это.
  2. AlmazON

    AlmazON Не путать с самим yand3xmail

    Сообщения:
    5.152
    Симпатии:
    2.505
    Ссылка на "стандартных событий сурсмода" не действительна.
     
  3. skolobes

    skolobes Шкипер

    Сообщения:
    618
    Симпатии:
    99
    @Reiko1231, а можно ли такое достижение реализовать: 100 раз прошел карту первый?
     
  4. Napas

    Napas

    Сообщения:
    669
    Симпатии:
    208
    Думаю взять события с плагина подарка шопа можно взять, но не уверен.
     
  5. skolobes

    skolobes Шкипер

    Сообщения:
    618
    Симпатии:
    99
    Чет еррорит Оффтоп
     
  6. 666pro

    666pro

    Сообщения:
    175
    Симпатии:
    17
    Плагин классный , но я думаю
    Лучше было бы объединить файл перерода и конфиг
    не удобно туда сюда лазить
    --- Добавлено позже ---
    Возможно что-то не так написал , но когда убиваю с 1 раза ножа , достижение сразу засчитывается.


    "Knife 2"
    {
    "event" "player_hurt"
    "executor" "attacker"

    "condition" "weapon = knife"
    "count" "4"

    "reward" "sm_givecredits #{uid} 10"
    }
     
    Последнее редактирование: 22 окт 2016
  7. xMaZax

    xMaZax Заблокирован

    Сообщения:
    666
    Симпатии:
    155
    Попробуй так.
    Код:
    "Knife 2"
    {
    "event" "player_death"
    "executor" "attacker"
    
    "condition" "weapon = knife"
    "count" "4"
    
    "reward" "sm_givecredits #{uid} 10"
    }
     
  8. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    352
    Симпатии:
    845
    @AlmazON, исправил, спасибо.
    @skolobes, как часто возникает ошибка? За всё время при тестировании была один раз, и причина не была до конца ясна.
    @666pro, файл перевода и конфиг объединить без потери мультиязычности нельзя.
     
  9. Крабос

    Крабос

    Сообщения:
    123
    Симпатии:
    51
    @Reiko1231, скорее всего еррорит так как не успевает создать Handle для игрока,который зашел и резко вышел
    --- Добавлено позже ---
    Кароче в LoadProgress(iClient)

    ClientLoaded[iClient] = true;

    public OnClientDisconnect(iClient)
    {
    if (ClientLoaded[iClient]) CloseHandle(g_hTrie_ClientProgress[iClient]);
    }
     
    Последнее редактирование: 22 окт 2016
    666FoX666, White Wolf и Reiko1231 нравится это.
  10. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    352
    Симпатии:
    845
    @Крабос, спасибо, упустил это из вида. Добавлю вас в раздел благодарностей, если вы не против.
    Эту ошибку можно исправить проще. В SourceMod некоторые форварды являются парными, т.е. если был вызван один, то второй будет гарантированно вызван. Для OnClientDisconnect парным является форвард OnClientConnected. Поэтому исправление будет выглядеть примерно так:
    PHP:
    public OnClientConnected(iClient)

        
    // allocate memory
        
    g_hTrie_ClientProgress[iClient] = CreateTrie();
    }

    public 
    OnClientPutInServer(iClient)
    {
        
    // load client data
        
    LoadClient(iClient);
    }

    public 
    OnClientDisconnect(iClient)
    {
        
    // free memory
        
    CloseHandle(g_hTrie_ClientProgress[iClient]);
    }
    Пока не буду заливать версию 1.5, подожду до вечера, может ещё какие ошибки пропустил.
     
    666FoX666, White Wolf и Крабос нравится это.
  11. AlmazON

    AlmazON Не путать с самим yand3xmail

    Сообщения:
    5.152
    Симпатии:
    2.505
    Так то оно так (вызовы парные), но больше согласен с @Крабос, т.к. вызовов уже больше нужного (3 вместо 2), да ещё столь ранний будет постоянно использоваться от каждого "чиха" любого игрока, чуть ли не забаненного, что ни есть хорошо. Лучше уж тогда:
    PHP:
    public OnClientPutInServer(iClient)
    {
        
    // allocate memory
        
    g_hTrie_ClientProgress[iClient] = CreateTrie();
        
    // load client data
        
    LoadClient(iClient);
    }

    public 
    OnClientDisconnect_Post(iClient)
    {
        
    // free memory
        
    if(g_hTrie_ClientProgress[iClient])
        {
            
    CloseHandle(g_hTrie_ClientProgress[iClient]);
            
    g_hTrie_ClientProgress[iClient] = INVALID_HANDLE;
        }
    }
    Проверка "в игре" не требуется, лучше OnClientDisconnect_Post.
    В итоге: ни дополнительная память не нужна, ни бесполезные (сверх ранние) вызовы.
     
    Последнее редактирование: 22 окт 2016
    White Wolf и Крабос нравится это.
  12. Kr1kuzya

    Kr1kuzya В поисках той самой Супермодератор

    Сообщения:
    4.629
    Симпатии:
    3.928
    Можно, только если служебные фразы плагина оставить в файле переводов и это будут натуральные костыли. Ничто не мешает получать язык клиента ручками, а потом по нему искать перевод в конфиге, и если такого нет, то выдать фразу на дефолт языке.
     
  13. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    352
    Симпатии:
    845
    @AlmazON, довольно спорное суждение. Все форварды, как я понимаю, SourceMod объединяет между собой, вызывая последовательно. А вот "сверх ранние вызовы" для забаненных или им подобных игроков довольно редкое событие, чтобы обращать на него внимание. Тем более, где лишняя нагрузка это всего лишь создание и удаление Trie. В то время как для нормального игрока вообще никакой лишней нагрузки нет, а соотношение "нормальный игрок - забаненный", как мне кажется, как минимум 100 к 1.
    @CrazyHackGUT, нет смысла делать костыли такого уровня ради удобства. Поэтому и нельзя сделать без потери мультиязычности. Оффтоп
     
  14. 666pro

    666pro

    Сообщения:
    175
    Симпатии:
    17
    L 10/22/2016 - 16:25:33: SourceMod error session started
    L 10/22/2016 - 16:25:33: Info (map "de_dust2_night") (file "errors_20161022.log")
    L 10/22/2016 - 16:25:33: [SM] Exception reported: Handle 65610cd9 is invalid (error 3)
    L 10/22/2016 - 16:25:33: [SM] Blaming: achievements.smx
    L 10/22/2016 - 16:25:33: [SM] Call stack trace:
    L 10/22/2016 - 16:25:33: [SM] [0] CloseHandle
    L 10/22/2016 - 16:25:33: [SM] [1] Line 172, achievements.sp::OnClientDisconnect
    L 10/22/2016 - 16:49:57: Error log file session closed.
     
  15. Drumanid

    Drumanid Дурак

    Сообщения:
    1.562
    Симпатии:
    1.078
     
    666pro нравится это.
  16. R1KO

    R1KO всё тлен Супермодератор

    Сообщения:
    7.807
    Симпатии:
    5.303
    @Reiko1231, есть пара мыслей

    PHP:
    decl String:sGameName[32];
        
    GetGameFolderName(SZF(sGameName));
        if ( 
    strcmp(sGameName"csgo") == ) {
    ->
    PHP:
    if(GetEngineVersion() == Engine_CSGO)
    PHP:
    decl String:sQuery[256];
        
    FormatEx(SZF(sQuery), "CREATE TABLE IF NOT EXISTS `clients` (`auth` VARCHAR(32), `userid` INTEGER, `last_connection` INTEGER, PRIMARY KEY(`userid`));");
        
    SQL_TQuery(g_hSQLdbSQLT_OnCreateTablessQuery);
       
        
    FormatEx(SZF(sQuery), "CREATE TABLE IF NOT EXISTS `progress` (`userid` INTEGER, `achivement` VARCHAR(64), `count` INTEGER, PRIMARY KEY(`userid`, `achivement`));");
        
    SQL_TQuery(g_hSQLdbSQLT_OnCreateTablessQuery);
    а зачем формат? нет же параметров для подстановки.

    может в
    PHP:
    GetClientAuthId(iClientAuthId_Steam2g_sAuth[iClient], sizeof(g_sAuth[]));
    Использовать AuthId_Engine ?

    плагин поддерживает только стандартные события.
    Но есть предложения:
    Либо создать свое событие (не помню возможно ли, надо проверить) либо добавить в плагин api позволяющее использовать функционал плагина в своих событиях.
     
    White Wolf нравится это.
  17. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    352
    Симпатии:
    845
    Пользователь Reiko1231 обновил ресурс [Achievements] Core новой записью:

    Обновление до версии 1.5

    Узнать больше об этом обновлении...
     
    666FoX666, White Wolf, Серый™ и 2 другим нравится это.
  18. vio_line

    vio_line

    Сообщения:
    44
    Симпатии:
    4
    @Reiko1231, а какая короткая команда вызова менюшки плагина?
    Оффтоп
    Спасибо. Уже нашел в исходнике. "!ach"
     
    Последнее редактирование: 22 окт 2016
    666FoX666 нравится это.
  19. Ice_Sochi

    Ice_Sochi

    Сообщения:
    282
    Симпатии:
    85
    Можно ли добавить достижение "получить все достижения" или получить определенное кол-во достижений?
    Еще на оверлее почему-то у меня не пишет название достижения, как на видео. Или для этого только английский клиент нужен?
     
  20. Kolya

    Kolya

    Сообщения:
    75
    Симпатии:
    16
    Ребята, а подскажите, может на финальный звук от shop ball можно прикрутить достижение?
    Или на EndZone от shavit's simple bhop timer ?
    P.s по счет звука я походу зря сказал:D