Untitled

 avatar
unknown
plain_text
12 days ago
4.6 kB
4
Indexable
using System;
using Server;
using Server.Commands;
using Server.Mobiles;
using Server.Items;
using Server.Network;
using Server.Targeting;

namespace Server.Commands
{
    public class StealthMineCommand
    {
        public static void Initialize()
        {
            // Регистрируем команду для игроков с доступом на уровне Player
            CommandSystem.Register("StealthMine", AccessLevel.Player, new CommandEventHandler(StealthMine_OnCommand));
        }

        [Usage("StealthMine")]
        [Description("Запускает процесс стелс-добычи руды.")]
        public static void StealthMine_OnCommand(CommandEventArgs e)
        {
            Mobile from = e.Mobile;
            // Если игрок не имеет кирки – выдаем сообщение
            Pickaxe pickaxe = from.Backpack.FindItemByType(typeof(Pickaxe)) as Pickaxe;
            if (pickaxe == null)
            {
                from.SendMessage("Для добычи руды тебе нужна кирка.");
                return;
            }

            // Устанавливаем режим стелс: делаем игрока скрытым (Hidden = true)
            if (!from.Hidden)
            {
                from.Hidden = true;
                from.SendMessage("Ты растворяешься в тенях и начинаешь добычу руды.");
            }

            // Поиск ближайшего рудного камня (MineralRock) в радиусе 5 тайлов
            IPooledEnumerable eable = from.Map.GetItemsInRange(from.Location, 5);
            MineralRock rock = null;
            foreach (Item item in eable)
            {
                // Предполагаем, что MineralRock – это тип, отвечающий за добычу руды, и у него свойство Resource (OreType)
                if (item is MineralRock && ((MineralRock)item).Resource != OreType.None)
                {
                    rock = (MineralRock)item;
                    break;
                }
            }
            eable.Free();

            if (rock == null)
            {
                from.SendMessage("В окрестностях нет рудного камня для добычи.");
                // Выходим из стелс-режима, если добыча невозможна
                if (from.Hidden)
                {
                    from.Hidden = false;
                    from.SendMessage("Ты выходишь из режима скрытности.");
                }
                return;
            }

            // Симулируем процесс добычи – можно добавить проверку навыка Mining, случай успеха и т.п.
            from.SendMessage("Ты начинаешь добычу руды...");
            bool success = true; // Здесь можно реализовать логику проверки навыка, RNG и прочее
            if (success)
            {
                // Определяем случайное количество добытой руды (например, от 1 до 3 единиц)
                int amount = Utility.RandomMinMax(1, 3);
                Ore ore = new Ore(amount); // Предполагается, что конструктор Ore принимает количество
                if (from.PlaceInBackpack(ore))
                {
                    from.SendMessage("Ты успешно добываешь руду.");
                }
                else
                {
                    ore.MoveToWorld(from.Location, from.Map);
                    from.SendMessage("Ты не смог унести руду – она падает на землю.");
                }
            }
            else
            {
                from.SendMessage("Добыча не увенчалась успехом.");
            }

            // После добычи запускаем таймер, чтобы через 10 секунд игрок вышел из стелс-режима
            Timer.DelayCall(TimeSpan.FromSeconds(10), delegate
            {
                if (from.Hidden)
                {
                    from.Hidden = false;
                    from.SendMessage("Ты вновь становишься видимым.");
                }
            });
        }
    }
}
Leave a Comment