Jump to content

Insane Limits: Mute/Unmute Player without Adkats


ImportBot

Recommended Posts

Originally Posted by LCARSx64*:

 

This limit has similar functionality to Adkats' mute command, with some differences.

The muted player is killed immediately on muting, this counts as first activation. If the player talks again they are killed once again (2nd activation). If they talk a 3rd time (3rd activation) they are kicked and, even if they return to the server, on 4th activation they are banned for the duration of the round. If the player then returns after the round has ended, they will still be round banned until they are umuted.

 

You have 2 commands available only to Admins with a ProCon account and the rights to Kill, Kick and Ban players:

!mute [Player] [Reason] - Mute the given Player for the stated Reason

!unmute [Player] - Unmute a previously muted player

 

Player name can be a partial name, e.g.: lcars will match LCARSx64

Commands can be proceeded by: / ! @ /! /@

Example: /!mute Player1 Spamming chat!

NOTE: This limit uses a file for tracking muted players, this file is located in your ProCon layer's Plugins/BF4/ folder and the filename is SERVERIP_SERVERPORT_muted_players.txt, e.g.: Procon/Plugins/BF4/127.0.0.1_20005_muted_players.txt

 


Mute/Unmute Players

 

Create a new limit to evaluate OnAnyChat. Set action to None.

 

Set first_check to this Expression:

Code:

(true)
Set second_check to this Code:

Code:

// Mute/Unmute Player
// v1.0 - OnAnyChat - Limit 1 of 1
//

// ********* VARIABLES ******** //

// --- PlayerInfoInterfaces --- //
PlayerInfoInterface muPlayer;

// ---------- Strings --------- //
String   command = String.Empty;
String   arg1    = String.Empty;
String   arg2    = String.Empty;
String   fName   = "Plugins\\BF4\\" + server.Host + "_" + server.Port + "_muted_players.txt";
String[] fData;
String[] logMsgs = { "^b^1Mute^0^n: ",
                     "^b^1Unmute^0^n: ",
                     "Mute: ",
                     "Unmute: ",
                     " has been ",
                     "muted by ",
                     "unmuted by ",
                     " for " };

// --------- Integers --------- //
int      muCount = 0;

// --------- Booleans --------- //
bool     isAdmin = false;
bool     bKill   = false;
bool     bKick   = false;
bool     bBan    = false;
bool     bMove   = false;
bool     bLevel  = false;

// ***** END OF VARIABLES ***** //



// *********** CODE ********** //

// Set Admin flag appropriately
if (plugin.CheckAccount(player.Name, out bKill, out bKick, out bBan, out bMove, out bLevel))
{
    // Admin must be able to Kill, Kick and Ban
    if (bKill && bKick && bBan) isAdmin = true;
}

// Ensure the folder exists
if (!Directory.Exists(Path.GetDirectoryName(fName))) Directory.CreateDirectory(Path.GetDirectoryName(fName));

// Retrieve the file data, creating if needed
if (!File.Exists(fName)) File.WriteAllText(fName, String.Empty);
fData = File.ReadAllLines(fName);

// If we are Admin, process the commands
if (isAdmin)
{
    // Exit if no command given
    if (!plugin.IsInGameCommand(player.LastChat)) return false;

    // Extract the command
    command = plugin.ExtractInGameCommand(player.LastChat);

    // Remove excessive command prefixes
    if ((command.Length != 0) && (plugin.ExtractCommandPrefix(command).Length != 0)) command = plugin.ExtractInGameCommand(command);

    // Make sure the command really exists
    if (null == command || command.Length == 0) return false;

    // Match on !mute or unmute
    if (!Regex.Match(command, @"^\b(MUTE|UNMUTE)\b", RegexOptions.IgnoreCase).Success) return false;

    // Extract the argument(s)
    if (command.IndexOf(" ") != -1)
    {
        arg1 = command.Remove(0, command.IndexOf(" ")).Trim();
        command = command.Substring(0, command.IndexOf(" ")).ToLower().Trim();
        if (command == "mute" && arg1.IndexOf(" ") == -1)
        {
            // Reason missing
            plugin.SendPlayerMessage(player.Name, "ERROR: Missing Reason!");
            return false;
        }
        else if (command != "unmute")
        {
            arg2 = arg1.Remove(0, arg1.IndexOf(" ")).Trim();
            arg1 = arg1.Substring(0, arg1.IndexOf(" ")).Trim();
        }

        // Check arg1 is a valid player name
        muPlayer = plugin.GetPlayer(arg1, true);
        if ((muPlayer == null) || (!Regex.Match(muPlayer.Name, @"^" + arg1, RegexOptions.IgnoreCase).Success))
        {
            // No match for player
            plugin.SendPlayerMessage(player.Name, "ERROR: Player does not exist!");
            return false;
        }
        arg1 = muPlayer.Name;
    }
    else
    {
        // Missing argument(s)
        plugin.SendPlayerMessage(player.Name, "ERROR: Missing argument(s)!");
        return false;
    }

    // Process the commands
    switch (command)
    {
        // MUTE command
        case "mute":
            // Check if the player is already muted
            if (fData.Length != 0)
            {
                foreach (String s in fData)
                {
                    if (arg1 == s.Substring(0, s.IndexOf(" ")).Trim())
                    {
                        // Already muted
                        plugin.SendPlayerMessage(player.Name, arg1 + " is already muted!");
                        return false;
                    }
                }
            }
            // Player isn't already muted so we'll assume it's first activation since muting was via command
            // Add the player to the data file
            File.AppendAllText(fName, arg1 + " 1" + Environment.NewLine);
            // Kill the player giving the reason & notify the caller
            plugin.SendPlayerMessage(arg1, arg2);
            plugin.SendPlayerYell(arg1, "\n" + arg2, 8);
            plugin.KillPlayer(arg1);
            plugin.SendPlayerMessage(player.Name, arg1 + " has been muted!");
            // Log to Procon
            logMsgs[0] = logMsgs[0] + arg1 + logMsgs[4] + logMsgs[5] + player.Name + logMsgs[7] + arg2;
            logMsgs[2] = logMsgs[2] + arg1 + logMsgs[4] + logMsgs[5] + player.Name + logMsgs[7] + arg2;
            plugin.ConsoleWrite(logMsgs[0]);
            plugin.PRoConChat(logMsgs[0]);
            plugin.PRoConEvent(logMsgs[2], "Insane Limits");
            break;
        // UNMUTE command
        case "unmute":
            // Check if the player is muted
            if (fData.Length != 0)
            {
                muCount = -1;
                for (int i = 0; i < fData.Length; i++)
                {
                    if (arg1 == fData[i].Substring(0, fData[i].IndexOf(" ")).Trim())
                    {
                        muCount = i;
                        break;
                    }
                }
                if (muCount >= 0)
                {
                    // Player is muted so remove them from file
                    String[] tmpData = new String [fData.Length - 1];
                    int iTmp = 0;
                    for (int i = 0; i < fData.Length; i++)
                    {
                        if (i != muCount)
                        {
                            tmpData[iTmp] = fData[i];
                            iTmp++;
                        }
                    }
                    File.WriteAllLines(fName, tmpData);
                    // Let the player know he/she is unmuted & notify the caller
                    plugin.SendPlayerMessage(arg1, "You are now unmuted!");
                    plugin.SendPlayerMessage(arg1, "\nYou are now unmuted!", 5);
                    plugin.SendPlayerMessage(player.Name, arg1 + " has been unmuted!");
                    // Log to Procon
                    logMsgs[1] = logMsgs[1] + arg1 + logMsgs[4] + logMsgs[6] + player.Name;
                    logMsgs[3] = logMsgs[3] + arg1 + logMsgs[4] + logMsgs[6] + player.Name;
                    plugin.ConsoleWrite(logMsgs[1]);
                    plugin.PRoConChat(logMsgs[1]);
                    plugin.PRoConEvent(logMsgs[3], "Insane Limits");
                }
                else
                {
                    // Player isn't muted
                    plugin.SendPlayerMessage(player.Name, arg1 + " is not muted!");
                    return false;
                }
            }
            else
            {
                // Player isn't muted
                plugin.SendPlayerMessage(player.Name, arg1 + " is not muted!");
                return false;
            }
            break;
    }
}
else
{
    // Check if the player is muted
    for (int i = 0; i < fData.Length; i++)
    {
        if (player.Name == fData[i].Substring(0, fData[i].IndexOf(" ")).Trim())
        {
            // Player is muted, get their count
            muCount = Convert.ToInt32(fData[i].Remove(0, fData[i].IndexOf(" ")).Trim());
            arg1 = fData[i].Substring(0, fData[i].IndexOf(" ")).Trim();
            muCount++;
            // Kill on 1st & 2nd activations, Kick on 3rd activation & temp ban of 4th activation
            if (muCount <= 2)
            {
                // 2nd activation, so kill
                plugin.SendPlayerMessage(arg1, "Do not talk while muted!");
                plugin.SendPlayerYell(arg1, "\nDo not talk while muted!", 8);
                plugin.KillPlayer(arg1);
            }
            else if (muCount == 3)
            {
                // 3rd activation, so kick
                plugin.KickPlayerWithMessage(arg1, "Talking excessively while muted!");
            }
            else if (muCount == 4)
            {
                // 4th activation, so temp ban to end of round
                plugin.EABanPlayerWithMessage(EABanType.EA_GUID, EABanDuration.Round, arg1, 0, "Talking excessively while muted!");
                // Set activations down to 3 so that player will be banned again if they repeat offend
                muCount = 3;
            }
            fData[i] = arg1 + " " + muCount.ToString();
            // Write the data back to the file
            File.WriteAllLines(fName, fData);
            return false;
        }
    }
}

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

Originally Posted by EdgarAllan*:

 

Hello, I just tested this out for about 20min with another Admin and a random non-admin. The initial mute function works and the text file on the server is written to, however:

 

1) On subsequent chat messages, the file on the server never increments so the muted player is no longer punished.

2) The yell message to the player doesn't appear when they are first killed. Haven't been able to test out if it does on subsequent infractions due to issue #1 though.

 

Thanks for the hard work so far. This plugin will definitely come in handy!

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

Originally Posted by virusdead*:

 

hello, I get errors

 

[08:01:22 73] [AdKats] Team Info: US Army: 0/16 Russian Army: 2/16

[08:01:22 73] [AdKats] TSWAP: No players to swap. Waiting for input.

[08:01:22 76] [AdKats] Reserved slots listed.

[08:01:22 79] [AdKats] OnBanList fired

[08:01:22 79] [AdKats] Server info fired while changing rounds, no teams to parse.

[08:01:22 99] [insane Limits] Thread(settings): Compiling Limit #2 - Mute/Unmute Players - OnAnyChat

[08:01:23 02] [insane Limits] Thread(settings): ERROR: 1 error compiling Code

[08:01:23 02] [insane Limits] Thread(settings): ERROR: (CS1002, line: 27, column: 19): ; erwartet.

[08:01:24 73] [AdKats] Server info fired while changing rounds, no teams to parse.

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

Originally Posted by LCARSx64*:

 

Hello, I just tested this out for about 20min with another Admin and a random non-admin. The initial mute function works and the text file on the server is written to, however:

 

1) On subsequent chat messages, the file on the server never increments so the muted player is no longer punished.

2) The yell message to the player doesn't appear when they are first killed. Haven't been able to test out if it does on subsequent infractions due to issue #1 though.

 

Thanks for the hard work so far. This plugin will definitely come in handy!

Very odd, I tested this on my server and it worked fine for me. I've edited the first post code, changing the messaging order, I've also added Yell messages which were not originally in the code. Let me know if that works.

 

Nice work, LCARS!

Thanks Papa :biggrin:

 

hello, I get errors

I noted this error:

[08:01:23 02] [insane Limits] Thread(settings): ERROR: (CS1002, line: 27, column: 19): ; erwartet.

It seems you have copy & pasted the code incorrectly, my guess is that you selected all but the very last semi-colon ";" after the last line "return false;"
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by virusdead*:

 

Very odd, I tested this on my server and it worked fine for me. I'll run a few more tests.

 

 

Thanks Papa :biggrin:

 

 

I noted this error:

 

It seems you have copy & pasted the code incorrectly, my guess is that you selected all but the very last semi-colon ";" after the last line "return false;"

I copy the code above

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

Originally Posted by LCARSx64*:

 

I copy the code above

The code compiles fine for me, I even just double checked. Also, I notice you're using AdKats, this limit is for people not using Adkats. It will conflict with the Adkats mute command.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by virusdead*:

 

The code compiles fine for me, I even just double checked. Also, I notice you're using AdKats, this limit is for people not using Adkats. It will conflict with the Adkats mute command.

****

it is not advisable therefore I have deactivated this limit

you could do a limit to insult or very vulgar words

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

Originally Posted by LCARSx64*:

 

****

it is not advisable therefore I have deactivated this limit

you could do a limit to insult or very vulgar words

If you mean a limit to mute on swearing etc., then there's already a limit that works with AdKats for that ...*
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by virusdead*:

 

If you mean a limit to mute on swearing etc., then there's already a limit that works with AdKats for that ...*

but ok or save the list or create a list named bad_words_list here that I understand not :sad:
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by LCARSx64*:

 

but ok or save the list or create a list named bad_words_list here that I understand not :sad:

Oh I understand now.

 

To create a list, go to the Insane Limits settings and scroll down to section 2.List Manager

Image 1: List_Manager.jpg

Click the right section of new_list and you will see an arrow to the far right, click this and select True from the drop-down menu.

Scroll down to the very bottom of the Insane Limits settings window and you should see List #1 - Name1 (Enabled)

Image 2: List#1_A.jpg

Click the right section of list_1_hide and again you will see an arrow to the far right. Click the arrow and select Show from the drop-down menu. You should now see more options here:

Image 3: List#1_B.jpg

Click the right section of list_1_name and type bad_words_list then hit Enter. This list settings will change again to:

Image 4: List#1_C.jpg

Now click the right section of list_1_data and again click the arrow to the far right, remove all text in the drop-down listbox and add the bad words you wish to detect, seperated by a comma (For TMiland's list, copy the text and paste it into the drop-down listbox). Once all your words are entered, click the down arrow at the far right again.

 

You now have a bad word list ready for TMiland's limit. :smile:

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

Originally Posted by PapaCharlie9*:

 

[08:01:22 99] [insane Limits] Thread(settings): Compiling Limit #2 - Mute/Unmute Players - OnAnyChat

[08:01:23 02] [insane Limits] Thread(settings): ERROR: 1 error compiling Code

[08:01:23 02] [insane Limits] Thread(settings): ERROR: (CS1002, line: 27, column: 19): ; erwartet.

@LCARS

 

When the line number is between 20 and 30, the problem is almost always in first_check. The most common problem with first_check is using Expression when Code is specified, or vice versa. So that's always something to check when this kind of error report comes up. The "1 error compiling Code" is another clue: first_check should be Expression -- the error message is composed from First_Check.ToString() (which is kind of bogus, since the error could come from second_check). It would be nice if the error mentioned whether it was first_check or second_check explicitly, but that would require too much parsing of the error log coming out of the compiler.

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

Originally Posted by EdgarAllan*:

 

Just fully tested it and it works as intended. Awesome Job!

 

However, the Yell messages don't seem to work all the time (where they actually display across the middle of the player's screen). I've had this issue with other plugins so maybe DICE broke the reliability of the yell function?

 

Maybe for the future we could make the Mute list be purged after 24-72 hours or so.

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

Originally Posted by virusdead*:

 

Oh I understand now.

 

To create a list, go to the Insane Limits settings and scroll down to section 2.List Manager

Image 1: List_Manager.jpg

Click the right section of new_list and you will see an arrow to the far right, click this and select True from the drop-down menu.

Scroll down to the very bottom of the Insane Limits settings window and you should see List #1 - Name1 (Enabled)

Image 2: List#1_A.jpg

Click the right section of list_1_hide and again you will see an arrow to the far right. Click the arrow and select Show from the drop-down menu. You should now see more options here:

Image 3: List#1_B.jpg

Click the right section of list_1_name and type bad_words_list then hit Enter. This list settings will change again to:

Image 4: List#1_C.jpg

Now click the right section of list_1_data and again click the arrow to the far right, remove all text in the drop-down listbox and add the bad words you wish to detect, seperated by a comma (For TMiland's list, copy the text and paste it into the drop-down listbox). Once all your words are entered, click the down arrow at the far right again.

 

You now have a bad word list ready for TMiland's limit. :smile:

I feel I do not have the same thing you

 

Capture.JPG

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

Originally Posted by LCARSx64*:

 

I feel I do not have the same thing you

 

Capture.JPG

You have a limit created and are trying to use that as a list, delete that limit. You also have custom lists disabled, in section 1. Settings of Insane Limits, change use_custom_lists to True. :ohmy:
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by virusdead*:

 

You have a limit created and are trying to use that as a list, delete that limit. You also have custom lists disabled, in section 1. Settings of Insane Limits, change use_custom_lists to True. :ohmy:

thank you for helping me on some difficult to answer me in this forum for explanations, it can be a more inisative some.

Is this code is

showthread....rofanity/page2*

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

Originally Posted by LCARSx64*:

 

thank you for helping me on some difficult to answer me in this forum for explanations, it can be a more inisative some.

Is this code is

showthread....rofanity/page2*

You probably want the first page code: showthread....e-on-Profanity*

As for helping you, you're welcome. :smile:

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

Originally Posted by virusdead*:

 

You probably want the first page code: showthread....e-on-Profanity*

As for helping you, you're welcome. :smile:

it can operate with Adkats?
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by LCARSx64*:

 

I Thank you:smile:

No problem. :smile:

 

Glad to see people moving features outside of AdKats; Less work for me :smile:

Haha just doing my bit. :tongue: I have a killme one too but will need to alter it before releasing it publicly due to it being customized for the multi-lists I have setup. :ohmy:
* Restored post. It could be that the author is no longer active.
Link to comment
  • 1 month later...

Originally Posted by EdgarAllan*:

 

LCARS,

 

Whenever a player gets temp-banned, the reason showing up is, "1." I'm using an unmodified version of your Limit. Is there any fix for this? Thanks.

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

Originally Posted by LCARSx64*:

 

LCARS,

 

Whenever a player gets temp-banned, the reason showing up is, "1." I'm using an unmodified version of your Limit. Is there any fix for this? Thanks.

That's a little weird. The line that actually does the ban is:

Code:

plugin.EABanPlayerWithMessage(EABanType.EA_GUID, EABanDuration.Round, arg1, 0, "Talking excessively while muted!");
As you can see, the reason should be Talking excessively while muted!, arg1 will actually be the player's name. The muted players file is written as:

Player1Name Count1

Player2Name Count2

etc.

I just double checked the code and it's reading correctly, so I'm not sure where the "1." is coming from.

I'll run some tests and get back to you. :ohmy:

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

Originally Posted by LCARSx64*:

 

can this be converted to work with BF3?

Since I don't have access to a BF3 server and ProCon Layer for one, I can't be sure, but I believe this may work as is. Papa would know for sure.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by ColColonCleaner*:

 

Since I don't have access to a BF3 server and ProCon Layer for one, I can't be sure, but I believe this may work as is. Papa would know for sure.

It's completely chat based, so it should work without issue in BF3.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by _gp_*:

 

tried installing and using last night, says it was muting/unmuting players but no actions were being taken. Would not create a log file either, I changed the path of log file to BF3 folder.

 

Looks like code for BF4 is a little different than BF3.

 

_gp?

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

Originally Posted by LCARSx64*:

 

tried installing and using last night, says it was muting/unmuting players but no actions were being taken. Would not create a log file either, I changed the path of log file to BF3 folder.

 

Looks like code for BF4 is a little different than BF3.

 

_gp?

All that should need changing is the following line (near the top of the code):

Code:

String   fName   = "Plugins\\BF4\\" + server.Host + "_" + server.Port + "_muted_players.txt";
Change to:

Code:

String   fName   = "Plugins\\BF3\\" + server.Host + "_" + server.Port + "_muted_players.txt";
Make sure in Insane Limits settings, in the section titled 1. Settings, that virtual_mode is set to False. Also make sure that the actual limit's state is set to Enabled, e.g.: Code:
Limit_1_state         Enabled
* 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.