HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /* Plugin generated by AMXX-Studio */
  2.  
  3. #include <amxmodx>
  4. #include <fakemeta>
  5. #include <hamsandwich>
  6. #include <xs>
  7.  
  8. #define PLUGIN "Keek"
  9. #define VERSION "0.1.1"
  10. #define AUTHOR "PomanoB"
  11.  
  12. #define MODEL "models/rpgrocket.mdl"
  13.  
  14. new g_info_target_str
  15. new g_lookEntity[33]
  16.  
  17. new const g_entity_class[] = "keek_entity"
  18.  
  19. new g_cvar_max_distance, g_cvar_max_offset, g_cvar_effects
  20.  
  21. public plugin_init()
  22. {
  23. register_plugin(PLUGIN, VERSION, AUTHOR)
  24.  
  25. register_forward(FM_PlayerPreThink, "fwdPreThink")
  26. register_forward(FM_Think, "fwdThink")
  27. register_forward(FM_AddToFullPack, "fwdAddToFullPack")
  28.  
  29. RegisterHam(Ham_Killed, "player", "fwdKilled")
  30.  
  31. g_info_target_str = engfunc(EngFunc_AllocString, "info_target")
  32.  
  33. g_cvar_max_distance = register_cvar("keek_max_distance", "50.0")
  34. g_cvar_max_offset = register_cvar("keek_max_offset", "8")
  35. g_cvar_effects = register_cvar("keek_effects", "1")
  36. }
  37.  
  38. public plugin_precache()
  39. {
  40. precache_model(MODEL)
  41. }
  42.  
  43. public fwdPreThink(id)
  44. {
  45. static buttons, oldButtons
  46. if (is_user_alive(id))
  47. {
  48. buttons = pev(id, pev_button)
  49. oldButtons = pev(id, pev_oldbuttons)
  50.  
  51. if ((buttons == IN_USE) && !(oldButtons&IN_USE))
  52. {
  53. if (!g_lookEntity[id])
  54. {
  55. static Float:origin[3], Float:viewOrigin[3], Float:temp[3], Float:angles[3], Float:startOrigin[3], Float:planeNormal[3]
  56. pev(id, pev_origin, origin)
  57. xs_vec_copy(origin, startOrigin)
  58.  
  59. pev(id, pev_view_ofs, viewOrigin)
  60. xs_vec_add(origin, viewOrigin, viewOrigin)
  61.  
  62. pev(id, pev_angles, origin)
  63. xs_vec_copy(origin, angles)
  64.  
  65.  
  66.  
  67. engfunc(EngFunc_MakeVectors, origin)
  68. global_get(glb_v_forward, origin)
  69. xs_vec_mul_scalar(origin, get_pcvar_float(g_cvar_max_distance), origin)
  70. xs_vec_add(origin, viewOrigin, origin)
  71. origin[2] = viewOrigin[2]
  72.  
  73. static tr, Float:fraction
  74.  
  75. tr = 0
  76. engfunc(EngFunc_TraceLine, viewOrigin, origin, 0, id, tr)
  77. get_tr2(tr, TR_flFraction, fraction)
  78. if (fraction != 1.0)
  79. {
  80. get_tr2(tr, TR_vecEndPos, origin)
  81. get_tr2(tr, TR_vecPlaneNormal, viewOrigin)
  82.  
  83. xs_vec_copy(viewOrigin, planeNormal)
  84. xs_vec_mul_scalar(planeNormal, 7.0, planeNormal)
  85.  
  86. // xs_vec_add(origin, viewOrigin, startOrigin)
  87. xs_vec_sub(origin, viewOrigin, origin)
  88.  
  89. fraction = viewOrigin[0]
  90. viewOrigin[0] = viewOrigin[1]
  91. viewOrigin[1] = fraction
  92.  
  93. xs_vec_mul_scalar(viewOrigin, 5.0, viewOrigin)
  94.  
  95. xs_vec_copy(origin, temp)
  96. static content1, content2, offset
  97. offset = get_pcvar_num(g_cvar_max_offset)
  98. tr = 0
  99. do
  100. {
  101. xs_vec_add(temp, viewOrigin, temp)
  102. xs_vec_sub(origin, viewOrigin, origin)
  103.  
  104. content1 = engfunc(EngFunc_PointContents, temp)
  105. content2 = engfunc(EngFunc_PointContents, origin)
  106. }
  107. while(tr++ < offset && content1 != CONTENTS_EMPTY && content2 != CONTENTS_EMPTY)
  108.  
  109. if (content1 == CONTENTS_EMPTY)
  110. {
  111. xs_vec_add(temp, viewOrigin, temp)
  112. xs_vec_copy(temp, viewOrigin)
  113. }
  114. else
  115. if (content2 == CONTENTS_EMPTY)
  116. {
  117. xs_vec_sub(origin, viewOrigin, origin)
  118. xs_vec_copy(origin, viewOrigin)
  119. }
  120. else
  121. return
  122.  
  123.  
  124.  
  125. xs_vec_add(viewOrigin, planeNormal, viewOrigin)
  126. // xs_vec_add(startOrigin, planeNormal, startOrigin)
  127.  
  128. tr = engfunc(EngFunc_CreateNamedEntity, g_info_target_str)
  129. dllfunc(DLLFunc_Spawn, tr)
  130. set_pev(tr, pev_classname, g_entity_class)
  131. engfunc(EngFunc_SetModel, tr, MODEL)
  132. set_pev(tr, pev_rendermode, kRenderTransAdd)
  133. set_pev(tr, pev_renderamt, 0.0)
  134.  
  135. xs_vec_mul_scalar(planeNormal, -1.0, planeNormal)
  136. engfunc(EngFunc_VecToAngles, planeNormal, angles)
  137. set_pev(tr, pev_angles, angles)
  138.  
  139. if (get_pcvar_num(g_cvar_effects))
  140. {
  141. set_pev(tr, pev_vuser1, viewOrigin)
  142.  
  143. pev(id, pev_view_ofs, angles)
  144. xs_vec_add(startOrigin, angles, startOrigin)
  145.  
  146.  
  147. engfunc(EngFunc_SetOrigin, tr, startOrigin)
  148.  
  149. set_pev(tr, pev_nextthink, get_gametime() + 0.01)
  150. }
  151. else
  152. engfunc(EngFunc_SetOrigin, tr, viewOrigin)
  153.  
  154. set_pev(id, pev_velocity, Float:{0.0, 0.0, 0.0})
  155.  
  156. engfunc(EngFunc_SetView, id, tr)
  157.  
  158. g_lookEntity[id] = tr
  159.  
  160. }
  161.  
  162. }
  163. else
  164. deleteLook(id)
  165.  
  166. }
  167. else
  168. if (g_lookEntity[id] && buttons && buttons != IN_USE)
  169. deleteLook(id)
  170.  
  171. }
  172. }
  173.  
  174. public fwdThink(ent)
  175. {
  176. static classname[32]
  177. pev(ent, pev_classname, classname, charsmax(classname))
  178. if (equal(classname, g_entity_class))
  179. {
  180. static Float:origin[3], Float:endOrigin[3]
  181.  
  182. pev(ent, pev_origin, origin)
  183. pev(ent, pev_vuser1, endOrigin)
  184.  
  185. xs_vec_sub(endOrigin, origin, endOrigin)
  186. if (xs_vec_len(endOrigin) > 1.0)
  187. {
  188. xs_vec_normalize(endOrigin, endOrigin)
  189. xs_vec_add(origin, endOrigin, endOrigin)
  190.  
  191. engfunc(EngFunc_SetOrigin, ent, endOrigin)
  192.  
  193. set_pev(ent, pev_nextthink, get_gametime() + 0.01)
  194. }
  195. }
  196. }
  197.  
  198. public fwdAddToFullPack(es, e, ent, host, flags, player, set)
  199. {
  200. if (ent == host && g_lookEntity[host])
  201. return FMRES_SUPERCEDE
  202. return FMRES_IGNORED
  203. }
  204.  
  205. public fwdKilled(id, idattacker, shouldgib)
  206. {
  207. if (g_lookEntity[id])
  208. deleteLook(id)
  209. }
  210.  
  211. public client_disconnect(id)
  212. {
  213. if (g_lookEntity[id])
  214. deleteLook(id)
  215. }
  216.  
  217. public deleteLook(id)
  218. {
  219. engfunc(EngFunc_SetView, id, id)
  220. engfunc(EngFunc_RemoveEntity, g_lookEntity[id])
  221. g_lookEntity[id] = 0
  222. }
  223.