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

FREE BikeLight : 1.0.12 1.0.12

Нет прав для скачивания
C#:
using Oxide.Core.Plugins;
using System.Linq;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("BikeLight", "magado", "1.0.12")]
    [Description("Adds a custom light to bikes to illuminate the front and allows toggling it with the F key.")]
    public class BikeLight : RustPlugin
    {
        private const string PedalBikePrefab = "assets/content/vehicles/bikes/pedalbike.prefab";
        private const string PedalTrikePrefab = "assets/content/vehicles/bikes/pedaltrike.prefab";
        private const string SearchLightPrefab = "assets/prefabs/deployable/search light/searchlight.deployed.prefab";
        private const string SpherePrefab = "assets/prefabs/visualization/sphere.prefab";

        void OnEntitySpawned(BaseNetworkable entity)
        {
            if (entity == null || !(entity is BaseVehicle)) return;
            var vehicle = entity as BaseVehicle;
            if (vehicle.PrefabName == PedalBikePrefab || vehicle.PrefabName == PedalTrikePrefab)
            {
                timer.Once(1f, () => AddSearchLightToBike(vehicle)); // Delay to allow proper initialization
            }
        }

        void AddSearchLightToBike(BaseVehicle bike)
        {
            if (bike.GetComponentInChildren<SphereEntity>() != null)
            {
                return;
            }

            // SphereEntityの作成
            var sphereEntity = GameManager.server.CreateEntity(SpherePrefab, new Vector3(0, -100, 0), Quaternion.identity) as SphereEntity;
            if (sphereEntity == null)
            {
                return;
            }

            // SphereEntityのセットアップ
            sphereEntity.EnableSaving(true);
            sphereEntity.EnableGlobalBroadcast(false);
            sphereEntity.SetParent(bike);
            sphereEntity.Spawn();

            // サーチライトの作成
            var searchLight = GameManager.server.CreateEntity(SearchLightPrefab, sphereEntity.transform.position) as SearchLight;
            if (searchLight == null)
            {
                return;
            }

            // サーチライトのセットアップ
            searchLight.pickup.enabled = false;
            DestroyMeshCollider(searchLight);
            DestroyGroundComp(searchLight);
            searchLight.Spawn();
            searchLight.SetFlag(BaseEntity.Flags.Reserved5, true);
            searchLight.SetFlag(BaseEntity.Flags.Busy, true);
            searchLight.SetParent(sphereEntity);
            searchLight.transform.localPosition = Vector3.zero;
            searchLight.transform.localRotation = Quaternion.Euler(-10, 180, 180); // 角度を-10度に設定して前方に向ける
            searchLight.SendNetworkUpdateImmediate();

            // ライトを常時点灯に設定
            searchLight.SetFlag(BaseEntity.Flags.On, true);
            searchLight.SetFlag(IOEntity.Flag_HasPower, true); // 追加のフラグ設定
            searchLight.SendNetworkUpdateImmediate();

            // SphereEntityの位置調整
            sphereEntity.currentRadius = 0.1f;
            sphereEntity.lerpRadius = 0.1f;
            sphereEntity.UpdateScale();
            sphereEntity.SendNetworkUpdateImmediate();

            timer.Once(3f, () => {
                if (sphereEntity != null)
                {
                    sphereEntity.transform.localPosition = new Vector3(0, 1.0f, 0.6f);
                }
            });

            // 自転車にライトコントローラーを追加
            bike.gameObject.AddComponent<BikeLightController>().Initialize(searchLight);
        }

        void DestroyMeshCollider(BaseEntity entity)
        {
            foreach (var mesh in entity.GetComponentsInChildren<MeshCollider>())
            {
                UnityEngine.Object.DestroyImmediate(mesh);
            }
        }

        void DestroyGroundComp(BaseEntity entity)
        {
            UnityEngine.Object.DestroyImmediate(entity.GetComponent<DestroyOnGroundMissing>());
            UnityEngine.Object.DestroyImmediate(entity.GetComponent<GroundWatch>());
        }

        private class BikeLightController : MonoBehaviour
        {
            private SearchLight light;

            public void Initialize(SearchLight lightEntity)
            {
                light = lightEntity;
            }

            void Update()
            {
                if (light == null || light.IsDestroyed) return;

                var vehicle = light.GetParentEntity() as BaseVehicle;
                if (vehicle == null) return;
            }
        }

        object OnEntityMounted(BaseMountable mountable, BasePlayer player)
        {
            if (mountable.GetParentEntity() is BaseVehicle vehicle && 
                (vehicle.PrefabName == PedalBikePrefab || vehicle.PrefabName == PedalTrikePrefab))
            {
                var light = vehicle.GetComponentInChildren<SearchLight>();
                if (light != null)
                {
                    light.SetFlag(BaseEntity.Flags.On, true);
                    light.SetFlag(IOEntity.Flag_HasPower, true);
                    light.SendNetworkUpdateImmediate();
                }
            }
            return null;
        }

        object OnEntityDismounted(BaseMountable mountable, BasePlayer player)
        {
            if (mountable.GetParentEntity() is BaseVehicle vehicle && 
                (vehicle.PrefabName == PedalBikePrefab || vehicle.PrefabName == PedalTrikePrefab))
            {
                var light = vehicle.GetComponentInChildren<SearchLight>();
                if (light != null)
                {
                    light.SetFlag(BaseEntity.Flags.On, false);
                    light.SetFlag(IOEntity.Flag_HasPower, false);
                    light.SendNetworkUpdateImmediate();
                }
            }
            return null;
        }
    }
}

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