Senior Member
|
11-12-2011
, 15:34
Re: Structure HUD [HELP]
|
#90
|
Quote:
Originally Posted by Bugsy
Added "random" as a vote option. Also, everything can be controlled via cvar now.
vm_votetime, default 30, number of seconds in each vote
vm_nummaps, default 10, number of maps in each vote
vm_novoteextend, default 1, if no votes current map remains
PHP Code:
#include <amxmodx>
#include <amxmisc>
new const Version[] = "0.4";
const TaskMapHUD = 1092;
const MAX_VOTEMAPS = 50;
enum _:MapInfo
{
MapIndex,
MapVotes
}
new g_iVoteMenu , g_iSyncHUDObj[ 2 ] , g_iVoteMapCount , g_iVoteTime , g_iVoteMaps;
new g_iMapVotes[ MAX_VOTEMAPS ][ MapInfo ] , g_szVoteMaps[ MAX_VOTEMAPS ][ 33 ];
new g_iNumPlayers , g_iVoteCount , g_iDisplayCount;
new g_pVoteTime , g_pVoteMaps , g_pNoVoteExtend;
public plugin_init()
{
register_plugin( "Vote Map" , Version , "bugsy" );
g_iSyncHUDObj[ 0 ] = CreateHudSyncObj();
g_iSyncHUDObj[ 1 ] = CreateHudSyncObj();
register_concmd( "say votemap" , "VoteMap" );
register_concmd( "say_team votemap" , "VoteMap" );
g_pVoteTime = register_cvar( "vm_votetime" , "30" );
g_pVoteMaps = register_cvar( "vm_nummaps" , "10" );
g_pNoVoteExtend = register_cvar( "vm_novoteextend" , "1" );
}
public VoteMap( id )
{
if ( task_exists( TaskMapHUD ) )
{
client_print( id , print_chat , "* There is already a vote taking place so cannot start vote." );
return PLUGIN_HANDLED;
}
new szFile[ 64 ] , iPlayers[ 32 ];
get_players( iPlayers , g_iNumPlayers );
if ( !g_iNumPlayers )
return PLUGIN_HANDLED;
g_iVoteCount = 0;
g_iVoteMenu = menu_create( "Vote for Map" , "VoteHandler" );
copy( szFile[ get_configsdir( szFile , charsmax( szFile ) ) ] , charsmax( szFile ) , "/maps.ini" );
if( file_exists( szFile ) )
LoadMapFile( szFile );
if ( !g_iVoteMapCount )
{
copy( szFile , charsmax( szFile ) , "mapcycle.txt" );
LoadMapFile( szFile );
}
menu_setprop( g_iVoteMenu , MPROP_EXIT , MEXIT_ALL );
menu_setprop( g_iVoteMenu , MPROP_NUMBER_COLOR , "\w" );
for ( new i = 0 ; i < g_iNumPlayers ; i++ )
menu_display( iPlayers[ i ] , g_iVoteMenu );
g_iDisplayCount = -1;
set_task( 1.0 , "UpdateHUD" , TaskMapHUD , _ , _ , "a" , ( g_iVoteTime = get_pcvar_num( g_pVoteTime ) ) );
UpdateHUD();
return PLUGIN_HANDLED;
}
LoadMapFile( const szFile[] )
{
new szText[ 256 ] , iFile;
iFile = fopen( szFile , "rt" );
g_iVoteMapCount = 0;
copy( g_szVoteMaps[ g_iVoteMapCount++ ] , charsmax( g_szVoteMaps[] ) , "random" );
menu_additem( g_iVoteMenu , "random" )
while( ( g_iVoteMapCount < ( g_iVoteMaps = get_pcvar_num( g_pVoteMaps ) ) ) && !feof( iFile ) && fgets( iFile , szText , charsmax( szText ) ) )
{
trim( szText );
if( ( ( szText[ 0 ] == '^0' ) || ( szText[ 0 ] == '/' ) || ( szText[ 0 ] == ';' ) ) || !is_map_valid( szText ) )
continue;
copy( g_szVoteMaps[ g_iVoteMapCount ] , charsmax( g_szVoteMaps[] ) , szText );
g_iMapVotes[ g_iVoteMapCount ][ MapIndex ] = g_iVoteMapCount++;
menu_additem( g_iVoteMenu , szText )
}
fclose( iFile );
}
public VoteHandler( id , menu , item )
{
if ( item == MENU_EXIT )
return PLUGIN_HANDLED;
static szName[ 33 ];
get_user_name( id , szName , charsmax( szName ) );
g_iMapVotes[ item ][ MapVotes ]++;
g_iVoteCount++;
client_print( 0 , print_chat , "* %s voted for %s" , szName , g_szVoteMaps[ item ] );
return PLUGIN_HANDLED;
}
public UpdateHUD()
{
if ( ++g_iDisplayCount == g_iVoteTime )
{
SelectMap();
}
else
{
static szHUD[ MAX_VOTEMAPS * 40 ] , iPos , iPos2;
static g_iMapVotesTemp[ MAX_VOTEMAPS ][ MapInfo ];
iPos = copy( szHUD , charsmax( szHUD ) , "Map Votes:" );
szHUD[ iPos++ ] = EOS;
iPos2 = iPos;
if ( g_iVoteCount )
{
g_iMapVotesTemp = g_iMapVotes;
SortCustom2D( g_iMapVotesTemp , g_iVoteMaps , "SortMaps" );
for ( new i = 0 ; i < g_iVoteMapCount ; i++ )
if ( g_iMapVotesTemp[ i ][ MapVotes ] )
iPos += formatex( szHUD[ iPos ] , charsmax( szHUD ) - iPos , "%s - %d vote%s^n" , g_szVoteMaps[ g_iMapVotesTemp[ i ][ MapIndex ] ] , g_iMapVotesTemp[ i ][ MapVotes ] , ( g_iMapVotesTemp[ i ][ MapVotes ] != 1 ) ? "s" : "" );
}
else
{
iPos += copy( szHUD[ iPos ] , charsmax( szHUD ) - iPos , "<No Votes>^n" );
}
iPos += formatex( szHUD[ iPos ] , charsmax( szHUD ) - iPos , "^n%d second%s remaining" , g_iVoteTime - g_iDisplayCount , ( g_iVoteTime - g_iDisplayCount ) != 1 ? "s" : "" );
set_hudmessage( 0 , 255 , 0 , 0.58 , 0.12 , 0 , 6.0 , 1.1 );
ShowSyncHudMsg( 0 , g_iSyncHUDObj[ 0 ] , szHUD );
set_hudmessage( 255 , 255 , 255 , 0.58 , 0.20 , 0 , 6.0 , 1.1 );
ShowSyncHudMsg( 0 , g_iSyncHUDObj[ 1 ] , szHUD[ iPos2 ] );
}
}
SelectMap()
{
new iMostVotes , iActualWinner , iWinner = -1;
menu_destroy( g_iVoteMenu );
for ( new i = 0 ; i < g_iVoteMapCount ; i++ )
{
if ( g_iMapVotes[ i ][ MapVotes ] > iMostVotes )
{
iMostVotes = g_iMapVotes[ i ][ MapVotes ];
iWinner = i;
}
}
if ( iWinner <= 0 )
{
new iNoVoteExtend = get_pcvar_num( g_pNoVoteExtend );
if ( ( iWinner == -1 ) && iNoVoteExtend )
{
client_print( 0 , print_chat , "* No votes were made so the current map will be extended." );
return;
}
iActualWinner = iWinner;
iWinner = random( g_iVoteMapCount );
client_print( 0 , print_chat , "* %s %s was selected randomly as next map." , ( iActualWinner == -1 ) ? "No votes were made so" : "Random map had the most votes and" , g_szVoteMaps[ iWinner ] );
}
else
{
client_print( 0 , print_chat , "* %s has received %d vote%s and will be the next map!" , g_szVoteMaps[ iWinner ] , iMostVotes , ( iMostVotes != 1 ) ? "s" : "" );
}
message_begin( MSG_ALL , SVC_INTERMISSION );
message_end();
set_task( 3.0 , "ChangeMap" , iWinner );
}
public ChangeMap( iMapIndex )
{
server_cmd( "changelevel %s" , g_szVoteMaps[ iMapIndex ] );
}
public SortMaps( elem1[] , elem2[] )
{
if( elem1[ 1 ] > elem2[ 1 ] )
return -1;
else if( elem1[ 1 ] < elem2[ 1 ] )
return 1;
return 0;
}
|
Hello bugsy. Your code is perfect: D Podiras help put your code to yap_menu? : (
This is the code of yap_menu
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <yap_menu>
#include <yap_const>
#include <yap_stocks>
#include <yap_natives>
#include <yap_forwards>
#include <yap_modspecific>
new const plugin_author[] = "Twilight Suzuka"
new const plugin_name[] = "YAP-MENU"
new const plugin_version[] = "0.0.1"
public pug_votemap_menu;
public pug_voteteam_menu;
public pug_voteplayers_menu
public pug_voterestart_menu
public pug_votekick_menu
public pug_cvar_vote_time;
public pug_cvar_vote_perc;
public pug_cvar_votemap
public pug_cvar_votemap_e
public pug_cvar_votekick_perc;
new votemap_noswitch
public pug_voting = 0;
public plugin_init()
{
register_plugin(plugin_name,plugin_version,plugin_author);
register_dictionary("yap.txt")
register_dictionary("yap_vote.txt")
pug_cvar_vote_time = register_cvar("pug_vote_delay","20")
pug_cvar_vote_perc = register_cvar("pug_vote_percentage","0.4")
pug_cvar_votemap = register_cvar("pug_votemap","1")
pug_cvar_votemap_e = register_cvar("pug_votemap_enabled","1")
pug_cvar_votekick_perc = register_cvar("pug_votekick_percent","0.7")
//register_pug_admincmd("votemap","cmd_votemap",PUG_CMD_LVL,"Starts a vote on map")
//register_pug_admincmd("voteteams","cmd_voteteams",PUG_CMD_LVL,"Starts a vote on team mode")
register_pug_admincmd("voteplayers","cmd_voteplayers",PUG_CMD_LVL,"Starts a vote on game mode")
register_pug_admincmd("voterestart","cmd_voterestart",PUG_CMD_LVL,"Starts a vote on whether to restart")
register_pug_admincmd("votestop","cmd_voterestart",PUG_CMD_LVL,"Starts a vote on whether to restart")
register_pug_admincmd("votecancel","cmd_voterestart",PUG_CMD_LVL,"Starts a vote on whether to restart")
register_pug_admincmd("votekick","cmd_votekick",_,"<name or #userid> <reason> Starts a votekick")
//parse_header("BOE-E",pug_header,5)
pug_votemap_menu = menu_create("VoteMap:","votemap_handle");
pug_voteteam_menu = menu_create("TeamType:","voteteam_handle");
pug_voterestart_menu = menu_create("VoteRestart:","voterestart_handle");
pug_votekick_menu = menu_create("VoteKick:","votekick_handle");
menu_setprop(pug_votemap_menu,MPROP_EXIT,MEXIT_NEVER)
menu_additem(pug_voteteam_menu,"Not sorted","1")
menu_additem(pug_voteteam_menu,"Skill Sorted","2")
menu_additem(pug_voteteam_menu,"Captain Sorted","3")
menu_additem(pug_voteteam_menu,"Random","4")
menu_setprop(pug_voteteam_menu,MPROP_EXIT,MEXIT_NEVER)
menu_additem(pug_voterestart_menu,"Yes","1")
menu_additem(pug_voterestart_menu,"No","2")
menu_setprop(pug_voterestart_menu,MPROP_EXIT,MEXIT_NEVER)
menu_additem(pug_votekick_menu,"Yes","1")
menu_additem(pug_votekick_menu,"No","2")
menu_setprop(pug_votekick_menu,MPROP_EXIT,MEXIT_NEVER)
}
public plugin_cfg() try_load_votemap_menu()
CREATE_GEN_FORW_ID(firsthalf_forward)
public pug_firsthalf(GEN_FORW_ID(forward_id))
{
firsthalf_forward = forward_id
if( get_pcvar_num(pug_cvar_votemap_e) && get_pcvar_num(pug_cvar_votemap) ) votemap_start();
else voteteam_start();
return PLUGIN_HANDLED;
}
public pug_finished()
{
if(!votemap_noswitch) set_pcvar_num(pug_cvar_votemap_e,1)
}
#define MAX_MAPS 20
new pug_votemap_votes[MAX_MAPS]
new pug_votemap_name[MAX_MAPS][32]
new pug_votemap_count;
public try_load_votemap_menu()
{
// Rukia: Get our maps.ini
static filename[64]
get_configsdir( filename, 63 )
format( filename, 63, "%s/maps.ini", filename )
// Rukia: Otherwise, just use mapcycle
if(file_exists(filename))
{
load_votemap_menu(filename)
if(pug_votemap_count != 0) return;
}
copy(filename,63,"mapcycle.txt")
load_votemap_menu(filename)
}
public load_votemap_menu(filename[])
{
new file = fopen(filename,"rb")
static text[256], szDesc[48], num[10]
while( (pug_votemap_count < MAX_MAPS) && !feof(file) && fgets(file,text,255) )
{
// Rukia: Take out common comment conventions
if(text[0]==';') continue
if( (text[0]=='/') && (text[1]=='/') ) continue
// Rukia: Remove the newline character
text[strlen(text)] = '^0'
// Rukia: Get the map name and description out of what we read
strbreak(text,pug_votemap_name[pug_votemap_count],31,szDesc,47)
// Rukia: If the map is invalid, skip it
if( !is_map_valid( pug_votemap_name[pug_votemap_count] ) ) continue;
// Rukia: If there is no description (such as if we use mapcycle) then just use the first part of the map name
if(szDesc[0] == '^0') strtok(pug_votemap_name[pug_votemap_count],szDesc,47,"",0,'.',1)
// Rukia: The map number will be our index
formatex(num,9,"%i",pug_votemap_count)
// Rukia: Add the item into the menu and move on
menu_additem(pug_votemap_menu, pug_votemap_name[pug_votemap_count],num )
pug_votemap_count++;
}
fclose(file)
}
public cmd_votemap(id,level,cid)
{
if (!cmd_access(id, level, cid, 1) ) return pug_msg_tmp_empty(id,"PUG_CMD_NOTALLOWED")
votemap_start()
return PLUGIN_HANDLED;
}
public votemap_start()
{
if(pug_voting) { set_task(get_pcvar_float(pug_cvar_vote_time),"votemap_start",100 + pug_votemap_menu); return; }
pug_voting = 1;
arrayset(pug_voted,0,33)
arrayset(pug_votemap_votes,0,pug_votemap_count)
pug_display_menu_all(pug_votemap_menu)
client_print(0,print_chat,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_START", "PUG map");
console_print(0,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_START", "PUG map");
set_task(get_pcvar_float(pug_cvar_vote_time),"votemap_end",100 + pug_votemap_menu)
}
public votemap_end()
{
pug_cancel_menu()
pug_voting = 0;
remove_task ( 100 + pug_votemap_menu )
if(votemap_count()) voteteam_start();
}
public votemap_handle(id, menu, item)
{
if( item < 0 ) return PLUGIN_CONTINUE;
static access, callback
static cmd[3], name[32], cmdname[32]
menu_item_getinfo(menu, item, access, cmd,2,cmdname,31, callback);
pug_votemap_votes[str_to_num(cmd)]++;
get_user_name(id,name,31)
client_print(0,print_chat,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTED_FOR", name, cmdname);
console_print(0,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTED_FOR", name, cmdname);
pug_voted[id] = 1;
if(pug_should_stopvote() ) votemap_end()
return PLUGIN_HANDLED;
}
public votemap_count()
{
new winner, winner_votes, votes
for(new i = 0; i < pug_votemap_count; ++i)
{
votes = pug_votemap_votes[i]
if(votes > winner_votes) { winner = i; winner_votes = votes; }
else if(votes == winner_votes) if(random_num(0,1)) { winner = i; winner_votes = votes; }
}
if(pug_votemap_votes[winner] == 0) return pug_msg_tmp_empty(0,"PUG_VOTE_FAILED_NOVOTES")
new Float: tmp = float(pug_get_players()) * get_pcvar_float(pug_cvar_vote_perc)
if( pug_votemap_votes[winner] < floatround(tmp,floatround_floor) )
{
return pug_msg_tmp_empty(0,"PUG_VOTE_FAILED_INSUF_VOTES");
}
client_print(0,print_chat,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_WON", pug_votemap_name[winner]);
console_print(0,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_WON", pug_votemap_name[winner]);
pug_voting = 0;
votemap_noswitch = 1;
set_pcvar_num(pug_cvar_votemap_e,0)
message_begin(MSG_ALL, SVC_INTERMISSION)
message_end()
set_task(5.0,"pug_votemap_change",winner)
return PLUGIN_CONTINUE
}
public pug_votemap_change(winner)
{
server_cmd("changelevel %s",pug_votemap_name[winner]);
}
new pug_voteteam_votes[5]
public cmd_voteteam(id,level,cid)
{
if (!cmd_access(id, level, cid, 1) ) return pug_msg_tmp_empty(id,"PUG_CMD_NOTALLOWED")
voteteam_start()
return PLUGIN_HANDLED;
}
public voteteam_start()
{
if(pug_voting) { set_task(get_pcvar_float(pug_cvar_vote_time),"voteteam_start",100 + pug_voteteam_menu); return; }
pug_voting = 1;
arrayset(pug_voted,0,33)
arrayset(pug_voteteam_votes,0,5)
pug_display_menu_all(pug_voteteam_menu)
client_print(0,print_chat,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_START", "team type");
console_print(0,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_START", "team type");
set_task(get_pcvar_float(pug_cvar_vote_time),"voteteam_end",100 + pug_voteteam_menu)
}
public voteteam_end()
{
pug_cancel_menu()
voteteam_count()
pug_voting = 0;
remove_task ( 100 + pug_voteteam_menu )
continue_gen_forward(firsthalf_forward)
}
public voteteam_handle(id, menu, item)
{
if( item < 0 ) return PLUGIN_CONTINUE;
static access, callback
static cmd[3], name[32], cmdname[32]
menu_item_getinfo(menu, item, access, cmd,2,cmdname,31, callback);
pug_voteteam_votes[str_to_num(cmd)]++;
get_user_name(id,name,31)
client_print(0,print_chat,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTED_FOR", name, cmdname);
console_print(0,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTED_FOR", name, cmdname);
pug_voted[id] = 1;
if(pug_should_stopvote() ) voteteam_end()
return PLUGIN_HANDLED;
}
public voteteam_count()
{
new winrar = (pug_voteteam_votes[1] > pug_voteteam_votes[2]) ? 1 : 2
new winrar2 = (pug_voteteam_votes[3] > pug_voteteam_votes[4]) ? 3 : 4
new allwinrar = (pug_voteteam_votes[winrar] > pug_voteteam_votes[winrar2]) ? winrar : winrar2;
switch(allwinrar)
{
case 1: pug_msg_tmp_empty(0,"PUG_VOTETEAM_UNSORT");
case 2: { pug_teams_optimize(); pug_msg_tmp_empty(0,"PUG_VOTETEAM_SKILLSORT"); }
case 3: { pug_teams_captainsort(); pug_msg_tmp_empty(0,"PUG_VOTETEAM_CAPTAINSORT"); }
case 4: { pug_teams_randomize(); pug_msg_tmp_empty(0,"PUG_VOTETEAM_RANDOM"); }
}
}
public pug_teams_captainsort()
{
pug_msg_tmp_empty(0,"Captain sort not yet implimented, using random sort");
pug_teams_randomize();
}
new pug_voteplayers_votes[33]
new pug_voteplayers_name[33][32]
new pug_voteplayers_count;
public assemble_voteplayers_menu()
{
new team_num = pug_num_teams()
new upper_limit = get_maxplayers() / team_num;
static cmd_name[32], cmd_num[3]
for(new i = 1; i <= upper_limit; ++i)
{
formatex(cmd_name,31,"%i vs. ",i)
for(new a = 2; a < team_num; ++a) format(cmd_name,31,"%s%i vs ",cmd_name,i)
format(cmd_name,31,"%s%i",cmd_name,i)
formatex(pug_voteplayers_name[i],31,cmd_name)
formatex(cmd_num,2,"%i",i)
menu_additem(pug_voteplayers_menu,cmd_name,cmd_num)
++pug_voteplayers_count
}
menu_setprop(pug_voteplayers_menu,MPROP_EXIT,MEXIT_NEVER)
}
public cmd_voteplayers(id,level,cid)
{
if (!cmd_access(id, level, cid, 1) ) return pug_msg_tmp_empty(id,"PUG_CMD_NOTALLOWED")
voteplayers_start()
return PLUGIN_HANDLED;
}
public voteplayers_start()
{
if(pug_voting) { set_task(get_pcvar_float(pug_cvar_vote_time),"voteplayers_start",100 + pug_voteplayers_menu); return; }
pug_voting = 1;
arrayset(pug_voted,0,33)
pug_voteplayers_menu = menu_create("Players:","voteplayers_handle");
assemble_voteplayers_menu()
arrayset(pug_voteplayers_votes,0,33)
pug_display_menu_all(pug_voteplayers_menu)
client_print(0,print_chat,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_START", "game type");
console_print(0,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_START", "game type");
set_task(get_pcvar_float(pug_cvar_vote_time) ,"voteplayers_end",100 + pug_voteplayers_menu)
}
public voteplayers_end()
{
pug_cancel_menu()
menu_destroy ( pug_voteplayers_menu )
voteplayers_count()
pug_voting = 0;
remove_task ( 100 + pug_voteplayers_menu )
}
public voteplayers_handle(id, menu, item)
{
if( item < 0 ) return PLUGIN_CONTINUE;
static access, callback
static cmd[3], name[32], cmdname[32]
menu_item_getinfo(menu, item, access, cmd,2,cmdname,31, callback);
pug_voteplayers_votes[str_to_num(cmd)]++;
get_user_name(id,name,31)
client_print(0,print_chat,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTED_FOR", name, cmdname);
console_print(0,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTED_FOR", name, cmdname);
pug_voted[id] = 1;
if(pug_should_stopvote() ) voteplayers_end()
return PLUGIN_HANDLED;
}
public voteplayers_count()
{
new winner, winner_votes, votes
for(new i = 0; i < pug_voteplayers_count; ++i)
{
votes = pug_voteplayers_votes[i]
if(votes > winner_votes) { winner = i; winner_votes = votes; }
else if(votes == winner_votes) if(random_num(0,1)) { winner = i; winner_votes = votes; }
}
if(pug_voteplayers_votes[winner] == 0) return pug_msg_tmp_empty(0,"PUG_VOTE_FAILED_NOVOTES")
new Float: tmp = float(pug_get_players()) * get_pcvar_float(pug_cvar_vote_perc)
if( pug_voteplayers_votes[winner] < floatround(tmp,floatround_floor) )
{
return pug_msg_tmp_empty(0,"PUG_VOTE_FAILED_INSUF_VOTES");
}
client_print(0,print_chat,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_WON", pug_voteplayers_name[winner]);
console_print(0,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_WON", pug_voteplayers_name[winner]);
new total_amount = pug_num_teams() * winner
new upper_limit = (GET_CVAR_MAXPLAYERS() - GET_CVAR_MINPLAYERS()) + total_amount
SET_CVAR_MAXPLAYERS(upper_limit)
SET_CVAR_MINPLAYERS(total_amount)
set_cvar_num("sv_visiblemaxplayers", upper_limit )
return PLUGIN_CONTINUE
}
new pug_voterestart_votes[33]
new pug_voterestart_name[][] = {"","Yes","No"}
new pug_voterestart_count;
public cmd_voterestart(id,level,cid)
{
if (!cmd_access(id, level, cid, 1) ) return pug_msg_tmp_empty(id,"PUG_CMD_NOTALLOWED")
else voterestart_start()
return PLUGIN_HANDLED;
}
public voterestart_start()
{
if(pug_voting) { set_task(get_pcvar_float(pug_cvar_vote_time),"voterestart_start",100 + pug_voterestart_menu); return; }
pug_voting = 1;
arrayset(pug_voted,0,33)
arrayset(pug_voterestart_votes,0,33)
pug_display_menu_all(pug_voterestart_menu)
client_print(0,print_chat,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_START", "pug restart");
console_print(0,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_START", "pug restart");
set_task(get_pcvar_float(pug_cvar_vote_time) ,"voterestart_end",100 + pug_voterestart_menu)
}
public voterestart_end()
{
pug_cancel_menu()
voterestart_count()
pug_voting = 0;
remove_task ( 100 + pug_voterestart_menu )
}
public voterestart_handle(id, menu, item)
{
if( item < 0 ) return PLUGIN_CONTINUE;
static access, callback
static cmd[3], name[32], cmdname[32]
menu_item_getinfo(menu, item, access, cmd,2,cmdname,31, callback);
pug_voterestart_votes[str_to_num(cmd)]++;
get_user_name(id,name,31)
client_print(0,print_chat,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTED_FOR", name, cmdname);
console_print(0,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTED_FOR", name, cmdname);
pug_voted[id] = 1;
if(pug_should_stopvote() ) voterestart_end()
return PLUGIN_HANDLED;
}
public voterestart_count()
{
new winner, winner_votes, votes
for(new i = 0; i < pug_voterestart_count; ++i)
{
votes = pug_voterestart_votes[i]
if(votes > winner_votes) { winner = i; winner_votes = votes; }
else if(votes == winner_votes) if(random_num(0,1)) { winner = i; winner_votes = votes; }
}
if(pug_voterestart_votes[winner] == 0) return pug_msg_tmp_empty(0,"PUG_VOTE_FAILED_NOVOTES")
new Float: tmp = float(pug_get_players()) * get_pcvar_float(pug_cvar_vote_perc)
if( pug_voterestart_votes[winner] < floatround(tmp,floatround_floor) )
{
return pug_msg_tmp_empty(0,"PUG_VOTE_FAILED_INSUF_VOTES");
}
client_print(0,print_chat,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_WON", pug_voterestart_name[winner]);
console_print(0,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_WON", pug_voterestart_name[winner]);
if(winner == 1) pug_call_reset()
return PLUGIN_CONTINUE
}
new pug_votekick_votes[3]
new pug_votekick_name[32]
new pug_votekick_reason[50]
public cmd_votekick(id,level,cid)
{
if (!cmd_access(id, level, cid, 2) ) return pug_msg_tmp_empty(id,"PUG_CMD_NOTALLOWED")
read_argv(1,pug_votekick_name,31)
new target = cmd_target(id,pug_votekick_name,1)
if(!target) return pug_msg_tmp_empty(id,"PUG_CMD_NOTARGET")
else get_user_name(target,pug_votekick_name,31)
if(read_argc ( ) > 2) read_argv(2,pug_votekick_reason,49)
else formatex(pug_votekick_reason,49,"None")
votekick_start()
return PLUGIN_HANDLED;
}
public votekick_start()
{
if(pug_voting) { set_task(get_pcvar_float(pug_cvar_vote_time),"votekick_start",100 + pug_votekick_menu); return; }
pug_voting = 1;
arrayset(pug_voted,0,33)
arrayset(pug_votekick_votes,0,3)
static votename[100]
formatex(votename,99,"VoteKick: %s (Reason: %s)",pug_votekick_name,pug_votekick_reason)
menu_setprop(pug_votekick_menu,MPROP_TITLE,votename)
pug_display_menu_all(pug_votekick_menu)
client_print(0,print_chat,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_START", "kick player");
console_print(0,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_START", "kick player");
set_task(get_pcvar_float(pug_cvar_vote_time),"votekick_end",100 + pug_votekick_menu)
}
public votekick_end()
{
pug_cancel_menu()
votekick_count()
pug_voting = 0;
remove_task ( 100 + pug_votekick_menu )
}
public votekick_handle(id, menu, item)
{
if( item < 0 ) return PLUGIN_CONTINUE;
static access, callback
static cmd[3], name[32], cmdname[32]
menu_item_getinfo(menu, item, access, cmd,2,cmdname,31, callback);
pug_votekick_votes[str_to_num(cmd)]++;
get_user_name(id,name,31)
client_print(0,print_chat,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTED_FOR", name, cmdname);
console_print(0,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTED_FOR", name, cmdname);
pug_voted[id] = 1;
if(pug_should_stopvote() ) votekick_end()
return PLUGIN_HANDLED;
}
public votekick_count()
{
new winner;
if(pug_votekick_votes[1] > pug_votekick_votes[2]) winner = 1
else if(pug_votekick_votes[1] < pug_votekick_votes[2]) winner = 2
else return pug_msg_tmp_empty(0,"PUG_VOTE_FAILED_TIE");
if(pug_votekick_votes[winner] == 0) return pug_msg_tmp_empty(0,"PUG_VOTE_FAILED_NOVOTES")
new Float: tmp = float(pug_get_players()) * get_pcvar_float(pug_cvar_votekick_perc)
if( pug_votekick_votes[winner] < floatround(tmp,floatround_floor) )
{
return pug_msg_tmp_empty(0,"PUG_VOTE_FAILED_INSUF_VOTES");
}
client_print(0,print_chat,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_WON", pug_voterestart_name[winner]);
console_print(0,"%s %L",pug_header, LANG_PLAYER, "PUG_VOTE_WON", pug_voterestart_name[winner]);
if(winner == 1) server_cmd("amx_kick %s %s",pug_votekick_name,pug_votekick_reason)
return PLUGIN_HANDLED
}
|
|