Jump to content

[Insane Limits V0.9.8.0] [0.2.1.1 Reserve Slot for Server Starter]


ImportBot

Recommended Posts

Originally Posted by supermillhouse*:

 

Original one for BF3

 

It has come to my attention, mainly through fellow server owners and clan members, that it can be very difficult to start a server from empty. With this set of limits, I aim to reward anyone who help start my server with a reserved slot so that if and when they come back to the server when it is full, they do not have to queue to get in.

 

How it works:

 

It starts off by creating a temp list of players on the server when the server population is 4 or more.

 

If the server population drops below 4 the list is destroyed.

 

If the server population gets above 10 then it copies the first 6 players from the temp list that are still in the server to reserve list, and gives them a potential 5 days on the reserve slot but the slot is not given to them yet. The temp list is also destroyed at this point. These potential 5 days expire day by day.

 

If a player comes back within 5 days to help again then he is given another 5 days on top of whatever days he has left and is now rewarded with a reserve slot. There are some yell messages in here to but you can find them in the code. :biggrin:

 

This limit set has an expiry that if the player stop helping to start the server once they have a reserve slot then their name will be taken off the reserve slot after their days are up.

 

Limit #1 Add to Res

 

Set limit to evaluate OnJoin

 

Set first_check to this Code:

 

Code:

List<PlayerInfoInterface> players = new List<PlayerInfoInterface>();
players.AddRange(team1.players);
players.AddRange(team2.players);
if (team3.players.Count > 0) players.AddRange(team3.players);
if (team4.players.Count > 0) players.AddRange(team4.players);

int RSThresh = 5;    //When the player should get a reserve slot, when he has this number of days or more.
int numoftemps = 6;  //Number of players to be copied to reserve list
int RSCap = 30;      //Max number of reserve slot days
int rewarddays = 5;  //Number of days rewarded for helping to start the server once

int totaltcount = server.PlayerCount;
int i = 0;
string port = server.Port;
string host = server.Host;
string dir = "Plugins\\BF3\\TempList_" +host+ "_" +port+ ".txt";
string done = "Plugins\\BF3\\Done_" +host+ "_" +port+ ".txt";

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

foreach (PlayerInfoInterface p in players)
  {
  listofplayers.Add(p.Name);
  }


//check if server population is more than 4
if ((totaltcount >= 4) && (totaltcount <=10) && (!File.Exists(done)))return true;
//if server population is less than 4 then delete temp file if it exists
else if(totaltcount < 4)
  {
  if (File.Exists(dir)) File.Delete(dir);
  if (File.Exists(done)) File.Delete(done);
  }
//check if server population is more than 10 then transfer to ReserveList
else if((totaltcount > 10) && (File.Exists(dir)))
  {

  int runcount = 0;

  if(File.Exists(dir))
    {
    //read names on temp list
    string namecheck = File.ReadAllText(dir);
    //split names on temp list at ", "
    string[] tempnames = Regex.Split(namecheck, ", ");
    //check each split name and add to reserve slot list
    foreach (string tempname in tempnames)
      {
      //split the name at ":" in to array, 1st is player name, 2nd is date last updated
      string[] tempcont = tempname.Split(':');
      if ((listofplayers.Contains(tempcont[0]) && runcount < numoftemps))
        {runcount++;
        plugin.ConsoleWrite(tempname);
        DateTime now = DateTime.Now;
        string datestring = now.ToString("d");

        string dir2 = "Plugins\\BF3\\ReserveList_" +host+ "_" +port+ ".txt";
        if(File.Exists(dir2))
          {
          //read names on reserve list
          string resnamecheck = File.ReadAllText(dir2);
          plugin.ConsoleWrite(resnamecheck);
          //split names on temp list at ", "
          string[] resnames = Regex.Split(resnamecheck, ", ");
          //finds last entry
          string reslastitem = resnames[resnames.Length - 1];
          //check each split name that is in the reserve list and updates if it is in the temp list
          foreach (string resname in resnames)
            {
            //split the reserve name at ":" in to array, 1st is player name, 2nd is the last date participated in seeding, 3rd is the number of days reward if he is on the reserve list, 4th is a date used for expiry
            //the 4th entry is used to subtract 1 digit a day off of the 3rd entry
            string[] rescont = resname.Split(':');
              //checks if the reserve name equals the player name in temp
            if (rescont[0] == tempcont[0])
              {
              //stops multiple rewards per day
              if(rescont[1] != datestring)
                {
                //add on the reward
                int value = Convert.ToInt32(rescont[2]);
                value = value + rewarddays;
                //cap the reserve slot days at RSCap
                if (value > RSCap) value = RSCap;
                //save the new data
                string newlist = resnamecheck.Replace(resname, rescont[0]+":"+ datestring +":"+value.ToString()+":"+rescont[3]);
                File.WriteAllText(dir2, newlist);
                //adds player to reserve slot if the have helped enough and are not on it.
                if (value >= RSThresh)
                  {
                  if (!plugin.GetReservedSlotsList().Contains(rescont[0]))
                    {
                    plugin.ServerCommand("reservedSlotsList.add", rescont[0]);
                    plugin.ServerCommand("reservedSlotsList.save");
                    }
                  //message player
                  plugin.SendPlayerYell(rescont[0], "You have been awarded a reserve slot for helping to start the server, it will expire in approximately "+value+" days unless you help again." , 5);
                  }
                }
              //notify you that a player tried to help twice or more on a day to start server 
              else {plugin.ConsoleWrite(rescont[0] + " helped on the same day with no second reward.");}
              break;
              } 
            //if not in reserve list adds player and info to end of list.
            else if (resname == reslastitem)
              {
              plugin.ConsoleWrite("New Player");
              string newlist = resnamecheck + ", " + tempcont[0] +":" + datestring +":"+ rewarddays +":"+ datestring;
              File.WriteAllText(dir2, newlist);
              }
            }
          }
        //if reserve list doesnt exist, creates list with first entry
        else 
          {
          string newlist = "Blank, "+tempcont[0] +":"+ datestring +":"+ rewarddays +":"+ datestring;
          File.WriteAllText(dir2, newlist);
          }
        }
      else if (runcount >= numoftemps)break;
      }
    }
//deletes temp list after transfer to reserve list
  File.Delete(dir);
  File.WriteAllText(done, "DONE");
  }

return false;
Set second_check to this Code:

 

Please change the tag "SLAG" in line 13 to that of your clan to stop your clan members names getting added to the temp list

 

Code:

List<PlayerInfoInterface> players = new List<PlayerInfoInterface>();
players.AddRange(team1.players);
players.AddRange(team2.players);
if (team3.players.Count > 0) players.AddRange(team3.players);
if (team4.players.Count > 0) players.AddRange(team4.players);

string port = server.Port;
string host = server.Host;

foreach (PlayerInfoInterface p in players)
  {
//Change SLAG to your clan tag which probably all members have reserve slots anyway. This stops your clan members and any other clan friends in the "Res" list being added to the reward and them possibly later getting removed
  if ((!plugin.isInList(p.Name, "Res")) && (p.Tag != "SLAG"))
    {
    string dir = "Plugins\\BF3\\TempList_" +host+ "_" +port+ ".txt";
    if(File.Exists(dir))
      {
      string namecheck = File.ReadAllText(dir);
//    plugin.ConsoleWrite(namecheck);
      string[] tempnames = Regex.Split(namecheck, ", ");
      string templastitem = tempnames[tempnames.Length - 1];
      //stops the names being repeatedly entered in to the list every time it runs
      foreach (string tempname in tempnames)
        {
        string[] tempcont = tempname.Split(':');
        if (tempcont[0] == p.Name)
          {
          break;
          }    
        else if (tempname == templastitem)
          {
          //add new player
          plugin.ConsoleWrite("New Player");
          DateTime now = DateTime.Now;
          string datestring = now.ToString("d");
          string newlist = namecheck + ", " + p.Name +":" + datestring;
          File.WriteAllText(dir, newlist);
          }
        }
      }
    else
      {
      //create new temp file with player
      DateTime now = DateTime.Now;
      string datestring = now.ToString("d");
      string newlist = "Blank, "+p.Name +":"+ datestring;
      File.WriteAllText(dir, newlist);
      }
    }
  }
return false;
Limit #2 Remove from Res

 

Set limit to evaluate OnIntervalServer, set evaluation_interval to 1800

 

Set first_check to this Code:

 

Code:

int RSOffThresh = 0;   //Remove Reserve slot on number of days
int RSDellThresh = -1; //Remove from Reserve list on number of days

string port = server.Port;
string host = server.Host;
string dir = "Plugins\\BF3\\ReserveList_" +host+ "_" +port+ ".txt";
if(File.Exists(dir))
  {
  string namecheck = File.ReadAllText(dir);
  plugin.ConsoleWrite(namecheck);
  string[] resnames = Regex.Split(namecheck, ", ");
  DateTime now = DateTime.Now;
  string datestring = now.ToString("d");
  foreach (string resname in resnames)
    {
    if (resname != "Blank")
      {
      string[] rescont = resname.Split(':');
      if (rescont[3] != datestring)
        {
        int value = Convert.ToInt32(rescont[2]);
        value--;
        if ((value == RSOffThresh) && (plugin.GetReservedSlotsList().Contains(rescont[0])))
          {
          plugin.ServerCommand("reservedSlotsList.remove", rescont[0]);
          plugin.ServerCommand("reservedSlotsList.save");
          plugin.ConsoleWrite(value.ToString());
          namecheck = namecheck.Replace(resname, rescont[0]+":"+ rescont[1] +":"+value.ToString()+":"+ datestring);
          plugin.ConsoleWrite(namecheck);
          File.WriteAllText(dir, namecheck);
          }
        else if(value <= RSDellThresh)
          {
          plugin.ConsoleWrite(value.ToString());
          namecheck = namecheck.Replace(", "+resname, "");
          plugin.ConsoleWrite(namecheck);
          File.WriteAllText(dir, namecheck);
          }
          else
          {
          plugin.ConsoleWrite(value.ToString());
          namecheck = namecheck.Replace(resname, rescont[0]+":"+ rescont[1] +":"+value.ToString() +":"+ datestring);
          plugin.ConsoleWrite(namecheck);
          File.WriteAllText(dir, namecheck);
          }
        }
      }
    }
  }
return false;
List #1 Res

 

Set list_1_name to Res

Set list_1_comparison to CaseSensitive

list_1_data is to contain your permanently reserved players names who do not have your clan tag

 

 

Some Bonus Code:

 

This is code I use to do some yelling on first spawn, first yell is "Type !rules for Server Rules"

Second yell is, if applicable, "You have a reserve slot for helping to start the server, it will expire in approximately? day(s) unless you help again"

 

Limit #3 Yell !Rules & Res

 

Set limit to evaluate OnSpawn

 

Set first_check to this Expression:

 

Code:

(  true  )
Set Secont_check to this Code:

 

Code:

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


//The thread code below allows me to delay the reward message on first spawn because directly below this text is a !rules yell. It then yells the reward message 5 seconds later

//simple yell to start for type !rules for server rules
plugin.SendPlayerYell(player.Name, "Type !rules for Server Rules" , 5);

// Closure bindings for the delegate
string port = server.Port;
string host = server.Host;
string yellMsg = null;
string dir = "Plugins\\BF3\\ReserveList_" +host+ "_" +port+ ".txt";
if(File.Exists(dir))
  {
  //read names on reserve list
  string namecheck = File.ReadAllText(dir);
  //plugin.ConsoleWrite(namecheck);
  //split names on Reserve list at ", "
  string[] resnames = Regex.Split(namecheck, ", ");
  //check each split name 
  foreach (string resname in resnames)
    {
    //split the name at ":" in to array, 1st is player name, 2nd is date last updated, 3rd can be ignored, was extra code in second check
    string[] rescont = resname.Split(':');
    if (rescont[0] == player.Name)
      {
      if (plugin.GetReservedSlotsList().Contains(rescont[0]))
        {
        int value = Convert.ToInt32(rescont[2]);
        yellMsg = "You have a reserve slot for helping to start the server, it will expire in approximately "+value+" day(s) unless you help again.";
        break;
        }
      }
    }
  }

// Thread delegate

ThreadStart AdminYell = delegate  {
//5 second delay before yelling the reward message
  Thread.Sleep(5*1000);
  plugin.SendPlayerYell(player.Name, yellMsg , 5);
  };

// Main thread code
if (yellMsg != null)
  {
  Thread t = new Thread(AdminYell);
  t.Start();
  Thread.Sleep(10);
  }
return false;
* Restored post. It could be that the author is no longer active.
Link to comment
  • Replies 190
  • Created
  • Last Reply

Originally Posted by supermillhouse*:

 

[bF4]

 

It has come to my attention, mainly through fellow server owners and clan members, that it can be very difficult to start a server from empty. With this set of limits, I aim to reward anyone who help start my server with a reserved slot so that if and when they come back to the server when it is full, they do not have to queue to get in.

 

Thank you PapaCharlie9 for you Tag and Player name exclusions :biggrin:

 

The BF3 one is on post No2 here*

 

View on GItHub

 

How it works:

 

It starts off by creating a temp list of players on the server when the server population is 4 or more.

 

If the server population drops below 4 the list is destroyed.

 

If the server population gets above 20 then it copies the first 10 players from the temp list that are still in the server to reserve list, and gives them a potential 5 days on the reserve slot but the slot is not given to them yet. The temp list is also destroyed at this point. These potential 5 days expire day by day.

 

If a player comes back within 5 days to help again then he is given another 5 days on top of whatever days he has left and is now rewarded with a reserve slot. There are some yell messages in here to but you can find them in the code. :biggrin:

 

This limit set has an expiry that if the player stop helping to start the server once they have a reserve slot then their name will be taken off the reserve slot after their days are up.

 

Limit #1 Add to Res

 

Set limit to evaluate OnJoin

 

Set first_check to this Code:

 

Code:

List<PlayerInfoInterface> players = new List<PlayerInfoInterface>();
players.AddRange(team1.players);
players.AddRange(team2.players);
if (team3.players.Count > 0) players.AddRange(team3.players);
if (team4.players.Count > 0) players.AddRange(team4.players);

int RSThresh = 5;    //When the player should get a reserve slot, when he has this number of days or more.
int numoftemps = 10;  //Number of players to be copied to reserve list
int triggertransfer = 20;  //When the players list is copied over
int RSCap = 30;      //Max number of reserve slot days
int rewarddays = 5;  //Number of days rewarded for helping to start the server once
int totaltcount = server.PlayerCount;
int i = 0;
string port = server.Port;
string host = server.Host;
string dir = "Plugins\\BF4\\TempList_" +host+ "_" +port+ ".txt";
string done = "Plugins\\BF4\\Done_" +host+ "_" +port+ ".txt";
string logdir = "Logs\\InsaneLimits\\ReserveList_" +host+ "_" +port+ "dump_file.txt";
if (!Directory.Exists(Path.GetDirectoryName(logdir))) Directory.CreateDirectory(Path.GetDirectoryName(logdir));

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

foreach (PlayerInfoInterface p in players)
  {
  listofplayers.Add(p.Name);
  }


//check if server population is more than 4
if ((totaltcount >= 4) && (totaltcount <= triggertransfer) && (!File.Exists(done)))return true;
//if server population is less than 4 then delete temp file if it exists
else if(totaltcount < 4)
  {
  if (File.Exists(dir)) File.Delete(dir);
  if (File.Exists(done)) File.Delete(done);
  }
//check if server population is more than 10 then transfer to ReserveList
else if((totaltcount > triggertransfer) && (File.Exists(dir)))
  {

  int runcount = 0;

  if(File.Exists(dir))
    {
    //read names on temp list
    string namecheck = File.ReadAllText(dir);
    //split names on temp list at ", "
    string[] tempnames = Regex.Split(namecheck, ", ");
    //check each split name and add to reserve slot list
    foreach (string tempname in tempnames)
      {
      //split the name at ":" in to array, 1st is player name, 2nd is date last updated
      string[] tempcount = tempname.Split(':');
      if ((listofplayers.Contains(tempcount[0]) && runcount < numoftemps))
        {runcount++;
        plugin.ConsoleWrite(tempname);
        DateTime now = DateTime.Now;
        string datestring = now.ToString("d");

        string dir2 = "Plugins\\BF4\\ReserveList_" +host+ "_" +port+ ".txt";
        if(File.Exists(dir2))
          {
          //read names on reserve list
          string resnamecheck = File.ReadAllText(dir2);
          plugin.ConsoleWrite(resnamecheck);
          //split names on temp list at ", "
          string[] resnames = Regex.Split(resnamecheck, ", ");
          //finds last entry
          string reslastitem = resnames[resnames.Length - 1];
          //check each split name that is in the reserve list and updates if it is in the temp list
          foreach (string resname in resnames)
            {
            //split the reserve name at ":" in to array, 1st is player name, 2nd is the last date participated in seeding, 3rd is the number of days reward if he is on the reserve list, 4th is a date used for expiry
            //the 4th entry is used to subtract 1 digit a day off of the 3rd entry
            string[] rescount = resname.Split(':');
              //checks if the reserve name equals the player name in temp
            if (rescount[0] == tempcount[0])
              {
              //stops multiple rewards per day
              if(rescount[1] != datestring)
                {
                //add on the reward
                int value = Convert.ToInt32(rescount[2]);
                value = value + rewarddays;
                //cap the reserve slot days at RSCap
                if (value > RSCap) value = RSCap;
                //save the new data
                string newlist = resnamecheck.Replace(resname, rescount[0]+":"+ datestring +":"+value.ToString()+":"+rescount[3]);
                File.WriteAllText(dir2, newlist);
                //adds player to reserve slot if the have helped enough and are not on it.
                if (value >= RSThresh)
                  {
                  if (!plugin.GetReservedSlotsList().Contains(rescount[0]))
                    {
                    plugin.ServerCommand("reservedSlotsList.add", rescount[0]);
                    plugin.ServerCommand("reservedSlotsList.save");
                    plugin.PRoConChat(rescount[0] + " got added to ReserveSlot successfully with " + value.ToString() + " day(s) remaining.");
                    plugin.Log(logdir, rescount[0] + " got added to the ReserveSlot successfully with " + value.ToString() + " day(s) remaining.");
                    }
                  //message player
                  plugin.SendPlayerYell(rescount[0], rescount[0] + ": You have been awarded a reserve slot for helping to start the server, it will expire in approximately "+value+" days unless you help again.", 5);
                  }
                }
              //notify you that a player tried to help twice or more on a day to start server 
              else {plugin.ConsoleWrite(rescount[0] + " helped on the same day with no second reward.");}
              break;
              } 
            //if not in reserve list adds player and info to end of list.
            else if (resname == reslastitem)
              {
              string newlist = resnamecheck + ", " + tempcount[0] +":" + datestring +":"+ rewarddays +":"+ datestring;
              File.WriteAllText(dir2, newlist);
              plugin.PRoConChat("New Player," + tempcount[0] + "added to end of the reserve slot list.");
              plugin.Log(logdir, "New Player," + tempcount[0] + "added to end of the reserve slot list with " + rewarddays.ToString() + " day(s) remaining.");
              }
            }
          }
        //if reserve list doesnt exist, creates list with first entry
        else 
          {
          string newlist = "Blank, "+tempcount[0] +":"+ datestring +":"+ rewarddays +":"+ datestring;
          File.WriteAllText(dir2, newlist);
          plugin.PRoConChat("Reserve slot list created with first player," + tempcount[0] + ".");
          plugin.Log(logdir, "Reserve slot list created with first player," + tempcount[0] + ".");
          }
        }
      else if (runcount >= numoftemps)break;
      }
    }
//deletes temp list after transfer to reserve list
  File.Delete(dir);
  File.WriteAllText(done, "DONE");
  }

return false;
Set second_check to this Code:

 

Code:

List<PlayerInfoInterface> players = new List<PlayerInfoInterface>();
players.AddRange(team1.players);
players.AddRange(team2.players);
if (team3.players.Count > 0) players.AddRange(team3.players);
if (team4.players.Count > 0) players.AddRange(team4.players);

string port = server.Port;
string host = server.Host;

foreach (PlayerInfoInterface p in players)
  {
  // New tag extraction code by PapaCharlie9
  String tag = p.Tag;

    if (String.IsNullOrEmpty(tag)) {
        // Maybe they are using [_-=]XXX[=-_]PlayerName[_-=]XXX[=-_] format
        Match tm = Regex.Match(p.Name, @"^[=_\-]*([^=_\-]{2,4})[=_\-]");
        if (tm.Success) {
            tag = tm.Groups[1].Value;
        } else {
            tm = Regex.Match(p.Name, @"[^=_\-][=_\-]([^=_\-]{2,4})[=_\-]*$");
            if (tm.Success) { 
                tag = tm.Groups[1].Value;
            } else {
                tag = String.Empty;
            }
        }
    }

//This stops your clan members and any other clan friends in the "Res" list being added to the reward and them possibly later getting removed

  if ((!plugin.isInList(p.Name, "Res")) && (!plugin.isInList(tag, "Res")))
    {
    string dir = "Plugins\\BF4\\TempList_" +host+ "_" +port+ ".txt";
    if(File.Exists(dir))
      {
      string namecheck = File.ReadAllText(dir);
//    plugin.ConsoleWrite(namecheck);
      string[] tempnames = Regex.Split(namecheck, ", ");
      string templastitem = tempnames[tempnames.Length - 1];
      //stops the names being repeatedly entered in to the list every time it runs
      foreach (string tempname in tempnames)
        {
        string[] tempcount = tempname.Split(':');
        if (tempcount[0] == p.Name)
          {
          break;
          }    
        else if (tempname == templastitem)
          {
          //add new player
          plugin.ConsoleWrite("Templist New Player: " + p.FullName);
          DateTime now = DateTime.Now;
          string datestring = now.ToString("d");
          string newlist = namecheck + ", " + p.Name +":" + datestring;
          File.WriteAllText(dir, newlist);
          }
        }
      }
    else
      {
      //create new temp file with player
      plugin.ConsoleWrite("Tempfile New Player: " + p.FullName);
      DateTime now = DateTime.Now;
      string datestring = now.ToString("d");
      string newlist = "Blank, "+p.Name +":"+ datestring;
      File.WriteAllText(dir, newlist);
      }
    }
  }
return false;
Limit #2 Remove from Res

 

Set limit to evaluate OnIntervalServer, set evaluation_interval to 1800

 

Set first_check to this Code:

 

Code:

int RSOffThresh = 0;   //Remove Reserve slot on number of days
int RSDellThresh = -1; //Remove from Reserve list on number of days

string port = server.Port;
string host = server.Host;
string dir = "Plugins\\BF4\\ReserveList_" +host+ "_" +port+ ".txt";
if(File.Exists(dir))
  {
  string namecheck = File.ReadAllText(dir);
  plugin.ConsoleWrite(namecheck);
  string[] resnames = Regex.Split(namecheck, ", ");
  DateTime now = DateTime.Now;
  string datestring = now.ToString("d");
  foreach (string resname in resnames)
    {
    if (resname != "Blank")
      {
      string[] rescount = resname.Split(':');
      if (rescount[3] != datestring)
        {
        int value = Convert.ToInt32(rescount[2]);
        value--;
        if ((value == RSOffThresh) && (plugin.GetReservedSlotsList().Contains(rescount[0])))
          {
          plugin.ServerCommand("reservedSlotsList.remove", rescount[0]);
          plugin.ServerCommand("reservedSlotsList.save");
          plugin.ConsoleWrite(value.ToString());
          namecheck = namecheck.Replace(resname, rescount[0]+":"+ rescount[1] +":"+value.ToString()+":"+ datestring);
          plugin.ConsoleWrite(namecheck);
          File.WriteAllText(dir, namecheck);
          }
        else if(value <= RSDellThresh)
          {
          plugin.ConsoleWrite(value.ToString());
          namecheck = namecheck.Replace(", "+resname, "");
          plugin.ConsoleWrite(namecheck);
          File.WriteAllText(dir, namecheck);
          }
          else
          {
          plugin.ConsoleWrite(value.ToString());
          namecheck = namecheck.Replace(resname, rescount[0]+":"+ rescount[1] +":"+value.ToString() +":"+ datestring);
          plugin.ConsoleWrite(namecheck);
          File.WriteAllText(dir, namecheck);
          }
        }
      }
    }
  }
return false;
List #1 Res

 

Set list_1_name to Res

Set list_1_comparison to CaseSensitive

list_1_data is to contain a list of clan tags or soldier names that should be excluded from this reward, separated by commas, for example:

 

Code:

SLAG, SL4G, PapaCharlieNiner
Some Bonus Code:

 

This is code I use to do some yelling on first spawn, first yell is "Type !rules for Server Rules"

Second yell is, if applicable, "You have a reserve slot for helping to start the server, it will expire in approximately? day(s) unless you help again"

 

Limit #3 Yell !Rules & Res

 

Set limit to evaluate OnSpawn

 

Set first_check to this Expression:

 

Code:

(  true  )
Set Secont_check to this Code:

 

Code:

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

string path = "Logs/InsaneLimits/GUID.log";
if (!Directory.Exists(Path.GetDirectoryName(path))) Directory.CreateDirectory(Path.GetDirectoryName(path));

plugin.Log(path, plugin.R("[%date% %time%] [%p_ct% - %p_n%]    >>EA GUID:    %p_eg%<<         and         >>PB GUID:    %p_pg%<<     and      >>IP:    %p_ip%<<"));
//The thread code below allows me to delay the reward message on first spawn because directly below this text is a !rules yell. It then yells the reward message 5 seconds later

//simple yell to start for type !rules for server rules
plugin.SendPlayerMessage(player.Name, "Type !rules for Server Rules");

// Closure bindings for the delegate
string port = server.Port;
string host = server.Host;
string yellMsg = null;
string dir = "Plugins\\BF4\\ReserveList_" +host+ "_" +port+ ".txt";
if(File.Exists(dir))
  {
  //read names on reserve list
  string namecheck = File.ReadAllText(dir);
  //plugin.ConsoleWrite(namecheck);
  //split names on Reserve list at ", "
  string[] resnames = Regex.Split(namecheck, ", ");
  //check each split name 
  foreach (string resname in resnames)
    {
    //split the name at ":" in to array, 1st is player name, 2nd is date last updated, 3rd can be ignored, was extra code in second check
    string[] rescount = resname.Split(':');
    if (rescount[0] == player.Name)
      {
      if (plugin.GetReservedSlotsList().Contains(rescount[0]))
        {
        int value = Convert.ToInt32(rescount[2]);
        yellMsg = "You have a reserve slot for helping to start the server, it will expire in approximately "+value+" day(s) unless you help again.";
        break;
        }
      }
    }
  }

// Thread delegate

ThreadStart AdminYell = delegate  {
//5 second delay before yelling the reward message
  Thread.Sleep(5*1000);
  plugin.SendPlayerYell(player.Name, yellMsg, 5);
  };

// Main thread code
if (yellMsg != null)
  {
  Thread t = new Thread(AdminYell);
  t.Start();
  Thread.Sleep(10);
  }
return false;
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by HexaCanon*:

 

nice, this is very interesting limit, learned a lot from it and i will implement it to my servers soon.

 

i love how you made clear notes in the code.

 

just a quick question, wouldn't a stand alone plugin be better ?

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

Originally Posted by PapaCharlie9*:

 

Sticky: [bF3] Getting started with this bare bones plugin template*

 

:smile:

 

Ironically, doing anything with a timer is harder to do with a standalone plugin. Insane Limits has spoiled you all for that.

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

Originally Posted by HexaCanon*:

 

looks like its working, question, on the next day/time the server gets going are people added to the list of is it just those 6 at one time?

line 6 to 9 of the first code has some options you might want to look at.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by HexaCanon*:

 

i have it on all of my servers at the moment, just a question: does the limit track how many times someone helped ? is it possible to do so ? was wondering if someone helps 10 times (10 days) then i can give him more awards. you can make so that when someone helps X times an email is sent to admin telling him the player name.. just an idea.

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

Originally Posted by supermillhouse*:

 

looks like its working, question, on the next day/time the server gets going are people added to the list of is it just those 6 at one time?

Many people will get added to the list, it is not limited to 6.
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by supermillhouse*:

 

i have it on all of my servers at the moment, just a question: does the limit track how many times someone helped ? is it possible to do so ? was wondering if someone helps 10 times (10 days) then i can give him more awards. you can make so that when someone helps X times an email is sent to admin telling him the player name.. just an idea.

It could be incorporated in some way, if the player was ever to lose their slot the information saved in the reserve list would also go as their name is deleted, unless you just changed it to leave the names in the reserve list and just make it expire down to 0 and no lower. You would then need another stored value that just incremented every time they helped.

 

Another thought was if they helped 5 times the get 2 days for each assist, when they have helped 10 times they get 5 days for each assist, and so on. The problem is then the incentive to help is diminished. :sad:

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

Originally Posted by supermillhouse*:

 

any tips on how i can use your code to make a permenant reserve slots for members?

Change the bit in the code "SLAG" to be that of your clan tag, then just add your members manualy to the reserve list through procon
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by Tomgun*:

 

insane limits is timing out and failing to see clan tags, so everyone is going on the list that is the first 6, just thought Id share that..

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

Originally Posted by droopie*:

 

you did a great job with this. now if only someone (or you) could make a list to log and grant limited admin to vips based on top most frequent players on the server kinda that uses the showthread....345&viewfull=1* to grant the vips

 

 

i posted it here showthread....4240#post74240*

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

Originally Posted by droopie*:

 

keep gettinig this for all 3 limits [21:08:26 84] [insane Limits] ERROR: 1 error compiling Expression

[21:08:26 84] [insane Limits] ERROR: (CS0117, line: 65, column: 30): 'PRoConEvents.PluginInterface' does not contain a definition for 'GetReservedSlotsList'

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

Originally Posted by madmuthamonk*:

 

Code:

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


//The thread code below allows me to delay the reward message on first spawn because directly below this text is a !rules yell. It then yells the reward message 5 seconds later

//simple yell to start for type !rules for server rules
plugin.SendPlayerYell(player.Name, "Type !rules for Server Rules" , 5);

// Closure bindings for the delegate
string port = server.Port;
string host = server.Host;
string yellMsg = null;
string dir = "Plugins\\BF3\\ReserveList_" +host+ "_" +port+ ".txt";
if(File.Exists(dir))
  {
  //read names on reserve list
  string namecheck = File.ReadAllText(dir);
  //plugin.ConsoleWrite(namecheck);
  //split names on Reserve list at ", "
  string[] resnames = Regex.Split(namecheck, ", ");
  //check each split name 
  foreach (string resname in resnames)
    {
    //split the name at ":" in to array, 1st is player name, 2nd is date last updated, 3rd can be ignored, was extra code in second check
    string[] rescont = resname.Split(':');
    if (rescont[0] == player.Name)
      {
      if (plugin.GetReservedSlotsList().Contains(rescont[0]))
        {
        int value = Convert.ToInt32(rescont[2]);
        yellMsg = "You have a reserve slot for helping to start the server, it will expire in approximately "+value+" day(s) unless you help again.";
        break;
        }
      }
    }
  }

// Thread delegate

ThreadStart AdminYell = delegate  {
//5 second delay before yelling the reward message
  Thread.Sleep(5*1000);
  plugin.SendPlayerYell(player.Name, yellMsg , 5);
  };

// Main thread code
if (yellMsg != null)
  {
  Thread t = new Thread(AdminYell);
  t.Start();
  Thread.Sleep(10);
  }
return false;
Is there a way to send to chat and yell for this limit. I want to make sure the person getting the reserved slot sees it. Sometimes a server message overrides the yell message. With both chat and yell the person would have a better chance to see it.
* Restored post. It could be that the author is no longer active.
Link to comment
  • 5 months later...

Originally Posted by Strikes*:

 

It would be nice if this would still work for BF4. Even though the reserve system doesn't work; there's the VIP/Reversed Slots that work for/with other plugins; like a custom message for them when they logon and special recognition. I'd appreciate it if this could just go ahead and do it... so it'll just work when it's enabled on DICE/EA side of things... since we already have those files we can be writing to.

 

But, I was curious if there was a way to copy/paste this once it was setup on one of my servers... then to all of my other servers. Without having to manually set each of them up again? Or maybe I should be asking that in the main plugin thread.

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

Originally Posted by Strikes*:

 

It would be nice if this would still work for BF4. Even though the reserve system doesn't work; there's the VIP/Reversed Slots that work for/with other plugins; like a custom message for them when they logon and special recognition. I'd appreciate it if this could just go ahead and do it... so it'll just work when it's enabled on DICE/EA side of things... since we already have those files we can be writing to.

 

But, I was curious if there was a way to copy/paste this once it was setup on one of my servers... then to all of my other servers. Without having to manually set each of them up again? Or maybe I should be asking that in the main plugin thread.

I was able to figure out how to copy the settings from server to server; that can be disregarded.

 

I'm now curious about the Yell - I do believe that's still disabled/not working yet. Does anyone know the text to substitute to get a 'Say' to work?

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

Originally Posted by PapaCharlie9*:

 

At the request of IAF SDS, I've modified supermillhouse's code to handle the case where a clan tag is part of the player's name, rather than a separate item set in Battlelog. I also changed all the file paths from BF3 to BF4 and changed all of the clan tag and friends checking to use the "Res" list. This means that you only have to change the contents of the list to add more friends or clans to ignore, instead of the code. I also changed the yell to a chat message.

 

This is a copy of post #1 with my modifications added inline to the code.

 

Limit #1 Add to Res

 

Set limit to evaluate OnJoin

 

Set first_check to this Code:

 

Code:

List<PlayerInfoInterface> players = new List<PlayerInfoInterface>();
players.AddRange(team1.players);
players.AddRange(team2.players);
if (team3.players.Count > 0) players.AddRange(team3.players);
if (team4.players.Count > 0) players.AddRange(team4.players);

int RSThresh = 5;    //When the player should get a reserve slot, when he has this number of days or more.
int numoftemps = 6;  //Number of players to be copied to reserve list
int RSCap = 30;      //Max number of reserve slot days
int rewarddays = 5;  //Number of days rewarded for helping to start the server once

int totaltcount = server.PlayerCount;
int i = 0;
string port = server.Port;
string host = server.Host;
string dir = "Plugins\\BF4\\TempList_" +host+ "_" +port+ ".txt";
string done = "Plugins\\BF4\\Done_" +host+ "_" +port+ ".txt";

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

foreach (PlayerInfoInterface p in players)
  {
  listofplayers.Add(p.Name);
  }


//check if server population is more than 4
if ((totaltcount >= 4) && (totaltcount <=10) && (!File.Exists(done)))return true;
//if server population is less than 4 then delete temp file if it exists
else if(totaltcount < 4)
  {
  if (File.Exists(dir)) File.Delete(dir);
  if (File.Exists(done)) File.Delete(done);
  }
//check if server population is more than 10 then transfer to ReserveList
else if((totaltcount > 10) && (File.Exists(dir)))
  {

  int runcount = 0;

  if(File.Exists(dir))
    {
    //read names on temp list
    string namecheck = File.ReadAllText(dir);
    //split names on temp list at ", "
    string[] tempnames = Regex.Split(namecheck, ", ");
    //check each split name and add to reserve slot list
    foreach (string tempname in tempnames)
      {
      //split the name at ":" in to array, 1st is player name, 2nd is date last updated
      string[] tempcont = tempname.Split(':');
      if ((listofplayers.Contains(tempcont[0]) && runcount < numoftemps))
        {runcount++;
        plugin.ConsoleWrite(tempname);
        DateTime now = DateTime.Now;
        string datestring = now.ToString("d");

        string dir2 = "Plugins\\BF4\\ReserveList_" +host+ "_" +port+ ".txt";
        if(File.Exists(dir2))
          {
          //read names on reserve list
          string resnamecheck = File.ReadAllText(dir2);
          plugin.ConsoleWrite(resnamecheck);
          //split names on temp list at ", "
          string[] resnames = Regex.Split(resnamecheck, ", ");
          //finds last entry
          string reslastitem = resnames[resnames.Length - 1];
          //check each split name that is in the reserve list and updates if it is in the temp list
          foreach (string resname in resnames)
            {
            //split the reserve name at ":" in to array, 1st is player name, 2nd is the last date participated in seeding, 3rd is the number of days reward if he is on the reserve list, 4th is a date used for expiry
            //the 4th entry is used to subtract 1 digit a day off of the 3rd entry
            string[] rescont = resname.Split(':');
              //checks if the reserve name equals the player name in temp
            if (rescont[0] == tempcont[0])
              {
              //stops multiple rewards per day
              if(rescont[1] != datestring)
                {
                //add on the reward
                int value = Convert.ToInt32(rescont[2]);
                value = value + rewarddays;
                //cap the reserve slot days at RSCap
                if (value > RSCap) value = RSCap;
                //save the new data
                string newlist = resnamecheck.Replace(resname, rescont[0]+":"+ datestring +":"+value.ToString()+":"+rescont[3]);
                File.WriteAllText(dir2, newlist);
                //adds player to reserve slot if the have helped enough and are not on it.
                if (value >= RSThresh)
                  {
                  if (!plugin.GetReservedSlotsList().Contains(rescont[0]))
                    {
                    plugin.ServerCommand("reservedSlotsList.add", rescont[0]);
                    plugin.ServerCommand("reservedSlotsList.save");
                    }
                  //message player
                  plugin.SendPlayerMessage(rescont[0], rescont[0] + ": You have been awarded a reserved slot for helping to start the server, it will expire in approximately "+value+" days unless you help again.");
                  plugin.ConsoleWrite(rescont[0] + ": Notified, " + value + " days to help again");
                  }
                }
              //notify you that a player tried to help twice or more on a day to start server 
              else {plugin.ConsoleWrite(rescont[0] + " helped on the same day with no second reward.");}
              break;
              } 
            //if not in reserve list adds player and info to end of list.
            else if (resname == reslastitem)
              {
              plugin.ConsoleWrite("New Reward " + tempcont[0]);
              string newlist = resnamecheck + ", " + tempcont[0] +":" + datestring +":"+ rewarddays +":"+ datestring;
              File.WriteAllText(dir2, newlist);
              }
            }
          }
        //if reserve list doesnt exist, creates list with first entry
        else 
          {
          plugin.ConsoleWrite("New Reward File " + tempcont[0]);
          string newlist = "Blank, "+tempcont[0] +":"+ datestring +":"+ rewarddays +":"+ datestring;
          File.WriteAllText(dir2, newlist);
          }
        }
      else if (runcount >= numoftemps)break;
      }
    }
//deletes temp list after transfer to reserve list
  File.Delete(dir);
  File.WriteAllText(done, "DONE");
  }

return false;
Set second_check to this Code (this has most of the changes for handling clan tags and the "Res" list):

 

Code:

List<PlayerInfoInterface> players = new List<PlayerInfoInterface>();
players.AddRange(team1.players);
players.AddRange(team2.players);
if (team3.players.Count > 0) players.AddRange(team3.players);
if (team4.players.Count > 0) players.AddRange(team4.players);

string port = server.Port;
string host = server.Host;

foreach (PlayerInfoInterface p in players)
  {
  // New tag extraction code by PapaCharlie9
  String tag = p.Tag;

    if (String.IsNullOrEmpty(tag) && !p.StatsError) {
        // Maybe they are using [_-=]XXX[=-_]PlayerName[_-=]XXX[=-_] format
        Match tm = Regex.Match(p.Name, @"^[=_\-]*([^=_\-]{2,4})[=_\-]");
        if (tm.Success) {
            tag = tm.Groups[1].Value;
        } else {
            tm = Regex.Match(p.Name, @"[^=_\-][=_\-]([^=_\-]{2,4})[=_\-]*$");
            if (tm.Success) { 
                tag = tm.Groups[1].Value;
            } else {
                tag = String.Empty;
            }
        }
    }

//This stops your clan members and any other clan friends in the "Res" list being added to the reward and them possibly later getting removed

  if ((!plugin.isInList(p.Name, "Res")) && (!plugin.isInList(tag, "Res")))
    {
    string dir = "Plugins\\BF4\\TempList_" +host+ "_" +port+ ".txt";
    if(File.Exists(dir))
      {
      string namecheck = File.ReadAllText(dir);
//    plugin.ConsoleWrite(namecheck);
      string[] tempnames = Regex.Split(namecheck, ", ");
      string templastitem = tempnames[tempnames.Length - 1];
      //stops the names being repeatedly entered in to the list every time it runs
      foreach (string tempname in tempnames)
        {
        string[] tempcont = tempname.Split(':');
        if (tempcont[0] == p.Name)
          {
          break;
          }    
        else if (tempname == templastitem)
          {
          //add new player
          plugin.ConsoleWrite("Templist New Player: " + p.FullName);
          DateTime now = DateTime.Now;
          string datestring = now.ToString("d");
          string newlist = namecheck + ", " + p.Name +":" + datestring;
          File.WriteAllText(dir, newlist);
          }
        }
      }
    else
      {
      //create new temp file with player
      plugin.ConsoleWrite("Tempfile New Player: " + p.FullName);
      DateTime now = DateTime.Now;
      string datestring = now.ToString("d");
      string newlist = "Blank, "+p.Name +":"+ datestring;
      File.WriteAllText(dir, newlist);
      }
    }
  }
return false;
Limit #2 Remove from Res

 

Set limit to evaluate OnIntervalServer, set evaluation_interval to 1800

 

Set first_check to this Code:

 

Code:

int RSOffThresh = 0;   //Remove Reserve slot on number of days
int RSDellThresh = -1; //Remove from Reserve list on number of days

string port = server.Port;
string host = server.Host;
string dir = "Plugins\\BF4\\ReserveList_" +host+ "_" +port+ ".txt";
if(File.Exists(dir))
  {
  string namecheck = File.ReadAllText(dir);
  plugin.ConsoleWrite(namecheck);
  string[] resnames = Regex.Split(namecheck, ", ");
  DateTime now = DateTime.Now;
  string datestring = now.ToString("d");
  foreach (string resname in resnames)
    {
    if (resname != "Blank")
      {
      string[] rescont = resname.Split(':');
      if (rescont[3] != datestring)
        {
        int value = Convert.ToInt32(rescont[2]);
        value--;
        if ((value == RSOffThresh) && (plugin.GetReservedSlotsList().Contains(rescont[0])))
          {
          plugin.ServerCommand("reservedSlotsList.remove", rescont[0]);
          plugin.ServerCommand("reservedSlotsList.save");
          plugin.ConsoleWrite(value.ToString());
          namecheck = namecheck.Replace(resname, rescont[0]+":"+ rescont[1] +":"+value.ToString()+":"+ datestring);
          plugin.ConsoleWrite(namecheck);
          File.WriteAllText(dir, namecheck);
          }
        else if(value <= RSDellThresh)
          {
          plugin.ConsoleWrite(value.ToString());
          namecheck = namecheck.Replace(", "+resname, "");
          plugin.ConsoleWrite(namecheck);
          File.WriteAllText(dir, namecheck);
          }
          else
          {
          plugin.ConsoleWrite(value.ToString());
          namecheck = namecheck.Replace(resname, rescont[0]+":"+ rescont[1] +":"+value.ToString() +":"+ datestring);
          plugin.ConsoleWrite(namecheck);
          File.WriteAllText(dir, namecheck);
          }
        }
      }
    }
  }
return false;
"Res" list

 

Create a new list, call it Res, change the comparison to CaseSensitive, add a list of clan tags or soldier names that should be excluded from this reward, separated by commas, for example:

 

Code:

SLAG, PapaCharlieNiner, IAF
Some Bonus Code:

 

This is code I use to do some yelling on first spawn, first yell is "Type !rules for Server Rules"

Second yell is, if applicable, "You have a reserve slot for helping to start the server, it will expire in approximately? day(s) unless you help again"

 

Limit #3 Yell !Rules & Res

 

Set limit to evaluate OnSpawn

 

Set first_check to this Expression:

 

Code:

(  true  )
Set second_check to this Code:

 

Code:

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


//The thread code below allows me to delay the reward message on first spawn because directly below this text is a !rules yell. It then yells the reward message 5 seconds later

//simple yell to start for type !rules for server rules
plugin.SendPlayerYell(player.Name, "Type !rules for Server Rules" , 5);

// Closure bindings for the delegate
string port = server.Port;
string host = server.Host;
string yellMsg = null;
string dir = "Plugins\\BF4\\ReserveList_" +host+ "_" +port+ ".txt";
if(File.Exists(dir))
  {
  //read names on reserve list
  string namecheck = File.ReadAllText(dir);
  //plugin.ConsoleWrite(namecheck);
  //split names on Reserve list at ", "
  string[] resnames = Regex.Split(namecheck, ", ");
  //check each split name 
  foreach (string resname in resnames)
    {
    //split the name at ":" in to array, 1st is player name, 2nd is date last updated, 3rd can be ignored, was extra code in second check
    string[] rescont = resname.Split(':');
    if (rescont[0] == player.Name)
      {
      if (plugin.GetReservedSlotsList().Contains(rescont[0]))
        {
        int value = Convert.ToInt32(rescont[2]);
        yellMsg = "You have a reserve slot for helping to start the server, it will expire in approximately "+value+" day(s) unless you help again.";
        break;
        }
      }
    }
  }

// Thread delegate

ThreadStart AdminYell = delegate  {
//5 second delay before yelling the reward message
  Thread.Sleep(5*1000);
  plugin.SendPlayerYell(player.Name, yellMsg , 5);
  };

// Main thread code
if (yellMsg != null)
  {
  Thread t = new Thread(AdminYell);
  t.Start();
  Thread.Sleep(10);
  }
return false;
* Restored post. It could be that the author is no longer active.
Link to comment

Originally Posted by IAF-SDS*:

 

Thank you supermillhouse for creating this reserve limit, and thank you Papa for your updates to make it work with my clan's tag system. The above modification now works like MULTIbalancer, where it will read the clan tags when they are part of the name itself. It's nice to have the res list include both the clan tags as well as non-clan member names.

 

Very nice work guys, especially to you supermillhouse for this idea and the limit's initial creation.

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

Originally Posted by PapaCharlie9*:

 

Does the yell section actually yell, or does it need to be modified for BF4?

As of R12, there is no yell in BF4, so the bonus code doesn't do anything.

 

You can use the following limit instead to tell new players about the reserved slot reward:

 

showthread....eeting-Message*

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