public bool VisibilityTest(BaseEntity ent)
    {
        if (ent == null)
        {
            return(false);
        }
        if (Vector3.Distance(ent.transform.position, base.transform.position) >= this.viewDistance)
        {
            return(false);
        }
        bool flag = false;

        if (!(ent is BasePlayer))
        {
            Debug.LogWarning("Standard vis test!");
            flag = base.IsVisible(ent.CenterPoint(), Single.PositiveInfinity);
        }
        else
        {
            BasePlayer basePlayer = ent as BasePlayer;
            Vector3    vector3    = this.mainTurret.transform.position;
            flag = (base.IsVisible(basePlayer.eyes.position, vector3, Single.PositiveInfinity) ? true : base.IsVisible(basePlayer.transform.position, vector3, Single.PositiveInfinity));
        }
        object obj = Interface.CallHook("CanBradleyApcTarget", this, ent);

        if (!(obj as bool))
        {
            return(flag);
        }
        return((bool)obj);
    }
Example #2
0
    public bool VisibilityTest(BaseEntity ent)
    {
        if (ent == null)
        {
            return(false);
        }
        if (!(Vector3.Distance(ent.transform.position, base.transform.position) < viewDistance))
        {
            return(false);
        }
        bool flag = false;

        if (ent is BasePlayer)
        {
            BasePlayer basePlayer = ent as BasePlayer;
            Vector3    position   = mainTurret.transform.position;
            flag = IsVisible(basePlayer.eyes.position, position) || IsVisible(basePlayer.transform.position + Vector3.up * 0.1f, position);
            if (flag)
            {
                flag = !UnityEngine.Physics.SphereCast(new Ray(position, Vector3Ex.Direction(basePlayer.eyes.position, position)), 0.05f, Vector3.Distance(basePlayer.eyes.position, position), 10551297);
            }
        }
        else
        {
            Debug.LogWarning("Standard vis test!");
            flag = IsVisible(ent.CenterPoint());
        }
        object obj = Interface.CallHook("CanBradleyApcTarget", this, ent);

        if (obj is bool)
        {
            return((bool)obj);
        }
        return(flag);
    }
Example #3
0
 public bool CanSeeTarget(BaseEntity entity)
 {
     if (entity == null)
     {
         return(false);
     }
     return(entity.IsVisible(GetEntity().CenterPoint(), entity.CenterPoint()));
 }
    public Vector3 GetAimPoint(BaseEntity ent)
    {
        BasePlayer basePlayer = ent as BasePlayer;

        if (basePlayer == null)
        {
            return(ent.CenterPoint());
        }
        return(basePlayer.eyes.position);
    }
        private object CanBradleyApcTarget(BradleyAPC bradley, BaseEntity target)
        {
            if (target is NPCPlayer)
            {
                return(false);
            }

            var player = target as BasePlayer;

            if (player != null)
            {
                Vector3 mainTurretPosition = bradley.mainTurret.transform.position;

                if (!(player.IsVisible(mainTurretPosition, bradley.CenterPoint()) || player.IsVisible(mainTurretPosition, player.eyes.position) || player.IsVisible(mainTurretPosition, player.transform.position)))
                {
                    return(false);
                }

                if (!configs.options.targetsNakeds)
                {
                    foreach (var item in player.inventory.containerWear.itemList)
                    {
                        if (configs.targetable.targetable.Contains(item.info.shortname) && !configs.targetable.nonTargetable.Contains(item.info.shortname))
                        {
                            return(true);
                        }
                    }

                    if (player.inventory.containerWear.itemList.Count > configs.targetable.mostClothing)
                    {
                        return(true);
                    }

                    foreach (var item in player.inventory.containerBelt.itemList)
                    {
                        if (configs.targetable.targetable.Contains(item.info.shortname) && !configs.targetable.nonTargetable.Contains(item.info.shortname))
                        {
                            return(true);
                        }
                    }

                    return(false);
                }
            }

            return(bradley.IsVisible(target.CenterPoint()));
        }
Example #6
0
 public virtual void InitCorpse(BaseEntity pr)
 {
     parentEnt = pr;
     base.transform.SetPositionAndRotation(parentEnt.CenterPoint(), parentEnt.transform.rotation);
 }
Example #7
0
        void OnPlayerInput(BasePlayer player, InputState input)
        {
            if (!Users.Contains(player.userID))
            {
                return;
            }

            if (permission.UserHasPermission(player.UserIDString, permAllow))
            {
                if (!input.WasJustPressed(BUTTON.FIRE_SECONDARY) || (player.GetActiveItem() as Item)?.info.shortname != toolUsed)
                {
                    return;
                }

                RaycastHit hit;
                var        raycast = Physics.Raycast(player.eyes.HeadRay(), out hit, toolDistance, layerMask);
                BaseEntity entity  = raycast ? hit.GetEntity() : null;

                if (!entity)
                {
                    SendReply(player, Lang("NoEntityFound", player.UserIDString, toolUsed));
                    return;
                }

                if (entity is Door)
                {
                    var      door     = entity as Door;
                    CodeLock codeLock = (CodeLock)door.GetSlot(BaseEntity.Slot.Lock);

                    if (codeLock)
                    {
                        player.ChatMessage("CodeLock");
                    }

                    string msg = Lang("AuthorizedPlayers", player.UserIDString, door.ShortPrefabName, GetName(entity.OwnerID.ToString())) + "\n";

                    int authed = 0;

                    foreach (var user in codeLock.whitelistPlayers)
                    {
                        msg += $"- {GetName(user.ToString())}\n";
                        authed++;
                    }

                    player.ChatMessage(authed == 0 ? Lang("NoAuthorizedPlayers", player.UserIDString) : msg);

                    return;
                }

                if (entity is BuildingPrivlidge || entity is AutoTurret)
                {
                    player.ChatMessage(GetAuthorized(entity, player));
                }
                else if (entity is StorageContainer)
                {
                    var    storageContainer = entity as StorageContainer;
                    string msg = $"Items in the {storageContainer.ShortPrefabName} owned by {GetName(storageContainer.OwnerID.ToString())}:\n";
                    foreach (var item in storageContainer.inventory.itemList)
                    {
                        msg += $"{item.amount}x {item.info.displayName.english}\n";
                    }
                    player.ChatMessage(msg);
                }
                else
                {
                    player.ChatMessage(entity.OwnerID == 0 ? Lang("NoOwner", player.UserIDString) : Lang("ChatEntityOwnedBy", player.UserIDString, entity.ShortPrefabName, GetName(entity.OwnerID.ToString())));
                    Puts(entity.OwnerID == 0 ? Lang("NoOwner", player.UserIDString) : Lang("ConsoleEntityOwnedBy", player.UserIDString, entity.ShortPrefabName, entity.OwnerID.ToString()));
                }

                if (showSphere)
                {
                    player.SendConsoleCommand("ddraw.sphere", 2f, Color.blue, entity.CenterPoint(), 1f);
                }
            }
        }
Example #8
0
        void OnEntityBuilt(Planner planner, GameObject gameobject)
        {
            if (planner == null || gameobject == null)
            {
                return;
            }
            var player = planner.GetOwnerPlayer();

            if (player.IsAdmin && adminIgnore)
            {
                return;
            }
            BaseEntity entity = gameobject.ToBaseEntity();

            if (entity == null)
            {
                return;
            }

            var privilege = player.GetBuildingPrivilege();

            if ((privilege != null && privilege.authorizedPlayers.Count(p => p.userid == player.userID) == 0) || !CupboardPrivlidge(player, entity.transform.position, entity))
            {
                Refund(player, entity);
                player.ChatMessage(Messages["buildingBlocked"]);
                entity.Kill();
                return;
            }
            Vector3 pos = entity.GetNetworkPosition();

            if (entity is BuildingPrivlidge)
            {
                if (HasCupboard(pos, 25f, entity))
                {
                    Refund(player, entity);
                    player.ChatMessage(Messages["AlreadyBuildingBuilt"]);
                    entity.Kill();
                    return;
                }
            }
            if (pos.y < -waterLevel)
            {
                if (caveBuild && InCave(pos))
                {
                    return;
                }
                else
                {
                    player.ChatMessage(string.Format(Messages["waterLevel"], waterLevel));
                    entity.Kill();
                    return;
                }
            }
            if (TerrainMeta.WaterMap.GetHeight(pos) - pos.y > waterLevel)
            {
                player.ChatMessage(string.Format(Messages["waterLevel"], waterLevel));
                entity.Kill();
                return;
            }
            if (pos.y - TerrainMeta.HeightMap.GetHeight(pos) > maxHeight)
            {
                SendReply(player, string.Format(Messages["heightLevel"], maxHeight));
                entity.Kill();
                return;
            }
            if (roadRestrict)
            {
                RaycastHit hit;
                if (Physics.Raycast(pos + new Vector3(0, 2, 0), Vector3.down, out hit, 10, terrainMask))
                {
                    if (hit.transform.name == "Road Mesh")
                    {
                        SendReply(player, Messages["roadBlock"]);
                        entity.Kill();
                        return;
                    }
                }
            }

            if (treeRadius > 0 && entity.ShortPrefabName.Contains("foundation"))
            {
                List <TreeEntity> treeList = new List <TreeEntity>();
                Vis.Entities(pos, treeRadius, treeList, LayerMask.GetMask("Tree"), QueryTriggerInteraction.Ignore);
                if (treeList.Count > 0)
                {
                    SendReply(player, string.Format(Messages["treeBlock"], (int)treeRadius));
                    entity.Kill();
                    return;
                }
            }
            if (entity.ShortPrefabName.Contains("foundation"))
            {
                List <BuildingBlock> blockList = new List <BuildingBlock>();
                Vis.Entities(pos, 4, blockList, constructionMask, QueryTriggerInteraction.Ignore);
                if (
                    blockList.Count(
                        block =>
                        block.ShortPrefabName.Contains("foundation") &&
                        CompareFoundationStacking(block.CenterPoint(), entity.CenterPoint())) > 1)
                {
                    entity.KillMessage();
                    SendReply(player, Messages["StackFoundation"], this);
                }
            }
            //Puts($"{player.userID}/{player.displayName}:{entity.ShortPrefabName}");
        }
Example #9
0
        void OnEntityBuilt(Planner plan, GameObject go)
        {
            BaseEntity entity = go.ToBaseEntity();

            if (entity == null)
            {
                return;
            }

            if (!foundationWidth.ContainsKey(entity.ShortPrefabName))
            {
                return;
            }

            double localEntityWidth = foundationWidth[entity.ShortPrefabName];

            List <BaseEntity> list = new List <BaseEntity>();

            Vis.Entities(entity.transform.position, 3f, list, copyLayer, QueryTriggerInteraction.Ignore);
            foreach (BaseEntity targetEntity in list)
            {
                if (targetEntity == entity || !foundationWidth.ContainsKey(targetEntity.ShortPrefabName))
                {
                    continue;
                }

                float  localDistance     = Vector3.Distance(targetEntity.CenterPoint(), entity.CenterPoint());
                double targetEntityWidth = foundationWidth[targetEntity.ShortPrefabName];

                if (localDistance + 0.05d < localEntityWidth + targetEntityWidth) //Accounts for floating point errors
                {
                    entity.Kill();
                    if (plan.GetOwnerPlayer() != null)
                    {
                        PrintToChat(plan.GetOwnerPlayer(), lang.GetMessage("BlockMessage", this));
                    }
                    return;
                }
            }
        }