Ejemplo n.º 1
0
        public static void OnChat(ServerChatEventArgs args)
        {
            TSPlayer plr = TShock.Players[args.Who];
            string   text;

            if (SurvivalCore.IsChatEvent && SurvivalCore.ChatEventWord == args.Text)
            {
                SurvivalCore.ChatEventStoper.Stop();
                TSPlayer.All.SendMessage($"[i:889] [c/595959:;] [c/00cc66:Event] [c/595959:;] [c/00cc66:{TShock.Players[args.Who].Name}] napisal najszybciej [c/00cc66:{SurvivalCore.ChatEventWord}] i wygral {chatEventWinAmount} €. [c/595959:(]{Math.Round(SurvivalCore.ChatEventStoper.Elapsed.TotalSeconds, 3)} sec[c/595959:)]", new Color(128, 255, 191));
                TSPlayer.All.SendData(PacketTypes.CreateCombatTextExtended, "Brawo!", (int)Color.LimeGreen.PackedValue, TShock.Players[args.Who].X, TShock.Players[args.Who].Y);
                SurvivalCore.SrvPlayers[args.Who].Money += chatEventWinAmount;
                SurvivalCore.IsChatEvent    = false;
                SurvivalCore.ChatEventTimer = DateTime.UtcNow;
                SurvivalCore.ChatEventStoper.Reset();
            }
            try
            {
                try
                {
                    text = string.Format(ChatFormat,
                                         (SurvivalCore.SrvPlayers[args.Who].PrefixItem == -1) ? PowelderAPI.Utils.GetGroupItem(plr.Group.Name) : SurvivalCore.SrvPlayers[args.Who].PrefixItem, PowelderAPI.Utils.GetGroupColor(plr.Group.Name), (plr.Group.Name == "Xedlefix" || plr.Group.Name == "Iwobos") ? "Zalozyciel" : plr.Group.Name, SurvivalCore.SrvPlayers[args.Who].NickColor ?? PowelderAPI.Utils.GetGroupColor(plr.Group.Name), plr.Name, args.Text);
                }
                catch (NullReferenceException)
                {
                    text = string.Format(ChatFormat,
                                         PowelderAPI.Utils.GetGroupItem(plr.Group.Name), PowelderAPI.Utils.GetGroupColor(plr.Group.Name), plr.Group.Name, PowelderAPI.Utils.GetGroupColor(plr.Group.Name), plr.Name, args.Text);
                }
                PlayerHooks.OnPlayerChat(plr, args.Text, ref text);
                TSPlayer.All.SendMessage(text, plr.Group.R, plr.Group.G, plr.Group.B);
                TSPlayer.Server.SendMessage(string.Format(((plr.Group.Name == "Xedlefix" || plr.Group.Name == "Iwobos") ? "Zalozyciel" : plr.Group.Name) + " " + plr.Name + ": " + args.Text), byte.MaxValue, byte.MaxValue, byte.MaxValue);
                TShock.Log.Info(((plr.Group.Name == "Xedlefix" || plr.Group.Name == "Iwobos") ? "Zalozyciel" : plr.Group.Name) + " " + plr.Name + ": " + args.Text);
                args.Handled = true;
            }
            catch (FormatException)
            {
                args.Handled = true;
            }
        }
Ejemplo n.º 2
0
        void OnChat(ServerChatEventArgs e)
        {
            if (e.Handled)
            {
                return;
            }

            // A quick check to reduce DB work when this feature isn't in use
            if (String.IsNullOrWhiteSpace(Config.ContributorChatFormat))
            {
                return;
            }

            var player = TShock.Players[e.Who];

            if (player == null || !player.Active || !player.IsLoggedIn || !player.ContainsData(Contributor.DataKey))
            {
                return;
            }

            if (e.Text.Length > 500)
            {
                return;
            }

            // If true, the message is a command, so we skip it
            if ((e.Text.StartsWith(TShockAPI.Commands.Specifier) || e.Text.StartsWith(TShockAPI.Commands.SilentSpecifier)) &&
                !String.IsNullOrWhiteSpace(e.Text.Substring(1)))
            {
                return;
            }

            // Player needs to be able to talk, not be muted, and must be logged in
            if (!player.HasPermission(TShockAPI.Permissions.canchat) || player.mute || !player.IsLoggedIn)
            {
                return;
            }

            // At this point, ChatAboveHeads is not supported, but it could be a thing in the future
            if (!TShock.Config.EnableChatAboveHeads)
            {
                Contributor con  = player.GetData <Contributor>(Contributor.DataKey);
                Tier        tier = Tiers.Get(con.Tier);

                /* Contributor chat format:
                 *      {0} - group name
                 *      {1} - group prefix
                 *      {2} - player name
                 *      {3} - group suffix
                 *      {4} - message text
                 *      {5} - tier shortname
                 *      {6} - tier name
                 *      {7} - webID
                 */
                var text = String.Format(Config.ContributorChatFormat, player.Group.Name, player.Group.Prefix, player.Name,
                                         player.Group.Suffix, e.Text, tier.ShortName ?? "", tier.Name ?? "", con.XenforoId ?? -1);
                PlayerHooks.OnPlayerChat(player, e.Text, ref text);
                Color?color = con.ChatColor;
                if (!color.HasValue)
                {
                    #region DEBUG
#if DEBUG
                    TShock.Log.ConsoleInfo("OnChat: Contributor color was null");
#endif
                    #endregion
                    // If the contributor doesn't have a custom chat color, check their tier
                    color = tier.ChatColor;
                    if (!color.HasValue)
                    {
                        // As neither the tier nor the contributor have a custom chat color, use the group's default
                        color = new Color(player.Group.R, player.Group.G, player.Group.B);
                    }
                }
                TShock.Utils.Broadcast(text, color.Value.R, color.Value.G, color.Value.B);
                #region
#if DEBUG
                TShock.Log.ConsoleInfo("OnChat: Contributor was handled by CTRS");
#endif
                #endregion
                e.Handled = true;
            }
        }
Ejemplo n.º 3
0
        internal static async Task Broadcast(string PreNSuf, string Message, byte r, byte g, byte b, TSPlayer tsplr, ServerChatEventArgs args)
        {
            args.Handled = true;
            string OriginalMessage = $"{PreNSuf}{Message}";

            TShock.Log.Info(string.Format("Broadcast: {0}", OriginalMessage));
            string text = String.Format(PConfig.ChatFormat, tsplr.Group.Name, tsplr.Group.Prefix, tsplr.Name, tsplr.Group.Suffix, args.Text);

            bool[]   PlayerLangOn = new bool[3];   //0 = EN | 1 = PT | 2 = ES
            string[] TrMessage    = new string[3]; //0 = EN | 1 = PT | 2 = ES

            if (!PConfig.Enabled)
            {
                Color c = new Color(r, g, b);
                TShockB.AllSendMessage(OriginalMessage, c);
                Logger.WriteLine($"[{Logger.DateTimeNow}] [CHAT] {System.Text.RegularExpressions.Regex.Replace(OriginalMessage, @"\[c\/[a-f0-9]{6}:([^\]]+)]", @"$1")}", ConsoleColor.DarkGreen);
                PlayerHooks.OnPlayerChat(tsplr, args.Text, ref text);
                return;
            }

            TSPlayerB.SendMessage(tsplr.Index, OriginalMessage, r, g, b);

            if (!PConfig.ConsoleChatTranslate)
            {
                Logger.WriteLine($"[{Logger.DateTimeNow}] [CHAT] {System.Text.RegularExpressions.Regex.Replace(OriginalMessage, @"\[c\/[a-f0-9]{6}:([^\]]+)]", @"$1")}", ConsoleColor.DarkGreen);
            }

            foreach (var plr in TShockB.Players.Where(p => p != null && p.Active))
            {
                PlayerLangOn[(int)Enum.Parse(typeof(TSPlayerB.Language), Base.Config.DefaultHydraLanguage)] = true;
                if (PlayerLangOn[0] && PlayerLangOn[1] && PlayerLangOn[2])
                {
                    break;
                }
                switch (TSPlayerB.PlayerLanguage[plr.Index])
                {
                case TSPlayerB.Language.English:
                    PlayerLangOn[0] = true;
                    break;

                case TSPlayerB.Language.Portuguese:
                    PlayerLangOn[1] = true;
                    break;

                case TSPlayerB.Language.Spanish:
                    PlayerLangOn[2] = true;
                    break;
                }
            }
            try
            {
                if (!string.IsNullOrWhiteSpace(Message))
                {
                    foreach (var Data in PConfig.WordsReplaces)
                    {
                        Message = System.Text.RegularExpressions.Regex.Replace(Message, $@"\b{Data.From}\b", Data.To);
                    }

                    var translator = new GoogleTranslateFreeApi.GoogleTranslator();

                    GoogleTranslateFreeApi.Language from = GoogleTranslateFreeApi.Language.Auto;

                    for (int i = 0; i < PlayerLangOn.Count(); i++)
                    {
                        if (i == (int)TSPlayerB.PlayerLanguage[tsplr.Index])
                        {
                            TrMessage[i] = $"{OriginalMessage}{SuccessTag()}";
                            continue;
                        }
                        if (PlayerLangOn[i])
                        {
                            GoogleTranslateFreeApi.Language to = GoogleTranslateFreeApi.Language.English;
                            switch (i)
                            {
                            case 1:
                                to = GoogleTranslateFreeApi.Language.Portuguese;
                                break;

                            case 2:
                                to = GoogleTranslateFreeApi.Language.Spanish;
                                break;
                            }
                            var result = await translator.TranslateLiteAsync(Message, from, to);

                            TrMessage[i] = $"{PreNSuf}{result.MergedTranslation}{SuccessTag()}";
                        }
                    }
                    if (PConfig.ConsoleChatTranslate)
                    {
                        Logger.WriteLine($"[{Logger.DateTimeNow}] [CHAT] {System.Text.RegularExpressions.Regex.Replace(TrMessage[(int)Enum.Parse(typeof(TSPlayerB.Language), Base.Config.DefaultHydraLanguage)], @"\[c\/[a-f0-9]{6}:([^\]]+)]", @"$1")}", ConsoleColor.DarkGreen);
                    }
                }
                else
                {
                    return;
                }
            }
            catch (Exception ex)
            {
                for (int i = 0; i < PlayerLangOn.Count(); i++)
                {
                    if (PlayerLangOn[i])
                    {
                        TrMessage[i] = $"{OriginalMessage}{ErrorTag()}";
                    }
                }
                if (PConfig.ConsoleChatTranslate)
                {
                    Logger.WriteLine($"[{Logger.DateTimeNow}] [CHAT] {System.Text.RegularExpressions.Regex.Replace(TrMessage[(int)Enum.Parse(typeof(TSPlayerB.Language), Base.Config.DefaultHydraLanguage)], @"\[c\/[a-f0-9]{6}:([^\]]+)]", @"$1")}", ConsoleColor.DarkRed);
                }
                Logger.doLog($"[Hydra.ChatTranslator] {ex.Message}", Hydra.Config.DebugLevel.Error, _name);
            }

            Parallel.ForEach(TShock.Players.Where(p => p != null && p != tsplr /*&& p.Active*/), fchplr =>
            {
                if (DisableTr[fchplr.Index])
                {
                    TSPlayerB.SendMessage(fchplr.Index, OriginalMessage, r, g, b);
                }
                else if (TSPlayerB.PlayerLanguage[tsplr.Index] == TSPlayerB.PlayerLanguage[fchplr.Index])
                {
                    TSPlayerB.SendMessage(fchplr.Index, $"{OriginalMessage}{(TrMessage[(int)TSPlayerB.PlayerLanguage[fchplr.Index]].Contains("[c/ff0000:(X)])") ? "[c/ff0000:(X)])" : "")}" /*TrMessage[(int)TSPlayerB.PlayerLanguage[fchplr.Index]]*/, r, g, b);
                }
                else if (TSPlayerB.PlayerLanguage[tsplr.Index] != TSPlayerB.PlayerLanguage[fchplr.Index])
                {
                    TSPlayerB.SendMessage(fchplr.Index, TrMessage[(int)TSPlayerB.PlayerLanguage[fchplr.Index]], r, g, b);
                }
            });

            PlayerHooks.OnPlayerChat(tsplr, args.Text, ref text);
        }