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)); } }
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); }
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; } }
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); }