HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /* Plugin generated by AMXX-Studio */
  2.  
  3. #include <amxmodx>
  4. #include <fakemeta>
  5.  
  6. #define PLUGIN "ComboSprites"
  7. #define VERSION "0.2"
  8. #define AUTHOR "Chrescoe1" //Thanks for sprites Thomas von Winkler
  9.  
  10. //Engine
  11. native register_think(const classname[],const func[])
  12.  
  13. new const sprite_score[]="sprites/npc/combos1-19.spr"
  14. new const sprite_bonus[]="sprites/npc/ef_zombiekill.spr"
  15. new const sprite_classname[]="ef_combo"
  16.  
  17. new info_target
  18. new sprindex_combo[33],sprindex_head[33],sprindex_knife[33],spriteindex_grenade[33],Float:LastKill[33],kill_count[33],Float:GrenadeTime[33][33]
  19. const Float:ComboTime=5.0
  20.  
  21. enum
  22. {
  23. Combo=0,
  24. Head,
  25. Knife,
  26. Grenade
  27. }
  28.  
  29. public plugin_precache()precache_model(sprite_score),precache_model(sprite_bonus)
  30. public plugin_init()
  31. {
  32. register_plugin(PLUGIN, VERSION, AUTHOR)
  33. register_event("DeathMsg", "Event_Death", "a", "1>0")
  34. register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
  35.  
  36. register_think(sprite_classname,"delete")
  37.  
  38. info_target=engfunc(EngFunc_AllocString, "info_target")
  39. // Add your code here...
  40. }
  41. public message_DeathMsg(msg_id, msg_dest, id)
  42. {
  43. static Weapon_Msg[16], attacker, victim
  44. get_msg_arg_string(4, Weapon_Msg, charsmax(Weapon_Msg))
  45.  
  46. attacker = get_msg_arg_int(1)
  47. victim = get_msg_arg_int(2)
  48. if (contain(Weapon_Msg,"grenade")!=-1)GrenadeTime[attacker][victim]=get_gametime()+0.1
  49. }
  50.  
  51. public Event_Death()
  52. {
  53. static id,victim,head,Float:gametime,Float:Origin[3]
  54. id=read_data(1);victim=read_data(2);head=read_data(3)
  55. gametime=get_gametime()
  56.  
  57. if(!is_user_connected(id))return
  58.  
  59. static ent
  60. if(GrenadeTime[id][victim]<gametime)
  61. {
  62. ent=sprindex_combo[id];if(ef_valid(ent,id))engfunc(EngFunc_RemoveEntity, ent)
  63. ent=spriteindex_grenade[id];if(ef_valid(ent,id))engfunc(EngFunc_RemoveEntity, ent)
  64. }
  65. ent=sprindex_head[id];if(ef_valid(ent,id))engfunc(EngFunc_RemoveEntity, ent)
  66. ent=sprindex_knife[id];if(ef_valid(ent,id))engfunc(EngFunc_RemoveEntity, ent)
  67.  
  68. if(LastKill[id]-gametime>0.0)kill_count[id]++;else kill_count[id]=1
  69. LastKill[id]=gametime+ComboTime
  70.  
  71. pev(victim,pev_origin,Origin);Origin[2]=Origin[2]+90.0
  72.  
  73. static Float:RGB[3]
  74. RGB[0]=random_float(0.0,255.0)
  75. RGB[1]=random_float(0.0,255.0)
  76. RGB[2]=random_float(0.0,255.0)
  77.  
  78. if(RGB[0]<200.0&&RGB[1]<200.0&&RGB[2]<200.0)
  79. switch(random_num(1,3))
  80. {
  81. case 1:RGB[0]=255.0
  82. case 2:RGB[1]=255.0
  83. case 3:RGB[2]=255.0
  84. }
  85. sprindex_combo[id]=ef_spr(Combo,Origin,kill_count[id]<20?(kill_count[id]-1.0):(19.0),RGB,id)
  86.  
  87. RGB[0]=255.0;RGB[1]=0.0;RGB[2]=0.0
  88. if(GrenadeTime[id][victim]>gametime)
  89. {
  90. Origin[2]=Origin[2]-30.0
  91. spriteindex_grenade[id]=ef_spr(Grenade,Origin,2.0,RGB,id)
  92. return
  93. }
  94. if(head)
  95. {
  96. Origin[2]=Origin[2]-30.0
  97. sprindex_head[id]=ef_spr(Head,Origin,0.0,RGB,id)
  98. }
  99. if(get_user_weapon(id)==CSW_KNIFE)
  100. {
  101. Origin[2]=Origin[2]-30.0
  102. sprindex_knife[id]=ef_spr(Knife,Origin,1.0,RGB,id)
  103. }
  104. }
  105. stock ef_spr(type,Float:Origin[3],Float:frame,Float:Color[3],id)
  106. {
  107. new ient =
  108. engfunc(EngFunc_CreateNamedEntity, info_target)
  109. switch(type)
  110. {
  111. case Combo:engfunc(EngFunc_SetModel,ient, sprite_score)
  112. case Head:engfunc(EngFunc_SetModel,ient, sprite_bonus)
  113. case Knife:engfunc(EngFunc_SetModel,ient, sprite_bonus)
  114. case Grenade:engfunc(EngFunc_SetModel,ient, sprite_bonus)
  115. }
  116. set_pev(ient, pev_classname, sprite_classname)
  117. set_pev(ient, pev_movetype, MOVETYPE_NOCLIP)
  118. set_pev(ient,pev_gravity,0.0001)
  119. set_pev(ient,pev_solid,SOLID_TRIGGER)
  120. set_pev(ient, pev_rendermode, kRenderTransAdd)
  121. set_pev(ient, pev_renderamt, 250.0)
  122. set_pev(ient, pev_nextthink,get_gametime()+ComboTime)
  123. set_pev(ient,pev_origin,Origin)
  124. set_pev(ient,pev_iuser1,id)
  125. set_pev(ient,pev_rendercolor,Color)
  126. set_pev(ient, pev_scale, 0.4)
  127. set_pev(ient, pev_framerate, 0.0)
  128. set_pev(ient, pev_frame,frame)
  129. return ient
  130. }
  131. stock bool: ef_valid(ent,id)
  132. {
  133. if(!ent||!id)return false
  134. if(!pev_valid(ent))return false
  135. if(pev(ent,pev_iuser1)!=id)return false
  136.  
  137. static ClassName[30]
  138. pev(ent, pev_classname, ClassName, charsmax(ClassName))
  139. if (contain(ClassName, sprite_classname ) != -1)return true
  140. return false
  141. }
  142. public delete(ent)if(pev_valid(ent))engfunc(EngFunc_RemoveEntity, ent)
  143.