Jump to content

Insane Limits - Examples


ImportBot

Recommended Posts

  • Replies 1.4k
  • Created
  • Last Reply

Originally Posted by boom-admin*:

 

@ micovery || PapaCharlie

 

Guys, I've discovered a "bug" if you want to call it that with the Hardcore / Softcore switch.

 

Here's my logic..

 

Based on Server maps && Gamemode, switch between Hardcore or softcore.

 

This works fine except for one issue... when players are in the server... the settings don't seem to take effect for those players. The settings are in effect for anyone who joins after the settings are set.

 

 

First Check "OnRoundOver" & "Code"

 

 

Code:

List<String> normal_conq_maps = new List<String>();

normal_conq_maps.Add("MP_Subway");
normal_conq_maps.Add("XP1_001");
normal_conq_maps.Add("XP1_003");
normal_conq_maps.Add("MP_013");
normal_conq_maps.Add("XP1_004");
normal_conq_maps.Add("MP_001");

bool_ hardcore = null;
if (server.Data.issetBool("hardcore")){
    hardcore = server.Data.getBool("hardcore");
}
    
if (server.NextGamemode == "ConquestSmall0" || server.NextGamemode == "ConquestSmall1"){
   if(normal_conq_maps.Contains(server.MapFileName) && (hardcore == true || hardcore == null)){
    plugin.SendGlobalMessage("Switching server to soft-core mode");
    plugin.ConsoleWrite("Switching server to soft-core mode");
    server.Data.setBool("hardcore", false);

/* Normal Setting */
    plugin.ServerCommand("vars.friendlyFire", "false");
    plugin.ServerCommand("vars.killCam", "true");
    plugin.ServerCommand("vars.hud", "true");
    plugin.ServerCommand("vars.3dSpotting", "true");
    plugin.ServerCommand("vars.nameTag", "true");
    plugin.ServerCommand("vars.3pCam", "true");
    plugin.ServerCommand("vars.regenerateHealth", "true");
    plugin.ServerCommand("vars.soldierHealth", "100");
    plugin.ServerCommand("vars.onlySquadLeaderSpawn", "false");
/* End Normal Settings */

}else{
   // plugin.SendGlobalMessage("Switching server to hard-core mode");
    plugin.ConsoleWrite("Switching server to hard-core mode");
    server.Data.setBool("hardcore", true);

/* Hardcore Setting */
    plugin.ServerCommand("vars.friendlyFire", "true");
    plugin.ServerCommand("vars.killCam", "false");
    plugin.ServerCommand("vars.hud", "false");
    plugin.ServerCommand("vars.3dSpotting", "false");
    plugin.ServerCommand("vars.nameTag", "false");
    plugin.ServerCommand("vars.3pCam", "false");
    plugin.ServerCommand("vars.regenerateHealth", "false");
    plugin.ServerCommand("vars.soldierHealth", "60");
    plugin.ServerCommand("vars.onlySquadLeaderSpawn", "true");
/* End Hardcore Settings */ 

}
}else if ( server.NextGamemode == "RushLarge0" && (hardcore == false || hardcore == null)){
    //plugin.SendGlobalMessage("Switching server to hard-core mode");
    plugin.ConsoleWrite("Switching server to hard-core mode");
    server.Data.setBool("hardcore", true);

/* Hardcore Setting */
    plugin.ServerCommand("vars.friendlyFire", "true");
    plugin.ServerCommand("vars.killCam", "false");
    plugin.ServerCommand("vars.hud", "false");
    plugin.ServerCommand("vars.3dSpotting", "false");
    plugin.ServerCommand("vars.nameTag", "false");
    plugin.ServerCommand("vars.3pCam", "false");
    plugin.ServerCommand("vars.regenerateHealth", "false");
    plugin.ServerCommand("vars.soldierHealth", "60");
    plugin.ServerCommand("vars.onlySquadLeaderSpawn", "true");
/* End Hardcore Settings */

}
How I chose to debug.

 

Had player connect to the server while it was in "normal" mode. Player played through round 1 of Rush on "normal" and when the second round came about, it switched to hardcore. The 2nd round of rush was set to hardcore however, the player still had a HUD which by server settings was disabled and showed in Battlelog as "Off".

 

I then had the player disconnect and reconnect to the server and upon reconnecting... the hud no longer showed.

 

Is there a way to force the settings to be applied to the current connections? It appears that when the client connects to the server, it grabs some of the settings and stores them for all subsequent rounds. (hud mainly) and applies that setting regardless of that setting being changed dynamically from round to round or even mid round for that matter.

 

The solution as far as I can tell at this point is to have the current connections drop, then rejoin for the new settings to take effect... but this is not really a practical solution.

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

Originally Posted by PapaCharlie9*:

 

Is there a way to force the settings to be applied to the current connections? It appears that when the client connects to the server, it grabs some of the settings and stores them for all subsequent rounds. (hud mainly) and applies that setting regardless of that setting being changed dynamically from round to round or even mid round for that matter.

 

The solution as far as I can tell at this point is to have the current connections drop, then rejoin for the new settings to take effect... but this is not really a practical solution.

Unfortunately, this is not a bug in PRoCon or Insane Limits. It is a limitation of the BF3 server/protocol.

 

I say unfortunately because, if it was a PRoCon or Insane Limits bug, we could attempt a fix.

 

According to the protocol doc, vars.hud is supposed to take affect, "on round restart". As you and others have noticed, it in fact takes place for any subsequent joins in the current round and any continuing joins don't change. There may be other settings that behave like this, but vars.hud does for sure.

 

Changing map level or restarting the round doesn't seem to help. Only disconnecting and rejoining seems to make a difference.

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

Originally Posted by boom-admin*:

 

Sigh... the dreaded "it's their fault" answer. Such disarray in the administration of this game on EA / DICE's part.

 

Here is a new question regarding this. Do you happen to know the timing of the RoundOver event?

 

I.e.

 

RoundOver event sent

 

--- Gap ---

 

RoundStart event sent

 

 

When does RoundStart event get sent? What I read was that it doesn't get sent until the first player spawns but I'm not sure about that.

 

As a possible work around to this hud issue & according to the protocal doc, it only works after a "round RESTART" but makes no mention of any other event.

 

In your opinion, would it be possible to get this working in this order?

 

1. RoundOver event sent, Change settings

2. Map loads, send restart command

 

Depending on when the "RoundStart" event is sent... it would dictate when the restart command could be sent. Preferably it would be prior to the player actually seeing the UI as not to make it look like the server is having issues.

 

Thank you for all you do Papa, I know you don't hear it as much as you deserve!

 

*** Edit ***

 

Also, to be crystal clear, I never tried restarting the round... I had the player naturally progress the round to test the RoundOver event to see if it would work rather than the RoundStart event.

 

Absolutely amazing how most everything else is instant or after map switch.. yet this isn't.

 

--------------

 

Just for reference: (Hardcore settings and when they take effect)

 

Friend Fire === round restart

KillCam === map switch

Hud === round restart

3d Spot === map switch

Name Tag === map switch

3p Cam === Unknown

Reg Health === Instant

Sol health === Instant

SQ Lead Spawn === Instant

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

Originally Posted by QUACK-Major-Pain*:

 

@ micovery || PapaCharlie

 

Guys, I've discovered a "bug" if you want to call it that with the Hardcore / Softcore switch.

 

Here's my logic..

 

Based on Server maps && Gamemode, switch between Hardcore or softcore.

 

This works fine except for one issue... when players are in the server... the settings don't seem to take effect for those players. The settings are in effect for anyone who joins after the settings are set.

 

 

First Check "OnRoundOver" & "Code"

 

 

Code:

List<String> normal_conq_maps = new List<String>();

normal_conq_maps.Add("MP_Subway");
normal_conq_maps.Add("XP1_001");
normal_conq_maps.Add("XP1_003");
normal_conq_maps.Add("MP_013");
normal_conq_maps.Add("XP1_004");
normal_conq_maps.Add("MP_001");

bool_ hardcore = null;
if (server.Data.issetBool("hardcore")){
    hardcore = server.Data.getBool("hardcore");
}
    
if (server.NextGamemode == "ConquestSmall0" || server.NextGamemode == "ConquestSmall1"){
   if(normal_conq_maps.Contains(server.MapFileName) && (hardcore == true || hardcore == null)){
    plugin.SendGlobalMessage("Switching server to soft-core mode");
    plugin.ConsoleWrite("Switching server to soft-core mode");
    server.Data.setBool("hardcore", false);

/* Normal Setting */
    plugin.ServerCommand("vars.friendlyFire", "false");
    plugin.ServerCommand("vars.killCam", "true");
    plugin.ServerCommand("vars.hud", "true");
    plugin.ServerCommand("vars.3dSpotting", "true");
    plugin.ServerCommand("vars.nameTag", "true");
    plugin.ServerCommand("vars.3pCam", "true");
    plugin.ServerCommand("vars.regenerateHealth", "true");
    plugin.ServerCommand("vars.soldierHealth", "100");
    plugin.ServerCommand("vars.onlySquadLeaderSpawn", "false");
/* End Normal Settings */

}else{
   // plugin.SendGlobalMessage("Switching server to hard-core mode");
    plugin.ConsoleWrite("Switching server to hard-core mode");
    server.Data.setBool("hardcore", true);

/* Hardcore Setting */
    plugin.ServerCommand("vars.friendlyFire", "true");
    plugin.ServerCommand("vars.killCam", "false");
    plugin.ServerCommand("vars.hud", "false");
    plugin.ServerCommand("vars.3dSpotting", "false");
    plugin.ServerCommand("vars.nameTag", "false");
    plugin.ServerCommand("vars.3pCam", "false");
    plugin.ServerCommand("vars.regenerateHealth", "false");
    plugin.ServerCommand("vars.soldierHealth", "60");
    plugin.ServerCommand("vars.onlySquadLeaderSpawn", "true");
/* End Hardcore Settings */ 

}
}else if ( server.NextGamemode == "RushLarge0" && (hardcore == false || hardcore == null)){
    //plugin.SendGlobalMessage("Switching server to hard-core mode");
    plugin.ConsoleWrite("Switching server to hard-core mode");
    server.Data.setBool("hardcore", true);

/* Hardcore Setting */
    plugin.ServerCommand("vars.friendlyFire", "true");
    plugin.ServerCommand("vars.killCam", "false");
    plugin.ServerCommand("vars.hud", "false");
    plugin.ServerCommand("vars.3dSpotting", "false");
    plugin.ServerCommand("vars.nameTag", "false");
    plugin.ServerCommand("vars.3pCam", "false");
    plugin.ServerCommand("vars.regenerateHealth", "false");
    plugin.ServerCommand("vars.soldierHealth", "60");
    plugin.ServerCommand("vars.onlySquadLeaderSpawn", "true");
/* End Hardcore Settings */

}
How I chose to debug.

 

Had player connect to the server while it was in "normal" mode. Player played through round 1 of Rush on "normal" and when the second round came about, it switched to hardcore. The 2nd round of rush was set to hardcore however, the player still had a HUD which by server settings was disabled and showed in Battlelog as "Off".

 

I then had the player disconnect and reconnect to the server and upon reconnecting... the hud no longer showed.

 

Is there a way to force the settings to be applied to the current connections? It appears that when the client connects to the server, it grabs some of the settings and stores them for all subsequent rounds. (hud mainly) and applies that setting regardless of that setting being changed dynamically from round to round or even mid round for that matter.

 

The solution as far as I can tell at this point is to have the current connections drop, then rejoin for the new settings to take effect... but this is not really a practical solution.

If you change from soft to hardcore, all players need to reconnect to reset all players settings so everyone is equal.

Game bug and nothing with Procon.

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

Originally Posted by pracpost*:

 

It's possible, only limitation is that if the M320 is attached to the weapon (underslug), it won't register as M320.

 

This limit will warn the player on first Suicide, and Kick him on second. It will also send a global message to server saying that he was kicked.

 

Set limit to evaluate OnSuicide, and set action to None

 

Set first_check to this Expression:

 

Code:

Regex.Match(kill.Weapon, @"(RPG|SMAW|M320)", RegexOptions.IgnoreCase).Success
Set second_check to this Code:

 

Code:

double count = limit.Activations(player.Name);
	
	if (count == 1)
	    plugin.SendGlobalMessage(plugin.R("%p_n%, do not suicide with %w_n%, next time kick!"));
	else if (count == 2)
	{
            plugin.SendGlobalMessage(plugin.R("%p_n%, was kicked for suiciding with %w_n%!"));
            plugin.KickPlayerWithMessage(player.Name, plugin.R("Kicked for suiciding with %w_n%!"));
	}

	return false;
When you paste the Code part into the second_check field, make sure to click on the down-arrow, on the field, so that it expands and allows you to paste multi-line.
is there any way to use this rule only specific map? i want it only on metro, rest servers without... Can you help please.

 

EDIT: maybe i was find it

 

Regex.Match(kill.Weapon, @"m320|smaw|rpg", RegexOptions.IgnoreCase).Success && server.MapFileName.StartsWith("MP_Subway")

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

Originally Posted by boom-admin*:

 

@pracpost

 

Use this as the second check...

 

Code:

double count = limit.Activations(player.Name);
if(server.MapFileName == "MP_Subway"){
	if (count == 1){
		plugin.SendGlobalMessage(plugin.R("%p_n%, do not suicide with %w_n%, next time kick!"));
	}else if (count == 2){
		plugin.SendGlobalMessage(plugin.R("%p_n%, was kicked for suiciding with %w_n%!"));
		plugin.KickPlayerWithMessage(player.Name, plugin.R("Kicked for suiciding with %w_n%!"));
	}
}

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

Originally Posted by Dudenell*:

 

This limit kills for RPG/SMAW/M320 on first violation, kicks on second violation, if player comes back, and uses it again one more time, player is banned.

 

Set limit to evaluate OnKill, set action to None

 

Set first_check to this Expression:

 

Code:

Regex.Match(kill.Weapon, @"(m320|smaw|rpg)", RegexOptions.IgnoreCase).Success
Set second_check to this Code:

 

Code:

if (limit.Data.issetBool(player.Name))
  {
     plugin.SendGlobalMessage(plugin.R("%p_n% has been banned for using %w_n%, after a kick!"));
     plugin.PBBanPlayerWithMessage(PBBanDuration.Temporary, player.Name, 15, plugin.R("%p_n% you have been banned for 15 minutes for using %w_n%"));
     limit.Data.unsetBool(player.Name);
  }
  
  int count = (int) limit.Activations(player.Name);
   
  if (count == 1)
  {
      plugin.SendGlobalMessage(plugin.R("%p_n% do not use %w_n%!"));
      plugin.KillPlayer(player.Name);
  }
  else if (count == 2)
  {
     plugin.SendGlobalMessage(plugin.R("%p_n% has been kicked for using %w_n%"));
     plugin.KickPlayerWithMessage(player.Name, plugin.R("%p_n% you have been kicked for using %w_n%"));
     
     if (!limit.Data.issetBool(player.Name))
         limit.Data.setBool(player.Name, true);
  }
I have to ask, I'm trying to modify this so that I can create a claymore rule that will kill then kick a player if they use more than 4 claymores per round. Does this number reset after each round or is it as long as the player stays on the server? thanks
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by killengage*:

 

Hello, I really like this plugin !! I have 2 questions.

 

1. How can i send two messages , so a message to the player who's typing votekick and a global message ? I'm using the template for the votekick

 

if (remain == 1)

plugin.SendGlobalMessage(target.Name + " is about to get vote-kicked, 1 more vote needed");

else if (remain > 0)

plugin.SendGlobalMessage(plugin.R("your vote against " + target.Name + " was counted, " + remain + " more needed to kick"));

And here a plugin.SendSquadMessage(player.TeamId, player.SquadId, plugin.R("player.Name, your vote against " + target.Name + " was counted, " + remain + " more needed to kick

2. How can i achieve that the votekicker is only active when a certain condition is met, for instance. Create a custom-list with the admin names and disable the votekicker when an admin is online. If not online then enable.

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

Originally Posted by Dudenell*:

 

I have to ask, I'm trying to modify this so that I can create a claymore rule that will kill then kick a player if they use more than 4 claymores per round. Does this number reset after each round or is it as long as the player stays on the server? thanks

figured most of it out but I'm still having an issue

Code:

if (limit.Data.issetBool(player.Name))
  {
     plugin.SendGlobalMessage(plugin.R("%p_n% has been banned for using claymores after a kick!"));
     plugin.PBBanPlayerWithMessage(PBBanDuration.Temporary, player.Name, 15, plugin.R("You have been banned for 15 minutes for using claymores after a kick"));
     limit.Data.unsetBool(player.Name);
  }
  
  int count = (int) limit.Activations(player.Name);
   
  if (count <=  3)
  {
	plugin.SendSquadMessage(player.TeamId, player.SquadId, ("%p_n% , you have " + count + " of 3 Claymore kills - more and you will be killed and then kicked"));
    
  }
  else if (count == 4 || count == 5)
  {
	plugin.SendSquadMessage(player.TeamId, player.SquadId, ("%p_n%, you have NO Claymore kills left, more and you will be kicked!"));
	plugin.SendGlobalMessage(plugin.R("%p_n% has been killed for excessive claymore use!"));
	plugin.KillPlayer(player.Name);
  }
  else if (count == 6)
  {
     plugin.SendGlobalMessage(plugin.R("%p_n% has been kicked for excessive claymores%"));
     plugin.KickPlayerWithMessage(player.Name, plugin.R("You have been kicked for using too many claymores"));
	 
	if (!limit.Data.issetBool(player.Name))
		limit.Data.setBool(player.Name, true);
  }
Basically it's not displaying the player name, just displaying %p_n%. Is there something I need to include to go over the players name?

Thanks in advance.

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

Originally Posted by PapaCharlie9*:

 

I reply to multiple questions in this post, so scan the whole thing for your answer.

 

Do you happen to know the timing of the RoundOver event?

...

 

In your opinion, would it be possible to get this working in this order?

 

1. RoundOver event sent, Change settings

2. Map loads, send restart command

That wouldn't fix the problem for continuing players. They still have to disconnect and rejoin.

 

Insane Limits OnRoundOver is based on the OnRoundOverTeamScores event in PRoCon. I'm not exactly sure what order the three RoundOver events arrive according to the BF3 protocol (you can find out for yourself by looking at your console.log), but basically at some point early on when players are being shown their ribbons and awards and the team scoreboard after a round, the event is sent and Insane Limits dispatches it immediately.

 

OnRoundStart definitely waits until the first player spawns. If all players leave at the end of the previous round, you don't get an OnRoundStart for the next round.

 

Hello, I really like this plugin !! I have 2 questions.

 

1. How can i send two messages , so a message to the player who's typing votekick and a global message ? I'm using the template for the votekick

 

2. How can i achieve that the votekicker is only active when a certain condition is met, for instance. Create a custom-list with the admin names and disable the votekicker when an admin is online. If not online then enable.

#1, your red code looks good, except it looks like the "); at the end got cut off. You can't send chat to a single player, but you can send to his squad.

 

#2 Use first_check Code for controlling when the limit is activated. There are several limits that use an admin list, you can steal code from there. Look at Admin Welcome Messages as a starting point. Not that it's first_check is an Expression, you want Code, which means you have to structure it as an if (Expression) { return false; } code. If the player.Name is in the admin list, return false, which will prevent the second_check Code from being executed.

 

figured most of it out but I'm still having an issue

 

Basically it's not displaying the player name, just displaying %p_n%. Is there something I need to include to go over the players name?

Thanks in advance.

That's a bug in Insane Limits. Use player.Name instead of %p_n% and it should work. Only %p_n% is bugged, every other replacement code works fine.

 

BTW, the limit.Activations count is reset every round, to answer your previous question. If you want use a count that goes across rounds, use limit.ActivationsTotal(player.Name). That count continues for as long as PRoCon runs and the plugin is enabled.

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

Originally Posted by kef*:

 

Hello,

 

I was wondering if there is possibility to add rule that let players kill other players in vehicles using rpg/smaw but kill/kick when they kill infantry using rpg/smaw.

 

I was trying modify example "No RPG/M320 Kicker" but I have no idea how to exclude players that kill somebody in a vehicle.

 

ps. If this was already discussed sorry.

pps. My first post :tongue:

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

Originally Posted by Dudenell*:

 

Hello,

 

I was wondering if there is possibility to add rule that let players kill other players in vehicles using rpg/smaw but kill/kick when they kill infantry using rpg/smaw.

 

I was trying modify example "No RPG/M320 Kicker" but I have no idea how to exclude players that kill somebody in a vehicle.

 

ps. If this was already discussed sorry.

pps. My first post :tongue:

There is no way to do this as BF3 doesn't report whether or not it's an infantry kill or an vehicle kill
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Kiffkiller*:

 

Hi all,

I don't want sniper at my TDM Server. But I don't get it working to kick all sniper. I need to know how all sniper rifles are known in procon:

 

( Regex.Match(kill.Weapon, @"(M320|RPG-7|SMAW|Usas-12|SVD|SV-98|SKS|M40A5|M98B|M39 EMR|MK11 MOD 0|QBU-88|L96)", RegexOptions.IgnoreCase).Success )

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

Originally Posted by sorinnana*:

 

Hi all,

I don't want sniper at my TDM Server. But I don't get it working to kick all sniper. I need to know how all sniper rifles are known in procon:

 

( Regex.Match(kill.Weapon, @"(M320|RPG-7|SMAW|Usas-12|SVD|SV-98|SKS|M40A5|M98B|M39 EMR|MK11 MOD 0|QBU-88|L96)", RegexOptions.IgnoreCase).Success )

go to your procon folder/configs/BF3.def u can see there all the weapons codes
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

Hi all,

I don't want sniper at my TDM Server. But I don't get it working to kick all sniper. I need to know how all sniper rifles are known in procon:

 

( Regex.Match(kill.Weapon, @"(M320|RPG-7|SMAW|Usas-12|SVD|SV-98|SKS|M40A5|M98B|M39 EMR|MK11 MOD 0|QBU-88|L96)", RegexOptions.IgnoreCase).Success )

Right, look in BF3.def. The name in game is not always the same as what's used in PRoCon. Since I have an old copy of BF3 (R-15), you should double check my changes below:

 

Code:

( Regex.Match(kill.Weapon,  @"(M320|RPG-7|SMAW|Usas-12|SVD|SV98|SKS|M40A5|Model98B|M39|MK11|QBU-88|L96)", RegexOptions.IgnoreCase).Success )
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Singh400*:

 

This limit will check for how fast a player makes kills, and perform whatever action you want, if the player exceeds the rate you specify.

 

 

Set the limit to evaluate for OnKill, and set the action to Kick

 

Set first_check to this Expression:

 

Code:

(true)
Set the second_check to this Expression:

 

Code:

( limit.Activations(player.Name, TimeSpan.FromSeconds(30)) >  10 )
In this example, the rate is +10 kills, in 30 seconds. You may want to adjust this rate as you wish.

 

 

What if you wanted to check for the Headshot rate ? Well you can do that as well. In that case, just modify the first_check Expression to activate only for Headshots like this:

 

Code:

( kill.Headshot == true)
Guys I'm using the above limit and it works perfectly and has caught two blatant hackers since I enabled it. However tonight it got falsely triggered. Here is the code I'm using:-

Code:

( limit.Activations ( player.Name , TimeSpan.FromSeconds ( 60 ) ) > 20 )
I'm thinking of increasing the 20 kills to 25 kills or somehow adjust the code so the player has to be breach it twice before any action is taken. If I want to do the latter would the code b the following?

Code:

( limit.Activations >= 2 ( player.Name , TimeSpan.FromSeconds ( 60 ) ) > 20 )
Thanks!
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Mandizzy*:

 

Singh400, I use this "( limit.Activations(player.Name, TimeSpan.FromSeconds(10)) >= 10 )". It works pretty good for blatant hackers who come and try their C4 or Knife kills etc. I have actually caught and reported quite a few. The only thing to keep in mind is what kind of maps you run. I run this on 24/7 firestorm map and legit players cannot ever get that many kills within 10 seconds. The max you can get is if you blow up a full transport chopper and a full tank with say Javs and even then it comes to 8 kills max. If you're running Metro conq then you might have to try a different strategy.

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

Originally Posted by PapaCharlie9*:

 

Code:

( limit.Activations >= 2 ( player.Name , TimeSpan.FromSeconds ( 60 ) ) > 20 )
and

The only thing to keep in mind is what kind of maps you run.

I agree with Mandizzy. If you run a rotation of maps and you want a more accurate/smart limit, you should make it be adaptive to the current map and mode.

 

Singh400, your syntax is not correct and that's probably not the best way to do it anyway.

 

You can either make it adaptive to map/mode, or, you can add additional tests once the threshhold is met. For example, once they meet the 60>20 threshold, add some additional tests like this (second_check Code):

 

Code:

if (limit.Activations( player.Name , TimeSpan.FromSeconds ( 60 ) ) > 20) {
   if (player.TimeRound > (2*60) && player.KpmRound > 20 && player.KdrRound > 20.0) {
       // warn/kick/ban, whatever
   }
}
That says, after someone has gotten 20 kills in the last 60 seconds, check if they have been playing for more than 2 minutes and their KPM is over 20 and their KDR is over 20.

 

I'll post an example for how to make this check, or any check, adaptive by game map/mode later.

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

Originally Posted by PapaCharlie9*:

 

how can i back up the limits? what file shoould i grab?

It depends on whether you have enabled custom storage or not.

 

If you are using default storage (use_custom_storage False)

 

Find your server's IP_Port.cfg file in procon/Configs. For example, if your server's IP is 192.40.1.200 and your port is 47700, look for 192.40.1.200_47700.cfg in procon/Configs.

 

What I do is just copy the entire Configs folder. This method is best if you have more than one server controlled by the same instance of PRoCon.

 

If you are using custom storage (use_custom_storage True)

 

If you leave the value of limits_file as "InsaneLimits" and your IP is 192.40.1.200 and your port is 47700, look for the .conf file in procon/Plugins/BF3/InsaneLimits_192.40.1.200_47700.conf.

 

If you changed limits_file to a path like, "/User/Mootart/My/Limits", look for your file at /User/Mootart/My/Limits.conf.

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

Originally Posted by Singh400*:

 

I'm using a Bad Words limit, but it seems to picking up words that I haven't specified?

 

First Check Code:

Code:

List<String> bad_words = new List<String>();
bad_words.Add("nigger");
bad_words.Add("paki");
bad_words.Add("cunt");
bad_words.Add("nigga");
bad_words.Add("jew");

String[] chat_words = Regex.Split(player.LastChat, @"\s+");
    
foreach(String chat_word in chat_words)
	foreach(String bad_word in bad_words)
		if (Regex.Match(chat_word, "^"+bad_word+"$", RegexOptions.IgnoreCase).Success)
			plugin.SendGlobalMessage(plugin.R("%p_n%, please stop using the term "+bad_word+"! This is your only warning!"));
				return true;
Second Check Code:

Code:

double count = limit.Activations(player.Name);

if (count == 2)
{
	plugin.KickPlayerWithMessage(player.Name, plugin.R("[Auto-Admin] Bad Language"));
	plugin.SendGlobalMessage(plugin.R("%p_n% was kicked for using a prohibted word!"));
}

return false;
This limit triggers when using twat, prick & nubbed too. I don't know why though? Any ideas as to what I've done wrong?
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Fl0ppyF*:

 

I've a rather strange problem and hope someone can help me. We're running a shotgun/pistol/knife only TDM server, and use a limit to enforce these rules. Everything worked so far, but today Insane Limits won't make use of the limit eventhough nothing has changed.

 

Here's is the code I use:

limit_evaluation OnKill

first_check Expression

Code:

! Regex.Match(kill.Weapon, @"(M1911|M9|M93R|Taurus|MP412REX|MP443|Glock|M67|870MCS|M1014|DAO-12|jackhammer|M26Mass|Melee|KNIFE|Siaga20k)", RegexOptions.IgnoreCase).Success
second_check Code

Code:

double count = limit.Activations(player.Name);

     if (count == 1)
         plugin.SendGlobalMessage(plugin.R("%p_n%, Shotgun, Pistol, Knife only! Next time kick!"));
     else if (count > 1)
         plugin.KickPlayerWithMessage(player.Name, plugin.R("%p_n%, kicked you for using %w_n% on shotgun, pistol,knife only server"));
     
     return false;
Any ideas why it all of a sudden stopped working? I'm running Insane Limits 0.0.0.8-patch-3, the layer is located on a root server running 24/7. The only change was the daily restart of the server and Procon, but that never influenced any plugins or limits. I set debug level to 5 but there are no error messages displayed.

 

EDIT:

 

Nevermind, deleted the limit and added it again and now it works. Still strange that it stopped working. :huh:

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

Originally Posted by PapaCharlie9*:

 

Nevermind, deleted the limit and added it again and now it works. Still strange that it stopped working. :huh:

If that happens again, either restart PRoCon or just disable and then re-enable Insane Limits or the specific limit and force a recompile. Sometimes it gets stuck and you have to reset it. No need to delete the limit.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

I'm using a Bad Words limit, but it seems to picking up words that I haven't specified?

 

First Check Code:

Code:

List<String> bad_words = new List<String>();
bad_words.Add("nigger");
bad_words.Add("paki");
bad_words.Add("cunt");
bad_words.Add("nigga");
bad_words.Add("jew");

String[] chat_words = Regex.Split(player.LastChat, @"\s+");
    
foreach(String chat_word in chat_words)
	foreach(String bad_word in bad_words)
		if (Regex.Match(chat_word, "^"+bad_word+"$", RegexOptions.IgnoreCase).Success)
			plugin.SendGlobalMessage(plugin.R("%p_n%, please stop using the term "+bad_word+"! This is your only warning!"));
				return true;
Second Check Code:

Code:

double count = limit.Activations(player.Name);

if (count == 2)
{
	plugin.KickPlayerWithMessage(player.Name, plugin.R("[Auto-Admin] Bad Language"));
	plugin.SendGlobalMessage(plugin.R("%p_n% was kicked for using a prohibted word!"));
}

return false;
This limit triggers when using twat, prick & nubbed too. I don't know why though? Any ideas as to what I've done wrong?
It should trigger on all chat. If I type, "join my squad!" twice, I should be kicked.

 

The code is missing { braces } around the indented code blocks. The final "return true" happens for all chat, because it is not part of the previous code blocks.

 

To fix the code, it should be properly blocked, like this:

 

Code:

List<String> bad_words = new List<String>();
bad_words.Add("nigger");
bad_words.Add("paki");
bad_words.Add("cunt");
bad_words.Add("nigga");
bad_words.Add("jew");

String[] chat_words = Regex.Split(player.LastChat, @"\s+");
    
foreach(String chat_word in chat_words) 
{
	foreach(String bad_word in bad_words)
	{
		if (Regex.Match(chat_word, "^"+bad_word+"$", RegexOptions.IgnoreCase).Success)
		{
			plugin.SendGlobalMessage(plugin.R("%p_n%, please stop using the term "+bad_word+"! This is your only warning!"));
			return true;
		}
	}
}
If code is indented, there should be { braces } around all the code inside the indent. There is a short hand notation for C# that allows you to drop the { braces } if the indented block only has one line of code. Unfortunately, in your case, the inner block has 2 lines of code. There is no compilation error to let you know you are missing braces, the code just fails in mysterious ways. Thus, as a best practice, always put braces around indented code blocks, even if there is only one line of code. You can never fall victim to this error if you always use braces.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by labratt*:

 

can anyone tell me how i can display a message saying "nice shot! %k_fn%" when a user dies then types !ns

 

 

under insane limits i setup a new Limit and set OnAnyChat player.LastChat.StartsWith("!ns")

or

when they type "!ns techkiller" techkiller is the players name that killed them. then is display a message with the name that someone entered?

* 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.