Raised This Month: $12 Target: $400
 3% 

Duplicate maps


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
MayroN
Senior Member
Join Date: Aug 2017
Location: Kyiv
Old 06-28-2020 , 21:05   Duplicate maps
Reply With Quote #1

Duplicate maps in the menu by 2, by 3 at once

If the list is large, everything is fine
If there is 1 map in the list, it duplicates it in five points at once ( or it may not show the map at all )
If there are 5 in the list, then it still duplicates
And the strangest thing is that after these cards are played, then there is nothing in the list at all
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <ColorChat>
#include <dhudmessage>

#define SELECTMAPS  5

#define charsof(%1) (sizeof(%1)-1)

new Array:g_mapName;
new 
g_mapNums;

new 
g_nextName[SELECTMAPS]
new 
g_voteCount[SELECTMAPS 2]
new 
g_mapVoteNum
new g_teamScore[2]
new 
g_lastMap[32]

new 
g_coloredMenus
new bool:g_selected false

new g_BotStop

public plugin_init()
{
    
register_plugin("Nextmap Chooser"AMXX_VERSION_STR"AMXX Dev Team")
    
register_dictionary("mapchooser.txt")
    
register_dictionary("common.txt")
    
    
g_mapName=ArrayCreate(32);
    
    new 
MenuName[64]
    
    
format(MenuName63"%L""en""CHOOSE_NEXTM")
    
register_menucmd(register_menuid(MenuName), (-1^(-1<<(SELECTMAPS+2))), "countVote")
    
register_cvar("amx_extendmap_max""90")
    
register_cvar("amx_extendmap_step""15")

        
g_BotStop get_cvar_pointer("bot_stop")

    if (
cstrike_running())
        
register_event("TeamScore""team_score""a")

    
get_localinfo("lastMap"g_lastMap31)
    
set_localinfo("lastMap""")

    new 
maps_ini_file[64]
    
get_configsdir(maps_ini_file63);
    
format(maps_ini_file63"%s/maps.ini"maps_ini_file);
    
    if (!
file_exists(maps_ini_file))
        
get_cvar_string("mapcyclefile"maps_ini_file63)
    if (
loadSettings(maps_ini_file))
        
set_task(15.0"voteNextmap"987456""0"b")

    
g_coloredMenus colored_menus()
    
}

public 
checkVotes()
{

    new 
0
    
    
for (new 0g_mapVoteNum; ++a)
        if (
g_voteCount[b] < g_voteCount[a])
            
a

    
    
if (g_voteCount[SELECTMAPS] > g_voteCount[b]
        && 
g_voteCount[SELECTMAPS] > g_voteCount[SELECTMAPS+1])
    {
        new 
mapname[32]
        
        
get_mapname(mapname31)
        new 
Float:steptime get_cvar_float("amx_extendmap_step")
        
set_cvar_float("mp_timelimit"get_cvar_float("mp_timelimit") + steptime)
                
ColorChat(0RED"^4Голосование завершено.Карта продолжена на ^3%.0f ^4минут"steptime)
        
client_cmd(0"spk Vote/golosovanie_finish")
        
set_task(5.0"changeMap")
        return
    }
    
    new 
smap[32]
    if (
g_voteCount[b] && g_voteCount[SELECTMAPS 1] <= g_voteCount[b])

        if (!
get_playersnum()) 
        { 

        
0

        
}

    {
        
ArrayGetString(g_mapNameg_nextName[b], smapcharsof(smap));
        
set_cvar_string("amx_nextmap"smap);
    }

    
    
get_cvar_string("amx_nextmap"smap31)

        
set_dhudmessage(2552550, -1.00.1000.115.00.70.7)
        
show_dhudmessage(0"Голосование завершено^nСледующая Карта^n")

        {

        
set_dhudmessage(02550, -1.00.1700.115.00.70.7)
        
show_dhudmessage(0"%s"smap)

        
ColorChat(0RED"^4Голосование завершено.Следующая карта ^3%s"smap)
    
client_cmd(0"spk Vote/vote_finish")
        
set_task(5.0"changeMap")
        }       
}

public 
countVote(idkey)
{
        
client_cmd(id"spk choose_menu/choose_menu")

    if (
get_cvar_float("amx_vote_answers"))
    {
        new 
name[32]
        
get_user_name(idname31)
        
        if (
key == SELECTMAPS)
                
ColorChat(0RED"^4%s ^1выбрал ^3продолжение карты"name)
        else if (
key SELECTMAPS)
        {
            new 
map[32];
            
ArrayGetString(g_mapNameg_nextName[key], mapcharsof(map));

                        
ColorChat(0RED"^4%s ^1выбрал ^3%s"namemap)
        }
    }
    ++
g_voteCount[key]
    
    return 
PLUGIN_HANDLED
}

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

public 
voteNextmap()
{
    new 
winlimit get_cvar_num("mp_winlimit")
    new 
maxrounds get_cvar_num("mp_maxrounds")
    
    if (
winlimit)
    {
        new 
winlimit 2
        
        
if ((g_teamScore[0]) && (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 || timeleft 0)
        {
            
g_selected false
            
return
        }
    }

    if (
g_selected)
        return

    
g_selected true
    doVoteNextmap
()
}

public 
doVoteNextmap()
{

    new 
menu[512], amkeys 0

    
new pos format(menu511g_coloredMenus "\y%L:\w^n^n" "%L:^n^n"LANG_SERVER"CHOOSE_NEXTM")
    new 
dmax = (g_mapNums SELECTMAPS) ? SELECTMAPS g_mapNums
    
new winlimit get_cvar_num("mp_winlimit")
    new 
maxrounds get_cvar_num("mp_maxrounds")
    
    for (
g_mapVoteNum 0g_mapVoteNum dmax; ++g_mapVoteNum)
    {
        
random_num(0g_mapNums 1)
        
        while (
isInMenu(a))
            if (++
>= g_mapNums0
        
        g_nextName
[g_mapVoteNum] = a
        pos 
+= format(menu[pos], 511"\r%d.\w %a\d^n"g_mapVoteNum 1ArrayGetStringHandle(g_mapNamea));
        
mkeys |= (1<<g_mapVoteNum)
        
g_voteCount[g_mapVoteNum] = 0
    
}
    
    
menu[pos++] = '^n'
    
g_voteCount[SELECTMAPS] = 0
    g_voteCount
[SELECTMAPS 1] = 0
    
    
new mapname[32]
    
get_mapname(mapname31)

    if ((
winlimit maxrounds) == && (get_cvar_float("mp_timelimit") < get_cvar_float("amx_extendmap_max")))
    {
        
pos += format(menu[pos], 511"\r%d.\w %L^n"SELECTMAPS 1LANG_SERVER"EXTED_MAP"mapname)
        
mkeys |= (1<<SELECTMAPS)
    }

    new 
MenuName[64]
    
    
format(MenuName63"%L""en""CHOOSE_NEXTM")
    
show_menu(0mkeysmenu15MenuName)
    
set_task(15.0"checkVotes")
        
ColorChat(0RED"^4Выберите карту...")
}
stock bool:ValidMap(mapname[])
{
    if ( 
is_map_valid(mapname) )
    {
        return 
true;
    }
    
// If the is_map_valid check failed, check the end of the string
    
new len strlen(mapname) - 4;
    
    
// The mapname was too short to possibly house the .bsp extension
    
if (len 0)
    {
        return 
false;
    }
    if ( 
equali(mapname[len], ".bsp") )
    {
        
// If the ending was .bsp, then cut it off.
        // the string is byref'ed, so this copies back to the loaded text.
        
mapname[len] = '^0';
        
        
// recheck
        
if ( is_map_valid(mapname) )
        {
            return 
true;
        }
    }
    
    return 
false;
}

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

    
new szText[32]
    new 
currentMap[32]
    
    new 
buff[256];
    
    
ArrayClear(g_mapName);
    
g_mapNums 0;
    
get_mapname(currentMap31)

    new 
fp=fopen(filename,"r");
    
    while (!
feof(fp))
    {
        
buff[0]='^0';
        
        
fgets(fpbuffcharsof(buff));
        
        
parse(buffszTextcharsof(szText));
        
        
        if (
szText[0] != ';' &&
            
ValidMap(szText) &&
            !
equali(szTextg_lastMap) &&
            !
equali(szTextcurrentMap))
        {
            
ArrayPushString(g_mapNameszText);
            ++
g_mapNums;
        }
        
    }
    
    
fclose(fp);

    return 
g_mapNums
}

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

public 
plugin_end()
{
    new 
current_map[32]

    
get_mapname(current_map31)
    
set_localinfo("lastMap"current_map)
}

public 
changeMap(id)
{
    new 
smap[32]
    
get_cvar_string("amx_nextmap"smap31)
        
set_pcvar_num(g_BotStop0)       
    
server_cmd("changelevel %s"smap)        
}

public 
plugin_precache()

    
precache_sound("choose_menu/choose_menu.wav")  
    
precache_sound("Vote/vote_finish.wav")

MayroN is offline
Send a message via ICQ to MayroN Send a message via Skype™ to MayroN
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 06-28-2020 , 22:07   Re: Duplicate maps
Reply With Quote #2

The easiest solution is to have a bunch of maps in your list.

The only maps that are excluded from the vote are the current map and the last played map. Also, I'm not sure that most of the scenarios that you describe are not possible with this code.

So, what is your question?
__________________

Last edited by fysiks; 06-28-2020 at 22:07.
fysiks is offline
supertrio17
Senior Member
Join Date: May 2020
Location: Serbia
Old 06-28-2020 , 22:10   Re: Duplicate maps
Reply With Quote #3

Wait, what. Explain a bit better, please.
__________________
Contact! || Discord:
Mr_Boopsy_#2066
supertrio17 is offline
MayroN
Senior Member
Join Date: Aug 2017
Location: Kyiv
Old 07-02-2020 , 12:00   Re: Duplicate maps
Reply With Quote #4

Quote:
Originally Posted by fysiks View Post
The easiest solution is to have a bunch of maps in your list.

The only maps that are excluded from the vote are the current map and the last played map. Also, I'm not sure that most of the scenarios that you describe are not possible with this code.

So, what is your question?
Then perhaps my question will be this: How can I do this if I have
PHP Code:
#define SELECTMAPS 5 
, when there are from 1 to 4 maps in the list - without duplicating them ?
MayroN is offline
Send a message via ICQ to MayroN Send a message via Skype™ to MayroN
HamletEagle
AMX Mod X Plugin Approver
Join Date: Sep 2013
Location: Romania
Old 07-02-2020 , 13:48   Re: Duplicate maps
Reply With Quote #5

Quote:
Originally Posted by MayroN View Post
Then perhaps my question will be this: How can I do this if I have
PHP Code:
#define SELECTMAPS 5 
, when there are from 1 to 4 maps in the list - without duplicating them ?

Do WHAT?
__________________

Last edited by HamletEagle; 07-02-2020 at 13:48.
HamletEagle is online now
Mordekay
Squirrel of Fortune
Join Date: Apr 2006
Location: Germany
Old 07-02-2020 , 14:49   Re: Duplicate maps
Reply With Quote #6

He means that maps are 2 or 3 times in one vote if he has less maps in the list than the #define SELECTMAPS value and he wants to prevent this.
__________________

Mordekay is offline
MayroN
Senior Member
Join Date: Aug 2017
Location: Kyiv
Old 07-02-2020 , 17:01   Re: Duplicate maps
Reply With Quote #7

Quote:
Originally Posted by Mordekay View Post
He means that maps are 2 or 3 times in one vote if he has less maps in the list than the #define SELECTMAPS value and he wants to prevent this.
Yes, that's right
MayroN is offline
Send a message via ICQ to MayroN Send a message via Skype™ to MayroN
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 07-02-2020 , 23:29   Re: Duplicate maps
Reply With Quote #8

Are you saying that you don't want to have many maps? If no, change SELECTMAPS to number maps minus 2 (1 for the current map and one for the last map). If you have 3 or less maps then disable the plugin entirely because it serves no purpose.
__________________
fysiks is offline
MayroN
Senior Member
Join Date: Aug 2017
Location: Kyiv
Old 07-03-2020 , 16:04   Re: Duplicate maps
Reply With Quote #9

Quote:
Originally Posted by fysiks View Post
Are you saying that you don't want to have many maps? If no, change SELECTMAPS to number maps minus 2 (1 for the current map and one for the last map). If you have 3 or less maps then disable the plugin entirely because it serves no purpose.
But the problem is that if there are 5 maps in the list, then they will be duplicated in the map selection menu

Example:

maps.ini
PHP Code:
Alien
Titan
Revenant
Frozen
Scorpion 
In the voting maps selection menu



P.S.And if you delete the current map and the last played one from the Code, will this solve the problem of duplication?
But where exactly in the code do this?

Last edited by MayroN; 07-03-2020 at 16:12.
MayroN is offline
Send a message via ICQ to MayroN Send a message via Skype™ to MayroN
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 07-04-2020 , 00:18   Re: Duplicate maps
Reply With Quote #10

What is the situation for when you took this screenshot? I.e. what is the current map and what was the last map? Or, if this occurred on the first map vote after the server started, that'd be important to know also.
__________________
fysiks is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 08:26.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode