Annonce

Réduire
Aucune annonce.

Problème MapChooser5

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Problème MapChooser5

    Bonjour,
    J'ai un petit problème lors de mon votemap avec e plugin MapCHooser5, lorsque les joueurs choisissent "extendmap" rien ne se passe comme is aucun vote n'avais été fait. Alors que si on choisi une autre catégorie, tout se passe bien.

    Si quelqu'un peut m'aider ça serait sympa. Merci


    Voilà le Script de mon MapChooser5
    #include <amxmodx>
    #include <amxmisc>


    #pragma semicolon 1


    #define MAX_MAPS 128
    #define SELECTMAPS 5
    // SLECTYPES modify this with the number of categorie
    #define SELECTTYPES 3


    new g_mapName[MAX_MAPS][32];
    new g_mapNums;


    // new g_maptypeName[SELECTTYPES][32] = { "official map", "custom map", "fun map", "training map" };
    new g_maptypeName[SELECTTYPES][32] = { "Map Officielles et Custom", "Map Aim et Fy", "Map Awp et Scout" };


    // make all you want than categories
    new officialmaps_file[] = "addons/amxmodx/configs/maps_official.ini";
    new custommaps_file[] = "addons/amxmodx/configs/maps_aim.ini";
    new funmaps_file[] = "addons/amxmodx/configs/maps_awp.ini";
    // new trainingmaps_file[] = "addons/amxmodx/configs/maps_training.ini";


    new g_nextName[SELECTMAPS];
    new g_voteCount[SELECTMAPS+2];
    new g_voteCountType[SELECTTYPES+2];
    new g_mapVoteNum;
    new g_teamScore[2];
    new g_lastMap[32];


    /* Pcvars */
    new pcvar_ext_max, pcvar_ext_step, pcvar_timelimit, pcvar_vote_answr;


    new g_coloredMenus;
    new bool:g_selected = false;


    public plugin_init( )
    {
    register_dictionary( "mapchooser5.txt" );
    register_plugin( "Nextmap chooser", "1.0X", "OLO, KRoTaL" );
    register_menucmd( register_menuid( "AMXx Choose nextmap type:" ), ( -1^( -1<<( SELECTTYPES+2 ) ) ), "countVoteType" );
    register_menucmd( register_menuid( "AMXx Choose nextmap:" ), ( -1^(- 1<<( SELECTMAPS+2 ) ) ), "countVote" );
    /* Pcvars */
    pcvar_ext_max = register_cvar( "amx_extendmap_max", "90" );
    pcvar_ext_step = register_cvar( "amx_extendmap_step", "15" );
    pcvar_timelimit = get_cvar_pointer( "mp_timelimit" );
    pcvar_vote_answr = get_cvar_pointer( "amx_vote_answers" );


    if ( ( g_coloredMenus = colored_menus() ) != 0 )
    register_event( "TeamScore", "team_score", "a" );


    get_localinfo( "lastMap", g_lastMap, 31 );
    set_localinfo( "lastMap", "" );


    set_task( 15.0, "voteNextmapType", 987456, "", 0, "b" );
    }


    public checkVotesType( )
    {
    new b = 0;
    for( new a = 0; a < 4; ++a )
    if ( g_voteCountType[b] < g_voteCountType[a] )
    b = a;
    if ( g_voteCountType[SELECTTYPES] > g_voteCountType[b] )
    {
    new mapname[32];
    get_mapname( mapname, 31 );
    new Float:steptime = get_pcvar_float( pcvar_ext_step );
    set_pcvar_float( pcvar_timelimit, get_pcvar_float( pcvar_timelimit ) + steptime );
    client_print( 0, print_chat, "%L", LANG_PLAYER, "CHOOSE_END_EXT", steptime );
    log_amx( "Vote: Voting for the nextmap type finished. Map %s will be extended to next %.0f minutes", mapname , steptime );
    return;
    }
    if ( g_voteCountType[b] && g_voteCountType[SELECTTYPES+1] <= g_voteCountType[b] )
    {
    switch( b )
    {
    // make all the case you want than categories
    case 0: voteNextmap( officialmaps_file );
    case 1: voteNextmap( custommaps_file );
    case 2: voteNextmap( funmaps_file );
    // case 3: voteNextmap( trainingmaps_file );


    }
    client_print( 0, print_chat, "%L", LANG_PLAYER, "CHOOSE_END_TYPE", g_maptypeName[b] );
    }
    return;
    }


    public checkVotes( )
    {
    new b = 0;
    for( new a = 0; a < g_mapVoteNum; ++a )
    if ( g_voteCount[b] < g_voteCount[a] )
    b = a;
    if ( g_voteCount[b] && g_voteCount[SELECTMAPS+1] <= g_voteCount[b] )
    set_cvar_string( "amx_nextmap", g_mapName[g_nextName[b]] );
    new smap[32];
    get_cvar_string( "amx_nextmap", smap, 31 ); // Used one time, no pcvar
    switch( b )
    {
    case 0: client_cmd( 0, "spk ^"vox/level one access granted^"" );
    case 1: client_cmd( 0, "spk ^"vox/level two access granted^"" );
    case 2: client_cmd( 0, "spk ^"vox/level three access granted^"" );
    case 3: client_cmd( 0, "spk ^"vox/level four access granted^"" );
    case 4: client_cmd( 0, "spk ^"vox/level five access granted^"" );
    }
    client_print( 0, print_chat, "%L", LANG_PLAYER, "CHOOSE_END_NEXT", smap );
    log_amx( "Vote: Voting for the nextmap finished. The nextmap will be %s", smap );
    }


    public countVoteType( id, key )
    {
    if ( get_pcvar_float( pcvar_vote_answr ) )
    {
    new name[32];
    get_user_name( id, name, 31 );
    if ( key == SELECTTYPES )
    client_print( 0, print_chat, "%L", LANG_PLAYER, "CHOOSED_EXT", name );
    else if ( key < SELECTTYPES )
    client_print( 0, print_chat, "%L", LANG_PLAYER, "CHOOSED", name, g_maptypeName[key] );
    }
    ++g_voteCountType[key];
    return PLUGIN_HANDLED;
    }


    public countVote( id, key )
    {
    if ( get_pcvar_float( pcvar_vote_answr ) )
    {
    new name[32];
    get_user_name( id, name, 31 );
    if ( key < SELECTMAPS )
    client_print( 0, print_chat, "%L", LANG_PLAYER, "CHOOSED", name, g_mapName[g_nextName[key]] );
    }
    ++g_voteCount[key];
    return PLUGIN_HANDLED;
    }


    bool:isInMenu( id )
    {
    for( new a=0; a<g_mapVoteNum; ++a )
    if ( id == g_nextName[a] )
    return true;
    return false;
    }


    public voteNextmapType( )
    {
    /* Checked only one time, no use to use pcvar */
    new winlimit = get_cvar_num( "mp_winlimit" );
    new maxrounds = get_cvar_num( "mp_maxrounds" );
    if ( winlimit )
    {
    new c = winlimit - 2;
    if ( ( c > g_teamScore[0] ) && ( c > g_teamScore[1] ) )
    {
    g_selected = false;
    return;
    }
    }
    else if ( maxrounds )
    {
    if ( ( maxrounds - 2 ) > ( g_teamScore[0] + g_teamScore[1] ) )
    {
    g_selected = false;
    return;
    }
    }
    else
    {
    new timeleft = get_timeleft( );
    if ( timeleft < 1 || timeleft > 129 )
    {
    g_selected = false;
    return;
    }
    }
    if ( g_selected )
    return;
    g_selected = true;
    new menu[512], mapsmenu[512], mkeys, pos;
    new players[32], numplayers;
    g_voteCountType[SELECTTYPES] = 0;
    g_voteCountType[SELECTTYPES+1] = 0;
    new mapname[32];
    get_mapname( mapname, 31 );


    // Build the maps entries and the valid keys (same for all players)
    mkeys = ( 1<<SELECTTYPES+1 );
    mapsmenu[0] = 0;
    pos = 0;


    for( new i = 0; i < SELECTTYPES; ++i )
    {
    pos += format( mapsmenu[pos], 511, "%d. %s^n", i+1, g_maptypeName[i] );
    mkeys |= ( 1<<i );
    g_voteCount[i] = 0;
    }


    mapsmenu[pos++]='^n';


    if ( ( winlimit + maxrounds ) == 0 && ( get_pcvar_float( pcvar_timelimit ) < get_pcvar_float( pcvar_ext_max ) ) )
    mkeys |= ( 1<<SELECTTYPES );


    // Now build (translated) menu for each player and send it
    get_players( players, numplayers );
    new menu_tr_buf[128], menu_nc_tr_buf[128];
    for( numplayers--; numplayers >= 0; numplayers-- )
    {
    format( menu_tr_buf, 127, "%L", players[numplayers], "CHOOSE_NEXT_TYPE" );
    format( menu_nc_tr_buf, 127, "%L", players[numplayers], "CHOOSE_NC_NEXT_TYPE" );
    pos = copy( menu, 511, g_coloredMenus ? menu_tr_buf : menu_nc_tr_buf );


    pos += format( menu[pos], 511, "%s", mapsmenu );


    if ( ( winlimit + maxrounds ) == 0 && ( get_pcvar_float( pcvar_timelimit ) < get_pcvar_float( pcvar_ext_max ) ) )
    pos += format( menu[pos], 511, "%L", players[numplayers], "EXTEND_MAP", SELECTTYPES+1, mapname );


    format( menu[pos], 511, "%L", players[numplayers], "NUTHIN", SELECTTYPES+2 );
    show_menu( players[numplayers], mkeys, menu, 15, "AMXx Choose nextmap type:" );
    }


    set_task( 15.0, "checkVotesType" );
    client_print( 0, print_chat, "%L", LANG_PLAYER, "TIME_TO_CHOOSE_TYPE" );
    client_cmd( 0, "spk Gman/Gman_Choose2" );
    log_amx( "Vote: Voting for the nextmap type started" );
    }


    public voteNextmap( filename[] )
    {
    loadSettings( filename );


    new menu[512], mapsmenu[512], a, mkeys, pos;
    new dmax = ( g_mapNums > SELECTMAPS ) ? SELECTMAPS : g_mapNums;
    new players[32], numplayers;
    g_voteCount[SELECTMAPS] = 0;
    g_voteCount[SELECTMAPS+1] = 0;
    new mapname[32];
    get_mapname( mapname, 31 );


    // Build the maps entries and the valid keys (same for all players)
    mkeys = ( 1<<SELECTMAPS+1 );
    mapsmenu[0] = 0;
    pos = 0;
    for( g_mapVoteNum = 0; g_mapVoteNum < dmax; ++g_mapVoteNum )
    {
    a=random_num( 0, g_mapNums - 1 );
    while( isInMenu( a ) )
    if ( ++a >= g_mapNums )
    a = 0;
    g_nextName[g_mapVoteNum] = a;
    pos += format( mapsmenu[pos], 511, "%d. %s^n", g_mapVoteNum+1, g_mapName[a] );
    mkeys |= ( 1<<g_mapVoteNum );
    g_voteCount[g_mapVoteNum] = 0;
    }
    mapsmenu[pos++]='^n';


    // Now build (translated) menu for each player and send it
    get_players( players, numplayers );
    new menu_tr_buf[128], menu_nc_tr_buf[128];
    for( numplayers--; numplayers >= 0; numplayers-- )
    {
    format( menu_tr_buf, 127, "%L", players[numplayers], "CHOOSE_NEXT" );
    format( menu_nc_tr_buf, 127, "%L", players[numplayers], "CHOOSE_NC_NEXT" );


    pos = copy( menu, 511, g_coloredMenus ? menu_tr_buf : menu_nc_tr_buf );


    pos += format( menu[pos], 511, "%s", mapsmenu );


    format( menu[pos], 511, "%L", players[numplayers], "NUTHIN", SELECTMAPS+2 );
    show_menu( players[numplayers], mkeys, menu, 15, "AMXx Choose nextmap:" );
    }


    set_task( 15.0, "checkVotes" );
    client_print( 0, print_chat, "%L", LANG_PLAYER, "TIME_TO_CHOOSE_NEXT" );
    client_cmd( 0, "spk Gman/Gman_Choose2" );
    log_amx( "Vote: Voting for the nextmap started" );
    }


    loadSettings( filename[] )
    {
    if ( ! file_exists( filename ) )
    return 0;


    g_mapNums = 0;
    new szText[32];
    new a, pos = 0;
    new currentMap[32];
    get_mapname( currentMap, 31 );


    while ( ( g_mapNums < MAX_MAPS ) && read_file( filename, pos++, szText, 31, a ) )
    {
    if ( szText[0] != ';'
    && parse( szText, g_mapName[g_mapNums] ,31 )
    && is_map_valid( g_mapName[g_mapNums] )
    && ! equali( g_mapName[g_mapNums], g_lastMap )
    && ! equali( g_mapName[g_mapNums], currentMap ) )
    ++g_mapNums;
    }


    return g_mapNums;
    }


    public team_score( )
    {
    new team[2];
    read_data( 1, team, 1 );
    g_teamScore[ ( team[0] == 'C' ) ? 0 : 1 ] = read_data( 2 );
    }


    public plugin_end( )
    {
    new current_map[32];
    get_mapname( current_map, 31 );
    set_localinfo( "lastMap", current_map );
    }

Chargement...
X