[fork] Advanced Experience System

fork Advanced Experience System 0.5.9.1

Нет прав для скачивания
Сообщения
137
Реакции
9
Помог
3 раз(а)
Gudaus,
Код:
[ru]
LVL_1 = Лошара
LVL_2 = Жертва
LVL_3 = Хулиган
LVL_4 = Бандит
LVL_5 = Чёткий пацан
LVL_6 = Хищник
LVL_7 = Непобедимый
LVL_8 = Рембо
LVL_9 = Чикатило
LVL_10 = Наёмный убийца
LVL_11 = Хладнокровный маньяк
LVL_12 = Убийца в ярости
LVL_13 = Разрушитель
LVL_14 = Душегуб
LVL_15 = Джек потрошитель
LVL_16 = Чёткий Убийца
LVL_17 = Опасный убийца
LVL_18 = Неуязвимый
LVL_19 = Серийный убийца
LVL_20 = Неудержимый
LVL_21 = Мясник
LVL_22 = Неуравновешенный
LVL_23 = Сумасшедший
LVL_24 = Каратель
LVL_25 = Терминатор
LVL_26 = Советский Маньяк
LVL_27 = Жестокий-убийца
LVL_28 = Смертник
LVL_29 = Палач
LVL_30 = Могучий-маньяк
LVL_31 = Псих-убийца
LVL_32 = Камекадзе
LVL_33 = BeJIukuu убийца
LVL_34 = Маньяк
LVL_35 = Беспощадный
LVL_36 = Невъебенный
LVL_37 = Исполнитель
LVL_38 = Мучитель
LVL_39 = Супер Мен бля
LVL_40 = Мочильшик
LVL_41 = Анти киллер
LVL_42 = Психопат
LVL_43 = Наёмный убийца
LVL_44 = Насильник
LVL_45 = Душевнобольной
LVL_46 = Шизофреник
LVL_47 = Гладиатор
LVL_48 = Виозинер
LVL_49 = Кровавый убийца
LVL_50 = Зверский-Читер
LVL_51 = Одержимец
LVL_52 = Сатанист
LVL_53 = Секс-маньяк
LVL_54 = Безумец
LVL_55 = Рехнувшийся
LVL_56 = Тронутый
LVL_57 = Безбашенный
LVL_58 = Чистильщик
LVL_59 = Головорез
LVL_60 = Братоубийца
LVL_61 = Всем ПИЗДЕЦ
LVL_62 = Jason Voorhees
LVL_63 = Всесокрушающий

AES_TAG = ^1[^4AES^1]
AES_TAG_MENU = \r[\yAES\r]\w
AES_TAG_CON = [AES]

AES_INFORMER0 = Ник : %s
AES_INFORMER1 = Ранг : %s
AES_INFORMER2 = Опыт : [%.0f/%.0f]

AES_HUD_TPL = Опыт : [<exp>/<levelexp>] (+<needexp>)\nРанг : <rank>
AES_HUD_TPL_D = Ник : <name>\nОпыт : [<exp>/<levelexp>] (+<needexp>)\nРанг : <rank>\nSteamID : <steamid>

AES_NEWLEVEL_TPL = Поздравляем, <name>, вы достигли <level>ого уровня - Следующий уровень: <levelexp> XP - Нужно: <needexp> XP
AES_NEWLEVEL_ALL_TPL = <name> достиг <level>ого уровня [ <rank> ]

AES_INFORMER_FAIL = Статистика не учитывается
AES_PLAYER_XP_MAX = Достигнут максимум развития
AES_PLAYER_LEVEL_MAX = ^4%s достиг максимального уровня!

AES_INFORMER_ENABLED = HUD сообщение с текущим званием ^3Включено^1.
AES_INFORMER_DISABLED = HUD сообщение с текущим званием ^3Выключено^1.

AES_NEWLEVEL_ALL = Солдат ^3%s^1 достиг ранга ^4%s^1. Поздравляем!
AES_NEWLEVEL_ID = Вы заслужили повышение - ^4%s^1. Поздравляем!

AES_BONUS_MENU = Что вы выберите?\n\wУ вас \r<p>\w бонусов
AES_BONUS_M4A1 = M4A1 \y+патроны
AES_BONUS_AK47 = AK47 \y+патроны
AES_BONUS_AWP = AWP \y+патроны
AES_BONUS_10000M = 10000\r$
AES_BONUS_200HP = 200\rHP
AES_BONUS_200CP = 200\rCP
AES_BONUS_MEGAGRENADE = МегаГраната \r(\y300%% \wурона\r)
AES_BONUS_MEGADEAGLE = МегаДигл \r(\y200%% \wурона\r)
AES_BONUS_GIVE_FLAGS5 = \rVIP \yна \r5 \yдней

AES_BONUS_NADE = Граната
AES_BONUS_FLASHBANG = Флешка
AES_BONUS_SMOKENADE = Смок
AES_BONUS_DEFKIT = Дефьюз
AES_BONUS_NV = Найтвижен
AES_BONUS_ARMOR = Броня
AES_BOUNS_HP = Хп

AES_ANEW_INFO1 = \w[\r%d бон.\w]
AES_ANEW_INFO2 = \w[\r%.2f оп.\w]
AES_ANEW_INFO3 = \w[\r%d уров.\w]
AES_ANEW_INFO4 = \w[\r%d рнд.\w]
AES_ANEW_INFO5 = \w[\rВремя\w]
AES_ANEW_INFO6 = \w[\rНет флага\w]
AES_ANEW_INFO7 = \w[\rЗапрешенный флаг\w]
AES_ANEW_INFO8 = Ваши бонусы:
AES_ANEW_INFO9 = и %d других.

AES_BONUS_GET_MEGADEAGLE = Ваш ^3дигл^1 наносит в ^42.0^1 больше урона!
AES_BONUS_GET_MEGAGRENADE = Ваша ^3граната^1 наносит в ^43.0^1 больше урона!

AES_ANEW_GAIN = Вы ^3заработали^1 ^4%d^1 бонус очко(в)!
AES_ANEW_HUD = У вас %d бонус очков\nВведите /anew в чат

AES_ANEW_DISABLE = ^3Система бонусов отключена!
AES_ANEW_BLOCKED = ^3Система бонусов на этой карте отключена!
AES_ANEW_ROUND = ^3Доступно с ^4%d^3 раунда!
AES_ANEW_NOTENG = ^3У вас недостаточно бонус очков!
AES_ANEW_NOT = ^3У вас нет бонус очков!
AES_ANEW_ALIVE = ^3Только для живых игроков!
AES_ANEW_BUYTIME = %d секунд вышло. Покупка запрещена!
AES_ANEW_GIVE = Вы взяли ^3%s^1 за ^4%d^1 бонусов.
AES_ANEW_CALL_PROBLEM = ^3Ошибка:^1 Что-то не так!

[en]
LVL_1 = Лошара
LVL_2 = Жертва
LVL_3 = Хулиган
LVL_4 = Бандит
LVL_5 = Чёткий пацан
LVL_6 = Хищник
LVL_7 = Непобедимый
LVL_8 = Рембо
LVL_9 = Чикатило
LVL_10 = Наёмный убийца
LVL_11 = Хладнокровный маньяк
LVL_12 = Убийца в ярости
LVL_13 = Разрушитель
LVL_14 = Душегуб
LVL_15 = Джек потрошитель
LVL_16 = Чёткий Убийца
LVL_17 = Опасный убийца
LVL_18 = Неуязвимый
LVL_19 = Серийный убийца
LVL_20 = Неудержимый
LVL_21 = Мясник
LVL_22 = Неуравновешенный
LVL_23 = Сумасшедший
LVL_24 = Каратель
LVL_25 = Терминатор
LVL_26 = Советский Маньяк
LVL_27 = Жестокий-убийца
LVL_28 = Смертник
LVL_29 = Палач
LVL_30 = Могучий-маньяк
LVL_31 = Псих-убийца
LVL_32 = Камекадзе
LVL_33 = BeJIukuu убийца
LVL_34 = Маньяк
LVL_35 = Беспощадный
LVL_36 = Невъебенный
LVL_37 = Исполнитель
LVL_38 = Мучитель
LVL_39 = Супер Мен бля
LVL_40 = Мочильшик
LVL_41 = Анти киллер
LVL_42 = Психопат
LVL_43 = Наёмный убийца
LVL_44 = Насильник
LVL_45 = Душевнобольной
LVL_46 = Шизофреник
LVL_47 = Гладиатор
LVL_48 = Виозинер
LVL_49 = Кровавый убийца
LVL_50 = Зверский-Читер
LVL_51 = Одержимец
LVL_52 = Сатанист
LVL_53 = Секс-маньяк
LVL_54 = Безумец
LVL_55 = Рехнувшийся
LVL_56 = Тронутый
LVL_57 = Безбашенный
LVL_58 = Чистильщик
LVL_59 = Головорез
LVL_60 = Братоубийца
LVL_61 = Всем ПИЗДЕЦ
LVL_62 = Jason Voorhees
LVL_63 = Всесокрушающий

AES_TAG = ^1[^4AES^1]
AES_TAG_MENU = \r[\yAES\r]\w
AES_TAG_CON = [AES]

AES_INFORMER0 = Ник : %s
AES_INFORMER1 = Ранг : %s
AES_INFORMER2 = Опыт : [%.0f/%.0f]

AES_HUD_TPL = Опыт : [<exp>/<levelexp>] (+<needexp>)\nРанг : <rank>
AES_HUD_TPL_D = Ник : <name>\nОпыт : [<exp>/<levelexp>] (+<needexp>)\nРанг : <rank>\nSteamID : <steamid>

AES_NEWLEVEL_TPL = Поздравляем, <name>, вы достигли <level>ого уровня - Следующий уровень: <levelexp> XP - Нужно: <needexp> XP
AES_NEWLEVEL_ALL_TPL = <name> достиг <level>ого уровня [ <rank> ]

AES_INFORMER_FAIL = Статистика не учитывается
AES_PLAYER_XP_MAX = Достигнут максимум развития
AES_PLAYER_LEVEL_MAX = ^4%s достиг максимального уровня!

AES_INFORMER_ENABLED = HUD сообщение с текущим званием ^3Включено^1.
AES_INFORMER_DISABLED = HUD сообщение с текущим званием ^3Выключено^1.

AES_NEWLEVEL_ALL = Солдат ^3%s^1 достиг ранга ^4%s^1. Поздравляем!
AES_NEWLEVEL_ID = Вы заслужили повышение - ^4%s^1. Поздравляем!

AES_BONUS_MENU = Что вы выберите?\n\wУ вас \r<p>\w бонусов
AES_BONUS_M4A1 = M4A1 \y+патроны
AES_BONUS_AK47 = AK47 \y+патроны
AES_BONUS_AWP = AWP \y+патроны
AES_BONUS_10000M = 10000\r$
AES_BONUS_200HP = 200\rHP
AES_BONUS_200CP = 200\rCP
AES_BONUS_MEGAGRENADE = МегаГраната \r(\y300%% \wурона\r)
AES_BONUS_MEGADEAGLE = МегаДигл \r(\y200%% \wурона\r)
AES_BONUS_GIVE_FLAGS5 = \rVIP \yна \r5 \yдней

AES_BONUS_NADE = Граната
AES_BONUS_FLASHBANG = Флешка
AES_BONUS_SMOKENADE = Смок
AES_BONUS_DEFKIT = Дефьюз
AES_BONUS_NV = Найтвижен
AES_BONUS_ARMOR = Броня
AES_BOUNS_HP = Хп

AES_ANEW_INFO1 = \w[\r%d бон.\w]
AES_ANEW_INFO2 = \w[\r%.2f оп.\w]
AES_ANEW_INFO3 = \w[\r%d уров.\w]
AES_ANEW_INFO4 = \w[\r%d рнд.\w]
AES_ANEW_INFO5 = \w[\rВремя\w]
AES_ANEW_INFO6 = \w[\rНет флага\w]
AES_ANEW_INFO7 = \w[\rЗапрешенный флаг\w]
AES_ANEW_INFO8 = Ваши бонусы:
AES_ANEW_INFO9 = и %d других.

AES_BONUS_GET_MEGADEAGLE = Ваш ^3дигл^1 наносит в ^42.0^1 больше урона!
AES_BONUS_GET_MEGAGRENADE = Ваша ^3граната^1 наносит в ^43.0^1 больше урона!

AES_ANEW_GAIN = Вы ^3заработали^1 ^4%d^1 бонус очко(в)!
AES_ANEW_HUD = У вас %d бонус очков\nВведите /anew в чат

AES_ANEW_DISABLE = ^3Система бонусов отключена!
AES_ANEW_BLOCKED = ^3Система бонусов на этой карте отключена!
AES_ANEW_ROUND = ^3Доступно с ^4%d^3 раунда!
AES_ANEW_NOTENG = ^3У вас недостаточно бонус очков!
AES_ANEW_NOT = ^3У вас нет бонус очков!
AES_ANEW_ALIVE = ^3Только для живых игроков!
AES_ANEW_BUYTIME = %d секунд вышло. Покупка запрещена!
AES_ANEW_GIVE = Вы взяли ^3%s^1 за ^4%d^1 бонусов.
AES_ANEW_CALL_PROBLEM = ^3Ошибка:^1 Что-то не так!
18 Фев 2019
Я проверил на втором сервере так же. поставил плагин 0.5.9 все нормально работает. только там другие команды в бонус ини. а с
Код:
[ 22] AES: Bonus CStrike 0.6-re serfreeman1337/s aes_bonus_cstri running
не работает как положено
 
Сообщения
496
Реакции
618
Помог
16 раз(а)
1) На 63 звания прописано 32 уровня.
2) Странная версия AES: Bonus CStrike
3)Создайте тему здесь https://dev-cs.ru/forums/plugins-errors/post-thread с максимально подробным описанием.

Каждое следующее сообщение по этой проблеме будет считаться нарушением правил.
 
Последнее редактирование:
Сообщения
94
Реакции
16
Помог
2 раз(а)
народ подскажите адрес css-файла и если не трудно строку куда вставить его))
вот в чем проблема думаю кто шарит поймет по скрину
 

Вложения

Сообщения
957
Реакции
1,185
Помог
52 раз(а)
ofanok, нажать Ctrl + F5 при открытом MOTD
 
Сообщения
94
Реакции
16
Помог
2 раз(а)
Sonyx, и это попробовал) не чего не происходит
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
ofanok, тогда создаем отдельную тему и в нее прикладываем все что было проделано.
 
Сообщения
95
Реакции
6
Помог
2 раз(а)
Когда обновишь до 6.0/6.1:D
ошибка которая была до этого устранена, а сообщение не удалить(
 
Последнее редактирование:
Сообщения
12
Реакции
4
Чтоб было меньше вопросов - изменения только в файле aes_bonus_cstrike.sma, остальные файлы не тронуты (версии 0.5.9 [REAPI]).
2 Sonyx В файле версия сменена, а дата старая осталась...
 
Сообщения
152
Реакции
17
Помог
2 раз(а)
Sonyx, Исправлена выдачи брони?
 
Сообщения
152
Реакции
17
Помог
2 раз(а)
Ramil85, броня не выдается.
Как перешел с 0.5.8 так броня перестала выдаваться, хоть и звание соответствует.
 
Сообщения
49
Реакции
9
Всем привет!
Такой вопрос, возможно ли использовать только систему бонусов anew?
То есть чтобы не учитывалась система званий, а только система бонусов /anew ? Спасибо!
 
Сообщения
24
Реакции
9
Всем привет!
Такой вопрос, возможно ли использовать только систему бонусов anew?
То есть чтобы не учитывалась система званий, а только система бонусов /anew ? Спасибо!
Это модульный плагин, так что:
Да, но зачем?

Тебе придется писать плагин, который бы давал игрокам те самые anew очки за определенные действия.


Или, тебе придется ждать, когда какой-нибудь энтузиаст напишет аналог Jobs Rbs под AES.
 
Сообщения
494
Реакции
109
Помог
16 раз(а)
Есть предложение,может кто сразу подскажет как сделать или добавить в будущем может настройку,что бы если у игрока есть флаг вип например ему не выдавались бонусы? Потому что допустим если игрок 2 месяца поиграет с випкой у него этих бонусов потом накапливается очень много.

Код:
/*
*    AES: CStrike Addon             v. 0.5
*    by serfreeman1337        http://1337.uz/
*/

#include <amxmodx>
#include <reapi>
#include <aes_v>

#define PLUGIN "AES: CStrike Addon"
#define VERSION "0.5.9 [REAPI]"
#define AUTHOR "serfreeman1337/sonyx"
#define LASTUPDATE "12, March (03), 2018"

#if AMXX_VERSION_NUM < 183
    #include <colorchat>

    #define print_team_default DontChange
    #define print_team_grey Grey
    #define print_team_red Red
    #define print_team_blue Blue

    #define MAX_NAME_LENGTH    32
    #define MAX_PLAYERS 32

    #define client_disconnected client_disconnect

    new MaxClients
#endif

/* - CVARS - */

enum _:cvars_num {
    CVAR_XP_KILL,
    CVAR_XP_HS,
    CVAR_XP_C4_PLANT,
    CVAR_XP_C4_EXPLODE,
    CVAR_XP_C4_DEFUSED,
    CVAR_XP_FFA,
    CVAR_XP_HOST_GOT,
    CVAR_XP_HOST_RESCUE,
    CVAR_XP_HOST_KILL,
    CVAR_XP_VIP_ESCAPED,
    CVAR_XP_VIP_KILLED,
    CVAR_XP_GOAL_MIN_PLAYERS,
    CVAR_XP_DEATH,
    CVAR_ANEW_FRAGS,
    CVAR_ANEW_HS,
    CVAR_ANEW_KNIFE,
    CVAR_ANEW_HE,
    CVAR_ANEW_REST,
    CVAR_LEVEL_BONUS,

    CVAR_RANK,
    CVAR_BONUS_ENABLE
}

new cvar[cvars_num]

/* - ADD BONUS - */

enum _:
{
    STREAK_KILLS,
    STREAK_HS,
    STREAK_KNIFE,
    STREAK_HE,

    STREAK_OPT
}

enum _:Arrays{
    Array:FRAG_ARRAY,
    Array:HS_ARRAY,
    Array:KNIFE_ARRAY,
    Array:HE_ARRAY
}

new Array: g_BonusCvars[Arrays];
new frArrSize,hsArrSize,kfArrSize,heArrSize;

new bool:is_by_stats;
new g_Planter;

new g_Players[MAX_PLAYERS + 1][STREAK_OPT];

native get_user_stats(index, stats[8], bodyhits[8]);
native get_user_stats2(index, stats[4]);

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);

    cvar[CVAR_XP_KILL] = register_cvar("aes_xp_frag","1");
    cvar[CVAR_XP_HS] = register_cvar("aes_xp_hs","2");
    cvar[CVAR_XP_C4_PLANT] = register_cvar("aes_xp_c4_plant","1");
    cvar[CVAR_XP_C4_EXPLODE] = register_cvar("aes_xp_c4_explode","3");
    cvar[CVAR_XP_C4_DEFUSED] = register_cvar("aes_xp_c4_defused","4");
    cvar[CVAR_XP_HOST_GOT] = register_cvar("aes_xp_hostage_got","1");
    cvar[CVAR_XP_HOST_RESCUE] = register_cvar("aes_xp_hostage_rescue","1");
    cvar[CVAR_XP_HOST_KILL] = register_cvar("aes_xp_hostage_kill","0");
    cvar[CVAR_XP_VIP_ESCAPED] = register_cvar("aes_xp_vip_escaped","4");
    cvar[CVAR_XP_VIP_KILLED] = register_cvar("aes_xp_vip_killed","4");
    cvar[CVAR_XP_GOAL_MIN_PLAYERS] = register_cvar("aes_xp_goal_min_players","4");

    cvar[CVAR_XP_FFA] = register_cvar("aes_xp_ffa","0");

    cvar[CVAR_ANEW_FRAGS] = register_cvar("aes_anew_frags","10 1 20 2 30 3 40 5");
    cvar[CVAR_ANEW_HS] = register_cvar("aes_anew_hs","7 1 14 2 20 3 30 4");
    cvar[CVAR_ANEW_KNIFE] = register_cvar("aes_anew_knife","1 1 2 1 3 1 4 1");
    cvar[CVAR_ANEW_HE] = register_cvar("aes_anew_he","4 1 5 1 6 1 7 2");
    cvar[CVAR_ANEW_REST] = register_cvar("aes_anew_reset","1");

    cvar[CVAR_LEVEL_BONUS] = register_cvar("aes_bonus_levelup","3");
    cvar[CVAR_XP_DEATH] = register_cvar("aes_xp_death","0");

    #if AMXX_VERSION_NUM < 183
        MaxClients = get_maxplayers();
    #endif
}

public plugin_cfg()
{
    cvar[CVAR_RANK] = get_cvar_pointer("aes_track_mode");

    if((cvar[CVAR_RANK] = get_cvar_pointer("aes_track_mode")) == 0)
        set_fail_state("cvar ^"aes_track_mode^" not found");

    RegisterHookChain(RG_CGrenade_ExplodeBomb, "CGrenade_ExplodeBomb", true);
    RegisterHookChain(RG_PlantBomb, "PlantBomb", true);
    RegisterHookChain(RG_CGrenade_DefuseBombEnd, "CGrenade_DefuseBombEnd", true);
    RegisterHookChain(RG_CBasePlayer_AddAccount, "CBasePlayer_AddAccount", true);
    RegisterHookChain(RG_CSGameRules_DeathNotice, "CSGameRules_DeathNotice", true);

    cvar[CVAR_BONUS_ENABLE] = get_cvar_pointer("aes_bonus_enable");

    if(!cvar[CVAR_BONUS_ENABLE])
        return;

    g_BonusCvars[FRAG_ARRAY] = ArrayCreate(2);
    g_BonusCvars[HS_ARRAY] = ArrayCreate(2);
    g_BonusCvars[KNIFE_ARRAY] = ArrayCreate(2);
    g_BonusCvars[HE_ARRAY] = ArrayCreate(2);

    new levelString[512];

    get_pcvar_string(cvar[CVAR_ANEW_FRAGS],levelString,charsmax(levelString));
    frArrSize = parse_aes_bonus_values(g_BonusCvars[FRAG_ARRAY],levelString);

    get_pcvar_string(cvar[CVAR_ANEW_HS],levelString,charsmax(levelString));
    hsArrSize = parse_aes_bonus_values(g_BonusCvars[HS_ARRAY],levelString);

    get_pcvar_string(cvar[CVAR_ANEW_KNIFE],levelString,charsmax(levelString));
    kfArrSize = parse_aes_bonus_values(g_BonusCvars[KNIFE_ARRAY],levelString);

    get_pcvar_string(cvar[CVAR_ANEW_HE],levelString,charsmax(levelString));
    heArrSize = parse_aes_bonus_values(g_BonusCvars[HE_ARRAY],levelString);

    if(get_pcvar_num(cvar[CVAR_RANK])== -1)
    {
        RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true);
        is_by_stats = true;
    }
}


//
// Расчет опыта по статистике игрока из CSX
//
public CBasePlayer_Spawn(const id)
{
    if(!is_user_alive(id))
        return;

    new stats[8],bprelated[4],bh[8];

    get_user_stats(id,stats,bh);
    get_user_stats2(id,bprelated);

    new Float:exp = get_exp_for_stats(stats,bprelated);
    aes_set_player_exp(id,exp,true,true);
}


//
// native Float:aes_search_exp_in_stats(stats[8],stats2[4])
//
public plugin_natives()
{
    register_native("aes_get_exp_for_stats_f","_aes_get_exp_for_stats_f");
    register_native("aes_get_exp_for_stats","_aes_get_exp_for_stats");
}

public Float:_aes_get_exp_for_stats_f(plugin_id,params)
{
    /*if(!is_by_stats)
        return -1.0;*/

    if(params != 2)
    {
        log_error(AMX_ERR_NATIVE,"bad arguments num, expected 2, passed %d",params);
        return 0.0;
    }

    new stats[8],bprelated[4];
    get_array(1,stats,sizeof stats);
    get_array(2,bprelated,sizeof bprelated);

    return get_exp_for_stats(stats,bprelated);
}

public _aes_get_exp_for_stats(plugin_id,params)
{
    if(!is_by_stats)
        return -1;

    if(params != 2)
    {
        log_error(AMX_ERR_NATIVE,"bad arguments num, expected 2, passed %d",params);
        return 0;
    }

    new stats[8],bprelated[4];
    get_array(1,stats,sizeof stats);
    get_array(2,bprelated,sizeof bprelated);

    return floatround(get_exp_for_stats(stats,bprelated));
}

Float:get_exp_for_stats(stats[8],bprelated[4])
{
    stats[0] = stats[0] - stats[2];

    new Float:exp = (float(stats[0]) * get_pcvar_float(cvar[CVAR_XP_KILL])) + (float(stats[2]) * get_pcvar_float(cvar[CVAR_XP_HS]));
    exp += (float(bprelated[2]) * get_pcvar_float(cvar[CVAR_XP_C4_PLANT])) + (float(bprelated[3]) * get_pcvar_float(cvar[CVAR_XP_C4_EXPLODE]));
    exp += float(bprelated[1]) * get_pcvar_float(cvar[CVAR_XP_C4_DEFUSED]);

    return exp;
}

public client_disconnected(id)
    if(cvar[CVAR_BONUS_ENABLE])
        arrayset(g_Players[id],0,STREAK_OPT);

public CSGameRules_DeathNotice(const victim, const killer, pevInflictor)
{
    if(!(0 < killer <= MaxClients) || killer == victim || !is_user_connected(victim) || !is_user_connected(killer))
        return;

    if(!get_pcvar_num(cvar[CVAR_XP_FFA]) && (get_member(killer, m_iTeam) == get_member(victim, m_iTeam)))
        return;

    if(get_member(victim, m_bHeadshotKilled))
        aes_add_player_exp_f(killer,get_pcvar_float(cvar[CVAR_XP_HS]));
    else
        aes_add_player_exp_f(killer,get_pcvar_float(cvar[CVAR_XP_KILL]));

    aes_add_player_exp_f(victim,get_pcvar_float(cvar[CVAR_XP_DEATH]));

    // бонусы не включены или временно не работают
    if(!cvar[CVAR_BONUS_ENABLE] || !get_pcvar_num(cvar[CVAR_BONUS_ENABLE]))
        return;

    g_Players[killer][STREAK_KILLS]++;

    new bonusPoints = 0;

    bonusPoints += get_current_player_bonuses(killer,frArrSize,0,g_BonusCvars[FRAG_ARRAY]);

    if(get_member(victim, m_bHeadshotKilled))
    {
        g_Players[killer][STREAK_HS]++;
        bonusPoints += get_current_player_bonuses(killer,hsArrSize,1,g_BonusCvars[HS_ARRAY]);
    }
    if(killer == pevInflictor && WeaponIdType:get_member(get_member(killer, m_pActiveItem), m_iId) == WEAPON_KNIFE)
    {
        g_Players[killer][STREAK_KNIFE]++;
        bonusPoints += get_current_player_bonuses(killer,kfArrSize,2,g_BonusCvars[KNIFE_ARRAY]);
    }
    else if(FClassnameIs(pevInflictor, "grenade"))
    {
        g_Players[killer][STREAK_HE]++;
        bonusPoints += get_current_player_bonuses(killer,heArrSize,3,g_BonusCvars[HE_ARRAY]);
    }

    if(get_pcvar_num(cvar[CVAR_ANEW_REST]) == 1)
        arrayset(g_Players[victim],0,STREAK_OPT);

    if(bonusPoints)
    {
        client_print_color(killer,print_team_default,"%L %L",killer,"AES_TAG",killer,"AES_ANEW_GAIN",bonusPoints);
        aes_add_player_bonus_f(killer,bonusPoints);
    }
}


// бонусы при получении нового звания
public aes_player_levelup(id)
{
    if(!cvar[CVAR_BONUS_ENABLE] || !get_pcvar_float(cvar[CVAR_LEVEL_BONUS]))
        return;

    aes_add_player_bonus_f(id,get_pcvar_num(cvar[CVAR_LEVEL_BONUS]));
}

public CGrenade_ExplodeBomb(const this, tracehandle, const bitsDamageType)
{
    addExp(g_Planter,CVAR_XP_C4_EXPLODE);
}

public PlantBomb(id, Float:vecStart[3], Float:vecVelocity[3])
{
    g_Planter = id;
    addExp(id,CVAR_XP_C4_PLANT);
}

public CGrenade_DefuseBombEnd(const this, const id, bool:bDefused)
{
    if(bDefused)
        addExp(id,CVAR_XP_C4_DEFUSED);
}

public CBasePlayer_AddAccount(const id, amount, RewardType:type, bool:bTrackChange)
{
    switch(type)
    {
      case RT_HOSTAGE_TOOK:addExp(id,CVAR_XP_HOST_GOT);
      case RT_HOSTAGE_RESCUED:addExp(id,CVAR_XP_HOST_RESCUE);
      case RT_HOSTAGE_KILLED:addExp(id,CVAR_XP_HOST_KILL);
      case RT_VIP_KILLED:addExp(id,CVAR_XP_VIP_KILLED);
      case RT_VIP_RESCUED_MYSELF:addExp(id,CVAR_XP_VIP_ESCAPED);
    }
}

// проверка на кол-во бонусных очков игрока
// cmpr - какой параметр проверяем
// Array:which - по какому массиву
public get_current_player_bonuses(id,size,cmpr,Array:which)
{
    new bonusPoints,rt[2],i;

    for(i = 0 ; i < size ; ++i)
    {
        ArrayGetArray(which,i,rt);

        if(g_Players[id][cmpr] == rt[0])
            bonusPoints += rt[1];
    }

    return bonusPoints;
}

// парсер значений бонусов в массив
public parse_aes_bonus_values(Array:which,levelString[])
{
    new stPos,ePos,rawPoint[20],rawVals[2],stState;

    // значение не задано
    if(!strlen(levelString))
        return 0;

    do {
        // ищем пробел
        ePos = strfind(levelString[stPos]," ");

        // узнаем значение с позиции stPos и длинной ePos
        formatex(rawPoint,ePos,levelString[stPos]);
        rawVals[stState] = str_to_num(rawPoint);

        stPos += ePos + 1;

        // указатель 2ой пары
        stState++;

        // два значения были найдены
        // записываем их в массив и сбрасываем указатель
        if(stState == 2)
        {
            ArrayPushArray(which,rawVals);
            stState = 0;
        }

    } while(ePos != -1)

    // возвращает кол-во 2ых пар
    return ArraySize(which);
}

addExp(id, rule)
{
    if(get_playersnum() >= get_pcvar_num(cvar[CVAR_XP_GOAL_MIN_PLAYERS]))
        aes_add_player_exp_f(id,get_pcvar_float(cvar[rule]));
}
 

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

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