[fork] Advanced Experience System

amxx reapi [fork] Advanced Experience System 0.5.9.1

Нет прав для скачивания
Установка
  • Скомпилируйте плагин (инструкция).
    • Для компиляции на АМХХ 1.8.2 требуется инклюд colorchat.inc от aghl.
  • Укажите как вести учет игроков через квар aes_track_mode.
    • при работе через статистику csx (значение -1) указывать настройки базы данных не нужно.
  • Включите необходимый модуль для работы с БД в файле addons/amxmodx/configs/modules.ini.
    • mysql - для работы с БД MySQL.
    • sqlite - для работы с локальной базой данных SQLite (запись в файл на сервере).
    • bans - подключение берется из вашей бан-системы (поддерживаются FreshBans и AmxBans)
  • Укажите данные для подключения к БД в файле addons/amxmodx/configs/aes/aes.cfg (при работе с подключением к бан-системе указывать не нужно).
    • для SQLite нужно указать aes_sql_driver "sqlite"
  • Настройте систему под себя.
    • настройки addons/amxmodx/configs/aes/aes.cfg
    • бонусы addons/amxmodx/configs/aes/bonus.ini
    • названия уровней addons/amxmodx/data/lang/aes.txt
  • Раскомментируйте нужные плагины в addons/amxmodx/configs/plugins-aes.ini.
    • aes_main.amxx - основной плагин
    • aes_exp_cstrike.amxx - начисление опыта и бонусов за убийства и пр. для Counter-Strike.
    • aes_informer.amxx - HUD информер и сообщения в чат.
    • aes_exp_editor.amxx - меню для администратора.
    • aes_bonus_system.amxx - меню бонусов (/anew) и плюшки на спавне.
    • aes_bonus_cstrike.amxx - бонусы для Counter-Strike.
Настройки
Код:
// -- aes_main.amxx -- //

// Ключ сохранения. По какому параметру вести учет игроков?
// -1 - Расчитывать опыт на основе статистики csx (требуется плагин aes_exp_cstrike)
// 0 - Ник
// 1 - SteamID
// 2 - IP
aes_track_mode "1"

// Драйвер БД.
// mysql, sqlite или bans - подключение берется из вашей бан-системы (поддерживаются FreshBans и AmxBans. При выборе заполнять данные БД не нужно).
aes_sql_driver "mysql"

// Хост для подключения.
aes_sql_host "localhost"

// Пользователь.
aes_sql_user "root"

// Пароль.
aes_sql_pass ""

// База данных. Или название файла для SQLite.
aes_sql_name "amxx"

// Таблица.
aes_sql_table "aes_stats"

// Максимальное кол-во неудачных попыток обращения к БД,
// после которых плагин перестает связываться с БД до конца карты.
aes_sql_maxfail "10"

// Автоматически отправлять запрос на создание таблицы в БД в начале карты.
aes_sql_create_db "1"

// Настройка званий.
// Какое количество опыта должен набрать игрок для определенного звания.
// Первая цифра отвечает за количество опыта для звания "Рядовой", вторая за звания "Ефрейтор" и так далее.
// Первая цифра соответственно должна быть равна НУЛЮ!
// Писать в кавычках!
// ВАЖНО! Сколько Вы здесь напишите чисел, столько званий у Вас и будет! Не забудьте отредактировать ланг файл, под Ваше количество званий!
aes_level "0.0 20.0 40.0 60.0 100.0 150.0 200.0 300.0 400.0 600.0 1000.0 1500.0 2100.0 2700.0 3400.0 4200.0 5100.0 5900.0 7000.0 10000.0"

// Приостановить учет опыта.
aes_track_pause "0"

// Считать ли опыт у ботов.
aes_track_bots "1"

// -- aes_exp_cstrike.amxx -- //

// Сколько опыта будет даваться за одно убийство
aes_xp_frag "1.0"
// Сколько опыта будет давать за убийство хедшотов
aes_xp_hs "2.0"
// Кол-во опыта за установку бомбы
aes_xp_c4_plant "1.0"
// Кол-во опыта за подрыв бомбы
aes_xp_c4_explode "3.0"
// Кол-во опыта за дефьюз бомбы
aes_xp_c4_defused "4.0"
// Опыт за вывод заложников
aes_xp_hostage_got "1.0"
// Опыт за спасение заложников
aes_xp_hostage_rescue "1.0"
// Опыт за спасение как V.I.P.
aes_xp_vip_escaped "4.0"
// Опыт за убийство заложника
aes_xp_hostage_kill "-5.0"
// Опыт за убийство V.I.P.
aes_xp_vip_killed "4.0"
// Опыт за смерть. Используйте отрицательные значения чтобы вычитать.
aes_xp_death "0.0"

// Минимальное кол-во игроков, при которых будет начисляться бонус за выполнение действий карты.
// Действии с заложниками, бомбой и VIP.
aes_xp_goal_min_players "4"

// Включен режим FFA
aes_xp_ffa "0"

// Бонусы за количество фрагов, убийств в голову и прочего.
// Формат записи: "<количество_фрагов> <количество_бонуса_за_них> <количество_фрагов> <количество_бонуса_за_них> и т.д."
// Бонусы дают доступ к меню /anew
// 0 - выключить.

// Просто за фраги
aes_anew_frags "10 1 20 2 30 3 40 5"
// За убийство в голову
aes_anew_hs "7 1 14 2 20 3 30 4"
// За убийство с ножа
aes_anew_knife "1 1 2 1 3 1 4 1"
// За убийство с гранаты
aes_anew_he "4 1 5 1 6 1 7 2"

// Когда сбрасывать кол-фрагов и т.п.
// 0 - никогда
// 1 - при смерти
aes_anew_reset "1"

// Количество выдаваемых бонусов игроку за повышению по званию.
aes_bonus_levelup "3"

// -- aes_informer.amxx -- //

// Показывает сообщение о новом уровне. 1 - показывать игроку. 2 - только всем. 0 - отключить сообщение.
aes_newlevel_chat "2"

// Через сколько секунд обновлять hud сообщения?
aes_hud_update "1.5"

// По стандарту показывать информер? (Hud сообщение с текущим званием)
aes_hud_info_default "1"

// Тип информера. 1 - Hud. 0 - выключить
aes_hud_info_type "1"

// Цвет информера(r g b). Вводить три числа в одних кавычках!
// Или укажите random для задания случайного цвета.
aes_hud_info_color "60 60 60"

// Координаты информера(x y). Вводить два числа в одних кавычках!
aes_hud_info_pos "0.01 0.13"

// Тип сообщения /aNew. 1 - Hud. 0 - выключить
aes_hud_anew_type "1"

// Цвет сообщения /aNew (r g b). Вводить три числа в одних кавычках!
aes_hud_anew_color "100 100 100"

// Координаты сообщения /aNew (x y). Вводить два числа в одних кавычках!
aes_hud_anew_pos "-1.0 0.90"

// Отображать информер наблюдателям.
aes_hud_info_default_d "1"

// Цвет информера для наблюдателя.
// random - случайный цвет.
aes_hud_info_color_d "40 40 40"

// Позиция информера для наблюдателя.
aes_hud_info_pos_d "0.01 0.15"

// Режим форматирования.
aes_informer_tpl "0"

// -- aes_bonus_system.amxx -- //

// Вкл/Выкл системы бонусов
aes_bonus_enable "1"

// Выдача бонусов на спавне
// 0 - нет бонусов на спавне
// 1 - выдавать всегда
// 2 - выдать только один раз за раунд
aes_bonus_spawn "1"

// Список карт, на которых не будут действовать все бонусы.
aes_lockmap "35hp"
aes_lockmap "35hp_2"
aes_lockmap "35hp_gx"
aes_lockmap "35hp_gladiators_day"
aes_lockmap "most_wanted"
aes_lockmap "35hp_xmas"
aes_lockmap "35hp_3"
aes_lockmap "aim_afl_deagle"
aes_lockmap "awp_8bit"
aes_lockmap "awp_india"
aes_lockmap "awp_india_csp"
aes_lockmap "awp_pit"
aes_lockmap "ka_100x100"
aes_lockmap "ka_wintershank"
INI:
;
;    Advanced Experinece System
;    by serfreeman1337
;
;
; Расположение файла: addons/amxmodx/configs/aes/bonus.ini
;
; [menu] - меню
;    <menu> - регистрация нового меню
;        title - заголовок меню, используйте приставку LANG_ для словаря
;        say - команда в чате для вызова меню
;        console - команда в консоли для вызова этого меню
;        list - список предметов в этом меню из [items]
;
; [items] - предметы для меню
;    <call> - регистрация предмета с вызовом функции другого плагина
;        name - название предмета в пункте меню, используйте приставку LANG_ для словаря
;        plugin - название файла плагина
;        function - название функции в плагине
;        points - кол-во бонусов (число)
;        exp - требуемый опыт (float или число)
;        level - требуемый уровень (число)
;        time - в течении скольки секунд с начала раунда доступен предмет
;        round - раунд, с которого будет доступен этот предмет (число)
;        flag - флаг, допускающий выдачу (t - выдавать только имеющим флаг t, ~t - выдавать всем, кроме, тех у кого есть флаг t, a~t - выдавать только имеющим флаг a, но не имеющим флаг t)
;    <give> - регистрация предмета с функцией give
;        name - название предмета в пункте меню, используйте приставку LANG_ для словаря
;        item - название предмета
;        points - кол-во бонусов (число)
;        exp - требуемый опыт (float или число)
;        level - требуемый уровень (число)
;        time - в течении скольки секунд с начала раунда доступен предмет
;        round - раунд, с которого будет доступен этот предмет (число)
;        flag - флаг, допускающий выдачу (t - выдавать только имеющим флаг t, ~t - выдавать всем, кроме, тех у кого есть флаг t, a~t - выдавать только имеющим флаг a, но не имеющим флаг t)
; [spawn] - бонусы на спавне
;    <call> - регистрация предмета с вызовом функции другого плагина
;        name - название предмета в пункте меню, используйте приставку LANG_ для словаря
;        plugin - название файла плагина
;        function - название функции в плагине
;        points - кол-во бонусов (число)
;        exp - требуемый опыт (float или число)
;        level - требуемый уровень (число)
;        levels - кол-во для каждого уровня (все уровни через пробел)
;        round - раунд, с которого будет доступен этот предмет (число)
;        flag - флаг, допускающий выдачу (t - выдавать только имеющим флаг t, ~t - выдавать всем, кроме, тех у кого есть флаг t, a~t - выдавать только имеющим флаг a, но не имеющим флаг t)
;    <give> - регистрация предмета с функцией give
;        name - название предмета в пункте меню, используйте приставку LANG_ для словаря
;        item - название предмета
;        points - кол-во бонусов (число)
;        exp - требуемый опыт (float или число)
;        level - требуемый уровень (число)
;        levels - кол-во для каждого уровня (все уровни через пробел)
;        round - раунд, с которого будет доступен этот предмет (число)
;        flag - флаг, допускающий выдачу (t - выдавать только имеющим флаг t, ~t - выдавать всем, кроме, тех у кого есть флаг t, a~t - выдавать только имеющим флаг a, но не имеющим флаг t)
;
;
;    Значения levels:
;        0 - не давать
;        для item = weapon_* кол-вопатрон(гранат)
;        для дамагера 1 - обычный, 2 - показывается лишь если противник виден
;        для roundBonus_GiveArmor 1 - выдать kevlar 100, 2 - полная броня 100, > 2 полная броня свое значение

[menu]

<menu>
title = LANG_AES_BONUS_MENU
say = /anew
console = anew
list = 1 2 3 4 5 6 7

[items]

<give>
item = weapon_m4a1
name = LANG_AES_BONUS_M4A1
points = 1

<give>
item = weapon_ak47
name = LANG_AES_BONUS_AK47
points = 1

<give>
item = weapon_awp
name = LANG_AES_BONUS_AWP
points = 1

<call>
plugin = aes_bonus_cstrike.amxx
name = 123 брони
function = GiveArmor
value = 123
points = 1

<call>
plugin = aes_bonus_cstrike.amxx
name = 22000$
function = GiveMoney
value = 22000
points = 1
flag = ~t

<call>
plugin = aes_bonus_cstrike.amxx
name = 200 HP
function = GiveHP
value = 200
points = 1

<call>
plugin = aes_bonus_cstrike.amxx
name = LANG_AES_BONUS_MEGAGRENADE
function = pointBonus_GiveMegaGrenade
points = 1

<call>
plugin = aes_bonus_cstrike.amxx
name = LANG_AES_BONUS_MEGADEAGLE
function = pointBonus_GiveMegaDeagle
points = 1

[spawn]

<give>
item = weapon_smokegrenade
name = Smoke
levels = 0 0 0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2

<give>
item = weapon_hegrenade
name = HE
levels = 0 0 0 0 1 1 1 1 1 1 1 2 2 2 2 2 3 3 3 3

<give>
item = weapon_flashbang
name = Flash
levels = 2 2 2 2 2 2 2 2 2 2 2 4 4 4 4 4 4 5 6 6

<give>
item = weapon_deagle
name = Deagle
levels = 0 0 0 0 0 0 21 21 21 35 35 35 35 35 35 35 35 35 35 35

;<give>
;item = weapon_ak47
;name = AK47
;levels = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 90 90 90 90

<call>
plugin = aes_bonus_cstrike.amxx
name = Damager
function = roundBonus_Dmgr
levels = 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2

<call>
plugin = aes_bonus_cstrike.amxx
name = LANG_AES_BONUS_DEFKIT
function = roundBonus_GiveDefuser
levels = 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

<call>
plugin = aes_bonus_cstrike.amxx
name = LANG_AES_BONUS_NV
function = roundBonus_GiveNV
levels = 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

<call>
plugin = aes_bonus_cstrike.amxx
name = LANG_AES_BONUS_ARMOR
function = roundBonus_GiveArmor
levels = 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 120 150

<call>
plugin = aes_bonus_cstrike.amxx
name = LANG_AES_BOUNS_HP
function = roundBonus_GiveHP
levels = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 10 20 20
Информер:
Информер служит для вывода информации о текущем опыте и звании в HUD, оповещения игроков о повышении уровней через чат.

Для включения режима форматирования поставьте значение aes_informer_tpl "1" в основной конфигурации.

Шаблоны находятся в словаре aes.txt. Список шаблонов:

  • AES_HUD_TPL - HUD информер для игрока.
  • AES_HUD_TPL_D - HUD информер для наблюдателя (или если игрок был убит).
  • AES_NEWLEVEL_TPL - сообщение о повышении уровня игроку.
  • AES_NEWLEVEL_ALL_TPL - сообщение о повышении уровня всем.
Замена:

  • <exp> - количество текущего опыта.
  • <levelexp> - количество опыта для уровня.
  • <needexp> - разница между levelexp и exp.
  • <level> - числовое значение уровня.
  • <maxlevel> - числовое значение максимального уровня.
  • <rank> - звание игрока.
  • <name> - имя игрока.
  • <bonus> - количество бонусов
  • <skill> - выводит букву и значение скила (для работы необходима статистика CSstatsX SQL)
  • <steamid> - SteamID игрока.
  • \n - символ перевода на новую строку.
API
Код:
#define AES_MAX_LEVEL_LENGTH 64

enum _:
{
    AES_RT_NO,
    AES_RT_YES,
    AES_RT_LEVEL_DOWN,
    AES_RT_LEVEL_UP
};

/**
* Array structure for get stats with aes_find_stats_thread native
*/
enum _:aes_stats_struct
{
    AES_S_NAME[32],
    AES_S_STEAMID[30],
    AES_S_IP[16],

    Float:AES_S_EXP,
    AES_S_LEVEL,
    AES_S_BONUS,

    AES_S_ID
};

/**
* Returns player experience
*
* @param player            player id
*
* @return                player experience or -1.0 if player not tracked yet
*/
native Float:aes_get_player_exp(player);

/**
* Sets player experience
*
* @param player            player id
* @param exp            experience value
* @param no_forward        dont trigger forward functions on level up or level down
* @param force            force even if track paused
*
* @return                AES_RT_NO on track pause or player not tracked yet
*                        AES_RT_YES on success
*                        AES_RT_LEVLE_DOWN on level down
*                        AES_RT_LEVEL_UP on level up
*/
native aes_set_player_exp(player,Float:exp,bool:no_forward = false,bool:force = false);

/**
* Returns player required experience to next level
* @param player            player id
*
* @return - required experience value
*/
native Float:aes_get_player_reqexp(player);

/**
* Returns player bonus points
*
* @param player            player id
*
* @return                player bonus points or -1 if player
*/
native aes_get_player_bonus(player);

/**
* Sets player bonus points
*
* @param player            player id
* @param bonus            bonus value
* @param force            force even if track paused
*
* @return                AES_RT_NO on track pause or player not tracked yet
*                        AES_RT_YES on success
*/
native aes_set_player_bonus(player,bonus,bool:force = false);

/**
* Returns current player level
*
* @param player            player id
*
* @return                current player level or -1 if player not tracked yet
*/
native aes_get_player_level(player);

/**
* Sets player level
*
* @param player            player id
* @param level            level
* @param force            force even if track paused
*
* @return                AES_RT_NO on track pause or player not tracked yet
*                        AES_RT_YES on success
*/
native aes_set_player_level(player,level,bool:force = false);

/**
* Returns maximum level
*
* @return                level
*/
native aes_get_max_level();

/**
* Returns level name for level num.
*
* @param level            level number
* @param level[]        Buffer to copy level name output to
* @param len            Maximum size of buffer
* @param idLang            language id
*
* @return                 len
*/
native aes_get_level_name(level,level_name[],len,idLang = LANG_SERVER);

/**
* Returns level for experience
*
* @param exp            experience value
*
* @return                level num or -1 of fail
*/
native aes_get_exp_level(Float:exp);

/**
* Returns required experience to pass level
*
* @param lvl            level
*
* @return                required experience value or -1.0 on fail
*/
native Float:aes_get_level_reqexp(level);

/**
* Thread search for aes stats witch given array track_ids
*
* @param id                player id
* @param track_ids        dynamic array with track ids for search
* @param callback        your callback function
*                        public my_callback(id,Array:aes_stats,stats_data[])
* @param data[]            custom data
* @param data_size        custom data size
*
* @return                true or false
*/
native aes_find_stats_thread(id = 0,Array:track_ids,callback[],data[] = "",datasize = 0);

/**
* Called when player open bonus menu.
*
* @param id                player id
*
* @return                  PLUGIN_CONTINUE to let the player open menu
*                          PLUGIN_HANDLED or higher to stop
*/
forward aes_on_anew_command(id)

/**
* Called when player data is loaded.
*
* @param id                player id
*
* @noreturn
*/
forward aes_player_connect(id)

/**
* Called on player level up.
*
* @param id                player id
* @param new_level        new level
* @param old_level        old level
*
* @noreturn
*/
forward aes_player_levelup(id,new_level,old_level);

/**
* Called on player level down.
*
* @param id                player id
* @param new_level        new level
* @param old_level        old level
*
* @noreturn
*/
forward aes_player_leveldown(id,new_level,old_level);

#define aes_add_player_exp_f(%0,%1) aes_set_player_exp(%0,aes_get_player_exp(%0) + %1)
#define aes_add_player_bonus_f(%0,%1) aes_set_player_bonus(%0,aes_get_player_bonus(%0) + %1)
Сверху Снизу