AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Suggestions / Requests (https://forums.alliedmods.net/forumdisplay.php?f=12)
-   -   Help: I need the source code of this plug-in. At present, only the decompiled code is (https://forums.alliedmods.net/showthread.php?t=333734)

kissgg 08-01-2021 02:23

Help: I need the source code of this plug-in. At present, only the decompiled code is
 
PHP Code:

new String:FILE_MAPS[128] = "addons/amxmodx/configs/maps.ini";
new 
String:FILE_BLOCKEDMAPS[156] = "addons/amxmodx/configs/blockedmaps.ini";
new 
String:TEMP_FILE[140] = "addons/amxmodx/configs/tempmap.ini";
new 
String:PREFIX[20] = "[KZ]";
new Array:
g_iMapsArray;
new Array:
g_iNominateArray;
new 
g_pLoadMapsType;
new 
g_pChangeMap;
new 
g_pChangeMapRounds;
new 
g_pShowSelects;
new 
g_pShowResultAfterVote;
new 
g_pShowResultType;
new 
g_pDebug;
new 
g_pTimeStartVote;
new 
g_pTimeLimit;
new 
g_pExendedMax;
new 
g_pExendedTime;
new 
g_pChatTime;
new 
g_pRockEnable;
new 
g_pRockChange;
new 
g_pRockPercent;
new 
g_pRockDelay;
new 
g_pRockShow;
new 
g_pNextMap;
new 
g_pMenuStopVote;
new 
g_pRockEndBlock;
new 
bool:g_bBeInVote;
new 
bool:g_bVoteFinished;
new 
bool:g_bRockVote;
new 
bool:g_DefaultChange;
new 
bool:g_bHasVoted[33];
new 
bool:g_bRockVoted[33];
new 
g_iExtendedMax;
new 
g_iRound;
new 
g_iStartPlugin;
new 
g_iLoadMaps;
new 
g_iForwardStartVote;
new 
g_iForwardFinishVote;
new 
g_iInMenu[7];
new 
g_iVoteItem[9];
new 
g_iTotal;
new 
g_iVoteTime;
new 
g_iRockVote;
new 
g_iNominatedMaps[33];
new 
g_iPage[33];
new 
g_iTimer;
new 
g_szInMenuMapName[7][33];
new 
g_BlockedMaps[1][34];
new 
g_szCurrentMap[33];
new 
g_szPrefixes[8][0] =
{
    {
        
107, ...
    },
    {
        
115, ...
    },
    {
        
98, ...
    },
    {
        
99, ...
    },
    {
        
107, ...
    },
    {
        
110, ...
    },
    {
        
107, ...
    },
    {
        
107, ...
    }
};
new 
g_szSound[11][0] =
{
    {
        
0, ...
    },
    {
        
102, ...
    },
    {
        
102, ...
    },
    {
        
102, ...
    },
    {
        
102, ...
    },
    {
        
102, ...
    },
    {
        
102, ...
    },
    {
        
102, ...
    },
    {
        
102, ...
    },
    {
        
102, ...
    },
    {
        
102, ...
    }
};
Float:operator*(Float:,_:)(Float:oper1oper2)
{
    return 
floatmul(oper1float(oper2));
}

Float:operator/(Float:,_:)(Float:oper1oper2)
{
    return 
floatdiv(oper1float(oper2));
}

Float:operator/(_:,Float:)(oper1Float:oper2)
{
    return 
floatdiv(float(oper1), oper2);
}

ColorChat(idColor:typemsg[])
{
    static 
message[256];
    switch (
type)
    {
        case 
1:
        {
            
message[0] = 1;
        }
        case 
2:
        {
            
message[0] = 4;
        }
        default:
        {
            
message[0] = 3;
        }
    }
    
vformat(112 4251msg4);
    
message[192] = 0;
    static 
MSG_Type;
    static 
index;
    static 
ColorChange;
    static 
team;
    if (
id)
    {
        
MSG_Type 1;
        
index id;
    }
    else
    {
        
index FindPlayer();
        
MSG_Type 2;
    }
    
team get_user_team(index, {0}, TeamName);
    
ColorChange ColorSelection(indexMSG_Typetype);
    
ShowColorMessage(indexMSG_Typemessage);
    if (
ColorChange)
    {
        
Team_Info(indexMSG_TypeTeamName[team]);
    }
    return 
0;
}

ShowColorMessage(idtypemessage[])
{
    
message_begin(typeget_user_msgid("SayText"), 1188id);
    
write_byte(id);
    
write_string(message);
    
message_end();
    return 
0;
}

Team_Info(idtypeteam[])
{
    
message_begin(typeget_user_msgid("TeamInfo"), 1188id);
    
write_byte(id);
    
write_string(team);
    
message_end();
    return 
1;
}

ColorSelection(indextypeColor:Type)
{
    switch (
Type)
    {
        case 
4:
        {
            new 
var1 TeamName;
            return 
Team_Info(indextypevar1[0][var1]);
        }
        case 
5:
        {
            return 
Team_Info(indextypeTeamName[1]);
        }
        case 
6:
        {
            return 
Team_Info(indextypeTeamName[2]);
        }
        default:
        {
            return 
0;
        }
    }
}

FindPlayer()
{
    static 
i;
    
= -1;
    while (
get_maxplayers() >= i)
    {
        
+= 1;
        if (
is_user_connected(i))
        {
            return 
i;
        }
    }
    return -
1;
}

public 
plugin_init()
{
    
register_plugin("Mapchooser""1.8""Destroman");
    
g_pLoadMapsType register_cvar("mm_loadmapstype"4476TeamNameTeamName);
    
g_pChangeMap register_cvar("mm_changemap"4536TeamNameTeamName);
    
g_pChangeMapRounds register_cvar("mm_changemap_rounds"4624TeamNameTeamName);
    
g_pTimeStartVote register_cvar("mm_timestartvote""14"TeamNameTeamName);
    
g_pShowSelects register_cvar("mm_showselects"4772TeamNameTeamName);
    
g_pShowResultAfterVote register_cvar("mm_show_result_aftervote"4880TeamNameTeamName);
    
g_pShowResultType register_cvar("mm_showresulttype"4960TeamNameTeamName);
    
g_pExendedTime register_cvar("mm_extendedtime""15"TeamNameTeamName);
    
g_pExendedMax register_cvar("mm_extendedmap_max""10"TeamNameTeamName);
    
g_pMenuStopVote register_cvar("mm_menustopvote"5196TeamNameTeamName);
    
g_pNextMap register_cvar("amx_nextmap"5252TeamNameTeamName);
    
g_pRockEnable register_cvar("mm_rtv_enable"5312TeamNameTeamName);
    
g_pRockPercent register_cvar("mm_rtv_percent""60"TeamNameTeamName);
    
g_pRockChange register_cvar("mm_rtv_change"5448TeamNameTeamName);
    
g_pRockDelay register_cvar("mm_rtv_delay"5508TeamNameTeamName);
    
g_pRockEndBlock register_cvar("mm_rtv_beforeendblock"5604TeamNameTeamName);
    
g_pRockShow register_cvar("mm_rtv_show"5660TeamNameTeamName);
    
g_pChatTime get_cvar_pointer("mp_chattime");
    
g_pTimeLimit get_cvar_pointer("mp_timelimit");
    
g_pDebug register_cvar("mm_debug"5804TeamNameTeamName);
    
register_concmd("votestart""Command_StartVote"325924, -1);
    
register_concmd("startvote""Command_StartVote"325924, -1);
    
register_concmd("stopvote""Command_StopVote"325924, -1);
    
register_clcmd("say votenext""Command_StartVote"326268, -1);
    
register_clcmd("say nortv""Command_StopVote"326268, -1);
    
register_clcmd("votemap""Command_Votemap", -16268, -1);
    
register_clcmd("say maps""Command_MapsList", -16268, -1);
    
register_clcmd("say /maps""Command_MapsList", -16268, -1);
    
register_clcmd("say rtv""Command_RTV", -16268, -1);
    
register_clcmd("say /rtv""Command_RTV", -16268, -1);
    
register_clcmd("say rockthevote""Command_RTV", -16268, -1);
    
register_clcmd("say""Command_Say", -16268, -1);
    
register_clcmd("say_team""Command_Say", -16268, -1);
    
register_event("SendAudio""Event_RoundEnd"7212"2=%!MRAD_terwin""2=%!MRAD_ctwin""2=%!MRAD_rounddraw");
    
register_event("TextMsg""Event_GameRestart"7524"2=#Game_Commencing""2=#Game_will_restart_in");
    
register_event("30""Event_MapEnd"77687776);
    
register_menucmd(register_menuid("Vote_Menu"TeamName), 1023"VoteMenu_Handler");
    
register_menucmd(register_menuid("MapsList_Menu"TeamName), 1023"MapsListMenu_Handler");
    
g_iNominateArray ArrayCreate(3532);
    
g_iStartPlugin get_systime(TeamName);
    
g_iForwardStartVote CreateMultiForward("mapmanager_startvote"TeamName);
    
g_iForwardFinishVote CreateMultiForward("mapmanager_finishvote"TeamName);
    
set_task(1084227584"CheckTime"9786628248TeamName8240TeamName);
    
get_mapname(g_szCurrentMap32);
    if (
get_pcvar_num(g_pDebug))
    {
        
log_to_file("mapmanager_debug.log""PLUGIN_INIT: %s"g_szCurrentMap);
    }
    
Load_BlockedMaps();
    
Load_MapList();
    return 
0;
}

public 
plugin_end()
{
    if (
g_iExtendedMax)
    {
        
set_pcvar_num(g_pTimeLimitget_pcvar_num(g_pTimeLimit) - get_pcvar_num(g_pExendedTime) * g_iExtendedMax);
    }
    
set_pcvar_num(g_pChatTimeget_pcvar_num(g_pChatTime) - 6);
    new 
iVar 1;
    if (
iVar 2)
    {
        return 
0;
    }
    new 
iTemp fopen(TEMP_FILE"wt");
    if (
iTemp)
    {
        new 
i;
        while (
1)
        {
            if (
g_BlockedMaps[i][33])
            {
                
fprintf(iTemp"\"%s\" \"%d\"\n"g_BlockedMaps[i], g_BlockedMaps[i][33]);
            }
            
i++;
        }
        
fprintf(iTemp"\"%s\" \"%d\"\n"g_szCurrentMap1);
        
fclose(iTemp);
        
delete_file(FILE_BLOCKEDMAPS);
        new 
iRename rename_file(TEMP_FILEFILE_BLOCKEDMAPS1);
        if (
get_pcvar_num(g_pDebug))
        {
            
log_to_file("mapmanager_debug.log""PLUGIN_END: File Renamed ? %d"iRename);
        }
    }
    else
    {
        if (
get_pcvar_num(g_pDebug))
        {
            
log_to_file("mapmanager_debug.log""PLUGIN_END: Can't write file");
        }
    }
    return 
0;
}

Load_BlockedMaps()
{
    new 
var1;
    if (!
file_exists(FILE_BLOCKEDMAPS) || 1)
    {
        return 
0;
    }
    new 
iFile fopen(FILE_BLOCKEDMAPS"rt");
    new 
iTemp fopen(TEMP_FILE"wt");
    new 
szBuffer[64];
    new 
szMap[33];
    new 
szCount[8];
    new 
iCount;
    new 
i;
    while (!
feof(iFile))
    {
        
fgets(iFileszBuffer63);
        
parse(szBufferszMap32szCount7);
        new 
var2;
        if (!(
get_blocked_map_count(szMap) || !is_map_valid(szMap) || equali(szMapg_szCurrentMapTeamName)))
        {
            
iCount str_to_num(szCount) - 1;
            if (
iCount)
            {
                if (
iCount 1)
                {
                    
fprintf(iTemp"\"%s\" \"%d\"\n"szMap1);
                    
iCount 1;
                }
                else
                {
                    
fprintf(iTemp"\"%s\" \"%d\"\n"szMapiCount);
                }
                
formatex(g_BlockedMaps[i], 32szMap);
                
i++;
                
g_BlockedMaps[i][33] = iCount;
                if (
>= 1)
                {
                    
fclose(iFile);
                    
fclose(iTemp);
                    
delete_file(FILE_BLOCKEDMAPS);
                    new 
iRename rename_file(TEMP_FILEFILE_BLOCKEDMAPS1);
                    if (
get_pcvar_num(g_pDebug))
                    {
                        
log_to_file("mapmanager_debug.log""LOAD_BLOCKEDMAPS: File Renamed? %d; Blocked ? %d"iRenamei);
                    }
                    return 
0;
                }
            }
        }
    }
    
fclose(iFile);
    
fclose(iTemp);
    
delete_file(FILE_BLOCKEDMAPS);
    new 
iRename rename_file(TEMP_FILEFILE_BLOCKEDMAPS1);
    if (
get_pcvar_num(g_pDebug))
    {
        
log_to_file("mapmanager_debug.log""LOAD_BLOCKEDMAPS: File Renamed? %d; Blocked ? %d"iRenamei);
    }
    return 
0;
}

Load_MapList()
{
    
g_iLoadMaps 0;
    
g_iMapsArray ArrayCreate(3332);
    new 
var1;
    if (
file_exists(FILE_MAPS) && get_pcvar_num(g_pLoadMapsType))
    {
        new 
szMapName[33];
        new 
fopen(FILE_MAPS"rt");
        if (
f)
        {
            while (!
feof(f))
            {
                
fgets(fszMapName32);
                
trim(szMapName);
                
remove_quotes(szMapName);
                new 
var3;
                if (!(!
szMapName[0] || szMapName[0] == 59 || (szMapName[0] == 47 && szMapName[1] == 47) || !valid_map(szMapName) || in_maps_array(szMapName) || equali(szMapNameg_szCurrentMapTeamName)))
                {
                    
g_iLoadMaps += 1;
                    
ArrayPushString(g_iMapsArrayszMapName);
                }
            }
            
fclose(f);
        }
    }
    else
    {
        new 
iDir;
        new 
iLen;
        new 
szFileName[64];
        new 
DirName[5] = {109,97,112,115,0};
        
iDir open_dir(DirNameszFileName63);
        if (
iDir)
        {
            while (
next_file(iDirszFileName63))
            {
                
iLen strlen(szFileName) - 4;
                if (!(
iLen))
                {
                    new 
var4;
                    if (
equali(szFileName[iLen], ".bsp"TeamName) && !equali(szFileNameg_szCurrentMapTeamName))
                    {
                        
szFileName[iLen] = 0;
                        
g_iLoadMaps += 1;
                        
ArrayPushString(g_iMapsArrayszFileName);
                    }
                }
            }
            
close_dir(iDir);
        }
    }
    if (!
g_iLoadMaps)
    {
        if (
get_pcvar_num(g_pDebug))
        {
            
log_to_file("mapmanager_debug.log""LOAD_MAPS: Nothing loaded");
        }
        
set_fail_state("LOAD_MAPS: Nothing loaded");
        return 
0;
    }
    if (
>= g_iLoadMaps get_blocked_maps())
    {
        
clear_blocked_maps();
    }
    new 
szMap[33];
    do {
        
ArrayGetString(g_iMapsArrayrandom_num(TeamNameg_iLoadMaps + -1), szMap32);
    } while (
get_blocked_map_count(szMap));
    if (
get_pcvar_num(g_pDebug))
    {
        
log_to_file("mapmanager_debug.log""LOAD_MAPS: Loaded Maps ? %d"g_iLoadMaps);
    }
    return 
0;
}

public 
client_disconnect(id)
{
    if (
task_exists(id 978162TeamName))
    {
        
remove_task(id 978162TeamName);
    }
    if (
g_bRockVoted[id])
    {
        
g_iRockVote -= 1;
        
g_bRockVoted[id] = 0;
    }
    if (
g_iNominatedMaps[id])
    {
        
clear_nominated_maps(id);
    }
    return 
0;
}

public 
Command_Votemap(id)
{
    return 
1;
}

public 
Command_StartVote(idflag)
{
    if (!
g_bBeInVote)
    {
        new 
var1;
        if (
flag & ~get_user_flags(idTeamName))
        {
            
var1 1;
        }
        else
        {
            
var1 StartVote(id);
        }
        return 
var1;
    }
    return 
1;
}

public 
Command_StopVote(idflag)
{
    if (!
g_DefaultChange)
    {
        if (
flag & ~get_user_flags(idTeamName))
        {
            return 
1;
        }
        if (
g_bBeInVote)
        {
            
g_bBeInVote false;
            
g_bRockVote false;
            
g_iRockVote 0;
            
arrayset(g_bRockVotedTeamName33);
            new 
1;
            while (
<= 32)
            {
                if (
is_user_connected(i))
                {
                    
g_bRockVoted[i] = 0;
                }
                
i++;
            }
            if (
task_exists(978262TeamName))
            {
                
remove_task(978262TeamName);
            }
            if (
task_exists(978362TeamName))
            {
                
remove_task(978362TeamName);
            }
            if (
task_exists(978462TeamName))
            {
                
remove_task(978462TeamName);
            }
            new 
id 1;
            while (
id <= 32)
            {
                if (
task_exists(id 978162TeamName))
                {
                    
remove_task(id 978162TeamName);
                }
                
id++;
            }
            
show_menu(TeamNameTeamName983619844);
            new 
szName[32];
            
get_user_name(idszName31);
            
ColorChat(0Color:3"\x04%s\x01 Vote cancelled by\x03 %s"PREFIXszName);
        }
    }
    return 
1;
}

public 
Command_MapsList(id)
{
    
g_iPage[id] = 0;
    
Show_MapsListMenu(id0);
    return 
1;
}

public 
Show_MapsListMenu(idiPage)
{
    if (
iPage)
    {
        return 
1;
    }
    new 
iMax ArraySize(g_iMapsArray);
    new 
min(iPage 8iMax);
    new 
iStart 8;
    new 
iEnd min(iStart 8iMax);
    
iPage iStart 8;
    
g_iPage[id] = iPage;
    new 
szMenu[512];
    new 
iLen;
    new 
szMapName[33];
    
iLen formatex(szMenu511"\yMaps List \w[%d/%d]:\n"iPage 1iMax + -1);
    new 
Keys;
    new 
Item;
    new 
iBlock;
    new 
iNominator;
    
iStart;
    while (
iEnd)
    {
        
ArrayGetString(g_iMapsArrayiszMapName32);
        
iBlock get_blocked_map_count(szMapName);
        
iNominator is_map_nominated(szMapName);
        if (
iBlock)
        {
            
Item++;
            
iLen formatex(szMenu[iLen], 511 iLen"\n\r%d.\d %s[\r%d\d]"ItemszMapNameiBlock) + iLen;
        }
        else
        {
            if (
iNominator)
            {
                if (
id == iNominator)
                {
                    
Keys << Item Keys;
                    
Item++;
                    
iLen formatex(szMenu[iLen], 511 iLen"\n\r%d.\w %s[\y*\w]"ItemszMapName) + iLen;
                }
                else
                {
                    
Item++;
                    
iLen formatex(szMenu[iLen], 511 iLen"\n\r%d.\d %s[\y*\d]"ItemszMapName) + iLen;
                }
            }
            
Keys << Item Keys;
            
Item++;
            
iLen formatex(szMenu[iLen], 511 iLen"\n\r%d.\w %s"ItemszMapName) + iLen;
        }
        
i++;
    }
    while (
Item <= 8)
    {
        
Item++;
        
iLen formatex(szMenu[iLen], 511 iLen10332) + iLen;
    }
    if (
iEnd iMax)
    {
        
Keys |= 768;
        new 
var1;
        if (
iPage)
        {
            
var1 10444;
        }
        else
        {
            
var1 10464;
        }
        
formatex(szMenu[iLen], 511 iLen"\n\r9.\w More...\n\r0.\w %s"var1);
    }
    else
    {
        
Keys |= 512;
        new 
var2;
        if (
iPage)
        {
            
var2 10532;
        }
        else
        {
            
var2 10552;
        }
        
formatex(szMenu[iLen], 511 iLen"\n\n\r0.\w %s"var2);
    }
    
show_menu(idKeysszMenu, -1"MapsList_Menu");
    return 
1;
}

public 
MapsListMenu_Handler(idkey)
{
    switch (
key)
    {
        case 
8:
        {
            new 
var3 g_iPage[id];
            
var3++;
            
Show_MapsListMenu(idvar3);
        }
        case 
9:
        {
            new 
var2 g_iPage[id];
            
var2--;
            
Show_MapsListMenu(idvar2);
        }
        default:
        {
            new 
szMapName[33];
            
ArrayGetString(g_iMapsArrayg_iPage[id] * keyszMapName32);
            new 
var1;
            if (
g_iNominatedMaps[id] && is_map_nominated(szMapName))
            {
                
remove_nominated_map(idszMapName);
            }
            else
            {
                
NominateMap(idszMapName);
            }
        }
    }
    return 
1;
}

public 
Command_RTV(id)
{
    new 
var1;
    if (
g_bVoteFinished || g_bBeInVote)
    {
        return 
1;
    }
    if (!
get_pcvar_num(g_pRockEnable))
    {
        return 
0;
    }
    if (
get_pcvar_num(g_pRockEndBlock) > get_timeleft() / 60)
    {
        
ColorChat(idColor:3"\x04%s\x01 Too late to vote"PREFIX);
        return 
1;
    }
    new 
iTime get_systime(TeamName);
    if (
get_pcvar_num(g_pRockDelay) * 60 iTime g_iStartPlugin)
    {
        new 
iMin get_pcvar_num(g_pRockDelay) * 60 iTime g_iStartPlugin 60 1;
        new 
szMin[16];
        
get_ending(iMin"minutes""minutes""minutes"szMin15);
        
ColorChat(idColor:3"\x04%s\x01 You cannot vote. Wait:\x03 %d\x01 %s"PREFIXiMinszMin);
        return 
1;
    }
    if (!
g_bRockVoted[id])
    {
        
g_bRockVoted[id] = 1;
        
g_iRockVote += 1;
        new 
iVote floatround(get_pcvar_num(g_pRockPercent) * get_players_num() / 11204034562) - g_iRockVote;
        if (
iVote)
        {
            new 
szVote[16];
            
get_ending(iVote"votes""votes""votes"szVote15);
            switch (
get_pcvar_num(g_pRockShow))
            {
                case 
0:
                {
                    new 
szName[33];
                    
get_user_name(idszName32);
                    
ColorChat(0Color:3"\x04%s\x03 %s\x01 voted for change map. Need:\x03 %d\x01 %s"PREFIXszNameiVoteszVote);
                }
                case 
1:
                {
                    
ColorChat(idColor:3"\x04%s\x01 Your vote accepted. Need:\x03 %d\x01 %s"PREFIXiVoteszVote);
                }
                default:
                {
                }
            }
        }
        else
        {
            
g_bRockVote true;
            
StartVote(0);
            
ColorChat(0Color:3"\x04%s\x01 Voting in progress..."PREFIX);
        }
    }
    else
    {
        new 
iVote floatround(get_pcvar_num(g_pRockPercent) * get_players_num() / 11204034562) - g_iRockVote;
        if (
iVote)
        {
            new 
szVote[16];
            
get_ending(iVote"votes""votes""votes"szVote15);
            
ColorChat(idColor:3"\x04%s\x01 You have already voted. Need:\x03 %d\x01 %s"PREFIXiVoteszVote);
        }
        else
        {
            
g_bRockVote true;
            
StartVote(0);
            
ColorChat(0Color:3"\x04%s\x01 Voting in progress..."PREFIX);
        }
    }
    return 
0;
}

public 
Command_Say(id)
{
    new 
var1;
    if (
g_bVoteFinished || g_bBeInVote)
    {
        return 
0;
    }
    new 
szText[33];
    
read_args(szText32);
    
remove_quotes(szText);
    
trim(szText);
    
strtolower(szText);
    if (
in_maps_array(szText))
    {
        new 
var2;
        if (
g_iNominatedMaps[id] && is_map_nominated(szText))
        {
            
remove_nominated_map(idszText);
        }
        else
        {
            
NominateMap(idszText);
        }
    }
    else
    {
        new 
i;
        while (
8)
        {
            new 
szFormat[33];
            
formatex(szFormat32"%s%s"g_szPrefixes[i], szText);
            if (
in_maps_array(szFormat))
            {
                new 
var3;
                if (
g_iNominatedMaps[id] && is_map_nominated(szFormat))
                {
                    
remove_nominated_map(idszFormat);
                }
                else
                {
                    
NominateMap(idszFormat);
                }
            }
            
i++;
        }
    }
    return 
0;
}

NominateMap(idmap[33])
{
    if (
g_iNominatedMaps[id] == 5)
    {
        
ColorChat(idColor:3"\x04%s\x01 Maximum number of nominations has been reached"PREFIX);
        return 
1;
    }
    if (
get_blocked_map_count(map))
    {
        
ColorChat(idColor:3"\x04%s\x01 You cannot nominate a map from the last maps played"PREFIX);
        return 
1;
    }
    if (
is_map_nominated(map))
    {
        
ColorChat(idColor:3"\x04%s\x01 Map has already been nominated"PREFIX);
        return 
1;
    }
    new 
szMap[33];
    new 
i;
    while (
g_iLoadMaps)
    {
        
ArrayGetString(g_iMapsArrayiszMap32);
        if (
equali(mapszMapTeamName))
        {
            new 
Data[35];
            new 
var1 map;
            
Data var1;
            
Data[33] = id;
            
Data[34] = i;
            
ArrayPushArray(g_iNominateArrayData);
            
g_iNominatedMaps[id]++;
            new 
szName[33];
            
get_user_name(idszName32);
            
ColorChat(0Color:2"\x04%s\x03 %s\x01 has nominated map\x03 %s\x01"PREFIXszNamemap);
            return 
1;
        }
        
i++;
    }
    new 
Data[35];
    new 
var1 map;
    
Data var1;
    
Data[33] = id;
    
Data[34] = i;
    
ArrayPushArray(g_iNominateArrayData);
    
g_iNominatedMaps[id]++;
    new 
szName[33];
    
get_user_name(idszName32);
    
ColorChat(0Color:2"\x04%s\x03 %s\x01 has nominated map\x03 %s\x01"PREFIXszNamemap);
    return 
1;
}

public 
Event_RoundEnd()
{
    
g_iRound += 1;
    new 
iCvar get_pcvar_num(g_pChangeMapRounds);
    new 
var1;
    if (
iCvar && g_iRound >= iCvar)
    {
        
StartVote(0);
    }
    new 
var4;
    if (
g_bVoteFinished && (get_pcvar_num(g_pChangeMap) == || (g_bRockVote && get_pcvar_num(g_pRockChange) == 1)))
    {
        
set_pcvar_num(g_pChatTimeget_pcvar_num(g_pChatTime) + 6);
        
set_task(1084227584"ChangeLevel"9785628248TeamName12600TeamName);
        if (
get_pcvar_num(g_pDebug))
        {
            
log_to_file("mapmanager_debug.log""EVENT_ROUNDEND: ChangeLevel");
        }
    }
    return 
0;
}

public 
Event_GameRestart()
{
    
g_iRound 0;
    
g_iStartPlugin get_systime(TeamName);
    return 
0;
}

public 
Event_MapEnd()
{
    
set_pcvar_num(g_pChatTimeget_pcvar_num(g_pChatTime) + 6);
    
set_task(1084227584"ChangeLevel"9785628248TeamName12600TeamName);
    if (
get_pcvar_num(g_pDebug))
    {
        
log_to_file("mapmanager_debug.log""EVENT_MAPEND: ChangeLevel");
    }
    return 
0;
}

public 
CheckTime()
{
    new 
var1;
    if (
g_bVoteFinished || g_bBeInVote)
    {
        return 
0;
    }
    static 
iTimeLimit;
    
iTimeLimit get_pcvar_num(g_pTimeLimit);
    if (
123 >= get_timeleft())
    {
        
g_DefaultChange true;
        
StartVote(0);
    }
    else
    {
        if (!
iTimeLimit)
        {
            if (
get_pcvar_num(g_pTimeStartVote) * 60 <= get_systime(TeamName) - g_iStartPlugin)
            {
                
StartVote(0);
            }
        }
    }
    return 
0;
}

public 
StartVote(id)
{
    new 
szName[32];
    
get_user_name(idszName31);
    if (
id)
    {
        
ColorChat(0Color:3"\x04%s \x03%s\x01 start the vote for the next map"PREFIXszName);
    }
    
g_bBeInVote true;
    
g_iTotal 0;
    
arrayset(g_iVoteItemTeamName9);
    
arrayset(g_iInMenu, -17);
    
arrayset(g_bHasVotedTeamName33);
    new 
Num;
    new 
NomInMenu;
    new 
Data[35];
    new 
iMax 8;
    new 
Limits[2];
    
Limits[0] = 7;
    
Limits[1] = g_iLoadMaps get_blocked_maps();
    new 
i;
    while (
2)
    {
        if (
Limits[i] < iMax)
        {
            
iMax Limits[i];
        }
        
i++;
    }
    new 
iNomMax;
    new 
iNomNum ArraySize(g_iNominateArray);
    new 
var1;
    if (
iNomNum 5)
    {
        
var1 5;
    }
    else
    {
        
var1 iNomNum;
    }
    
iNomMax var1;
    new 
i;
    while (
iMax)
    {
        if (
NomInMenu iNomMax)
        {
            
Num random_num(TeamNameArraySize(g_iNominateArray) - 1);
            
ArrayGetArray(g_iNominateArrayNumData);
            
formatex(g_szInMenuMapName[i], 32Data);
            
g_iInMenu[i] = Data[34];
            
NomInMenu++;
            
ArrayDeleteItem(g_iNominateArrayNum);
            
g_iNominatedMaps[Data[33]]--;
        }
        
i++;
    }
    
g_iTimer 3;
    if (
g_iTimer 10)
    {
        
g_iTimer 10;
    }
    
set_task(1065353216"Show_Timer"9783628248TeamName13248g_iTimer);
    
set_task(floatadd(1065353216float(g_iTimer)), "Show_Menu"9782628248TeamName12600TeamName);
    new 
iRet;
    
ExecuteForward(g_iForwardStartVoteiRet);
    if (
get_pcvar_num(g_pDebug))
    {
        new 
var3;
        if (
g_bRockVote)
        {
            
var3 1;
        }
        else
        {
            
var3 0;
        }
        
log_to_file("mapmanager_debug.log""START_VOTE: RTV ? %d"var3);
    }
    return 
1;
}

public 
Show_Timer()
{
    new 
szSec[16];
    
get_ending(g_iTimer"second""seconds""seconds"szSec15);
    new 
1;
    while (
<= 32)
    {
        if (
is_user_connected(i))
        {
            new 
var1;
            if (
is_user_alive(i))
            {
                
var1 1063675494;
            }
            else
            {
                
var1 1050253722;
            }
            
set_hudmessage(5025550, -1082130432var1TeamNameTeamName1065353216TeamNameTeamName4);
            
show_hudmessage(i"Map voting will begin in %d %s!"g_iTimerszSec);
        }
        
i++;
    }
    
g_iTimer -= 1;
    
client_cmd(TeamName"spk %s"g_szSound[g_iTimer]);
    return 
0;
}

public 
Show_Menu()
{
    new 
Players[32];
    new 
pNum;
    new 
iPlayer;
    
get_players(PlayerspNum"ch"13724);
    
g_iVoteTime 20;
    new 
i;
    while (
pNum)
    {
        
iPlayer Players[i];
        
VoteMenu(iPlayer 978162);
        
set_task(1065353216"VoteMenu"iPlayer 9781628248TeamName13764"TERRORIST");
        
i++;
    }
    
set_task(1065353216"Timer"9784628248TeamName1379621);
    
client_cmd(TeamName"spk Gman/Gman_Choose2");
    return 
0;
}

public 
VoteMenu(id)
{
    new 
nextMap[32];
    
get_cvar_string("amx_nextmap"nextMap31);
    
id += -978162;
    if (
g_iVoteTime)
    {
        new 
szMenu[512];
        new 
len;
        new 
var1;
        if (
g_bHasVoted[id])
        {
            
var1 13980;
        }
        else
        {
            
var1 14032;
        }
        
len formatex(szMenu[len], 511 len"\y%s:\n\n"var1);
        new 
Key;
        new 
iPercent;
        new 
i;
        new 
iMax maps_in_menu();
        
0;
        while (
iMax)
        {
            
iPercent 0;
            if (
g_iTotal)
            {
                
iPercent floatround(1120403456 g_iVoteItem[i] / g_iTotalTeamName);
            }
            if (!
g_bHasVoted[id])
            {
                
len formatex(szMenu[len], 511 len"\r%d.\w %s\d[\r%d%%\d]\n"1g_szInMenuMapName[i], iPercent) + len;
                
Key << Key;
            }
            else
            {
                
len formatex(szMenu[len], 511 len"\d%s[\r%d%%\d]\n"g_szInMenuMapName[i], iPercent) + len;
            }
            
i++;
        }
        new 
var2;
        if (
get_pcvar_num(g_pTimeLimit) && g_iExtendedMax get_pcvar_num(g_pExendedMax))
        {
            
iPercent 0;
            if (
g_iTotal)
            {
                
iPercent floatround(1120403456 g_iVoteItem[i] / g_iTotalTeamName);
            }
            if (!
g_bHasVoted[id])
            {
                
len formatex(szMenu[len], 511 len"\n\r%d.\w Extend map %s\d[\r%d%%\d]\y\n"1g_szCurrentMapiPercent) + len;
                
Key << Key;
            }
            
len formatex(szMenu[len], 511 len"\n\dExtend map %s[\r%d%%\d]\y\n"g_szCurrentMapiPercent) + len;
        }
        new 
var3;
        if (
get_pcvar_num(g_pTimeLimit) && g_iExtendedMax get_pcvar_num(g_pExendedMax))
        {
            
i++;
            
iPercent 0;
            if (
g_iTotal)
            {
                
iPercent floatround(1120403456 g_iVoteItem[i] / g_iTotalTeamName);
            }
            if (!
g_bHasVoted[id])
            {
                
len formatex(szMenu[len], 511 len"\r%d.\w Keep current nextmap: %s\d[\r%d%%\d]\y\n"1nextMapiPercent) + len;
                
Key << Key;
            }
            
len formatex(szMenu[len], 511 len"\dKeep current nextmap: %s[\r%d%%\d]\y\n"nextMapiPercent) + len;
        }
        new 
var4;
        if (!
g_bHasVoted[id] && !g_DefaultChange && get_pcvar_num(g_pMenuStopVote) && get_user_flags(idTeamName) & 32)
        {
            
i++;
            new 
var5;
            if (
== 10)
            {
                
var5 0;
            }
            else
            {
                
var5 1;
            }
            
len formatex(szMenu[len], 511 len"\n\r%d. Cancel Vote\n"var5) + len;
            
Key << Key;
        }
        new 
szSec[16];
        
get_ending(g_iVoteTime"seconds""second""seconds"szSec15);
        
len formatex(szMenu[len], 511 len"\n\r%d\d %s \dremaining"g_iVoteTimeszSec) + len;
        if (!
Key)
        {
            
Key |= 512;
        }
        new 
var6;
        if (
g_bHasVoted[id] && get_pcvar_num(g_pShowResultType) == 1)
        {
            do {
            } while (
replace(szMenu511"\r"15168));
            do {
            } while (
replace(szMenu511"\d"15184));
            do {
            } while (
replace(szMenu511"\w"15200));
            do {
            } while (
replace(szMenu511"\y"15216));
            
set_hudmessage(121222211017370378, -1082130432TeamName10863247361065353216103683194910452205574);
            
show_hudmessage(id"%s"szMenu);
        }
        else
        {
            
show_menu(idKeyszMenu, -1"Vote_Menu");
        }
        return 
1;
    }
    
show_menu(idTeamName1394019844);
    if (
task_exists(id 978162TeamName))
    {
        
remove_task(id 978162TeamName);
    }
    return 
1;
}

public 
VoteMenu_Handler(idkey)
{
    if (
g_bHasVoted[id])
    {
        
VoteMenu(id 978162);
        return 
1;
    }
    new 
var1;
    if (
get_pcvar_num(g_pMenuStopVote) && maps_in_menu() + == key)
    {
        
Command_StopVote(id32);
        return 
1;
    }
    
g_iVoteItem[key]++;
    
g_iTotal += 1;
    new 
nextMap[32];
    
get_cvar_string("amx_nextmap"nextMap31);
    
g_bHasVoted[id] = 1;
    new 
iCvar get_pcvar_num(g_pShowSelects);
    if (
iCvar)
    {
        new 
szName[32];
        
get_user_name(idszName31);
        if (
maps_in_menu() == key)
        {
            switch (
iCvar)
            {
                case 
1:
                {
                    
ColorChat(0Color:2"\x04%s\x01 \x03%s\x01 chose map extending"PREFIXszName);
                }
                case 
2:
                {
                    
ColorChat(idColor:3"\x04%s\x01 you chose map extending"PREFIX);
                }
                default:
                {
                }
            }
        }
        else
        {
            if (
maps_in_menu() + == key)
            {
                switch (
iCvar)
                {
                    case 
1:
                    {
                        
ColorChat(0Color:2"\x04%s\x03 %s\x01 chose\x03 %s\x01"PREFIXszNamenextMap);
                    }
                    case 
2:
                    {
                        
ColorChat(idColor:3"\x04%s\x01 you chose\x03 %s\x01"PREFIXnextMap);
                    }
                    default:
                    {
                    }
                }
            }
            switch (
iCvar)
            {
                case 
1:
                {
                    
ColorChat(0Color:2"\x04%s\x03 %s\x01 chose\x03 %s\x01"PREFIXszNameg_szInMenuMapName[key]);
                }
                case 
2:
                {
                    
ColorChat(idColor:3"\x04%s\x01 You chose\x03 %s\x01"PREFIXg_szInMenuMapName[key]);
                }
                default:
                {
                }
            }
        }
    }
    if (
get_pcvar_num(g_pShowResultAfterVote))
    {
        
VoteMenu(id 978162);
    }
    else
    {
        if (
task_exists(id 978162TeamName))
        {
            
remove_task(id 978162TeamName);
        }
    }
    return 
1;
}

public 
Timer()
{
    
g_iVoteTime -= 1;
    if (!
g_iVoteTime)
    {
        
FinishVote();
        
show_menu(TeamNameTeamName1587619844);
        if (
task_exists(978462TeamName))
        {
            
remove_task(978462TeamName);
        }
    }
    return 
0;
}

FinishVote()
{
    new 
MaxVote;
    new 
iInMenu maps_in_menu();
    new 
iRandom;
    new 
iMax iInMenu 2;
    new 
1;
    while (
iMax)
    {
        
iRandom random_num(TeamName1);
        switch (
iRandom)
        {
            case 
0:
            {
                if (
g_iVoteItem[i] > g_iVoteItem[MaxVote])
                {
                    
MaxVote i;
                }
            }
            case 
1:
            {
                if (
g_iVoteItem[i] >= g_iVoteItem[MaxVote])
                {
                    
MaxVote i;
                }
            }
            default:
            {
            }
        }
        
i++;
    }
    
g_bBeInVote false;
    
g_bVoteFinished true;
    new 
var2;
    if (!
g_iTotal || (iInMenu != MaxVote && iInMenu != MaxVote))
    {
        if (
g_iTotal)
        {
            
client_print(TeamName"""[KZ] Nextmap: %s"g_szInMenuMapName[MaxVote]);
            
set_pcvar_string(g_pNextMapg_szInMenuMapName[MaxVote]);
        }
        else
        {
            new 
nextMap[64];
            
get_cvar_string("amx_nextmap"nextMap64);
            
client_print(TeamName"""[KZ] Nextmap: %s"nextMap);
            
set_pcvar_string(g_pNextMapnextMap);
        }
        new 
var3;
        if ((
g_bRockVote && get_pcvar_num(g_pRockChange)) || get_pcvar_num(g_pChangeMap))
        {
            if (!
g_DefaultChange)
            {
                
ColorChat(0Color:3"\x04%s\x01 Map will change in\x03 10\x01 seconds"PREFIX);
                
set_pcvar_num(g_pChatTimeget_pcvar_num(g_pChatTime) + 6);
                
set_task(1092616192"ChangeLevel"9785628248TeamName12600TeamName);
                if (
get_pcvar_num(g_pDebug))
                {
                    
log_to_file("mapmanager_debug.log""FINISH_VOTE: ChangeLevel");
                }
            }
        }
        else
        {
            new 
var5;
            if ((
g_bRockVote && !g_DefaultChange && get_pcvar_num(g_pRockChange) == 1) || get_pcvar_num(g_pChangeMap) == 1)
            {
                
ColorChat(0Color:3"\x04%s\x01 Map will change at end of this round"PREFIX);
            }
        }
    }
    else
    {
        if (
iInMenu == MaxVote)
        {
            
g_bVoteFinished false;
            
g_bBeInVote false;
            
g_iExtendedMax += 1;
            new 
iMin get_pcvar_num(g_pExendedTime);
            new 
szMin[16];
            
get_ending(iMin"minutes""minutes""minutes"szMin15);
            
ColorChat(0Color:3"\x04%s\x01 Current map will be extended to next \x03%d\x01 %s"PREFIXiMinszMin);
            new 
1;
            while (
<= 32)
            {
                if (
is_user_connected(i))
                {
                    
g_bRockVoted[i] = 0;
                }
                
i++;
            }
            
g_iRockVote 0;
            
set_cvar_num("mp_timelimit"iMin get_pcvar_num(g_pTimeLimit));
        }
        new 
nextMap[32];
        
get_cvar_string("amx_nextmap"nextMap31);
        
client_print(TeamName"""[KZ] Nextmap: %s"nextMap);
        
set_pcvar_string(g_pNextMapnextMap);
        new 
var7;
        if ((
g_bRockVote && !g_DefaultChange && get_pcvar_num(g_pRockChange)) || get_pcvar_num(g_pChangeMap))
        {
            if (!
g_DefaultChange)
            {
                
ColorChat(0Color:3"\x04%s\x01 Map will change in\x03 10\x01 seconds"PREFIX);
                
set_pcvar_num(g_pChatTimeget_pcvar_num(g_pChatTime) + 6);
                
set_task(1092616192"ChangeLevel"9785628248TeamName12600TeamName);
                if (
get_pcvar_num(g_pDebug))
                {
                    
log_to_file("mapmanager_debug.log""FINISH_VOTE: ChangeLevel");
                }
            }
        }
        else
        {
            new 
var9;
            if ((
g_bRockVote && !g_DefaultChange && get_pcvar_num(g_pRockChange) == 1) || get_pcvar_num(g_pChangeMap) == 1)
            {
                
ColorChat(0Color:3"\x04%s\x01 Map will change at end of this round"PREFIX);
            }
        }
    }
    new 
iRet;
    
ExecuteForward(g_iForwardFinishVoteiRet);
    return 
0;
}

public 
ChangeLevel()
{
    new 
szMap[33];
    
get_pcvar_string(g_pNextMapszMap32);
    
set_cvar_num("mp_timelimit"40);
    
set_pcvar_num(g_pChatTimeget_pcvar_num(g_pChatTime) - 6);
    
server_cmd("changelevel %s"szMap);
    return 
0;
}

public 
SoundTimer()
{
    
set_task(1065353216"Show_Timer2"9783628248TeamName1778810);
    return 
0;
}

public 
Show_Timer2()
{
    static 
iTimer;
    if (!
iTimer)
    {
        
iTimer 10;
    }
    new 
szSec[16];
    
get_ending(iTimer"second""seconds""seconds"szSec15);
    new 
1;
    while (
<= 32)
    {
        if (
is_user_connected(i))
        {
            new 
var1;
            if (
is_user_alive(i))
            {
                
var1 1063675494;
            }
            else
            {
                
var1 1050253722;
            }
            
set_hudmessage(5025550, -1082130432var1TeamNameTeamName1065353216TeamNameTeamName4);
            
show_hudmessage(i"Map will change in %d %s!"iTimerszSec);
        }
        
i++;
    }
    
iTimer -= 1;
    
client_cmd(TeamName"spk %s"g_szSound[iTimer]);
    return 
0;
}

bool:valid_map(map[])
{
    if (
is_map_valid(map))
    {
        return 
true;
    }
    new 
len strlen(map) - 4;
    if (
len)
    {
        return 
false;
    }
    if (
equali(map[len], ".bsp"TeamName))
    {
        
map[len] = 0;
        if (
is_map_valid(map))
        {
            return 
true;
        }
    }
    return 
false;
}

bool:in_maps_array(map[])
{
    new 
szMap[33];
    new 
iMax ArraySize(g_iMapsArray);
    new 
i;
    while (
iMax)
    {
        
ArrayGetString(g_iMapsArrayiszMap32);
        if (
equali(szMapmapTeamName))
        {
            return 
true;
        }
        
i++;
    }
    return 
false;
}

get_blocked_maps()
{
    new 
iCount;
    new 
i;
    while (
1)
    {
        if (
g_BlockedMaps[i][33])
        {
            
iCount++;
        }
        
i++;
    }
    return 
iCount;
}

clear_blocked_maps()
{
    new 
i;
    while (
1)
    {
        
g_BlockedMaps[i][33] = 0;
        
i++;
    }
    
delete_file(FILE_BLOCKEDMAPS);
    return 
0;
}

get_blocked_map_count(map[])
{
    new 
i;
    while (
1)
    {
        if (
equali(g_BlockedMaps[i], mapTeamName))
        {
            return 
g_BlockedMaps[i][33];
        }
        
i++;
    }
    return 
0;
}

clear_nominated_maps(id)
{
    new 
Data[35];
    new 
i;
    while (
ArraySize(g_iNominateArray) > i)
    {
        
ArrayGetArray(g_iNominateArrayiData);
        if (
id == Data[33])
        {
            
i--;
            
ArrayDeleteItem(g_iNominateArrayi);
            new 
var1 g_iNominatedMaps[id];
            
var1--;
            if (!
var1)
            {
                return 
0;
            }
        }
        
i++;
    }
    return 
0;
}

remove_nominated_map(idmap[])
{
    new 
Data[35];
    new 
iMax ArraySize(g_iNominateArray);
    new 
i;
    while (
iMax)
    {
        
ArrayGetArray(g_iNominateArrayiData);
        new 
var1;
        if (
id == Data[33] && equali(DatamapTeamName))
        {
            new 
szName[32];
            
get_user_name(idszName31);
            
g_iNominatedMaps[id]--;
            
ArrayDeleteItem(g_iNominateArrayi);
            
ColorChat(0Color:6"\x04%s\x03 %s\x01 delete map from nominations\x03 %s\x01"PREFIXszNamemap);
            return 
0;
        }
        
i++;
    }
    return 
0;
}

is_map_nominated(map[])
{
    new 
Data[35];
    new 
iMax ArraySize(g_iNominateArray);
    new 
i;
    while (
iMax)
    {
        
ArrayGetArray(g_iNominateArrayiData);
        if (
equali(DatamapTeamName))
        {
            return 
Data[33];
        }
        
i++;
    }
    return 
0;
}

bool:in_menu(num)
{
    new 
i;
    while (
&& 8)
    {
        if (
g_iInMenu[i] == num)
        {
            return 
true;
        }
        
i++;
    }
    return 
false;
}

bool:is_blocked(num)
{
    new 
szMap[33];
    
ArrayGetString(g_iMapsArraynumszMap32);
    new 
i;
    while (
1)
    {
        if (
equali(g_BlockedMaps[i], szMapTeamName))
        {
            return 
true;
        }
        
i++;
    }
    return 
false;
}

maps_in_menu()
{
    new 
map;
    new 
i;
    while (
7)
    {
        if (
g_iInMenu[i] != -1)
        {
            
map++;
        }
        
i++;
    }
    return 
map;
}

get_players_num()
{
    new 
iPlayers;
    new 
iMax get_maxplayers();
    new 
id 1;
    while (
id iMax)
    {
        new 
var1;
        if (
is_user_connected(id) && !is_user_bot(id) && !is_user_hltv(id))
        {
            
iPlayers++;
        }
        
id++;
    }
    return 
iPlayers;
}

get_ending(numa[], b[], c[], output[], lenght)
{
    new 
num100 num 100;
    new 
num10 num 10;
    new 
var1;
    if ((
num100 >= && num100 <= 20) || (num10 && (num10 >= && num10 <= 9)))
    {
        
format(outputlenght"%s"a);
    }
    else
    {
        if (
num10 == 1)
        {
            
format(outputlenght"%s"b);
        }
        new 
var4;
        if (
num10 >= && num10 <= 4)
        {
            
format(outputlenght"%s"c);
        }
    }
    return 
0;



LaMFo 08-01-2021 03:55

Re: Help: I need the source code of this plug-in. At present, only the decompiled cod
 
Map Manager [Modular] 3.0.10

kissgg 08-01-2021 04:18

Re: Help: I need the source code of this plug-in. At present, only the decompiled cod
 
Quote:

Originally Posted by LaMFo (Post 2754272)
Map Manager [Modular] 3.0.10

Excuse me: is there a link?

LaMFo 08-01-2021 04:35

Re: Help: I need the source code of this plug-in. At present, only the decompiled cod
 
Quote:

Originally Posted by kissgg (Post 2754273)
Excuse me: is there a link?

Just write Map Manager [Modular] 3.0.10 in google

kissgg 08-01-2021 04:53

Re: Help: I need the source code of this plug-in. At present, only the decompiled cod
 
Quote:

Originally Posted by LaMFo (Post 2754274)
Just write Map Manager [Modular] 3.0.10 in google

THANKS !!!:3:3


All times are GMT -4. The time now is 17:06.

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