예제 #1
0
    /// <summary>
    /// Creates an active radio entry for the channel, and adds it to the ActiveChannels dictionary
    /// </summary>
    private void CreateActiveRadioEntry(ChatChannel channel)
    {
        Logger.Log($"Creating radio channel entry for {channel}", Category.Chat);
        // Create the template object which is hidden in the list but deactivated
        GameObject radioEntry = Instantiate(activeChannelTemplate, activeChannelTemplate.transform.parent, false);

        // Setup the name and onClick function
        radioEntry.GetComponentInChildren <Text>().text = channel.ToString();
        radioEntry.GetComponentInChildren <Button>().onClick.AddListener(() =>
        {
            _ = SoundManager.Play(SingletonSOSounds.Instance.Click01);
            DisableChannel(channel);
        });
        // Add it to a list for easy access later
        ActiveChannels.Add(channel, radioEntry);
    }
예제 #2
0
    /// <summary>
    /// Processes message further for the chat log.
    /// Adds text styling, color and channel prefixes depending on the message and its modifiers.
    /// </summary>
    /// <returns>The chat message, formatted to suit the chat log.</returns>
    public static string ProcessMessageFurther(string message, string speaker, ChatChannel channels,
                                               ChatModifier modifiers)
    {
        //Skip everything if system message
        if (channels.HasFlag(ChatChannel.System))
        {
            return(message);
        }

        //Skip everything in case of combat channel
        if (channels.HasFlag(ChatChannel.Combat))
        {
            return(AddMsgColor(channels, $"<i>{message}</i>"));            //POC
        }

        //Skip everything if it is an action or examine message or if it is a local message
        //without a speaker (which is used by machines)
        if (channels.HasFlag(ChatChannel.Examine) || channels.HasFlag(ChatChannel.Action) ||
            channels.HasFlag(ChatChannel.Local) &&
            string.IsNullOrEmpty(speaker))
        {
            return(AddMsgColor(channels, $"<i>{message}</i>"));
        }

        // Skip everything if the message is a local warning
        if (channels.HasFlag(ChatChannel.Warning))
        {
            return(AddMsgColor(channels, $"<i>{message}</i>"));
        }

        message = StripTags(message);

        //Check for emote. If found skip chat modifiers, make sure emote is only in Local channel
        if ((modifiers & ChatModifier.Emote) == ChatModifier.Emote)
        {
            // /me message
            channels = ChatChannel.Local;
            message  = AddMsgColor(channels, $"<i><b>{speaker}</b> {message}</i>");
            return(message);
        }

        //Check for OOC. If selected, remove all other channels and modifiers (could happen if UI f***s up or someone tampers with it)
        if (channels.HasFlag(ChatChannel.OOC))
        {
            //ooc name quick fix
            var name = Regex.Replace(speaker, @"\t\n\r", "");
            if (string.IsNullOrWhiteSpace(name))
            {
                name = "nerd";
            }

            message = AddMsgColor(channels, $"[ooc] <b>{speaker}: {message}</b>");
            return(message);
        }

        //Ghosts don't get modifiers
        if (channels.HasFlag(ChatChannel.Ghost))
        {
            string[] _ghostVerbs = { "cries", "moans" };
            return(AddMsgColor(channels, $"[dead] <b>{speaker}</b> {_ghostVerbs.PickRandom()}: {message}"));
        }

        string verb = "says,";

        if ((modifiers & ChatModifier.Mute) == ChatModifier.Mute)
        {
            return("");
        }

        if ((modifiers & ChatModifier.Whisper) == ChatModifier.Whisper)
        {
            verb    = "whispers,";
            message = $"<i>{message}</i>";
        }
        else if ((modifiers & ChatModifier.Sing) == ChatModifier.Sing)
        {
            verb     = "sings,";
            message += " ♫";
        }
        else if ((modifiers & ChatModifier.Yell) == ChatModifier.Yell)
        {
            verb    = "yells,";
            message = $"<b>{message}</b>";
        }
        else if ((modifiers & ChatModifier.State) == ChatModifier.State)
        {
            verb = "states,";
        }
        else if ((modifiers & ChatModifier.ColdlyState) == ChatModifier.ColdlyState)
        {
            verb = "coldly states,";
        }
        else if (message.EndsWith("!"))
        {
            verb = "exclaims,";
        }
        else if (message.EndsWith("?"))
        {
            verb = "asks,";
        }

        var chan = $"[{channels.ToString().ToLower().Substring(0, 3)}] ";

        if (channels.HasFlag(ChatChannel.Command))
        {
            chan = "[cmd] ";
        }

        if (channels.HasFlag(ChatChannel.Local))
        {
            chan = "";
        }

        return(AddMsgColor(channels,
                           $"{chan}<b>{speaker}</b> {verb}" // [cmd] Username says,
                           + "  "                           // Two hair spaces. This triggers Text-to-Speech.
                           + "\"" + message + "\""));       // "This text will be spoken by TTS!"
    }
예제 #3
0
 private void Start()
 {
     tooltipRect      = tooltip.GetComponent <RectTransform>();
     tooltipText      = tooltip.GetComponentInChildren <Text>();
     tooltipText.text = channel.ToString();
 }
예제 #4
0
    /// <summary>
    /// Processes message further for the chat log.
    /// Adds text styling, color and channel prefixes depending on the message and its modifiers.
    /// </summary>
    /// <returns>The chat message, formatted to suit the chat log.</returns>
    public static string ProcessMessageFurther(string message, string speaker, ChatChannel channels,
                                               ChatModifier modifiers, bool stripTags = true)
    {
        playedSound = false;
        //Highlight in game name by bolding and underlining if possible
        //Dont play sound here as it could be examine or action, we only play sound for someone speaking
        message = HighlightInGameName(message, false);

        //Skip everything if system message
        if (channels.HasFlag(ChatChannel.System))
        {
            return(message);
        }

        //Skip everything in case of combat channel
        if (channels.HasFlag(ChatChannel.Combat))
        {
            return(AddMsgColor(channels, $"<i>{message}</i>"));            //POC
        }

        //Skip everything if it is an action or examine message or if it is a local message
        //without a speaker (which is used by machines)
        if (channels.HasFlag(ChatChannel.Examine) ||
            channels.HasFlag(ChatChannel.Action) ||
            channels.HasFlag(ChatChannel.Local) && string.IsNullOrEmpty(speaker))
        {
            return(AddMsgColor(channels, $"<i>{message}</i>"));
        }

        // Skip everything if the message is a local warning
        if (channels.HasFlag(ChatChannel.Warning))
        {
            return(AddMsgColor(channels, $"<i>{message}</i>"));
        }

        if (stripTags)
        {
            message = StripTags(message);

            //Bold names again after tag stripping
            message = HighlightInGameName(message);
        }

        //Check for emote. If found skip chat modifiers, make sure emote is only in Local channel
        if ((modifiers & ChatModifier.Emote) == ChatModifier.Emote)
        {
            // /me message
            channels = ChatChannel.Local;
            if (playerGameObject != null)
            {
                DoEmoteAction(message, playerGameObject, Instance.emoteActionManager);
                playerGameObject = null;
                return("");
            }

            message = AddMsgColor(channels, $"<i><b>{speaker}</b> {message}</i>");
            return(message);
        }

        //Check for OOC. If selected, remove all other channels and modifiers (could happen if UI f***s up or someone tampers with it)
        if (channels.HasFlag(ChatChannel.OOC))
        {
            //ooc name quick fix
            var name = Regex.Replace(speaker, @"\t\n\r", "");
            if (string.IsNullOrWhiteSpace(name))
            {
                name = "nerd";
            }

            //highlight OOC name by bolding and underlining if possible
            message = HighlightName(message, ServerData.Auth.CurrentUser.DisplayName);

            message = AddMsgColor(channels, $"[ooc] <b>{name}: {message}</b>");
            return(message);
        }

        //Ghosts don't get modifiers
        if (channels.HasFlag(ChatChannel.Ghost))
        {
            string[] _ghostVerbs = { "cries", "moans" };
            return(AddMsgColor(channels, $"[dead] <b>{speaker}</b> {_ghostVerbs.PickRandom()}: {message}"));
        }
        string verb = "says,";

        if ((modifiers & ChatModifier.Mute) == ChatModifier.Mute)
        {
            return("");
        }

        if ((modifiers & ChatModifier.Whisper) == ChatModifier.Whisper)
        {
            verb    = "whispers,";
            message = $"<i>{message}</i>";
        }
        else if ((modifiers & ChatModifier.Sing) == ChatModifier.Sing)
        {
            verb     = "sings,";
            message += " ♫";
        }
        else if ((modifiers & ChatModifier.Yell) == ChatModifier.Yell)
        {
            verb    = "yells,";
            message = $"<b>{message}</b>";
        }
        else if ((modifiers & ChatModifier.State) == ChatModifier.State)
        {
            verb = "states,";
        }
        else if ((modifiers & ChatModifier.ColdlyState) == ChatModifier.ColdlyState)
        {
            verb = " coldly states,";
        }
        else if (message.EndsWith("!"))
        {
            verb = "exclaims,";
        }
        else if (message.EndsWith("?"))
        {
            verb = "asks,";
        }

        var chan = $"[{channels.ToString().ToLower().Substring(0, 3)}] ";

        if (channels.HasFlag(ChatChannel.Command))
        {
            chan = "[cmd] ";
        }

        if (channels.HasFlag(ChatChannel.Local))
        {
            chan = "";
        }

        return(AddMsgColor(channels,
                           $"{chan}<b>{speaker}</b> {verb}" // [cmd]  Username says,
                           + "  "                           // Two hair spaces. This triggers Text-to-Speech.
                           + "\"" + message + "\""));       // "This text will be spoken by TTS!"
    }
예제 #5
0
        void IncommingChatMessage(ChatChannel channel, string message, string sender)
        {
            if( InvokeRequired )
            {
                Invoke(new MethodInvoker(delegate() { IncommingChatMessage(channel, message, sender); }));
            }
            else
            {
                string formattedMessage = message;
                if( sender != null )
                {
                    formattedMessage = string.Format("[{0}] {1}: {2}", channel.ToString(), sender, message);
                }

                ChatEntry ce = new ChatEntry(channel, formattedMessage);
                _chatEntries.Add(ce);
                FilterChat();
            }
        }
예제 #6
0
    public static string ProcessMessageFurther(string message, string speaker, ChatChannel channels,
                                               ChatModifier modifiers)
    {
        //Skip everything if system message
        if (channels.HasFlag(ChatChannel.System))
        {
            return(message);
        }

        //Skip everything in case of combat channel
        if (channels.HasFlag(ChatChannel.Combat))
        {
            return(AddMsgColor(channels, $"<i>{message}</i>"));            //POC
        }

        //Skip everything if it is an action or examine message or if it is a local message
        //without a speaker (which is used by machines)
        if (channels.HasFlag(ChatChannel.Examine) || channels.HasFlag(ChatChannel.Action) ||
            channels.HasFlag(ChatChannel.Local) && string.IsNullOrEmpty(speaker))
        {
            return(AddMsgColor(channels, $"<i>{message}</i>"));
        }

        // Skip everything if the message is a local warning
        if (channels.HasFlag(ChatChannel.Warning))
        {
            return(AddMsgColor(channels, $"<i>{message}</i>"));
        }

        message = StripTags(message);

        //Check for emote. If found skip chat modifiers, make sure emote is only in Local channel
        Regex rx = new Regex("^(/me )");

        if (rx.IsMatch(message))
        {
            // /me message
            channels = ChatChannel.Local;

            message = rx.Replace(message, " ");
            message = AddMsgColor(channels, $"<i><b>{speaker}</b> {message}</i>");
            return(message);
        }

        //Check for OOC. If selected, remove all other channels and modifiers (could happen if UI f***s up or someone tampers with it)
        if (channels.HasFlag(ChatChannel.OOC))
        {
            message = AddMsgColor(channels, $"[ooc] <b>{speaker}: {message}</b>");
            return(message);
        }

        //Ghosts don't get modifiers
        if (channels.HasFlag(ChatChannel.Ghost))
        {
            return(AddMsgColor(channels, $"[dead] <b>{speaker}</b>: {message}"));
        }

        message = ApplyModifiers(message, modifiers);
        if (message.Length < 1)
        {
            return("");
        }

        var verb         = "says:";
        var toUpperCheck = message.ToUpper(CultureInfo.InvariantCulture);

        if (message.Contains("!") && toUpperCheck != message)
        {
            verb = "exclaims,";
        }

        if (toUpperCheck == message)
        {
            verb    = "yells,";
            message = $"<b>{message}</b>";
        }

        var chan = $"[{channels.ToString().ToLower().Substring(0, 3)}] ";

        if (channels.HasFlag(ChatChannel.Command))
        {
            chan = "[cmd] ";
        }

        if (channels.HasFlag(ChatChannel.Local))
        {
            chan = "";
        }

        return(AddMsgColor(channels, $"{chan}<b>{speaker}</b> {verb} " + "\"" + message + "\""));
    }
예제 #7
0
파일: Chat.cs 프로젝트: KuromeSan/HISP
        public static string FormatChatForSender(User user, ChatChannel channel, string message, string dmRecipiant = null, bool autoReply = false)
        {
            switch (channel)
            {
            case ChatChannel.All:
                if (user.Moderator || user.Administrator)
                {
                    return(Messages.FormatGlobalChatMessageForMod(user.Username, message));
                }
                else
                {
                    return(Messages.FormatGlobalChatMessage(user.Username, message));
                }

            case ChatChannel.Ads:
                int numbListening = GameServer.GetNumberOfPlayersListeningToAdsChat();     // vry specific function ik
                return(Messages.FormatAdsChatForSender(numbListening - 1, user.Username, message));

            case ChatChannel.Buddies:
                return(Messages.FormatBuddyChatMessageForSender(GameServer.GetNumberOfBuddiesOnline(user), user.Username, message));

            case ChatChannel.Isle:
                int inIsle = 0;
                if (World.InIsle(user.X, user.Y))
                {
                    inIsle = GameServer.GetUsersInIsle(World.GetIsle(user.X, user.Y), false, false).Length - 1;
                }
                return(Messages.FormatIsleChatMessageForSender(inIsle, user.Username, message));

            case ChatChannel.Here:
                int usersHere = GameServer.GetUsersAt(user.X, user.Y, false, false).Length - 1;
                return(Messages.FormatHereChatMessageForSender(usersHere, user.Username, message));

            case ChatChannel.Near:
                int nearbyUsers = GameServer.GetNearbyUsers(user.X, user.Y, false, false).Length - 1;
                return(Messages.FormatNearChatMessageForSender(nearbyUsers, user.Username, message));

            case ChatChannel.Mod:
                int modsOnline = GameServer.GetNumberOfModsOnline() - 1;
                return(Messages.FormatModChatForSender(modsOnline, user.Username, message));

            case ChatChannel.Admin:
                int adminsOnline = GameServer.GetNumberOfAdminsOnline() - 1;
                return(Messages.FormatAdminChatForSender(adminsOnline, user.Username, message));

            case ChatChannel.Dm:
                string badge = "";
                if (user.Moderator || user.Administrator)
                {
                    badge += Messages.DmModBadge;
                }
                if (autoReply)
                {
                    badge += Messages.DmAutoResponse;
                }
                return(Messages.FormatDirectChatMessageForSender(user.Username, dmRecipiant, message, badge));

            default:
                Logger.ErrorPrint(user.Username + " is trying to end a message in unknown channel " + channel.ToString("X"));
                return("not implemented yet :(");
            }
        }
예제 #8
0
파일: Chat.cs 프로젝트: KuromeSan/HISP
        public static string FormatChatForOthers(User user, ChatChannel channel, string message, bool autoReply = false)
        {
            switch (channel)
            {
            case ChatChannel.All:
                if (user.Moderator || user.Administrator)
                {
                    return(Messages.FormatGlobalChatMessageForMod(user.Username, message));
                }
                else
                {
                    return(Messages.FormatGlobalChatMessage(user.Username, message));
                }

            case ChatChannel.Ads:
                return(Messages.FormatAdsChatMessage(user.Username, message));

            case ChatChannel.Buddies:
                return(Messages.FormatBuddyChatMessage(user.Username, message));

            case ChatChannel.Dm:
                string badge = "";
                if (user.Moderator || user.Administrator)
                {
                    badge += Messages.DmModBadge;
                }
                if (autoReply)
                {
                    badge += Messages.DmAutoResponse;
                }
                return(Messages.FormatDirectMessage(user.Username, message, badge));

            case ChatChannel.Near:
                return(Messages.FormatNearbyChatMessage(user.Username, message));

            case ChatChannel.Isle:
                return(Messages.FormatIsleChatMessage(user.Username, message));

            case ChatChannel.Here:
                return(Messages.FormatHereChatMessage(user.Username, message));

            case ChatChannel.Mod:
                if (user.Moderator || user.Administrator)
                {
                    return(Messages.FormatModChatMessage(user.Username, message));
                }
                else
                {
                    Logger.HackerPrint(user.Username + " Tried to send in mod chat without being a moderator. (Hack/Code Attempt)");
                    return("");
                }

            case ChatChannel.Admin:
                if (user.Administrator)
                {
                    return(Messages.FormatAdminChatMessage(user.Username, message));
                }
                else
                {
                    Logger.HackerPrint(user.Username + " Tried to send in mod chat without being a moderator. (Hack/Code Attempt)");
                    return("");
                }

            default:
                Logger.ErrorPrint(user.Username + " is trying to end a message in unknown channel " + channel.ToString("X"));
                return("not implemented yet :(");
            }
        }
예제 #9
0
파일: Chat.cs 프로젝트: Illya9999/HISP
        public static string FormatChatForOthers(User user, ChatChannel channel, string message)
        {
            switch (channel)
            {
            case ChatChannel.All:
                if (user.Moderator || user.Administrator)
                {
                    return(Messages.FormatGlobalChatMessageForMod(user.Username, message));
                }
                else
                {
                    return(Messages.FormatGlobalChatMessage(user.Username, message));
                }

            case ChatChannel.Ads:
                return(Messages.FormatAdsChatMessage(user.Username, message));

            case ChatChannel.Buddies:
                return(Messages.FormatBuddyChatMessage(user.Username, message));

            case ChatChannel.Dm:
                if (user.Moderator || user.Administrator)
                {
                    return(Messages.FormatDirectMessageForMod(user.Username, message));
                }
                else
                {
                    return(Messages.FormatDirectMessage(user.Username, message));
                }

            case ChatChannel.Near:
                return(Messages.FormatNearbyChatMessage(user.Username, message));

            case ChatChannel.Isle:
                return(Messages.FormatIsleChatMessage(user.Username, message));

            case ChatChannel.Here:
                return(Messages.FormatHereChatMessage(user.Username, message));

            case ChatChannel.Mod:
                if (user.Moderator || user.Administrator)
                {
                    return(Messages.FormatModChatMessage(user.Username, message));
                }
                else
                {
                    Logger.HackerPrint(user.Username + " Tried to send in mod chat without being a moderator. (Hack/Code Attempt)");
                    return(user.Username + " is a hacker! (Sent in mod channel without being a mod) Maybe ban?");
                }

            case ChatChannel.Admin:
                if (user.Administrator)
                {
                    return(Messages.FormatAdminChatMessage(user.Username, message));
                }
                else
                {
                    Logger.HackerPrint(user.Username + " Tried to send in mod chat without being a moderator. (Hack/Code Attempt)");
                    return(user.Username + " is a hacker! (Sent in admin channel without being a admin) Maybe ban?");
                }

            default:
                Logger.ErrorPrint(user.Username + " is trying to end a message in unknown channel " + channel.ToString("X"));
                return("not implemented yet :(");
            }
        }