コード例 #1
0
        void UpdateAutoTurret(AutoTurret turret, bool justCreated = false)
        {
            CheckAutoTurretAmmo(turret);

            string userID = turret.OwnerID.ToString();

            float  turretHealth = FromPermission(userID, autoHealths, defaultAutoHealth);
            string ammoType     = FromPermission(userID, ammoTypes, defaultAmmoType);

            InitializeTurret(turret, turretHealth, justCreated);

            turret.bulletSpeed = FromPermission(userID, bulletSpeeds, defaultBulletSpeed);
            turret.sightRange  = FromPermission(userID, sightRanges, defaultSightRange);
            turret.aimCone     = FromPermission(userID, aimCones, defaultAimCone);

            var def = ItemManager.FindItemDefinition(ammoType);

            if (def is ItemDefinition)
            {
                turret.ammoType = def;
                ItemModProjectile projectile = def.GetComponent <ItemModProjectile> ();
                if (projectile is ItemModProjectile)
                {
                    turret.gun_fire_effect.guid = projectile.projectileObject.guid;
                    turret.bulletEffect.guid    = projectile.projectileObject.guid;
                }
            }
            else
            {
                PrintWarning("No ammo of type ({0})", ammoType);
            }

            turret.Reload();
            turret.SendNetworkUpdateImmediate(justCreated);
        }
コード例 #2
0
        void AddSwitch(AutoTurret aturret)
        {
            ElectricBattery bat = null;

            if (IsBatEnabled())
            {
                bat = AddBattery(aturret.GetParentEntity() as MiniCopter);
            }

            ElectricSwitch aSwitch = aturret.GetComponentInChildren <ElectricSwitch>();

            aSwitch = GameManager.server.CreateEntity(switchPrefab, aturret.transform.position)?.GetComponent <ElectricSwitch>();
            if (aSwitch == null)
            {
                return;
            }
            aSwitch.pickup.enabled = false;
            aSwitch.SetParent(aturret);
            aSwitch.transform.localPosition = new Vector3(0f, -0.65f, 0.325f);
            aSwitch.transform.localRotation = Quaternion.Euler(0, 0, 0);
            DestroyMeshCollider(aSwitch);
            DestroyGroundComp(aSwitch);
            aSwitch.Spawn();
            aSwitch._limitedNetworking = false;
            if (!IsBatEnabled())
            {
                RunWire(aSwitch, 0, aturret, 0, 12);
            }
            else if (bat != null)
            {
                RunWire(bat, 0, aSwitch, 0);
                RunWire(aSwitch, 0, aturret, 0);
            }
        }
コード例 #3
0
        private object OnTurretAuthorize(AutoTurret turret, BasePlayer player)
        {
            if (HasPermission(player))
            {
                return(null);
            }

            if (!Configuration.EnforceTurrets)
            {
                return(null);
            }

            if (turret.authorizedPlayers.Count < Configuration.MaxPlayers)
            {
                return(null);
            }

            ProcessConfiguration(player, "turret");
            LogToFile("Turret", Lang("logMessage")
                      .Replace("{time}", DateTime.UtcNow.ToShortDateString())
                      .Replace("{player}", player.displayName)
                      .Replace("{steamID}", player.UserIDString)
                      .Replace("{coordinates}", FormattedCoordinates(player)), this);

            return(false);
        }
コード例 #4
0
 private static void AddRigidBodyToTriggerCollider(AutoTurret turret)
 {
     // Without this hack, the drone's sweep test can collide with other entities using the
     // turret trigger collider, causing the drone to ocassionally reduce altitude like when
     // it's close to the ground.
     turret.targetTrigger.GetOrAddComponent <Rigidbody>().isKinematic = true;
 }
コード例 #5
0
        private object CheckTurret(AutoTurret turret)
        {
            CodeLock _lock = turret.GetComponentInChildren <CodeLock>();

            if (!_lock)
            {
                return(null);
            }

            BasePlayer player = FindBasePlayer(turret.transform.position);

            if (player == null)
            {
                return(null);
            }

            if (_lock.code == string.Empty)
            {
                return(null);
            }

            if (_lock.whitelistPlayers.Contains(player.userID))
            {
                return(null);
            }

            player.ChatMessage(msg("Not Allowed", player.UserIDString));
            if (doEffects)
            {
                Effect.server.Run(effectDenied, _lock.transform.position);
            }
            return(true);
        }
コード例 #6
0
        private bool?OnTurretTarget(AutoTurret turret, BaseCombatEntity target)
        {
            if (turret == null || target == null || GetParentDrone(turret) == null)
            {
                return(null);
            }

            if (target is BaseAnimalNPC && !_pluginConfig.TargetAnimals)
            {
                return(false);
            }

            var basePlayer = target as BasePlayer;

            if (basePlayer != null)
            {
                if (basePlayer.IsNpc && !_pluginConfig.TargetNPCs)
                {
                    return(false);
                }

                // Don't target human or NPC players in safe zones, unless they are hostile.
                if (basePlayer.InSafeZone() && (basePlayer.IsNpc || !basePlayer.IsHostile()))
                {
                    return(false);
                }

                return(null);
            }

            return(null);
        }
コード例 #7
0
ファイル: ArmedBoats.cs プロジェクト: Wujaszkun/Armed-Boats
            private void SpawnGuns()
            {
                var rotation = mainBoat.transform.rotation;
                var position = mainBoat.transform.position;

                BaseEntity entity = GameManager.server.CreateEntity("assets/prefabs/npc/autoturret/autoturret_deployed.prefab", position, rotation, true);

                entity.SetParent(mainBoat, 0);
                entity.transform.localPosition    = new Vector3(0f, 1.2f, 4.2f);
                entity.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
                entity?.Spawn();

                turret = entity.GetComponent <AutoTurret>();
                turret.SetPeacekeepermode(true);
                turret.InitializeControl(null);
                turret.UpdateFromInput(100, 0);
                turret.isLootable = false;
                turret.dropChance = 0;

                spawnedEntities.Add(entity);

                turret.inventory.Clear();

                ItemManager.CreateByName("lmg.m249", 1).MoveToContainer(turret.inventory, 0);
                ItemManager.CreateByName("ammo.rifle", 1000).MoveToContainer(turret.inventory, 1);

                turret.UpdateAttachedWeapon();
                turret.Reload();
            }
コード例 #8
0
 private static void AddPlayer(AutoTurret turret, PlayerNameID playerNameId)
 {
     RemovePlayer(turret, playerNameId.userid);
     turret.authorizedPlayers.Add(playerNameId);
     turret.target = null;
     turret.SendNetworkUpdate();
 }
コード例 #9
0
        void AuthToTurret(BasePlayer player, AutoTurret turret, Dictionary <ulong, string> authList)
        {
            bool isOnline = false;

            if (turret.IsOnline())
            {
                turret.SetIsOnline(false);
                isOnline = true;
            }
            turret.authorizedPlayers.Clear();
            foreach (var friend in authList)
            {
                turret.authorizedPlayers.Add(new ProtoBuf.PlayerNameID
                {
                    userid   = friend.Key,
                    username = friend.Value
                });
            }
            turret.SendNetworkUpdateImmediate();
            player.SendNetworkUpdateImmediate();
            if (isOnline)
            {
                turret.SetIsOnline(true);
            }
            SendReply(player, string.Format(msg("turretSuccess"), authList.Count));
            return;
        }
コード例 #10
0
        private void MaybeImproveAim(AutoTurret autoTurret)
        {
            if (autoTurret is NPCAutoTurret)
            {
                return;
            }

            if (_pluginConfig.OnlyVehicles && GetParentVehicle(autoTurret) == null)
            {
                return;
            }

            if (!_pluginConfig.RequirePermission)
            {
                ImproveAiming(autoTurret);
                return;
            }

            var ownerId = autoTurret.OwnerID;

            if (ownerId == 0 || !permission.UserHasPermission(ownerId.ToString(), PermissionUse))
            {
                return;
            }

            ImproveAiming(autoTurret);
        }
コード例 #11
0
        private object OnSwitchToggle(ElectricSwitch eswitch, BasePlayer player)
        {
            if (IsBatEnabled())
            {
                return(null);
            }
            BaseEntity parent = eswitch.GetParentEntity();

            if (parent != null && parent.PrefabName.Equals(autoturretPrefab))
            {
                AutoTurret turret = parent as AutoTurret;
                if (turret == null)
                {
                    return(null);
                }
                if (!eswitch.IsOn())
                {
                    PowerTurretOn(turret);
                }
                else
                {
                    PowerTurretOff(turret);
                }
            }
            return(null);
        }
コード例 #12
0
        private object OnTurretTarget(AutoTurret turret, BaseCombatEntity entity)
        {
            var player = entity as BasePlayer;

            return(player == null || player.IsNpc || player.net?.connection == null || !IsLimited(player)
                ? (object)null
                : false);
        }
コード例 #13
0
ファイル: TurretNerf.cs プロジェクト: Cannabis-CFG/Oxide
 void OnEntitySpawned(AutoTurret entity)
 {
     if (entity.PrefabName != autoTurretPrefab)
     {
         return;
     }
     entity.inventory.capacity = 2;
 }
コード例 #14
0
            private void Awake()
            {
                Turret = GetComponent <AutoTurret>();

                var tickInterval = _pluginInstance._pluginConfig.UpdateIntervalSeconds;

                InvokeRandomized(MaybeUpdateAim, UnityEngine.Random.Range(0f, 1f), tickInterval, tickInterval * 0.25f);
            }
コード例 #15
0
 private object OnTurretClearList(AutoTurret turret, BasePlayer player)
 {
     if (CheckTurretNoSphereCast(turret, player) == null)
     {
         return(null);
     }
     return(true);
 }
コード例 #16
0
 private void OnTurretModeToggle(AutoTurret turret)
 {
     if (CheckTurret(turret) == null)
     {
         return;
     }
     turret.SetPeacekeepermode(!turret.PeacekeeperMode());
 }
コード例 #17
0
 private void Awake()
 {
     turret = GetComponent <AutoTurret>();
     if (turret != null)
     {
         InvokeRepeating("FindTargets", 5f, 1.0f);
     }
 }
コード例 #18
0
        private void ImproveAiming(AutoTurret autoTurret)
        {
            if (ImproveAimWasBlocked(autoTurret))
            {
                return;
            }

            var aimComponent = autoTurret.gameObject.AddComponent <TurretAimImprover>();
        }
コード例 #19
0
 public void PowerTurretOn(AutoTurret turret)
 {
     turret.SetFlag(BaseEntity.Flags.Reserved8, true);
     turret.InitiateStartup();
     if (!onlineTurrets.Contains(turret))
     {
         onlineTurrets.Add(turret);
     }
 }
コード例 #20
0
 private void PowerTurretOff(AutoTurret turret)
 {
     turret.SetFlag(BaseEntity.Flags.Reserved8, false);
     turret.InitiateShutdown();
     if (onlineTurrets.Contains(turret))
     {
         onlineTurrets.Remove(turret);
     }
 }
コード例 #21
0
        object CanBeTargeted(BasePlayer player, BaseCombatEntity entity)
        {
            if (permission.UserHasPermission(player.UserIDString, turretsIgnore))
            {
                return(false);
            }

            else if (permission.UserHasPermission(player.UserIDString, turretsNeverIgnore))
            {
                return(null);
            }

            if (entity is NPCAutoTurret && _config.NPCTurretsAffected)
            {
                BuildingPrivlidge priviledge = entity.GetBuildingPrivilege();

                if (priviledge != null && !priviledge.IsAuthed(player) && player.IsBuildingBlocked() && player.IsVisible(new Vector3(entity.transform.position.x, entity.transform.position.y + 0.8f, entity.transform.position.z), new Vector3(player.transform.position.x, player.transform.position.y + 1.5f, player.transform.position.z)))
                {
                    return(null);
                }
                else
                {
                    return(false);
                }
            }

            if ((entity is AutoTurret && !(entity is NPCAutoTurret) && _config.autoturretsAffected))
            {
                AutoTurret turret = entity as AutoTurret;

                BuildingPrivlidge priviledge = turret.GetBuildingPrivilege();

                if (priviledge != null && !priviledge.IsAuthed(player) && player.IsBuildingBlocked() && player.IsVisible(new Vector3(turret.transform.position.x, turret.transform.position.y + 0.8f, turret.transform.position.z), new Vector3(player.transform.position.x, player.transform.position.y + 1.5f, player.transform.position.z)))
                {
                    if (_config.autoturretsShootAuthed && turret.IsAuthed(player))
                    {
                        turret.SetTarget(player);

                        return(null);
                    }
                    else if (!turret.IsAuthed(player))
                    {
                        return(null);
                    }
                }

                return(false);
            }

            if ((entity is FlameTurret && _config.flameTrapsAffected) || (entity is GunTrap && _config.shotgunTrapsAffected) && !player.IsBuildingBlocked() || !player.IsVisible(entity.transform.position, player.transform.position, Mathf.Infinity))
            {
                return(false);
            }

            return(null);
        }
コード例 #22
0
        // Cancels targeting if ShareAutoTurrets is enabled and target is a friend of the turret's owner.
        object OnTurretTarget(AutoTurret turret, BaseCombatEntity target)
        {
            BasePlayer player;

            return(configData.Rust.ShareAutoTurrets &&
                   (player = (target as BasePlayer)) != null &&
                   HasFriend(turret.OwnerID, player.userID)
                ? @false
                : null);
        }
コード例 #23
0
        private object OnTurretTarget(AutoTurret turret, BaseCombatEntity entity)
        {
            var basePlayer = entity as BasePlayer;

            if (basePlayer != null && _data.Contains(basePlayer))
            {
                return(false);
            }

            return(null);
        }
コード例 #24
0
        private void UpdateTurret(AutoTurret turret, bool justCreated = false)
        {
            CheckAmmo(turret);

            string userID = turret.OwnerID.ToString();

            float  turretHealth = GetHealth(userID);
            string ammoType     = GetAmmoType(userID);

            bulletDamageField.SetValue(turret, GetBulletDamage(userID));
            if (justCreated)
            {
                healthField.SetValue(turret, turretHealth);
            }
            maxHealthField.SetValue(turret, turretHealth);

            if (justCreated)
            {
                turret.InitializeHealth(turretHealth, turretHealth);
            }
            else
            {
                turret.InitializeHealth(turret.health, turretHealth);
            }

            turret.bulletSpeed = GetBulletSpeed(userID);
            turret.sightRange  = GetSightRange(userID);
            turret.startHealth = turretHealth;
            turret.aimCone     = GetAimCone(userID);

            var def = ItemManager.FindItemDefinition(ammoType);

            if (def is ItemDefinition)
            {
                turret.ammoType = def;
                ItemModProjectile projectile = def.GetComponent <ItemModProjectile>();
                if (projectile is ItemModProjectile)
                {
                    turret.gun_fire_effect.guid = projectile.projectileObject.guid;
                    turret.bulletEffect.guid    = projectile.projectileObject.guid;
                }
            }
            else
            {
                PrintWarning("No ammo of type ({0})", ammoType);
            }

            turret.Reload();

            //turret.enableSaving = false;
            //turret.ServerInit();
            turret.SendNetworkUpdateImmediate(justCreated);
        }
コード例 #25
0
        void OnTurretAuthorize(AutoTurret turret, BasePlayer player)
        {
            if (turret.IsAuthed(player))
            {
                return;
            }
            var nameListLink = new List <string>();
            var nameList     = new List <string>();
            var statusList   = new List <string>();
            var idList       = new List <ulong>();
            var positionList = new List <string>();

            if (turret.authorizedPlayers.Count + 1 > configData.MaxAuth)
            {
                Puts(turret.authorizedPlayers[0].username);
                foreach (var authed in turret.authorizedPlayers)
                {
                    nameListLink.Add($"[{authed.username}](https://steamcommunity.com/profiles/{authed.userid})");
                    nameList.Add(authed.username);

                    idList.Add(authed.userid);
                    var authedPlayer = BasePlayer.FindAwakeOrSleeping(authed.ToString());
                    if (authedPlayer == null || authedPlayer.IsConnected == false)
                    {
                        statusList.Add("Offline");
                    }
                    else if (authedPlayer.IsConnected)
                    {
                        statusList.Add("Online");
                    }
                }

                positionList.Add($"Teleportpos ({turret.transform.position.x.ToString().Substring(0, 5)},{turret.transform.position.y.ToString().Substring(0, 5)},{turret.transform.position.z.ToString().Substring(0, 5)})");
                nameList.Add(player.displayName);
                nameListLink.Add($"[{player.displayName}](https://steamcommunity.com/profiles/{player.userID})");
                idList.Add(player.userID);

                if (player.IsConnected)
                {
                    statusList.Add("Online");
                }

                if (configData.IngameNotificationEnable)
                {
                    NotifyAdminsIngame(positionList, nameList, statusList, idList);
                }

                if (configData.DiscordWebhookEnable && configData.DiscordWebhook != "" && configData.DiscordWebhook != null)
                {
                    SendDiscordMessage(nameListLink, idList, positionList, statusList);
                }
            }
        }
コード例 #26
0
 private static void RemovePlayer(AutoTurret turret, ulong userId)
 {
     for (int i = turret.authorizedPlayers.Count - 1; i >= 0; i--)
     {
         if (turret.authorizedPlayers[i].userid != userId)
         {
             continue;
         }
         turret.authorizedPlayers.RemoveAt(i);
         turret.SendNetworkUpdate();
         break;
     }
 }
コード例 #27
0
ファイル: ArmedBoats.cs プロジェクト: Wujaszkun/Armed-Boats
 public void FireTurretsGuns(BasePlayer player, AutoTurret turret)
 {
     if (turret.IsOnline() == true)
     {
         if (turret.GetAttachedWeapon().AmmoFraction() <= 0)
         {
             //nextShootTime = Time.time + turret.GetAttachedWeapon().GetReloadDuration();
             turret.GetAttachedWeapon().TopUpAmmo();
             //canGunShoot = false;
         }
         turret.FireAttachedGun(Vector3.zero, ConVar.PatrolHelicopter.bulletAccuracy);
     }
 }
コード例 #28
0
        // Redirect damage from the turret to the drone.
        private bool?OnEntityTakeDamage(AutoTurret turret, HitInfo info)
        {
            var drone = GetParentDrone(turret);

            if (drone == null)
            {
                return(null);
            }

            drone.Hurt(info);
            HitNotify(drone, info);

            return(true);
        }
コード例 #29
0
        private bool unflipTurreT(BaseEntity turret, BasePlayer player)
        {
            try{
                if (turret.transform.rotation.w != -0.00f)
                {
                    return(false);
                }

                AutoTurret autoTurret = GameManager.server.CreateEntity(pf, new Vector3(turret.transform.position.x, turret.transform.position.y - 3f, turret.transform.position.z), new Quaternion(0.0f, 0.1f, 0.0f, 1.0f), true) as AutoTurret;
                autoTurret.Spawn();
                autoTurret.health = turret.Health();

                turretinv.Add(autoTurret, 0);
                foreach (var item in turret.GetComponent <AutoTurret>().inventory.itemList.ToList())
                {
                    if (item.info.displayName.english == ("5.56 Rifle Ammo"))
                    {
                        turretinv[autoTurret] = turretinv[autoTurret] + item.amount;
                    }
                }
                turretplayer.Add(autoTurret, new AutoPlayer {
                });
                foreach (var target in turret.GetComponent <AutoTurret>().authorizedPlayers)
                {
                    turretplayer[autoTurret].players.Add(target);
                }

                Item itemn = BuildItems("ammo.rifle", turretinv[autoTurret]);
                if (itemn != null)
                {
                    itemn.MoveToContainer(autoTurret.inventory);
                }
                turretinv.Remove(autoTurret);

                foreach (var entry in turretplayer[autoTurret].players)
                {
                    autoTurret.authorizedPlayers.Add(entry);
                }
                turretplayer.Remove(autoTurret);

                autoTurret.SendNetworkUpdateImmediate();
                turret.KillMessage();
                return(true);
            }
            catch (System.Exception)
            {
                return(false);
            }
        }
コード例 #30
0
        private object OnTurretTarget(AutoTurret turret, BaseCombatEntity entity)
        {
            var player = entity as BasePlayer;

            if (player == null)
            {
                return(null);
            }
            if (!IsAuthed(player, turret))
            {
                return(null);
            }
            Auth(turret, GetPlayerNameId(player));
            return(false);
        }