Код за потвърждение: Избери целия код
#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=5.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
}