Hey everybody I found this cool plugin which displays combo kills.
Works very cool, but theres one problem, it shoes me the combos of other players also. Can someone modify to see only my personal combos. And maybe implement that only users with ADMIN_LEVEL_H or flag s can see sprites.
PHP Code:
/*
Plugin generated by AMXX-Studio
Plugin: ComboSprites
Creator: Chrescoe1
Version: 0.5
Changelog:
v.0.1 - First code
v.0.2 - First Release
v.0.3 - 0.4 - Testing...
v.0.5 - BugFixing - optimize code - New Release
if you find bugs - please write me
Skype: Xailer24
Visit to Next21.ru
*/
#include <amxmodx>
#include <fakemeta>
#define PLUGIN "ComboSprites"
#define VERSION "0.5"
#define AUTHOR "Chrescoe1" //Thanks for sprites Thomas von Winkler
//Cvar's
const Float:ComboTime=4.0 //Time to combo ending
//Engine forward register
native register_think(const classname[],const func[])
//Resource
new const sprite_score[]="sprites/npc/combos1-19.spr"
new const sprite_bonus[]="sprites/npc/ef_zombiekill.spr"
new const sprite_classname[]="ef_combo"
new info_target
new sprindex_combo[33],sprindex_head[33],sprindex_knife[33],spriteindex_grenade[33],Float:LastKill[33],kill_count[33]
enum
{
Combo=0,
Head,
Knife,
Grenade
}
public plugin_precache()precache_model(sprite_score),precache_model(sprite_bonus)
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
info_target=engfunc(EngFunc_AllocString, "info_target")
register_think(sprite_classname,"delete")
register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
// Add your code here...
}
//Engine
public delete(ent)if(pev_valid(ent))engfunc(EngFunc_RemoveEntity, ent)
//Msg
public message_DeathMsg()
{
static Weapon_Msg[16], attacker, victim,head,bool:grenade
attacker=read_data(1)
victim=read_data(2)
head=read_data(3)
read_data(4,Weapon_Msg,charsmax(Weapon_Msg))
//client_print(0,print_chat,"%d %d %d %s",attacker,victim,head,Weapon_Msg) //my test message
//Killing with grenade?
contain(Weapon_Msg,"grenade")!=-1?(grenade=true):(grenade=false)
if(!is_user_connected(attacker))return
if(!is_user_connected(victim))return
static Float:Origin[3],Float:RGB[3],i
pev(victim,pev_origin,Origin);Origin[2]=Origin[2]+90.0
//Random color
for(i=0;i<3;i++)RGB[i]=random_float(0.0,255.0)
//Don't dark color!
if(RGB[0]<150.0&&RGB[1]<150.0&&RGB[2]<150.0)RGB[random_num(0,2)]=255.0
//Remove old sprites
static ent
ent=sprindex_head[attacker];if(ef_valid(ent,attacker))engfunc(EngFunc_RemoveEntity, ent)
ent=sprindex_knife[attacker];if(ef_valid(ent,attacker))engfunc(EngFunc_RemoveEntity, ent)
if(!grenade) //Don't remove old sprites after GrenadeKill
{
ent=sprindex_combo[attacker];if(ef_valid(ent,attacker))engfunc(EngFunc_RemoveEntity, ent)
ent=spriteindex_grenade[attacker];if(ef_valid(ent,attacker))engfunc(EngFunc_RemoveEntity, ent)
}
static Float:gametime;gametime=get_gametime()
if(LastKill[attacker]-gametime>0.0)kill_count[attacker]++;else kill_count[attacker]=1
LastKill[attacker]=gametime+ComboTime
//Combo Sprite
sprindex_combo[attacker]=ef_spr(Combo,Origin,kill_count[attacker]<20?(kill_count[attacker]-1.0):(19.0),RGB,attacker)
//Bonus Sprite
RGB[0]=255.0;RGB[1]=0.0;RGB[2]=0.0 //Red Color!
if (grenade)
Origin[2]=Origin[2]-30.0,
spriteindex_grenade[attacker]=ef_spr(Grenade,Origin,2.0,RGB,attacker)
else
{
if(head)
Origin[2]=Origin[2]-30.0,
sprindex_head[attacker]=ef_spr(Head,Origin,0.0,RGB,attacker)
if (contain(Weapon_Msg,"knife")!=-1)
Origin[2]=Origin[2]-30.0,
sprindex_knife[attacker]=ef_spr(Knife,Origin,1.0,RGB,attacker)
}
}
//Stock
stock ef_spr(type,Float:Origin[3],Float:frame,Float:Color[3],attacker)
{
new ient =
engfunc(EngFunc_CreateNamedEntity, info_target)
switch(type)
{
case Combo:engfunc(EngFunc_SetModel,ient, sprite_score)
case Head:engfunc(EngFunc_SetModel,ient, sprite_bonus)
case Knife:engfunc(EngFunc_SetModel,ient, sprite_bonus)
case Grenade:engfunc(EngFunc_SetModel,ient, sprite_bonus)
}
set_pev(ient, pev_classname, sprite_classname)
set_pev(ient, pev_movetype, MOVETYPE_NOCLIP)
set_pev(ient,pev_gravity,0.0001)
set_pev(ient,pev_solid,SOLID_TRIGGER)
set_pev(ient, pev_rendermode, kRenderTransAdd)
set_pev(ient, pev_renderamt, 250.0)
set_pev(ient, pev_nextthink,get_gametime()+ComboTime)
set_pev(ient,pev_origin,Origin)
set_pev(ient,pev_iuser1,attacker)
set_pev(ient,pev_rendercolor,Color)
set_pev(ient, pev_scale, 0.4)
set_pev(ient, pev_framerate, 0.0)
set_pev(ient, pev_frame,frame)
return ient
}
stock bool: ef_valid(ent,id)
{
if(!ent||!id)return false
if(!pev_valid(ent))return false
if(pev(ent,pev_iuser1)!=id)return false
static ClassName[30]
pev(ent, pev_classname, ClassName, charsmax(ClassName))
if (contain(ClassName, sprite_classname ) != -1)return true
return false
}