Top Awards

Сообщения
143
Реакции
68
Помог
1 раз(а)
Неверный раздел форума
Добрый день.
Дорогие знатоки. Хочу Вашего совета. Правильно все ли я сделал. Мне нужно было для статистики https://dev-cs.ru/resources/179/ переделать плагин csstatsx_awards.amxx под ReAPI. И ничего больше лишнего. Пример кода кидаю ниже.

Код:
#include <amxmodx>
#tryinclude <reapi>
#include <csstatsx_sql>

#define PLUGIN "TopAwards"
#define VERSION "0.2"
#define AUTHOR "serfreeman1337"

#define TOP                5                                // Скольким игрокам из топа выдавать флаги?
#define IGNORE_FLAGS    (ADMIN_MENU|ADMIN_LEVEL_H)        // Не выдавать плюшки игрокам с этими флагами
#define GIVE_FLAGS        (ADMIN_LEVEL_H|ADMIN_LEVEL_G)    // Выдаваемые флаги

new top_ids[TOP] = -1

public plugin_init()
{
    register_plugin(PLUGIN,VERSION,AUTHOR)
    RegisterHookChain(RG_CBasePlayer_Spawn,"PlayerSpawn",true)
    
}

public csxsql_initialized()
{
    update_stats_cache()
    get_stats_sql_thread(0,0,TOP,"TopPlayedTime",CSXSQL_RANK_TIME)
}

public PlayerSpawn(id)
{
    if(!is_user_connected(id))
    {
        return
    }
    
    new flags = get_user_flags(id)
    
    if(flags & IGNORE_FLAGS)
    {
        return
    }
    
    for(new i,db_id = get_user_stats_id(id) ; i < TOP ; i++)
    {
        if(top_ids[i] == db_id)
        {
            set_user_flags(id,flags | GIVE_FLAGS)
            client_print_color(id, print_team_default, "^1[^4TOP^1] ^3Ви потрапили в ^4TOP: ^1%d ^3сервера. ^4V.I.P ^1активовано!", TOP);
            break
        }
    }
}
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
Код:
-#tryinclude <reapi>
+#include <reapi>
Это весь код? В оригинале ещё:
Код:
public TopPlayedTime(id,pos)
{
    new index
    
    while((index = get_stats_id(index,top_ids[index])))
    {
        if(index >= TOP)
            break
    }
}
 
Сообщения
143
Реакции
68
Помог
1 раз(а)
w0w, видимо пропустил).
А кстати, эта часть кода
Код:
public TopPlayedTime(id,pos)
{
    new index
    
    while((index = get_stats_id(index,top_ids[index])))
    {
        if(index >= TOP)
            break
    }
}
Она же вроде отвечает за ТОП по времени, или я ошибаюсь?
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
roten, ну логично предположить что да зная что это плагин выдающий награды за время.
 
Сообщения
143
Реакции
68
Помог
1 раз(а)
Хорошо. Ну если все норм. тогда спасибо за совет и поправку).
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
1.
get_stats_sql_thread(0,0,TOP,"TopPlayedTime",CSXSQL_RANK_TIME)
это и есть callback функция. Не нужно было убирать
2.
Нету смысла на каждый спавн выдавать флаг. Выдайте раз на карту и все
3.
Не вижу причин использовать тут ReAPI.
 
Сообщения
143
Реакции
68
Помог
1 раз(а)
fantom, я его вообще хочу переделать чтобы выдавало не по времени, а по позиции в статистики. У меня игроки сортируются по скилу.
В этой теме обсуждение можно дальше будет вести, или надо создавать другую тему?
 
Сообщения
28
Реакции
14
roten, вот, откопал у себя:
Код:
/*    Copyright 2016 Safety1st

    Top Awards is free software;
    you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

#include <amxmodx>
#include <hamsandwich>
#include <csstatsx_sql>


#define PLUGIN "Top Awards"
#define VERSION "0.2cs"
#define AUTHOR "Safety1st"

/*----------------------------------EDIT ME----------------------------------*/
const TOP_MAX       = 3                // how many first TOP players will be given bonus flags
const ADD_FLAGS     = ADMIN_RESERVATION|ADMIN_LEVEL_D|ADMIN_LEVEL_C     // which flags we will add as a bonus; flag 'bop' by default
#define IGNORE_FLAG   ADMIN_LEVEL_C     // which players will not have bonus flags; uncomment to enable; flag 'o' by default
/*-------------------------------STOP EDIT HERE-------------------------------*/

#if AMXX_VERSION_NUM < 183
    // AMXX 1.8.3-dev since hg185 has its own colorchat support
    #include <colorchat>
    #define print_team_default  DontChange
    #define print_team_grey     Grey
    #define print_team_red      Red
    #define print_team_blue     Blue
#endif

new top_ids[TOP_MAX] = -1

#define TASK_DELAY 5.0

public plugin_init() {
    register_plugin( PLUGIN, VERSION, AUTHOR )
    register_dictionary( "top_awards.txt" )
    RegisterHam(Ham_Spawn,"player","PlayerSpawn",true)
}


public csxsql_initialized()
{
    update_stats_cache()
    get_stats_sql_thread(0,0,TOP_MAX,"TopFlag",CSXSQL_RANK_DEF)
}


public PlayerSpawn(id)
{
    if(!is_user_connected(id))
    {
        return
    }
    
    new flags = get_user_flags(id)
    
    if ( flags & IGNORE_FLAG || flags & ADD_FLAGS == ADD_FLAGS )
        return
    
    for(new i,db_id = get_user_stats_id(id) ; i < TOP_MAX ; i++)
    {
        if(top_ids[i] == db_id)
        {
            set_user_flags(id,flags | ADD_FLAGS)
            break
        }
    }
}

public TopFlag(id,pos)
{
    new index
    
    while((index = get_stats_id(index,top_ids[index])))
    {
        if(index >= TOP_MAX)
            break
    }
}
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
roten, для грамотной выдачи по позиции в топе, нужно немного изменить саму стату. Конкретно что менять я уже не помню было давно
 
Сообщения
143
Реакции
68
Помог
1 раз(а)
BaJIepbI4, скажите пожалуйста, для чего эта часть кода

Код:
#if AMXX_VERSION_NUM < 183
    // AMXX 1.8.3-dev since hg185 has its own colorchat support
    #include <colorchat>
    #define print_team_default  DontChange
    #define print_team_grey     Grey
    #define print_team_red      Red
    #define print_team_blue     Blue
#endif

register_dictionary( "top_awards.txt" )
Я здесь не вижу вывода в чат. Но за ост. часть кода спасибо).
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
roten, скорее всего (более чем уверен) изначально там было сообщение после set_user_flags как у Вас в первом сообщении но потом кто-то удалил сообщение (возможно тот кто предоставил этот исходник) но не удалил эту часть кода.
 
Сообщения
28
Реакции
14
BaJIepbI4, скажите пожалуйста, для чего эта часть кода

Код:
#if AMXX_VERSION_NUM < 183
    // AMXX 1.8.3-dev since hg185 has its own colorchat support
    #include <colorchat>
    #define print_team_default  DontChange
    #define print_team_grey     Grey
    #define print_team_red      Red
    #define print_team_blue     Blue
#endif

register_dictionary( "top_awards.txt" )
Я здесь не вижу вывода в чат. Но за ост. часть кода спасибо).
Да, как сказал выше w0w был вывод в чат об изменении ранга. Вывод убрали, а дефайны забыли :)
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу