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

FREE BuildingOwners : 2.1.3 2.1.3

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
using System;
using System.Reflection;
using System.Data;
using UnityEngine;
using Oxide.Core;

namespace Oxide.Plugins
{
    [Info("Building Owners", "Reneb", "2.1.3", ResourceId = 682)]
    class BuildingOwners : RustPlugin
    {
        private static DateTime epoch;
        private Core.Configuration.DynamicConfigFile ReverseData;
        private Dictionary<float,string> OwnersData;
        private FieldInfo keyvalues;
        private static bool serverInitialized;
        void Loaded()
        {
            serverInitialized = false;
            OwnersData = new Dictionary<float, string>();
            epoch = new System.DateTime(1970, 1, 1);
            keyvalues = typeof(Oxide.Core.Configuration.DynamicConfigFile).GetField("keyvalues", (BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic));
        }
        void OnServerInitialized()
        {
            ReverseData = Interface.GetMod().DataFileSystem.GetDatafile("BuildingOwners");
            serverInitialized = true;
            ReverseTable();
        }
        void SaveData()
        {
            Interface.GetMod().DataFileSystem.SaveDatafile("BuildingOwners");
        }
        void ReverseTable()
        {
            //var Table = keyvalues.GetValue(ReverseData) as Dictionary<string, object>;

            foreach (KeyValuePair<string, object> pair in ReverseData)
            {
                var list = pair.Value as List<object>;
                foreach (object heights in list)
                {
                    if (!(OwnersData.ContainsKey(Convert.ToSingle(heights))))
                    {
                        OwnersData.Add(Convert.ToSingle(heights), pair.Key.ToString());
                    }
                }
            }
        }
        double CurrentTime()
        {
            return System.DateTime.UtcNow.Subtract(epoch).TotalMilliseconds;
        }
        object FindBuilding(BasePlayer player)
        {
            var hits = UnityEngine.Physics.OverlapSphere(player.transform.position, 3f);
            foreach (var hit in hits)
            {
                if (hit.GetComponentInParent<BuildingBlock>() != null)
                {
                    return hit.GetComponentInParent<BuildingBlock>();
                }
            }
            return false;
        }
        void OnEntityBuilt(HeldEntity heldentity, GameObject gameobject)
        {
            if (serverInitialized)
            {
                var buildingblock = gameobject.GetComponent<BuildingBlock>();
                if (buildingblock == null) return;
                float posy = buildingblock.transform.position.y;
                if (!(OwnersData.ContainsKey(posy)))
                {
                    string userid = heldentity.ownerPlayer.userID.ToString();
                    OwnersData.Add(posy, userid);
                    if (ReverseData[userid] == null)
                        ReverseData[userid] = new List<object>();
                    var list = ReverseData[userid] as List<object>;
                    list.Add(posy);
                    ReverseData[userid] = list;
                }
            }
        }
        object FindBlockData(BuildingBlock block)
        {
            float posy = block.transform.position.y;
            if (OwnersData.ContainsKey(posy))
                return OwnersData[posy];
            return false;
        }
        [ChatCommand("changeowner")]
        void cmdChatchangeowner(BasePlayer player, string command, string[] args)
        {
            if (player.net.connection.authLevel < 1)
            {
                SendReply(player, "You are not allowed to use this command");
                return;
            }
            if (args == null || args.Length < 1)
            {
                SendReply(player, "You need to give the name of the new owner");
                return;
            }
            var target = BasePlayer.Find(args[0].ToString());
            if (target == null || target.net == null || target.net.connection == null)
            {
                SendReply(player, "Target player not found");
            }
            else
            {
                object block = FindBuilding(player);
                if ( block is bool )
                {
                    SendReply(player, "No Building found.");
                }
                else
                {
                    var userid = target.userID.ToString();
                    BuildingBlock buildingblock = block as BuildingBlock;
                    List<BuildingBlock> houseList = new List<BuildingBlock>();
                    List<Vector3> checkFrom = new List<Vector3>();
                    houseList.Add((BuildingBlock) buildingblock);
                    checkFrom.Add(buildingblock.transform.position);
                    var current = 0;
                    while (true)
                    {
                        current++;
                        if (current > checkFrom.Count)
                            break;
                        var hits = UnityEngine.Physics.OverlapSphere(checkFrom[current-1], 3f);
                        foreach (var hit in hits)
                        {
                            if (hit.GetComponentInParent<BuildingBlock>() != null)
                            {
                                BuildingBlock fbuildingblock = hit.GetComponentInParent<BuildingBlock>();
                                if (!(houseList.Contains(fbuildingblock)))
                                {
                                    houseList.Add(fbuildingblock);
                                    checkFrom.Add(fbuildingblock.transform.position);
                                    if (!(OwnersData.ContainsKey(fbuildingblock.transform.position.y)))
                                    {
                                        OwnersData.Add(fbuildingblock.transform.position.y, userid);
                                    }
                                    else
                                    {
                                        OwnersData[fbuildingblock.transform.position.y] = userid;
                                    }
                                    if (ReverseData[userid] == null)
                                        ReverseData[userid] = new List<object>();
                                    var list = ReverseData[userid] as List<object>;
                                    if (!(list.Contains(fbuildingblock.transform.position.y)))
                                    {
                                        list.Add(fbuildingblock.transform.position.y);
                                        ReverseData[userid] = list;
                                    }
                                }
                            }
                        }
                    }
                    SendReply(player, string.Format("New owner of this house is: {0}",target.displayName));
                    SendReply(target, "An admin gave you the ownership of this house");
                }
            }
        }
        void OnServerSave()
        {
            SaveData();
        }
        void OnServerQuit()
        {
            SaveData();
        }
    }
}

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