/// <summary> /// Display a tip to a given player /// </summary> /// <param name="tips"></param> private void Display(PlayerTips tips) { tips.active = true; Message message = tips.queue.Dequeue(); if (!tips.player.IsConnected) { gameTips.Remove(tips); return; } tips.player?.SendConsoleCommand("gametip.hidegametip"); tips.player?.SendConsoleCommand("gametip.showgametip", message.text); timer.Once(message.duration, () => { tips.player?.SendConsoleCommand("gametip.hidegametip"); if (tips.queue.Count > 0) { Display(tips); } else { gameTips.Remove(tips); } }); }
/// <summary> /// Broadcast a game tip to all players online /// </summary> /// <param name="message"></param> /// <param name="duration"></param> /// <param name="mandatory"></param> void BroadcastGameTip(string message, float duration = 5f, bool mandatory = false) { if (string.IsNullOrEmpty(message)) { return; } foreach (BasePlayer player in BasePlayer.activePlayerList) { if (!mandatory && data.blacklist.Contains(player.userID)) { continue; } PlayerTips playerTips; if ((playerTips = gameTips.Find(x => x.player == player)) != null) { playerTips.queue.Enqueue(new Message() { text = message, duration = duration }); } else { gameTips.Add(playerTips = new PlayerTips() { player = player }); playerTips.queue.Enqueue(new Message() { text = message, duration = duration }); } if (!playerTips.active) { Display(playerTips); } } }
/// <summary> /// Create a new game tip /// </summary> /// <param name="player"></param> /// <param name="message"></param> /// <param name="duration"></param> /// <param name="mandatory"></param> void ShowGameTip(BasePlayer player, string message, float duration = 5f, bool mandatory = false) { if (player == null || string.IsNullOrEmpty(message)) { return; } if (!mandatory && data.blacklist.Contains(player.userID)) { return; } PlayerTips tip; if ((tip = gameTips.Find(x => x.player == player)) != null) { tip.queue.Enqueue(new Message() { text = message, duration = duration }); } else { gameTips.Add(tip = new PlayerTips() { player = player }); tip.queue.Enqueue(new Message() { text = message, duration = duration }); } if (!tip.active) { Display(tip); } }