Иконка ресурса

FREE BabelChat : 0.2.1 0.2.1

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
// Requires: Babel

using System;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;

namespace Oxide.Plugins
{
    [Info("BabelChat", "Wulf/lukespragg", "0.2.1", ResourceId = 1964)]
    [Description("Translates chat messages to each player's language preference or server default")]

    class BabelChat : CovalencePlugin
    {
        // Do NOT edit this file, instead edit BabelChat.json in oxide/config

        #region Configuration

        bool forceDefault;
        bool prefixColors;
        bool showOriginal;

        protected override void LoadDefaultConfig()
        {
            Config["ForceDefault"] = forceDefault = GetConfig("ForceDefault", false);
            Config["PrefixColors"] = prefixColors = GetConfig("PrefixColors", true);
            Config["ShowOriginal"] = showOriginal = GetConfig("ShowOriginal", false);
            SaveConfig();
        }

        void Init() => LoadDefaultConfig();

        #endregion

        #region Chat Translation

        [PluginReference] Plugin AntiAds;
        [PluginReference] Plugin Babel;
        [PluginReference] Plugin BetterChat;

        string Translate(IPlayer player, IPlayer target, string message)
        {
            var to = forceDefault ? lang.GetServerLanguage() : lang.GetLanguage(target.Id);
            var from = lang.GetLanguage(player.Id) ?? "auto";
            return (string)Babel.Call("Translate", message, to, from);
        }

        void SendMessage(IPlayer player, IPlayer target, string message)
        {
            var format = $"{player.Name}: {message}";

            if (BetterChat) format = (string)BetterChat.Call("API_GetFormatedMessage", player.Id, message);
            else if (prefixColors) switch (covalence.Game)
            {
                case "7DaysToDie":
                    format = $"[{Color()}]{player.Name}[ffffff]: {message}";
                    break;
                case "ReignOfKings":
                    format = $"[{Color()}]{player.Name}[ffffff]: {message}";
                    break;
                case "RustLegacy":
                    format = $"[color {Color()}]{player.Name}[/color]: {message}";
                    break;
                default:
                    format = $"<color=#{Color()}>{player.Name}</color>: {message}";
                    break;
            }

            #if RUST
                var rust = Game.Rust.RustCore.FindPlayerByIdString(target.Id);
                rust?.SendConsoleCommand("chat.add", player.Id, format, 1.0);
            #else
                player.Message(format);
            #endif
        }

        object OnUserChat(IPlayer player, string message)
        {
            var isAd = AntiAds?.Call("IsAdvertisement", message);
            if (AntiAds && isAd != null && (bool)isAd) return null;

            foreach (var target in players.Connected)
            {
                if (Equals(target, player))
                {
                    SendMessage(player, player, message);
                    continue;
                }

                var to = forceDefault ? lang.GetServerLanguage() : lang.GetLanguage(target.Id);
                var from = lang.GetLanguage(player.Id) ?? "auto";

                #if DEBUG
                PrintWarning($"To: {to}, From: {from}");
                #endif

                Action<string> callback = response =>
                {
                    if (showOriginal) response = $"{message} \n{response}";
                    SendMessage(player, target, response);
                };
                Babel.Call("Translate", message, to, from, callback);
            }

            return !BetterChat ? (object)true : null;
        }

        bool OnBetterChat() => true;

        #endregion

        #region Helpers

        T GetConfig<T>(string name, T value) => Config[name] == null ? value : (T)Convert.ChangeType(Config[name], typeof(T));

        static string Color() => $"{new Random().Next(0x1000000):X6}";

        #endregion
    }
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху