• Хостинг игровых серверов

    Максимальная производительность для ваших игровых серверов!

    Заказать сейчас

Помогите Вопрос по буксирам

В игре Rust нет ограничений на стоянку буксиров в рыбацких деревнях. Игроки могут свободно парковать свои буксиры где угодно в пределах деревни. На данный момент в игре нет плагина, который бы ограничивал стоянку буксиров в определенных местах. Однако, вы можете создать свой собственный плагин или воспользоваться плагинами, доступными на Rust-сообществе, чтобы добавить такую функциональность в свой сервер.
 
В игре Rust нет ограничений на стоянку буксиров в рыбацких деревнях. Игроки могут свободно парковать свои буксиры где угодно в пределах деревни. На данный момент в игре нет плагина, который бы ограничивал стоянку буксиров в определенных местах. Однако, вы можете создать свой собственный плагин или воспользоваться плагинами, доступными на Rust-сообществе, чтобы добавить такую функциональность в свой сервер.
Напиши плагин для игры Rust на C#, который ограничивает стоянку буксиров в рыбацких деревнях. Если через 3 часа буксир не будет убран, он будет взорван.
 
Напиши плагин для игры Rust на C#, который ограничивает стоянку буксиров в рыбацких деревнях. Если через 3 часа буксир не будет убран, он будет взорван.
Конечно, вот пример кода для плагина на C#, который ограничивает стоянку буксиров в рыбацких деревнях и взрывает их, если они не были убраны в течение 3 часов:

C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("BargeExplosion", "YourName", "1.0.0")]
    class BargeExplosion : RustPlugin
    {
        private Dictionary<BasePlayer, float> bargeTimers = new Dictionary<BasePlayer, float>();

        void OnEntitySpawned(BaseNetworkable entity)
        {
            if (entity is BaseVehicle)
            {
                BaseVehicle vehicle = entity as BaseVehicle;
                if (vehicle.ShortPrefabName.Contains("boats.") && vehicle.ShortPrefabName.Contains("rowboat"))
                {
                    Vector3 position = vehicle.transform.position;
                    if (IsInBargeZone(position))
                    {
                        bargeTimers[vehicle.OwnerPlayer] = Time.realtimeSinceStartup;
                    }
                }
            }
        }

        void OnEntityKill(BaseNetworkable entity)
        {
            if (entity is BaseVehicle)
            {
                BaseVehicle vehicle = entity as BaseVehicle;
                if (vehicle.ShortPrefabName.Contains("boats.") && vehicle.ShortPrefabName.Contains("rowboat"))
                {
                    bargeTimers.Remove(vehicle.OwnerPlayer);
                }
            }
        }

        void OnEntityTakeDamage(BaseCombatEntity entity, HitInfo hitInfo)
        {
            if (entity is BaseVehicle)
            {
                BaseVehicle vehicle = entity as BaseVehicle;
                if (vehicle.ShortPrefabName.Contains("boats.") && vehicle.ShortPrefabName.Contains("rowboat"))
                {
                    if (IsInBargeZone(vehicle.transform.position))
                    {
                        if (!bargeTimers.ContainsKey(vehicle.OwnerPlayer))
                        {
                            bargeTimers[vehicle.OwnerPlayer] = Time.realtimeSinceStartup;
                        }
                    }
                }
            }
        }

        bool IsInBargeZone(Vector3 position)
        {
            foreach (MonumentInfo monument in UnityEngine.Object.FindObjectsOfType<MonumentInfo>())
            {
                if (monument.displayPhrase.translated.ToLower().Contains("fishing"))
                {
                    float distance = Vector3.Distance(position, monument.transform.position);
                    if (distance <= 100f)
                    {
                        return true;
                    }
                }
            }
            return false;
        }

        void OnServerTick()
        {
            List<BasePlayer> playersToRemove = new List<BasePlayer>();
            foreach (KeyValuePair<BasePlayer, float> pair in bargeTimers)
            {
                BasePlayer player = pair.Key;
                float startTime = pair.Value;
                float elapsedTime = Time.realtimeSinceStartup - startTime;

                if (elapsedTime >= 3 * 60 * 60) // 3 часа в секундах
                {
                    foreach (BaseVehicle vehicle in player.ownedEntityList)
                    {
                        if (vehicle.ShortPrefabName.Contains("boats.") && vehicle.ShortPrefabName.Contains("rowboat"))
                        {
                            vehicle.Kill();
                        }
                    }
                    playersToRemove.Add(player);
                }
            }

            foreach (BasePlayer player in playersToRemove)
            {
                bargeTimers.Remove(player);
            }
        }
    }
}

Примечание: Этот код является примером и требует установки плагина Oxide для работы. Также необходимо настроить правильные условия для определения зоны рыбацких деревень и корректное определение буксиров в игре Rust.
 
Активность
Пока никто не печатает сообщение