Jump to content

Insane Limits V0.9/R6: Vote to nuke camping/base raping team, or !surrender (CQ/Rush)


ImportBot

Recommended Posts

Originally Posted by HexaCanon*:

 

NOTE: due to the R24 queue problem and "ghost players", the calculation of needed votes might be understated. That is, if you see 60 players total, 30 on each team with a 50% required vote, the needed votes should be 15, but it might be a lower number, like 14 or 12, due to some of the 60 players being ghost players. PRoCon/Insane Limits doesn't know about those players, so it may think the total number of players is lower than it actually is.

 

Nothing I can do about that, we just have to wait for this to get fixed in BF3.

it is good to increase the % required to 55 or 60 to be safer.

 

 

 

Edit : vote counter is still not working even after update. (i tried it once and it immediately ended the round without start a vote [ i know that no1 else used the command i was on from the start of the round])

* Restored post. It could be that the author is no longer active.
Link to comment
  • Replies 306
  • Created
  • Last Reply

Originally Posted by Tomgun*:

 

ok I have a question, does the game give info on the ticket loss rate? if so could this not be set up and automatically announce when the tickets are dropping say when all 3 flags are capped hence possible base rape? just an idea.. otherwise interesting way of combating the baserape on metro (its a bitch when it happens)

* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

Edit : vote counter is still not working even after update. (i tried it once and it immediately ended the round without start a vote [ i know that no1 else used the command i was on from the start of the round])

I need your help to find the new problem. Please set your debug level in Insane Limits Plugin Settings to 3, if you haven't already. Run the test again and then post the plugin.log. Or, if your level is already set to 3, just find the plugin.log in your Logs folder for the day you did the test and post the whole log as an attachment. That's why I added the level 3 debugging, so I can analyze any new problems. I need to see what the log says before I can figure out what, if anything, is not working.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

ok I have a question, does the game give info on the ticket loss rate? if so could this not be set up and automatically announce when the tickets are dropping say when all 3 flags are capped hence possible base rape? just an idea.. otherwise interesting way of combating the baserape on metro (its a bitch when it happens)

It is almost possible to measure the rate of ticket loss. Unfortunately, Insane Limits can only check the ticket count once every 30 seconds. That's probably too slow. It would have to check once every 5 seconds or so to really make a reliable decision based on ticket loss rate. Plus, we'd have to run a bunch of trials to decide what the "normal" rate is for every map/size/number of players combination.

 

Good idea, but probably not feasible.

* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by HexaCanon*:

 

I need your help to find the new problem. Please set your debug level in Insane Limits Plugin Settings to 3, if you haven't already. Run the test again and then post the plugin.log. Or, if your level is already set to 3, just find the plugin.log in your Logs folder for the day you did the test and post the whole log as an attachment. That's why I added the level 3 debugging, so I can analyze any new problems. I need to see what the log says before I can figure out what, if anything, is not working.

it is around [07:25:34]

 

Code:

07:24:23] [Insane Limits] STV_DW activated incremental Check # 1 in Limit # 14 in-game hack preventer
[07:24:23] [Insane Limits] STV_DW did not activate incremental Check # 2 in Limit # 14 in-game hack preventer
[07:24:30] [Insane Limits] STV_DW activated incremental Check # 1 in Limit # 14 in-game hack preventer
[07:24:30] [Insane Limits] STV_DW did not activate incremental Check # 2 in Limit # 14 in-game hack preventer
[07:24:45] [Insane Limits] Queueing ComradE_AlekS for stats fetching
[07:24:45] [Insane Limits] Thread(fetch): awake!, will signal enforcer thread wait
[07:24:45] [Insane Limits] Thread(fetch): getting battlelog stats for ComradE_AlekS, no more players in queue
[07:24:45] [Insane Limits] Thread(fetch): Web-Stats for ComradE_AlekS:
[07:24:45] [Insane Limits] Thread(fetch):                       Kdr(1.2)                     Kpm(0.68)                   Spm(283.36)                      Rank(47)
[07:24:45] [Insane Limits] Thread(fetch):                   Time(470725)                     Wins(311)                   Kills(5354)                Score(2223045)
[07:24:45] [Insane Limits] Thread(fetch):                  Skill(313.85)                  Deaths(4466)                   Losses(274)                  Repairs(214)
[07:24:45] [Insane Limits] Thread(fetch):                   Revives(292)               Accuracy(12.47)              ReconTime(51789)              ScoreTeam(49939)
[07:24:45] [Insane Limits] Thread(fetch):                Ressuplies(311)           AssaultTime(120716)            QuitPercent(28.57)          ScoreCombat(1222545)
[07:24:45] [Insane Limits] Thread(fetch):             SupportTime(27178)              VehicleTime(NaN)           EngineerTime(68881)           ReconPercent(19.28)
[07:24:45] [Insane Limits] Thread(fetch):           ScoreVehicle(434546)         AssaultPercent(44.95)         ScoreObjective(62500)         SupportPercent(10.12)
[07:24:45] [Insane Limits] Thread(fetch):            VehiclePercent(NaN)          VehiclesKilled(1178)        EngineerPercent(25.65)           KillStreakBonus(30)
[07:24:45] [Insane Limits] Thread(fetch): done fetching stats, 1 player in new batch, waiting for players list now
[07:24:48] [Insane Limits] Thread(fetch): Queue exhausted, will insert now a batch of 1 player
[07:24:50] [Insane Limits] Thread(fetch): Evaluating Limit #10 - OnJoin, for ComradE_AlekS
[07:24:51] [Insane Limits] Thread(fetch): Evaluating Limit #17 - OnJoin, for ComradE_AlekS
[07:24:51] [Insane Limits] Thread(fetch): no new players, will wait
[07:25:34] [Insane Limits] [VoteNext] [Xtra]HexaCanon voted to end the round
[07:25:34] [Insane Limits] [VoteNext] vote timer started
[07:25:34] [Insane Limits] [VoteNext] Vote succeeded: round ends now, US team wins!
[07:25:34] [Insane Limits] Thread(say): sending 1 queued message ...
[07:25:34] [Insane Limits] Original command: !surrender
[07:25:34] [Insane Limits] Thread(say): waiting for say message ...
[07:25:40] [Insane Limits] STV_DW activated incremental Check # 1 in Limit # 14 in-game hack preventer
[07:25:40] [Insane Limits] STV_DW did not activate incremental Check # 2 in Limit # 14 in-game hack preventer
[07:25:44] AdaptiveTicketCount: INFO -> Round ended.
[07:26:14] [Insane Limits] Thread(settings): 16 limits and 1 list loaded from Plugins\BF3\InsaneLimits_173.199.75.113_25200.conf
[07:26:14] [Insane Limits] Thread(settings): sleeping for 120 seconds, before next iteration
[07:26:42] AdaptiveTicketCount: WORK -> 50 players; Ticket count: 429% (1501/1501 actual tickets)
[07:26:54] [Insane Limits] Queueing DOMOVOY-62 for stats fetching
[07:26:54] [Insane Limits] Thread(fetch): awake!, will signal enforcer thread wait
[07:26:54] [Insane Limits] Thread(fetch): getting battlelog stats for DOMOVOY-62, no more players in queue
[07:26:54] [Insane Limits] Thread(fetch): Web-Stats for [RMC]DOMOVOY-62:
[07:26:54] [Insane Limits] Thread(fetch):                      Kdr(1.98)                     Kpm(0.98)                   Spm(420.84)                      Rank(94)
[07:26:54] [Insane Limits] Thread(fetch):                  Time(1850580)                    Wins(1525)                  Kills(30087)               Score(12980113)
[07:26:54] [Insane Limits] Thread(fetch):                  Skill(430.72)                 Deaths(15176)                   Losses(749)                  Repairs(948)
[07:26:54] [Insane Limits] Thread(fetch):                   Revives(730)               Accuracy(11.89)             ReconTime(303331)             ScoreTeam(211476)
[07:26:54] [Insane Limits] Thread(fetch):               Ressuplies(8663)           AssaultTime(150719)            QuitPercent(13.57)          ScoreCombat(5887213)
[07:26:54] [Insane Limits] Thread(fetch):            SupportTime(541332)              VehicleTime(NaN)          EngineerTime(346296)           ReconPercent(22.61)
[07:26:54] [Insane Limits] Thread(fetch):          ScoreVehicle(1467340)         AssaultPercent(11.23)        ScoreObjective(480125)         SupportPercent(40.35)
[07:26:54] [Insane Limits] Thread(fetch):            VehiclePercent(NaN)          VehiclesKilled(3093)        EngineerPercent(25.81)           KillStreakBonus(41)
[07:26:54] [Insane Limits] Thread(fetch): done fetching stats, 1 player in new batch, waiting for players list now
[07:26:55] [Insane Limits] round start detected
[07:26:58] [Insane Limits] Thread(fetch): Queue exhausted, will insert now a batch of 1 player
[07:27:00] [Insane Limits] Thread(fetch): Evaluating Limit #10 - OnJoin, for DOMOVOY-62
[07:27:01] [Insane Limits] Thread(fetch): Evaluating Limit #17 - OnJoin, for DOMOVOY-62
[07:27:01] [Insane Limits] Thread(fetch): no new players, will wait
[07:27:21] [Insane Limits] Queueing Taydex for stats fetching
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

it is around [07:25:34]

Are you sure you installed the new version from post #10? None of the debug logging is showing in your log.

 

It should say something like this:

 

Code:

[07:25:34] [Insane Limits] [VoteNext] [Xtra]HexaCanon voted to end the round
[07:25:34] [Insane Limits] [VoteNext] vote timer started
[b][07:25:34] [Insane Limits] [VoteNext] loser votes = 1 of 25;
[07:25:34] [Insane Limits] [VoteNext] winner votes = 0 of 25
[07:25:34] [Insane Limits] [VoteNext] needed votes = 13[/b]
Maybe you installed it on one of your servers, but played on a different one?
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by HexaCanon*:

 

Are you sure you installed the new version from post #10? None of the debug logging is showing in your log.

 

It should say something like this:

 

Code:

[07:25:34] [Insane Limits] [VoteNext] [Xtra]HexaCanon voted to end the round
[07:25:34] [Insane Limits] [VoteNext] vote timer started
[b][07:25:34] [Insane Limits] [VoteNext] loser votes = 1 of 25;
[07:25:34] [Insane Limits] [VoteNext] winner votes = 0 of 25
[07:25:34] [Insane Limits] [VoteNext] needed votes = 13[/b]
Maybe you installed it on one of your servers, but played on a different one?
i do have R5, but i think it might be not compiled, i will test again.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by HexaCanon*:

 

Are you sure you installed the new version from post #10? None of the debug logging is showing in your log.

 

It should say something like this:

 

Code:

[07:25:34] [Insane Limits] [VoteNext] [Xtra]HexaCanon voted to end the round
[07:25:34] [Insane Limits] [VoteNext] vote timer started
[b][07:25:34] [Insane Limits] [VoteNext] loser votes = 1 of 25;
[07:25:34] [Insane Limits] [VoteNext] winner votes = 0 of 25
[07:25:34] [Insane Limits] [VoteNext] needed votes = 13[/b]
Maybe you installed it on one of your servers, but played on a different one?
i do have R5, but i think it might be not compiled, i will test again.

 

Edit : yes they were not compiled

 

shows

Code:

[22:36:49 01] [Insane Limits] [VoteNext] [BFNS]mickael002 voted to end the round
[22:36:49 01] [Insane Limits] [VoteNext] vote timer started
[22:36:49 01] [Insane Limits] [VoteNext] loser votes = 1 of 12
[22:36:49 01] [Insane Limits] [VoteNext] winner votes = 0 of 16
[22:36:49 01] [Insane Limits] [VoteNext] needed votes = 7
[22:36:49 01] [Insane Limits] [VoteNext] 6 US votes needed to end round with 5 mins left!
i just increased percentage to 55, maybe i will increase it later because 7 votes are not enough to count for half 32 man team.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

i do have R5, but i think it might be not compiled, i will test again.

 

Edit : yes they were not compiled

 

shows

Code:

[22:36:49 01] [Insane Limits] [VoteNext] [BFNS]mickael002 voted to end the round
[22:36:49 01] [Insane Limits] [VoteNext] vote timer started
[22:36:49 01] [Insane Limits] [VoteNext] loser votes = 1 of 12
[22:36:49 01] [Insane Limits] [VoteNext] winner votes = 0 of 16
[22:36:49 01] [Insane Limits] [VoteNext] needed votes = 7
[22:36:49 01] [Insane Limits] [VoteNext] 6 US votes needed to end round with 5 mins left!
i just increased percentage to 55, maybe i will increase it later because 7 votes are not enough to count for half 32 man team.
So it is working now? Didn't end the round with one vote?

 

The 7 is for a 12 man team, just like it says. For a 32 man team, the needed vote would be 17 if percent is set to 50.

* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by HexaCanon*:

 

So it is working now? Didn't end the round with one vote?

 

The 7 is for a 12 man team, just like it says. For a 32 man team, the needed vote would be 17 if percent is set to 50.

when i tested it, it was full 64 man server. it was not empty.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

when i tested it, it was full 64 man server. it was not empty.

But look at the debug info. PRoCon/Insane Limits thinks that you only had 12 people on one team and 16 on the other team. If you are saying the server actually had a full 64 players, that again is the R25 bug.

 

In other words, this limit and Insane Limits is working correctly. It's the R25 bug that is making things not work as expected.

 

The R26 fix is coming on Wednesday. Try it again once you have restarted your server with R26 and let me know how it goes.

* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by HexaCanon*:

 

But look at the debug info. PRoCon/Insane Limits thinks that you only had 12 people on one team and 16 on the other team. If you are saying the server actually had a full 64 players, that again is the R25 bug.

 

In other words, this limit and Insane Limits is working correctly. It's the R25 bug that is making things not work as expected.

 

The R26 fix is coming on Wednesday. Try it again once you have restarted your server with R26 and let me know how it goes.

which is why i suggested increasing % from 50 to higher number, so that the plugin request more votes instead of half of the 12 players.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Hutchew*:

 

Papa, just started getting these errors on the nuke voter. Code is entered exactly as you posted in #1.

 

[07:32:24 80] [insane Limits] Thread(settings): Compiling Limit #1 - Nuke Vote - OnAnyChat

[07:32:24 86] [insane Limits] Thread(settings): ERROR: 3 errors compiling Code

[07:32:24 86] [insane Limits] Thread(settings): ERROR: (CS1002, line: 22, column: 71): ; expected

[07:32:24 86] [insane Limits] Thread(settings): ERROR: (CS0168, line: 51, column: 15): The variable 'e' is declared but never used

[07:32:24 86] [insane Limits] Thread(settings): ERROR: (CS0162, line: 197, column: 13): Unreachable code detected

 

Any ideas?

 

Thanks,

Hutchew

* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

Papa, just started getting these errors on the nuke voter. Code is entered exactly as you posted in #1.

 

[07:32:24 80] [insane Limits] Thread(settings): Compiling Limit #1 - Nuke Vote - OnAnyChat

[07:32:24 86] [insane Limits] Thread(settings): ERROR: 3 errors compiling Code

[07:32:24 86] [insane Limits] Thread(settings): ERROR: (CS1002, line: 22, column: 71): ; expected

[07:32:24 86] [insane Limits] Thread(settings): ERROR: (CS0168, line: 51, column: 15): The variable 'e' is declared but never used

[07:32:24 86] [insane Limits] Thread(settings): ERROR: (CS0162, line: 197, column: 13): Unreachable code detected

 

Any ideas?

 

Thanks,

Hutchew

Triple check everything. The error is saying it is not exactly as posted in #1. In particular, make sure you have first_check set to Expression and that is correctly set up. If you changed any of the CUSTOMIZE lines in second_check, make sure you have the ; (semi-colon) in the same place as the original.

 

If you are sure it is exactly as post #1, take a screen shot of your limit #1 section of plugin settings and post it. Make sure it's big enough for me to read all the text, but I don't need to see the code expanded -- that will come later, if necessary.

* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by dyn*:

 

We just launched a new server config and will be testing this out in the coming days. Hopefully this will ease the burden us admins have to bare. Will let you know how it works out. :smile:

 

thanks!

* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by HelloKitty*:

 

Very nice limit! I think to enable the !votecamp unlimited times per round, I only have to delete

Code:

/* Losing team only gets to try this vote once per round */
    server.RoundData.setBool(key, true);
twice in the code...

... but how to include a config-variable for "max votes per round" ?

* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

Very nice limit! I think to enable the !votecamp unlimited times per round, I only have to delete

Code:

/* Losing team only gets to try this vote once per round */
    server.RoundData.setBool(key, true);
twice in the code...

... but how to include a config-variable for "max votes per round" ?

That is the correct change, but I strongly advise against making it completely unlimited. That will make !votecamp too easy to abuse. It's basically handing the in-game @nuke command over to anyone who wants to use it, as long as they can get most of their team to go along with it. The fewer players on the server, the more likely this will be to happen. I could see the losing team nuking the winning team over and over again, until they are no longer the winning team!

 

A max votes per round is a better idea, but keep it a small number, like 2 or 3. Or zero if the number of players is less than 32 or something like that.

 

To make it a count, add this line of code at the top of the second_check:

 

Code:

int maxVotes = 2; // CUSTOMIZE: maximum number of times a losing team may vote
Then, find this code:

 

Code:

if (server.RoundData.issetBool(key)) {
	msg = "Your team already completed a vote camp this round!";
	ChatPlayer(player.Name);
	return false;
}
And change it to this:

 

Code:

int numVotes = 0;
if (server.RoundData.issetInt(key)) numVotes = server.RoundData.getInt(key);
if (numVotes >= maxVotes) {
	msg = "Your team can't do any more votes this round!";
	ChatPlayer(player.Name);
	return false;
}
Then find this code:

 

Code:

/* Losing team only gets to try this vote once per round */
	server.RoundData.setBool(key, true);
and change it to this:

 

Code:

/* Increment the count of votes for this team */
	server.RoundData.setInt(key, numVotes+1);
Then find this code:

 

Code:

/* Losing team only gets to do this once */

server.RoundData.setBool(key, true);
and change it to this:

 

Code:

/* Increment count of votes for this team */

server.RoundData.setInt(key, numVotes+1);
* Restored post. It could be that the author is no longer active.
Link to comment
  • 4 weeks later...

Originally Posted by superman50*:

 

What is the meaning of this sentence? I set up as you say, without success, may I ask the meaning of this sentence? _Thank you very much~

(RECOMMENDED: Inform your players about the vote system by adding scrolling/spambot chat, adding to your on-demand !rules command, or something similar)

* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

What is the meaning of this sentence? I set up as you say, without success, may I ask the meaning of this sentence? _Thank you very much~

(RECOMMENDED: Inform your players about the vote system by adding scrolling/spambot chat, adding to your on-demand !rules command, or something similar)

Tell your players about the voting system. Your players need to know about the plugin and the voting system to know what they have to type in to chat in order to cause a nuke. The sentence makes several suggestions, you may choose one or think of one yourself:

 

1) add Spambot messages. These are chat messages that are sent to all players automatically every few minutes.

 

2) some servers have rules that you can read by typing a command like !rules or @rules

 

3) you can tell them through your server status page or clan web page or whatever

* Restored post. It could be that the author is no longer active.
Link to comment
  • 2 weeks later...

Originally Posted by HexaCanon*:

 

i got this today (see screenshot), the counter went from 6 > 5 > 6 ...

 

image

there is no sync between !votenext and !surrender, the counter reports wrong numbers.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

there is no sync between !votenext and !surrender, the counter reports wrong numbers.

They do the same thing, just two different ways to type the same command. There is only one number.

 

However, the number can change if new people join or leave the team or switch teams. So 6 to 5 to 6 is possible.

* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by HexaCanon*:

 

They do the same thing, just two different ways to type the same command. There is only one number.

 

However, the number can change if new people join or leave the team or switch teams. So 6 to 5 to 6 is possible.

i do not think it was due to player team change, today 4 people typed a mix of !surrender and !vote next and the counter was stuck at 12 .. took a while for it to move to 10 and it was stuck there again.

 

Code:

/* VERSION 0.8/R5 - surrender */
double percent = 50; // CUSTOMIZE: of losing team that has to vote
double timeout = 20.0; // CUSTOMIZE: number of minutes before vote times out
int minPlayers = 12; // CUSTOMIZE: minimum players to enable vote
double minTicketPercent = 10; // CUSTOMIZE: minimum ticket percentage remaining in the round
double minTicketGap = 50; // CUSTOMIZE: minimum ticket gap between winning and losing teams

String kNext = "votenext";
String kOncePrefix = "votenext_once_";
String kVoteTime = "votenext_time";

int level = 2;

try {
	level = Convert.ToInt32(plugin.getPluginVarValue("debug_level"));
} catch (Exception e) {}

String msg = "empty";

Action<String> ChatPlayer = delegate(String name) {
	// closure bound to String msg
	plugin.ServerCommand("admin.say", msg, "player", name);
	plugin.PRoConChat("ADMIN to " + name + " > *** " + msg);
};


/* Parse the command */

Match nextMatch = Regex.Match(player.LastChat, @"^\s*!(_:surrender|vote\s*next)", RegexOptions.IgnoreCase);

/* Bail out if not a proper vote */

if (!nextMatch.Success) return false;

/* Bail out if round about to end */

if (server.RemainTicketsPercent(1) < minTicketPercent || server.RemainTicketsPercent(2) < minTicketPercent) {
	msg = "Round too close to ending to hold a vote!";
	ChatPlayer(player.Name);
	return false;
}

/* Bail out if ticket ratio isn't large enough */

double t1 = server.RemainTickets(1);
double t2 = server.RemainTickets(2);
if (Math.Abs(t1 - t2) < minTicketGap) {
	msg = "Ticket counts too close to hold a vote!";
	ChatPlayer(player.Name);
	return false;
}

/* Determine losing team by tickets */

int losing = (t1 < t2) _ 1 : 2;

/* Bail out if not enough players to enable vote */

if (server.PlayerCount < minPlayers) {
	msg = "Not enough players to hold a vote!";
	ChatPlayer(player.Name);
	return false;
}

/* Count the vote in the voter's dictionary */
/* Votes are kept with the voter */
/* If the voter leaves, his votes are not counted */

if (!player.RoundData.issetBool(kNext)) player.RoundData.setBool(kNext, true);

if (level >= 2) plugin.ConsoleWrite("^b[VoteNext]^n " + player.FullName + " voted to end the round");

msg = "You voted to end this round and start the next round!";
ChatPlayer(player.Name);

/* Tally the votes */

int votes = 0;
List<PlayerInfoInterface> losers = (losing == 1) _ team1.players : team2.players;
List<PlayerInfoInterface> winners = (losing == 1) _ team2.players : team1.players;

/* Bail out if too much time has past */

if (!server.RoundData.issetObject(kVoteTime)) {
	server.RoundData.setObject(kVoteTime, DateTime.Now);
	if (level >= 2) plugin.ConsoleWrite("^b[VoteNext]^n vote timer started");
}
DateTime started = (DateTime)server.RoundData.getObject(kVoteTime);
TimeSpan since = DateTime.Now.Subtract(started);

if (since.TotalMinutes > timeout) {
	msg = "The voting time has expired, the vote is cancelled!";
	plugin.SendGlobalMessage(msg);
	plugin.ServerCommand("admin.yell", msg);
	if (level >= 2) plugin.ConsoleWrite("^b[VoteNext]^n vote timeout expired");
	foreach (PlayerInfoInterface can in losers) {
		// Erase the vote
		if (can.RoundData.issetBool(kNext)) can.RoundData.unsetBool(kNext);
	}
	foreach (PlayerInfoInterface can in winners) {
		// Erase the vote
		if (can.RoundData.issetBool(kNext)) can.RoundData.unsetBool(kNext);
	}
	server.RoundData.unsetObject(kVoteTime);

	return false;
}

/* Otherwise tally */

foreach(PlayerInfoInterface p in losers) {
    if (p.RoundData.issetBool(kNext)) votes++;
}
if (level >= 3) plugin.ConsoleWrite("^b[VoteNext]^n loser votes = " + votes + " of " + losers.Count);

/* Votes on the winning side are counted as long as they are less than the votes on the losing side */

int losingVotes = votes;
int winningVotes = 0;
foreach(PlayerInfoInterface p in winners) {
    if (p.RoundData.issetBool(kNext)) {
        winningVotes++;
        if (winningVotes >= losingVotes) break;
        ++votes;
    }
}

if (level >= 3) plugin.ConsoleWrite("^b[VoteNext]^n winner votes = " + winningVotes + " of " + winners.Count);

int needed = Convert.ToInt32(Math.Ceiling((double) losers.Count * (percent/100.0)));
int remain = needed - votes;

if (level >= 3) plugin.ConsoleWrite("^b[VoteNext]^n needed votes = " + needed);

String voters = (losing == 1) _ "US" : "RU";
if (remain > 0) {
	msg = remain + " " + voters + " !surrender/!votenext votes needed to end round with " + Convert.ToInt32(Math.Ceiling(timeout - since.TotalMinutes)) + " mins left!";
	plugin.SendGlobalMessage(msg);
	plugin.ServerCommand("admin.yell", msg, "8");
	if (level >= 2) plugin.ConsoleWrite("^b[VoteNext]^n " + msg);
	return false;
}

/* End the round */

String wteam = (losing == 1) _ "RU" : "US";

msg = "Vote succeeded: round ends now, " + wteam + " team wins!";
plugin.SendGlobalMessage(msg);
plugin.ServerCommand("admin.yell", msg, "10");
if (level >= 2) plugin.ConsoleWrite("^b[VoteNext]^n " + msg);

String wid = (losing == 1) _ "2" : "1";

ThreadStart roundEnder = delegate {
    Thread.Sleep(10*1000);
    plugin.ServerCommand("mapList.endRound", wid);
};

Thread enderThread = new Thread(roundEnder);
enderThread.Start();
Thread.Sleep(10);

return false;
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by HexaCanon*:

 

Can you post the console.log? If you run Insane Limits with debug set to 3, I can see exactly who votes and how the counts change.

cleaned it as much as possible, my settings are 50% and 20 minutes (see above).

 

Code:

[17:01:15] [Insane Limits] [VoteNext] Scrubdown voted to end the round
[17:01:15] [Insane Limits] [VoteNext] vote timer started
[17:01:15] [Insane Limits] [VoteNext] loser votes = 1 of 30
[17:01:15] [Insane Limits] [VoteNext] winner votes = 0 of 31
[17:01:15] [Insane Limits] [VoteNext] needed votes = 15
[17:01:15] [Insane Limits] [VoteNext] 14 RU !surrender/!votenext votes needed to end round with 20 mins left!
[17:01:15] [Insane Limits] Original command: !Surrender
[17:03:30] [Insane Limits] [VoteNext] xG-M3NZQR voted to end the round
[17:03:30] [Insane Limits] [VoteNext] loser votes = 2 of 30
[17:03:30] [Insane Limits] [VoteNext] winner votes = 0 of 31
[17:03:30] [Insane Limits] [VoteNext] needed votes = 15
[17:03:30] [Insane Limits] Thread(say): sending 1 queued message ...
[17:03:30] [Insane Limits] [VoteNext] 13 RU !surrender/!votenext votes needed to end round with 18 mins left!
[17:03:30] [Insane Limits] Original command: !surrender
[17:11:18] [Insane Limits] [VoteNext] Jammer8888 voted to end the round
[17:11:18] [Insane Limits] [VoteNext] loser votes = 1 of 29
[17:11:18] [Insane Limits] [VoteNext] winner votes = 0 of 30
[17:11:18] [Insane Limits] [VoteNext] needed votes = 15
[17:11:18] [Insane Limits] Thread(say): sending 1 queued message ...
[17:11:18] [Insane Limits] [VoteNext] 14 RU !surrender/!votenext votes needed to end round with 10 mins left!
[17:11:18] [Insane Limits] Original command: !surrender
[17:11:18] [Insane Limits] Thread(say): waiting for say message ...
[17:11:18] [Insane Limits] [VoteNext] PitbossSWE voted to end the round
[17:11:18] [Insane Limits] [VoteNext] loser votes = 1 of 29
[17:11:18] [Insane Limits] [VoteNext] winner votes = 1 of 30
[17:11:18] [Insane Limits] [VoteNext] needed votes = 15
[17:11:18] [Insane Limits] Thread(say): sending 1 queued message ...
[17:11:18] [Insane Limits] [VoteNext] 14 RU !surrender/!votenext votes needed to end round with 10 mins left!
[17:11:18] [Insane Limits] Original command: !surrender
[17:11:19] [Insane Limits] Thread(say): waiting for say message ...
[17:11:34] [Insane Limits] [VoteNext] Kavaar voted to end the round
[17:11:34] [Insane Limits] [VoteNext] loser votes = 2 of 30
[17:11:34] [Insane Limits] [VoteNext] winner votes = 1 of 30
[17:11:34] [Insane Limits] [VoteNext] needed votes = 15
[17:11:34] [Insane Limits] Thread(say): sending 1 queued message ...
[17:11:34] [Insane Limits] [VoteNext] 12 RU !surrender/!votenext votes needed to end round with 10 mins left!
[17:11:34] [Insane Limits] Original command: !surrender
[17:11:34] [Insane Limits] Thread(say): waiting for say message ...
[17:11:45] [Insane Limits] [VoteNext] Salle78 voted to end the round
[17:11:45] [Insane Limits] [VoteNext] loser votes = 3 of 30
[17:11:45] [Insane Limits] [VoteNext] winner votes = 1 of 30
[17:11:45] [Insane Limits] [VoteNext] needed votes = 15
[17:11:45] [Insane Limits] Thread(say): sending 1 queued message ...
[17:11:45] [Insane Limits] [VoteNext] 11 RU !surrender/!votenext votes needed to end round with 10 mins left!
[17:11:45] [Insane Limits] Original command: !surrender
[17:11:53] [Insane Limits] [VoteNext] PitbossSWE voted to end the round
[17:11:53] [Insane Limits] [VoteNext] loser votes = 3 of 30
[17:11:53] [Insane Limits] [VoteNext] winner votes = 1 of 31
[17:11:53] [Insane Limits] [VoteNext] needed votes = 15
[17:11:53] [Insane Limits] Thread(say): sending 1 queued message ...
[17:11:53] [Insane Limits] [VoteNext] 11 RU !surrender/!votenext votes needed to end round with 10 mins left!
[17:11:53] [Insane Limits] Original command: !surrender
[17:11:53] [Insane Limits] Thread(say): waiting for say message ...
[17:11:54] [Insane Limits] [VoteNext] l_c0sm1c_l voted to end the round
[17:11:54] [Insane Limits] [VoteNext] loser votes = 3 of 30
[17:11:54] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:11:54] [Insane Limits] [VoteNext] needed votes = 15
[17:11:54] [Insane Limits] Thread(say): sending 1 queued message ...
[17:11:54] [Insane Limits] [VoteNext] 10 RU !surrender/!votenext votes needed to end round with 10 mins left!
[17:11:54] [Insane Limits] Original command: !votenext
[17:12:05] [Insane Limits] [VoteNext] Silverdude08 voted to end the round
[17:12:05] [Insane Limits] [VoteNext] loser votes = 4 of 30
[17:12:05] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:12:05] [Insane Limits] [VoteNext] needed votes = 15
[17:12:05] [Insane Limits] Thread(say): sending 1 queued message ...
[17:12:05] [Insane Limits] [VoteNext] 9 RU !surrender/!votenext votes needed to end round with 10 mins left!
[17:12:05] [Insane Limits] Original command: !surrender
[17:12:05] [Insane Limits] Thread(say): waiting for say message ...
[17:12:10] [Insane Limits] [VoteNext] NilsOllum voted to end the round
[17:12:10] [Insane Limits] [VoteNext] loser votes = 5 of 30
[17:12:10] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:12:10] [Insane Limits] [VoteNext] needed votes = 15
[17:12:10] [Insane Limits] Thread(say): sending 1 queued message ...
[17:12:10] [Insane Limits] [VoteNext] 8 RU !surrender/!votenext votes needed to end round with 10 mins left!
[17:12:10] [Insane Limits] Original command: !surrender
[17:12:10] [Insane Limits] Thread(say): waiting for say message ...
[17:12:18] [Insane Limits] [VoteNext] 4wesome_N00b voted to end the round
[17:12:18] [Insane Limits] [VoteNext] loser votes = 6 of 31
[17:12:18] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:12:18] [Insane Limits] [VoteNext] needed votes = 16
[17:12:18] [Insane Limits] Thread(say): sending 1 queued message ...
[17:12:18] [Insane Limits] [VoteNext] 8 RU !surrender/!votenext votes needed to end round with 9 mins left!
[17:12:18] [Insane Limits] Original command: !surrender
[17:12:18] [Insane Limits] Thread(say): waiting for say message ...
[17:12:18] [Insane Limits] [VoteNext] PitbossSWE voted to end the round
[17:12:18] [Insane Limits] [VoteNext] loser votes = 6 of 31
[17:12:18] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:12:18] [Insane Limits] [VoteNext] needed votes = 16
[17:12:18] [Insane Limits] Thread(say): sending 1 queued message ...
[17:12:18] [Insane Limits] [VoteNext] 8 RU !surrender/!votenext votes needed to end round with 9 mins left!
[17:12:18] [Insane Limits] Original command: !surrender
[17:12:18] [Insane Limits] Thread(say): waiting for say message ...
[17:12:22] [Insane Limits] [VoteNext] Zitterpartie voted to end the round
[17:12:22] [Insane Limits] [VoteNext] loser votes = 7 of 31
[17:12:22] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:12:22] [Insane Limits] [VoteNext] needed votes = 16
[17:12:22] [Insane Limits] Thread(say): sending 1 queued message ...
[17:12:22] [Insane Limits] [VoteNext] 7 RU !surrender/!votenext votes needed to end round with 9 mins left!
[17:12:22] [Insane Limits] Original command: !surrender
[17:12:22] [Insane Limits] Thread(say): waiting for say message ...
[17:12:24] [Insane Limits] [VoteNext] pigsick824 voted to end the round
[17:12:24] [Insane Limits] [VoteNext] loser votes = 8 of 31
[17:12:24] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:12:24] [Insane Limits] [VoteNext] needed votes = 16
[17:12:24] [Insane Limits] Thread(say): sending 1 queued message ...
[17:12:24] [Insane Limits] [VoteNext] 6 RU !surrender/!votenext votes needed to end round with 9 mins left!
[17:12:24] [Insane Limits] Original command: !surrender
[17:12:24] [Insane Limits] Thread(say): waiting for say message ...
[17:12:27] [Insane Limits] [VoteNext] Jammer8888 voted to end the round
[17:12:27] [Insane Limits] [VoteNext] loser votes = 8 of 31
[17:12:27] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:12:27] [Insane Limits] [VoteNext] needed votes = 16
[17:12:27] [Insane Limits] Thread(say): sending 1 queued message ...
[17:12:27] [Insane Limits] [VoteNext] 6 RU !surrender/!votenext votes needed to end round with 9 mins left!
[17:12:27] [Insane Limits] Original command: !surrender
[17:12:27] [Insane Limits] Thread(say): waiting for say message ...
[17:12:34] [Insane Limits] [VoteNext] Salle78 voted to end the round
[17:12:34] [Insane Limits] [VoteNext] loser votes = 8 of 31
[17:12:34] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:12:34] [Insane Limits] [VoteNext] needed votes = 16
[17:12:34] [Insane Limits] Thread(say): sending 1 queued message ...
[17:12:34] [Insane Limits] [VoteNext] 6 RU !surrender/!votenext votes needed to end round with 9 mins left!
[17:12:35] [Insane Limits] Original command: !surrender
[17:12:35] [Insane Limits] Thread(say): waiting for say message ...
[17:12:35] [Insane Limits] [VoteNext] PitbossSWE voted to end the round
[17:12:35] [Insane Limits] [VoteNext] loser votes = 8 of 31
[17:12:35] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:12:35] [Insane Limits] [VoteNext] needed votes = 16
[17:12:35] [Insane Limits] Thread(say): sending 1 queued message ...
[17:12:35] [Insane Limits] [VoteNext] 6 RU !surrender/!votenext votes needed to end round with 9 mins left!
[17:12:35] [Insane Limits] Original command: !surrender
[17:12:35] [Insane Limits] Thread(say): waiting for say message ...
[17:12:40] [Insane Limits] [VoteNext] [FuT]attackAR voted to end the round
[17:12:40] [Insane Limits] [VoteNext] loser votes = 9 of 31
[17:12:40] [Insane Limits] [VoteNext] winner votes = 2 of 32
[17:12:40] [Insane Limits] [VoteNext] needed votes = 16
[17:12:40] [Insane Limits] Thread(say): sending 1 queued message ...
[17:12:40] [Insane Limits] [VoteNext] 5 RU !surrender/!votenext votes needed to end round with 9 mins left!
[17:12:40] [Insane Limits] Original command: !surrender
[17:12:40] [Insane Limits] Thread(say): waiting for say message ...
[17:13:06] [Insane Limits] [VoteNext] PitbossSWE voted to end the round
[17:13:06] [Insane Limits] [VoteNext] loser votes = 9 of 31
[17:13:06] [Insane Limits] [VoteNext] winner votes = 2 of 32
[17:13:06] [Insane Limits] [VoteNext] needed votes = 16
[17:13:06] [Insane Limits] Thread(say): sending 1 queued message ...
[17:13:06] [Insane Limits] [VoteNext] 5 RU !surrender/!votenext votes needed to end round with 9 mins left!
[17:13:06] [Insane Limits] Original command: !votenext
[17:13:06] [Insane Limits] Thread(say): waiting for say message ...
[17:13:10] [Insane Limits] Original command: !rank
[17:16:07] [Insane Limits] [VoteNext] Silverdude08 voted to end the round
[17:16:07] [Insane Limits] [VoteNext] loser votes = 7 of 30
[17:16:07] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:16:07] [Insane Limits] [VoteNext] needed votes = 15
[17:16:07] [Insane Limits] Thread(say): sending 1 queued message ...
[17:16:07] [Insane Limits] [VoteNext] 6 RU !surrender/!votenext votes needed to end round with 6 mins left!
[17:16:07] [Insane Limits] Original command: !surrender
[17:16:07] [Insane Limits] Thread(say): waiting for say message ...
[17:16:14] [Insane Limits] [VoteNext] PitbossSWE voted to end the round
[17:16:14] [Insane Limits] [VoteNext] loser votes = 7 of 30
[17:16:14] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:16:14] [Insane Limits] [VoteNext] needed votes = 15
[17:16:14] [Insane Limits] Thread(say): sending 1 queued message ...
[17:16:14] [Insane Limits] [VoteNext] 6 RU !surrender/!votenext votes needed to end round with 6 mins left!
[17:16:14] [Insane Limits] Original command: !surrender
[17:16:14] [Insane Limits] Thread(say): waiting for say message ...
[17:16:15] [Insane Limits] [VoteNext] 4wesome_N00b voted to end the round
[17:16:15] [Insane Limits] [VoteNext] loser votes = 7 of 30
[17:16:15] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:16:15] [Insane Limits] [VoteNext] needed votes = 15
[17:16:15] [Insane Limits] Thread(say): sending 1 queued message ...
[17:16:15] [Insane Limits] [VoteNext] 6 RU !surrender/!votenext votes needed to end round with 5 mins left!
[17:16:15] [Insane Limits] Original command: !surrender
[17:16:15] [Insane Limits] Thread(say): waiting for say message ...
[17:16:37] [Insane Limits] [VoteNext] [RAD]Johnplaya voted to end the round
[17:16:37] [Insane Limits] [VoteNext] loser votes = 8 of 29
[17:16:37] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:16:37] [Insane Limits] [VoteNext] needed votes = 15
[17:16:37] [Insane Limits] Thread(say): sending 1 queued message ...
[17:16:37] [Insane Limits] [VoteNext] 5 RU !surrender/!votenext votes needed to end round with 5 mins left!
[17:16:37] [Insane Limits] Original command: !surrender
[17:17:25] [Insane Limits] [VoteNext] DK-Morzan voted to end the round
[17:17:25] [Insane Limits] [VoteNext] loser votes = 8 of 30
[17:17:25] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:17:25] [Insane Limits] [VoteNext] needed votes = 15
[17:17:25] [Insane Limits] Thread(say): sending 1 queued message ...
[17:17:25] [Insane Limits] [VoteNext] 5 RU !surrender/!votenext votes needed to end round with 4 mins left!
[17:17:52] [Insane Limits] [VoteNext] mcaesar88 voted to end the round
[17:17:52] [Insane Limits] [VoteNext] loser votes = 9 of 31
[17:17:52] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:17:52] [Insane Limits] [VoteNext] needed votes = 16
[17:17:52] [Insane Limits] Thread(say): sending 1 queued message ...
[17:17:52] [Insane Limits] [VoteNext] 5 RU !surrender/!votenext votes needed to end round with 4 mins left!
[17:17:52] [Insane Limits] Original command: !surrender
[17:17:52] [Insane Limits] Thread(say): waiting for say message ...
[17:17:59] [Insane Limits] [VoteNext] Silverdude08 voted to end the round
[17:17:59] [Insane Limits] [VoteNext] loser votes = 9 of 30
[17:17:59] [Insane Limits] [VoteNext] winner votes = 2 of 32
[17:17:59] [Insane Limits] [VoteNext] needed votes = 15
[17:17:59] [Insane Limits] Thread(say): sending 1 queued message ...
[17:17:59] [Insane Limits] [VoteNext] 4 RU !surrender/!votenext votes needed to end round with 4 mins left!
[17:17:59] [Insane Limits] Original command: !surrender
[17:17:59] [Insane Limits] Thread(say): waiting for say message ...
[17:18:00] [Insane Limits] Original command: !rules
[17:18:02] [Insane Limits] [VoteNext] Silverdude08 voted to end the round
[17:18:02] [Insane Limits] [VoteNext] loser votes = 9 of 30
[17:18:02] [Insane Limits] [VoteNext] winner votes = 2 of 32
[17:18:02] [Insane Limits] [VoteNext] needed votes = 15
[17:18:02] [Insane Limits] Thread(say): sending 1 queued message ...
[17:18:02] [Insane Limits] [VoteNext] 4 RU !surrender/!votenext votes needed to end round with 4 mins left!
[17:18:02] [Insane Limits] Original command: !votenext
[17:18:02] [Insane Limits] Thread(say): waiting for say message ...
[17:18:55] [Insane Limits] [VoteNext] Silverdude08 voted to end the round
[17:18:55] [Insane Limits] [VoteNext] loser votes = 9 of 31
[17:18:55] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:18:55] [Insane Limits] [VoteNext] needed votes = 16
[17:18:55] [Insane Limits] Thread(say): sending 1 queued message ...
[17:18:55] [Insane Limits] [VoteNext] 5 RU !surrender/!votenext votes needed to end round with 3 mins left!
[17:18:55] [Insane Limits] Original command: !votenext
[17:19:02] [Insane Limits] [VoteNext] Silverdude08 voted to end the round
[17:19:02] [Insane Limits] [VoteNext] loser votes = 9 of 31
[17:19:02] [Insane Limits] [VoteNext] winner votes = 2 of 30
[17:19:02] [Insane Limits] [VoteNext] needed votes = 16
[17:19:02] [Insane Limits] Thread(say): sending 1 queued message ...
[17:19:02] [Insane Limits] [VoteNext] 5 RU !surrender/!votenext votes needed to end round with 3 mins left!
[17:19:29] [Insane Limits] [VoteNext] pigsick824 voted to end the round
[17:19:29] [Insane Limits] [VoteNext] loser votes = 9 of 31
[17:19:29] [Insane Limits] [VoteNext] winner votes = 2 of 30
[17:19:29] [Insane Limits] [VoteNext] needed votes = 16
[17:19:29] [Insane Limits] Thread(say): sending 1 queued message ...
[17:19:29] [Insane Limits] [VoteNext] 5 RU !surrender/!votenext votes needed to end round with 2 mins left!
[17:19:29] [Insane Limits] Original command: !votenext
[17:19:29] [Insane Limits] Thread(say): waiting for say message ...
[17:20:16] [Insane Limits] [VoteNext] Yarys_cze voted to end the round
[17:20:16] [Insane Limits] [VoteNext] loser votes = 10 of 31
[17:20:16] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:20:16] [Insane Limits] [VoteNext] needed votes = 16
[17:20:16] [Insane Limits] Thread(say): sending 1 queued message ...
[17:20:16] [Insane Limits] [VoteNext] 4 RU !surrender/!votenext votes needed to end round with 1 mins left!
[17:20:16] [Insane Limits] Original command: !surrender 
[17:20:16] [Insane Limits] Thread(say): waiting for say message ...
[17:20:28] [Insane Limits] [VoteNext] [RAD]Johnplaya voted to end the round
[17:20:28] [Insane Limits] [VoteNext] loser votes = 10 of 32
[17:20:28] [Insane Limits] [VoteNext] winner votes = 2 of 32
[17:20:28] [Insane Limits] [VoteNext] needed votes = 16
[17:20:28] [Insane Limits] Thread(say): sending 1 queued message ...
[17:20:28] [Insane Limits] [VoteNext] 4 RU !surrender/!votenext votes needed to end round with 1 mins left!
[17:20:28] [Insane Limits] Original command: !surrender
[17:20:29] [Insane Limits] Thread(say): waiting for say message ...
[17:21:06] [Insane Limits] [VoteNext] everseeker voted to end the round
[17:21:06] [Insane Limits] [VoteNext] loser votes = 11 of 32
[17:21:06] [Insane Limits] [VoteNext] winner votes = 2 of 31
[17:21:06] [Insane Limits] [VoteNext] needed votes = 16
[17:21:06] [Insane Limits] Thread(say): sending 1 queued message ...
[17:21:06] [Insane Limits] [VoteNext] 3 RU !surrender/!votenext votes needed to end round with 1 mins left!
[17:21:06] [Insane Limits] Original command: !surrender
if you original file i will send it to you.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

if you original file i will send it to you.

No, I prefer the cleaned up version. It's really good, makes it very clear what is going on.

 

You can see yourself that the number of votes needed changes as people leave or join. The original player count was 30 vs 31. The number needed was 15. Then the player count dropped to 29 vs 30, so needed dropped to 14 (50% of 29 rounded down). Then the player count went up to 30 vs. 30, so needed went back to 15. That's why sometimes the number goes in reverse and sometimes it seems to get stuck.

 

However, there's another reason the number seems to get stuck: the same players are voting multiple times. Only one time is counted, the rest are ignored -- however, the needed count is displayed every time someone votes, even if their vote was ignored. I could change that so that if someone tries to vote more than once, I tell them to stop doing that and a new count won't be shown. It won't change how the count actually works, though, it only changes what the players see.

 

There's one last reason why the number gets stuck and maybe this is a bug: the votes from the winning team (the second number in this case, e.g., 29 vs 30, the 30 are the winners) are only counted if they are less than the losing team votes. So when we got to this point:

 

Code:

[17:11:18] [Insane Limits] [VoteNext] PitbossSWE voted to end the round
[17:11:18] [Insane Limits] [VoteNext] loser votes = 1 of 29
[17:11:18] [Insane Limits] [VoteNext] winner votes = 1 of 30
[17:11:18] [Insane Limits] [VoteNext] needed votes = 15
[17:11:18] [Insane Limits] [VoteNext] 14 RU !surrender/!votenext votes needed to end round with 10 mins left!
PitbossSWE's vote was ignored, because he was on the winning team and the losing team only had 1 vote. So even though 15 votes were needed and 2 votes were recorded, the remaining votes were "14" (instead of 13 = 15 - 1 - 1). I could change that so that the winning team votes are counted if the they are less than or equal to the losing votes. That will slightly reduce the getting stuck problem, but won't make it go away. If the losing votes are 1 and the winning votes are 2, then 3, then 4, then 5, it will still seem stuck.

 

I guess I could sent a warning in chat that "Your vote wasn't counted because not enough losing players have voted" or something like that.

 

Also, if it really bugs you that the number goes in reverse (like 15, 14, 15, 16, etc.), I could change the code so that it remembers the lowest value for needed and never allows it to get larger than that number. So in stead of 15, 14, 15, 16, you'll see 15, 14, 14, 14, 14. It will actually make the "number appears stuck" problem worse, but on the other hand, will make it easier to end the round.

* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by HexaCanon*:

 

i will read the whole code again and see why the vote number relies on the amount of players online.

 

was hoping of having X amount of votes required is set when the voting start and there are more than Z players, or Y amount of votes required is set when the voting start and there are less than or equal Z players.

 

it is just that there is a lot of programming knowledge required and i dont have that knowledge.

* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

was hoping of having X amount of votes required is set when the voting start and there are more than Z players, or Y amount of votes required is set when the voting start and there are less than or equal Z players.

 

it is just that there is a lot of programming knowledge required and i dont have that knowledge.

I can make the changes for you, just answer the questions/options in my post. Let me know which of the changes I offered that you want.

 

I can do the X, Y, Z players, I understand what you mean. You want the needed number to go down if players are less than Z, but to stay at X if more than Z, where Z is the count of players when the vote started.

* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by HexaCanon*:

 

I can make the changes for you, just answer the questions/options in my post. Let me know which of the changes I offered that you want.

 

I can do the X, Y, Z players, I understand what you mean. You want the needed number to go down if players are less than Z, but to stay at X if more than Z, where Z is the count of players when the vote started.

yes this change is better because i believe it will solve the number not advancing issue, and a message to players who already voted is great as well.

 

also can you make the first time message to voters say

Code:

remain + losing team + " !surrender or " + winning team + " !votenext votes needed to end round with " + Convert.ToInt32(Math.Ceiling(timeout - since.TotalMinutes)) + " minutes left!";
and thank you again for the help.
* Restored post. It could be that the author is no longer active.
Link to comment

Archived

This topic is now archived and is closed to further replies.




  • Our picks

    • Game Server Hosting:

      We're happy to announce that EZRCON will branch out into the game server provider scene. This is a big step for us so please having patience if something doesn't go right in this area. Now, what makes us different compared to other providers? Well, we're going with the idea of having a scaleable server hosting and providing more control in how you set up your server. For example, in Minecraft, you have the ability to control how many CPU cores you wish your server to have access to, how much RAM you want to use, how much disk space you want to use. This type of control can't be offered in a single service package so you're able to configure a custom package the way you want it.

      You can see all the available games here. Currently, we have the following games available.

      Valheim (From $1.50 USD)


      Rust (From $3.20 USD)


      Minecraft (Basic) (From $4.00 USD)


      Call of Duty 4X (From $7.00 USD)


      OpenTTD (From $4.00 USD)


      Squad (From $9.00 USD)


      Insurgency: Sandstorm (From $6.40 USD)


      Changes to US-East:

      Starting in January 2022, we will be moving to a different provider that has better support, better infrastructure, and better connectivity. We've noticed that the connection/routes to this location are not ideal and it's been hard getting support to correct this. Our contract for our two servers ends in March/April respectively. If you currently have servers in this location you will be migrated over to the new provider. We'll have more details when the time comes closer to January. The new location for this change will be based out of Atlanta, GA. If you have any questions/concerns please open a ticket and we'll do our best to answer them.
      • 5 replies
    • Hello All,

      I wanted to give an update to how EZRCON is doing. As of today we have 56 active customers using the services offered. I'm glad its doing so well and it hasn't been 1 year yet. To those that have services with EZRCON, I hope the service is doing well and if not please let us know so that we can improve it where possible. We've done quite a few changes behind the scenes to improve the performance hopefully. 

      We'll be launching a new location for hosting procon layers in either Los Angeles, USA or Chicago, IL. Still being decided on where the placement should be but these two locations are not set in stone yet. We would like to get feedback on where we should have a new location for hosting the Procon Layers, which you can do by replying to this topic. A poll will be created where people can vote on which location they would like to see.

      We're also looking for some suggestions on what else you would like to see for hosting provider options. So please let us know your thoughts on this matter.
      • 4 replies
    • Added ability to disable the new API check for player country info


      Updated GeoIP database file


      Removed usage sending stats


      Added EZRCON ad banner



      If you are upgrading then you may need to add these two lines to your existing installation in the file procon.cfg. To enable these options just change False to True.

      procon.private.options.UseGeoIpFileOnly False
      procon.private.options.BlockRssFeedNews False



       
      • 2 replies
    • I wanted I let you know that I am starting to build out the foundation for the hosting services that I talked about here. The pricing model I was originally going for wasn't going to be suitable for how I want to build it. So instead I decided to offer each service as it's own product instead of a package deal. In the future, hopefully, I will be able to do this and offer discounts to those that choose it.

      Here is how the pricing is laid out for each service as well as information about each. This is as of 7/12/2020.

      Single MySQL database (up to 30 GB) is $10 USD per month.



      If you go over the 30 GB usage for the database then each additional gigabyte is charged at $0.10 USD each billing cycle. If you're under 30GB you don't need to worry about this.


      Databases are replicated across 3 zones (regions) for redundancy. One (1) on the east coast of the USA, One (1) in Frankfurt, and One (1) in Singapore. Depending on the demand, this would grow to more regions.


      Databases will also be backed up daily and retained for 7 days.




      Procon Layer will be $2 USD per month.


      Each layer will only allow one (1) game server connection. The reason behind this is for performance.


      Each layer will also come with all available plugins installed by default. This is to help facilitate faster deployments and get you up and running quickly.


      Each layer will automatically restart if Procon crashes. 


      Each layer will also automatically restart daily at midnight to make sure it stays in tip-top shape.


      Custom plugins can be installed by submitting a support ticket.




      Battlefield Admin Control Panel (BFACP) will be $5 USD per month


      As I am still working on building version 3 of the software, I will be installing the last version I did. Once I complete version 3 it will automatically be upgraded for you.





      All these services will be managed by me so you don't have to worry about the technical side of things to get up and going.

      If you would like to see how much it would cost for the services, I made a calculator that you can use. It can be found here https://ezrcon.com/calculator.html

       
      • 11 replies
    • I have pushed out a new minor release which updates the geodata pull (flags in the playerlisting). This should be way more accurate now. As always, please let me know if any problems show up.

       
      • 9 replies
×
×
  • Create New...

Important Information

Please review our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.