Advertisement
Guest User

Untitled

a guest
Jul 1st, 2015
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.68 KB | None | 0 0
  1. /*
  2. * This is "AMX Jump Cup V1.0" by Juzam Djinn
  3. * This file is provided as is (no warranties).
  4. * This plugin manages the jump cup.
  5. *
  6. * Commands:
  7. *
  8. * say /poscheck - displays a menue to check the finish positions of the climbers
  9. * say /admincup - displays the admin menue for the Climb cup
  10. *
  11. *
  12. * Last updated on: Juni 19, 2004
  13. */
  14.  
  15.  
  16. #include <amxmodx>
  17. #include <amxmisc>
  18. #include <fakemeta>
  19. #include <fun>
  20.  
  21. #define CUP_DEFAULT_TIME 300
  22. #define CUP_STATUS_NONE 0
  23. #define CUP_STATUS_RUNNING 1
  24. #define CUP_STATUS_FINISHED 2
  25. #define CUP_VOICE_FEMALE 1
  26. #define CUP_VOICE_MALE 0
  27. #define CUP_START_COUNTDOWN 10
  28. #define ACCESS_LEVEL ADMIN_LEVEL_A
  29.  
  30. new jc_pluginname[] = "[Cup]"
  31.  
  32. new announc_interval
  33. new announc_voice
  34. new announcments
  35.  
  36. new cup_time
  37. new cup_start_time // the time when the cup started
  38. new cup_status // the cup status (none, running or finished)
  39. new cup_start_id // the starte of the cup
  40.  
  41. new cup_start_countdown
  42. new cup_rr_start
  43. new cup_rr_end
  44. new cup_god_mode
  45.  
  46. new Float:finish_locs[33][3] // the locs from the climbers when climbtime is 0 (the finish loc)
  47. new climber[33][33] // the climbers name
  48. new climbers // the number of climbers
  49.  
  50. new menupos[33]
  51.  
  52. public plugin_init()
  53. {
  54. register_plugin(jc_pluginname,"1.0","Jump Cup")
  55.  
  56. register_cvar("Juzam Djinn", "Cup", FCVAR_SERVER, 0.0)
  57.  
  58. register_clcmd("say /poscheck","jc_menu")
  59. register_menucmd(register_menuid("\yPos check menue"),1023,"action_cup_menu")
  60.  
  61. register_clcmd("say /admincup","jc_amenu", ACCESS_LEVEL, " - displays the admin menue for the climb cup")
  62. register_clcmd("say /end","cup_end", ACCESS_LEVEL, " - ends cup round")
  63.  
  64. register_menucmd(register_menuid("\yCup admin menu"),1023,"action_cup_amenu")
  65.  
  66. cup_status = CUP_STATUS_NONE
  67. cup_time = CUP_DEFAULT_TIME
  68.  
  69. announc_interval = 30
  70. announc_voice = CUP_VOICE_MALE
  71.  
  72. cup_start_countdown = CUP_START_COUNTDOWN
  73. cup_rr_start = 0
  74. cup_rr_end = 1
  75. cup_god_mode = 0
  76.  
  77. return PLUGIN_CONTINUE
  78. }
  79.  
  80. public action_cup_menu(id,key)
  81. {
  82. if( cup_status != CUP_STATUS_FINISHED )
  83. {
  84. return PLUGIN_HANDLED
  85. }
  86.  
  87. switch(key)
  88. {
  89. case 8: display_cup_menu(id,++menupos[id])
  90. case 9: display_cup_menu(id,--menupos[id])
  91. default:
  92. {
  93. engfunc(EngFunc_SetOrigin, id, finish_locs[menupos[id]*8+key]);
  94. client_print(id,print_chat,"[%s] You have been teleported to the finish position of climber ^"%s^".", jc_pluginname, climber[menupos[id]*8+key] )
  95. display_cup_menu( id, menupos[id] )
  96. }
  97. }
  98. return PLUGIN_HANDLED
  99. }
  100.  
  101. loc_is_set(i)
  102. {
  103. if( finish_locs[i][0] != 0 && finish_locs[i][1] != 0 && finish_locs[i][2] != 0 )
  104. {
  105. return 1
  106. }
  107.  
  108. return 0
  109. }
  110.  
  111. display_cup_menu(id, pos)
  112. {
  113. if( pos < 0 )
  114. {
  115. return
  116. }
  117. if( cup_status != CUP_STATUS_FINISHED )
  118. {
  119. client_print(id,print_chat,"[%s] Cup-menu is only available when the climb cup has finished.", jc_pluginname )
  120. return
  121. }
  122.  
  123. new page = pos + 1
  124. new pages = (climbers / 8) + ((climbers % 8 ) ? 1 : 0)
  125.  
  126. new i = pos * 8
  127.  
  128. new keys = (1<<9)
  129. new key = 0
  130.  
  131. new menuBody[512]
  132. new len = format(menuBody, 511, "\yPos check menue\R%d/%d^n\w^n", page, pages )
  133.  
  134. while( !equal( climber[i], "" ) && key < 8 )
  135. {
  136. if( loc_is_set(i) )
  137. {
  138. keys |= (1<<key)
  139. key++
  140. len += format( menuBody[len], 511-len, "%d. %s^n\w",key,climber[i])
  141. }
  142. else{
  143. key++
  144. len += format( menuBody[len], 511-len, "\d%d. %s^n\w",key,climber[i])
  145. }
  146. i++
  147. }
  148.  
  149. if ( page != pages )
  150. {
  151. len += format(menuBody[len],511-len,"^n9. More...^n0. Back")
  152. keys |= (1<<8)
  153. }
  154. else
  155. {
  156. len += format(menuBody[len],511-len,"^n0. Back")
  157. }
  158. client_cmd(id,"/reset")
  159. show_menu( id, keys, menuBody )
  160. }
  161.  
  162. public jc_menu(id,level,cid)
  163. {
  164. if (!cmd_access(id,level,cid,1))
  165. {
  166. return PLUGIN_HANDLED;
  167. }
  168.  
  169. display_cup_menu( id, menupos[id] = 0 )
  170.  
  171. return PLUGIN_CONTINUE;
  172. }
  173.  
  174. public action_cup_amenu(id,key)
  175. {
  176. switch(key)
  177. {
  178. case 0:
  179. {
  180. jc_start_cup(id)
  181. }
  182. case 1:
  183. {
  184. cup_time += 60
  185. if( cup_time > 900 )
  186. {
  187. cup_time = 60
  188. }
  189. display_cup_amenu( id, 0 )
  190. }
  191. case 2:
  192. {
  193. announc_interval += 15
  194. if( announc_interval > 180 )
  195. {
  196. announc_interval = 15
  197. }
  198. display_cup_amenu( id, 0 )
  199. }
  200. case 3:
  201. {
  202. announc_voice = (announc_voice == CUP_VOICE_FEMALE ? CUP_VOICE_MALE : CUP_VOICE_FEMALE)
  203. display_cup_amenu( id, 0 )
  204. }
  205. case 4:
  206. {
  207. cup_rr_start = (cup_rr_start ? 0 : 1)
  208. display_cup_amenu( id, 0 )
  209. }
  210. case 5:
  211. {
  212. cup_rr_end = (cup_rr_end ? 0 : 1)
  213. display_cup_amenu( id, 0 )
  214. }
  215. case 6:
  216. {
  217. cup_god_mode++;
  218. if( cup_god_mode >= 2 )
  219. {
  220. cup_god_mode = 0
  221. }
  222. display_cup_amenu( id, 0 )
  223. }
  224. case 7:
  225. {
  226. for( new i = 0 ; i < 33; i++)
  227. {
  228. finish_locs[i][0] = 0.0
  229. finish_locs[i][1] = 0.0
  230. finish_locs[i][2] = 0.0
  231. climber[i] = ""
  232. }
  233. cup_status = CUP_STATUS_NONE
  234. display_cup_amenu( id, 0 )
  235. }
  236. default:
  237. {
  238. display_cup_amenu( id, -1 )
  239. }
  240. }
  241. return PLUGIN_HANDLED
  242. }
  243.  
  244. display_cup_amenu(id, pos)
  245. {
  246. if( pos < 0 )
  247. {
  248. return
  249. }
  250.  
  251. new keys = (1<<9)
  252. new key = 0
  253.  
  254. new menuBody[512]
  255. new len = format(menuBody, 511, "\yCup admin menu\R^n\w^n" )
  256.  
  257. keys |= (1<<key)
  258. key++
  259. len += format( menuBody[len], 511-len, "%d. Start Climb Cup.^n\w", key )
  260.  
  261. keys |= (1<<key)
  262. key++
  263. len += format( menuBody[len], 511-len, "%d. Cup Time: %d:%02d min^n\w", key, (cup_time / 60), (cup_time % 60) )
  264.  
  265. keys |= (1<<key)
  266. key++
  267. len += format( menuBody[len], 511-len, "%d. Announc interval: %d sec^n\w", key, announc_interval )
  268.  
  269. keys |= (1<<key)
  270. key++
  271. len += format( menuBody[len], 511-len, "%d. Announc voice: %s^n\w", key, announc_voice == CUP_VOICE_FEMALE ? "Female" : "Male" )
  272.  
  273. keys |= (1<<key)
  274. key++
  275. len += format( menuBody[len], 511-len, "%d. Start Cup with restartround: %s^n\w", key, cup_rr_start ? "on" : "off" )
  276.  
  277. keys |= (1<<key)
  278. key++
  279. len += format( menuBody[len], 511-len, "%d. End Cup with restartround: %s^n\w", key, cup_rr_end ? "on" : "off" )
  280.  
  281. keys |= (1<<key)
  282. key++
  283. //len += format( menuBody[len], 511-len, "%d. Give Climers God-Mode on Start: %s^n\w", key, cup_god_mode ? "on" : "off" )
  284. switch( cup_god_mode )
  285. {
  286. case 0: len += format( menuBody[len], 511-len, "%d. Give Climers God-Mode on Start: off^n\w", key )
  287. case 1: len += format( menuBody[len], 511-len, "%d. Give Climers God-Mode on Start: on^n\w", key )
  288. }
  289.  
  290. keys |= (1<<key)
  291. key++
  292. len += format( menuBody[len], 511-len, "%d. Erase finish locs^n\w", key )
  293.  
  294.  
  295. len += format(menuBody[len],511-len,"^n0. Back")
  296.  
  297.  
  298. show_menu( id, keys, menuBody )
  299. }
  300.  
  301. public jc_amenu(id,level,cid)
  302. {
  303. if (!cmd_access(id,level,cid,1))
  304. {
  305. return PLUGIN_HANDLED
  306. }
  307.  
  308. display_cup_amenu( id, 0 )
  309.  
  310. return PLUGIN_HANDLED
  311. }
  312.  
  313. public say_time_remaining( time )
  314. {
  315. if( time < 0 )
  316. {
  317. return
  318. }
  319.  
  320. new secs = time % 60
  321. new mins = time / 60
  322.  
  323. new time_str[128]
  324. new say_str[128]
  325. new voice[6]
  326. if( announc_voice == CUP_VOICE_FEMALE )
  327. {
  328. voice = "fvox"
  329. }
  330. else
  331. {
  332. voice = "vox"
  333. }
  334.  
  335. if( time < 11 )
  336. {
  337. format( time_str, 127, "%d", secs )
  338. set_hudmessage(255, 255, 255, -1.0, 0.85, 0, 0.0, 1.1, 0.1, 0.5, 1)
  339.  
  340. new sec_str[32]
  341. num_to_word(secs,sec_str,31)
  342.  
  343. format( say_str,127,"spk ^"%s/%s^"", voice, sec_str )
  344. }
  345. else
  346. {
  347. format( time_str, 127, "Time remaining: %d:%02d", mins, secs )
  348. set_hudmessage(255, 255, 255, -1.0, 0.85, 0, 0.0, 3.0, 0.0, 0.5, 1)
  349.  
  350. new sec_str[32]
  351. num_to_word(secs,sec_str,31)
  352.  
  353. if( mins != 0 )
  354. {
  355. new min_str[32]
  356. num_to_word(mins,min_str,31)
  357.  
  358. if( secs != 0 )
  359. {
  360. format( say_str, 127,"spk ^"%s/%sminutes %sseconds remaining ^"", voice, min_str, sec_str )
  361. }
  362. else
  363. {
  364. format( say_str, 127,"spk ^"%s/%sminutes remaining ^"", voice, min_str )
  365. }
  366. }
  367. else
  368. {
  369. format( say_str, 127,"spk ^"%s/%sseconds remaining ^"", voice, sec_str )
  370. }
  371. }
  372.  
  373. show_hudmessage(0,time_str)
  374. client_cmd(0,say_str)
  375. }
  376.  
  377. public time_remaining()
  378. {
  379. if( cup_start_time < 0)
  380. {
  381. cup_start_time = get_user_time(cup_start_id)
  382. }
  383.  
  384. new climb_time = get_user_time(cup_start_id) - cup_start_time
  385. new left_time = cup_time - climb_time
  386.  
  387. if( (announc_interval * announcments) <= climb_time )
  388. {
  389. announcments++
  390. say_time_remaining( left_time )
  391. }
  392.  
  393. if( left_time < 11 )
  394. {
  395. say_time_remaining( left_time )
  396. }
  397.  
  398. if( left_time < 0 )
  399. {
  400. jc_finish_cup()
  401. }
  402. }
  403.  
  404. public start_countdown()
  405. {
  406. say_time_remaining( cup_start_countdown )
  407. cup_start_countdown--
  408. if( cup_start_countdown <= 0 )
  409. {
  410. client_print(0,print_chat,"[%s] Jump Cup has been started!", jc_pluginname )
  411. remove_task(8638458)
  412.  
  413. new players[32], num;
  414. get_players(players, num, "ach", "");
  415. for( new i = 0; i < num; i++ )
  416. {
  417. client_cmd(players[i],"/reset")
  418. set_pev(players[i], pev_flags, pev(players[i], pev_flags) & ~FL_FROZEN);
  419. }
  420.  
  421. set_task(1.0,"time_remaining",8638459,"",0,"b")
  422.  
  423. }
  424. }
  425. public enable_godmode()
  426. {
  427. if( cup_god_mode )
  428. {
  429. new players[32], inum
  430. get_players(players,inum)
  431.  
  432. for(new i = 0; i < inum; ++i)
  433. {
  434. switch( cup_god_mode )
  435. {
  436. case 1: set_pev(players[i], pev_takedamage, 0.0);
  437. }
  438. }
  439. client_print(0,print_chat,"[%s] Godmode has been enabled on all players!", jc_pluginname )
  440. }
  441. }
  442. public jc_start_cup(id)
  443. {
  444. for( new i = 0 ; i < 33; i++)
  445. {
  446. finish_locs[i][0] = 0.0
  447. finish_locs[i][1] = 0.0
  448. finish_locs[i][2] = 0.0
  449. climber[i] = ""
  450. }
  451.  
  452. // set_user_noclip(0,0)
  453. // set_user_gravity( 0, 1.0 )
  454. // set_pev(0, pev_takedamage, 1.0)
  455.  
  456. cup_start_id = id
  457.  
  458. cup_start_time = -1
  459. cup_status = CUP_STATUS_RUNNING
  460.  
  461. announcments = 0
  462. if( cup_rr_start )
  463. {
  464. set_cvar_string( "sv_restartround", "1")
  465.  
  466. set_task(1.0,"time_remaining",8638459,"",0,"b")
  467. client_print(0,print_chat,"[%s] Jump Cup has been started!", jc_pluginname )
  468. }
  469. else
  470. {
  471. cup_start_countdown = CUP_START_COUNTDOWN
  472.  
  473. set_task(1.0,"start_countdown",8638458,"",0,"b")
  474.  
  475. new Float:vOrigin[3];
  476. pev(id, pev_origin, vOrigin);
  477. new players[32], num;
  478. get_players(players, num, "ach", "");
  479. for( new i = 0; i < num; i++ )
  480. {
  481. set_user_noclip(players[i],0)
  482. set_user_gravity( players[i], 1.0 )
  483. set_pev(players[i], pev_takedamage, 1.0)
  484. set_pev(players[i], pev_velocity, Float:{0.0, 0.0, 0.0});
  485. if(is_user_alive(id)) {
  486. engfunc(EngFunc_SetOrigin, players[i], vOrigin);
  487. }
  488. // else { set_user_origin(players[i], start_loc) }
  489. else {
  490. client_cmd(players[i],"say /start")
  491. }
  492. set_pev(players[i], pev_flags, pev(players[i], pev_flags) | FL_FROZEN);
  493. }
  494.  
  495. client_print(0,print_chat,"[%s] Jump Cup will start in %d seconds!", jc_pluginname, cup_start_countdown )
  496. }
  497.  
  498. set_task(2.5,"enable_godmode",8638457,"",0)
  499.  
  500. return PLUGIN_HANDLED
  501. }
  502.  
  503. public jc_finish_cup()
  504. {
  505. remove_task(8638459)
  506.  
  507. new players[32]
  508. get_players(players,climbers)
  509.  
  510. for(new i = 0; i < climbers; ++i)
  511. {
  512. if( is_user_alive(players[i]) )
  513. {
  514. pev(players[i], pev_origin, finish_locs[i]);
  515. }
  516. get_user_name(players[i],climber[i],31)
  517. }
  518. cup_status = CUP_STATUS_FINISHED
  519. if( cup_rr_end )
  520. {
  521. set_cvar_string( "sv_restartround", "1")
  522. }
  523. client_print(0,print_chat,"[%s] Jump Cup has ended. Admin will now /poscheck and find loosers", jc_pluginname )
  524. }
  525.  
  526. public cup_end(id,level,cid)
  527. {
  528. if (!cmd_access(id,level,cid,1))
  529. {
  530. return PLUGIN_HANDLED
  531. }
  532. if( cup_status != CUP_STATUS_FINISHED && cup_status != CUP_STATUS_NONE )
  533. {
  534. jc_finish_cup()
  535. }
  536. return PLUGIN_HANDLED
  537. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement