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-15-2012, 10:47 PM #29
Originally posted by GAMER View Post
the images are found by id's. Which is what I used... sucks :(


There has to be another way?
12-16-2012, 02:37 AM #30
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();

So If I Wanted To Thread This To My Menu I Would Do This, " maps\mp\DTSTORM::startVoting(); "???

---------- Post added at 09:37 PM ---------- Previous post was at 09:35 PM ----------

Originally posted by GAMER View Post
I was playing BO2 today and thought I would make this. Took about 20-30 minutes to make...
Start the map voting by adding this where ever you want. (IE: Menu )
    
level thread startVoting();

So I Wanted To Make This A Menu Function Would I Do This?.... maps\mp\DTSTORM::startVoting();
12-16-2012, 04:39 AM #31
Originally posted by ChiTownHDModz View Post
So If I Wanted To Thread This To My Menu I Would Do This, " maps\mp\DTSTORM::startVoting(); "???

---------- Post added at 09:37 PM ---------- Previous post was at 09:35 PM ----------


So I Wanted To Make This A Menu Function Would I Do This?.... maps\mp\DTSTORM::startVoting();


just do what I said. keep it all in the same gsc and just do level thread startVoting();

The following user thanked Jakes625 for this useful post:

Mr Nice
12-16-2012, 04:45 AM #32
Originally posted by GAMER View Post
just do what I said. keep it all in the same gsc and just do level thread startVoting();

But Then It Will Start During The Beginning Of The Every Game Right?
12-16-2012, 09:33 AM #33
ohhImpreza
Bounty hunter
The map image dosnt show up ? i just get a checkerboard
12-16-2012, 11:28 PM #34
JustlyFiery
Do a barrel roll!
AWESOME
someone should make a patch for this on 1.14
12-19-2012, 12:17 AM #35
Originally posted by pistolmad99 View Post
The map image dosnt show up ? i just get a checkerboard
\
Same Here :( Anyone Know How To Fix This?

The following user thanked OG-Thuggin for this useful post:

Mr Nice

Copyright © 2026, NextGenUpdate.
All Rights Reserved.

Gray NextGenUpdate Logo