User: Аккумулятор должен работать 300 секунд, за включении, он будет создавать электричество, которое равняеться батарейке, и все что подключено к нему, должно будет активироваться сигналом, после того как он "разрядился" он выключаеться сам, и повторно подает сигнал всему, к чему он подключен, типо что без электричества они не работают, и выключаються. Если обьект подключаеться к нему, если аккумулятор включен, он посылает сигнал на включение обьекту. После 300 секунд, аккумулятор нельзя будет включить, потому что он будет разряжен. Как зарядить его, я скажу потом. Вот файлы мода сейчас:

Okay (Главная папка мода):
-> Sounds -> (Пусто)
-> Sprites -> Electic-Generator
-> Thumbnails -> Electic-Generator-thumb.png
-> CategoryBuilder.cs
-> mod.json
-> script.cs
-> thumb.png

Код:
CategoryBuilder.cs:
using System;using System.Linq;using System.Collections.Generic;using UnityEngine;public class CategoryBuilder{public static void Create(string name,string description, Sprite icon){CatalogBehaviour manager = UnityEngine.Object.FindObjectOfType<CatalogBehaviour>();if (manager.Catalog.Categories.FirstOrDefault((Category c) => c.name == name) == null){Category category = ScriptableObject.CreateInstance<Category>();category.name = name;category.Description = description;category.Icon = icon;Category[] NewCategories = new Category[manager.Catalog.Categories.Length + 1];Category[] categories = manager.Catalog.Categories;for (int i = 0; i < categories.Length; i++){NewCategories[i] = categories[i];}NewCategories[NewCategories.Length - 1] = category;manager.Catalog.Categories = NewCategories;}}/* Made in USSRAZULE */}

script.cs:
/* This mod has been generated with PPG-Mod-Creator (https://cheeteau.github.io/PPG-Mod-Creator/). You can remove this comment if you want to, but if someone ever sees this, hi! If you ever wanna support me, feel free to go on my Ko-fi! https://ko-fi.com/cheeteau */using UnityEngine;namespace Mod{public class Mod{public static void Main(){ModAPI.Register(new Modification(){OriginalItem = ModAPI.FindSpawnable("Metal Cube"),NameOverride = "Electic Generator",DescriptionOverride = "Powered Electric generator",CategoryOverride = ModAPI.FindCategory("Misc."),ThumbnailOverride = ModAPI.LoadSprite("Thumbnails/Electic-Generator-thumb.png"),AfterSpawn = (Instance) =>{Instance.GetComponent<PhysicalBehaviour>().InitialMass = 5f;Instance.GetComponent<PhysicalBehaviour>().TrueInitialMass = 5f;Instance.GetComponent<PhysicalBehaviour>().Properties = ModAPI.FindPhysicalProperties("Metal");Instance.GetComponent<PhysicalBehaviour>().IsWeightless = false;Instance.GetComponent<SpriteRenderer>().sprite = ModAPI.LoadSprite("Sprites/Electic-Generator.png");Instance.FixColliders();}});}}}

mod.json:
{"Name":"Okay","Author":"Oluni","Description":"Xz","ModVersion":"1.0","GameVersion":"1.22+","ThumbnailPath":"thumb.png","EntryPoint":"Mod.Mod","Scripts":["script.cs","CategoryBuilder.cs"]}



Assistant: Чтобы добавить функциональность, описанную вами для аккумулятора в игре, вам нужно будет внести изменения в скрипт `script.cs` и, возможно, добавить новый скрипт для обработки логики таймера и сигналов. К сожалению, из вашего кода неясно, как он интегрирован в конкретную игровую среду, но я постараюсь дать общее представление, как можно это реализовать.

### Шаги для реализации функциональности аккумулятора:

1. **Создайте новый скрипт `BatteryLogic.cs`**, чтобы отделить логику аккумулятора от основного скрипта регистрации.

2. **Добавьте новый компонент к вашему генератору**, который будет отвечать за таймер и сигналы:
   
```csharp
using UnityEngine;

namespace Mod
{
    public class BatteryLogic : MonoBehaviour
    {
        private float batteryTime = 300f; // Время работы в секундах
        private bool isPowered = false;
        private float currentTime = 0f;

        void Start()
        {
            currentTime = batteryTime;
            PowerOn();
        }

        void Update()
        {
            if (isPowered)
            {
                currentTime -= Time.deltaTime;
                if (currentTime <= 0)
                {
                    PowerOff();
                }
            }
        }

        public void PowerOn()
        {
            isPowered = true;
            currentTime = batteryTime;
            SendMessageToConnectedObjects(true);
        }

        public void PowerOff()
        {
            isPowered = false;
            SendMessageToConnectedObjects(false);
            // Можно добавить логику для перезарядки
        }

        private void SendMessageToConnectedObjects(bool state)
        {
            // Предположительно, вы присоединяете объекты динамически, можно обозреть их через теги или имя
            foreach (GameObject obj in FindObjectsOfType<GameObject>())
            {
                if (obj.CompareTag("ConnectedDevice")) // Или другой способ идентификации подключенных объектов
                {
                    obj.SendMessage("OnPowerStateChanged", state, SendMessageOptions.DontRequireReceiver);
                }
            }
        }
    }
}
```

3. **Регистрация нового компонента в вашем `script.cs`**:

В вашем методе `AfterSpawn` в `script.cs` добавьте компонент `BatteryLogic`:

```csharp
AfterSpawn = (Instance) =>
{
    var pb = Instance.GetComponent<PhysicalBehaviour>();
    pb.InitialMass = 5f;
    pb.TrueInitialMass = 5f;
    pb.Properties = ModAPI.FindPhysicalProperties("Metal");
    pb.IsWeightless = false;
    Instance.GetComponent<SpriteRenderer>().sprite = ModAPI.LoadSprite("Sprites/Electic-Generator.png");
    Instance.FixColliders();

    // Добавление компонента BatteryLogic
    Instance.AddComponent<Mod.BatteryLogic>();
}
```

4. **Обработка подключенных устройств**:

Убедитесь, что объекты, которые должны реагировать на сигналы аккумулятора, имеют соответствующие методы, например, `OnPowerStateChanged`, чтобы обрабатывать включение/выключение.

Это пример, чтобы начать. В зависимости от движка игры и API, который вы используете, могут потребоваться дополнительные шаги или изменения. Убедитесь, что объекты, которые должны реагировать на состояния питания, готовы принимать и обрабатывать посылаемые им сообщения.
User: Напиши полный скрипт script.cs, и скажи мне пошагово, что делать и куда.
Assistant: