Example #1
0
        static void OnMessageChat(WorldClient client, CMSG msgID, BinReader data)
        {
            CHATMESSAGETYPE type = (CHATMESSAGETYPE)data.ReadInt32();

            /*int language =*/ data.ReadInt32();
            /*string target = string.Empty;*/
            if (type == CHATMESSAGETYPE.WHISPER)
            {
                /*target =*/ data.ReadString(0x100);
            }
            string msg = data.ReadString(0x100);

            if (msg.StartsWith("!") || msg.StartsWith("%"))
            {
                OnChatCommand(client, msg.Substring(1));
                return;
            }
            switch (type)
            {
            case CHATMESSAGETYPE.SAY:
            {
                ServerPacket pkg = new ServerPacket(SMSG.MESSAGECHAT);
                pkg.Write((byte)CHATMESSAGETYPE.SAY);
                pkg.Write((int)0);
                pkg.Write(client.Player.GUID);
                pkg.Write(msg);
                pkg.Write((byte)0);
                pkg.Finish();
                client.Player.MapTile.Map.Send(pkg, client.Player.Position, 25.0f);
                break;
            }

            case CHATMESSAGETYPE.YELL:
            {
                ServerPacket pkg = new ServerPacket(SMSG.MESSAGECHAT);
                pkg.Write((byte)CHATMESSAGETYPE.YELL);
                pkg.Write((int)0);
                pkg.Write(client.Player.GUID);
                pkg.Write(msg);
                pkg.Write((byte)0);
                pkg.Finish();
                client.Player.MapTile.Map.Send(pkg, client.Player.Position, 50.0f);
                break;
            }

            case CHATMESSAGETYPE.EMOTE:
            {
                ServerPacket pkg = new ServerPacket(SMSG.MESSAGECHAT);
                pkg.Write((byte)CHATMESSAGETYPE.EMOTE);
                pkg.Write((int)0);
                pkg.Write(client.Player.GUID);
                pkg.Write(msg);
                pkg.Write((byte)0);
                pkg.Finish();
                client.Player.MapTile.Map.Send(pkg, client.Player.Position, 25.0f);
                break;
            }
            }
            return;
        }
        public static void GuildSay(uint from, LoginClient client, string msg, CHATMESSAGETYPE mtype)
        {
            BinWriter pkg = LoginClient.NewPacket(SMSG.MESSAGECHAT);

            pkg.Write((byte)mtype);
            pkg.Write((int)0);
            pkg.Write((ulong)from);
            pkg.Write((int)msg.Length + 1);
            pkg.Write(msg);
            pkg.Write((byte)0);
            client.Send(pkg);
        }
Example #3
0
        static bool OnMessageChat(LoginClient client, CMSG msgID, BinReader data)
        {
            CHATMESSAGETYPE type = (CHATMESSAGETYPE)data.ReadInt32();

            /*int language =*/ data.ReadInt32();
            string target = string.Empty;

            if (type == CHATMESSAGETYPE.WHISPER)
            {
                target = data.ReadString(0x100);
            }
            string msg = data.ReadString(0x100);

            if (msg.StartsWith("!") || msg.StartsWith("%"))
            {
                return(OnChatCommand(client, msg.Substring(1)));
            }
            switch (type)
            {
            case CHATMESSAGETYPE.SAY:
            case CHATMESSAGETYPE.YELL:
            case CHATMESSAGETYPE.EMOTE:
                return(false);                        // let worldserver handle it

            case CHATMESSAGETYPE.WHISPER:
            {
                DataObject[] objs = DataServer.Database.SelectObjects(typeof(DBCharacter), "Name = '" + target + "'");
                if (objs.Length == 0)
                {
                    Chat.System(client, "No such player.");
                    return(true);
                }
                LoginClient targetClient = LoginServer.GetLoginClientByCharacterID(objs[0].ObjectId);
                if (targetClient == null || targetClient.Character == null)
                {
                    Chat.System(client, "That player is not online.");
                    return(true);
                }
                Chat.Whisper(client, targetClient, msg);
                break;
            }

            default:
                Chat.System(client, "Received " + type + ": " + msg);
                break;
            }
            return(true);
        }
        static bool OnMessageChat(LoginClient client, CMSG msgID, BinReader data)
        {
            CHATMESSAGETYPE type = (CHATMESSAGETYPE)data.ReadInt32();

            /*int language =*/ data.ReadInt32();
            string target = string.Empty;

            if (type == CHATMESSAGETYPE.WHISPER)
            {
                target = data.ReadString(0x100);
            }
            string msg = data.ReadString(0x100);

            if (msg.StartsWith("!") || msg.StartsWith("%"))
            {
                return(OnChatCommand(client, msg.Substring(1)));
            }
            switch (type)
            {
            case CHATMESSAGETYPE.PARTY:
            case CHATMESSAGETYPE.CHANNEL:
            case CHATMESSAGETYPE.CHANNEL_JOIN:
            case CHATMESSAGETYPE.CHANNEL_LEAVE:
            case CHATMESSAGETYPE.CHANNEL_LIST:
            case CHATMESSAGETYPE.CHANNEL_NOTICE:
            case CHATMESSAGETYPE.CHANNEL_NOTICE_USER:
            case CHATMESSAGETYPE.SAY:
            case CHATMESSAGETYPE.YELL:
            case CHATMESSAGETYPE.EMOTE:
                return(false);                        // let worldserver handle it

            case CHATMESSAGETYPE.WHISPER:
            {
                DataObject[] objs = DataServer.Database.SelectObjects(typeof(DBCharacter), "Name = '" + target + "'");
                if (objs.Length == 0)
                {
                    Chat.System(client, "No such player.");
                    return(true);
                }
                LoginClient targetClient = LoginServer.GetLoginClientByCharacterID(objs[0].ObjectId);
                if (targetClient == null || targetClient.Character == null)
                {
                    Chat.System(client, "That player is not online.");
                    return(true);
                }
                Chat.Whisper(client, targetClient, msg);
                break;
            }

            case CHATMESSAGETYPE.GUILD:
            {
                DBGuild guild = client.Character.Guild;
                if (guild == null)
                {
                    return(true);
                }
                if ((guild.getRankFlags(client.Character.GuildRank) & (uint)GUILDFLAGS.SAY) == (uint)GUILDFLAGS.SAY)
                {
                    foreach (DBGuildMembers member in guild.Members)
                    {
                        if ((guild.getRankFlags(member.Rank) & (uint)GUILDFLAGS.LISTEN) == (uint)GUILDFLAGS.LISTEN)
                        {
                            LoginClient targetClient = LoginServer.GetLoginClientByCharacterID(member.MemberID);
                            if (targetClient == null || targetClient.Character == null)
                            {
                                continue;
                            }
                            else
                            {
                                Chat.GuildSay(client.Character.ObjectId, targetClient, msg, CHATMESSAGETYPE.GUILD);
                            }
                        }
                    }
                }
                else
                {
                    Chat.GuildSay(0, client, "You do not have permission", CHATMESSAGETYPE.GUILD);
                }

                break;
            }

            case CHATMESSAGETYPE.OFFICER:
            {
                DBGuild guild = client.Character.Guild;
                if (guild == null)
                {
                    return(true);
                }
                if ((guild.getRankFlags(client.Character.GuildRank) & (uint)GUILDFLAGS.OFFICER_SAY) == (uint)GUILDFLAGS.OFFICER_SAY)
                {
                    foreach (DBGuildMembers member in guild.Members)
                    {
                        if ((guild.getRankFlags(member.Rank) & (uint)GUILDFLAGS.OFFICER_LISTEN) == (uint)GUILDFLAGS.OFFICER_LISTEN)
                        {
                            LoginClient targetClient = LoginServer.GetLoginClientByCharacterID(member.MemberID);
                            if (targetClient == null || targetClient.Character == null)
                            {
                                continue;
                            }
                            else
                            {
                                Chat.GuildSay(client.Character.ObjectId, targetClient, msg, CHATMESSAGETYPE.OFFICER);
                            }
                        }
                    }
                }
                else
                {
                    Chat.GuildSay(0, client, "You do not have permission", CHATMESSAGETYPE.GUILD);
                }

                break;
            }

            default:
                Chat.System(client, "Received " + type + ": " + msg);
                break;
            }
            return(true);
        }
        static void OnMessageChat(WorldClient client, CMSG msgID, BinReader data)
        {
            string          channel = " ";
            CHATMESSAGETYPE type    = (CHATMESSAGETYPE)data.ReadInt32();

            /*int channel = */ data.ReadInt32();
            /*string target = string.Empty;*/
            if (type == CHATMESSAGETYPE.WHISPER)
            {
                /*target =*/ data.ReadString(0x100);
            }
            if (type == CHATMESSAGETYPE.CHANNEL ||
                type == CHATMESSAGETYPE.CHANNEL_JOIN ||
                type == CHATMESSAGETYPE.CHANNEL_LEAVE ||
                type == CHATMESSAGETYPE.CHANNEL_LIST ||
                type == CHATMESSAGETYPE.CHANNEL_NOTICE ||
                type == CHATMESSAGETYPE.CHANNEL_NOTICE_USER)
            {
                channel = (string)data.ReadString();
            }
            string msg = data.ReadString(0x100);

            if (msg.StartsWith("!") || msg.StartsWith("%"))
            {
                OnChatCommand(client, msg.Substring(1));
                return;
            }
            switch (type)
            {
            case CHATMESSAGETYPE.SAY:
            {
                ServerPacket pkg = new ServerPacket(SMSG.MESSAGECHAT);
                pkg.Write((byte)CHATMESSAGETYPE.SAY);
                pkg.Write((int)0);
                pkg.Write((ulong)0);                         // Receiver Guid
                pkg.Write(client.Player.GUID);               // Sender Guid
                pkg.Write((int)msg.Length + 1);              // chat fix , that did it :)
                pkg.Write(msg);
                pkg.Write((byte)0);
                pkg.Finish();
                client.Player.MapTile.Map.Send(pkg, client.Player.Position, 25.0f);
                break;
            }

            case CHATMESSAGETYPE.YELL:
            {
                ServerPacket pkg = new ServerPacket(SMSG.MESSAGECHAT);
                pkg.Write((byte)CHATMESSAGETYPE.YELL);
                pkg.Write((int)0);
                pkg.Write((ulong)0);
                pkg.Write(client.Player.GUID);     // fix 1.3.1
                pkg.Write((int)msg.Length + 1);    // chat fix
                pkg.Write(msg);
                pkg.Write((byte)0);
                pkg.Finish();
                client.Player.MapTile.Map.Send(pkg, client.Player.Position, 50.0f);
                break;
            }

            case CHATMESSAGETYPE.EMOTE:
            {
                ServerPacket pkg = new ServerPacket(SMSG.MESSAGECHAT);
                pkg.Write((byte)CHATMESSAGETYPE.EMOTE);
                pkg.Write((int)0);
                pkg.Write((ulong)0);
                pkg.Write(client.Player.GUID);                        // fix 1.3.1
                pkg.Write((int)msg.Length + 1);                       // chat fix
                pkg.Write(msg);
                pkg.Write((byte)0);
                pkg.Finish();
                client.Player.MapTile.Map.Send(pkg, client.Player.Position, 25.0f);
                break;
            }

            case CHATMESSAGETYPE.CHANNEL:
            {
                ChannelManager.TalkTo(channel, client, msg);
                break;
            }

            case CHATMESSAGETYPE.PARTY:
            {
                ServerPacket pkg = new ServerPacket(SMSG.MESSAGECHAT);
                pkg.Write((byte)CHATMESSAGETYPE.PARTY);
                pkg.Write((int)0);
                pkg.Write((ulong)0);
                pkg.Write(client.Player.GUID);                        // fix 1.3.1
                pkg.Write((int)msg.Length + 1);                       // chat fix
                pkg.Write(msg);
                pkg.Write((byte)0);
                client.Player.Group.SendToGroup(pkg);
                break;
            }
            }
            return;
        }