Esempio n. 1
0
        private void ParseChannelEvent(Internal.ByteArray message)
        {
            int    channelId  = message.ReadUnsignedShort();
            var    channel    = ChatStorage.GetChannel(channelId);
            string playerName = message.ReadString();
            var    eventType  = message.ReadEnum <ChannelEvent>();

            switch (eventType)
            {
            case ChannelEvent.PlayerJoined:
                channel.PlayerJoined(playerName);
                break;

            case ChannelEvent.PlayerLeft:
                channel.PlayerLeft(playerName);
                break;

            case ChannelEvent.PlayerInvited:
                channel.PlayerInvited(playerName);
                break;

            case ChannelEvent.PlayerExcluded:
                channel.PlayerExcluded(playerName);
                break;

            case ChannelEvent.PlayerPending:
                channel.PlayerPending(playerName);
                break;
            }
        }
Esempio n. 2
0
        private void ParseOpenOwnChannel(Internal.ByteArray message)
        {
            int    channelId   = message.ReadUnsignedShort();
            string channelName = message.ReadString();
            var    channel     = ChatStorage.AddChannel(channelId, channelName, MessageModeType.Channel);

            channel.CanModerate = true;

            if (channel.IsPrivate)
            {
                ChatStorage.OwnPrivateChannelId = channelId;
            }

            if (OpenTibiaUnity.GameManager.GetFeature(GameFeature.GameChannelPlayerList))
            {
                int joinedUsers = message.ReadUnsignedShort();
                for (int i = 0; i < joinedUsers; i++)
                {
                    channel.PlayerJoined(message.ReadString());
                }

                int invitedUsers = message.ReadUnsignedShort();
                for (int i = 0; i < invitedUsers; i++)
                {
                    channel.PlayerInvited(message.ReadString());
                }
            }
        }
Esempio n. 3
0
        private void ParseChannelEvent(Internal.CommunicationStream message)
        {
            int    channelId  = message.ReadUnsignedShort();
            var    channel    = ChatStorage.GetChannel(channelId);
            string playerName = message.ReadString();
            var    eventType  = message.ReadEnum <ChannelEvent>();

            if (channel == null)
            {
#if DEBUG || NDEBUG
                Debug.LogWarning("ProtocolGame.ParseChannelEvent: invalid channel id " + channelId);
#endif
                return;
            }

            switch (eventType)
            {
            case ChannelEvent.PlayerJoined:
                channel.PlayerJoined(playerName);
                break;

            case ChannelEvent.PlayerLeft:
                channel.PlayerLeft(playerName);
                break;

            case ChannelEvent.PlayerInvited:
                channel.PlayerInvited(playerName);
                break;

            case ChannelEvent.PlayerExcluded:
                channel.PlayerExcluded(playerName);
                break;

            case ChannelEvent.PlayerPending:
                channel.PlayerPending(playerName);
                break;
            }
        }
Esempio n. 4
0
        private void ParseTextMessage(Internal.ByteArray message)
        {
            var mode = TranslateMessageModeFromServer(message.ReadUnsignedByte());

            try {
                switch (mode)
                {
                case MessageModeType.ChannelManagement:
                    int    channelId = message.ReadUnsignedShort();
                    string text      = message.ReadString();
                    // TODO name filter
                    //var regex = new System.Text.RegularExpressions.Regex(@"^(.+?) invites you to |^You have been excluded from the channel ([^']+)'s Channel\.$");
                    //var match = regex.Match(text);
                    //string speaker = match != null && match.Success ? match.Value : null;

                    WorldMapStorage.AddOnscreenMessage(null, -1, null, 0, mode, text);
                    ChatStorage.AddChannelMessage(channelId, -1, null, 0, mode, text);
                    break;

                case MessageModeType.Guild:
                case MessageModeType.PartyManagement:
                case MessageModeType.Party:
                    channelId = message.ReadUnsignedShort();
                    text      = message.ReadString();
                    WorldMapStorage.AddOnscreenMessage(null, -1, null, 0, mode, text);
                    ChatStorage.AddChannelMessage(channelId, -1, null, 0, mode, text);
                    break;

                case MessageModeType.Login:
                case MessageModeType.Admin:
                case MessageModeType.Game:
                case MessageModeType.GameHighlight:
                case MessageModeType.Failure:
                case MessageModeType.Look:
                case MessageModeType.Status:
                case MessageModeType.Loot:
                case MessageModeType.TradeNpc:
                case MessageModeType.HotkeyUse:
                    channelId = -1;
                    text      = message.ReadString();
                    WorldMapStorage.AddOnscreenMessage(null, -1, null, 0, mode, text);
                    ChatStorage.AddChannelMessage(channelId, -1, null, 0, mode, text);
                    break;

                case MessageModeType.Market:
                    text = message.ReadString();
                    // TODO: market
                    break;

                case MessageModeType.Report:
                    // TODO
                    //ReportWidget.s_ReportTimestampReset();
                    text = message.ReadString();
                    WorldMapStorage.AddOnscreenMessage(null, -1, null, 0, mode, text);
                    ChatStorage.AddChannelMessage(-1, -1, null, 0, mode, text);
                    break;

                case MessageModeType.DamageDealed:
                case MessageModeType.DamageReceived:
                case MessageModeType.DamageOthers:
                    Vector3Int absolutePosition = message.ReadPosition();
                    int        value            = message.ReadInt();
                    int        color            = message.ReadUnsignedByte();
                    if (value > 0)
                    {
                        WorldMapStorage.AddOnscreenMessage(absolutePosition, -1, null, 0, mode, value, color);
                    }

                    value = message.ReadInt();
                    color = message.ReadUnsignedByte();
                    if (value > 0)
                    {
                        WorldMapStorage.AddOnscreenMessage(absolutePosition, -1, null, 0, mode, value, color);
                    }

                    text = message.ReadString();
                    ChatStorage.AddChannelMessage(-1, -1, null, 0, mode, text);
                    break;

                case MessageModeType.Heal:
                case MessageModeType.Mana:
                case MessageModeType.Exp:
                case MessageModeType.HealOthers:
                case MessageModeType.ExpOthers:
                    absolutePosition = message.ReadPosition();
                    value            = message.ReadInt();
                    color            = message.ReadUnsignedByte();
                    WorldMapStorage.AddOnscreenMessage(absolutePosition, -1, null, 0, mode, value, color);

                    text = message.ReadString();
                    ChatStorage.AddChannelMessage(-1, -1, null, 0, mode, text);
                    break;

                default:
                    text = message.ReadString();
                    ChatStorage.AddChannelMessage(-1, -1, null, 0, mode, text);
                    break;
                }
            } catch (System.Exception e) {
                throw new System.Exception("ProtocolGame.ParseTextMessage: Failed to add message of type " + mode + ": " + e.Message + "\n" + e.StackTrace);
            }
        }
Esempio n. 5
0
        private void ParseCloseChannel(Internal.ByteArray message)
        {
            int channelId = message.ReadUnsignedShort();

            ChatStorage.CloseChannel(channelId);
        }
Esempio n. 6
0
        private void ParsePrivateChannel(Internal.ByteArray message)
        {
            string channelName = message.ReadString();

            ChatStorage.AddChannel(channelName, channelName, MessageModeType.PrivateTo);
        }
Esempio n. 7
0
        private void ParseTalk(Internal.ByteArray message)
        {
            uint statementId = 0;

            if (OpenTibiaUnity.GameManager.GetFeature(GameFeature.GameMessageStatements))
            {
                statementId = message.ReadUnsignedInt();
            }

            string speaker      = message.ReadString();
            ushort speakerLevel = 0;

            if (OpenTibiaUnity.GameManager.GetFeature(GameFeature.GameMessageLevel))
            {
                speakerLevel = message.ReadUnsignedShort();
            }

            int             rawMode = message.ReadUnsignedByte();
            MessageModeType mode    = TranslateMessageModeFromServer(rawMode);

            Vector3Int?absolutePosition = null;

            Utils.UnionStrInt channelId = null;

            switch (mode)
            {
            case MessageModeType.Say:
            case MessageModeType.Whisper:
            case MessageModeType.Yell:
                absolutePosition = message.ReadPosition();
                channelId        = Chat.ChatStorage.LocalChannelId;
                break;

            case MessageModeType.PrivateFrom:
                channelId = speaker;
                break;

            case MessageModeType.Channel:
            case MessageModeType.ChannelManagement:
            case MessageModeType.ChannelHighlight:
                channelId = message.ReadUnsignedShort();
                break;

            case MessageModeType.Spell:
                absolutePosition = message.ReadPosition();
                channelId        = Chat.ChatStorage.LocalChannelId;
                break;

            case MessageModeType.NpcFromStartBlock:
                absolutePosition = message.ReadPosition();
                break;

            case MessageModeType.NpcFrom:
                break;

            case MessageModeType.GamemasterBroadcast:
                break;

            case MessageModeType.GamemasterChannel:
                channelId = message.ReadUnsignedShort();
                break;

            case MessageModeType.GamemasterPrivateFrom:
                channelId = speaker;
                break;

            case MessageModeType.BarkLow:
            case MessageModeType.BarkLoud:
            case MessageModeType.MonsterSay:
            case MessageModeType.MonsterYell:
                absolutePosition = message.ReadPosition();
                channelId        = -1;
                break;

            case MessageModeType.Game:
                break;

            case MessageModeType.RVRAnswer:
            case MessageModeType.RVRContinue:
                channelId = Chat.ChatStorage.RVRChannelId;
                break;

            case MessageModeType.RVRChannel:
                message.ReadUnsignedInt();
                channelId = Chat.ChatStorage.RVRChannelId;
                break;

            default:
                throw new System.Exception(string.Format("ProtocolGame.ParseTalk: invalid message mode (raw = {0}, mode = {1})", rawMode, mode));
            }

            string text = message.ReadString();

            if (mode != MessageModeType.NpcFromStartBlock && mode != MessageModeType.NpcFrom)
            {
                try {
                    WorldMapStorage.AddOnscreenMessage(absolutePosition, (int)statementId, speaker, speakerLevel, mode, text);
                    ChatStorage.AddChannelMessage(channelId, (int)statementId, speaker, speakerLevel, mode, text);
                } catch (System.Exception e) {
                    throw new System.Exception("ProtocolGame.ParseTalk: Failed to add message: " + e.Message + "\n" + e.StackTrace);
                }
            }
            else if (mode == MessageModeType.NpcFromStartBlock)
            {
                MessageStorage.StartMessageBlock(speaker, absolutePosition, text);
            }
            else if (mode == MessageModeType.NpcFrom)
            {
                MessageStorage.AddTextToBlock(speaker, text);
            }
        }
Esempio n. 8
0
        private void ParseCloseChannel(Internal.CommunicationStream message)
        {
            int channelId = message.ReadUnsignedShort();

            ChatStorage.CloseChannel(channelId);
        }
Esempio n. 9
0
        private void ParsePrivateChannel(Internal.CommunicationStream message)
        {
            string channelName = message.ReadString();

            ChatStorage.AddChannel(channelName, channelName, MessageModeType.PrivateTo);
        }
Esempio n. 10
0
 public GameSessionManager()
 {
     _ChatStore       = new ChatStorage();
     _HubService      = new HubService();
     _GSessionService = new GameSessionService();
 }