Skip to content
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Donate
Collapse

Plutonium

  1. Home
  2. MW3 Modding Support & Discussion
  3. [Release] IW5 Mapvote

[Release] IW5 Mapvote

Scheduled Pinned Locked Moved MW3 Modding Support & Discussion
50 Posts 22 Posters 9.2k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • cachhoundefined Offline
    cachhoundefined Offline
    cachho
    wrote on last edited by
    #36

    First of all, thanks for making this open source. It's a great script.

    I'm running a vanilla server that's supposed to replicate the original feel, and as we know the original game only had the option to choose between 2 maps instead of 6.

    So I made a fork that only gives you two maps to choose from. Most people would say that's taking away from the QOL, and well, you aren't wrong. But I like it better for my niche case, and it results in more variety.

    Only having an A/B logic opens the door for easier controls, all buttons now move between A and B without being restricted to only up or only down. I also tried to take advantage of the simplifications to optimize the script, I'm sure there's more that can be done since this is my first .gsc script.

    I'm sure you'll dismiss the 2-maps-only idea, but there's a change I made that you might want to consider: the text in the top right corner now shows total votes/players. Your version shows the index position of the cursor, which I don't really see the benefit of.

    Another thing I did is select a random map in a tie instead of always picking the first one.

    screenshot

    Link to the fork with more description: https://github.com/cachho/iw5-mapvote/

    1 Reply Last reply
    1
    • SimplyCodyundefined Offline
      SimplyCodyundefined Offline
      SimplyCody
      Contributor
      wrote on last edited by
      #37

      So when I use this for infected it works but we cannot see the white line on what map to vote any fixes?

      Kalitosundefined 1 Reply Last reply
      0
      • SimplyCodyundefined SimplyCody

        So when I use this for infected it works but we cannot see the white line on what map to vote any fixes?

        Kalitosundefined Offline
        Kalitosundefined Offline
        Kalitos
        wrote on last edited by
        #38

        avatar kora Which version are you using

        SimplyCodyundefined 1 Reply Last reply
        0
        • Kalitosundefined Kalitos

          avatar kora Which version are you using

          SimplyCodyundefined Offline
          SimplyCodyundefined Offline
          SimplyCody
          Contributor
          wrote on last edited by
          #39

          Kalitos I got from the git hub page so I am assuming the first one

          1 Reply Last reply
          0
          • Resxtundefined Offline
            Resxtundefined Offline
            Resxt
            Plutonium Staff
            wrote on last edited by Resxt
            #40

            If anyone else has issues with the white line not displaying Kalitos helped me and we figured out (in addition to making sure your map and modes formats are correct and you have as much maps and maps descriptions etc.) that Birchy's cranked script would cause that issue.

            I didn't take the time to try to debug it and see what exactly causes that but removing the script fixed the issue for me.
            I also noted that the createServerFontString() function seems to cause an issue with that

            avatar kora maybe this can help you too

            1 Reply Last reply
            0
            • Kalitosundefined Offline
              Kalitosundefined Offline
              Kalitos
              wrote on last edited by Kalitos
              #41

              Another version, which does not need a description, in my simplest way. Keeps mode/map vote option

              #include maps\mp\_utility;
              #include common_scripts\utility;
              #include maps\mp\gametypes\_hud_util;
              
              init() {
                  precacheshader("gradient_fadein");
                  precacheshader("gradient_top");
                  precacheshader("white");
                  //Set here the maps you want to rotate, separate them with a #.
                  level.mapvotemaps = strtok("mp_alpha#mp_bootleg#mp_bravo#mp_carbon#mp_dome#mp_exchange#mp_hardhat#mp_interchange#mp_lambeth#mp_mogadishu#mp_paris#mp_plaza2#mp_radar#mp_seatown#mp_underground#mp_village#mp_terminal_cls#mp_rust#mp_highrise#mp_italy#mp_park#mp_overwatch#mp_morningwood#mp_meteora#mp_cement#mp_qadeem#mp_restrepo_ss#mp_hillside_ss#mp_courtyard_ss#mp_aground_ss#mp_six_ss#mp_burn_ss#mp_crosswalk_ss#mp_shipbreaker#mp_roughneck#mp_moab#mp_boardwalk#mp_nola#mp_favela#mp_nuked#mp_nightshift", "#");
                  //Set the type/gamemode here, whatever your dsr file is called without the . When doing so, you must also modify within the "maptostring()" function in the "switch(type)" section so that the name of the dsr file matches the type/game mode.
                  level.mapvotetype = strtok("TDM_default#DOM_default", "#");
                  level.mapvoteindices = [];
              	
              	tryes = 0;	
              	while(level.mapvoteindices.size < 6 && tryes < 100) {
              		tryes++;		
              		j = randomint(level.mapvotemaps.size);
              		k = randomint(level.mapvotetype.size);	
              		while(inArray(level.mapvoteindices,(level.mapvotemaps[j] + "#" + level.mapvotetype[k])))
              		{
              			j = randomint(level.mapvotemaps.size);
              			k = randomint(level.mapvotetype.size);		
              		}
              		level.mapvoteindices[level.mapvoteindices.size] = level.mapvotemaps[j] + "#" + level.mapvotetype[k];						
              	}
              
                  replacefunc(maps\mp\gametypes\_gamelogic::waittillFinalKillcamDone, ::finalkillcamhook);
              }
              
              finalkillcamhook() {
                  if (!IsDefined(level.finalkillcam_winner)) {
                      mapvote();
                      return false;
                  } else {
                      level waittill("final_killcam_done");
                      mapvote();
                      return true;
                  }
              }
              
              mapvote() {
                  if (!waslastround()) return;
                  level.mapvoteui[0] = shader("white", "TOP", "TOP", 0, 120, 350, 20, (0.157,0.173,0.161), 1, 1, true);
                  level.mapvoteui[1] = shader("white", "TOP", "TOP", 0, 140, 350, 20, (0.310,0.349,0.275), 1, 1, true);
                  level.mapvoteui[2] = shader("gradient_top", "TOP", "TOP", 0, 140, 350, 2, (1,1,1), 1, 2, true);
                  level.mapvoteui[3] = shader("white", "TOP", "TOP", 0, 160, 350, 20, (0.212,0.231,0.220), 1, 1, true); //160
                  level.mapvoteui[4] = shader("white", "TOP", "TOP", 0, 180, 350, 20, (0.180,0.196,0.188), 1, 1, true); //180
                  level.mapvoteui[5] = shader("white", "TOP", "TOP", 0, 200, 350, 20, (0.212,0.231,0.220), 1, 1, true); //200
                  level.mapvoteui[6] = shader("white", "TOP", "TOP", 0, 220, 350, 20, (0.180,0.196,0.188), 1, 1, true); //220
                  level.mapvoteui[7] = shader("white", "TOP", "TOP", 0, 240, 350, 20, (0.212,0.231,0.220), 1, 1, true); //240
                  level.mapvoteui[8] = shader("white", "TOP", "TOP", 0, 260, 350, 20, (0.180,0.196,0.188), 1, 1, true); //260
                  level.mapvoteui[9] = shader("white", "TOP", "TOP", 0, 280, 350, 20, (0.157,0.173,.161), 1, 1, true); //280
                  level.mapvoteui[10] = shader("white", "TOP", "TOP", 0, 300, 350, 20, (0.310,0.349,0.275), 1, 1, true); //300
                  level.mapvoteui[11] = shader("gradient_top", "TOP", "TOP", 0, 280, 350, 2, (1,1,1), 1, 2, true); // 280
                  level.mapvoteui[12] = text(&"VOTING PHASE: ", "LEFT", "TOP", -170, 130, 1, "hudSmall", (1,1,1), 1, 3, true, 20);    //
                  level.mapvoteui[13] = text( maptostring(strTok(level.mapvoteindices[0],"#")[0], strTok(level.mapvoteindices[0],"#")[1]), "LEFT", "TOP", -170, 170, 1, "objective", (1,1,1), 1, 3, true); // 170
                  level.mapvoteui[14] = text( maptostring(strTok(level.mapvoteindices[1],"#")[0], strTok(level.mapvoteindices[1],"#")[1]), "LEFT", "TOP", -170, 190, 1, "objective", (1,1,1), 1, 3, true); // 190
                  level.mapvoteui[15] = text( maptostring(strTok(level.mapvoteindices[2],"#")[0], strTok(level.mapvoteindices[2],"#")[1]), "LEFT", "TOP", -170, 210, 1, "objective", (1,1,1), 1, 3, true); // 210
                  level.mapvoteui[16] = text( maptostring(strTok(level.mapvoteindices[3],"#")[0], strTok(level.mapvoteindices[3],"#")[1]), "LEFT", "TOP", -170, 230, 1, "objective", (1,1,1), 1, 3, true); // 230
                  level.mapvoteui[17] = text( maptostring(strTok(level.mapvoteindices[4],"#")[0], strTok(level.mapvoteindices[4],"#")[1]), "LEFT", "TOP", -170, 250, 1, "objective", (1,1,1), 1, 3, true); // 250
                  level.mapvoteui[18] = text( maptostring(strTok(level.mapvoteindices[5],"#")[0], strTok(level.mapvoteindices[5],"#")[1]), "LEFT", "TOP", -170, 270, 1, "objective", (1,1,1), 1, 3, true); // 270  
                  //////////////
                  //TODO: speed_throw/toggleads_throw will show bound/unbound for hold/toggle ads players. compromise may be to use forward/back, depending on how controller
                  //bindings handle this.
                  level.mapvoteui[19] = text("Up ^2[{+attack}] ^7Down ^2[{+toggleads_throw}]", "LEFT", "TOP", -170, 290, 1, "objective", (1,1,1), 1, 3, true); //290
                  level.mapvoteui[20] = text("Vote ^2[{+activate}]", "RIGHT", "TOP", 170, 290, 1, "objective", (1,1,1), 1, 3, true); //290
                  foreach(player in level.players) player thread input();
                  for(i = 0; i <= 20; i++) {
                      level.mapvoteui[12] setvalue(20 - i);
                      //playsoundonplayers("trophy_detect_projectile");
                      wait 1;
                  }
                  level notify("mapvote_over");
                  besti = 0;
                  bestv = -1;
                  for(i = 0; i < 6; i++) {
                      if(level.mapvoteui[i + 13].value > bestv) {
                          besti = i;
                          bestv = level.mapvoteui[i + 13].value;
                      }
                  }
                  //Note: We wait to prevent the scoreboard popping up at the end for a cleaner transition (Don't wait infinitely as a failsafe).
                  //TODO: Proper manipulation of sv_level.mapvotemaps is the better way to do this as it would allow the final scoreboard to show.
                  setDvar( "sv_maprotationcurrent", "dsr " + strTok(level.mapvoteindices[besti],"#")[1] + " map " + strTok(level.mapvoteindices[besti],"#")[0] );   
              }
              
              input() {
                  self endon("disconnect");
                  self endon("mapvote_over");
                  index = 0;
                  selected = -1;
                  select[0] = self text((index + 1) + "/6", "RIGHT", "TOP", 170, 130, 1, "objective", (1,1,1), 1, 3, false);
                  //select[1] = self text(" ", "LEFT", "TOP", -170, 150, 1, "objective", (1,1,1), 1, 3, false);
                  select[2] = self shader("gradient_fadein", "TOP", "TOP", 0, 160, 350, 20, (1,1,1), 0.5, 2, false);
                  select[3] = self shader("gradient_top", "TOP", "TOP", 0, 180, 350, 2, (1,1,1), 1, 2, false);
                  self notifyonplayercommand("up", "+attack");
              	self notifyonplayercommand("up", "+forward");
                  self notifyonplayercommand("down", "+toggleads_throw");
                  self notifyonplayercommand("down", "+speed_throw");
                  self notifyonplayercommand("down", "+back");
                  self notifyonplayercommand("select", "+usereload");
                  self notifyonplayercommand("select", "+activate");
                  self notifyonplayercommand("select", "+frag");
                  for(;;) {
                      command = self waittill_any_return("up", "down", "select");        
                      if(command == "up" && index > 0) {
                          index--;
                          select[0] settext((index + 1) + "/6");
                          //select[1] settext(" ");
                          select[2].y -= 20;
                          select[3].y -= 20;
                          self playlocalsound("mouse_over");
                      } else if(command == "down" && index < 5) {
                          index++;
                          select[0] settext((index + 1) + "/6");
                          //select[1] settext(" ");
                          select[2].y += 20;
                          select[3].y += 20;
                          self playlocalsound("mouse_over");
                      } else if(command == "select") {
                          if(selected == -1) {
                              selected = index;                
                              
                              level.mapvoteui[selected + 13].value += 1;
                              level.mapvoteui[selected + 13].text = strTok(level.mapvoteui[selected + 13].text,":")[0] + ":" + level.mapvoteui[selected + 13].value;
                              level.mapvoteui[selected + 13]  settext(level.mapvoteui[selected + 13].text);                
                              //iPrintLn(level.mapvoteui[selected + 13].text);                    
                              self playlocalsound("mouse_click");
                          } else if(selected != index) {                
                              
                              level.mapvoteui[selected + 13].value -= 1;
                              level.mapvoteui[selected + 13].text = strTok(level.mapvoteui[selected + 13].text,":")[0] + ":" + level.mapvoteui[selected + 13].value;
                              level.mapvoteui[selected + 13]  settext(level.mapvoteui[selected + 13].text);                
                              selected = index;
                              
                              level.mapvoteui[selected + 13].value += 1;
                              level.mapvoteui[selected + 13].text = strTok(level.mapvoteui[selected + 13].text,":")[0] + ":" + level.mapvoteui[selected + 13].value;
                              level.mapvoteui[selected + 13]  settext(level.mapvoteui[selected + 13].text);
                              //iPrintLn(level.mapvoteui[selected + 13].text);    
                              self playlocalsound("mouse_click");
                          }
                      }        
                  }
              }
              
              text(text, align, relative, x, y, fontscale, font, color, alpha, sort, server, value) {
                  element = spawnstruct();
                  if(server) {
                      element = createServerFontString( font, fontscale ); 
                  } else {
                      element = self createFontString( font, fontscale ); 
                  }
                  if(isdefined(value)) {
                      element.label = text;
                      element.value = value;
                      element setvalue(value);
                  } else {
                      element settext(text);
                      element.text = text;
                      element.value = 0;
              
                  }
                  element.hidewheninmenu = true;
                  element.color = color;
                  element.alpha = alpha;
                  element.sort = sort;
                  element setpoint(align, relative, x, y);
                  return element;
              }
              
              addTextHud( who, x, y, alpha, alignX, alignY, horiz, vert, fontScale, sort ) {
              	if( isPlayer( who ) )
              		hud = newClientHudElem( who );
              	else
              		hud = newHudElem();
              
              	hud.x = x;
              	hud.y = y;
              	hud.alpha = alpha;
              	hud.sort = sort;
              	hud.alignX = alignX;
              	hud.alignY = alignY;
              	if(isdefined(vert))
              		hud.vertAlign = vert;
              	if(isdefined(horiz))
              		hud.horzAlign = horiz;		
              	if(fontScale != 0)
              		hud.fontScale = fontScale;
              	hud.foreground = 1;
              	hud.archived = 0;
              	return hud;
              }
              
              shader(shader, align, relative, x, y, width, height, color, alpha, sort, server) {
                  element = spawnstruct();
                  if(server) {
                      element = newhudelem(self);
                  } else {
                      element = newclienthudelem(self);
                  }
                  element.elemtype = "icon";
                  element.hidewheninmenu = true;
                  element.shader = shader;
                  element.width = width;
                  element.height = height;
                  element.align = align;
                  element.relative = relative;
                  element.xoffset = 0;
                  element.yoffset = 0;
                  element.children = [];
                  element.sort = sort;
                  element.color = color;
                  element.alpha = alpha;
                  element setparent(level.uiparent);
                  element setshader(shader, width, height);
                  element setpoint(align, relative, x, y);
                  return element;
              }
              
              randomindices() {
                  array = [];
                  for (i = 0; i < 6; i++) {
                      array[i] = randomint(level.mapvotemaps.size);
                      for (j = 0; j < i; j++) {
                          if (array[i] == array[j]) {
                              i--;
                              break;
                          }
                      }
                  }
                  return array;
              }
              
              
              
              maptostring(map,type) {    
                  switch(map) {
                  case "mp_alpha":  map = "LOCKDOWN";
                  break;
                  case "mp_bootleg": map = "BOOTLEG";
                  break;
                  case "mp_bravo": map = "MISSION";
                  break;
                  case "mp_carbon": map = "CARBON";
                  break;
                  case "mp_dome": map = "DOME";
                  break;
                  case "mp_exchange": map = "DOWNTURN";
                  break;
                  case "mp_hardhat": map = "HARDHAT";
                  break;
                  case "mp_interchange": map = "INTERCHANGE";
                  break;
                  case "mp_lambeth": map = "FALLEN";
                  break;
                  case "mp_mogadishu": map = "BAKAARA";
                  break;
                  case "mp_paris": map = "RESISTANCE";
                  break;
                  case "mp_plaza2": map = "ARKADEN";
                  break;
                  case "mp_radar": map = "OUTPOST";
                  break;
                  case "mp_seatown": map = "SEATOWN";
                  break;
                  case "mp_underground": map = "UNDERGROUND";
                  break;
                  case "mp_village": map = "VILLAGE";
                  break;
                  case "mp_terminal_cls": map = "TERMINAL";
                  break;
                  case "mp_rust": map = "RUST";
                  break;
                  case "mp_highrise": map = "HIGHRISE";
                  break;
                  case "mp_italy": map = "PIAZZA";
                  break;
                  case "mp_park": map = "LIBERATION";
                  break;
                  case "mp_overwatch": map = "OVERWATCH";
                  break;
                  case "mp_morningwood": map = "BLACK BOX";
                  break;
                  case "mp_meteora": map = "SANCTUARY";
                  break;
                  case "mp_qadeem": map = "OASIS";
                  break;
                  case "mp_restrepo_ss": map = "LOOKOUT";
                  break;
                  case "mp_hillside_ss": map = "GETAWAY";
                  break;
                  case "mp_courtyard_ss": map = "EROSION";
                  break;
                  case "mp_aground_ss": map = "AGROUND";
                  break;
                  case "mp_six_ss": map = "VORTEX";
                  break;
                  case "mp_burn_ss": map = "U-TURN";
                  break;
                  case "mp_crosswalk_ss": map = "INTERSECTION";
                  break;
                  case "mp_shipbreaker": map = "DECOMMISSION";
                  break;
                  case "mp_roughneck": map = "OFF SHORE";
                  break;
                  case "mp_moab": map = "GULCH";
                  break;
                  case "mp_boardwalk": map = "BOARDWALK";
                  break;
                  case "mp_nola": map = "PARISH";
                  break;
                  case "mp_favela": map = "FAVELA";
                  break;
                  case "mp_nuked": map = "NUKETOWN";
                  break;
                  case "mp_nightshift": map = "SKIDROW";
                  break;
                  case "mp_cement": map = "FOUNDATION";
                  break;
                  default:
                  break;
                  } 
              
                  switch(type) {
                  case "TDM_default": map = map + " (TEAM DEATHMATCH)" + " :0";
                  break;
                  case "DOM_default":map = map  + " (DOMINATION)" + " :0";
                  break;
                  case "DEM_default": map = map + " (DEMOLITION)" + " :0";
                  break;
                  case "INF_Default": map = map + " (INFECTED)" + " :0";
                  break;
                  case "FFA_default":map = map  + " (FREE FOR ALL)" + " :0";    
                  break;
                  case "CTF_default":map = map  + " (CAPTURE THE FLAG)" + " :0";    
                  break;
                  case "DZ_default":map = map  + " (DROP ZONE)" + " :0";    
                  break;
                  case "GG_default":map = map  + " (GUN GAME)" + " :0";    
                  break;
                  case "HQ_default":map = map  + " (HEADQUARTERS)" + " :0";    
                  break;
                  case "JUG_default":map = map  + " (JUGGERNAUT)" + " :0";
                  break;
                  case "KC_default":map = map  + " (KILL CONFIRMED)" + " :0";
                  break;
                  case "OIC_default":map = map  + " (ONE IN THE CHAMBER)" + " :0";
                  break;
                  case "SAB_default":map = map  + " (SABOTAGE)" + " :0";
                  break;
                  case "SD_default":map = map  + " (SEARCH AND DESTROY)" + " :0";
                  break;
                  case "TDEF_default":map = map  + " (TEAM DEFENDER)" + " :0";
                  break;
                  case "TJ_default":map = map  + " (TEAM JUGGERNAUT)" + " :0";
                  break;
                  default:
                  break;
                  }    
                  return map;
              }
              
              inArray(array, text)
              {
                  for(i=0; i<array.size; i++)
                  {
                      if(array[i] == text)
                        return true;
                  }
                  return false;
              }
              
              1 Reply Last reply
              2
              • A Former User? Offline
                A Former User? Offline
                A Former User
                wrote on last edited by
                #42

                Is it possible to extend the number of maps that can be choosen? I want to set it to like 10 maps. Also, i just wanna ask: the maps that can be choosen, are they picked completly random by the game?

                FutureRaveundefined 1 Reply Last reply
                0
                • A Former User? A Former User

                  Is it possible to extend the number of maps that can be choosen? I want to set it to like 10 maps. Also, i just wanna ask: the maps that can be choosen, are they picked completly random by the game?

                  FutureRaveundefined Offline
                  FutureRaveundefined Offline
                  FutureRave
                  VIP
                  wrote on last edited by
                  #43

                  The answer is yes to both of your questions.

                  1 Reply Last reply
                  0
                  • x7razor_zaundefined Offline
                    x7razor_zaundefined Offline
                    x7razor_za
                    wrote on last edited by
                    #44

                    Hi can anyone tell me what needs to be changed to get more maps on the menu instead of only the 6. Thanks

                    Resxtundefined 1 Reply Last reply
                    0
                    • x7razor_zaundefined x7razor_za

                      Hi can anyone tell me what needs to be changed to get more maps on the menu instead of only the 6. Thanks

                      Resxtundefined Offline
                      Resxtundefined Offline
                      Resxt
                      Plutonium Staff
                      wrote on last edited by
                      #45

                      x7razor_za iirc you can't get more than 6 on this script or it'll have some of them not display correctly due to hitting the game's limitations. Could be wrong.

                      You need to edit the code yourself to add more maps per votes.
                      Look at Kalitos comment, seems like he provided a solution

                      1 Reply Last reply
                      0
                      • x7razor_zaundefined Offline
                        x7razor_zaundefined Offline
                        x7razor_za
                        wrote on last edited by
                        #46

                        Ah ok thanks for the feedback 🙂

                        1 Reply Last reply
                        0
                        • A Former User? Offline
                          A Former User? Offline
                          A Former User
                          wrote on last edited by
                          #47
                          This post is deleted!
                          Resxtundefined 1 Reply Last reply
                          0
                          • A Former User? A Former User

                            This post is deleted!

                            Resxtundefined Offline
                            Resxtundefined Offline
                            Resxt
                            Plutonium Staff
                            wrote on last edited by
                            #48

                            @pusitails360 the value in the code is wrong at line 9
                            Replace shipbreaker with mp_shipbreaker

                            A Former User? 1 Reply Last reply
                            0
                            • Resxtundefined Resxt

                              @pusitails360 the value in the code is wrong at line 9
                              Replace shipbreaker with mp_shipbreaker

                              A Former User? Offline
                              A Former User? Offline
                              A Former User
                              wrote on last edited by
                              #49
                              This post is deleted!
                              1 Reply Last reply
                              0
                              • 1AkimkA1undefined Offline
                                1AkimkA1undefined Offline
                                1AkimkA1
                                wrote on last edited by
                                #50

                                the link doesn't work

                                1 Reply Last reply
                                0
                                • Xerxesundefined Xerxes moved this topic from MW3 Modding Releases & Resources on
                                Reply
                                • Reply as topic
                                Log in to reply
                                • Oldest to Newest
                                • Newest to Oldest
                                • Most Votes


                                • 1
                                • 2
                                • 3
                                • Login

                                • Don't have an account? Register

                                • Login or register to search.
                                • First post
                                  Last post
                                0
                                • Recent
                                • Tags
                                • Popular
                                • Users
                                • Groups
                                • Donate