Member
Join Date: Apr 2013
Location: Karachi, Pakistan
07-22-2013
, 18:17
Please review my plugin, Any room for improvements?
#1
Hey, I am just learning amxx and pawn language. I play in HsCorp community, I made them a plugin for afk_6killer server (me manager there). It is a death match server. So, if you join any team you were not able to join spectator mode for spectating cheaters. Also, If your're in spectator mode, You can't join any team. So I made a /team function for it. Also an "/afk" function so if you're afk you can goto spec mode and you don't loose score or deaths. If you type in again /afk in spec mode. You join your previous team. I also made a team-balancer for that server. Since I am learning, I made everything myself. It is working right now and installed on that server. I just want to know, what useless code or mistakes I have made in it. Is there a better way of doing it? All the criticism is welcome! Just point any mistake you see or anything which can be done in a better way.
Spoiler
PHP Code:
#include <amxmodx> #include <amxmisc> #include <cstrike> #include <Hamsandwich> #include <fun> #define PLUGIN "Mercury" #define VERSION "1.0" #define AUTHOR "Waleed" new afk [ 33 ], name [ 32 ], team [ 33 ]; public plugin_init () { register_plugin ( PLUGIN , VERSION , AUTHOR ); register_clcmd ( "say /afk" , "make_afk" ); register_clcmd ( "say /team" , "show_team_menu" ); register_clcmd ( "say /balance" , "BalanceTeam" ); register_logevent ( "newRound" , 2 , "1=Round_Start" ) } public newRound ( id ){ remove_task ( 1 ); set_task ( 180.0 , "ExecuteTeamBalancer" , 1 , _ , _ , "b" ) } public make_afk ( id ){ if( is_user_alive ( id ) == 1 && afk [ id ] == 0 && team [ id ] == 0 ){ // Reset variables afk [ id ] = 1 ; team [ id ] = get_user_team ( id ); // Transfer to Spec mode. cs_set_user_team ( id , CS_TEAM_SPECTATOR ); user_kill ( id , 1 ); }else if( is_user_alive ( id ) == 0 && afk [ id ] == 1 && team [ id ] != 0 ){ // Transfer to team cs_set_user_team ( id , team [ id ]); // Reset variables afk [ id ] = 0 ; team [ id ] = 0 ; // Respawn and ReCalc. score ExecuteHamB ( Ham_CS_RoundRespawn , id ); cs_set_user_deaths ( id , get_user_deaths ( id ) - 1 ); } } public show_team_menu ( id ){ new menu = menu_create ( "Which team you want to switch to?" , "menu_handler" ); menu_additem ( menu , "Switch to Terrorist!" , "" , 0 ); menu_additem ( menu , "Switch to Counter-Terrorist!" , "" , 0 ); menu_additem ( menu , "Switch to Specatate!" , "" , 0 ); menu_setprop ( menu , MPROP_EXIT , MEXIT_ALL ); menu_display ( id , menu , 0 ); } public menu_handler ( id , menu , item ){ switch( item ) { //Transfer to T case 0 : { cs_set_user_team ( id , CS_TEAM_T ); ExecuteHamB ( Ham_CS_RoundRespawn , id ); client_print ( id , print_chat , "[M-Teamer] You're now on Terrorist side!" ); menu_destroy ( menu ); return PLUGIN_HANDLED ; } //Transfer to CT case 1 : { cs_set_user_team ( id , CS_TEAM_CT ); ExecuteHamB ( Ham_CS_RoundRespawn , id ); client_print ( id , print_chat , "[M-Teamer] You're now on Counter-Terrorist side!" ); menu_destroy ( menu ); return PLUGIN_HANDLED ; } //Transfer to Sp case 2 : { //Recal. and set user's deaths and points. set_user_frags ( id , get_user_frags ( id ) + 1 ); cs_set_user_deaths ( id , get_user_deaths ( id ) - 1 ); client_cmd ( id , "kill" ); cs_set_user_team ( id , CS_TEAM_SPECTATOR ); menu_destroy ( menu ); return PLUGIN_HANDLED ; } case MENU_EXIT : { menu_destroy ( menu ); return PLUGIN_HANDLED ; } } menu_destroy ( menu ); return PLUGIN_HANDLED ; } public ExecuteTeamBalancer (){ new ctplayers [ 32 ], tplayers [ 32 ], num , num2 , ePlayer ; get_players ( ctplayers , num , "ae" , "CT" ); get_players ( tplayers , num2 , "ae" , "TERRORIST" ); if( num == num2 ){ return PLUGIN_HANDLED ; }else if( num > num2 ){ ePlayer = floatround (( num - num2 )/ 2.0 , floatround_ceil ); if( ePlayer >= 1 ){ for ( new i = 0 ; i <= ePlayer ; i ++){ cs_set_user_team ( ctplayers [ i ], CS_TEAM_T ); ExecuteHamB ( Ham_CS_RoundRespawn , ctplayers [ i ]); i ++; } return PLUGIN_HANDLED ; } }else if( num2 > num ){ ePlayer = floatround (( num2 - num )/ 2.0 , floatround_ceil ); if( ePlayer >= 1 ){ for ( new i = 0 ; i <= ePlayer ; i ++){ cs_set_user_team ( tplayers [ i ], CS_TEAM_CT ); ExecuteHamB ( Ham_CS_RoundRespawn , tplayers [ i ]); i ++; } return PLUGIN_HANDLED ; } } return PLUGIN_HANDLED ; } public BalanceTeam ( id ){ if( is_user_admin ( id ) == 1 ){ ExecuteTeamBalancer (); } }
EDIT: Updated code 8/13/2013
Spoiler
PHP Code:
#include <amxmodx> #include <cstrike> #include <hamsandwich> new afkers [ 33 ], teams [ 33 ], name [ 33 ], mode , csdm = 0 ; public plugin_init () { register_logevent ( "RoundStart" , 2 , "1=Round_Start" ); register_logevent ( "RoundEnd" , 2 , "1=Round_End" ); register_plugin ( "Mercury" , "2.0" , "Waleed" ); register_clcmd ( "say /afk" , "makeafk" ); register_clcmd ( "say /team" , "showteammenu" ); register_clcmd ( "say /balance" , "BalanceTeam" ); mode = register_cvar ( "amx_m_mode" , "1" ) if( get_pcvar_num ( mode ) == 1 ){ csdm = 1 ; } } public RoundStart ( id ){ TeamBalancer (); set_task ( 30.0 , "TeamBalancer" , 13345 , _ , _ , "b" ); } public RoundEnd ( id ){ remove_task ( 13345 ); } public makeafk ( id ){ if( is_user_alive ( id ) && afkers [ id ] == 0 ){ get_user_name ( id , name , charsmax ( name )); client_print ( 0 , print_chat , "[AMXX] %s is AFK!" , name ); client_print ( id , print_chat , "[AMXX] Type /afk again to play." ); teams [ id ] = get_user_team ( id ); cs_set_user_team ( id , CS_TEAM_SPECTATOR ); user_kill ( id , 1 ); afkers [ id ] = 1 ; }else if( afkers [ id ] == 1 ){ get_user_name ( id , name , charsmax ( name )); client_print ( 0 , print_chat , "[AMXX] %s is no longer AFK." , name ); cs_set_user_team ( id , teams [ id ]); if( csdm == 1 ){ ExecuteHamB ( Ham_CS_RoundRespawn , id ); client_cmd ( id , "say /guns" ); }else{ client_print ( id , print_chat , "[AMXX] You will respawn in next round." ); } afkers [ id ] = 0 ; } return PLUGIN_HANDLED ; } public client_disconnect ( id ){ afkers [ id ] = 0 ; } public showteammenu ( id ){ if( afkers [ id ] == 1 ){ client_print ( id , print_chat , "[AMXX] Type /afk again to play." ); }else{ new menu = menu_create ( "Which team you want to switch to?" , "menu_handler" ); menu_additem ( menu , "Switch to Terrorist!" , "" , 0 ); menu_additem ( menu , "Switch to Counter-Terrorist!" , "" , 0 ); menu_additem ( menu , "Switch to Specatate!" , "" , 0 ); menu_setprop ( menu , MPROP_EXIT , MEXIT_ALL ); menu_display ( id , menu , 0 ); } return PLUGIN_HANDLED ; } public menu_handler ( id , menu , item ){ switch( item ) { case 0 : { cs_set_user_team ( id , CS_TEAM_T ); get_user_name ( id , name , charsmax ( name )); client_print ( 0 , print_chat , "[AMXX] %s is now on Terrorist side." , name ); ExecuteHamB ( Ham_CS_RoundRespawn , id ); menu_destroy ( menu ); } case 1 : { cs_set_user_team ( id , CS_TEAM_CT ); cs_set_user_team ( id , CS_TEAM_T ); client_print ( 0 , print_chat , "[AMXX] %s is now on Counter-Terrorist side." , name ); ExecuteHamB ( Ham_CS_RoundRespawn , id ); menu_destroy ( menu ); } case 2 : { cs_set_user_team ( id , CS_TEAM_SPECTATOR ); user_kill ( id , 1 ); menu_destroy ( menu ); } case MENU_EXIT : { menu_destroy ( menu ); } } menu_destroy ( menu ); return PLUGIN_HANDLED ; } public BalanceTeam ( id ){ if( get_user_flags ( id ) & ADMIN_KICK ){ TeamBalancer (); } } public TeamBalancer (){ new tplayers [ 32 ], ctplayers [ 32 ], tcount , ctcount , ePlayer , name [ 32 ] ; get_players ( tplayers , tcount , "e" , "TERRORIST" ); get_players ( ctplayers , ctcount , "e" , "CT" ); client_print ( 0 , print_chat , "[AMXX] Balancing teams..." ); if( tcount == ctcount ){ client_print ( 0 , print_chat , "[AMXX] Teams are balanced." ); return PLUGIN_HANDLED ; }else if( tcount > ctcount ){ ePlayer = floatround (( tcount - ctcount )/ 2.0 , floatround_floor ); if( ePlayer > 0 ){ for(new i = 0 ; i < ePlayer ; i ++){ get_user_name ( tplayers [ i ], name , charsmax ( name )); client_print ( 0 , print_chat , "[AMXX] Transferring %s to CTs for balancing teams." , name ); cs_set_user_team ( tplayers [ i ], CS_TEAM_CT ); if( csdm == 1 ){ ExecuteHamB ( Ham_CS_RoundRespawn , tplayers [ i ]); } } } client_print ( 0 , print_chat , "[AMXX] Teams are balanced." ); }else if( ctcount > tcount ){ ePlayer = floatround (( ctcount - tcount )/ 2.0 , floatround_floor ); if( ePlayer > 0 ){ for(new i = 0 ; i < ePlayer ; i ++){ get_user_name ( ctplayers [ i ], name , charsmax ( name )); client_print ( 0 , print_chat , "[AMXX] Transferring %s to Ts for balancing teams." , name ); cs_set_user_team ( ctplayers [ i ], CS_TEAM_T ); if( csdm == 1 ){ ExecuteHamB ( Ham_CS_RoundRespawn , tplayers [ i ]); } } } client_print ( 0 , print_chat , "[AMXX] Teams are balanced." ); } return PLUGIN_HANDLED ; }
Thank You!
Last edited by devWaleed; 08-12-2013 at 18:01 .
Reason: Added improved code for afk thingy.