Results 1 to 10 of 10
  1. #1

    Question on round end Votemap

    I want the plugin which do same thing as xVotemap on round end.

    I googled it and found "Insane-Limits-Admin-Votemap-set-next-map-on-round-end-(working-code)"

    this code is for admin only, but I want a code which for everyones

    Could someone make it with IL or proconrulz?

  2. #2
    Super Moderator
    Join Date
    Jul 2010
    Location
    Very North Darwin
    Posts
    1,539
    Just setup for short time for vote.

  3. #3
    Senior Member
    Join Date
    Oct 2015
    Location
    Germany
    Posts
    271
    tomopcver are you still interested?

    the timespan between round end and next round are very short. votemap within 50 seconds. many players are writing in this few seconds chat stuff like "gg, bye, easy".

    are you sure, you realy want it?
    Developer of the VIP Slot Manager Plugin

  4. #4
    Quote Originally Posted by maxdralle View Post
    tomopcver are you still interested?

    the timespan between round end and next round are very short. votemap within 50 seconds. many players are writing in this few seconds chat stuff like "gg, bye, easy".

    are you sure, you realy want it?

    In battlefield3 we can't type any chat while the timespan between round end and next round but possible in bf4.

    And in bf1, official map votes are held in this time
    https://i.imgur.com/uLbzQIw.jpg

    As you say, votemap within 50 seconds is difficult but I think its not impossible.

  5. #5
    Senior Member
    Join Date
    Oct 2015
    Location
    Germany
    Posts
    271
    of course your main player base will lern this kind of votemap after few rounds. but the question is whether it makes sense to write/use this script. it is a little bit strange for new player because usually the votemap runs during the round.

    but yes, it is possible
    Developer of the VIP Slot Manager Plugin

  6. #6
    Quote Originally Posted by maxdralle View Post
    it is a little bit strange for new player because usually the votemap runs during the round.
    My server usually has same players and only a few new ones, So it's ok to me.

  7. #7
    Senior Member
    Join Date
    Oct 2015
    Location
    Germany
    Posts
    271
    okay, on this weekend i will take a look into my script collection. edit a littebit, and done...
    i am looking forward to the reaction of the player base
    Developer of the VIP Slot Manager Plugin

  8. #8

  9. #9
    Senior Member
    Join Date
    Oct 2015
    Location
    Germany
    Posts
    271
    Insane Limits - Votemap On Round End (scoreboard)

    this script is a special votemap on round end.

    on round end when the score board is showing, it starts the votmap in the in-game-chat. all players can vote the next map. after few secounds (ca. 30 sec) the voting will be end. the most voted map will be the next map.


    INSTALLATION
    setup for insane limits (2x new limit)

    STEP 1 - create new limit 1
    Evaluation: OnRoundOver
    First_check: Code
    First_check_code: put the code#1 here
    limit_action: none

    STEP 2 - create new limit 2
    Evaluation: OnAnyChat
    First_check: Code
    First_check_code: put the code#2 here
    limit_action: none


    Code#1
    Code:
    //////////////////////////////
    // Votemap on round over part 1-2
    //////////////////////////////
    // IL SETTINGS:   limit_evaluation: OnRoundOver   ;    first_check: Code   ;   limit_action: none
    
    
    // SETTINGS
    
    int HowManyMaps = 6;    // CUSTOMIZE: number of vote options (2-8)
    int VotemapStartDelay = 20;    // CUSTOMIZE: start voting time. delay in second after round end
    int VoteDuring = 35;    // CUSTOMIZE: voting duration in seconds
    int MinPlayerOnline = 5;    // CUSTOMIZE: minimum player on server to enable votemap
    int VipVoteCount = 3;    // CUSTOMIZE: VIP player extra vote power
    
    // SETTINGS - END
    
    Dictionary<string, int> votemapVotes = new Dictionary<string, int>();
    Dictionary<int, int> tmp_voteCounter = new Dictionary<int, int>();
    List<int> votemapList = new List<int>();
    Random rnd = new Random();
    int tmp_mapIndex = 0;
    string tmp_MapName = String.Empty;
    int votemapWinnerMap = 0;
    int votemapWinnerVotes = 0;
    bool tmp_DisplayVotemap = true;
    bool tmp_EndVotemap = false;
    string VotemapStartTime = DateTime.UtcNow.AddMinutes(-5).ToString();
    
    // check if votmap can start
    if (VotemapStartDelay + VoteDuring > 60) { plugin.ConsoleWrite("ERROR in votemap settings. time for 'VotemapStartDelay' + 'VoteDuring' are too long."); return false; }
    if (server.PlayerCount < MinPlayerOnline) { return false; }
    if (plugin.Data.issetString("il_votemapstarttime")) { VotemapStartTime = plugin.Data.getString("il_votemapstarttime"); }
    if (((DateTime.UtcNow - DateTime.Parse(VotemapStartTime)).TotalSeconds) < 100) { return false; }
    VotemapStartTime = DateTime.UtcNow.ToString();
    plugin.Data.setString("il_votemapstarttime", VotemapStartTime);
    
    // generate random votemap list
    while ((votemapList.Count < HowManyMaps) && (votemapList.Count <= server.MapFileNameRotation.Count) && (votemapList.Count < 10)) {
    	tmp_mapIndex = rnd.Next(server.MapFileNameRotation.Count);
    	if (!votemapList.Contains(tmp_mapIndex)) { votemapList.Add(tmp_mapIndex); }
    }
    if (votemapList.Count <= 0) { return false; }
    
    // enable votmap voting
    Thread il_votemap = new Thread(new ThreadStart(delegate() {
    	try {
    		Thread.Sleep(VotemapStartDelay * 1000);
    		if (plugin.Data.issetObject("il_votemapvotes")) { plugin.Data.unsetObject("il_votemapvotes"); }
    		// start voting
    		plugin.Data.setObject("il_votemaplist", votemapList);
    		if (plugin.Data.issetInt("il_chatspam")) { plugin.Data.unsetInt("il_chatspam"); }
    		plugin.SendGlobalMessage("#######################");
    		plugin.SendGlobalMessage("#######################");
    		plugin.SendGlobalMessage("####          VOTEMAP            ####");
    		plugin.SendGlobalMessage("#######################");
    		while ((((DateTime.UtcNow - DateTime.Parse(VotemapStartTime)).TotalSeconds) < VoteDuring + VotemapStartDelay) && (!tmp_EndVotemap)) {
    			// voting & reminder
    			Thread.Sleep(2000);
    			if (plugin.Data.issetBool("il_votemap_reminder")) {
    				tmp_DisplayVotemap = true;
    				plugin.Data.unsetBool("il_votemap_reminder");
    			}
    			if (((DateTime.Parse(VotemapStartTime) - DateTime.UtcNow).TotalSeconds) + VoteDuring + VotemapStartDelay <= 2) {
    				tmp_EndVotemap = true;
    				tmp_DisplayVotemap = false;
    			}
    			if ((tmp_DisplayVotemap) || (tmp_EndVotemap)) {
    				// get player votes
    				if (plugin.Data.issetObject("il_votemapvotes")) { votemapVotes = (Dictionary<String,int>)plugin.Data.getObject("il_votemapvotes"); }
    				tmp_voteCounter.Clear();
    				
    				for (int i = 0; i <= votemapList.Count; i++) {
    					tmp_voteCounter.Add(i, 0);
    				}
    
    				// count player votes
    				votemapWinnerMap = 0;
    				votemapWinnerVotes = 0;
    				foreach (KeyValuePair<string, int> pair in votemapVotes) {
    					if (plugin.GetReservedSlotsList().Contains(pair.Key)) {
    						// count vip vote
    						tmp_voteCounter[pair.Value] = tmp_voteCounter[pair.Value] + VipVoteCount;
    					} else {
    						// count normal player vote
    						tmp_voteCounter[pair.Value]++;
    					}
    					if (tmp_voteCounter[pair.Value] > votemapWinnerVotes) {
    						// most voted map
    						votemapWinnerVotes = tmp_voteCounter[pair.Value];
    						votemapWinnerMap = pair.Value;
    					}
    				}
    			}
    			if (tmp_DisplayVotemap) {
    				// display voting
    				tmp_DisplayVotemap = false;
    				plugin.PRoConChat("####   Vote Next Map Now!   ####");
    				plugin.SendGlobalMessage("####   Vote Next Map Now!   ####");
    				for (int i = 0; i < votemapList.Count; i++) {
    					tmp_MapName = "/" + (i + 1).ToString() + " " + plugin.FriendlyMapName(server.MapFileNameRotation[votemapList[i]]) + ((tmp_voteCounter[i] > 0) ? " (" + tmp_voteCounter[i] + ")" : "");
    					i++;
    					if (i < votemapList.Count) { tmp_MapName = tmp_MapName + "     /" + (i + 1).ToString() + " " + plugin.FriendlyMapName(server.MapFileNameRotation[votemapList[i]]) + ((tmp_voteCounter[i] > 0) ? " (" + tmp_voteCounter[i] + ")" : ""); }
    					plugin.PRoConChat(tmp_MapName.Replace("Operation ", "").Replace(" 2014", ""));
    					plugin.SendGlobalMessage(tmp_MapName.Replace("Operation ", "").Replace(" 2014", ""));
    				}
    				plugin.PRoConChat("Type: /1, /2, ... in chat to vote for the next map!");
    				plugin.SendGlobalMessage("Type: /1, /2, ... in chat to vote for the next map!");
    			}
    			if (tmp_EndVotemap) {
    				// stop voting, set next map PRoConChat
    				plugin.PRoConChat("NEXT MAP: " + plugin.FriendlyMapName(server.MapFileNameRotation[votemapList[votemapWinnerMap]]) + " has won with " + votemapWinnerVotes.ToString() + " votes.");
    				plugin.SendGlobalMessage("NEXT MAP: " + plugin.FriendlyMapName(server.MapFileNameRotation[votemapList[votemapWinnerMap]]) + " has won with " + votemapWinnerVotes.ToString() + " votes.");plugin.ConsoleWrite("NEXT MAP: " + plugin.FriendlyMapName(server.MapFileNameRotation[votemapList[votemapWinnerMap]]) + " has won with " + votemapWinnerVotes.ToString() + " votes.");
    				plugin.ConsoleWrite("NEXT MAP: " + plugin.FriendlyMapName(server.MapFileNameRotation[votemapList[votemapWinnerMap]]) + " has won with " + votemapWinnerVotes.ToString() + " votes.");
    				if (plugin.Data.issetObject("il_votemapvotes")) { plugin.Data.unsetObject("il_votemapvotes"); }
    				if (plugin.Data.issetObject("il_votemaplist")) { plugin.Data.unsetObject("il_votemaplist"); }
    				plugin.ServerCommand("mapList.setNextMapIndex", (votemapList[votemapWinnerMap]).ToString());
    				return;
    			}
    		}
    	} catch (Exception e) {
    		plugin.ConsoleWrite(e.ToString());
    	}
    }));
    il_votemap.IsBackground = true;
    il_votemap.Name = "il_votemap";
    il_votemap.Start();

    Code#2
    Code:
    //////////////////////////////
    // Votemap on round over part 2-2
    //////////////////////////////
    // IL SETTINGS:   limit_evaluation: OnAnyChat   ;   first_check: Code   ;   limit_action: none
    
    
    // SETTINGS
    
    int VotemapRememberAfterChatSpams = 5;    // CUSTOMIZE: display voting option again after number of chat spam messages
    
    // SETTINGS - END
    
    
    Dictionary<string, int> votemapVotes = new Dictionary<string, int>();
    List<int> votemapList = new List<int>();
    string VotemapStartTime = DateTime.UtcNow.AddMinutes(-5).ToString();
    int chatspammer = 0;
    
    // check if votmap voting is active
    if ((plugin.Data.issetObject("il_votemaplist")) && (plugin.Data.issetString("il_votemapstarttime"))) {
    	votemapList = (List<int>)plugin.Data.getObject("il_votemaplist");
    	VotemapStartTime = plugin.Data.getString("il_votemapstarttime");
    	if (votemapList.Count <= 0) { return false; }
    	if (((DateTime.UtcNow - DateTime.Parse(VotemapStartTime)).TotalSeconds) > 100) { return false; }
    } else {
    	return false;
    }
    
    // check chat
    if (Regex.Match(player.LastChat, @"^/?[0-9]$", RegexOptions.IgnoreCase).Success) {
    	int tmp_pvote = 0;
    	int.TryParse(player.LastChat.Replace("/",""), out tmp_pvote);
    	if ((tmp_pvote > 0) && (tmp_pvote <= 10)) {
    		// load player voting list
    		if (plugin.Data.issetObject("il_votemapvotes")) { votemapVotes = (Dictionary<String,int>)plugin.Data.getObject("il_votemapvotes"); }
    		if (tmp_pvote <= votemapList.Count) {
    			if (votemapVotes.ContainsKey(player.Name)) {
    				plugin.PRoConChat("(Psay " + player.Name + ") " + player.Name + " you changed your voted to " + plugin.FriendlyMapName(server.MapFileNameRotation[votemapList[tmp_pvote]]));
    				plugin.SendPlayerMessage(player.Name, player.Name + " you changed your voted to " + plugin.FriendlyMapName(server.MapFileNameRotation[votemapList[tmp_pvote]]));
    				votemapVotes[player.Name] = tmp_pvote - 1;
    			} else {
    				plugin.PRoConChat("(Psay " + player.Name + ") " + player.Name + " you voted for " + plugin.FriendlyMapName(server.MapFileNameRotation[votemapList[tmp_pvote]]));
    				plugin.SendPlayerMessage(player.Name, player.Name + " you voted for " + plugin.FriendlyMapName(server.MapFileNameRotation[votemapList[tmp_pvote]]));
    				votemapVotes.Add(player.Name, tmp_pvote - 1);
    			}
    			plugin.Data.setObject("il_votemapvotes", votemapVotes);
    		} else {
    			plugin.PRoConChat("(Psay " + player.Name + ") " + player.Name + " your vote was not recognised. Try again.");
    			plugin.SendPlayerMessage(player.Name, player.Name + "your vote was not recognised. Try again.");
    		}
    	}
    } else if (!player.LastChat.StartsWith("/")) {
    	// check chat spam
    	if (plugin.Data.issetInt("il_chatspam")) { chatspammer = plugin.Data.getInt("il_chatspam"); }
    	chatspammer++;
    	if (chatspammer >= VotemapRememberAfterChatSpams) {
    		// display votemap again
    		chatspammer = 0;
    		plugin.Data.setBool("il_votemap_reminder", true);
    	}
    	plugin.Data.setInt("il_chatspam", chatspammer);
    }
    Last edited by maxdralle; 26-05-2018 at 13:11.
    Developer of the VIP Slot Manager Plugin

  10. #10
    thank you very much
    This is exactly what I have wanted for a long time
    Last edited by tomopcver; 27-05-2018 at 14:51.

 

 

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •