// 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
}