HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <engine>
  3. #include <hamsandwich>
  4. #include <fun>
  5. #include <cstrike>
  6. #include <fakemeta_util>
  7. #include <colorchat>
  8.  
  9. #define PLUGIN "Ballistic knife (fixed)"
  10. #define VERSION "1.0.3"
  11. #define AUTHOR "Medox* / Spawner"
  12.  
  13. const Hex_Value = 0x21
  14.  
  15. new bool:g_Ballistic[Hex_Value], bool:has_rest[Hex_Value], bool:g_Remplace[Hex_Value]
  16.  
  17. new Ammo[Hex_Value], g_Block[Hex_Value]
  18.  
  19. new Cvar_stock[3]
  20. // dmg // 0 // ammo // 1 // rest 2
  21.  
  22. new beamSpr
  23.  
  24. new Model_Ballistic[] = "models/v_Ballistic_knife.mdl"
  25. new Model_Remplace[] = "models/v_knife_remplace.mdl"
  26.  
  27. public plugin_precache()
  28. {
  29. precache_model(Model_Ballistic)
  30. precache_model(Model_Remplace)
  31. beamSpr = precache_model("sprites/dot.spr")
  32. }
  33.  
  34. public plugin_init()
  35. {
  36. register_plugin(PLUGIN, VERSION, AUTHOR)
  37.  
  38. register_clcmd("say /Ballistic","Ballistic_knife")
  39.  
  40. register_event("CurWeapon", "CurrentWeapon", "be", "1=1")
  41. register_forward(FM_CmdStart, "CmdStart")
  42. RegisterHam(Ham_Spawn, "player", "fw_spawn", 1)
  43.  
  44. Cvar_stock[0] = register_cvar("ballistic_damage", "100")
  45. Cvar_stock[1] = register_cvar("ballistic_ammo", "5")
  46. Cvar_stock[2] = register_cvar("ballistic_rest", "0.1")
  47. }
  48.  
  49. public client_connect(id)
  50. Bool_off(id)
  51.  
  52. public fw_spawn(id)
  53. {
  54. Bool_off(id)
  55. strip_user_weapons(id)
  56. give_item(id, "weapon_knife")
  57. }
  58.  
  59. public Ballistic_knife(id)
  60. {
  61. g_Remplace[id] = false
  62. g_Ballistic[id] = true
  63. g_Block[id] = true
  64. Ammo[id] = get_pcvar_num(Cvar_stock[1])
  65.  
  66. ColorChat(id, GREEN, "^4[Kés] ^1Te kaptál egy ballisztikus kést^4 5 ^1 lövéssel.^4!")
  67. }
  68.  
  69. public CmdStart(id, uc_handle, seed)
  70. {
  71. if(is_user_alive(id))
  72. {
  73.  
  74. static CurButton
  75. CurButton = get_uc(uc_handle, UC_Buttons)
  76. new Float:flNextAttack = get_pdata_float(id, 83, 5)
  77.  
  78. if(CurButton & IN_ATTACK2)
  79. {
  80. if(has_rest[id]) return PLUGIN_HANDLED
  81. if(g_Block[id])
  82. {
  83. cmd_drop(id)
  84. set_task(get_pcvar_float(Cvar_stock[2]), "reset_cmd", id)
  85. has_rest[id] = true
  86.  
  87. if(Ammo[id] > 0 && flNextAttack <= 0.0)
  88. {
  89. set_hudmessage(0, 127, 255, 0.01, 0.85, 0, 6.0, 1.0)
  90. show_hudmessage(id, "Maradt meg: %d lövésed", Ammo[id])
  91. }
  92. else
  93. {
  94. g_Ballistic[id] = false
  95. strip_user_weapons(id)
  96. give_item(id, "weapon_knife")
  97. g_Block[id] = false
  98. g_Remplace[id] = true
  99. ColorChat(id, GREEN, "^4[Kes] ^1Neked már nincs késed. Ezert a ballisztikus késed lecseréltük. ^4!")
  100. }
  101.  
  102. Ammo[id] -= 1
  103.  
  104. CurButton &= ~IN_ATTACK2
  105. set_uc(uc_handle, UC_Buttons, CurButton)
  106. }
  107. }
  108.  
  109. }
  110. else if(is_user_alive (id) && !g_Block[id])
  111. return PLUGIN_CONTINUE
  112.  
  113. return PLUGIN_CONTINUE
  114. }
  115.  
  116.  
  117. // Cmd Shote ---- >
  118. public cmd_drop(id)
  119. {
  120. static Victim, Body, EndOrigin[3], BeamOrigin[3];
  121. get_user_origin(id, BeamOrigin, 3) ;
  122. get_user_origin(id, EndOrigin, 3);
  123. message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
  124. write_byte(TE_BEAMENTPOINT);
  125. write_short(id | 0x1000);
  126. write_coord(BeamOrigin[0]); // Start X
  127. write_coord(BeamOrigin[1]); // Start Y
  128. write_coord(BeamOrigin[2]); // Start Z
  129. write_short(beamSpr); // Sprite
  130. write_byte(1); // Start frame
  131. write_byte(1); // Frame rate
  132. write_byte(1); // Life
  133. write_byte(25); // Line width 25
  134. write_byte(0); // Noise
  135. write_byte(190); // Red
  136. write_byte(190); // Green
  137. write_byte(190); // Blue
  138. write_byte(150); // Brightness
  139. write_byte(25); // Scroll speed
  140. message_end();
  141.  
  142. get_user_aiming(id, Victim, Body, 999999);
  143. if(is_user_connected(Victim))
  144. {
  145. new Float:Damage = float(get_damage_body(Body, get_pcvar_float(Cvar_stock[0])));
  146.  
  147. new Float:VictimOrigin[3];
  148. VictimOrigin[0] = float(EndOrigin[0]);
  149. VictimOrigin[1] = float(EndOrigin[1]);
  150. VictimOrigin[2] = float(EndOrigin[2]);
  151.  
  152. (get_pcvar_float(Cvar_stock[0]) > 1) ? ExecuteHam(Ham_TakeDamage, Victim, id, id, Damage, DMG_NERVEGAS) : death_message(id, Victim, 1, "weapon_knife")
  153.  
  154. }
  155. else
  156. {
  157. static ClassName[32];
  158. pev(Victim, pev_classname, ClassName, charsmax(ClassName));
  159. if(equal(ClassName, "func_breakable"))
  160. {
  161. if(entity_get_float(Victim, EV_FL_health) <= get_pcvar_num(Cvar_stock[0]))
  162. {
  163. force_use(id, Victim);
  164. }
  165. }
  166. }
  167. }
  168.  
  169. public reset_cmd(id)
  170. has_rest[id] = false
  171. // Cmd Shote ---- <
  172.  
  173. // Stock ---- >
  174. stock death_message(Killer, Victim, ScoreBoard, const Weapon[])
  175. {
  176. // Block death msg
  177. set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET);
  178. ExecuteHamB(Ham_Killed, Victim, Killer, 2);
  179. set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT);
  180.  
  181. // Death
  182. make_deathmsg(Killer, Victim, 0, Weapon);
  183. cs_set_user_money(Killer, cs_get_user_money(Killer) + 300);
  184.  
  185. // Update score board
  186. if(ScoreBoard)
  187. {
  188. message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"));
  189. write_byte(Killer); // id
  190. write_short(pev(Killer, pev_frags)); // frags
  191. write_short(cs_get_user_deaths(Killer)); // deaths
  192. write_short(0); // class?
  193. write_short(get_user_team(Killer)); // team
  194. message_end();
  195.  
  196. message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"));
  197. write_byte(Victim); // id
  198. write_short(pev(Victim, pev_frags)); // frags
  199. write_short(cs_get_user_deaths(Victim)); // deaths
  200. write_short(0); // class?
  201. write_short(get_user_team(Victim)); // team
  202. message_end();
  203. }
  204. }
  205.  
  206. stock get_damage_body(body, Float:damage)
  207. {
  208. switch(body)
  209. {
  210. case HIT_HEAD: damage *= 4.0
  211. case HIT_STOMACH: damage *= 1.1
  212. case HIT_CHEST: damage *= 1.5
  213. case HIT_LEFTARM: damage *= 0.77
  214. case HIT_RIGHTARM: damage *= 0.77
  215. case HIT_LEFTLEG: damage *= 0.75
  216. case HIT_RIGHTLEG: damage *= 0.75
  217. default: damage *= 1.0
  218. }
  219. return floatround(damage)
  220. }
  221.  
  222. stock Bool_off(index)
  223. {
  224. g_Ballistic[index] = false
  225. Ammo[index] = false
  226. g_Block[index] = false
  227. g_Remplace[index] = false
  228. }
  229. // Stock ---- <
  230.  
  231. // CurWeapon ---- >
  232. public CurrentWeapon(id)
  233. {
  234. if(get_user_weapon(id) == CSW_KNIFE && g_Ballistic[id])
  235. {
  236. set_pev(id, pev_viewmodel2, Model_Ballistic)
  237. }
  238.  
  239. if(get_user_weapon(id) == CSW_KNIFE && g_Remplace[id])
  240. {
  241. set_pev(id, pev_viewmodel2, Model_Remplace)
  242. }
  243. }
  244. // CurWeapon ---- <
  245.