Untitled
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