AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Suggestions / Requests (https://forums.alliedmods.net/forumdisplay.php?f=12)
-   -   [REQ] edit mapchooser (https://forums.alliedmods.net/showthread.php?t=263563)

vase070 05-28-2015 01:10

[REQ] edit mapchooser
 
can someone edit the original AMXX mapchooser

i just need the mapchooser when there are less then 10 players on the server to chose vote from file lets say small.ini or small_maps.ini and when there are more then 10 players to chose vote from original maps.ini file thats all :)

also you might suggest mapchooser4 but it does not work for me also i dont need big plugins like galileo because i dont need all there functions

Code:

/* AMX Mod X
*  Nextmap Chooser Plugin
*
* by the AMX Mod X Development Team
*  originally developed by OLO
*
* This file is part of AMX Mod X.
*
*
*  This program is free software; you can redistribute it and/or modify it
*  under the terms of the GNU General Public License as published by the
*  Free Software Foundation; either version 2 of the License, or (at
*  your option) any later version.
*
*  This program is distributed in the hope that it will be useful, but
*  WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
*  General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program; if not, write to the Free Software Foundation,
*  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*  In addition, as a special exception, the author gives permission to
*  link the code of this program with the Half-Life Game Engine ("HL
*  Engine") and Modified Game Libraries ("MODs") developed by Valve,
*  L.L.C ("Valve"). You must obey the GNU General Public License in all
*  respects for all of the code used other than the HL Engine and MODs
*  from Valve. If you modify this file, you may extend this exception
*  to your version of the file, but you are not obligated to do so. If
*  you do not wish to do so, delete this exception statement from your
*  version.
*/

#include <amxmodx>
#include <amxmisc>

#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

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(MenuName, 63, "%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")

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

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

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

    g_coloredMenus = colored_menus()
   
}

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[SELECTMAPS] > g_voteCount[b]
        && g_voteCount[SELECTMAPS] > g_voteCount[SELECTMAPS+1])
    {
        new mapname[32]
       
        get_mapname(mapname, 31)
        new Float:steptime = get_cvar_float("amx_extendmap_step")
        set_cvar_float("mp_timelimit", get_cvar_float("mp_timelimit") + steptime)
        client_print(0, print_chat, "%L", LANG_PLAYER, "CHO_FIN_EXT", steptime)
        log_amx("Vote: Voting for the nextmap finished. Map %s will be extended to next %.0f minutes", mapname, steptime)
       
        return
    }
   
    new smap[32]
    if (g_voteCount[b] && g_voteCount[SELECTMAPS + 1] <= g_voteCount[b])
    {
        ArrayGetString(g_mapName, g_nextName[b], smap, charsof(smap));
        set_cvar_string("amx_nextmap", smap);
    }

   
    get_cvar_string("amx_nextmap", smap, 31)
    client_print(0, print_chat, "%L", LANG_PLAYER, "CHO_FIN_NEXT", smap)
    log_amx("Vote: Voting for the nextmap finished. The nextmap will be %s", smap)
}

public countVote(id, key)
{
    if (get_cvar_float("amx_vote_answers"))
    {
        new name[32]
        get_user_name(id, name, 31)
       
        if (key == SELECTMAPS)
            client_print(0, print_chat, "%L", LANG_PLAYER, "CHOSE_EXT", name)
        else if (key < SELECTMAPS)
        {
            new map[32];
            ArrayGetString(g_mapName, g_nextName[key], map, charsof(map));
            client_print(0, print_chat, "%L", LANG_PLAYER, "X_CHOSE_X", name, map);
        }
    }
    ++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 voteNextmap()
{
    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], a, mkeys = (1<<SELECTMAPS + 1)

    new pos = format(menu, 511, g_coloredMenus ? "\y%L:\w^n^n" : "%L:^n^n", LANG_SERVER, "CHOOSE_NEXTM")
    new dmax = (g_mapNums > SELECTMAPS) ? SELECTMAPS : g_mapNums
   
    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(menu[pos], 511, "%d. %a^n", g_mapVoteNum + 1, ArrayGetStringHandle(g_mapName, a));
        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(mapname, 31)

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

    format(menu[pos], 511, "%d. %L", SELECTMAPS+2, LANG_SERVER, "NONE")
    new MenuName[64]
   
    format(MenuName, 63, "%L", "en", "CHOOSE_NEXTM")
    show_menu(0, mkeys, menu, 15, MenuName)
    set_task(15.0, "checkVotes")
    client_print(0, print_chat, "%L", LANG_SERVER, "TIME_CHOOSE")
    client_cmd(0, "spk Gman/Gman_Choose2")
    log_amx("Vote: Voting for the nextmap started")
}
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];
   
    get_mapname(currentMap, 31)

    new fp=fopen(filename,"r");
   
    while (!feof(fp))
    {
        buff[0]='^0';
        szText[0]='^0';
       
        fgets(fp, buff, charsof(buff));
       
        parse(buff, szText, charsof(szText));
       
       
        if (szText[0] != ';' &&
            ValidMap(szText) &&
            !equali(szText, g_lastMap) &&
            !equali(szText, currentMap))
        {
            ArrayPushString(g_mapName, szText);
            ++g_mapNums;
        }
       
    }
   
    fclose(fp);

    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)
}


nnajko 05-28-2015 17:58

Re: [REQ] edit mapchooser
 
Try this.
Create a file called small_maps.ini

PHP Code:

/* AMX Mod X
*   Nextmap Chooser Plugin
*
* by the AMX Mod X Development Team
*  originally developed by OLO
*
* This file is part of AMX Mod X.
*
*
*  This program is free software; you can redistribute it and/or modify it
*  under the terms of the GNU General Public License as published by the
*  Free Software Foundation; either version 2 of the License, or (at
*  your option) any later version.
*
*  This program is distributed in the hope that it will be useful, but
*  WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
*  General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program; if not, write to the Free Software Foundation,
*  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*  In addition, as a special exception, the author gives permission to
*  link the code of this program with the Half-Life Game Engine ("HL
*  Engine") and Modified Game Libraries ("MODs") developed by Valve,
*  L.L.C ("Valve"). You must obey the GNU General Public License in all
*  respects for all of the code used other than the HL Engine and MODs
*  from Valve. If you modify this file, you may extend this exception
*  to your version of the file, but you are not obligated to do so. If
*  you do not wish to do so, delete this exception statement from your
*  version.
*/

#include <amxmodx>
#include <amxmisc>

#define SELECTMAPS  5
#define PLAYERS_FOR_FILE_SWAP 10

#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 maps_ini_file[64]
new 
maps_small_ini[64]


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")
    
    
register_clcmd("say h""voteNextmap");

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

    
get_localinfo("lastMap"g_lastMap31)
    
set_localinfo("lastMap""")
    
    
get_configsdir(maps_ini_filecharsmax(maps_ini_file));
    
formatex(maps_ini_filecharsmax(maps_ini_file), "%s/maps.ini"maps_ini_file);
    
    
get_configsdir(maps_small_inicharsmax(maps_small_ini));
    
formatex(maps_small_inicharsmax(maps_small_ini), "%s/small_maps.ini"maps_small_ini);
    
    if( !
file_exists(maps_small_ini) )
    {    
        
write_file(maps_small_ini"");
    }
    
    if (!
file_exists(maps_ini_file))
        
get_cvar_string("mapcyclefile"maps_ini_file63)
    if (
loadSettings(maps_small_ini))
        
set_task(15.0"voteNextmap"987456""0"b")

    
g_coloredMenus colored_menus()
}

public 
client_putinserver(id)
{
    if( 
get_playersnum() == PLAYERS_FOR_FILE_SWAP )
    {
        
loadSettings(maps_ini_file);
    }
}

public 
client_disconnect(id)
{
    if( 
get_playersnum() == (PLAYERS_FOR_FILE_SWAP 1) )
    {
        
loadSettings(maps_small_ini);
    }
}

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)
        
client_print(0print_chat"%L"LANG_PLAYER"CHO_FIN_EXT"steptime)
        
log_amx("Vote: Voting for the nextmap finished. Map %s will be extended to next %.0f minutes"mapnamesteptime)
        
        return
    }
    
    new 
smap[32]
    if (
g_voteCount[b] && g_voteCount[SELECTMAPS 1] <= g_voteCount[b])
    {
        
ArrayGetString(g_mapNameg_nextName[b], smapcharsof(smap));
        
set_cvar_string("amx_nextmap"smap);
    }

    
    
get_cvar_string("amx_nextmap"smap31)
    
client_print(0print_chat"%L"LANG_PLAYER"CHO_FIN_NEXT"smap)
    
log_amx("Vote: Voting for the nextmap finished. The nextmap will be %s"smap)
}

public 
countVote(idkey)
{
    if (
get_cvar_float("amx_vote_answers"))
    {
        new 
name[32]
        
get_user_name(idname31)
        
        if (
key == SELECTMAPS)
            
client_print(0print_chat"%L"LANG_PLAYER"CHOSE_EXT"name)
        else if (
key SELECTMAPS)
        {
            new 
map[32];
            
ArrayGetString(g_mapNameg_nextName[key], mapcharsof(map));
            
client_print(0print_chat"%L"LANG_PLAYER"X_CHOSE_X"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")
    
client_print(0print_chat"LOL");
    
    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 129)
        {
            
g_selected false
            
return
        }
    }

    if (
g_selected)
        return

    
g_selected true
    
    
new menu[512], amkeys = (1<<SELECTMAPS 1)

    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
    
    
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 
+= formatex(menu[pos], 511"%d. %a^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"%d. %L^n"SELECTMAPS 1LANG_SERVER"EXTED_MAP"mapname)
        
mkeys |= (1<<SELECTMAPS)
    }

    
format(menu[pos], 511"%d. %L"SELECTMAPS+2LANG_SERVER"NONE")
    new 
MenuName[64]
    
    
format(MenuName63"%L""en""CHOOSE_NEXTM")
    
show_menu(0mkeysmenu15MenuName)
    
set_task(15.0"checkVotes")
    
client_print(0print_chat"%L"LANG_SERVER"TIME_CHOOSE")
    
client_cmd(0"spk Gman/Gman_Choose2")
    
log_amx("Vote: Voting for the nextmap started")
}
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

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

    new 
fp=fopen(filename,"r");
    
    while (!
feof(fp))
    {
        
buff[0]='^0';
        
szText[0]='^0';
        
        
fgets(fpbuffcharsof(buff));
        
        
parse(buffszTextcharsof(szText));
        
        
        if (
szText[0] != ';' &&
        
ValidMap(szText) &&
        !
equali(szTextg_lastMap) &&
        !
equali(szTextcurrentMap))
        {
            
ArrayPushString(g_mapNameszText);
            
server_print("%s"szText);
            ++
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)



vase070 05-28-2015 18:35

Re: [REQ] edit mapchooser
 
Code:

client_print(0, print_chat, "LOL");
:D removed that part will report back if it works fine :)

nnajko 05-28-2015 18:59

Re: [REQ] edit mapchooser
 
Quote:

Originally Posted by vase070 (Post 2302216)
Code:

client_print(0, print_chat, "LOL");
:D removed that part will report back if it works fine :)


Haha! Forgot to remove that one.. :)

fysiks 05-28-2015 20:39

Re: [REQ] edit mapchooser
 
Seriously people, attach the damn .sma file to your post.


All times are GMT -4. The time now is 20:11.

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