Иконка ресурса

HLDM Damager 0.9.7

Нет прав для скачивания
Код:
#include <amxmodx>
#include <hamsandwich>

#define VERSION "0.9.7"

#define MAXPLAYERS 32
#define DMG_ENERGYBEAM (1<<10) // Laser or other high energy beam
#define HLW_GAUSS 9 // Half-Life "weapon_gauss"
#define HLW_EGON 10 // Half-Life "weapon_egon"
#define CHANNEL_HUD_EGON 1 // Разезервированный HUD-канал для EGON

new const THECFGFILE[] = "addons/amxmodx/configs/damager_hldm.cfg"

new const Float:g_coordinates[][] =
{
    {0.50, 0.40},
    {0.56, 0.44},
    {0.60, 0.50},
    {0.56, 0.56},
    {0.50, 0.60},
    {0.44, 0.56},
    {0.40, 0.50},
    {0.44, 0.44}
}

new const g_enterstep[][] =
{
    "%d^n^n", "^n%d^n", "^n^n%d", "^n%d^n"
}

new g_iPlayerPos[MAXPLAYERS+1], g_PlayerEgonAddPos[MAXPLAYERS+1], me_combo[MAXPLAYERS+1]
new Float:me_last_damage_time[MAXPLAYERS+1][MAXPLAYERS+1]
new my_weapon_in_hand[MAXPLAYERS+1];

new dmg_info_color[3], dmg_victim_i_color[3] // red, green, blue
new cvar_damager_enable, cvar_dmg_info_colors, cvar_dmg_victim_i_colors, cvar_dmg_info_random, cvar_accum_time, cvar_hud_tick_egon_show

public plugin_init()
{
    register_plugin("Damager Half-Life DM", VERSION, "Leo_[BH]")

    cvar_damager_enable = register_cvar("damager_enable", "1");
    cvar_dmg_info_colors = register_cvar("damager_color", "0 255 0");
    cvar_dmg_victim_i_colors = register_cvar("damager_color_victim", "255 0 0");
    cvar_dmg_info_random = register_cvar("damager_random_color", "0");
    cvar_accum_time = register_cvar("damager_accum_time", "0.5");
    cvar_hud_tick_egon_show = register_cvar("damager_egon_show_tick", "0");
    
    register_event("CurWeapon", "checkWeapon", "be", "1=1")
    
    RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage_Post", 1)
}

new linetext[][] = {
"// Enable damage hud info? 1 - enable; 0 - disable.",
"// Включить информацию об уроне в интерфейсе? 1 - включено; 0 - отключено.",
"damager_enable ^"1^"",
"",
"// Set attacker damage hud info colors {Red, Gree, Blue} (0-255)",
"// Задать цвета информации об уроне атакующему {Красный, Зеленый, Синий} (0-255)",
"damager_color ^"0 255 0^"",
"",
"// Set victim damage hud info colors {Red, Gree, Blue} (0-255)",
"// Задать цвета информации об уроне жертве {Красный, Зеленый, Синий} (0-255)",
"damager_color_victim ^"255 0 0^"",
"",
"// If enabled, colors will be set random and ignore previous colors variables",
"// Если включено, то цвет будет каждый раз случайный, а предыдущие переменные по цвету будут игнорироваться",
"damager_random_color ^"0^"",
"",
"// How many seconds have accumulated damage in one display (only for the gluon cannon and gauss) ",
"// За сколько прошедших секунд аккумулировать урон в одно отображение (функция только для глюон-пушки и гаусс-пушки)",
"damager_accum_time ^"0.5^"",
"",
"// Show additional damage info from weapon_egon",
"// Показывать дополнительно урон от глюон-пушки справа от прицела в столбик",
"damager_egon_show_tick ^"0^"",
"",
"// Автор плагина: Leo_BH"
}

public plugin_cfg()
{
    if(!file_exists(THECFGFILE))
    {
        for(new i = 0; i < sizeof(linetext); i++)
        {
            write_file(THECFGFILE, linetext[i]);
        }
    }
    
    server_cmd("exec %s", THECFGFILE)
    reload_vars()
}

public reload_vars()
{
    if(get_pcvar_num(cvar_dmg_info_random))
    {
        dmg_info_color[0] = random_num(0, 255)
        dmg_info_color[1] = random_num(0, 255)
        dmg_info_color[2] = random_num(0, 255)
        
        dmg_victim_i_color[0] = random_num(0, 255)
        dmg_victim_i_color[1] = random_num(0, 255)
        dmg_victim_i_color[2] = random_num(0, 255)
    }
    else
    {
        new szColor[12], szRed[4], szGreen[4], szBlue[4]
        
        get_pcvar_string(cvar_dmg_info_colors, szColor, charsmax(szColor))
        parse(szColor, szRed, charsmax(szRed), szGreen, charsmax(szGreen), szBlue, charsmax(szBlue))
        
        dmg_info_color[0] = clamp(str_to_num(szRed), 0, 255)
        dmg_info_color[1] = clamp(str_to_num(szGreen), 0, 255)
        dmg_info_color[2] = clamp(str_to_num(szBlue), 0, 255)
        
        get_pcvar_string(cvar_dmg_victim_i_colors, szColor, charsmax(szColor))
        parse(szColor, szRed, charsmax(szRed), szGreen, charsmax(szGreen), szBlue, charsmax(szBlue))
        
        dmg_victim_i_color[0] = clamp(str_to_num(szRed), 0, 255)
        dmg_victim_i_color[1] = clamp(str_to_num(szGreen), 0, 255)
        dmg_victim_i_color[2] = clamp(str_to_num(szBlue), 0, 255)
    }
}

// // // // // // // // // // // // // // //

public checkWeapon(id)
{
    if(!is_user_alive(id))
        return PLUGIN_CONTINUE

    my_weapon_in_hand[id] = read_data(2)
    
    return PLUGIN_CONTINUE
}

// // // // // // // // // // // // // // //

public fw_TakeDamage_Post(victim, inflictor, attacker, Float:damage, damage_type)
{
    if(!is_user_connected(victim)) return HAM_IGNORED;
    if(!is_user_connected(attacker)) return HAM_IGNORED;
    
    if(!get_pcvar_num(cvar_damager_enable)){
        return HAM_IGNORED; // if damager disabled - return;
    }
    
    reload_vars()
    
    new Float:gametime = get_gametime()
    
    if(me_last_damage_time[attacker][victim] + get_pcvar_float(cvar_accum_time) < gametime)
    {
        me_combo[attacker] = 0
    }
    
    me_last_damage_time[attacker][victim] = gametime
    
    new dmgnum = floatround(damage)
    
    if(dmgnum < 1) return HAM_IGNORED;
    
    me_combo[attacker] += dmgnum
    
    if(my_weapon_in_hand[attacker] == HLW_EGON && damage_type & DMG_ENERGYBEAM)
    {
        egon_show_damage(attacker, dmgnum)
        egon_show_victim_damage(victim, dmgnum, attacker)
    }
    else if(my_weapon_in_hand[attacker] == HLW_GAUSS)
    {
        show_damage(attacker, dmgnum)
        show_victim_damage(victim, dmgnum)
    }
    else
    {
        show_damage(attacker, dmgnum)
        show_victim_damage(victim, dmgnum)
    }

    return HAM_IGNORED;
}

public egon_show_damage(id, damage)
{
    if(!is_user_connected(id)) return;
    if(is_user_bot(id)) return;
    
    new thisPos = g_iPlayerPos[id]
    
    set_hudmessage(dmg_info_color[0], dmg_info_color[1], dmg_info_color[2], Float:g_coordinates[thisPos][0], Float:g_coordinates[thisPos][1], 0, 0.0, 3.0, 0.0, 2.0, CHANNEL_HUD_EGON);
    show_hudmessage(id, "%d", me_combo[id])
    
    if(get_pcvar_num(cvar_hud_tick_egon_show)) {
        hud_tick_egon(id, damage)
    }
}

public egon_show_victim_damage(id, damage, attacker)
{
    if(!is_user_connected(id)) return;
    if(is_user_bot(id)) return;
    
    new thisPos = g_iPlayerPos[id]
    
    set_hudmessage(dmg_victim_i_color[0], dmg_victim_i_color[1], dmg_victim_i_color[2], Float:g_coordinates[thisPos][0], Float:g_coordinates[thisPos][1], 0, 0.0, 3.0, 0.0, 2.0, CHANNEL_HUD_EGON);
    show_hudmessage(id, "%d", me_combo[attacker])
}

public hud_tick_egon(id, damage) // Special HUD
{
    set_hudmessage(0, 255, 255, 0.60, -1.0, 0, 6.0, 0.1, 0.00, 0.2);
    
    new iePos = ++g_PlayerEgonAddPos[id]

    if( iePos == sizeof(g_enterstep) )
    {
        iePos = g_PlayerEgonAddPos[id] = 0
    }
    
    show_hudmessage(id, g_enterstep[iePos], damage);
}

public show_damage(id, damage)
{
    if(!is_user_connected(id)) return;
    if(is_user_bot(id)) return;

    new iPos = ++g_iPlayerPos[id]
    
    if( iPos == sizeof(g_coordinates) )
    {
        iPos = g_iPlayerPos[id] = 0
    }
    
    set_hudmessage(dmg_info_color[0], dmg_info_color[1], dmg_info_color[2], Float:g_coordinates[iPos][0], Float:g_coordinates[iPos][1], 0, 0.1, 2.0, 0.02, 1.0, -1);
    show_hudmessage(id, "%d", damage)
}

public show_victim_damage(id, damage)
{
    if(!is_user_connected(id)) return;
    if(is_user_bot(id)) return;

    new iPos = ++g_iPlayerPos[id]
    
    if( iPos == sizeof(g_coordinates) )
    {
        iPos = g_iPlayerPos[id] = 0
    }
    
    set_hudmessage(dmg_victim_i_color[0], dmg_victim_i_color[1], dmg_victim_i_color[2], Float:g_coordinates[iPos][0], Float:g_coordinates[iPos][1], 0, 0.1, 2.0, 0.02, 1.0, -1);
    show_hudmessage(id, "%d", damage)
}

public client_connect(id)
{
    for(new i = 0; i < 33; i++) me_last_damage_time[id][i] = 0.0
    
    me_combo[id] = 0
    
    g_iPlayerPos[id] = random_num(0, charsmax(g_coordinates))
    
    my_weapon_in_hand[id] = 0
}

// = = = = = = = = = = = = = = = = = =
// Автор плагина: Leo_[BH]
// = = = = = = = = = = = = = = = = = =
Назад
Верх