HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /* .: Drop Or Hide The Bomb :.
  2.  
  3. By K.K.Lv
  4.  
  5. .: Version List :.
  6.  
  7. 1.0 Original Version
  8. 1.1 Add a menu to choose the hide time of the Bomb!
  9. 1.2 Add a func to resend the bomb to the Terrorists!(this func wrote by Bugsy)
  10. 1.3 remove the 'get_c4' func when end round!
  11. 1.4 accept crazyeffect suggestion, add a "drop_or_hide_bomb.txt" that can be add multi language in it !!
  12.  
  13. .: Cvar :.
  14.  
  15. amx_doh <0|1> <off|on>
  16. */
  17.  
  18. #include <amxmodx>
  19. #include <amxmisc>
  20. #include <cstrike>
  21. #include <fun>
  22. #include <fakemeta_util>
  23. #include <fakemeta>
  24.  
  25. #define PLUGIN_NAME "Drop Or Hide Bomb"
  26. #define PLUGIN_VERSION "1.4"
  27. #define PLUGIN_AUTHOR "K.K.Lv"
  28.  
  29. #define KEY_1 MENU_KEY_1
  30. #define KEY_2 MENU_KEY_2
  31. #define KEY_3 MENU_KEY_3
  32. #define KEY_4 MENU_KEY_4
  33. #define KEY_0 MENU_KEY_0
  34.  
  35. new g_doh_cvar
  36. new g_MaxPlayers
  37.  
  38. public plugin_init()
  39. {
  40. register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
  41.  
  42. register_logevent("eRoundEnd", 2, "1=Round_End")
  43. register_menucmd(register_menuid("Drop Or Hide Bomb"), 1023, "Menu_handle")
  44. register_menucmd(register_menuid("Hide Bomb Menu"), 1023, "Hide_menu")
  45. register_clcmd("drop", "cmdMenu")
  46. g_doh_cvar = register_cvar("amx_doh", "1")
  47. register_dictionary("drop_or_hide_bomb.txt")
  48.  
  49. g_MaxPlayers = get_maxplayers()
  50. }
  51.  
  52. public cmdMenu(id)
  53. {
  54. if (is_user_alive(id) && get_pcvar_num(g_doh_cvar) && get_user_weapon(id) == CSW_C4)
  55. {
  56. new menubody[512], iLen
  57. iLen = formatex(menubody, 511, "%L", id, "MENU_TITLE")
  58. iLen += formatex(menubody[iLen], 511 - iLen, "%L", id, "DROP_THE_BOMB")
  59. iLen += formatex(menubody[iLen], 511 - iLen, "%L", id, "HIDE_THE_BOMB")
  60. iLen += formatex(menubody[iLen], 511 - iLen, "%L", id, "EXIT_MENU")
  61. show_menu(id, KEY_1|KEY_2|KEY_0, menubody, -1, "Drop Or Hide Bomb")
  62. return PLUGIN_HANDLED
  63. }
  64. return PLUGIN_CONTINUE
  65. }
  66.  
  67.  
  68. public Menu_handle(id, key)
  69. {
  70. switch (key)
  71. {
  72. case 0:
  73. {
  74. engclient_cmd(id, "drop", "weapon_c4")
  75. return PLUGIN_HANDLED
  76. }
  77. case 1:
  78. {
  79. displaymenu(id)
  80. }
  81. }
  82. return PLUGIN_HANDLED
  83. }
  84.  
  85. public displaymenu(id)
  86. {
  87. if (get_pcvar_num(g_doh_cvar))
  88. {
  89. new menubody[512], iLen
  90. iLen = formatex(menubody, 511, "%L", id, "HIDE_MENU_TITLE")
  91. iLen += formatex(menubody[iLen], 511 - iLen, "%L", id, "TIME_ONE")
  92. iLen += formatex(menubody[iLen], 511 - iLen, "%L", id, "TIME_TWO")
  93. iLen += formatex(menubody[iLen], 511 - iLen, "%L", id, "TIME_THREE")
  94. iLen += formatex(menubody[iLen], 511 - iLen, "%L", id, "TIME_FOUR")
  95. iLen += formatex(menubody[iLen], 511 - iLen, "%L", id, "EXIT_MENU")
  96. show_menu(id, KEY_1|KEY_2|KEY_3|KEY_4|KEY_0, menubody, -1, "Hide Bomb Menu")
  97. return PLUGIN_HANDLED
  98. }
  99. return PLUGIN_CONTINUE
  100. }
  101.  
  102. public Hide_menu(id, key)
  103. {
  104. switch (key)
  105. {
  106. case 0:
  107. {
  108. new iEnt = fm_find_ent_by_owner(-1, "weapon_c4", id)
  109. engclient_cmd(id, "drop", "weapon_c4")
  110. new iBox = pev(iEnt, pev_owner)
  111. if (!iBox || iBox == id)
  112. return false
  113. dllfunc(DLLFunc_Think, iBox)
  114. set_task(30.0, "get_c4", id)
  115. return PLUGIN_HANDLED
  116. }
  117. case 1:
  118. {
  119. new iEnt = fm_find_ent_by_owner(-1, "weapon_c4", id)
  120. engclient_cmd(id, "drop", "weapon_c4")
  121. new iBox = pev(iEnt, pev_owner)
  122. if (!iBox || iBox == id)
  123. return false
  124. dllfunc(DLLFunc_Think, iBox)
  125. set_task(60.0, "get_c4", id)
  126. }
  127. case 2:
  128. {
  129. new iEnt = fm_find_ent_by_owner(-1, "weapon_c4", id)
  130. engclient_cmd(id, "drop", "weapon_c4")
  131. new iBox = pev(iEnt, pev_owner)
  132. if (!iBox || iBox == id)
  133. return false
  134. dllfunc(DLLFunc_Think, iBox)
  135. set_task(75.0, "get_c4", id)
  136. }
  137. case 3:
  138. {
  139. new iEnt = fm_find_ent_by_owner(-1, "weapon_c4", id)
  140. engclient_cmd(id, "drop", "weapon_c4")
  141. new iBox = pev(iEnt, pev_owner)
  142. if (!iBox || iBox == id)
  143. return false
  144. dllfunc(DLLFunc_Think, iBox)
  145. set_task(90.0, "get_c4", id)
  146. }
  147. case 4:
  148. {
  149. return PLUGIN_HANDLED
  150. }
  151. }
  152. return PLUGIN_HANDLED
  153. }
  154.  
  155. public get_c4(id)
  156. {
  157. if (!is_user_alive(id))
  158. {
  159. new iTeammate = FindTeammate(id)
  160.  
  161. if (iTeammate)
  162. {
  163. give_item(iTeammate, "weapon_c4")
  164. cs_set_user_plant(iTeammate, 1, 1)
  165. return PLUGIN_HANDLED
  166. }
  167. }
  168. else if (is_user_alive(id))
  169. {
  170. give_item(id, "weapon_c4")
  171. cs_set_user_plant(id, 1, 1)
  172. return PLUGIN_HANDLED
  173. }
  174.  
  175. return PLUGIN_CONTINUE
  176. }
  177.  
  178. public FindTeammate(id)
  179. {
  180. new Float: fOriginBomb1[3]
  181. new Float: fOriginBomb2[3]
  182. new Float: fMinDist = 99999.0
  183. new Float: fDist
  184. new iTeammate
  185.  
  186. new iPlayers[32]
  187. new iPlayersNum
  188. new iPlayer
  189.  
  190. pev(id, pev_origin, fOriginBomb1)
  191. get_players(iPlayers, iPlayersNum)
  192. if (!iPlayersNum)
  193. return 0
  194.  
  195. for (new i = 0; i < iPlayersNum; i++)
  196. {
  197. iPlayer = iPlayers[i]
  198.  
  199. if ((get_user_team(iPlayer) == 1) && is_user_alive(iPlayer) && (iPlayer != id))
  200. {
  201. pev(iPlayer, pev_origin, fOriginBomb2)
  202. fDist = get_distance_f(fOriginBomb1 , fOriginBomb2)
  203. if (fDist < fMinDist)
  204. {
  205. fMinDist = fDist
  206. iTeammate = iPlayer
  207. }
  208. }
  209. }
  210. return iTeammate
  211. }
  212.  
  213. public eRoundEnd()
  214. {
  215. for (new id = 1; id <= g_MaxPlayers; id++)
  216. if (is_user_connected(id) && task_exists(id))
  217. remove_task(id)
  218. }
  219. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  220. *{\\ rtf1\\ ansi\\ ansicpg936\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset134 Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang2052\\ f0\\ fs16 \n\\ par }
  221. */
  222.