nucLeaRsc2

Untitled

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