HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /*
  2. Formatright © 2009, Jon
  3.  
  4. "Mute voting" is free software;
  5. you can redistribute it and/or modify it under the terms of the
  6. GNU General Public License as published by the Free Software Foundation.
  7.  
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12.  
  13. You should have received a copy of the GNU General Public License
  14. along with "Mute voting"; if not, write to the
  15. Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  16. Boston, MA 02111-1307, USA.
  17. */
  18.  
  19. #include <amxmodx>
  20. #include <cstrike>
  21. #include <engine>
  22.  
  23. #define PLUGIN "Mute Voting"
  24. #define VERSION "1.4"
  25. #define AUTHOR "Jon <--átírta magyarra Norbee."
  26.  
  27. #define IsMuted(%1) (get_speak(%1) & SPEAK_MUTED)
  28. #define ADMIN_FLAG ADMIN_BAN
  29.  
  30. enum _:Choices
  31. {
  32. VOTE_YES,
  33. VOTE_NO
  34. }
  35.  
  36. const TASK_UNMUTE = 12940;
  37.  
  38. new g_pAllTalk, g_pAdminImmunity, g_pCoolDown, g_pDuration, g_pMuteChat, g_pAdminOnly;
  39.  
  40. new g_iVoteMenu;
  41. new g_iMaxPlayers;
  42. new g_iMsgSayText;
  43. new g_iMutedPlayers;
  44. new g_iVotes[ Choices ];
  45. new g_szSteamId[ 33 ][ 35 ];
  46.  
  47. new Float:g_fCoolDown[ 33 ];
  48. new Trie:g_tSteamIDs;
  49.  
  50. public plugin_init( )
  51. {
  52. register_plugin( PLUGIN, VERSION, AUTHOR );
  53.  
  54. g_iMaxPlayers = get_maxplayers( );
  55. g_iMsgSayText = get_user_msgid( "SayText" );
  56.  
  57. g_pAdminImmunity = register_cvar( "mv_immunity", "1" );
  58. g_pCoolDown = register_cvar( "mv_cooldown", "120.0" );
  59. g_pDuration = register_cvar( "mv_duration", "480.0" );
  60. g_pMuteChat = register_cvar( "mv_mutechat", "0" );
  61. g_pAdminOnly = register_cvar( "mv_adminonly", "0" );
  62. g_pAllTalk = get_cvar_pointer( "sv_alltalk" );
  63.  
  64. register_clcmd( "say", "CmdSay" );
  65. register_clcmd( "say /votemute", "ShowPlayerMenu" );
  66. register_clcmd( "say /mutevote", "ShowPlayerMenu" );
  67.  
  68. g_tSteamIDs = TrieCreate( );
  69. }
  70.  
  71. public plugin_end( )
  72. {
  73. TrieDestroy( g_tSteamIDs );
  74. }
  75.  
  76. public client_putinserver( iClient )
  77. {
  78. get_user_authid( iClient, g_szSteamId[ iClient ], 34 );
  79.  
  80. if( TrieKeyExists( g_tSteamIDs, g_szSteamId[ iClient ] ) )
  81. {
  82. set_speak( iClient, SPEAK_MUTED );
  83. }
  84. }
  85.  
  86. public CmdSay( iClient )
  87. {
  88. if( get_pcvar_num( g_pMuteChat ) && IsMuted( iClient ) )
  89. {
  90. return PLUGIN_HANDLED_MAIN;
  91. }
  92.  
  93. return PLUGIN_CONTINUE;
  94. }
  95.  
  96. public ShowPlayerMenu( iClient )
  97. {
  98. if( get_pcvar_num( g_pAdminOnly ) && !( get_user_flags( iClient ) & ADMIN_FLAG ) )
  99. {
  100. PrintColor( iClient, "Csak admin tud kezdeni nemaito szavazatot." );
  101.  
  102. return PLUGIN_HANDLED;
  103. }
  104.  
  105. new iMenu = menu_create( "Select a player", "HandlePlayerMenu" ), szMenuText[ 33 ], szName[ 33 ], szNum[ 2 ];
  106.  
  107. for( new i = 1; i <= g_iMaxPlayers; i++ )
  108. {
  109. if( !is_user_connected( i ) )
  110. {
  111. continue;
  112. }
  113.  
  114. get_user_name( i, szName, 32 );
  115. num_to_str( i, szNum, 1 );
  116.  
  117. if( IsMuted( i )
  118. || get_pcvar_num( g_pAdminImmunity ) && get_user_flags( i ) & ADMIN_FLAG
  119. || !get_pcvar_num( g_pAllTalk ) && cs_get_user_team( iClient ) != cs_get_user_team( i ) )
  120. {
  121. formatex( szMenuText, 32, "\d%s", szName );
  122.  
  123. menu_additem( iMenu, szMenuText, szNum );
  124. }
  125.  
  126. else
  127. {
  128. menu_additem( iMenu, szName, szNum );
  129. }
  130. }
  131.  
  132. menu_display( iClient, iMenu );
  133. }
  134.  
  135. public HandlePlayerMenu( iClient, iMenu, iItem )
  136. {
  137. if( iItem == MENU_EXIT )
  138. {
  139. return PLUGIN_HANDLED;
  140. }
  141.  
  142. new _dummy, szPlayer[ 3 ];
  143. menu_item_getinfo( iMenu, iItem, _dummy, szPlayer, 2, "", 0, _dummy );
  144.  
  145. new iPlayer = str_to_num( szPlayer ), Float:fTime = get_gametime( );
  146.  
  147. if( g_iVoteMenu > 0 )
  148. {
  149. PrintColor( iClient, "Ott van mar egy folyamatos szavazat." );
  150. }
  151.  
  152. else if( g_fCoolDown[ iClient ] > fTime )
  153. {
  154. PrintColor( iClient, "Nem reg elinditottal egy nema szavazatot, probald megint %.1f másodperc mulva.", g_fCoolDown[ iClient ] - fTime );
  155. }
  156.  
  157. else if( !get_pcvar_num( g_pAllTalk ) && cs_get_user_team( iClient ) != cs_get_user_team( iPlayer ) )
  158. {
  159. PrintColor( iClient, "Ez a jatekos nincs a csapatodban (alltalkot nem teszik lehetove)." );
  160. }
  161.  
  162. else if( IsMuted( iPlayer ) )
  163. {
  164. PrintColor( iClient, "Ezt a jatekost mar elnemitottak." );
  165. }
  166.  
  167. else if( get_pcvar_num( g_pAdminImmunity ) && get_user_flags( iPlayer ) & ADMIN_FLAG )
  168. {
  169. PrintColor( iClient, "Nem tud elinditani egy szavazatot az admin." );
  170. }
  171.  
  172. else
  173. {
  174. ShowVoteMenu( iPlayer );
  175.  
  176. set_task( 12.0, "TaskEndVote", iPlayer );
  177.  
  178. g_fCoolDown[ iClient ] = fTime + get_pcvar_float( g_pCoolDown );
  179.  
  180. menu_destroy( iMenu );
  181. return PLUGIN_HANDLED;
  182. }
  183.  
  184. menu_destroy( iMenu );
  185. ShowPlayerMenu( iClient );
  186.  
  187. return PLUGIN_HANDLED;
  188. }
  189.  
  190. ShowVoteMenu( iTarget )
  191. {
  192. new szName[ 33 ], szMenu[ 40 ];
  193. get_user_name( iTarget, szName, 32 );
  194. formatex( szMenu, 39, "Mute %s?", szName );
  195.  
  196. g_iVoteMenu = menu_create( szMenu, "HandleVoteMenu" );
  197.  
  198. menu_additem( g_iVoteMenu, "Igen", "1" );
  199. menu_additem( g_iVoteMenu, "Nem", "2" );
  200. menu_setprop( g_iVoteMenu, MPROP_EXIT, MEXIT_NEVER );
  201.  
  202. for( new i = 1; i <= g_iMaxPlayers; i++ )
  203. {
  204. if( !is_user_connected( i ) || i == iTarget || !get_pcvar_num( g_pAllTalk ) && cs_get_user_team( i ) != cs_get_user_team( iTarget ) )
  205. {
  206. continue;
  207. }
  208.  
  209. menu_display( i, g_iVoteMenu );
  210. }
  211. }
  212.  
  213. public HandleVoteMenu( iClient, iMenu, iItem )
  214. {
  215. if( iItem == MENU_EXIT || !g_iVoteMenu )
  216. {
  217. return PLUGIN_HANDLED;
  218. }
  219.  
  220. new _dummy, szChoice[ 2 ];
  221. menu_item_getinfo( iMenu, iItem, _dummy, szChoice, 1, "", 0, _dummy );
  222.  
  223. g_iVotes[ str_to_num( szChoice ) - 1 ]++;
  224.  
  225. return PLUGIN_HANDLED;
  226. }
  227.  
  228. public TaskEndVote( iTarget )
  229. {
  230. PrintColor( 0, "A szavazat veget ert. Igen: %i - Nem: %i", g_iVotes[ VOTE_YES ], g_iVotes[ VOTE_NO ] );
  231.  
  232. new szName[ 33 ];
  233. get_user_name( iTarget, szName, 32 );
  234.  
  235. if( g_iVotes[ VOTE_YES ] < g_iVotes[ VOTE_NO ] || !g_iVotes[ VOTE_YES ] && !g_iVotes[ VOTE_NO ] )
  236. {
  237. PrintColor( 0, "%s-t nem nemitottak el.", szName );
  238. }
  239.  
  240. else
  241. {
  242. PrintColor( 0, "%s elnemitottak.", szName );
  243. TrieSetCell( g_tSteamIDs, g_szSteamId[ iTarget ], g_iMutedPlayers++ );
  244.  
  245. set_speak( iTarget, SPEAK_MUTED );
  246. set_task( get_pcvar_float( g_pDuration ), "TaskUnmute", iTarget + TASK_UNMUTE,
  247. g_szSteamId[ iTarget ], 34 );
  248. }
  249.  
  250. menu_destroy( g_iVoteMenu );
  251.  
  252. g_iVotes[ VOTE_YES ] = 0;
  253. g_iVotes[ VOTE_NO ] = 0;
  254. g_iVoteMenu = 0;
  255. }
  256.  
  257. public TaskUnmute( szAuthId[ ] )
  258. {
  259. TrieDeleteKey( g_tSteamIDs, szAuthId );
  260.  
  261. g_iMutedPlayers--;
  262.  
  263. new iClient = find_player( "c", szAuthId );
  264.  
  265. if( iClient > 0 )
  266. {
  267. new szName[ 33 ];
  268. get_user_name( iClient, szName, 32 );
  269.  
  270. PrintColor( 0, "%s is no longer muted.", szName );
  271. }
  272. }
  273.  
  274. PrintColor( iClient, szText[], any:... )
  275. {
  276. new szMsg[ 191 ];
  277. formatex( szMsg, 190, "^x04-|^x01 " );
  278. vformat( szMsg[ 5 ], 185, szText, 3 );
  279.  
  280. message_begin( iClient ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, g_iMsgSayText, _, iClient );
  281. write_byte( 1 );
  282. write_string( szMsg );
  283. message_end();
  284. }
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  312. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1044\\ f0\\ fs16 \n\\ par }
  313. */
  314.