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

FREE ObjectInfo : 1.0.6 1.0.6

Нет прав для скачивания
C#:
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("ObjectInfo", "YourName", "1.0.6")]
    [Description("Показывает расширенную информацию об объекте (включая коды), на который смотрит админ, по команде /b")]
    class ObjectInfo : RustPlugin
    {
        private const string PermissionUse = "objectinfo.use";

        void Init()
        {
            permission.RegisterPermission(PermissionUse, this);
        }

        [ChatCommand("b")]
        void CmdGetOwner(BasePlayer player)
        {
            if (!permission.UserHasPermission(player.UserIDString, PermissionUse) && !player.IsAdmin)
            {
                PrintToChat(player, "<color=#FF0000>У вас нет прав для использования этой команды!</color>");
                return;
            }

            // Направляем луч от глаз игрока вперед, чтобы найти объект
            RaycastHit hit;
            if (!Physics.Raycast(player.eyes.HeadRay(), out hit, 10f, Physics.DefaultRaycastLayers))
            {
                PrintToChat(player, "<color=#FFFF00>Вы должны смотреть на объект (макс. 10 метров).</color>");
                return;
            }

            // Получаем сущность, на которую смотрит игрок
            BaseEntity entity = hit.GetEntity();
            if (entity == null)
            {
                PrintToChat(player, "<color=#FFFF00>Объект не найден.</color>");
                return;
            }

            string ownerName = CustomFindPlayerName(entity.OwnerID);
            PrintToChat(player, "=================================");
            PrintToChat(player, $"<color=#00FFFF>Тип объекта:</color> {entity.ShortPrefabName}");
            PrintToChat(player, $"<color=#00FFFF>Владелец (OwnerID):</color> {ownerName} ({entity.OwnerID})");

            // ПРОВЕРКА НА НАЛИЧИЕ КОДОВОГО ЗАМКА
            CodeLock codeLock = entity.GetSlot(BaseEntity.Slot.Lock) as CodeLock;
            if (codeLock != null)
            {
                PrintToChat(player, "<color=#FFA500>--- Информация о замке ---</color>");
                
                // В 266 девблоге поля code и guestCode являются открытыми (public)
                // Прямое обращение исключает ошибки null-ответов рефлексии
                string code = codeLock.code;
                string guestCode = codeLock.guestCode;

                PrintToChat(player, $"<color=#FFFF00>Основной код:</color> {(string.IsNullOrEmpty(code) ? "Не установлен" : code)}");
                PrintToChat(player, $"<color=#FFFF00>Гостевой код:</color> {(string.IsNullOrEmpty(guestCode) ? "Не установлен" : guestCode)}");

                // 1. Вывод авторизованных игроков (Основной код)
                if (codeLock.whitelistPlayers != null && codeLock.whitelistPlayers.Count > 0)
                {
                    PrintToChat(player, "<color=#FFFF00>Авторизованы (Основной код):</color>");
                    foreach (ulong userId in codeLock.whitelistPlayers)
                    {
                        string authedName = CustomFindPlayerName(userId);
                        PrintToChat(player, $"- {authedName} ({userId})");
                    }
                }
                else
                {
                    PrintToChat(player, "<color=#FFFF00>По основному коду никто не авторизован.</color>");
                }

                // 2. Вывод авторизованных игроков (Гостевой код)
                if (codeLock.guestPlayers != null && codeLock.guestPlayers.Count > 0)
                {
                    PrintToChat(player, "<color=#FF7F50>Авторизованы как ГОСТИ (Guest):</color>");
                    foreach (ulong userId in codeLock.guestPlayers)
                    {
                        string guestName = CustomFindPlayerName(userId);
                        PrintToChat(player, $"- {guestName} ({userId})");
                    }
                }
                else
                {
                    PrintToChat(player, "<color=#FF7F50>Как гость в замке никто не авторизован.</color>");
                }
            }

            // Проверка: это шкаф (BuildingPrivlidge)
            if (entity is BuildingPrivlidge)
            {
                BuildingPrivlidge buildingCupboard = entity as BuildingPrivlidge;
                PrintToChat(player, "<color=#FFA500>--- Авторизованные в шкафу ---</color>");

                if (buildingCupboard != null)
                {
                    if (buildingCupboard.authorizedPlayers == null || buildingCupboard.authorizedPlayers.Count == 0)
                    {
                        PrintToChat(player, "В шкафу никто не авторизован.");
                    }
                    else
                    {
                        foreach (var authed in buildingCupboard.authorizedPlayers)
                        {
                            string authedName = CustomFindPlayerName(authed.userid);
                            PrintToChat(player, $"- {authedName} ({authed.userid})");
                        }
                    }
                }
            }
            // Проверка: это спальник / кровать (Sleeping Bag)
            else if (entity is SleepingBag)
            {
                SleepingBag sleepingBagEntity = entity as SleepingBag;
                if (sleepingBagEntity != null)
                {
                    string assignedName = CustomFindPlayerName(sleepingBagEntity.deployerUserID);

                    PrintToChat(player, "<color=#FFA500>--- Информация о спальнике ---</color>");
                    PrintToChat(player, $"<color=#FFFF00>Название спальника:</color> {sleepingBagEntity.niceName}");
                    PrintToChat(player, $"<color=#FFFF00>Кому принадлежит:</color> {assignedName} ({sleepingBagEntity.deployerUserID})");
                }
            }

            PrintToChat(player, "=================================");
        }

        // Метод для поиска имени игрока (онлайн или в базе Oxide)
        private string CustomFindPlayerName(ulong id)
        {
            if (id == 0) return "Неизвестно";
            
            BasePlayer target = BasePlayer.FindByID(id);
            if (target != null) return target.displayName;

            var iPlayer = covalence.Players.FindPlayerById(id.ToString());
            if (iPlayer != null) return iPlayer.Name;

            return "Оффлайн игрок";
        }
    }
}

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