#if defined _steam_bonus_included
#endinput
#endif
#define _steam_bonus_included
enum
{
INVALID_BONUS = -1
}
// SBD - Steam Bonus Data
enum
{
// Идентификатор бонуса. Строка, максимальный размер 32
SBD_IDENTIFIER,
// Название бонуса в меню, поддерживается как тест так и ключ словаря мультиязычности
// Строка, максимальный размер 128
SBD_MENU_ITEM_NAME,
// Функция, вызываемая для каждого бонуса перед показом меню,
// позвляя менять название бонуса в меню динамически и делать пункт меню неактивным (тоже самое что callback в newmenus)
// Строка, максимальный размер 32
SBD_MENU_ITEM_NAME_CALLBACK,
// Стоимость бонуса в начисляемых бонусных очках
// Число. Диапазон значений: от 0 и выше
SBD_COST_IN_POINTS,
// Функция, которая реализует выдачу бонуса
// Строка, максимальный размер 32
SBD_GIVE_BONUS_FUNC
}
/**
* Функция создает Steam бонус с заданным идентификатором и позицией.
*
* @param bonus_identifier строковый массив задающий идентификатор бонуса (внутреннее имя)
* @param insert_before_index позиция (индекс) в которую будет помещен создаваемый бонус со сдвигом
* вперед (режим вставки)
*
* @return Функция возращает значения:
* индекс созданного бонуса
* INVALID_BONUS - если превышено максимальное число бонусов или bonus_identifier пустая строка
*
* @error Сообщение об ошибке будет выдано в следующих случаях:
* если превышено максимальное число бонусов
* если bonus_identifier пустая строка
*/
native sb_create_bonus(const bonus_identifier[32], insert_before_index = -1);
/**
* Функция позволяет удалить бонус по указанному индексу
*
* @param bonus_index индекс бонуса
*
* @return Функция возращает значения:
* 1 - если удаление прошло успешно
* 0 - если нет ни одного бонуса
* INVALID_BONUS - если индекс бонуса выходит за допустимые пределы
*
* @error Сообщение об ошибке будет выдано в следующих случаях:
* если индекс бонуса выходит задопустимые пределы
*/
native sb_remove_bonus(bonus_index);
/**
* Функция позволяет получить общее число бонусов
*
* @return Функция возращает общее число бонусов
*/
native sb_get_bonuses_num();
/**
* Функция с помощью которой можно изменять данные бонуса по его индексу.
*
* @param bonus_index индекс бонуса
* @param bonus_data_index индекс данных бонуса (см константы с префиксом SBD_)
*
* @return Функция возращает значения:
* 1 - если изменение прошло успешно
* 0 - если возникли ошибки в процессе изменения из-за некорретности данных
* INVALID_BONUS - если индекс бонуса выходит за допустимые пределы
*
* @error Сообщение об ошибке будет выдано в следующих случаях:
* если индекс бонуса выходит задопустимые пределы
* если индекс данных бонуса выходит задопустимые пределы
* если количество переданных аргментов меньше 3-х
* если функция не была найдена (для SBD_MENU_ITEM_NAME_CALLBACK и SBD_GIVE_BONUS_FUNC)
*/
native sb_set_bonus_data(bonus_index, bonus_data_index, ...);
/**
* Функция позволяет получить индекс бонуса по его идентификатору
*
* @param bonus_identifier строковый массив задающий идентификатор бонуса (внутреннее имя)
*
* @return Функция возращает значения:
* индекс найденного бонуса
* INVALID_BONUS - если бонус с указанным идентификатором не найден
*/
native sb_get_bonus_index(const bonus_identifier[32]);
/**
* Функция позволяет получить идентификатор бонуса по его индексу
*
* @param bonus_identifier строковый массив, в который будет записан идентификатор бонуса (внутреннее имя)
* @param size количество символов, которые будут записаны в bonus_identifier
*
* @return Функция возращает значения:
* 1 - если получение прошло успешно
* INVALID_BONUS - если индекс бонуса выходит за допустимые пределы
*
* @error Сообщение об ошибке будет выдано в следующих случаях:
* если индекс бонуса выходит задопустимые пределы
*/
native sb_get_bonus_identifier(bonus_index, bonus_identifier[], size);
#include <amxmodx>
#include <fun>
#include <steam_bonus>
#define PLUGIN "Steam Bonus Example"
#define VERSION "1.0.0"
#define AUTHOR "Radius"
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
// Удаляем стандартные бонусы гранат находя их индекс по идентификатору
sb_remove_bonus(sb_get_bonus_index("hegren"));
sb_remove_bonus(sb_get_bonus_index("flash"));
sb_remove_bonus(sb_get_bonus_index("sgren"));
new bonus_index = sb_create_bonus("grenades_full_pack");
sb_set_bonus_data(bonus_index, SBD_MENU_ITEM_NAME, "Полный набор гранат");
sb_set_bonus_data(bonus_index, SBD_MENU_ITEM_NAME_CALLBACK, "give_grenades_callback");
sb_set_bonus_data(bonus_index, SBD_COST_IN_POINTS, 1);
sb_set_bonus_data(bonus_index, SBD_GIVE_BONUS_FUNC, "give_grenades");
// Расскомментировать если нужно узнать весь список индентификаторов
/*
new steam_bonuses_num = sb_get_bonuses_num();
new bonus_identifier[32];
for (new i; i < steam_bonuses_num; i++) {
sb_get_bonus_identifier(i, bonus_identifier, charsmax(bonus_identifier));
log_amx("[%d] bonus_identifier = '%s'", i, bonus_identifier);
}
*/
}
public give_grenades_callback(id, menu, item)
{
new item_status = ITEM_ENABLED;
if (user_has_weapon(id, CSW_HEGRENADE) && user_has_weapon(id, CSW_FLASHBANG) && user_has_weapon(id, CSW_SMOKEGRENADE)) {
item_status = ITEM_DISABLED;
}
return item_status;
}
public give_grenades(id)
{
give_item(id, "weapon_hegrenade");
give_item(id, "weapon_flashbang");
give_item(id, "weapon_flashbang");
give_item(id, "weapon_smokegrenade");
return 1;
}