示例#1
0
        public void SendChatMessage(WorldObject sender, ChatMsgs msgtype, string message, uint lang, ulong target)
        {
            float range = 0;

            switch (msgtype)
            {
            case ChatMsgs.CHAT_MSG_YELL:
            case ChatMsgs.CHAT_MSG_MONSTER_YELL:
                range = Globals.YELL_RANGE;
                break;

            case ChatMsgs.CHAT_MSG_MONSTER_SAY:
            case ChatMsgs.CHAT_MSG_SAY:
                range = Globals.SAY_RANGE;
                break;
            }

            Parallel.ForEach(GridManager.Instance.GetSurroundingObjects(sender, true).Cast <Player>(), p =>
            {
                if (range > 0 && p.Location.Distance(sender.Location) > range)
                {
                    return;
                }
                if (p.IgnoreList.Contains(sender.Guid))
                {
                    return;
                }

                p.Client.Send(BuildPacket(sender, msgtype, message, lang, target, p));
            });
        }
示例#2
0
        public PacketWriter BuildPacket(WorldObject sender, ChatMsgs msgtype, string message, uint lang, ulong target, Player recipient)
        {
            PacketWriter pkt = new PacketWriter(Opcodes.SMSG_MESSAGECHAT);

            pkt.WriteUInt8((byte)msgtype);
            pkt.WriteUInt32(GetLanguage(lang, recipient));
            pkt.WriteUInt64(sender.Guid);
            pkt.WriteString(message);
            pkt.WriteUInt8((byte)(sender.IsTypeOf(ObjectTypes.TYPE_PLAYER) ? ((Player)sender).ChatFlag : ChatFlags.CHAT_TAG_NONE));
            return(pkt);
        }