Обсудим Нужна помощь с определением хука для сбора растений

  • Автор темы Автор темы RAGE
  • Дата начала Дата начала

RAGE

Автор темы
5 Мар 2025
5
0
9
Мне нужно вести подсчет собранных растений , диких или же выращенных на грядке, вот пример хуков , но они почему то не работают, что нужно исправить в коде

Код:
using Oxide.Core.Plugins;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("PlantHarvestNotifier", "YourName", "1.0.3")]
    [Description("Уведомляет игрока в чате о сборе диких растений с кустов, таких как тыквы, конопля, грибы и кукуруза.")]
    public class PlantHarvestNotifier : RustPlugin
    {
        void Init()
        {
            Puts("Плагин PlantHarvestNotifier успешно загружен!");
        }

        // Хук при нанесении урона сущности (для диагностики)
        void OnEntityTakeDamage(BaseCombatEntity entity, HitInfo info)
        {
            if (entity == null || info == null || info.Initiator == null) return;

            BasePlayer player = info.Initiator as BasePlayer;
            if (player == null || !player.IsConnected)
            {
                Puts("Ошибка: Недействительный игрок в OnEntityTakeDamage.");
                return;
            }

            string prefabName = entity.PrefabName.ToLower();
            Puts($"OnEntityTakeDamage: Игрок {player.displayName} (ID: {player.userID}) нанёс урон {prefabName}");

            // Проверка префабов кустов
            if (prefabName.Contains("pumpkin-collectable") || prefabName.Contains("pumpkin.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали тыквенный куст и получили тыкву и семя тыквы.");
            }
            else if (prefabName.Contains("hemp-collectable") || prefabName.Contains("hemp.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали куст конопли и получили 10 ткани и семя конопли.");
            }
            else if (prefabName.Contains("corn-collectable") || prefabName.Contains("corn.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали куст кукурузы и получили кукурузу и семя кукурузы.");
            }
            else if (prefabName.Contains("mushroom-cluster") || prefabName.Contains("mushroom.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали гриб с куста грибов.");
            }
        }

        // Хук при уничтожении сущности (для диагностики)
        void OnEntityDeath(BaseCombatEntity entity, HitInfo info)
        {
            if (entity == null || info == null || info.Initiator == null) return;

            BasePlayer player = info.Initiator as BasePlayer;
            if (player == null || !player.IsConnected)
            {
                Puts("Ошибка: Недействительный игрок в OnEntityDeath.");
                return;
            }

            string prefabName = entity.PrefabName.ToLower();
            Puts($"OnEntityDeath: Игрок {player.displayName} (ID: {player.userID}) уничтожил {prefabName}");

            // Проверка префабов кустов
            if (prefabName.Contains("pumpkin-collectable") || prefabName.Contains("pumpkin.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали тыквенный куст и получили тыкву и семя тыквы.");
            }
            else if (prefabName.Contains("hemp-collectable") || prefabName.Contains("hemp.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали куст конопли и получили 10 ткани и семя конопли.");
            }
            else if (prefabName.Contains("corn-collectable") || prefabName.Contains("corn.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали куст кукурузы и получили кукурузу и семя кукурузы.");
            }
            else if (prefabName.Contains("mushroom-cluster") || prefabName.Contains("mushroom.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали гриб с куста грибов.");
            }
        }

        // Хук для сбора выращиваемых растений (на случай, если сработает)
        void OnGrowableGather(GrowableEntity entity, BasePlayer player)
        {
            if (entity == null || player == null || !player.IsConnected)
            {
                Puts("Ошибка: Недействительный игрок или сущность в OnGrowableGather.");
                return;
            }

            string prefabName = entity.PrefabName.ToLower();
            Puts($"OnGrowableGather: Игрок {player.displayName} (ID: {player.userID}) собрал растение: {prefabName}");

            if (prefabName.Contains("pumpkin-collectable") || prefabName.Contains("pumpkin.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали тыквенный куст и получили тыкву и семя тыквы.");
            }
            else if (prefabName.Contains("hemp-collectable") || prefabName.Contains("hemp.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали куст конопли и получили 10 ткани и семя конопли.");
            }
            else if (prefabName.Contains("corn-collectable") || prefabName.Contains("corn.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали куст кукурузы и получили кукурузу и семя кукурузы.");
            }
        }

        // Хук для сбора коллекционных объектов (грибы)
        void OnCollectiblePickup(Item item, BasePlayer player, CollectibleEntity entity)
        {
            if (item == null || player == null || entity == null || !player.IsConnected)
            {
                Puts("Ошибка: Недействительный игрок, предмет или сущность в OnCollectiblePickup.");
                return;
            }

            string itemName = item.info.shortname.ToLower();
            string prefabName = entity.PrefabName.ToLower();
            Puts($"OnCollectiblePickup: Игрок {player.displayName} (ID: {player.userID}) собрал {itemName} с {prefabName}");

            if (itemName == "mushroom" && (prefabName.Contains("mushroom-cluster") || prefabName.Contains("mushroom.entity")))
            {
                rust.SendChatMessage(player, "Вы сорвали гриб с куста грибов.");
            }
        }
    }
}
 
Мне нужно вести подсчет собранных растений , диких или же выращенных на грядке, вот пример хуков , но они почему то не работают, что нужно исправить в коде

Код:
using Oxide.Core.Plugins;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("PlantHarvestNotifier", "YourName", "1.0.3")]
    [Description("Уведомляет игрока в чате о сборе диких растений с кустов, таких как тыквы, конопля, грибы и кукуруза.")]
    public class PlantHarvestNotifier : RustPlugin
    {
        void Init()
        {
            Puts("Плагин PlantHarvestNotifier успешно загружен!");
        }

        // Хук при нанесении урона сущности (для диагностики)
        void OnEntityTakeDamage(BaseCombatEntity entity, HitInfo info)
        {
            if (entity == null || info == null || info.Initiator == null) return;

            BasePlayer player = info.Initiator as BasePlayer;
            if (player == null || !player.IsConnected)
            {
                Puts("Ошибка: Недействительный игрок в OnEntityTakeDamage.");
                return;
            }

            string prefabName = entity.PrefabName.ToLower();
            Puts($"OnEntityTakeDamage: Игрок {player.displayName} (ID: {player.userID}) нанёс урон {prefabName}");

            // Проверка префабов кустов
            if (prefabName.Contains("pumpkin-collectable") || prefabName.Contains("pumpkin.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали тыквенный куст и получили тыкву и семя тыквы.");
            }
            else if (prefabName.Contains("hemp-collectable") || prefabName.Contains("hemp.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали куст конопли и получили 10 ткани и семя конопли.");
            }
            else if (prefabName.Contains("corn-collectable") || prefabName.Contains("corn.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали куст кукурузы и получили кукурузу и семя кукурузы.");
            }
            else if (prefabName.Contains("mushroom-cluster") || prefabName.Contains("mushroom.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали гриб с куста грибов.");
            }
        }

        // Хук при уничтожении сущности (для диагностики)
        void OnEntityDeath(BaseCombatEntity entity, HitInfo info)
        {
            if (entity == null || info == null || info.Initiator == null) return;

            BasePlayer player = info.Initiator as BasePlayer;
            if (player == null || !player.IsConnected)
            {
                Puts("Ошибка: Недействительный игрок в OnEntityDeath.");
                return;
            }

            string prefabName = entity.PrefabName.ToLower();
            Puts($"OnEntityDeath: Игрок {player.displayName} (ID: {player.userID}) уничтожил {prefabName}");

            // Проверка префабов кустов
            if (prefabName.Contains("pumpkin-collectable") || prefabName.Contains("pumpkin.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали тыквенный куст и получили тыкву и семя тыквы.");
            }
            else if (prefabName.Contains("hemp-collectable") || prefabName.Contains("hemp.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали куст конопли и получили 10 ткани и семя конопли.");
            }
            else if (prefabName.Contains("corn-collectable") || prefabName.Contains("corn.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали куст кукурузы и получили кукурузу и семя кукурузы.");
            }
            else if (prefabName.Contains("mushroom-cluster") || prefabName.Contains("mushroom.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали гриб с куста грибов.");
            }
        }

        // Хук для сбора выращиваемых растений (на случай, если сработает)
        void OnGrowableGather(GrowableEntity entity, BasePlayer player)
        {
            if (entity == null || player == null || !player.IsConnected)
            {
                Puts("Ошибка: Недействительный игрок или сущность в OnGrowableGather.");
                return;
            }

            string prefabName = entity.PrefabName.ToLower();
            Puts($"OnGrowableGather: Игрок {player.displayName} (ID: {player.userID}) собрал растение: {prefabName}");

            if (prefabName.Contains("pumpkin-collectable") || prefabName.Contains("pumpkin.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали тыквенный куст и получили тыкву и семя тыквы.");
            }
            else if (prefabName.Contains("hemp-collectable") || prefabName.Contains("hemp.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали куст конопли и получили 10 ткани и семя конопли.");
            }
            else if (prefabName.Contains("corn-collectable") || prefabName.Contains("corn.entity"))
            {
                rust.SendChatMessage(player, "Вы сорвали куст кукурузы и получили кукурузу и семя кукурузы.");
            }
        }

        // Хук для сбора коллекционных объектов (грибы)
        void OnCollectiblePickup(Item item, BasePlayer player, CollectibleEntity entity)
        {
            if (item == null || player == null || entity == null || !player.IsConnected)
            {
                Puts("Ошибка: Недействительный игрок, предмет или сущность в OnCollectiblePickup.");
                return;
            }

            string itemName = item.info.shortname.ToLower();
            string prefabName = entity.PrefabName.ToLower();
            Puts($"OnCollectiblePickup: Игрок {player.displayName} (ID: {player.userID}) собрал {itemName} с {prefabName}");

            if (itemName == "mushroom" && (prefabName.Contains("mushroom-cluster") || prefabName.Contains("mushroom.entity")))
            {
                rust.SendChatMessage(player, "Вы сорвали гриб с куста грибов.");
            }
        }
    }
}

Писать плагин с нуля только через ИИ)
Ну если что у тебя получится, предупреди)

https://umod.org/documentation/games/rust
Смею предположить твой хук: #OnGrowableGathered
 
Писать плагин с нуля только через ИИ)
Ну если что у тебя получится, предупреди)
Некоторые пишут простые, на 100500 строк через ИИ, которые бы кожаный ублюдок бы написал в 3 строки.
И потом используют их.
А через время ходят по форумам и просят помощи в оптимизации)
 
не ловлю связи между OnEntityTakeDamage и prefabName.Contains(<span>"pumpkin-collectable"</span>)

Как тыква на земле, может получить урон? Либо заказывайте плагин, чтобы не ходить по форумум как сказал expresss, либо сами ищите: https://umod.org/documentation/games/rust
 

Похожие темы