HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /*
  2. * _______ _ _ __ __
  3. * | _____/ | | | | \ \ __ / /
  4. * | | | | | | | | / \ | |
  5. * | | | |____| | | |/ __ \| |
  6. * | | ___ | ______ | | / \ |
  7. * | | |_ | | | | | | / \ |
  8. * | | | | | | | | | | | |
  9. * | |____| | | | | | | | | |
  10. * |_______/ |_| |_| \_/ \_/
  11. *
  12. *
  13. *
  14. * Last Edited: 01-05-08
  15. *
  16. * ============
  17. * Changelog:
  18. * ============
  19. *
  20. * v1.0
  21. * -Initial Release
  22. *
  23. */
  24.  
  25. #define VERSION "1.0"
  26.  
  27. #include <amxmodx>
  28. #include <amxmisc>
  29. #include <engine>
  30. #include <fakemeta>
  31.  
  32. #define SMOKE_SPRITES 50
  33.  
  34. new smokesprites[SMOKE_SPRITES]
  35. new smokesprites_names[SMOKE_SPRITES][32]
  36. new smokesprites_size[SMOKE_SPRITES]
  37.  
  38. new togglecvar, debugcvar
  39. new bool:hault
  40. new num
  41.  
  42. public plugin_init()
  43. {
  44. register_plugin("New Smokes","1.0","GHW_Chronic")
  45.  
  46. togglecvar = register_cvar("smokes_on","1")
  47. debugcvar = register_cvar("smokes_debug","0")
  48.  
  49. register_touch("grenade","worldspawn","bounce")
  50. }
  51.  
  52. public plugin_precache()
  53. {
  54. new configfile[200]
  55. get_configsdir(configfile,199)
  56. format(configfile,199,"%s/smoke_sprites.ini",configfile)
  57. if(!file_exists(configfile))
  58. {
  59. hault=true
  60. }
  61. else
  62. {
  63. new read[64], left[64], trash, size2
  64. new size=file_size(configfile,1)
  65. for(new i=0;i<size;i++)
  66. {
  67. read_file(configfile,i,read,63,trash)
  68. if(contain(read,";")!=0)
  69. {
  70. strbreak(read,left,63,read,63)
  71. trim(left)
  72. replace_all(left,63,"^"","")
  73. if(contain(left,"sprites/")==0 && contain(left,".spr")==strlen(left)-4)
  74. {
  75. smokesprites[num] = precache_model(left)
  76. format(smokesprites_names[num],31,"%s",left)
  77. trim(read)
  78. replace_all(read,63," ","")
  79. replace_all(read,63," ","")
  80. remove_quotes(read)
  81. size2 = str_to_num(read)
  82. if(!size2) size2=10
  83. smokesprites_size[num] = size2
  84. num++
  85. }
  86. }
  87. }
  88. }
  89. }
  90.  
  91. public bounce(ent,worldspawn)
  92. {
  93. if(!hault && get_pcvar_num(togglecvar))
  94. {
  95. static model[32]
  96. pev(ent,pev_model,model,31)
  97. if(containi(model,"smoke")!=-1)
  98. {
  99. static Float:velocity[3]
  100. pev(ent,pev_velocity,velocity)
  101. if(vector_length(velocity)<=200.0)
  102. {
  103. new ent2 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString, "info_target"))
  104. set_pev(ent2,pev_classname,"fake_smokenade")
  105. set_pev(ent2,pev_owner,33)
  106. set_pev(ent2,pev_movetype,MOVETYPE_BOUNCE)
  107. set_pev(ent2,pev_solid,SOLID_TRIGGER)
  108.  
  109. new Float:origin[3]
  110. new Float:angles[3]
  111. pev(ent,pev_origin,origin)
  112. pev(ent,pev_angles,angles)
  113. pev(ent,pev_model,model,31)
  114. set_pev(ent2,pev_origin,origin)
  115. set_pev(ent2,pev_angles,angles)
  116. set_pev(ent2,pev_fixangle,1)
  117.  
  118. set_pev(ent2,pev_model,model)
  119. engfunc(EngFunc_SetModel,ent2,model)
  120.  
  121. detonate(ent2)
  122.  
  123. set_pev(ent,pev_flags,FL_KILLME)
  124. }
  125. }
  126. }
  127. }
  128.  
  129. public detonate(ent)
  130. {
  131. set_pev(ent,pev_movetype,MOVETYPE_TOSS)
  132. emit_sound(ent,CHAN_WEAPON,"weapons/sg_explode.wav",1.0,ATTN_NORM,0,PITCH_NORM)
  133. new param[1]
  134. param[0] = random_num(0,num-1)
  135. set_task(0.6,"smoke_explode",ent,param,1,"a",34)
  136. set_task(20.5,"smoke_delete",ent)
  137. if(get_pcvar_num(debugcvar))
  138. {
  139. new players[32], num
  140. get_players(players,num,"ch")
  141. for(new i=0;i<num;i++)
  142. {
  143. if(get_user_flags(players[i]) & ADMIN_RCON) client_print(players[i],print_chat,"[GHW Smoke-Nades] %d. %s",param[0],smokesprites_names[param[0]])
  144. }
  145. }
  146. }
  147.  
  148. public smoke_explode(param[1],ent)
  149. {
  150. if(pev_valid(ent))
  151. {
  152. static Float:origin2[3]
  153. pev(ent,pev_origin,origin2)
  154.  
  155. static origin[3]
  156. origin[0] = floatround(origin2[0]) + random_num(-75,75)
  157. origin[1] = floatround(origin2[1]) + random_num(-75,75)
  158. origin[2] = floatround(origin2[2]) + random_num(0,65)
  159.  
  160. message_begin(MSG_BROADCAST,SVC_TEMPENTITY,origin)
  161. write_byte(3)
  162. write_coord(origin[0]) // start position
  163. write_coord(origin[1])
  164. write_coord(origin[2])
  165. write_short(smokesprites[param[0]])
  166. write_byte(smokesprites_size[param[0]]) // byte (scale in 0.1's) 188
  167. write_byte(5) // byte (framerate)
  168. write_byte(14) // byte flags
  169. message_end()
  170. }
  171. }
  172.  
  173. public smoke_delete(ent) if(pev_valid(ent)) engfunc(EngFunc_RemoveEntity,ent)
  174.