HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <hamsandwich>
  4. #include <cstrike>
  5.  
  6. #define PLUGIN "BANANAMAN"
  7. #define VERSION "1.0"
  8. #define AUTHOR "Phantomas"
  9.  
  10. #define MAX_PLAYERS 32
  11. #define MESSAGE_PREFIX "[BNNMN] "
  12.  
  13. #define MODEL "models/banana.mdl"
  14. #define PLAYER_MODEL_T "models/player/banana_t/banana_t.mdl"
  15. #define PLAYER_MODEL_CT "models/player/banana_ct/banana_ct.mdl"
  16.  
  17. #define TE_BREAKMODEL 108
  18. #define VELOCITY 75
  19. #define VELOCITY_RANDOM 10
  20. #define SIZE 10
  21. #define LIFE 50
  22.  
  23. #define THROWING_POWER 100
  24.  
  25. #define AUTO_THROWING
  26. #if defined AUTO_THROWING
  27. #define AUTO_THROWING_INTERVAL 0.5
  28. #define AUTO_THROWING_BANANAS_NUM_DEFAULT 8
  29. #define AUTO_THROWING_BANANAS_NUM_RANDOM_DEFAULT 5
  30. #endif
  31.  
  32. #define BNNMN_ACCESS ADMIN_RCON
  33.  
  34. new bananaman_id
  35. new bananaman_next_id
  36. new bool:bananaman_spawned
  37.  
  38. new bananamodel
  39.  
  40. public plugin_precache()
  41. {
  42. bananamodel = precache_model(MODEL)
  43. precache_model(PLAYER_MODEL_T)
  44. precache_model(PLAYER_MODEL_CT)
  45. }
  46.  
  47. public plugin_init()
  48. {
  49. register_plugin(PLUGIN, VERSION, AUTHOR)
  50. register_dictionary("bananaman.txt")
  51. register_concmd("amx_bman", "bman", BNNMN_ACCESS, "<name or #userid>")
  52. register_concmd("amx_bcancelman", "bman_cancel", BNNMN_ACCESS)
  53. register_clcmd("amx_bthrow", "throw_banana_cmd", BNNMN_ACCESS, "<bananas num> [bananas minus random]")
  54. register_event("HLTV", "startround", "a", "1=0", "2=0")
  55. RegisterHam(Ham_Killed, "player", "fwd_PlayerKilled")
  56. }
  57.  
  58. public bman_cancel(id, level, cid)
  59. {
  60. if(!cmd_access(id, level, cid, 1))
  61. {
  62. return PLUGIN_HANDLED
  63. }
  64.  
  65. if(bananaman_next_id != 0)
  66. {
  67. client_print(bananaman_next_id, print_chat, "%s%L", MESSAGE_PREFIX, LANG_SERVER, "BNNMN_CANCEL")
  68. bananaman_next_id = 0
  69. console_print(id, "%L", LANG_SERVER, "BNNMN_CANCEL_BY_CMD")
  70. }
  71.  
  72. return PLUGIN_HANDLED
  73. }
  74.  
  75. public throw_banana_cmd(id, level, cid)
  76. {
  77. new bananas_one[32]
  78. if(read_argv(1, bananas_one, 31))
  79. {
  80. new bananas_num_one = str_to_num(bananas_one)
  81. if(bananas_num_one < 1)
  82. {
  83. return PLUGIN_HANDLED
  84. }
  85.  
  86. if(id != bananaman_id)
  87. {
  88. if(!cmd_access(id, level, cid, 2))
  89. {
  90. return PLUGIN_HANDLED
  91. }
  92. } else {
  93. if(!is_user_alive(id))
  94. {
  95. return PLUGIN_HANDLED
  96. }
  97. }
  98.  
  99. new bananas_count = bananas_num_one
  100. new bananas_two[32]
  101. if(read_argv(2, bananas_two, 31)) {
  102. new bananas_num_two = str_to_num(bananas_two)
  103. if(bananas_num_two > 0)
  104. {
  105. do
  106. {
  107. bananas_count = bananas_num_one - random_num(0, bananas_num_two)
  108. }
  109. while(bananas_count <= 0)
  110. }
  111. }
  112. throw_bananas(id, bananas_count)
  113. }
  114. return PLUGIN_HANDLED
  115. }
  116.  
  117. public client_disconnect(id)
  118. {
  119. if(bananaman_id == id)
  120. {
  121. bananaman_id = 0
  122. bananaman_spawned = false
  123. remove_task(id)
  124. }
  125. if(bananaman_next_id == id)
  126. {
  127. bananaman_next_id = 0
  128. }
  129. }
  130.  
  131. public fwd_PlayerKilled(id)
  132. {
  133. if(id == bananaman_id)
  134. {
  135. remove_task(id)
  136. }
  137. }
  138.  
  139. public get_banana_count(bananas, bananas_random)
  140. {
  141. do
  142. {
  143. bananas = bananas - random_num(0, bananas_random)
  144. }
  145. while(bananas <= 0)
  146. return bananas
  147. }
  148.  
  149. public throw_bananas(const player_id, const bananas_count)
  150. {
  151. new origin[3]
  152. get_user_origin(player_id, origin)
  153.  
  154. origin[2] += 8
  155.  
  156. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  157. write_byte(TE_BREAKMODEL)
  158. write_coord(origin[0])
  159. write_coord(origin[1])
  160. write_coord(origin[2])
  161. write_coord(SIZE)
  162. write_coord(SIZE)
  163. write_coord(SIZE)
  164. write_coord(random_num(-VELOCITY, VELOCITY))
  165. write_coord(random_num(-VELOCITY, VELOCITY))
  166. write_coord(THROWING_POWER)
  167. write_byte(VELOCITY_RANDOM)
  168. write_short(bananamodel)
  169. write_byte(bananas_count)
  170. write_byte(LIFE)
  171. write_byte(0)
  172. message_end()
  173. }
  174.  
  175. #if defined AUTO_THROWING
  176. public auto_throw_bananas(id)
  177. {
  178. throw_bananas(id, get_banana_count(AUTO_THROWING_BANANAS_NUM_DEFAULT, AUTO_THROWING_BANANAS_NUM_RANDOM_DEFAULT))
  179. }
  180. #endif
  181.  
  182. public startround()
  183. {
  184. new players[32], inum
  185. get_players(players, inum, "h")
  186.  
  187. for(new i = 0; i < inum; ++i)
  188. {
  189. if(players[i] == bananaman_id && bananaman_spawned == true) {
  190. bananaman_id = 0
  191. cs_reset_user_model(players[i])
  192. remove_task(players[i])
  193. }
  194. }
  195.  
  196. for(new i = 0; i < inum; ++i)
  197. {
  198. if(players[i] == bananaman_next_id)
  199. {
  200. bananaman_next_id = 0
  201. bananaman_spawned = true
  202. bananaman_id = players[i]
  203.  
  204. new CsTeams:player_team
  205. player_team = cs_get_user_team(players[i])
  206. switch (player_team)
  207. {
  208. case CS_TEAM_T:
  209. cs_set_user_model(players[i], "banana_t")
  210. case CS_TEAM_CT:
  211. cs_set_user_model(players[i], "banana_ct")
  212. }
  213.  
  214. client_print(players[i], print_chat, "%s%L", MESSAGE_PREFIX, LANG_SERVER, "BNNMN_YOU")
  215. client_print(players[i], print_chat, "%s%L", MESSAGE_PREFIX, LANG_SERVER, "BNNMN_THROW")
  216.  
  217. #if defined AUTO_THROWING
  218. set_task(AUTO_THROWING_INTERVAL, "auto_throw_bananas", players[i], "", 0, "b")
  219. #endif
  220. }
  221. }
  222. }
  223.  
  224. public bman(id, level, cid)
  225. {
  226. if(!cmd_access(id, level, cid, 2))
  227. {
  228. return PLUGIN_HANDLED
  229. }
  230.  
  231. new arg1[32]
  232. read_argv(1, arg1, 31)
  233.  
  234. new player = cmd_target(id, arg1, CMDTARGET_ALLOW_SELF)
  235. if(!player && !is_user_hltv(player))
  236. {
  237. return PLUGIN_HANDLED
  238. }
  239.  
  240. if(is_user_connected(bananaman_next_id))
  241. {
  242. client_print(bananaman_next_id, print_chat, "%s%L", MESSAGE_PREFIX, LANG_SERVER, "BNNMN_CANCEL")
  243. }
  244.  
  245. new player_name[32]
  246. get_user_name(player, player_name, 31)
  247.  
  248. bananaman_next_id = player
  249. console_print(id, "%L", LANG_SERVER, "BNNMN_SET", player_name)
  250. client_print(player, print_chat, "%s%L", MESSAGE_PREFIX, LANG_SERVER, "BNNMN_PREPARE")
  251.  
  252. return PLUGIN_HANDLED
  253. }