Главная | Комментарии | О проекте
Чтение RSS
Суперсайт
Главная Контакты Карта сайта Добавить в избранное
  • Кто OnLine

    Всего на сайте: 20
    Гостей: 6
    Пользователи: - отсутствуют
    Роботы: crawl Bot, crawl Bot, crawl Bot, crawl Bot, crawl Bot, crawl Bot, crawl Bot, crawl Bot, crawl Bot, crawl Bot

    Опрос пользователей

    Для какого мода Вы пишите плагины?

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 26-09-2011, 14:13 Просмотров: 3095

    get_stats Функция получает строку из стандартной статистики

    Все мы знакомы со стандартной статистикой серверов CS,и тем боле знакомы с Top15, каждый хочет быть на первой строчке, стремление к лидерству у нас в крови. Но как же получить эти строчки из статистики? Ответ прост, воспользоваться функцией get_stats, которая получает нужные нам строки из общего массива всей статистики. Если нам нужно составить топ 15, то мы будет просить данные с номерами от 0 до 14, так как в массивах счет начинается с 0, а не как мы привыкли в школе с 1.

    Инфо из csstats.inc:
    /* Gets overall stats which stored in stats.dat file in amx folder
    * and updated on every mapchange or user disconnect.
    * Function returns next index of stats entry or 0 if no more exists. */
    native get_stats(index,stats[8],bodyhits[8],name[],len,authid[] = "",authidlen = 0);


    Синтаксис:
    get_stats ( index, stats[8], bodyhits[8], name[], len, authid[] = "", authidlen = 0 )

    • index - Номер строки. То есть если вам нужен игрок с рангом 1 то это будет строка 0, если нужен с рангом 500,то это будет 499 строка.
    • stats[8] - Массив для параметров статистики
      • 0 - kills - Количество убийств
      • 1 - deaths - Количество смертей
      • 2 - headshots - Количество убийств в голову
      • 3 - teamkilling - Количество убийств членов своей команды
      • 4 - shots - Общее число выстрелов
      • 5 - hits - Количество попаданий
      • 6 - damage - Всего нанесено урона

    • bodyhits[8] - Массив для параметров попаданий
      • 0 - generic (none) - универсальный (ни один) ( переведено по словарю, не знаю что такое)
      • 1 - head - Попаданий в голову
      • 2 - chest - Попаданий в грудь
      • 3 - stomach - Попаданий в живот
      • 4 - leftarm - Попаданий в левую руку
      • 5 - rightarm - Попаданий в правую руку
      • 6 - leftleg - Попаданий в левую ногу
      • 7 - rightleg - Попаданий в правую ногу

    • name[] - Имя игрока
    • len - Максимальная длина имени
    • authid[]="" - Стим айди игрока ( или параметр по которому считается статистика)
    • authidlen = 0 - Длина параметра по которому считается статистика


    Функция получает полную статистику из фала stats.dat в папке amx, который обновляется каждый раз при смене карты или отсоединении клиента.
    Функция возвращает нужную строку ( по индексу) или 0, если заданного индекса не существует.

    Пример:
    /* Plugin generated by AMXX-Studio */

    #include <amxmodx>
    #include <amxmisc>
    #include <csx>

    #define PLUGIN "[CSX csstats.inc] Get stats"
    #define VERSION "1.0"
    #define AUTHOR "Admin"

    public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        register_clcmd("say /stats","stats")
    }
    public stats(id){
        
        new stats[8],bodyhits[8],name[32],authid[64]
        get_stats(0,stats,bodyhits,name,31,authid,63)

        client_print(id,print_console,"Fields in stats are")
        client_print(id,print_console,"Kills:%d ^nDeaths:%d ^nHshots:%d^nTkill:%d^nShots:%d^nHits:%d^nDamage:%d^n",stats[0],stats[1],stats[2],stats[3],stats[4],stats[5],stats[6])
        
        client_print(id,print_console,"Fields bodyhits are")
        client_print(id,print_console,"Generic (none):%d^nHead:%d^nChest:%d^nStomach:%d^nLefttarm:%d^nRighttarm:%d^nLeftleg:%d^nRightleg:%d",bodyhits[0],bodyhits[1],bodyhits[2],bodyhits[3],bodyhits[4],bodyhits[5],bodyhits[6],bodyhits[7])

        client_print(id,print_console,"Name and authid")
        client_print(id,print_console,"Name:%s,authid:%s",name,authid)

    }


    Описание:
    Зарегистрируем команду say /stats, для выполнения функции public stats(id), где будет учиться работать с изучаемой функцией.
    Для успешной работы нам потребуется создать 4 массива, с размерностью указанной в синтаксисе функции.
    И выполняем функцию get_stats, указав в первом параметре 0, что означает что мы хотим получить первую строку из файла, то есть Топ1 сервера (статистики)

    Мы не будет обрабатывать данные, высчитывать проценты и друге действия, так как это совсем другая история.
    В данном примере мы просто выведем полученные результаты в консоль.

    Посмотрите на результат работы скрипта:

    Fields in stats are
    Kills:1545
    Deaths:684
    Hshots:430
    Tkill:2
    Shots:17568
    Hits:6945
    Damage:181750

    Fields bodyhits are
    Generic (none):0
    Head:776
    Chest:1140
    Stomach:977
    Lefttarm:1674
    Righttarm:877
    Leftleg:628
    Rightleg:571
    Name and authid
    Name:Anemico,authid:Anemico


    У вас будет тоже самое, только естественно данные будут ваши!
    Что бы проверить правильность, можете открыть привычный вам топ15 и сравнить.
    К стати, он получается примерно таким же способом, только там цикл, от 0 до 14, что бы получить первые 15 строк из файла.
    И парочка арифметических действий, что бы высчитать эффективность и что там еще есть..

    В принципе ни чего сложного, главное уяснять для себя, что в массиве stats[0] хранятся фраги, а в stats[1] смерти.
    Выглядит это примерно так:

    Это фраги: stats[0]
    Это смерти: stats[1]
    Это фраги в голову: stats[2]
    То есть этот массив не для каждого игрока, а под набор данных.

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

    Если же вы хотите получить статистику для конкретного пользователя, то нужно воспользоваться функцией get_user_stats, она очень похожа и немного проще, о ней я расскажу чуть позже.
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Наверх

Реклама