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

FREE DLCChecker : 1.0.0 1.0.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using Oxide.Core;
using Oxide.Core.Plugins;

namespace Oxide.Plugins
{
    [Info("DLC Checker", "YourName", "1.0.0")]
    [Description("Check player's owned DLCs")]
    public class DLCChecker : RustPlugin
    {
        // Rustの主要DLC一覧
        private readonly Dictionary<uint, string> knownDLCs = new Dictionary<uint, string>
        {
            { 1213160, "Instruments Pack" },
            { 1282100, "Cobalt Pack" },
            { 1491040, "Desert Raid Pack" },
            { 1491050, "Artic Pack" },
            { 1670430, "Voice Props Pack" },
            { 1670440, "Staging Branch" },
            { 2026710, "Spacesuit Pack" },
            { 2077550, "Public Test Branch" },
            { 2174850, "Big Grin Pack" },
            { 2524750, "Blackout Pack" }
        };

        [ChatCommand("checkdlc")]
        private void CheckDLCCommand(BasePlayer player, string command, string[] args)
        {
            if (args.Length == 0)
            {
                // 自分のDLCをチェック
                CheckPlayerDLC(player, player);
                return;
            }

            // 管理者権限チェック
            if (!player.IsAdmin)
            {
                SendReply(player, "このコマンドを使用する権限がありません。");
                return;
            }

            // 他のプレイヤーのDLCをチェック
            var targetPlayer = FindPlayer(args[0]);
            if (targetPlayer == null)
            {
                SendReply(player, $"プレイヤー '{args[0]}' が見つかりません。");
                return;
            }

            CheckPlayerDLC(player, targetPlayer);
        }

        [ConsoleCommand("checkdlc")]
        private void CheckDLCConsoleCommand(ConsoleSystem.Arg arg)
        {
            if (arg.Args == null || arg.Args.Length == 0)
            {
                arg.ReplyWith("使用方法: checkdlc <プレイヤー名>");
                return;
            }

            var targetPlayer = FindPlayer(arg.Args[0]);
            if (targetPlayer == null)
            {
                arg.ReplyWith($"プレイヤー '{arg.Args[0]}' が見つかりません。");
                return;
            }

            var dlcInfo = GetPlayerDLCInfo(targetPlayer);
            arg.ReplyWith($"{targetPlayer.displayName} のDLC情報:\n{dlcInfo}");
        }

        private void CheckPlayerDLC(BasePlayer requester, BasePlayer target)
        {
            var dlcInfo = GetPlayerDLCInfo(target);
            
            if (requester == target)
            {
                SendReply(requester, $"あなたの所有DLC:\n{dlcInfo}");
            }
            else
            {
                SendReply(requester, $"{target.displayName} の所有DLC:\n{dlcInfo}");
            }
        }

        private string GetPlayerDLCInfo(BasePlayer player)
        {
            var result = $"プレイヤー: {player.displayName} (Steam ID: {player.userID})\n";
            result += $"接続時間: {TimeSpan.FromSeconds(player.secondsConnected):hh\\:mm\\:ss}\n\n";
            
            result += "DLC所有状況の確認:\n";
            
            foreach (var dlc in knownDLCs)
            {
                bool hasDLC = CheckPlayerDLCOwnership(player, dlc.Key);
                string status = hasDLC ? "✓ 所有済み" : "✗ 未所有";
                result += $"{dlc.Value}: {status}\n";
            }

            result += "\n注意: DLC検出は推測ベースです。完全に正確ではない場合があります。";
            return result;
        }

        private bool CheckPlayerDLCOwnership(BasePlayer player, uint dlcId)
        {
            try
            {
                // 基本的なDLCチェック方法
                switch (dlcId)
                {
                    case 1213160: // Instruments Pack
                        return HasInstrumentItems(player);
                    case 1282100: // Cobalt Pack
                        return HasCobaltItems(player);
                    case 1491040: // Desert Raid Pack
                        return HasDesertRaidItems(player);
                    case 1491050: // Arctic Pack
                        return HasArcticItems(player);
                    case 1670430: // Voice Props Pack
                        return HasVoicePropsItems(player);
                    case 2026710: // Spacesuit Pack
                        return HasSpacesuitItems(player);
                    case 2174850: // Big Grin Pack
                        return HasBigGrinItems(player);
                    case 2524750: // Blackout Pack
                        return HasBlackoutItems(player);
                    default:
                        return false;
                }
            }
            catch (Exception ex)
            {
                PrintError($"DLCチェック中にエラー (DLC ID: {dlcId}): {ex.Message}");
                return false;
            }
        }

        private bool HasInstrumentItems(BasePlayer player)
        {
            var instrumentItems = new[] { "piano", "drumkit", "trumpet", "tuba", "cowbell", "xylophone" };
            return HasAnyBlueprints(player, instrumentItems);
        }

        private bool HasCobaltItems(BasePlayer player)
        {
            // Cobalt Pack特有のアイテムをチェック
            var cobaltItems = new[] { "metal.facemask", "roadsign.jacket", "roadsign.kilt" };
            return HasSpecialSkins(player, cobaltItems);
        }

        private bool HasDesertRaidItems(BasePlayer player)
        {
            // Desert Raid Pack特有のアイテムをチェック
            return HasSpecialSkins(player, new[] { "attire.hide.vest", "burlap.shirt" });
        }

        private bool HasArcticItems(BasePlayer player)
        {
            // Arctic Pack特有のアイテムをチェック
            return HasSpecialSkins(player, new[] { "hoodie", "pants" });
        }

        private bool HasVoicePropsItems(BasePlayer player)
        {
            // Voice Props Pack特有のアイテムをチェック
            var voiceItems = new[] { "cassette", "cassette.recorder" };
            return HasAnyBlueprints(player, voiceItems);
        }

        private bool HasSpacesuitItems(BasePlayer player)
        {
            // Spacesuit Pack特有のアイテムをチェック
            return HasSpecialSkins(player, new[] { "hazmatsuit" });
        }

        private bool HasBigGrinItems(BasePlayer player)
        {
            // Big Grin Pack特有のアイテムをチェック
            return HasSpecialSkins(player, new[] { "mask.balaclava" });
        }

        private bool HasBlackoutItems(BasePlayer player)
        {
            // Blackout Pack特有のアイテムをチェック
            return HasSpecialSkins(player, new[] { "metal.plate.torso", "pants.shorts" });
        }

        private bool HasAnyBlueprints(BasePlayer player, string[] itemNames)
        {
            if (player.blueprints == null) return false;

            foreach (var itemName in itemNames)
            {
                var itemDef = ItemManager.FindItemDefinition(itemName);
                if (itemDef != null && player.blueprints.HasUnlocked(itemDef))
                {
                    return true;
                }
            }
            return false;
        }

        private bool HasSpecialSkins(BasePlayer player, string[] itemNames)
        {
            if (player.inventory == null) return false;

            // プレイヤーのインベントリ内でスキン付きアイテムをチェック
            var containers = new[] { 
                player.inventory.containerMain, 
                player.inventory.containerBelt, 
                player.inventory.containerWear 
            };

            foreach (var container in containers)
            {
                if (container?.itemList == null) continue;

                foreach (var item in container.itemList)
                {
                    if (item?.skin != 0 && itemNames.Contains(item.info?.shortname))
                    {
                        return true;
                    }
                }
            }

            return false;
        }

        private BasePlayer FindPlayer(string nameOrId)
        {
            // Steam IDで検索
            if (ulong.TryParse(nameOrId, out ulong steamId))
            {
                return BasePlayer.FindByID(steamId);
            }

            // 名前で検索
            foreach (var player in BasePlayer.activePlayerList)
            {
                if (player.displayName.ToLower().Contains(nameOrId.ToLower()))
                {
                    return player;
                }
            }

            return null;
        }

        // プラグインロード時の処理
        private void Init()
        {
            Puts("DLC Checker プラグインが読み込まれました。");
        }

        // プラグインアンロード時の処理
        private void Unload()
        {
            Puts("DLC Checker プラグインがアンロードされました。");
        }
    }
}

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