public async Task ParseChatMessageHandler(ParseChatMessage message, Player player)
        {
            try
            {
                await player.Zone.OnChatMessage.InvokeAsync(player, message.Message);
            }
            catch
            {
                // Something went wrong with event
            }

            await using var ctx = new UchuContext();

            var character = await ctx.Characters.Include(c => c.User).FirstAsync(
                c => c.Id == player.Id
                );

            Console.WriteLine($"Message: {message.Message}");

            if (message.Message.StartsWith('/'))
            {
                var response = await Server.HandleCommandAsync(
                    message.Message,
                    player,
                    (GameMasterLevel)character.User.GameMasterLevel
                    );

                if (!string.IsNullOrWhiteSpace(response))
                {
                    player.SendChatMessage(response, PlayerChatChannel.Normal);
                }

                return;
            }

            if (((WorldServer)Server).Whitelist.CheckPhrase(message.Message).Any())
            {
                return;
            }

            var transcript = new ChatTranscript
            {
                Author   = character.Id,
                Message  = message.Message,
                Receiver = 0,
                SentTime = DateTime.Now
            };

            await ctx.ChatTranscript.AddAsync(transcript);

            await ctx.SaveChangesAsync();

            foreach (var zonePlayer in player.Zone.Players)
            {
                zonePlayer.SendChatMessage(message.Message, PlayerChatChannel.Normal, player);
            }
        }
Beispiel #2
0
        public async Task ParseChatMessageHandler(ParseChatMessage message, Player player)
        {
            try
            {
                await player.Zone.OnChatMessage.InvokeAsync(player, message.Message);
            }
            catch
            {
                // Something went wrong with event
            }

            await using var ctx = new UchuContext();

            var character = await ctx.Characters.Include(c => c.User)
                            .FirstAsync(c => c.CharacterId == player.ObjectId);

            var response = await Server.HandleCommandAsync(
                message.Message,
                player,
                (GameMasterLevel)character.User.GameMasterLevel
                );

            if (!string.IsNullOrWhiteSpace(response))
            {
                player.SendChatMessage(response);
            }
            else
            {
                if (((WorldServer)Server).Whitelist.CheckPhrase(message.Message).Any())
                {
                    return;
                }

                foreach (var zonePlayer in player.Zone.Players)
                {
                    zonePlayer.SendChatMessage(message.Message, PlayerChatChannel.Normal, player);
                }
            }
        }