Jump to content

Insane Limits Requests


ImportBot

Recommended Posts

Originally Posted by Singh400*:

 

I'm pretty sure the PRoCon Accounts settings have a level which is kick and kill only, no bans or tbans, which in turn would control the In-Game Admin plugin. Check it out, Accounts tab, double click a player name.

Correct-a-mundo!

 

Posted Image

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

Originally Posted by purebattlefield*:

 

Hello,

 

I'm looking for a little guidance with learning.

 

A couple things I'd like to do now:

 

-Delay a Code:

plugin.ServerCommand(Admin.yell)
If that is possible. I'd like to make it so that when the first check is activated the second code would put out a yell a number of seconds after.

 

-Make a limit that will check the server population for less than 12 people

 

 

 

Hopefully I can combine these to make a message that will display 60 seconds after a player joins only if there are less than 12 people on the server.

 

The other way I thought of doing this would be to activate the limit on player spawn and then check the server population and display the yell if there are less than 12 people. If I did this I'd want to use something like:

Code:

if(limit.Activations(player.Name) <= 1)
If I did this I think I might be able to have it only display on the player's first spawn (which would probably be better than a static 60 seconds after join).

 

Also, I hope this is simple, but is there an easy way to put a player's name in the text of an admin.yell ServerCommand? If I wanted to yell a message where the player who triggered it has their name in the message. Such as, OnJoin, run code: plugin.ServerCommand("admin.yell", "%p_n% has joined.");

 

 

Thanks for any help. Been enjoying playing around with the code. Have a lot to learn.

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

Originally Posted by droopie*:

 

i have had an idea for a couple of weeks but never came to post it. possible to play specific maps from the maplist based on amount of players in the server? like if its less then 16 run MP_001 but if it has more players then unlock all the maps in the maplist to be playable. i find myself manually setting which map to play next so it doesnt go to a big map with low players.

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

Originally Posted by Singh400*:

 

i have had an idea for a couple of weeks but never came to post it. possible to play specific maps from the maplist based on amount of players in the server? like if its less then 16 run MP_001 but if it has more players then unlock all the maps in the maplist to be playable. i find myself manually setting which map to play next so it doesnt go to a big map with low players.

Check out Ultimate Map Manager that's what you want.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

Hello,

 

I'm looking for a little guidance with learning.

 

A couple things I'd like to do now:

 

-Delay a Code:

plugin.ServerCommand(Admin.yell)
If that is possible. I'd like to make it so that when the first check is activated the second code would put out a yell a number of seconds after.

 

-Make a limit that will check the server population for less than 12 people

 

 

 

Hopefully I can combine these to make a message that will display 60 seconds after a player joins only if there are less than 12 people on the server.

 

The other way I thought of doing this would be to activate the limit on player spawn and then check the server population and display the yell if there are less than 12 people. If I did this I'd want to use something like:

Code:

if(limit.Activations(player.Name) <= 1)
If I did this I think I might be able to have it only display on the player's first spawn (which would probably be better than a static 60 seconds after join).

 

Also, I hope this is simple, but is there an easy way to put a player's name in the text of an admin.yell ServerCommand? If I wanted to yell a message where the player who triggered it has their name in the message. Such as, OnJoin, run code: plugin.ServerCommand("admin.yell", "%p_n% has joined.");

 

 

Thanks for any help. Been enjoying playing around with the code. Have a lot to learn.

In order:

 

* Delays are difficult. They can be done, but require multithreaded programming. I wrote a post about it here: www.phogue.net/forumvb/showth...quests&p=56101*

 

* Checking for number of players is literally one line of code (easy):

 

Code:

if (server.PlayerCount < 12)
In general, see the #1 post of the Insane Limits plugin thread for the full API specification:

 

www.phogue.net/forumvb/showth...0-8-(beta-BF3)*

 

* Yeah, use OnSpawn instead of OnJoin and then just spam the message immediately. Use:

 

Code:

if (limit.ActivationsTotal(player.Name) > 1) return false;
before the yell to limit the yell to only happen once per join.

 

* If you want to use replacement codes like %p_n%, wrap the string with a plugin.R() function:

 

Code:

plugin.ServerCommand("admin.yell", plugin.R("%p_n% has joined."));
Personally, I prefer to just concat the strings myself:

 

Code:

plugin.ServerCommand("admin.yell", player.Name + " has joined.");
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by purebattlefield*:

 

Thank you, PapaCharlie!

 

I gleaned a bit from the information about the concat string. Was able to put: "Admin: + player.Name + " has joined." So now I know how to use that. :smile:

 

I'm trying to make a yell now that will send out at the end of the round. So far I have:

 

Expression:

Code:

(team1.RemainTicketsPercent < 20 || team2.RemainTicketsPercent < 20)
Code:

Code:

if (limit.ActivationsTotal(player.Name) > 1) return false;

plugin.ServerCommand("admin.yell", "Teams auto-balance between rounds, keeping squads intact.", "20", "player", player.Name);
I'm not sure a way to make this run near the end of the round for my evaluation. I was thinking maybe OnSpawn for this but, I'd rather just send out a yell to everyone on the server once the ticket percent is

 

Thanks again!

 

Also, while I'm here, is there a way to specify the duration of a yell processed by In-Game Admin? I know this isn't the right place, but maybe it is. If there isn't a way to specify the duration I might need to write a set of limits for admins so they can specify yell durations when sending messages in game.

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

Originally Posted by Singh400*:

 

Thank you, PapaCharlie!

 

I gleaned a bit from the information about the concat string. Was able to put: "Admin: + player.Name + " has joined." So now I know how to use that. :smile:

 

I'm trying to make a yell now that will send out at the end of the round. So far I have:

 

Expression:

Code:

(team1.RemainTicketsPercent < 20 || team2.RemainTicketsPercent < 20)
Code:

Code:

if (limit.ActivationsTotal(player.Name) > 1) return false;

plugin.ServerCommand("admin.yell", "Teams auto-balance between rounds, keeping squads intact.", "20", "player", player.Name);
I'm not sure a way to make this run near the end of the round for my evaluation. I was thinking maybe OnSpawn for this but, I'd rather just send out a yell to everyone on the server once the ticket percent is

 

Thanks again!

There is no easy way to do this. There is an OnRoundOver/End event but it runs to late to send anything to chat.

 

Best thing to do is do this:-

 

Code:

(team1.RemainTicketsPercent < 10 || team2.RemainTicketsPercent < 7)
Code:
if (limit.Activations() > 2)
	return false;

string msg = "Teams auto-balance between rounds, keeping squads intact."
plugin.ServerCommand("admin.yell", msg, "10");
plugin.ServerCommand("admin.say", msg, "all");[

return false;
If the message is intended for everyone to see then send it a global message. If you only want a certain player to see it then that's when you start using player.name etc.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by purebattlefield*:

 

There is no easy way to do this. There is an OnRoundOver/End event but it runs to late to send anything to chat.

That's the problem I was running into. What would I set the evaluation for this? Use the squad spawn and just have it display when someone spawns and the ticket count is less than 10%?
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Singh400*:

 

That's the problem I was running into. What would I set the evaluation for this? Use the squad spawn and just have it display when someone spawns and the ticket count is less than 10%?

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

Originally Posted by purebattlefield*:

 

Use OnSpawn event instead.

Sorry, typo there. Meant to say OnSpawn instead of "squad spawn".

 

Just put that limit in, will test to make sure it works now. Thanks for your help Singh!

 

I hate to ask again, but do you have any information about the InGame Admin commands and specifying Yell duration? Or is that something I'd need to make additional limits for... somehow. I'm guessing creating limits for that would be a bit of a task. Something like on any chat (/@yell) then checking the List "admins", converting their message to a string and then outputting that string in an admin.yell.

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

Originally Posted by Singh400*:

 

Sorry, typo there. Meant to say OnSpawn instead of "squad spawn".

 

Just put that limit in, will test to make sure it works now. Thanks for your help Singh!

The limit kick in once one team was

 

I hate to ask again, but do you have any information about the InGame Admin commands and specifying Yell duration? Or is that something I'd need to make additional limits for... somehow. I'm guessing creating limits for that would be a bit of a task. Something like on any chat (/@yell) then checking the List "admins", converting their message to a string and then outputting that string in an admin.yell.

I've no idea. But the default yell should be plenty of time for people to read messages. It's like 3-4 secs.

 

Also bare in mind that players don't want too much spam. In either chat or yell. Too much and they will just completely ignore it and filter it out.

 

What exactly are you trying to yell? If its rules and teamspeak stuff just stick to limits to respond to @teamspeak / @rules etc.

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

Originally Posted by purebattlefield*:

 

There is no easy way to do this. There is an OnRoundOver/End event but it runs to late to send anything to chat.

 

Best thing to do is do this:-

 

Code:

(team1.RemainTicketsPercent < 10 || team2.RemainTicketsPercent < 7)
Code:
if (limit.Activations() > 1)
	return false;

string msg = "Teams auto-balance between rounds, keeping squads intact."
plugin.ServerCommand("admin.yell", msg, "10");
plugin.ServerCommand("admin.say", msg, "all");[

return false;
If the message is intended for everyone to see then send it a global message. If you only want a certain player to see it then that's when you start using player.name etc.
Hmm, I guess I am not sure about implementing this correctly. I have evaluate OnSpawn. First check is an expression of:

 

Code:

(team1.RemainTicketsPercent < 20 || team2.RemainTicketsPercent < 20)
second check is code:

Code:

if (limit.Activations() > 2)
	return false;

string msg = "Teams auto-balance between rounds, keeping squads intact."
plugin.ServerCommand("admin.yell", msg, "10");
plugin.ServerCommand("admin.say", msg, "all");[

return false;
I was hoping having it set up like that would run the limit OnSpawn and first check the ticket count and then if it was

 

It doesn't seem to be working though. Maybe it doesn't work how I imagine it to. :smile:

 

Also bare in mind that players don't want too much spam. In either chat or yell. Too much and they will just completely ignore it and filter it out.

 

What exactly are you trying to yell? If its rules and teamspeak stuff just stick to limits to respond to @teamspeak / @rules etc.

I have limits set up to display the information if the player types /rules and /ts3 etc. Then using the \n to make multi-line yells. Seems to be working decently.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Singh400*:

 

Remove the square bracket after the ;.

 

It should be:

Code:

if (limit.Activations() > 2)
	return false;

string msg = "Teams auto-balance between rounds, keeping squads intact."
plugin.ServerCommand("admin.yell", msg, "10");
plugin.ServerCommand("admin.say", msg, "all");

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

Originally Posted by PapaCharlie9*:

 

For what it's worth, here's how I'd do it.

 

For most "near end of round" announcements, I use OnIntervalServer set to 30 seconds and use first_check to control the "near end" condition. Something like:

 

Code:

(team1.RemainTicketsPercent < 10 || team2.RemainTicketsPercent < 10)
20 might be too much, depends on your starting ticket count. If you are running a 1200 ticket server, 20% is 240 tickets. That's almost a full normal round with default settings. An argument can be made to use tickets instead of percentages, but again, it depends on what kind of server you are running. If you want one limit to apply to many different maps with widely different starting ticket counts, percentages are easier, if somewhat less predictable -- 10% near end could vary from 10 tickets to 100 tickets from map to map.

 

To control the number of times the message is shown, I use my own flag/counter to avoid the problems with limit.Activations (second_check code):

 

Code:

String kCount = "MyCounter"; // plugin.RoundData int

int count = 0;
if (plugin.RoundData.issetInt(kCount)) count = plugin.RoundData.getInt(kCount);
if (count >= 2) return false; // only do it twice

//... put the yell and/or chat here

plugin.RoundData.setInt(kCount, count + 1);
return false;
Since there are 30 seconds between activations, doing it twice means you get the messages spaced out by 30 seconds. If you want 45 or 60, you can use that instead. Don't go above 60, though, and even with 60 you might drop one message due to a bug in Insane Limits.

 

However, if you care more about just doing something once and need it to be 100% reliable (which OnIntervalServer isn't) and since you are using a condition that is based on tickets, using OnSpawn is probably better.

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

Originally Posted by purebattlefield*:

 

Thank you both for your input so far. I was able to get some great ideas for how to implement different limits. This is a very powerful plugin! Really would be lost without it!

 

Also, I was curious, something like these two pieces of code:

 

Code:

if (limit.Activations() > 2)
Code:
if (limit.ActivationsTotal(player.Name) > 1)
I'm assuming the second one with player name means it will only activate 1 time for each player, while the other one will only be activated a total of two times. When do these reset? Are they round/map?

 

I'm using the second one to display a low population message to players.

 

On Spawn

first check, expression:

Code:

(server.PlayerCount < 13)
second check, code:

Code:

List<String> Low = new List<String>();
Low.Add("Attention, soldier! Let's get this server going!");
Low.Add("If there are under 8 players, we'll notify you when new players are joining.");
Low.Add("From 1-12 players, we run Team Deathmatch.");
Low.Add("After we reach 13 players, the next map will be Conquest.");


if (limit.ActivationsTotal(player.Name) > 1) 
return false;
    foreach(string X in Low)
plugin.ServerCommand("admin.say", X, "player", player.Name);
return false;
Maybe I'm mistaken (checking to make sure these are working properly in game is a bit tedious) but it seems like that message isn't displaying the first spawn of every round like I was hoping it would be. Still testing it though, maybe it is. Figured I'd post these limits in case other's want to use them on their servers. /shrug.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

There's a little documentation for the Insane Limits objects and functions here:

 

www.phogue.net/forumvb/showth...0-8-(beta-BF3)*

 

You can see there that is says limit.Activations() is for the current round (reset at end of round) and limit.ActivationsTotal() is not reset.

 

Activations() always refers to an activator. Unfortunately, some events, like OnIntervalServer, are not passed an activator (player) object, so your only choice is to use the Activations() function with no arguments. The activator is implied by the event -- in the case of OnIntervalServer, its the enforcer thread.

 

BTW, your foreach loop looks good, but the messages are too long. The chat box will probably fill up and scroll off the first messages before the last messages are done being sent. Also, you can do it all with one message if you want, using \n for line breaks in the text box. However, the breaks are indented, so you get even less text to show before the box scrolls.

 

For example, to instruct players to use a command, I often format the message like this:

 

Code:

String msg = "Want to taunt the enemy_ Type:\n!umadbro name\nto send a taunt to player 'name'";
That comes out in the chat box like this:

Code:

[Admin] Want to taunt the enemy_ Type:
        !umadbro name
        to send a taunt to player 'name'
If you want to debug your code, add some plugin.ConsoleWrite calls. Use them like printfs to log progress to the console.log.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by HexaCanon*:

 

is it possible to record chat for X seconds after OnAnyChat trigger ?

 

example :

 

OnAnyChat

 

expression

Code:

(player.LastChat.StartsWith("!kill") || player.LastChat.StartsWith("!kick") || player.LastChat.StartsWith("!tban") || player.LastChat.StartsWith("!ban") ||
player.LastChat.StartsWith("@kill") || player.LastChat.StartsWith("@kick") || player.LastChat.StartsWith("@tban") || player.LastChat.StartsWith("@ban") ||
player.LastChat.StartsWith("#kill") || player.LastChat.StartsWith("#kick") || player.LastChat.StartsWith("#tban") || player.LastChat.StartsWith("#ban") ) && plugin.isInList(player.Name, "Admin_List")
and then a code that record all chat for X seconds and at the end of the record (record = log into a file) it inserts a line like

 

Code:

---------------------------------------------------------
i just want it to serve as a record, i do not think that it is possible to record anything on chat before the command.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by HexaCanon*:

 

@HexaCanon: It looks like you are tying to log admin actions, no? If so, there is already an Admin Audit Trail limit out there.

logging admin actions is not enough sometimes you need to know what was asked and if there was an argument between admin and player.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Singh400*:

 

logging admin actions is not enough sometimes you need to know what was asked and if there was an argument between admin and player.

Not sure it's possible to do. Isn't the standard chat log enough?
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

is it possible to record chat for X seconds after OnAnyChat trigger ?

 

example :

 

OnAnyChat

 

expression

Code:

(player.LastChat.StartsWith("!kill") || player.LastChat.StartsWith("!kick") || player.LastChat.StartsWith("!tban") || player.LastChat.StartsWith("!ban") ||
player.LastChat.StartsWith("@kill") || player.LastChat.StartsWith("@kick") || player.LastChat.StartsWith("@tban") || player.LastChat.StartsWith("@ban") ||
player.LastChat.StartsWith("#kill") || player.LastChat.StartsWith("#kick") || player.LastChat.StartsWith("#tban") || player.LastChat.StartsWith("#ban") ) && plugin.isInList(player.Name, "Admin_List")
and then a code that record all chat for X seconds and at the end of the record (record = log into a file) it inserts a line like

 

Code:

---------------------------------------------------------
i just want it to serve as a record, i do not think that it is possible to record anything on chat before the command.
You can do both, record before and after, using the same mechanism.

 

The basic algorithm is:

 

* Create a queue data structure. This queue will hold each and every chat message sent.

 

* For every chat message, add it to the end of the queue, along with a timestamp. Messages older that Y seconds are deleted (removed from the head of the queue) at that time.

 

* When a trigger in chat is detected, like !kick, save the time in a separate variable -- call it kTriggerTime. This is like a marker in the queue.

 

* Wait until the current time is at least X seconds after kTriggerTime, dump the entire queue into a log file. Clear kTrigerTime.

 

 

Here's a rough outline of the code, customize red parts as needed:

 

Code:

double totalSecs = 8*60; // number of seconds to keep messages
double afterSecs = 3*60; // number of seconds after trigger to dump to log
String kTriggerTime = "Chat_trigger"; // plugin.Data Object
String kQueue = "Chat_queue"; // plugin.Data Object
String kTimes = "Chat_times"; // plugin.Data Object

Queue<String> history = null;
Queue<DateTime> timestamp = null;

if (plugin.Data.issetObject(kQueue)) {
	history = (Queue<String>)plugin.Data.getObject(kQueue);
	timestamp = (Queue<DateTime>)plugin.Data.getObject(kTimes);
} else {
	history = new Queue<String>();
	plugin.Data.setObject(kQueue, (Object)history);
	timestamp = new Queue<DateTime>();
	plugin.Data.setObject(kTimes, (Object)timestamp);
}

DateTime now = DateTime.Now;

// Add message

history.Enqueue("[" + player.Name + "] " + player.LastChat);
timestamp.Enqueue(now);

// Is it a trigger_

if ( (player.LastChat.StartsWith("!kill") || player.LastChat.StartsWith("!kick") || player.LastChat.StartsWith("!tban") || player.LastChat.StartsWith("!ban") ||
player.LastChat.StartsWith("@kill") || player.LastChat.StartsWith("@kick") || player.LastChat.StartsWith("@tban") || player.LastChat.StartsWith("@ban") ||
player.LastChat.StartsWith("#kill") || player.LastChat.StartsWith("#kick") || player.LastChat.StartsWith("#tban") || player.LastChat.StartsWith("#ban") ) && plugin.isInList(player.Name, "Admin_List") ) {
	plugin.Data.setObject(kTriggerTime, (Object)now);
} else if (plugin.Data.issetObject(kTriggerTime)) { // time to dump_
	DateTime since = (DateTime)plugin.Data.getObject(kTriggerTime);
	if (now.Subtract(since).TotalSeconds >= afterSecs) {
		List<DateTime> at = new List<DateTime>();
		foreach (DateTime t in timestamp) {
			at.Add(t);
		}
		int i = 0;
		foreach (String line in history) {
			plugin.Log("YourAdmin.log", "[" + (at[i]).ToString("HH:mm:ss") + "]" + line);
			++i;
		}
		plugin.Log("YourAdmin.log", "------------------------------------------");
		plugin.Data.unsetObject(kTriggerTime); // clear trigger time
	}
}

// Purge old messages

DateTime ts = timestamp.Peek();
while (now.Subtract(ts).TotalSeconds >= totalSecs) {
	DateTime x = timestamp.Dequeue();
	String xx = history.Dequeue();
	if (history.Count == 0) break;
	ts = timestamp.Peek();
}

return false;
The values for totalSecs and afterSecs save 5 minutes before and 3 minutes after the trigger (8 total).

 

WARNING: If no body types chat, messages might get stuck in the queue, particularly after a trigger. For example, if no chat happens after a kick, the chat before and after might not get logged. So don't set afterSecs too high. Or, add another limit OnRoundOver that will dump the queue if kTriggerTime is set.

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

Originally Posted by DeviousDevil*:

 

I got part of a limit from singh400, but was wondering how i can add more to it..

 

Ive got the "kick people with over a 40 Quit % Ratio", but now I would like to add the player must be over rank 40 and only if the server has over 30 people in it... I kind of have an idea on how its done but would like someone who actually knows the codes to post so i dont mess anything up..

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

Originally Posted by Singh400*:

 

I got part of a limit from singh400, but was wondering how i can add more to it..

 

Ive got the "kick people with over a 40 Quit % Ratio", but now I would like to add the player must be over rank 40 and only if the server has over 30 people in it... I kind of have an idea on how its done but would like someone who actually knows the codes to post so i dont mess anything up..

Try

 

Code:

if ( player.QuitPercent > 40 && player.Rank > 40 && server.PlayerCount > 30)
	{
		then do your action stuff here
	}

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

Originally Posted by Singh400*:

 

how do i put a defibrillator kill message onkill? like Regex.Match(kill.Weapon, "(Defibrillator)").Success

According to BF3.def it's:-

 

Code:

procon.protected.weapons.add Assault "Defib" Secondary Melee
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by purebattlefield*:

 

I'm getting a lot of exceptions for Insane Limits when using the latest TrueBalancer. Insane Limits 0.0.0.8-patch-3, True Balancer BF3 - 0.3.5.5.

 

The exception is: [13:11:14 03] [insane Limits] Thread(fetch): EXCEPTION: Timeout(30 seconds) expired, while waiting for indices_handle within getMapIndicesSync

 

or: [13:12:36 48] [insane Limits] Thread(fetch): EXCEPTION: Timeout(30 seconds) expired, while waiting for list_handle within getMapListSync

 

We're using Insane Limits right now for basic commands like "type /help" for help. When we turn off TrueBalancer we no longer get InsaneLimit exceptions. We really like the improved balancing that true balancer offers over the Insane Balancer we were using, but we think this combination is lagging our procon layer. It can become pretty unresponsive. Maybe we should try a separate plugin to do basic help commands. For now, we are trying Insane Limits off with TrueBalancer on, to see what happens.

 

With Insane Limits off we're getting, "[14:49:22 40] [insane Limits] Thread(activator): EXCEPTION: Timeout(30 seconds) expired, while waiting for server_desc_handle within getServerDescriptionSync" which is a new error for us.

 

Perhaps for information on this, I'm posting in the wrong thread.

 

Anyone have a suggestion for another plugin to handle help commands? /about /ts3 /help, etc?

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

Originally Posted by Singh400*:

 

I'm getting a lot of exceptions for Insane Limits when using the latest TrueBalancer. Insane Limits 0.0.0.8-patch-3, True Balancer BF3 - 0.3.5.5.

 

The exception is:

 

Code:

[13:11:14 03] [Insane Limits] Thread(fetch): EXCEPTION: Timeout(30 seconds) expired, while waiting for indices_handle within getMapIndicesSync
[13:12:36 48] [Insane Limits] Thread(fetch): EXCEPTION: Timeout(30 seconds) expired, while waiting for list_handle within getMapListSync
We're using Insane Limits right now for basic commands like "type /help" for help. When we turn off TrueBalancer we no longer get InsaneLimit exceptions. We really like the improved balancing that true balancer offers over the Insane Balancer we were using, but we think this combination is lagging our procon layer. It can become pretty unresponsive. Maybe we should try a separate plugin to do basic help commands. For now, we are trying Insane Limits off with TrueBalancer on, to see what happens.

 

With Insane Limits off we're getting, "[14:49:22 40] [insane Limits] Thread(activator): EXCEPTION: Timeout(30 seconds) expired, while waiting for server_desc_handle within getServerDescriptionSync" which is a new error for us.

 

Perhaps for information on this, I'm posting in the wrong thread.

 

Anyone have a suggestion for another plugin to handle help commands? /about /ts3 /help, etc?

Insane Limits wouldn't cause the ProCon Layer to lag if you've got all the limits setup correctly. You can raise the timeout to 61 from 30. It's what I've done.

 

I don't use True Balancer BF3 v0.3.5.5. I use the old legacy (v1.6.0).

 

What limits do you have Insane Limits? And make sure the code is spot on. As for an alternative, you could use ProconRulz I guess but I have no experience with that plugin.

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

Originally Posted by PapaCharlie9*:

 

Yes, raise the timeout to 61 as a first step.

 

Second step, grab your console.log (the log with all the RCON commands and replies) with both plugins running and getting exceptions from Insane Limits. Capture about 5 minutes worth. I suspect that TrueBalancer under heavy load (lots of players) is spamming admin.listPlayers, which is causing lag, which results in the timeout in Insane Limits. We need to analyze who is sending all the spam that is causing the problem and then get TrueBalancer to give you some options -- after all, you paid for it, you should get some support from the developer. :smile:

 

Question: I don't understand this statement

With Insane Limits off we're getting, "[14:49:22 40] [insane Limits] Thread(activator): EXCEPTION ...

If Insane Limits is off (disabled in PRoCon, right_), how can you get any exceptions from it at all?
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by purebattlefield*:

 

Question: I don't understand this statement

 

If Insane Limits is off (disabled in PRoCon, right_), how can you get any exceptions from it at all?

We figured out that we need to restart the procon layer in order to turn off a plugin, after unchecking it. Just simply unchecking it in procon doesn't seem to do it.

 

 

Yes, raise the timeout to 61 as a first step.

 

Second step, grab your console.log (the log with all the RCON commands and replies) with both plugins running and getting exceptions from Insane Limits. Capture about 5 minutes worth. I suspect that TrueBalancer under heavy load (lots of players) is spamming admin.listPlayers, which is causing lag, which results in the timeout in Insane Limits. We need to analyze who is sending all the spam that is causing the problem and then get TrueBalancer to give you some options -- after all, you paid for it, you should get some support from the developer. :smile:

Raised the timeout to 61. Still getting the exception about once a minute. Console log has been logging for a day or so now. Probably should start a new one to get the information needed.

 

Am I looking for things like this_:

 

[14:53:33] serverInfo

[14:53:33] admin.listPlayers all

[14:53:33] mapList.getMapIndices

[14:53:59] serverInfo

[14:53:59] admin.listPlayers all

[14:53:59] punkBuster.pb_sv_command pb_sv_plist

[14:54:00] serverInfo

[14:54:00] serverInfo

[14:54:00] serverInfo

[14:54:00] serverInfo

[14:54:03] serverInfo

 

We're only experiencing issues with our procon lagging / giving exceptions when the server has something like over 25 people. At 64 it has just been terrible. So maybe the listPlayers is indeed at fault.

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

Originally Posted by Singh400*:

 

We figured out that we need to restart the procon layer in order to turn off a plugin, after unchecking it. Just simply unchecking it in procon doesn't seem to do it.

That is not intended behaviour. Disabling a plugin should (and does) disable it there and then. Rebooting to disable a plugin is unheard of.

 

Raised the timeout to 61. Still getting the exception about once a minute. Console log has been logging for a day or so now. Probably should start a new one to get the information needed.

 

Am I looking for things like this_:

 

[14:53:33] serverInfo

[14:53:33] admin.listPlayers all

[14:53:33] mapList.getMapIndices

[14:53:59] serverInfo

[14:53:59] admin.listPlayers all

[14:53:59] punkBuster.pb_sv_command pb_sv_plist

[14:54:00] serverInfo

[14:54:00] serverInfo

[14:54:00] serverInfo

[14:54:00] serverInfo

[14:54:03] serverInfo

 

We're only experiencing issues with our procon lagging / giving exceptions when the server has something like over 25 people. At 64 it has just been terrible. So maybe the listPlayers is indeed at fault.

I'd be more concerned about the serverInfo spam. I had a similar issue and it turned out to be a balancing plugin causing it. I would run a bare bones setup for a while and see what happens.
* 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.