Ejemplo n.º 1
0
        private void EventOnPlayerConnected(UnturnedPlayer player)
        {
            var sPlayer     = player.SteamPlayer().playerID;
            var data        = PlayerSavedata.readData(sPlayer, "/Player/Time.dat");
            var totalPlayed = data.readSingle("TotalPlayingTime");

            if (totalPlayed >= _cfg.SecToDamage || player.HasPermission(_cfg.BypassPermission))
            {
                return;
            }

            var seconds = _cfg.SecToDamage - totalPlayed;

            var timer = new Timer
            {
                Interval  = seconds * 1000,
                AutoReset = false
            };

            timer.Elapsed += (sender, args) =>
            {
                (sender as Timer)?.Dispose();
                UsersData.Remove(player.Player);

                TaskDispatcher.QueueOnMainThread(() => UnturnedChat.Say(player, Translate("dest_play"), Color.cyan));
            };

            UsersData.Add(player.Player, timer);
            UnturnedChat.Say(player, Translate("need_to_play", TimeSpan.FromSeconds(seconds).ToString("h'ч.' m'м.' s'с.'")), Color.red);
        }
        public override TemplateObject Handle(TagData data)
        {
            if (data.Remaining == 0)
            {
                return(this);
            }
            switch (data[0])
            {
            // <--[tag]
            // @Name OfflinePlayerTag.steam_id
            // @Group General Information
            // @ReturnType TextTag
            // @Returns the Steam ID number of the player.
            // @Example "1000" .steam_id returns "1000".
            // -->
            case "steam_id":
                return(new TextTag(Internal.steamID.ToString()).Handle(data.Shrink()));

            // <--[tag]
            // @Name OfflinePlayerTag.health
            // @Group Status
            // @ReturnType NumberTag
            // @Returns the offline player's current health level. Maximum health level is 100.
            // @Example "1000" .health returns "56".
            // -->
            case "health":
                // TODO: make more efficient? maybe cache?
                if (PlayerSavedata.fileExists(Internal, "/Player/Life.dat") && Level.info.type == ELevelType.SURVIVAL)
                {
                    Block block = PlayerSavedata.readBlock(Internal, "/Player/Life.dat", 0);
                    if (block.readByte() > 1)
                    {
                        // block data:
                        // 1) byte - health
                        // 2) byte - food
                        // 3) byte - water
                        // 4) byte - virus
                        // 5) boolean - isBleeding
                        // 6) boolean - isBroken
                        return(new NumberTag(block.readByte()).Handle(data.Shrink()));
                    }
                }
                return(new NumberTag(100).Handle(data.Shrink()));

            default:
                return(new TextTag(ToString()).Handle(data));
            }
        }
Ejemplo n.º 3
0
        private void OnDestroy()
        {
            if (PlayerSavedata.fileExists(Player.Player.channel.owner.playerID, "/Player/Time.dat"))
            {
                PlayerSavedata.deleteFile(Player.Player.channel.owner.playerID, "/Player/Time.dat");
            }

            Data data = new Data();

            data.writeSingle("TotalPlayingTime", TotalPlayingTime);
            data.writeSingle("LastSessionPlayingTime", CurrentSessionPlayingTime);
            data.writeString("DateFirstConnection", _dateFirstConnection.ToString());
            data.writeString("DateLastConnection", DateTime.Now.ToString());

            PlayerSavedata.writeData(Player.Player.channel.owner.playerID, "/Player/Time.dat", data);
        }
Ejemplo n.º 4
0
        private void Start()
        {
            _connectedTime = Time.realtimeSinceStartup;
            _dateCurrentSessionConnection = DateTime.Now;



            if (PlayerSavedata.fileExists(Player.Player.channel.owner.playerID, "/Player/Time.dat"))
            {
                Data data = PlayerSavedata.readData(Player.Player.channel.owner.playerID, "/Player/Time.dat");

                _totalPlayingTime       = data.readSingle("TotalPlayingTime", 0);
                _lastSessionPlayingTime = data.readSingle("LastSessionPlayingTime", 0);



                if (DateTime.TryParse(data.readString("DateFirstConnection"), out DateTime firstDate))
                {
                    _dateFirstConnection = firstDate;
                }
                else
                {
                    _dateFirstConnection = DateTime.Now;
                }



                if (DateTime.TryParse(data.readString("DateLastConnection"), out DateTime lastDate))
                {
                    _dateLastConnection = lastDate;
                }
                else
                {
                    _dateLastConnection = DateTime.Now;
                }
            }
            else
            {
                _dateFirstConnection = DateTime.Now;
                _dateLastConnection  = DateTime.Now;
            }
        }
Ejemplo n.º 5
0
        public void Execute(IRocketPlayer caller, string[] command)
        {
            if (command.Length < 1)
            {
                UnturnedChat.Say(caller, DamageTime.Instance.Translate("command_invalid"), Color.red);
                return;
            }

            var target = UnturnedPlayer.FromName(command[0]);

            if (target == null)
            {
                UnturnedChat.Say(caller, DamageTime.Instance.Translate("player_not_found"), Color.red);
                return;
            }

            var data = PlayerSavedata.readData(target.SteamPlayer().playerID, "/Player/Time.dat");

            data.writeSingle("TotalPlayingTime", 0);

            UnturnedChat.Say(caller, DamageTime.Instance.Translate("time_reset", target.DisplayName), Color.cyan);
        }