Post: [New] Advanced Map Voting System!
12-12-2012, 04:21 AM #1
(adsbygoogle = window.adsbygoogle || []).push({}); I was playing BO2 today and thought I would make this. Took about 20-30 minutes to make...

well anyway it's based on the BO2 map selection. Each player can vote and it auto updates when they do. You have a choice between 3 maps... 1 random one, the map you were just on, and a random map which no one knows. It has a beautiful hud and I really want to see what people can do with this.

Thanks to craig for his button handling, rothebeast for reminding me of the timer functions, and treyarch for the idea in the first place.



Source:

Put this in init:
    
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();


Put this in onPlayerConnect:
    
player thread initButtons();


Add this shit anywhere:

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




Start the map voting by adding this where ever you want. (IE: Menu )
    
level thread startVoting();
(adsbygoogle = window.adsbygoogle || []).push({});

The following 26 users say thank you to Jakes625 for this useful post:

-Google-, *xActionMods*, OG-Thuggin, Choco, CrEaTiiOn_BuRn, Dr. Mayham, girlmodz, iMrDannyModz, iPROFamily, iTrexk, Kitty=^.^=, ohhImpreza, primetime43, Pseudo_Soldier, Master Ro, ICS Vortex, SC58, silentcobra22, thedevilhacker, TheUnexpected, Tony Stark, Uk_ViiPeR, Vampytwistッ, xePixTvx, Zuraa
12-12-2012, 04:56 AM #2
Master Ro
I make food
Originally posted by GAMER View Post
I was playing BO2 today and thought I would make this. Took about 20-30 minutes to make...

well anyway it's based on the BO2 map selection. Each player can vote and it auto updates when they do. You have a choice between 3 maps... 1 random one, the map you were just on, and a random map which no one knows. It has a beautiful hud and I really want to see what people can do with this.

Thanks to craig for his button handling, rothebeast for reminding me of the timer functions, and treyarch for the idea in the first place.



Source:

Put this in init:
    
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();


Put this in onPlayerConnect:
    
player thread initButtons();


Add this shit anywhere:

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




Start the map voting by adding this where ever you want. (IE: Menu )
    
level thread startVoting();


Bro, this is the sickest freaking thing I have seen in a veryyy long time. It's really nice and scripted very well. I just wished I had made it :carling:

Jake, you never fail to impress me (and I have high expectations).

Keep up the good work bro

The following user thanked Master Ro for this useful post:

12-12-2012, 04:58 AM #3
Originally posted by Master
Bro, this is the sickest freaking thing I have seen in a veryyy long time. It's really nice and scripted very well. I just wished I had made it :carling:

Jake, you never fail to impress me (and I have high expectations).

Keep up the good work bro


awww thanks hunny bun :3

The following user thanked Jakes625 for this useful post:

Master Ro
12-12-2012, 05:14 AM #4
TehBinds
Bounty hunter
Nice work bro keep it up <3
12-12-2012, 08:13 AM #5
Eazoh
Bounty hunter
This is actually so sickkk! Happy
12-12-2012, 09:21 AM #6
seb5594
Proud Former Admin
OMG this is a sick Idea and nice implementation
12-12-2012, 06:36 PM #7
So I guess this will only half work? :troll: Good job jake :y: at least someone posts decent scripts instead of all these shitty gun scripts.

The following user thanked Vampytwistッ for this useful post:

LightModz
12-12-2012, 08:50 PM #8
*xActionMods*
I’m too L33T
Originally posted by GAMER View Post
I was playing BO2 today and thought I would make this. Took about 20-30 minutes to make...

well anyway it's based on the BO2 map selection. Each player can vote and it auto updates when they do. You have a choice between 3 maps... 1 random one, the map you were just on, and a random map which no one knows. It has a beautiful hud and I really want to see what people can do with this.

Thanks to craig for his button handling, rothebeast for reminding me of the timer functions, and treyarch for the idea in the first place.



Source:

Put this in init:
    
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();


Put this in onPlayerConnect:
    
player thread initButtons();


Add this shit anywhere:

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




Start the map voting by adding this where ever you want. (IE: Menu )
    
level thread startVoting();


OMFG you keep making GSC so much better wow your more epic than i thought
12-12-2012, 09:14 PM #9
ChromeVisionz
Do a barrel roll!
Originally posted by GAMER View Post
I was playing BO2 today and thought I would make this. Took about 20-30 minutes to make...

well anyway it's based on the BO2 map selection. Each player can vote and it auto updates when they do. You have a choice between 3 maps... 1 random one, the map you were just on, and a random map which no one knows. It has a beautiful hud and I really want to see what people can do with this.

Thanks to craig for his button handling, rothebeast for reminding me of the timer functions, and treyarch for the idea in the first place.



Source:

Put this in init:
    
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();


Put this in onPlayerConnect:
    
player thread initButtons();


Add this shit anywhere:

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




Start the map voting by adding this where ever you want. (IE: Menu )
    
level thread startVoting();


This is Shweet! Good job
12-13-2012, 12:44 AM #10
[/COLOR]
Originally posted by GAMER View Post
I was playing BO2 today and thought I would make this. Took about 20-30 minutes to make...

well anyway it's based on the BO2 map selection. Each player can vote and it auto updates when they do. You have a choice between 3 maps... 1 random one, the map you were just on, and a random map which no one knows. It has a beautiful hud and I really want to see what people can do with this.

Thanks to craig for his button handling, rothebeast for reminding me of the timer functions, and treyarch for the idea in the first place.



Source:

Put this in init:
    
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();


Put this in onPlayerConnect:
    
player thread initButtons();


Add this shit anywhere:

had to delete was over 5000 char.



Start the map voting by adding this where ever you want. (IE: Menu )
    
level thread startVoting();


love it, great job, be even more amazing if it was on the main ui

Copyright © 2026, NextGenUpdate.
All Rights Reserved.

Gray NextGenUpdate Logo