public void Execute(IRocketPlayer caller, string[] command)
        {
            for (byte i = 0; i < Regions.WORLD_SIZE; i += 1)
            {
                for (byte j = 0; j < Regions.WORLD_SIZE; j += 1)
                {
                    BarricadeRegion br = BarricadeManager.regions[i, j];
                    for (int index = 0; index < br.barricades.Count; index++)
                    {
                        BarricadeData b = br.barricades[index];
                        if (Assets.find(EAssetType.ITEM, b.barricade.id) is ItemBarricadeAsset asset && asset.build != EBuild.FARM)
                        {
                            b.barricade.health = asset.health;
                            //BarricadeManager.instance.channel.send("tellBarricadeHealth", ESteamCall.ALL,
                            //    ESteamPacket.UPDATE_RELIABLE_BUFFER, new object[] { i, j, ushort.MaxValue, index, b.asset.quality });
                        }
                    }

                    StructureRegion sr = StructureManager.regions[i, j];
                    for (int index = 0; index < sr.structures.Count; index++)
                    {
                        StructureData s = sr.structures[index];
                        if (Assets.find(EAssetType.ITEM, s.structure.id) is ItemStructureAsset asset)
                        {
                            s.structure.health = asset.health;
                            //BarricadeManager.instance.channel.send("tellStructureHealth", ESteamCall.ALL,
                            //    ESteamPacket.UPDATE_RELIABLE_BUFFER, new object[] { i, j, ushort.MaxValue, index, s.asset.quality });
                        }
                    }
                }
            }
            UnturnedChat.Say(caller, "repaired all buildings");
        }
Beispiel #2
0
        private void OnTransformStructureRequested(CSteamID instigator, byte x, byte y, uint instanceID,
                                                   ref Vector3 point, ref byte angle_x, ref byte angle_y, ref byte angle_z, ref bool shouldAllow)
        {
            StructureRegion region = StructureManager.regions[x, y];
            int             index  = region.structures.FindIndex(k => k.instanceID == instanceID);

            StructureData data = region.structures[index];
            StructureDrop drop = region.drops[index];

            Player nativePlayer = Provider.clients.FirstOrDefault(x => x?.playerID.steamID == instigator)?.player;

            UnturnedPlayer player = nativePlayer == null ? null : new UnturnedPlayer(nativePlayer);

            UnturnedStructureTransformingEvent @event = new UnturnedStructureTransformingEvent(
                new UnturnedStructureBuildable(data, drop), player, instigator, point,
                Quaternion.Euler(angle_x * 2, angle_y * 2, angle_z * 2));

            Emit(@event);

            shouldAllow = [email protected];
            point       = @event.Point;

            Vector3 eulerAngles = @event.Rotation.eulerAngles;

            angle_x = MeasurementTool.angleToByte(Mathf.RoundToInt(eulerAngles.x / 2f) * 2);
            angle_y = MeasurementTool.angleToByte(Mathf.RoundToInt(eulerAngles.y / 2f) * 2);
            angle_z = MeasurementTool.angleToByte(Mathf.RoundToInt(eulerAngles.z / 2f) * 2);
        }
Beispiel #3
0
        public void Execute(ICommandContext context)
        {
            UnturnedPlayer player = ((UnturnedUser)context.User).Player;

            Random random = new Random(DateTime.Now.Millisecond);

            switch (context.Parameters.Get <string> (0).ToLower())
            {
            case "b":
            case "barricade":
                BarricadeRegion randomBRegion = BarricadeManager.regions [random.Next(0, BarricadeManager.BARRICADE_REGIONS), random.Next(0, BarricadeManager.BARRICADE_REGIONS)];
                Vector3         randomPoint   = randomBRegion.barricades [random.Next(0, randomBRegion.barricades.Count)].point.ToSystemVector();
                randomPoint.Y += 10;
                player.Entity.Teleport(randomPoint);
                break;

            case "s":
            case "structure":
                StructureRegion randomSRegion = StructureManager.regions [random.Next(0, StructureManager.STRUCTURE_REGIONS), random.Next(0, StructureManager.STRUCTURE_REGIONS)];
                randomPoint    = randomSRegion.structures [random.Next(0, randomSRegion.structures.Count)].point.ToSystemVector();
                randomPoint.Y += 10;
                player.Entity.Teleport(randomPoint);
                break;

            case "v":
            case "vehicle":
                randomPoint    = VehicleManager.vehicles [random.Next(0, VehicleManager.vehicles.Count)].transform.position.ToSystemVector();
                randomPoint.Y += 10;
                player.Entity.Teleport(randomPoint);
                break;
            }
        }
        private void StructureSpawned(StructureRegion region, StructureDrop drop)
        {
            var data  = region.structures.Find(k => k.instanceID == drop.instanceID);
            var build = new StructureBuildable(data, drop);

            m_StructureBuildables.Add(build.InstanceId, build);
            m_DeferredAdd.Enqueue(build);
        }
Beispiel #5
0
            private static void DestroyStructure(StructureRegion region, ushort index)
            {
                ThreadUtil.assertIsGameThread();

                var data = region.structures[index];
                var drop = region.drops[index];

                OnStructureDestroyed?.Invoke(data, drop);
            }
 public RaycastResult(RaycastHit Info, bool hit)
 {
     RaycastHit = hit;
     if (hit)
     {
         Raycast = Info;
         Vehicle = TryGetEntity <InteractableVehicle>();
         Transform target = Raycast.collider?.transform;
         if (target != null)
         {
             if (target.CompareTag("Barricade"))
             {
                 target = DamageTool.getBarricadeRootTransform(target);
                 BarricadeRootTransform = target;
                 if (BarricadeManager.tryGetInfo(target, out byte x, out byte y, out ushort plant, out ushort index, out BarricadeRegion Region, out BarricadeDrop Drop))
                 {
                     BarricadeRegion = Region;
                     BarricadeX      = x;
                     BarricadeY      = y;
                     BarricadePlant  = plant;
                     BarricadeIndex  = index;
                     BarricadeData B = Region.barricades.FirstOrDefault(D => D.instanceID == Drop.instanceID);
                     if (B != null)
                     {
                         Barricade = B;
                     }
                 }
             }
             else if (target.CompareTag("Structure"))
             {
                 target = DamageTool.getStructureRootTransform(target);
                 StructureRootTransform = target;
                 if (StructureManager.tryGetInfo(target, out byte x, out byte y, out ushort index, out StructureRegion Region))
                 {
                     StructureX      = x;
                     StructureY      = y;
                     StructureIndex  = index;
                     StructureRegion = Region;
                     StructureData B = Region.structures[index];
                     if (B != null)
                     {
                         Structure = B;
                     }
                 }
             }
         }
     }
 }
 public static StructureTag For(int instanceID)
 {
     for (byte x = 0; x < Regions.WORLD_SIZE; x++)
     {
         for (byte y = 0; y < Regions.WORLD_SIZE; y++)
         {
             StructureRegion region = StructureManager.regions[x, y];
             for (int i = 0; i < region.structures.Count; i++)
             {
                 if (instanceID == region.drops[i].model.gameObject.GetInstanceID())
                 {
                     return(new StructureTag(region.drops[i].model, region.structures[i]));
                 }
             }
         }
     }
     return(null);
 }
 public StructureTag(Structure structure)
 {
     for (byte x = 0; x < Regions.WORLD_SIZE; x++)
     {
         for (byte y = 0; y < Regions.WORLD_SIZE; y++)
         {
             StructureRegion region = StructureManager.regions[x, y];
             for (int i = 0; i < region.structures.Count; i++)
             {
                 if (structure == region.structures[i].structure)
                 {
                     Internal     = region.drops[i].model;
                     InternalData = region.structures[i];
                     return;
                 }
             }
         }
     }
 }
Beispiel #9
0
        private static void ProcessElements(IRocketPlayer caller, ushort itemID, float radius, WreckType type, FlagType flagtype, List <char> Filter, bool pInfoLibLoaded, object region, Vector3 position, ulong steamID, BuildableType buildType)
        {
            StructureRegion sRegion   = null;
            BarricadeRegion bRegion   = null;
            BarricadeData   bData     = null;
            StructureData   sData     = null;
            bool            isSRegion = region is StructureRegion;
            int             DataCount;
            int             transformCount;

            if (isSRegion)
            {
                sRegion        = region as StructureRegion;
                transformCount = sRegion.drops.Count;
                DataCount      = sRegion.structures.Count;
            }
            else
            {
                bRegion        = region as BarricadeRegion;
                transformCount = bRegion.drops.Count;
                DataCount      = bRegion.barricades.Count;
            }

            for (int i = 0; i < transformCount; i++)
            {
                Transform transform = isSRegion ? sRegion.drops[i].model : bRegion.drops[i].model;
                ulong     owner;
                if (i < DataCount)
                {
                    if (isSRegion)
                    {
                        sData = sRegion.structures[i];
                        owner = sData.owner;
                    }
                    else
                    {
                        bData = bRegion.barricades[i];
                        owner = bData.owner;
                    }
                }
                else
                {
                    Logger.LogWarning(WreckingBall.Instance.Translate(isSRegion ? "wreckingball_structure_array_sync_error" : "wreckingball_barricade_array_sync_error"));
                    syncError = true;
                    break;
                }
                float distance = Vector3.Distance(transform.position, position);
                if (((!radius.IsNaN() && distance <= radius) || (radius.IsNaN() && (transform.position.x.IsNaN() || transform.position.y.IsNaN() || transform.position.z.IsNaN()))) && type != WreckType.Cleanup && type != WreckType.Counts)
                {
                    ushort item = isSRegion ? sData.structure.id : bData.barricade.id;
                    if (WreckingBall.ElementData.FilterItem(item, Filter) || Filter.Contains('*') || flagtype == FlagType.ItemID)
                    {
                        if (flagtype == FlagType.Normal)
                        {
                            WreckProcess(caller, item, distance, pInfoLibLoaded, buildType, type, isSRegion ? (object)sData : bData, transform);
                        }
                        else if (flagtype == FlagType.SteamID && owner == steamID)
                        {
                            WreckProcess(caller, item, distance, pInfoLibLoaded, buildType, type, isSRegion ? (object)sData : bData, transform);
                        }
                        else if (flagtype == FlagType.ItemID && itemID == item)
                        {
                            WreckProcess(caller, item, distance, pInfoLibLoaded, buildType, type, isSRegion ? (object)sData : bData, transform);
                        }
                    }
                }
                else if (type == WreckType.Cleanup && owner == steamID)
                {
                    cleanupList.Add(new Destructible(transform, isSRegion ? ElementType.Structure : ElementType.Barricade, isSRegion ? sData.structure.id : bData.barricade.id));
                }
                else if (type == WreckType.Counts)
                {
                    if (pElementCounts.ContainsKey(owner))
                    {
                        pElementCounts[owner]++;
                    }
                    else
                    {
                        pElementCounts.Add(owner, 1);
                    }
                }
            }
        }
        public List <StructureDataInternal> GetStructureTransforms(UnturnedPlayer player, int radius, ulong SpecificSteamid64, bool GroupOnly, bool Rectangle)
        {
            float           Distance;
            Vector3         Center;
            Rect            rect;
            var             position   = player.Position;
            var             error      = 0;
            var             Structures = new List <StructureDataInternal>();
            var             transforms = 0;
            StructureData   structure;
            var             regionsfound = 0;
            var             regionsused  = 0;
            Vector3         pointVector3;
            StructureRegion structureRegion = null;
            Transform       transform       = null;

            for (var x = 0; x < StructureManager.regions.GetLength(0); x++)
            {
                for (var y = 0; y < StructureManager.regions.GetLength(1); y++)
                {
                    regionsfound++;
                    Regions.tryGetPoint((byte)x, (byte)y, out pointVector3);
                    if (Vector3.Distance(pointVector3 += new Vector3(64, 0, 64), new Vector3(position.x, 0f, position.z)) > radius)
                    {
                        continue;
                    }

                    regionsused++;
                    structureRegion = StructureManager.regions[x, y];
                    transforms      = structureRegion.drops.Count;
                    for (var i = 0; i < transforms; i++)
                    {
                        transform = structureRegion.drops[i].model;
                        var Plant = transform.parent != null && transform.parent.CompareTag("Vehicle");
                        if (structureRegion.structures[i] == null)
                        {
                            error++;
                            continue;
                        }

                        structure = structureRegion.structures[i];
                        if (GroupOnly)
                        {
                            if (structure.group != player.SteamGroupID.m_SteamID)
                            {
                                continue;
                            }
                        }
                        if (SpecificSteamid64 != 0)
                        {
                            if (structure.owner != SpecificSteamid64)
                            {
                                continue;
                            }
                        }
                        if (Rectangle == false && Vector3.Distance(position, transform.position) < radius - 92 && !Plant)
                        {
                            Structures.Add(new StructureDataInternal(structureRegion.structures[i], transform.parent != null && transform.parent.CompareTag("Vehicle") ? true : false));
                        }

                        /* Rectangle Stuff
                         *  else if (Rectangle && Vector3.Distance(transform.position, Center) < 0)
                         *  {
                         *
                         *  } */
                    }
                }
            }

            //Logger.Log($"We have found {regionsfound} regions and used {regionsused} of them.");
            if (error != 0)
            {
                SendMessageAndLog(player, "It seems your structure regions are a bit of sync, if you have issues, gotta restart server. This issue may be caused by one of your plugins.", $"Error on executing SaveSchematic command for {player.CharacterName},it seems structure regions are out of sync, gotta restart if this causes issues. Sorry! This could be caused by a server plugin, or just getting unlucky.");
            }
            return(Structures);
        }
        private void Events_OnStructureDeployed(StructureRegion region, StructureDrop drop)
        {
            var @event = new UnturnedStructureDeployedEvent(new UnturnedStructureBuildable(drop));

            Emit(@event);
        }
Beispiel #12
0
 internal static void DestroyStructure(StructureRegion region, ushort index)
 {
     ThreadUtil.assertIsGameThread();
     OnBuildableDestroyed?.Invoke(region.drops[index].instanceID, true);
 }