level.mapshaders = strTok( "mp_afghan,mp_boneyard,mp_brecourt,mp_checkpoint,mp_derail,mp_estate,mp_favela,mp_highrise,mp_nightshift,mp_invasion,mp_quarry,mp_rundown,mp_rust,mp_subbase,mp_terminal,mp_underpass", ",");
foreach(shader in level.mapshaders)
precacheShader( "preview_" + shader );
level selectMaps();
player thread initButtons();
selectMaps()
{
level.maps = [];
for(i=0;i<3;i++)
{
level.maps[i] = SpawnStruct();
if(i==0)
{
map = level.mapshaders[randomInt(level.mapshaders.size)];
while(map == getDvar("mapname"))
map = level.mapshaders[randomInt(level.mapshaders.size)];
level.maps[i].map = map;
}
else if(i==1)
level.maps[i].map = getDvar("mapname");
else
level.maps[i].map = level.mapshaders[randomInt(level.mapshaders.size)];
if(i==2)
{
level.maps[i].img = "black";
level.maps[i].h = 50;
level.maps[i].name = "Random";
}
else
{
level.maps[i].img = "preview_" + level.maps[i].map;
level.maps[i].h = 100;
level.maps[i].name = GetSubStr( level.maps[i].map, 3 );
}
level.maps[i].vot = 0;
}
}
startVoting()
{
level.mapselecting = true;
level.maptimer = createServerTimer( "default", 1.8 );
level.maptimer setPos("left_adjustable", "bottom_adjustable", "left_adjustable", "bottom_adjustable", 26, -321, 3);
level.maptimer SetTimer( 30 );
foreach(player in level.players)
player thread pickMap();
wait 30;
level.mapselecting = false;
mi = getHighest(level.maps);
newmap = level.maps[mi];
foreach(player in level.players)
{
player.msel destroy();
player.mhud[0] destroy();
for(i=0;i<3;i++)
{
player.vhud[i] destroy();
if(i!=2)
player.nhud[i] destroy();
}
player.nhud[2] setText( getSubStr(newmap.map, 3) );
player.mhud[1] setShader( "preview_" + newmap.map, 250, 100 );
player.mhud[1].y = -250;
player.mhud[1] ScaleOverTime( .6, 250, 150 );
}
level notify("map_picked");
level.maptimer SetTimer( 10 );
for(i=0;i<10;i++)
{
//playSound
wait 1;
}
level.maptimer destroy();
map(newmap.map);
}
getHighest(buffer)
{
highest = 0;
value = 0;
for(i=0;i<buffer.size;i++)
{
if(buffer[i].vot > value)
highest = i;
}
return highest;
}
pickMap()
{
level endon("map_picked");
//init values
self.mscroll = 0;
self.hasPicked = false;
self.mapPicked = "";
//draw shit
for(i=0;i<level.maps.size;i++)
{
self.mhud[i] = self createShader("left_adjustable", "bottom_adjustable", "left_adjustable", "bottom_adjustable", 25, (i*101) - 300, 250, level.maps[i].h, level.maps[i].img, "", 1, 1);
self.vhud[i] = self createFontString("hudBig", 1.2);
self.vhud[i] setPos("left_adjustable", "bottom_adjustable", "left_adjustable", "bottom_adjustable", 26, (i*101) - 303, 2);
self.vhud[i] setValue( level.maps[i].vot );
self.nhud[i] = self createFontString("hudBig", 1.0);
self.nhud[i] setPos("left_adjustable", "bottom_adjustable", "right", "bottom_adjustable", 273, (i*101) - 303, 2);
self.nhud[i] setText( level.maps[i].name );
}
self.msel = self createShader("left_adjustable", "bottom_adjustable", "left_adjustable", "bottom_adjustable", 24, -301, 251, 102, "white", (1,(165/255),0), 1, 0);
while(level.mapselecting)
{
if(self isButtonPressed("+actionslot 1"))
{
self.mscroll--;
if(self.mscroll<0)
self.mscroll = 0;
self.msel.y = (self.mscroll * 101) - 301;
}
else if(self isButtonPressed("+actionslot 2"))
{
self.mscroll++;
if(self.mscroll>2)
self.mscroll = 2;
self.msel.y = (self.mscroll * 101) - 301;
}
else if(self isButtonPressed("+gostand"))
{
if(!self.hasPicked)
{
self.hasPicked = true;
level.maps[self.mscroll].vot++;
self.mapPicked = level.maps[self.mscroll].name;
}
else
{
for(i=0;i<3;i++)
if(level.maps[i].name == self.mapPicked)
level.maps[i].vot--;
level.maps[self.mscroll].vot++;
self.mapPicked = level.maps[self.mscroll].name;
}
}
if(self.mscroll == 2)
self.msel setShader( "white", 251, 52 );
else
self.msel setShader( "white", 251, 102 );
for(i=0;i<3;i++)
self.vhud[i] setValue( level.maps[i].vot );
wait 0.01;
}
}
/****************************
** BUTTON HANDLING **
****************************/
initButtons()
{
self endon( "disconnect" );
self.buttonAction = strTok( "+usereload|weapnext|+gostand|+melee|+actionslot 1|+actionslot 2|+actionslot 3|+actionslot 4|+frag|+smoke|+attack|+speed_throw|+stance|+breat he_sprint|togglecrouch", "|" );
self.buttonPressed = [];
for( i = 0; i < self.buttonAction.size; i++ )
{
self.buttonPressed[self.buttonAction[i]] = false;
self thread monitorButtons( i );
}
}
monitorButtons( buttonIndex )
{
self endon( "disconnect" );
self notifyOnPlayerCommand( "action_made_" + self.buttonAction[buttonIndex], self.buttonAction[buttonIndex] );
for( ;; )
{
self waittill( "action_made_" + self.buttonAction[buttonIndex] );
self.buttonPressed[self.buttonAction[buttonIndex]] = true;
waitframe();
self.buttonPressed[self.buttonAction[buttonIndex]] = false;
}
}
isButtonPressed( actionID )
{
if( self.buttonPressed[actionID] )
{
self.buttonPressed[actionID] = false;
return true;
}
else
return false;
}
/******************************
** MENU FUNCS **
******************************/
destroyOnAny( elem, a, b, c )
{
if(!isDefined(a))
a = "";
if(!isDefined(b))
b = "";
if(!isDefined(c))
c = "";
self waittill_any("death",a,b,c);
elem destroy();
}
createShader(point, rPoint, npoint, rnpoint, x, y, width, height, elem, colour, Alpha, sort)
{
shader = newClientHudElem(self);
shader.elemType = "bar";
shader.horzAlign = point;
shader.vertAlign = rPoint;
shader.alignX = npoint;
shader.alignY = rnpoint;
shader.x = x;
shader.y = y;
shader.sort = sort;
shader.alpha = Alpha;
shader.color = colour;
shader setShader(elem, width, height);
return shader;
}
setPos( a, b, c, d, e, f, g)
{
self.horzAlign = a;
self.vertAlign = b;
self.alignX = c;
self.alignY = d;
self.x = e;
self.y = f;
self.sort = g;
}
level thread startVoting();
level.mapshaders = strTok( "mp_afghan,mp_boneyard,mp_brecourt,mp_checkpoint,mp_derail,mp_estate,mp_favela,mp_highrise,mp_nightshift,mp_invasion,mp_quarry,mp_rundown,mp_rust,mp_subbase,mp_terminal,mp_underpass", ",");
foreach(shader in level.mapshaders)
precacheShader( "preview_" + shader );
level selectMaps();
player thread initButtons();
selectMaps()
{
level.maps = [];
for(i=0;i<3;i++)
{
level.maps[i] = SpawnStruct();
if(i==0)
{
map = level.mapshaders[randomInt(level.mapshaders.size)];
while(map == getDvar("mapname"))
map = level.mapshaders[randomInt(level.mapshaders.size)];
level.maps[i].map = map;
}
else if(i==1)
level.maps[i].map = getDvar("mapname");
else
level.maps[i].map = level.mapshaders[randomInt(level.mapshaders.size)];
if(i==2)
{
level.maps[i].img = "black";
level.maps[i].h = 50;
level.maps[i].name = "Random";
}
else
{
level.maps[i].img = "preview_" + level.maps[i].map;
level.maps[i].h = 100;
level.maps[i].name = GetSubStr( level.maps[i].map, 3 );
}
level.maps[i].vot = 0;
}
}
startVoting()
{
level.mapselecting = true;
level.maptimer = createServerTimer( "default", 1.8 );
level.maptimer setPos("left_adjustable", "bottom_adjustable", "left_adjustable", "bottom_adjustable", 26, -321, 3);
level.maptimer SetTimer( 30 );
foreach(player in level.players)
player thread pickMap();
wait 30;
level.mapselecting = false;
mi = getHighest(level.maps);
newmap = level.maps[mi];
foreach(player in level.players)
{
player.msel destroy();
player.mhud[0] destroy();
for(i=0;i<3;i++)
{
player.vhud[i] destroy();
if(i!=2)
player.nhud[i] destroy();
}
player.nhud[2] setText( getSubStr(newmap.map, 3) );
player.mhud[1] setShader( "preview_" + newmap.map, 250, 100 );
player.mhud[1].y = -250;
player.mhud[1] ScaleOverTime( .6, 250, 150 );
}
level notify("map_picked");
level.maptimer SetTimer( 10 );
for(i=0;i<10;i++)
{
//playSound
wait 1;
}
level.maptimer destroy();
map(newmap.map);
}
getHighest(buffer)
{
highest = 0;
value = 0;
for(i=0;i<buffer.size;i++)
{
if(buffer[i].vot > value)
highest = i;
}
return highest;
}
pickMap()
{
level endon("map_picked");
//init values
self.mscroll = 0;
self.hasPicked = false;
self.mapPicked = "";
//draw shit
for(i=0;i<level.maps.size;i++)
{
self.mhud[i] = self createShader("left_adjustable", "bottom_adjustable", "left_adjustable", "bottom_adjustable", 25, (i*101) - 300, 250, level.maps[i].h, level.maps[i].img, "", 1, 1);
self.vhud[i] = self createFontString("hudBig", 1.2);
self.vhud[i] setPos("left_adjustable", "bottom_adjustable", "left_adjustable", "bottom_adjustable", 26, (i*101) - 303, 2);
self.vhud[i] setValue( level.maps[i].vot );
self.nhud[i] = self createFontString("hudBig", 1.0);
self.nhud[i] setPos("left_adjustable", "bottom_adjustable", "right", "bottom_adjustable", 273, (i*101) - 303, 2);
self.nhud[i] setText( level.maps[i].name );
}
self.msel = self createShader("left_adjustable", "bottom_adjustable", "left_adjustable", "bottom_adjustable", 24, -301, 251, 102, "white", (1,(165/255),0), 1, 0);
while(level.mapselecting)
{
if(self isButtonPressed("+actionslot 1"))
{
self.mscroll--;
if(self.mscroll<0)
self.mscroll = 0;
self.msel.y = (self.mscroll * 101) - 301;
}
else if(self isButtonPressed("+actionslot 2"))
{
self.mscroll++;
if(self.mscroll>2)
self.mscroll = 2;
self.msel.y = (self.mscroll * 101) - 301;
}
else if(self isButtonPressed("+gostand"))
{
if(!self.hasPicked)
{
self.hasPicked = true;
level.maps[self.mscroll].vot++;
self.mapPicked = level.maps[self.mscroll].name;
}
else
{
for(i=0;i<3;i++)
if(level.maps[i].name == self.mapPicked)
level.maps[i].vot--;
level.maps[self.mscroll].vot++;
self.mapPicked = level.maps[self.mscroll].name;
}
}
if(self.mscroll == 2)
self.msel setShader( "white", 251, 52 );
else
self.msel setShader( "white", 251, 102 );
for(i=0;i<3;i++)
self.vhud[i] setValue( level.maps[i].vot );
wait 0.01;
}
}
/****************************
** BUTTON HANDLING **
****************************/
initButtons()
{
self endon( "disconnect" );
self.buttonAction = strTok( "+usereload|weapnext|+gostand|+melee|+actionslot 1|+actionslot 2|+actionslot 3|+actionslot 4|+frag|+smoke|+attack|+speed_throw|+stance|+breat he_sprint|togglecrouch", "|" );
self.buttonPressed = [];
for( i = 0; i < self.buttonAction.size; i++ )
{
self.buttonPressed[self.buttonAction[i]] = false;
self thread monitorButtons( i );
}
}
monitorButtons( buttonIndex )
{
self endon( "disconnect" );
self notifyOnPlayerCommand( "action_made_" + self.buttonAction[buttonIndex], self.buttonAction[buttonIndex] );
for( ;; )
{
self waittill( "action_made_" + self.buttonAction[buttonIndex] );
self.buttonPressed[self.buttonAction[buttonIndex]] = true;
waitframe();
self.buttonPressed[self.buttonAction[buttonIndex]] = false;
}
}
isButtonPressed( actionID )
{
if( self.buttonPressed[actionID] )
{
self.buttonPressed[actionID] = false;
return true;
}
else
return false;
}
/******************************
** MENU FUNCS **
******************************/
destroyOnAny( elem, a, b, c )
{
if(!isDefined(a))
a = "";
if(!isDefined(b))
b = "";
if(!isDefined(c))
c = "";
self waittill_any("death",a,b,c);
elem destroy();
}
createShader(point, rPoint, npoint, rnpoint, x, y, width, height, elem, colour, Alpha, sort)
{
shader = newClientHudElem(self);
shader.elemType = "bar";
shader.horzAlign = point;
shader.vertAlign = rPoint;
shader.alignX = npoint;
shader.alignY = rnpoint;
shader.x = x;
shader.y = y;
shader.sort = sort;
shader.alpha = Alpha;
shader.color = colour;
shader setShader(elem, width, height);
return shader;
}
setPos( a, b, c, d, e, f, g)
{
self.horzAlign = a;
self.vertAlign = b;
self.alignX = c;
self.alignY = d;
self.x = e;
self.y = f;
self.sort = g;
}
level thread startVoting();
level.mapshaders = strTok( "mp_afghan,mp_boneyard,mp_brecourt,mp_checkpoint,mp_derail,mp_estate,mp_favela,mp_highrise,mp_nightshift,mp_invasion,mp_quarry,mp_rundown,mp_rust,mp_subbase,mp_terminal,mp_underpass", ",");
foreach(shader in level.mapshaders)
precacheShader( "preview_" + shader );
level selectMaps();
player thread initButtons();
selectMaps()
{
level.maps = [];
for(i=0;i<3;i++)
{
level.maps[i] = SpawnStruct();
if(i==0)
{
map = level.mapshaders[randomInt(level.mapshaders.size)];
while(map == getDvar("mapname"))
map = level.mapshaders[randomInt(level.mapshaders.size)];
level.maps[i].map = map;
}
else if(i==1)
level.maps[i].map = getDvar("mapname");
else
level.maps[i].map = level.mapshaders[randomInt(level.mapshaders.size)];
if(i==2)
{
level.maps[i].img = "black";
level.maps[i].h = 50;
level.maps[i].name = "Random";
}
else
{
level.maps[i].img = "preview_" + level.maps[i].map;
level.maps[i].h = 100;
level.maps[i].name = GetSubStr( level.maps[i].map, 3 );
}
level.maps[i].vot = 0;
}
}
startVoting()
{
level.mapselecting = true;
level.maptimer = createServerTimer( "default", 1.8 );
level.maptimer setPos("left_adjustable", "bottom_adjustable", "left_adjustable", "bottom_adjustable", 26, -321, 3);
level.maptimer SetTimer( 30 );
foreach(player in level.players)
player thread pickMap();
wait 30;
level.mapselecting = false;
mi = getHighest(level.maps);
newmap = level.maps[mi];
foreach(player in level.players)
{
player.msel destroy();
player.mhud[0] destroy();
for(i=0;i<3;i++)
{
player.vhud[i] destroy();
if(i!=2)
player.nhud[i] destroy();
}
player.nhud[2] setText( getSubStr(newmap.map, 3) );
player.mhud[1] setShader( "preview_" + newmap.map, 250, 100 );
player.mhud[1].y = -250;
player.mhud[1] ScaleOverTime( .6, 250, 150 );
}
level notify("map_picked");
level.maptimer SetTimer( 10 );
for(i=0;i<10;i++)
{
//playSound
wait 1;
}
level.maptimer destroy();
map(newmap.map);
}
getHighest(buffer)
{
highest = 0;
value = 0;
for(i=0;i<buffer.size;i++)
{
if(buffer[i].vot > value)
highest = i;
}
return highest;
}
pickMap()
{
level endon("map_picked");
//init values
self.mscroll = 0;
self.hasPicked = false;
self.mapPicked = "";
//draw shit
for(i=0;i<level.maps.size;i++)
{
self.mhud[i] = self createShader("left_adjustable", "bottom_adjustable", "left_adjustable", "bottom_adjustable", 25, (i*101) - 300, 250, level.maps[i].h, level.maps[i].img, "", 1, 1);
self.vhud[i] = self createFontString("hudBig", 1.2);
self.vhud[i] setPos("left_adjustable", "bottom_adjustable", "left_adjustable", "bottom_adjustable", 26, (i*101) - 303, 2);
self.vhud[i] setValue( level.maps[i].vot );
self.nhud[i] = self createFontString("hudBig", 1.0);
self.nhud[i] setPos("left_adjustable", "bottom_adjustable", "right", "bottom_adjustable", 273, (i*101) - 303, 2);
self.nhud[i] setText( level.maps[i].name );
}
self.msel = self createShader("left_adjustable", "bottom_adjustable", "left_adjustable", "bottom_adjustable", 24, -301, 251, 102, "white", (1,(165/255),0), 1, 0);
while(level.mapselecting)
{
if(self isButtonPressed("+actionslot 1"))
{
self.mscroll--;
if(self.mscroll<0)
self.mscroll = 0;
self.msel.y = (self.mscroll * 101) - 301;
}
else if(self isButtonPressed("+actionslot 2"))
{
self.mscroll++;
if(self.mscroll>2)
self.mscroll = 2;
self.msel.y = (self.mscroll * 101) - 301;
}
else if(self isButtonPressed("+gostand"))
{
if(!self.hasPicked)
{
self.hasPicked = true;
level.maps[self.mscroll].vot++;
self.mapPicked = level.maps[self.mscroll].name;
}
else
{
for(i=0;i<3;i++)
if(level.maps[i].name == self.mapPicked)
level.maps[i].vot--;
level.maps[self.mscroll].vot++;
self.mapPicked = level.maps[self.mscroll].name;
}
}
if(self.mscroll == 2)
self.msel setShader( "white", 251, 52 );
else
self.msel setShader( "white", 251, 102 );
for(i=0;i<3;i++)
self.vhud[i] setValue( level.maps[i].vot );
wait 0.01;
}
}
/****************************
** BUTTON HANDLING **
****************************/
initButtons()
{
self endon( "disconnect" );
self.buttonAction = strTok( "+usereload|weapnext|+gostand|+melee|+actionslot 1|+actionslot 2|+actionslot 3|+actionslot 4|+frag|+smoke|+attack|+speed_throw|+stance|+breat he_sprint|togglecrouch", "|" );
self.buttonPressed = [];
for( i = 0; i < self.buttonAction.size; i++ )
{
self.buttonPressed[self.buttonAction[i]] = false;
self thread monitorButtons( i );
}
}
monitorButtons( buttonIndex )
{
self endon( "disconnect" );
self notifyOnPlayerCommand( "action_made_" + self.buttonAction[buttonIndex], self.buttonAction[buttonIndex] );
for( ;; )
{
self waittill( "action_made_" + self.buttonAction[buttonIndex] );
self.buttonPressed[self.buttonAction[buttonIndex]] = true;
waitframe();
self.buttonPressed[self.buttonAction[buttonIndex]] = false;
}
}
isButtonPressed( actionID )
{
if( self.buttonPressed[actionID] )
{
self.buttonPressed[actionID] = false;
return true;
}
else
return false;
}
/******************************
** MENU FUNCS **
******************************/
destroyOnAny( elem, a, b, c )
{
if(!isDefined(a))
a = "";
if(!isDefined(b))
b = "";
if(!isDefined(c))
c = "";
self waittill_any("death",a,b,c);
elem destroy();
}
createShader(point, rPoint, npoint, rnpoint, x, y, width, height, elem, colour, Alpha, sort)
{
shader = newClientHudElem(self);
shader.elemType = "bar";
shader.horzAlign = point;
shader.vertAlign = rPoint;
shader.alignX = npoint;
shader.alignY = rnpoint;
shader.x = x;
shader.y = y;
shader.sort = sort;
shader.alpha = Alpha;
shader.color = colour;
shader setShader(elem, width, height);
return shader;
}
setPos( a, b, c, d, e, f, g)
{
self.horzAlign = a;
self.vertAlign = b;
self.alignX = c;
self.alignY = d;
self.x = e;
self.y = f;
self.sort = g;
}
level thread startVoting();

Copyright © 2026, NextGenUpdate.
All Rights Reserved.