Combo On Kill

Combo On Kill 0.2

Нет прав для скачивания
Код:
// Copyright 2019 Vaqtincha

/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG START ■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/

// путь спрайта
new const COMBO_SPRITE[] = "sprites/npc/combos1-19.spr"

// Чтобы задать постоянный цвет (и убрать рандом) спрайта раскомментируйте и укажите нужный.
// #define SET_DEFAULT_COLOR     Float:{ 0.0, 235.0, 0.0 }


// Время комбо - по истечению времени(5сек)
// после убийства если вы не совершите новое то счётчик убийств обнулится
#define COMBO_TIME             5   

/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG END ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/

// рандом цвет
#if !defined SET_DEFAULT_COLOR
    new const Float:g_vecColors[][3] =
    {
        { 0.0, 127.0, 255.0 },
        { 0.0, 255.0, 127.0 },
        { 255.0, 0.0, 0.0 },
        { 255.0, 127.0, 0.0 },
        { 127.0, 0.0, 255.0 },
        { 255.0, 100.0, 150.0 },
        { 255.0, 255.0, 255.0 },
        { 255.0, 155.0, 55.0 },
        { 0.0, 255.0, 255.0 },
        { 0.0, 255.0, 0.0 }
        // { 0.0, 0.0, 100.0 }
    }
#endif

#define PL_VERSION     "0.2"

#include <amxmodx>
#include <reapi>
#include <fakemeta>


#define EF_OWNER_VISIBILITY            (1<<12)    // visibility for owner
// added https://github.com/s1lentq/ReGameDLL_CS/commit/69250cf2c1058334c848d9896314a4a98d3bc1d5



public plugin_precache() {
    precache_model(COMBO_SPRITE)
}

public plugin_init()
{
    register_plugin("Combo On Kill", PL_VERSION, "Vaqtincha")
  
    RegisterHookChain(RG_CSGameRules_DeathNotice, "CSGameRules_DeathNotice", .post = true)
    RegisterHookChain(RG_CSGameRules_RestartRound, "CSGameRules_RestartRound", .post = true)
}

public CSGameRules_RestartRound()
{
    new pSpriteEntity = NULLENT

    while((pSpriteEntity = rg_find_ent_by_class(pSpriteEntity, "env_sprite")))
    {
        if (get_entvar(pSpriteEntity, var_owner) > 0) {
            RemoveSprite(pSpriteEntity)
        }
    }
}

public CSGameRules_DeathNotice(const pPlayer, const pKiller, const pevInflictor)
{
    if (pPlayer == pKiller || !is_user_connected(pKiller) || is_user_bot(pKiller))
        return HC_CONTINUE
  
    static Float:flLastKill[MAX_CLIENTS + 1], iCountKill[MAX_CLIENTS + 1]
    new Float:flTime = get_gametime()

    if ((flTime - flLastKill[pKiller]) > COMBO_TIME.0)
    {
        iCountKill[pKiller] = 0
    }
  
    iCountKill[pKiller]++
  
    if (iCountKill[pKiller] > 1)
    {
        new Float:vecOrigin[3]

        get_entvar(pPlayer, var_origin, vecOrigin)
        // GetBonePosition(pPlayer, 8, vecOrigin)
        vecOrigin[2] += 32.0

        new pSpriteEntity = CreateSprite(pKiller, vecOrigin)

        if (pSpriteEntity != NULLENT)
        {
            new Float:vecOrigin2[3]
            get_entvar(pKiller, var_origin, vecOrigin2)

            new Float:fScale = floatclamp((get_distance_f(vecOrigin, vecOrigin2) / 2000.0), 0.1, 0.6)
          
            set_entvar(pSpriteEntity, var_scale, fScale)
            set_entvar(pSpriteEntity, var_frame, float(iCountKill[pKiller]) - 1.0)
          
            vecOrigin[0] = vecOrigin[1] = 0.0
            vecOrigin[2] = 180.0 * fScale
          
            set_entvar(pSpriteEntity, var_velocity, vecOrigin)
          
            SetThink(pSpriteEntity, "SpriteThink")
            set_entvar(pSpriteEntity, var_nextthink, get_gametime() + 0.1)
        }
    }

    flLastKill[pKiller] = flTime

    return HC_CONTINUE
}

public SpriteThink(const pSpriteEntity)
{
    if (pSpriteEntity <= 0)
        return

    static Float:renderamt

    if ((renderamt = get_entvar(pSpriteEntity, var_renderamt)) > 10.0)
    {
        set_entvar(pSpriteEntity, var_renderamt, renderamt - 10.0)
        set_entvar(pSpriteEntity, var_nextthink, get_gametime() + 0.1)
    }
    else
    {
        RemoveSprite(pSpriteEntity)
    }
}

RemoveSprite(const pSpriteEntity)
{
    SetThink(pSpriteEntity, "")
    set_entvar(pSpriteEntity, var_nextthink, -1.0)
    engfunc(EngFunc_RemoveEntity, pSpriteEntity)
    // set_entvar(pEntity, var_flags, FL_KILLME)
}

CreateSprite(const pPlayer, Float:vecOrigin[3])
{
    new pSpriteEntity = rg_create_entity("env_sprite")

    if (!is_nullent(pSpriteEntity))
    {
        engfunc(EngFunc_SetModel, pSpriteEntity, COMBO_SPRITE)
        engfunc(EngFunc_SetOrigin, pSpriteEntity, vecOrigin)

        set_entvar(pSpriteEntity, var_owner, pPlayer)     
        set_entvar(pSpriteEntity, var_movetype, MOVETYPE_NOCLIP)
        set_entvar(pSpriteEntity, var_effects, EF_OWNER_VISIBILITY)
        set_entvar(pSpriteEntity, var_rendermode, kRenderTransAdd)
        // set_entvar(pSpriteEntity, var_renderfx, kRenderFxGlowShell)
      
#if defined    SET_DEFAULT_COLOR
        set_entvar(pSpriteEntity, var_rendercolor, SET_DEFAULT_COLOR)
#else
        set_entvar(pSpriteEntity, var_rendercolor, g_vecColors[random(sizeof(g_vecColors))])
#endif
        set_entvar(pSpriteEntity, var_renderamt, 255.0)

        return pSpriteEntity
    }
  
    return NULLENT
}
Назад
Верх