Jump to content

Insane Limits - Examples


Recommended Posts

Originally Posted by micovery*:

 

so if i put a player on the whitelist a a battlog stats will not check this player right?

Everyone will be checked, just that that the last moment, when the Kick/Ban command is sent, the plugin will ignore it for those players that are white-listed.

 

Nevermind, I thought it was the plugin's global white-list. He is using a custom list, so yes your assumption is correct.

 

I had to change the coding to 2 checks because I got errors using "if".

 

Hopefully someone knowing the coding better than me can confirm that it will work.

It should work all on a single check ... something like this:

 

Code:

if ( !plugin.isInList(player.Name, "stats_white_list") &&
     (player.Spm > 951 || player.Kdr > 5.01 || player.KillStreakBonus > 200 || player.Kpm > 10 || player.Skill > 1500)

   )
    return true;
else
    return false;
I have made the code above use a verbose if statement, but you could really put the entire IF condition as a single Expression.

 

 

I will go later tonight through the new examples, (including PapaCharlie's ones), and index them.

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

Originally Posted by QUACK-Major-Pain*:

 

Everyone will be checked, just that that the last moment, when the Kick/Ban command is sent, the plugin will ignore it for those players that are white-listed.

 

Nevermind, I thought it was the plugin's global white-list. He is using a custom list, so yes your assumption is correct.

 

 

 

It should work all on a single check ... something like this:

 

Code:

if ( !plugin.isInList(player.Name, "stats_white_list") &&
     (player.Spm > 951 || player.Kdr > 5.01 || player.KillStreakBonus > 200 || player.Kpm > 10 || player.Skill > 1500)

   )
    return true;
else
    return false;
I have made the code above use a verbose if statement, but you could really put the entire IF condition as a single Expression.

 

 

I will go later tonight through the new examples, (including PapaCharlie's ones), and index them.

As an Expression it gives errors:

 

Code:

[14:40:21 00] [Insane Limits] ERROR: 4 errors compiling Expression
[14:40:21 00] [Insane Limits] ERROR: (CS1525, line: 22, column: 23):  Invalid expression term 'if'
[14:40:21 00] [Insane Limits] ERROR: (CS1525, line: 28, column: 18):  Invalid expression term ')'
[14:40:21 00] [Insane Limits] ERROR: (CS1002, line: 28, column: 27):  ; expected
[14:40:21 00] [Insane Limits] ERROR: (CS1525, line: 28, column: 27):  Invalid expression term ')'
Changing it to Code compiled fine.

 

Will change my original post.

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

Originally Posted by micovery*:

 

As an Expression it gives errors:

 

Code:

[14:40:21 00] [Insane Limits] ERROR: 4 errors compiling Expression
[14:40:21 00] [Insane Limits] ERROR: (CS1525, line: 22, column: 23):  Invalid expression term 'if'
[14:40:21 00] [Insane Limits] ERROR: (CS1525, line: 28, column: 18):  Invalid expression term ')'
[14:40:21 00] [Insane Limits] ERROR: (CS1002, line: 28, column: 27):  ; expected
[14:40:21 00] [Insane Limits] ERROR: (CS1525, line: 28, column: 27):  Invalid expression term ')'
Changing it to Code compiled fine.

 

Will change my original post.

For expression, take out everything, and just leave the main part within the parenthesis (in bold green)

 

Code:

if ( [b]SOME_EXPRESSION[/b] )
   return true
else
  return false;
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Singh400*:

 

I have to agree. Just use player.Spm (score per minute) and player.Kpm (kills per minute). There will be a very high correspondence between high values of those stats and a rapid increase of rank. You can look at Battlelog Spm Kicker* as a starting point -- which, not coincidentally, was written by our friend Singh400.

Eh, very simple code. I struggle when it gets complicated. I don't have much knowledge of C#.

 

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.
Can I do it so a player has to breach this limit twice and then action is taken?
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Singh400*:

 

Can I do it so a player has to breach this limit twice and then action is taken?

What if I wrapped it again in limit.Activations?

 

So my original code:Code:

( limit.Activations ( player.Name, TimeSpan.FromSeconds ( 60 ) ) >  20 )
Would become:Code:
( limit.Activations ( limit.Activations ( player.Name, TimeSpan.FromSeconds ( 60 ) ) >  20 ) >= 2 )
Would that work?
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Singh400*:

 

Would anyone be interested in a "make room for clan member" in-game command? Whenever our server gets full and there is a queue of players and one of our mates wants to get on, we manually pick and kick players until they get on. I'd rather that the reserved list worked, but whatever. It occurs to me that the picking-and-kicking part can be automated. We usually use some simple conditions, like:

 

* Not in a squad

* Low score/kills

* Kick from the winning team before the losing team, but keep teams balanced (or maybe this should be the other way around, if the replacement player will help the losing team_)

* If the round is about to end, don't do any kicking, just wait

 

Exactly the sort of conditions that could be made into an Insane Limit.

 

I assume player.SquadId is 0 if the player is not in a squad, so that part is easy. Low score/kills super easy. Winning team over losing team, easy. Near end of round, easy.

 

The whitelists can be used to exempt certain tags or player names from the pick-and-kicker.

 

The command could be something like:

 

!makeroom

 

It will apply the conditions and kick one player. Type the command again to kick another, until your bro gets on.

 

If there's sufficient interest, I'll write this example up.

Digging this out of the thread....

 

I use Insane Balancer to semi-automate this. All I do is issue the command !show idle (in the plugin console, not in-game, it doesn't work in-game unfortunately) and it checks all the players against the following criteria:-

  • last_kill_time = 300 seconds
  • last_death_time = 300 seconds
  • last_spawn_time = 300 seconds
  • last_chat_time = 300 seconds
  • last_score_time = 300 seconds
Then a list of players are returned, and then I just manually kick them.

 

I'm not sure if Insane Balancer and Insane Limits can "talk" to each other. But it would be great if Insane Limits could call !show idle and execute it from in-game.

 

In my head I see something like:-

 

IL = Insane Limits

IB = Insane Balancer

 

!show idle (in-game) --> activates IL --> IL talks to IB & executes the command --> if a valid list is returned --> then ingame the list is printed and IL ask you to confirm kick

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

Originally Posted by HexaCanon*:

 

continue to post #636* and post #642*

 

i dont know if someone else gave an answer but i will write it in anyway.

 

- under the settings set use_custom_lists to true

 

- under Lists Manager, set new_list to true

 

- then if you scroll down you will find a new limit like section but instead of it saying Limit #X it will say List #X

 

- under that section setup these settings

Code:

List_X_name : [i]any name you want[/i] (recommended : [b]battlelog_statscheck_whitelist[/b])
List_X_data :[i] setup the soldier names here (example : hexacanon, Mootart, etc)[/i]
- now create a new limit with these settings

 

- Limit_x_evaluation : OnJoin

 

- Limit_x_first_check : Code

 

? Limit_x_first_check_code

 

Code:

if (!plugin.isInList(player.Name, "battlelog_statscheck_whitelist")) {
	if (player.Spm > 951 || player.Kdr > 5.01 || player.KillStreakBonus > 200 || player.Kpm > 10 || player.Skill > 1500) {
		in this space check out below for actions
}}
- red part : i believe this is not supported by the plugin as i can not find it in the plugin details so simply delete it if it was confirmed by micovery

 

- green part depends on what action you want to use on this player, tell me what you want and i will give it to you

 

- i made this really fast i just woke up and i hope it does not have mistakes.

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

Originally Posted by Mootart*:

 

continue to post #636* and post #642*

 

i dont know if someone else gave an answer but i will write it in anyway.

 

- under the settings set use_custom_lists to true

 

- under Lists Manager, set new_list to true

 

- then if you scroll down you will find a new limit like section but instead of it saying Limit #X it will say List #X

 

- under that section setup these settings

Code:

List_X_name : [i]any name you want[/i] (recommended : [b]battlelog_statscheck_whitelist[/b])
List_X_data :[i] setup the soldier names here (example : hexacanon, Mootart, etc)[/i]
- now create a new limit with these settings

 

- Limit_x_evaluation : OnJoin

 

- Limit_x_first_check : Code

 

? Limit_x_first_check_code

 

Code:

if (!plugin.isInList(player.Name, "battlelog_statscheck_whitelist")) {
	if (player.Spm > 951 || player.Kdr > 5.01 || player.KillStreakBonus > 200 || player.Kpm > 10 || player.Skill > 1500) {
		in this space check out below for actions
}}
- red part : i believe this is not supported by the plugin as i can not find it in the plugin details so simply delete it if it was confirmed by micovery

 

- green part depends on what action you want to use on this player, tell me what you want and i will give it to you

 

- i made this really fast i just woke up and i hope it does not have mistakes.

Thank bro... your the best.. just woke up to hehehhe,....
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by HexaCanon*:

 

Thank bro... your the best.. just woke up to hehehhe,....

i think a code like this

Code:

if (!plugin.isInList(player.Name, "battlelog_statscheck_whitelist")) {
	if (player.Spm > 951 || player.Kdr > 5.01 || player.KillStreakBonus > 200 || player.Kpm > 10 || player.Skill > 1500) {
		return true;
}}

return false;
and then you can set actions to whatever you want from the limit_x_new_action
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Satanja*:

 

You would have to create your own math equation of time/rank.

Then use it as a limit once you esablish what you think is legit.

 

eg. time/rank

...

 

 

Learn to quote replies MajorPain :ohmy:

 

And Satanja I don't think this is a good idea at all. Filtering out insanely high SPMs would be easier and more efficient.

Hehe, yeah I had a bit of trouble finding that reply in the midst of everything.

 

I'll give it a go and then just log the hits for a while and compare stats manually to see if it actually points out some blatant cheats.

 

They are getting better at staying under the radar on these limits, tuning their cheats to stay close to stats of players that are just good. For example checking kills pr minute in a match coupled with k/d, then they just stay at something reasonable and I log in to see some guy with 100+ kills and everyone yelling hack. All the hacks I've had mostly never triggers high SPM anymore.

 

I have IL setup so it notifies me when someone types hack/cheat/aimbot, but there's always some kid yelling cheat everytime someone steps on his epeen, so that's getting tiresome and you gotta take a break sometime :biggrin:

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

Originally Posted by HexaCanon*:

 

Hehe, yeah I had a bit of trouble finding that reply in the midst of everything.

 

I'll give it a go and then just log the hits for a while and compare stats manually to see if it actually points out some blatant cheats.

 

They are getting better at staying under the radar on these limits, tuning their cheats to stay close to stats of players that are just good. For example checking kills pr minute in a match coupled with k/d, then they just stay at something reasonable and I log in to see some guy with 100+ kills and everyone yelling hack. All the hacks I've had mostly never triggers high SPM anymore.

 

I have IL setup so it notifies me when someone types hack/cheat/aimbot, but there's always some kid yelling cheat everytime someone steps on his epeen, so that's getting tiresome and you gotta take a break sometime :biggrin:

check this out

 

onkill first check code (second_check / action disabled)

Code:

check1:

if (player.KdrRound > 10 && player.DeathsRound == 1)
    goto check2;
else if (player.KdrRound > 8 && player.DeathsRound == 2)
    goto check2;
else if (player.KdrRound > 7 && player.DeathsRound == 3)
    goto check2;
else if (player.KdrRound > 7 && player.DeathsRound >1 && (server.TimeRound / 60) > 8 && (player.TimeTotal / 60) > 8)
    goto check2;
else
    return false;

check2:

plugin.ConsoleWrite(plugin.R("%p_n% activated incremental Check # 1 in Limit # %l_id% %l_n%"));

/* Watch those Parenthesis! */
if (
    (
    ( player.Kdr > 8 )  ||
        
    ( (player.Spm > 1500 || player.Accuracy > 40 || player.Skill > 1050) && (player.Deaths * 1.5 < player.Kills) )
    )
    && player.RoundData.issetBool("banned") == false
    )
{
    String message = plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !");
    plugin.PRoConChat("Admin > All: " + message);
    plugin.PBBanPlayerWithMessage(PBBanDuration.Temporary, player.Name, 4320, plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
    plugin.SendGlobalMessage(plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
    plugin.Log("Plugins/InsaneLimits.log", plugin.R("[%date% %time%] [%server_host%] [server.Name] [player.PBGuid] player.Name violated Limit #6 (suspicious in-game stats),3 days ban !"));
    plugin.Tweet(plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
	plugin.ServerCommand("punkBuster.pb_sv_command", "PB_SV_GetSs \""+killer.Name+"\"");
    player.RoundData.setBool("banned", true);
    return false;
}
else
    plugin.ConsoleWrite(plugin.R("%p_n% did not activate incremental Check # 2 in Limit # %l_id% %l_n%"));

return false;
this is what it does

Code:

Quote:
Limit 6 :
Level 1 :
Player does 10 or more kills while dying 0 or 1 time --- > level 2
OR
player does 16 or more kills while dying twice --- > level 2
OR
player does 21 or more kills while dying 3 times --- > level 2
OR
player maintains 7 kill/death ratio for 8 minutes --- > level 2

level 2 :
player battlelog stats are checked if he has Kill/Death ratio of 8+
OR
player battlelog stats are checked if he has Score/minute of 1500+ and his kills are 1.5 times more than his deaths
OR
player battlelog stats are checked if he has accuracy of 40%+ and his kills are 1.5 times more than his deaths
OR
player battlelog stats are checked if he has skill of 1050+ and his kills are 1.5 times more than his deaths

Result : player gets 3 days ban if he passes level 1 and level 2
it is good limit but you might want to tweak it a bit.. this is the best numbers i have (and what i use).
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Mootart*:

 

check this out

 

onkill first check code (second_check / action disabled)

Code:

check1:

if (player.KdrRound > 10 && player.DeathsRound == 1)
    goto check2;
else if (player.KdrRound > 8 && player.DeathsRound == 2)
    goto check2;
else if (player.KdrRound > 7 && player.DeathsRound == 3)
    goto check2;
else if (player.KdrRound > 7 && player.DeathsRound >1 && (server.TimeRound / 60) > 8 && (player.TimeTotal / 60) > 8)
    goto check2;
else
    return false;

check2:

plugin.ConsoleWrite(plugin.R("%p_n% activated incremental Check # 1 in Limit # %l_id% %l_n%"));

/* Watch those Parenthesis! */
if (
    (
    ( player.Kdr > 8 )  ||
        
    ( (player.Spm > 1500 || player.Accuracy > 40 || player.Skill > 1050) && (player.Deaths * 1.5 < player.Kills) )
    )
    && player.RoundData.issetBool("banned") == false
    )
{
    String message = plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !");
    plugin.PRoConChat("Admin > All: " + message);
    plugin.PBBanPlayerWithMessage(PBBanDuration.Temporary, player.Name, 4320, plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
    plugin.SendGlobalMessage(plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
    plugin.Log("Plugins/InsaneLimits.log", plugin.R("[%date% %time%] [%server_host%] [server.Name] [player.PBGuid] player.Name violated Limit #6 (suspicious in-game stats),3 days ban !"));
    plugin.Tweet(plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
	plugin.ServerCommand("punkBuster.pb_sv_command", "PB_SV_GetSs \""+killer.Name+"\"");
    player.RoundData.setBool("banned", true);
    return false;
}
else
    plugin.ConsoleWrite(plugin.R("%p_n% did not activate incremental Check # 2 in Limit # %l_id% %l_n%"));

return false;
this is what it does

Code:

Quote:
Limit 6 :
Level 1 :
Player does 10 or more kills while dying 0 or 1 time --- > level 2
OR
player does 16 or more kills while dying twice --- > level 2
OR
player does 21 or more kills while dying 3 times --- > level 2
OR
player maintains 7 kill/death ratio for 8 minutes --- > level 2

level 2 :
player battlelog stats are checked if he has Kill/Death ratio of 8+
OR
player battlelog stats are checked if he has Score/minute of 1500+ and his kills are 1.5 times more than his deaths
OR
player battlelog stats are checked if he has accuracy of 40%+ and his kills are 1.5 times more than his deaths
OR
player battlelog stats are checked if he has skill of 1050+ and his kills are 1.5 times more than his deaths

Result : player gets 3 days ban if he passes level 1 and level 2
it is good limit but you might want to tweak it a bit.. this is the best numbers i have (and what i use).
this is great. can be use on eaban too?
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by HexaCanon*:

 

this is great. can be use on eaban too?

edit the red part to suit your needs

Code:

check1:

if (player.KdrRound > 10 && player.DeathsRound == 1)
    goto check2;
else if (player.KdrRound > 8 && player.DeathsRound == 2)
    goto check2;
else if (player.KdrRound > 7 && player.DeathsRound == 3)
    goto check2;
else if (player.KdrRound > 7 && player.DeathsRound >1 && (server.TimeRound / 60) > 8 && (player.TimeTotal / 60) > 8)
    goto check2;
else
    return false;

check2:

plugin.ConsoleWrite(plugin.R("%p_n% activated incremental Check # 1 in Limit # %l_id% %l_n%"));

/* Watch those Parenthesis! */
if (
    (
    ( player.Kdr > 8 )  ||
        
    ( (player.Spm > 1500 || player.Accuracy > 40 || player.Skill > 1050) && (player.Deaths * 1.5 < player.Kills) )
    )
    && player.RoundData.issetBool("banned") == false
    )
{
    String message = plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !");
    plugin.PRoConChat("Admin > All: " + message);
    plugin.PBBanPlayerWithMessage(PBBanDuration.Temporary, player.Name, 4320, plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
    plugin.SendGlobalMessage(plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
    plugin.Log("Plugins/InsaneLimits.log", plugin.R("[%date% %time%] [%server_host%] [server.Name] [player.PBGuid] player.Name violated Limit #6 (suspicious in-game stats),3 days ban !"));
    plugin.Tweet(plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
	plugin.ServerCommand("punkBuster.pb_sv_command", "PB_SV_GetSs \""+killer.Name+"\"");
    player.RoundData.setBool("banned", true);
    return false;
}
else
    plugin.ConsoleWrite(plugin.R("%p_n% did not activate incremental Check # 2 in Limit # %l_id% %l_n%"));

return false;
for Eaban with message replace red part with (this is a three day EA ban 4320 minutes)

Code:

plugin.EABanPlayerWithMessage(EABanDuration.Temporary, player.Name, 4320, plugin.R("your message here"));
for permanent ban

Code:

plugin.EABanPlayerWithMessage(EABanDuration.Permanent, player.Name, 0, plugin.R("your message here"));
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by PapaCharlie9*:

 

I'm not sure if Insane Balancer and Insane Limits can "talk" to each other. But it would be great if Insane Limits could call !show idle and execute it from in-game.

Bah! IB should just be a limit written in IL. :ohmy:

 

In all seriousness, it would be relatively easy to write the !show idle command as a limit (well, maybe 4 limits). I don't plan to do it, but all the support is there.

 

In any case, I've started working on the !vip kicker limit. I'm going to need some help with testing, my server is almost never full. I'll post a Need Tester thread as soon as I have the code compiling.

 

 

What if I wrapped it again in limit.Activations?

 

So my original code:Code:

( limit.Activations ( player.Name, TimeSpan.FromSeconds ( 60 ) ) >  20 )
Would become:Code:
( limit.Activations ( limit.Activations ( player.Name, TimeSpan.FromSeconds ( 60 ) ) >  20 ) >= 2 )
Would that work?
I don't think so. limit.Activations ( limit.Activations ( ... isn't correct syntax.

 

I'm not clear on what you are trying to do, even from the original post. You want to just warn a player the first time their kill rate exceeds a limit, but then kick/ban the second time? Over what timespan, a round? But how could that ever happen in an actual round? Once the rate is exceeded, they would basically have to purposely let themselves get killed or just sit idle until enough time has past so that they could then kill again and then get kick/banned? It doesn't make sense to me.

 

If you mean for a server boot session, that makes more sense (kind of). It would mean they can violate in one round and just get a warning, but in any following round they would get kick/banned. But that still means they cheat the entire first round.

 

If you mean forever (like, days and days), that's possible but that is relatively hard to code. It would require a custom data file that has to be read and written.

 

 

I'm not clear on what you are trying to do, even from the original post. Maybe what you want is this?

 

All Activations

 

You can adapt the code by changing it to use your expression:

Code:

( limit.Activations ( player.Name, TimeSpan.FromSeconds ( 60 ) ) >  20 )
as the first_check, and remove this line of the code from the second_check in my example:

Code:

/*
The second and subsequent times through, check to make sure we are not
getting multiple activations in a short period of time. Ignore if
less than the time span required.
*/

if (limit.Activations(player.Name, time) > 1) return false;

/*
We get here only if there was exactly one activation in the time span
*/
You can then reduce the warning branches after to just do the actions you want, since warnings==0 has already taken care of the first warning.

 

It still will have weird behavior if the player does 21+ kills in 60 seconds. He'll get the warning and the the punishment immediately afterward. You might have to add a cool-down timer to the code. Save DateTime.Now in plugin.RoundData and then on the next activation, compare with the current value of DateTime.Now and if it less than some cool-down period (2 minutes_), just return false. That means, after the first warning, they get 2 minutes of grace where they are permitted to keep killing, then they get punished.

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

Originally Posted by Mootart*:

 

Bah! IB should just be a limit written in IL. :ohmy:

 

In all seriousness, it would be relatively easy to write the !show idle command as a limit (well, maybe 4 limits). I don't plan to do it, but all the support is there.

 

In any case, I've started working on the !vip kicker limit. I'm going to need some help with testing, my server is almost never full. I'll post a Need Tester thread as soon as I have the code compiling.

 

 

 

I don't think so. limit.Activations ( limit.Activations ( ... isn't correct syntax.

 

I'm not clear on what you are trying to do, even from the original post. You want to just warn a player the first time their kill rate exceeds a limit, but then kick/ban the second time? Over what timespan, a round? But how could that ever happen in an actual round? Once the rate is exceeded, they would basically have to purposely let themselves get killed or just sit idle until enough time has past so that they could then kill again and then get kick/banned? It doesn't make sense to me.

 

If you mean for a server boot session, that makes more sense (kind of). It would mean they can violate in one round and just get a warning, but in any following round they would get kick/banned. But that still means they cheat the entire first round.

 

If you mean forever (like, days and days), that's possible but that is relatively hard to code. It would require a custom data file that has to be read and written.

papacharlie let me know if you need to test this !vip thinggy. im in.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by QUACK-Major-Pain*:

 

Hehe, yeah I had a bit of trouble finding that reply in the midst of everything.

 

I'll give it a go and then just log the hits for a while and compare stats manually to see if it actually points out some blatant cheats.

 

They are getting better at staying under the radar on these limits, tuning their cheats to stay close to stats of players that are just good. For example checking kills pr minute in a match coupled with k/d, then they just stay at something reasonable and I log in to see some guy with 100+ kills and everyone yelling hack. All the hacks I've had mostly never triggers high SPM anymore.

 

I have IL setup so it notifies me when someone types hack/cheat/aimbot, but there's always some kid yelling cheat everytime someone steps on his epeen, so that's getting tiresome and you gotta take a break sometime :biggrin:

We have seen the same thing. Hackers fitting in or just leading most players. Problem with hackers is that SPM won't catch them because to gain the most for a score, you need to do objectives, heal, revive, repair, etc. These are things hackers don't normally do. All they want is to kill, kill, kill. A KPM would be more realistic I think.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by micovery*:

 

We have seen the same thing. Hackers fitting in or just leading most players. Problem with hackers is that SPM won't catch them because to gain the most for a score, you need to do objectives, heal, revive, repair, etc. These are things hackers don't normally do. All they want is to kill, kill, kill. A KPM would be more realistic I think.

I agree, the beast is evolving. There is also other stats that can be looked at.

 

1. Win/Lose ratio - Some hackers seem to care about this a lot ... anyone with W/L over 3 is already suspicious

2. Rank/(Time Played) - Hackers seem to rank extremely fast with very few hours played.

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

Originally Posted by Mootart*:

 

check this out

 

onkill first check code (second_check / action disabled)

Code:

check1:

if (player.KdrRound > 10 && player.DeathsRound == 1)
    goto check2;
else if (player.KdrRound > 8 && player.DeathsRound == 2)
    goto check2;
else if (player.KdrRound > 7 && player.DeathsRound == 3)
    goto check2;
else if (player.KdrRound > 7 && player.DeathsRound >1 && (server.TimeRound / 60) > 8 && (player.TimeTotal / 60) > 8)
    goto check2;
else
    return false;

check2:

plugin.ConsoleWrite(plugin.R("%p_n% activated incremental Check # 1 in Limit # %l_id% %l_n%"));

/* Watch those Parenthesis! */
if (
    (
    ( player.Kdr > 8 )  ||
        
    ( (player.Spm > 1500 || player.Accuracy > 40 || player.Skill > 1050) && (player.Deaths * 1.5 < player.Kills) )
    )
    && player.RoundData.issetBool("banned") == false
    )
{
    String message = plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !");
    plugin.PRoConChat("Admin > All: " + message);
    plugin.PBBanPlayerWithMessage(PBBanDuration.Temporary, player.Name, 4320, plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
    plugin.SendGlobalMessage(plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
    plugin.Log("Plugins/InsaneLimits.log", plugin.R("[%date% %time%] [%server_host%] [server.Name] [player.PBGuid] player.Name violated Limit #6 (suspicious in-game stats),3 days ban !"));
    plugin.Tweet(plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
	plugin.ServerCommand("punkBuster.pb_sv_command", "PB_SV_GetSs \""+killer.Name+"\"");
    player.RoundData.setBool("banned", true);
    return false;
}
else
    plugin.ConsoleWrite(plugin.R("%p_n% did not activate incremental Check # 2 in Limit # %l_id% %l_n%"));

return false;
this is what it does

Code:

Quote:
Limit 6 :
Level 1 :
Player does 10 or more kills while dying 0 or 1 time --- > level 2
OR
player does 16 or more kills while dying twice --- > level 2
OR
player does 21 or more kills while dying 3 times --- > level 2
OR
player maintains 7 kill/death ratio for 8 minutes --- > level 2

level 2 :
player battlelog stats are checked if he has Kill/Death ratio of 8+
OR
player battlelog stats are checked if he has Score/minute of 1500+ and his kills are 1.5 times more than his deaths
OR
player battlelog stats are checked if he has accuracy of 40%+ and his kills are 1.5 times more than his deaths
OR
player battlelog stats are checked if he has skill of 1050+ and his kills are 1.5 times more than his deaths

Result : player gets 3 days ban if he passes level 1 and level 2
it is good limit but you might want to tweak it a bit.. this is the best numbers i have (and what i use).
this is great HexaCanon Big Thanks for this i might use this and reply my old battlelog stat checker. just one question. how can i add a whitelist to this. thanks again.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Mootart*:

 

edit the red part to suit your needs

Code:

check1:

if (player.KdrRound > 10 && player.DeathsRound == 1)
    goto check2;
else if (player.KdrRound > 8 && player.DeathsRound == 2)
    goto check2;
else if (player.KdrRound > 7 && player.DeathsRound == 3)
    goto check2;
else if (player.KdrRound > 7 && player.DeathsRound >1 && (server.TimeRound / 60) > 8 && (player.TimeTotal / 60) > 8)
    goto check2;
else
    return false;

check2:

plugin.ConsoleWrite(plugin.R("%p_n% activated incremental Check # 1 in Limit # %l_id% %l_n%"));

/* Watch those Parenthesis! */
if (
    (
    ( player.Kdr > 8 )  ||
        
    ( (player.Spm > 1500 || player.Accuracy > 40 || player.Skill > 1050) && (player.Deaths * 1.5 < player.Kills) )
    )
    && player.RoundData.issetBool("banned") == false
    )
{
    String message = plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !");
    plugin.PRoConChat("Admin > All: " + message);
    plugin.PBBanPlayerWithMessage(PBBanDuration.Temporary, player.Name, 4320, plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
    plugin.SendGlobalMessage(plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
    plugin.Log("Plugins/InsaneLimits.log", plugin.R("[%date% %time%] [%server_host%] [server.Name] [player.PBGuid] player.Name violated Limit #6 (suspicious in-game stats),3 days ban !"));
    plugin.Tweet(plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
	plugin.ServerCommand("punkBuster.pb_sv_command", "PB_SV_GetSs \""+killer.Name+"\"");
    player.RoundData.setBool("banned", true);
    return false;
}
else
    plugin.ConsoleWrite(plugin.R("%p_n% did not activate incremental Check # 2 in Limit # %l_id% %l_n%"));

return false;
for Eaban with message replace red part with (this is a three day EA ban 4320 minutes)

Code:

plugin.EABanPlayerWithMessage(EABanDuration.Temporary, player.Name, 4320, plugin.R("your message here"));
for permanent ban

Code:

plugin.EABanPlayerWithMessage(EABanDuration.Permanent, player.Name, 0, plugin.R("your message here"));
i think there is missing on the eaban code. the eabantype.name so i used llike this

plugin.EABanPlayerWithMessage(EABanType.Name, EABanDuration.Permanent, player.Name, 0, plugin.R("Your message here"));

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

Originally Posted by QUACK-Major-Pain*:

 

Set limit to evaluate OnAnyChat, set action to None.

 

Set first_check to this Code:

Code:

String txt = player.LastChat;

/* Remove the first character if it is "/" */

if (txt.Length > 0 && txt[0] == '/' )
    txt = txt.Substring(1);

/* Exit if text is not prefixed with "/", "!", "@", or "_" */ 
if (!plugin.IsCommand(txt))
    return false;

txt = plugin.ExtractCommand(txt);

List<String> commands = new List<String>();
commands.Add("kick");
commands.Add("tban");
commands.Add("kill");

List<String> words = new List<String>(Regex.Split(txt.Trim(), @"\s+"));

/* Exit if not enough words */
if ( words.Count < 2)
    return false;

/* Get the command being executed */
String command = words[0];

/* Exit if command is not in list */
if (!commands.Contains(command)) 
    return false;

/* Determine the player being kicked/banned/killed */

String typed_name = words[1];
String actual_name = plugin.BestPlayerMatch(words[1]);

if (actual_name == null)
    actual_name = "Unknown";

String admin_name = player.Name;
String message = "[%date% - %time%] " + admin_name + " > " +  command + " " + player.LastChat + " " + typed_name + " (Actual Name: " + actual_name + ")";

plugin.Log("Logs/InsaneLimits_AAT.log", plugin.R(message));
Please note: I did not code this, Micovery did. He kindly coded it for me when I asked. I've modified it to suits my needs. Thanks again Micovery :cool:
Was wondering if action was set to Twitter, if it would be posted.

 

Looking to Tweet:

 

(kick) - playername was kicked for whatever reason

or

(tban) - playername was banned for x minutes for whatever reason

or

(ban) - playername was banned for what ever reason

 

* of course I would have to add "ban" to reasons.

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

Originally Posted by Satanja*:

 

Ok, I'm getting somewhere, but the conversions are doing my head in, told ya I was not a programmer :woot:

 

As far as I can tell "player.Time" returns milliseconds so I've converted that to hours first. But I'm stuck at converting and rounding that so I just get the player hours as a 2 digit number that I can compare the rank against.

 

Example result:

 

Hours: 0,0892358333333333 Name: Playername

 

That would be approx. 89 hours, it matches what I see when I look up the player.

 

It's probably super simple, if someone can help me out getting the hours I should be able to figure the rest of the coding out.

 

I'm just writing my results to the console for now, here's what I have so far.

 

double ptime;

ptime = (player.Time / 3600000);

 

String message = "Hours: " + Convert.ToString(ptime) + " Name: " + Convert.ToString(player.Name);

plugin.ConsoleWrite(message);

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

Originally Posted by HexaCanon*:

 

Ok, I'm getting somewhere, but the conversions are doing my head in, told ya I was not a programmer :woot:

 

As far as I can tell "player.Time" returns milliseconds so I've converted that to hours first. But I'm stuck at converting and rounding that so I just get the player hours as a 2 digit number that I can compare the rank against.

 

Example result:

 

Hours: 0,0892358333333333 Name: Playername

 

That would be approx. 89 hours, it matches what I see when I look up the player.

 

It's probably super simple, if someone can help me out getting the hours I should be able to figure the rest of the coding out.

 

I'm just writing my results to the console for now, here's what I have so far.

 

double ptime;

ptime = (player.Time / 3600000);

 

String message = "Hours: " + Convert.ToString(ptime) + " Name: " + Convert.ToString(player.Name);

plugin.ConsoleWrite(message);

player.Time is in seconds to convert it to minutes you divide by 60, to convert the minutes to hours you divide by another 60. to converts seconds to hours you divide by 3600 (60x60).

 

player time in hours = (player.Time / 3600 )

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

Originally Posted by Satanja*:

 

Ahh, so that's where those extra zero's came from, duh :biggrin:

 

A math.round and I've got my hours.

 

Now I'll have it log some players for a while and check the times vs. rank to see what falls within the avg.

 

Thanks.

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

Originally Posted by HexaCanon*:

 

Ahh, so that's where those extra zero's came from, duh :biggrin:

 

A math.round and I've got my hours.

 

Now I'll have it log some players for a while and check the times vs. rank to see what falls within the avg.

 

Thanks.

you might want to look into these 2 players data in this post [insane Limits 0.0.0.8-patch-3 (beta, BF3) #1087]*
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Mootart*:

 

check this out

 

onkill first check code (second_check / action disabled)

Code:

check1:

if (player.KdrRound > 10 && player.DeathsRound == 1)
    goto check2;
else if (player.KdrRound > 8 && player.DeathsRound == 2)
    goto check2;
else if (player.KdrRound > 7 && player.DeathsRound == 3)
    goto check2;
else if (player.KdrRound > 7 && player.DeathsRound >1 && (server.TimeRound / 60) > 8 && (player.TimeTotal / 60) > 8)
    goto check2;
else
    return false;

check2:

plugin.ConsoleWrite(plugin.R("%p_n% activated incremental Check # 1 in Limit # %l_id% %l_n%"));

/* Watch those Parenthesis! */
if (
    (
    ( player.Kdr > 8 )  ||
        
    ( (player.Spm > 1500 || player.Accuracy > 40 || player.Skill > 1050) && (player.Deaths * 1.5 < player.Kills) )
    )
    && player.RoundData.issetBool("banned") == false
    )
{
    String message = plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !");
    plugin.PRoConChat("Admin > All: " + message);
    plugin.PBBanPlayerWithMessage(PBBanDuration.Temporary, player.Name, 4320, plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
    plugin.SendGlobalMessage(plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
    plugin.Log("Plugins/InsaneLimits.log", plugin.R("[%date% %time%] [%server_host%] [server.Name] [player.PBGuid] player.Name violated Limit #6 (suspicious in-game stats),3 days ban !"));
    plugin.Tweet(plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
	plugin.ServerCommand("punkBuster.pb_sv_command", "PB_SV_GetSs \""+killer.Name+"\"");
    player.RoundData.setBool("banned", true);
    return false;
}
else
    plugin.ConsoleWrite(plugin.R("%p_n% did not activate incremental Check # 2 in Limit # %l_id% %l_n%"));

return false;
this is what it does

Code:

Quote:
Limit 6 :
Level 1 :
Player does 10 or more kills while dying 0 or 1 time --- > level 2
OR
player does 16 or more kills while dying twice --- > level 2
OR
player does 21 or more kills while dying 3 times --- > level 2
OR
player maintains 7 kill/death ratio for 8 minutes --- > level 2

level 2 :
player battlelog stats are checked if he has Kill/Death ratio of 8+
OR
player battlelog stats are checked if he has Score/minute of 1500+ and his kills are 1.5 times more than his deaths
OR
player battlelog stats are checked if he has accuracy of 40%+ and his kills are 1.5 times more than his deaths
OR
player battlelog stats are checked if he has skill of 1050+ and his kills are 1.5 times more than his deaths

Result : player gets 3 days ban if he passes level 1 and level 2
it is good limit but you might want to tweak it a bit.. this is the best numbers i have (and what i use).
i tried to add mail plugin but i think my code is incorrect can you help me.. i used this

 

plugin.SendMail("*****@yahoo.com, Battlelog Checker %p_n%, %p_n% EA_GUID: %p_eg% PB_GUID: %p_pg% Date: %date% %time%"));

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

Originally Posted by ghostfighter777*:

 

try that

 

Code:

if (
     (player.KdrRound > 10 && player.DeathsRound == 1) || 
     (player.KdrRound > 8 && player.DeathsRound == 2) || 
     (player.KdrRound > 7 && player.DeathsRound == 3) ||  
     (player.KdrRound > 7 && player.DeathsRound >1 && (server.TimeRound / 60) > 8 && (player.TimeTotal / 60) > 8)
)
{
   plugin.ConsoleWrite(plugin.R("%p_n% activated incremental Check # 1 in Limit # %l_id% %l_n%"));

   /* Watch those Parenthesis! */
   if (
      (
        ( player.Kdr > 8 )  ||
        ( (player.Spm > 1500 || player.Accuracy > 40 || player.Skill > 1050) && (player.Deaths * 1.5 < player.Kills) )
      )
      && player.RoundData.issetBool("banned") == false
   )
   {
    String message = plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !");
    plugin.PRoConChat("Admin > All: " + message);
    plugin.PBBanPlayerWithMessage(PBBanDuration.Temporary, player.Name, 4320, plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
    plugin.SendGlobalMessage(plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
    plugin.Log("Plugins/InsaneLimits.log", plugin.R("[%date% %time%] [%server_host%] [server.Name] [player.PBGuid] player.Name violated Limit #6 (suspicious in-game stats),3 days ban !"));
    plugin.Tweet(plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
	plugin.ServerCommand("punkBuster.pb_sv_command", "PB_SV_GetSs \""+killer.Name+"\"");
    player.RoundData.setBool("banned", true);
    return false;
}
else
{
    plugin.ConsoleWrite(plugin.R("%p_n% did not activate incremental Check # 2 in Limit # %l_id% %l_n%"));
    return false;
}
}
else
{
    return false;
}
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Mootart*:

 

try that

 

Code:

if (
     (player.KdrRound > 10 && player.DeathsRound == 1) || 
     (player.KdrRound > 8 && player.DeathsRound == 2) || 
     (player.KdrRound > 7 && player.DeathsRound == 3) ||  
     (player.KdrRound > 7 && player.DeathsRound >1 && (server.TimeRound / 60) > 8 && (player.TimeTotal / 60) > 8)
)
{
   plugin.ConsoleWrite(plugin.R("%p_n% activated incremental Check # 1 in Limit # %l_id% %l_n%"));

   /* Watch those Parenthesis! */
   if (
      (
        ( player.Kdr > 8 )  ||
        ( (player.Spm > 1500 || player.Accuracy > 40 || player.Skill > 1050) && (player.Deaths * 1.5 < player.Kills) )
      )
      && player.RoundData.issetBool("banned") == false
   )
   {
    String message = plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !");
    plugin.PRoConChat("Admin > All: " + message);
    plugin.PBBanPlayerWithMessage(PBBanDuration.Temporary, player.Name, 4320, plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
    plugin.SendGlobalMessage(plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
    plugin.Log("Plugins/InsaneLimits.log", plugin.R("[%date% %time%] [%server_host%] [server.Name] [player.PBGuid] player.Name violated Limit #6 (suspicious in-game stats),3 days ban !"));
    plugin.Tweet(plugin.R("player.Name violated Limit #6 (suspicious in-game stats), 3 days ban !"));
	plugin.ServerCommand("punkBuster.pb_sv_command", "PB_SV_GetSs \""+killer.Name+"\"");
    player.RoundData.setBool("banned", true);
    return false;
}
else
{
    plugin.ConsoleWrite(plugin.R("%p_n% did not activate incremental Check # 2 in Limit # %l_id% %l_n%"));
    return false;
}
}
else
{
    return false;
}
try what sir?
* Restored post. It could be that the author is no longer active.
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.




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