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)); }); }
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); }