Ejemplo n.º 1
0
        // calculate remaining jailtime
        public static long getRemainingTime(Players.Player causedBy)
        {
            JailRecord record    = jailedPersons[causedBy];
            long       now       = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond / 1000;
            long       remaining = record.jailTimestamp + record.jailDuration - now;

            return(remaining);
        }
Ejemplo n.º 2
0
        // check time and release Players from jail
        public static void checkJailTimeLeft()
        {
            long now = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond / 1000;

            foreach (KeyValuePair <Players.Player, JailRecord> kvp in jailedPersons)
            {
                Players.Player target = kvp.Key;
                JailRecord     record = kvp.Value;
                if (record.jailTimestamp + record.jailDuration <= now)
                {
                    releasePlayer(target, null);
                }
            }

            return;
        }
Ejemplo n.º 3
0
        // load from config file
        public static void Load()
        {
            JSONNode jsonConfig;

            if (!JSON.Deserialize(ConfigfilePath, out jsonConfig, false))
            {
                Log.Write("No {0} found inside world directory, creating default config", CONFIG_FILE);
                return;
            }

            Log.Write("Loading jail config from {0}", CONFIG_FILE);
            try {
                JSONNode position;
                if (jsonConfig.TryGetAs("position", out position))
                {
                    jailPosition.x = position.GetAs <float>("x");
                    jailPosition.y = position.GetAs <float>("y");
                    jailPosition.z = position.GetAs <float>("z");
                    jailRange      = position.GetAs <uint>("range");
                    validJail      = true;
                }
                else
                {
                    Log.Write("Did not find a jail position, invalid config");
                }

                JSONNode visitorPos;
                if (jsonConfig.TryGetAs("visitorPosition", out visitorPos))
                {
                    jailVisitorPosition.x = visitorPos.GetAs <float>("x");
                    jailVisitorPosition.y = visitorPos.GetAs <float>("y");
                    jailVisitorPosition.z = visitorPos.GetAs <float>("z");
                    validVisitorPos       = true;
                }

                uint defaultJailTime;
                if (jsonConfig.TryGetAs("defaultJailTime", out defaultJailTime))
                {
                    DEFAULT_JAIL_TIME = defaultJailTime;
                }

                uint graceEscapeAttempts;
                if (jsonConfig.TryGetAs("graceEscapeAttempts", out graceEscapeAttempts))
                {
                    GRACE_ESCAPE_ATTEMPTS = graceEscapeAttempts;
                }

                JSONNode players;
                jsonConfig.TryGetAs("players", out players);
                foreach (JSONNode node in players.LoopArray())
                {
                    string PlayerName    = node.GetAs <string>("target");
                    long   jailTimestamp = node.GetAs <long>("time");
                    long   jailDuration  = node.GetAs <long>("duration");
                    string causedByName  = node.GetAs <string>("jailedBy");
                    string reason        = node.GetAs <string>("jailReason");

                    List <string> permissions = node.GetAs <List <string> >("permissions"); // TODO
                    // List<string> permissions = new List<string>;
                    // JSONNode jsonPerm;
                    // node.TryGetAs("permissions", out jsonPerm);
                    // foreach (string perm in jsonPerm.LoopArray()) {
                    //   permissions.Add(perm);
                    // }

                    Players.Player target;
                    Players.Player causedBy;
                    string         error;

                    // causedBy can be null in case of server actions, but target has to be a valid player
                    PlayerHelper.TryGetPlayer(causedByName, out causedBy, out error, true);
                    if (PlayerHelper.TryGetPlayer(PlayerName, out target, out error, true))
                    {
                        JailRecord record = new JailRecord(jailTimestamp, jailDuration, causedBy, reason, permissions);
                        jailedPersons.Add(target, record);
                    }
                }
            } catch (Exception e) {
                Log.Write("Error parsing {0}: {1}", CONFIG_FILE, e.Message);
            }

            LoadLogFile();
            return;
        }
Ejemplo n.º 4
0
        // save to config file
        public static void Save()
        {
            Log.Write("Saving jail config to {0}", CONFIG_FILE);

            JSONNode jsonConfig = new JSONNode();

            if (validJail)
            {
                JSONNode jsonPosition = new JSONNode();
                jsonPosition.SetAs("x", jailPosition.x);
                jsonPosition.SetAs("y", jailPosition.y);
                jsonPosition.SetAs("z", jailPosition.z);
                jsonPosition.SetAs("range", jailRange);
                jsonConfig.SetAs("position", jsonPosition);
            }

            if (validVisitorPos)
            {
                JSONNode jsonVisitorPos = new JSONNode();
                jsonVisitorPos.SetAs("x", jailVisitorPosition.x);
                jsonVisitorPos.SetAs("y", jailVisitorPosition.y);
                jsonVisitorPos.SetAs("z", jailVisitorPosition.z);
                jsonConfig.SetAs("visitorPosition", jsonVisitorPos);
            }

            jsonConfig.SetAs("defaultJailTime", DEFAULT_JAIL_TIME);
            jsonConfig.SetAs("graceEscapeAttempts", GRACE_ESCAPE_ATTEMPTS);

            JSONNode jsonPlayers = new JSONNode(NodeType.Array);

            foreach (KeyValuePair <Players.Player, JailRecord> kvp in jailedPersons)
            {
                Players.Player target     = kvp.Key;
                JailRecord     record     = kvp.Value;
                JSONNode       jsonRecord = new JSONNode();
                jsonRecord.SetAs("target", target.ID.steamID);
                jsonRecord.SetAs("time", record.jailTimestamp);
                jsonRecord.SetAs("duration", record.jailDuration);
                jsonRecord.SetAs("jailReason", record.jailReason);
                if (record.jailedBy != null)
                {
                    jsonRecord.SetAs("jailedBy", record.jailedBy.Name);
                }
                else
                {
                    jsonRecord.SetAs("jailedBy", "Server");
                }

                // JSONNode permissions = new JSONNode(NodeType.Array);
                // foreach (string perm in record.revokedPermissions) {
                //   permissions.AddToArray(perm);
                // }
                //jsonRecord.SetAs("permissions", record.revokedPermissions.ToString());  // TODO
                jsonRecord.SetAs("permissions", "none");
                jsonPlayers.AddToArray(jsonRecord);
            }
            jsonConfig.SetAs("players", jsonPlayers);

            try {
                JSON.Serialize(ConfigfilePath, jsonConfig);
            } catch (Exception e) {
                Log.Write("Could not save {0}: {1}", CONFIG_FILE, e.Message);
            }

            return;
        }
Ejemplo n.º 5
0
        // send a player to jail
        public static void jailPlayer(Players.Player target, Players.Player causedBy, string reason, long jailtime)
        {
            if (!validJail)
            {
                if (causedBy == null)
                {
                    Log.Write($"Cannot Jail {target.Name}: no valid jail found");
                }
                else
                {
                    Chat.Send(causedBy, "<color=yellow>No valid jail found. Unable to complete jailing</color>");
                }
                return;
            }

            Helper.TeleportPlayer(target, jailPosition);

            List <string> permissions = new List <string>();

            foreach (string permission in permissionList)
            {
                if (PermissionsManager.HasPermission(target, permission))
                {
                    permissions.Add(permission);
                    // PermissionsManager.RemovePermissionOfUser(causedBy, target, permission);
                }
            }

            long now = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond / 1000;
            // create/add history record
            JailLogRecord        logRecord = new JailLogRecord(now, jailtime * 60, causedBy, reason);
            List <JailLogRecord> playerRecords;

            if (jailLog.TryGetValue(target, out playerRecords))
            {
                playerRecords.Add(logRecord);
            }
            else
            {
                playerRecords = new List <JailLogRecord>();
                playerRecords.Add(logRecord);
                jailLog.Add(target, playerRecords);
            }
            SaveLogFile();

            // create jail record
            JailRecord record = new JailRecord(now, jailtime * 60, causedBy, reason, permissions);

            jailedPersons.Add(target, record);
            Save();

            string sender;

            if (causedBy == null)
            {
                sender = "Server";
            }
            else
            {
                sender = causedBy.Name;
            }
            Chat.Send(target, $"<color=red>{sender} threw you into jail! Reason: {reason}</color>");
            Chat.Send(target, $"Remaining Jail Time: {jailtime} minutes, type /jailtime to check");
            Chat.SendToConnectedBut(target, $"<color=red>{sender} threw {target.Name} into jail! Reason: {reason}</color>");
            Log.Write($"{sender} threw {target.Name} into jail! Reason: {reason}");
            return;
        }