Exemplo n.º 1
0
        public static void HandleChatClientPrivateWithObjectMessage(WorldClient client, ChatClientPrivateWithObjectMessage message)
        {
            if (string.IsNullOrEmpty(message.content))
            {
                return;
            }

            var sender   = client.Character;
            var receiver = World.Instance.GetCharacter(message.receiver);

            if (receiver == null)
            {
                SendChatErrorMessage(client, ChatErrorEnum.CHAT_ERROR_RECEIVER_NOT_FOUND);
                return;
            }

            if (sender.IsMuted())
            {
                //Le principe de précaution vous a rendu muet pour %1 seconde(s).
                sender.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 123, (int)sender.GetMuteRemainingTime().TotalSeconds);
                return;
            }

            if (receiver.IsMuted())
            {
                //Message automatique : Le joueur <b>%1</b> a été rendu muet pour ne pas avoir respecté les règles. <b>%1</b> ne pourra pas vous répondre avant <b>%2</b> minutes.
                sender.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_MESSAGE, 168, receiver.Name, receiver.Name, (int)receiver.GetMuteRemainingTime().TotalMinutes);
                return;
            }

            if (sender == receiver)
            {
                SendChatErrorMessage(client, ChatErrorEnum.CHAT_ERROR_INTERIOR_MONOLOGUE);
                return;
            }

            var badword = ChatManager.Instance.CanSendMessage(message.content);

            if (badword != string.Empty)
            {
                client.Character.SendServerMessage($"Message non envoyé. Le terme <b>{badword}</b> est interdit sur le serveur !");
                return;
            }

            if (receiver.FriendsBook.IsIgnored(sender.Account.Id))
            {
                //Le joueur %1 était absent et n'a donc pas reçu votre message.
                sender.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 14, receiver.Name);
                return;
            }

            if (!receiver.IsAvailable(sender, true))
            {
                //Le joueur %1 était absent et n'a donc pas reçu votre message.
                sender.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 14, receiver.Name);
                return;
            }

            if (sender.Status.statusId != (sbyte)PlayerStatusEnum.PLAYER_STATUS_AVAILABLE &&
                sender.Status.statusId != (sbyte)PlayerStatusEnum.PLAYER_STATUS_PRIVATE || !sender.FriendsBook.IsFriend(receiver.Account.Id))
            {
                sender.SetStatus(PlayerStatusEnum.PLAYER_STATUS_AVAILABLE);
            }

            var document = new BsonDocument
            {
                { "SenderId", sender.Id },
                { "SenderName", sender.Name },
                { "SenderAccountId", sender.Account.Id },
                { "ReceiverId", receiver.Id },
                { "ReceiverName", receiver.Name },
                { "ReceiverAccountId", receiver.Account.Id },
                { "Message", message.content },
                { "Channel", (int)ChatActivableChannelsEnum.PSEUDO_CHANNEL_PRIVATE },
                { "Date", DateTime.Now.ToString(CultureInfo.InvariantCulture) }
            };

            MongoLogger.Instance.Insert("Chats", document);

            //Send to receiver
            SendChatServerWithObjectMessage(receiver.Client, sender, ChatActivableChannelsEnum.PSEUDO_CHANNEL_PRIVATE, message.content, "", message.objects);
            //Send a copy to sender
            SendChatServerCopyWithObjectMessage(client, sender, receiver, ChatActivableChannelsEnum.PSEUDO_CHANNEL_PRIVATE, message.content, message.objects);

            if (receiver.Status.statusId == (sbyte)PlayerStatusEnum.PLAYER_STATUS_AFK && receiver.Status is PlayerStatusExtended)
            {
                SendChatServerMessage(sender.Client, receiver, ChatActivableChannelsEnum.PSEUDO_CHANNEL_PRIVATE, $"Réponse automatique:{((PlayerStatusExtended)receiver.Status).message}");
            }
        }
Exemplo n.º 2
0
 private void ChatClientPrivateWithObjectMessageHandler(DofusClient client,
                                                        ChatClientPrivateWithObjectMessage message)
 {
     //
 }