/*
* Обновление 28.09.2014
* v1.1 -
Исправлены ошибки
Оптимизирован код
Выдавание бонусов теперь по очереди
Добавлено приветственное DHUD сообщение
*
* Обновление 06.03.2015
* v1.2 -
Исправлено предупреждение при компиляции на AMXX ниже 1.8.3
Добавлен вывод второго DHUD сообщения, чтобы помещался ник
*
* Обновление 05.07.2017
* v1.2.1 -
Добавлена выдача флагов
*/
#include <amxmodx>
#include <fun>
#include <cstrike>
#include <hamsandwich>
#include <dhudmessage>
#if AMXX_VERSION_NUM < 183
#include <colorchat>
#define client_print_color ColorChat
#define print_team_red RED
#endif
#pragma semicolon 1
#define PLUGIN "Steam Bonus"
#define VERSION "1.2.1" // edit by pUzzlik
#define AUTHOR "Stimul"
#define PREFIX "[Steam бонус]"
#define get_bit(%1,%2) (%1 & (1 << (%2 & 31)))
#define set_bit(%1,%2) (%1 |= (1 << (%2 & 31)))
#define reset_bit(%1,%2) (%1 &= ~(1 << (%2 & 31)))
// Цвет DHUD сообщения
#define COLOR_RED random(255) // Количество красного цвета
#define COLOR_GREEN random(255) // Количество зелёного цвета
#define COLOR_BLUE random(255) // Количество синего цвета
#define TIME 8.0 // Время показа
#define SET_FLAGS "r" // Какие флаги выдавать стим игроку (Пример: "at")
new g_bIsConnected;
new g_bIsSteam;
new g_bProcedure;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
RegisterHam(Ham_CS_RoundRespawn, "player", "fw_CS_RoundRespawn_Post", true);
}
public client_putinserver(id)
{
set_bit(g_bIsConnected, id);
if(is_user_steam(id))
{
set_bit(g_bIsSteam, id);
reset_bit(g_bProcedure, id);
new flags = get_user_flags(id)|read_flags(SET_FLAGS);
set_user_flags(id, flags);
set_task(3.0, "WelcomeMessage", id);
}
else
reset_bit(g_bIsSteam, id);
}
public client_disconnect(id)
reset_bit(g_bIsConnected, id);
public WelcomeMessage(id)
{
if(get_bit(g_bIsConnected, id))
{
static szName[32];
get_user_name(id, szName, charsmax(szName));
set_dhudmessage(COLOR_RED, COLOR_GREEN, COLOR_BLUE, -1.0, 0.12, 0, 0.0, TIME);
show_dhudmessage(id, "Привет, %s!", szName);
set_dhudmessage(COLOR_RED, COLOR_GREEN, COLOR_BLUE, -1.0, 0.15, 0, 0.0, TIME);
show_dhudmessage(id, "У тебя Steam, поэтому каждый раунд ты будешь получать бонусы");
}
}
public fw_CS_RoundRespawn_Post(id)
{
if(get_bit(g_bIsConnected, id) && get_bit(g_bIsSteam, id))
{
if(!get_bit(g_bProcedure, id))
{
give_item(id, "weapon_hegrenade");
give_item(id, "weapon_flashbang");
cs_set_user_bpammo(id, CSW_FLASHBANG, 2);
give_item(id, "weapon_smokegrenade");
cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM);
if(cs_get_user_team(id) == CS_TEAM_CT)
cs_set_user_defuse(id,1,0,160,0,_,0);
client_print_color(id, print_team_red, "^3%s ^1Ты получаешь бонус: ^4все гранаты и броню", PREFIX);
reset_bit(g_bProcedure, id);
}
else
{
give_item(id, "weapon_hegrenade");
give_item(id, "weapon_flashbang");
cs_set_user_bpammo(id, CSW_FLASHBANG, 2);
give_item(id, "weapon_smokegrenade");
cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM);
if(cs_get_user_team(id) == CS_TEAM_CT)
cs_set_user_defuse(id,1,0,160,0,_,0);
client_print_color(id, print_team_red, "^3%s ^1Ты получаешь бонус: ^4все гранаты и броню", PREFIX);
reset_bit(g_bProcedure, id);
}
}
}
stock bool:is_user_steam(id)
{
static dp_pointer;
if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
{
server_cmd("dp_clientinfo %d", id);
server_exec();
return (get_pcvar_num(dp_pointer) == 2) ? true : false;
}
new szAuthid[34];
get_user_authid(id, szAuthid, charsmax(szAuthid));
return (containi(szAuthid, "LAN") < 0);
}