Пример #1
0
        // Token: 0x0600049B RID: 1179 RVA: 0x00013388 File Offset: 0x00011588
        public override void OnEnter()
        {
            base.OnEnter();
            base.PlayAnimation("Base", "Release");
            Transform modelTransform = base.GetModelTransform();

            if (modelTransform)
            {
                ChildLocator component = modelTransform.GetComponent <ChildLocator>();
                component.FindChild("Door").gameObject.SetActive(false);
                component.FindChild("ReleaseExhaustFX").gameObject.SetActive(true);
            }
            if (!base.survivorPodController)
            {
                return;
            }
            if (Util.HasEffectiveAuthority(base.survivorPodController.characterBodyObject))
            {
                base.survivorPodController.characterStateMachine.SetNextStateToMain();
                TeleportHelper.TeleportGameObject(base.survivorPodController.characterBodyObject, base.survivorPodController.exitPosition.position);
                CharacterMotor component2 = base.survivorPodController.characterBodyObject.GetComponent <CharacterMotor>();
                if (component2)
                {
                    component2.velocity = base.survivorPodController.exitPosition.forward * Release.ejectionSpeed;
                }
            }
        }
Пример #2
0
        private void CharacterMaster_TransformBody1(On.RoR2.CharacterMaster.orig_TransformBody orig, CharacterMaster self, string bodyName)
        {
            if (bodyName == "HereticBody" && self.GetComponent <BaseAI>())
            {
                var newSummon = new MasterSummon()
                {
                    ignoreTeamMemberLimit = true,
                    inventoryToCopy       = self.inventory,
                    masterPrefab          = Resources.Load <GameObject>("prefabs/charactermasters/hereticmonstermaster"),
                    position          = self.GetBody()?.footPosition ?? Vector3.zero,
                    useAmbientLevel   = true,
                    teamIndexOverride = self.teamIndex
                };
                var newMaster = newSummon.Perform();

                return;
            }
            orig(self, bodyName);
            var body = self.GetBody();

            if (body)
            {
                TeleportHelper.TeleportBody(body, Vector3.zero);
                body.healthComponent?.Suicide();
            }
        }
Пример #3
0
 private void TeleportCharacter(CharacterBody characterBody)
 {
     if (!Physics.GetIgnoreLayerCollision(base.gameObject.layer, characterBody.gameObject.layer))
     {
         SpawnCard spawnCard = ScriptableObject.CreateInstance<SpawnCard>();
         spawnCard.hullSize = characterBody.hullClassification;
         spawnCard.nodeGraphType = MapNodeGroup.GraphType.Ground;
         spawnCard.prefab = Resources.Load<GameObject>("SpawnCards/HelperPrefab");
         GameObject gameObject = DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(spawnCard, new DirectorPlacementRule
         {
             placementMode = DirectorPlacementRule.PlacementMode.NearestNode,
             position = characterBody.transform.position
         }, RoR2Application.rng));
         if (gameObject)
         {
             Debug.Log("tp back");
             TeleportHelper.TeleportBody(characterBody, gameObject.transform.position);
             GameObject teleportEffectPrefab = Run.instance.GetTeleportEffectPrefab(characterBody.gameObject);
             if (teleportEffectPrefab)
             {
                 EffectManager.instance.SimpleEffect(teleportEffectPrefab, gameObject.transform.position, Quaternion.identity, true);
             }
             UnityEngine.Object.Destroy(gameObject);
         }
         UnityEngine.Object.Destroy(spawnCard);
     }
 }
Пример #4
0
        public void RespawnExtraLife(CharacterMaster master, float BuffTimer = 3f, CharacterMaster summoner = null)
        {
            var RespawnPosition = master.deathFootPosition;

            if (summoner)
            {
                RespawnPosition = summoner.GetBody().footPosition;
            }
            else if (master.killedByUnsafeArea)
            {
                RespawnPosition = (TeleportHelper.FindSafeTeleportDestination(master.deathFootPosition, master.bodyPrefab.GetComponent <CharacterBody>(), RoR2Application.rng) ?? master.deathFootPosition);
            }

            master.Respawn(RespawnPosition, Quaternion.Euler(0f, UnityEngine.Random.Range(0f, 360f), 0f));
            master.GetBody().AddTimedBuff(RoR2Content.Buffs.Immune, BuffTimer);
            GameObject gameObject = Resources.Load <GameObject>("Prefabs/Effects/HippoRezEffect");

            if (master.bodyInstanceObject)
            {
                foreach (EntityStateMachine entityStateMachine in master.bodyInstanceObject.GetComponents <EntityStateMachine>())
                {
                    entityStateMachine.initialStateType = entityStateMachine.mainStateType;
                }
                if (gameObject)
                {
                    EffectManager.SpawnEffect(gameObject, new EffectData
                    {
                        origin   = RespawnPosition,
                        rotation = master.bodyInstanceObject.transform.rotation
                    }, true);
                }
            }
        }
Пример #5
0
        private static void CCTpBots(ConCommandArgs args)
        {
            NetworkUser user = args.sender;

            if (Stage.instance == null || user.master == null || user.master.IsDeadAndOutOfLivesServer())
            {
                return;
            }

            foreach (GameObject gameObject in playerbots)
            {
                if (gameObject)
                {
                    CharacterMaster master = gameObject.GetComponent <CharacterMaster>();

                    if (!master.IsDeadAndOutOfLivesServer())
                    {
                        TeleportHelper.TeleportGameObject(master.GetBody().gameObject, new Vector3(
                                                              user.master.GetBody().transform.position.x,
                                                              user.master.GetBody().transform.position.y,
                                                              user.master.GetBody().transform.position.z
                                                              ));
                    }
                }
            }
        }
Пример #6
0
            private bool TeleportBody(Vector3 desiredPosition, GraphType nodeGraphType)
            {
                SpawnCard spawnCard = ScriptableObject.CreateInstance <SpawnCard>();

                spawnCard.hullSize      = BotBody.hullClassification;
                spawnCard.nodeGraphType = nodeGraphType;
                spawnCard.prefab        = Resources.Load <GameObject>("SpawnCards/HelperPrefab");
                GameObject gameObject = DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(spawnCard, new DirectorPlacementRule
                {
                    placementMode = DirectorPlacementRule.PlacementMode.Approximate,
                    position      = desiredPosition,
                    minDistance   = 20,
                    maxDistance   = 45
                }, RoR2Application.rng));

                if (gameObject)
                {
                    TeleportHelper.TeleportBody(BotBody, gameObject.transform.position);
                    GameObject teleportEffectPrefab = Run.instance.GetTeleportEffectPrefab(BotBody.gameObject);
                    if (teleportEffectPrefab)
                    {
                        EffectManager.SimpleEffect(teleportEffectPrefab, gameObject.transform.position, Quaternion.identity, true);
                    }
                    Destroy(gameObject);
                    Destroy(spawnCard);
                    return(true);
                }
                else
                {
                    Destroy(spawnCard);
                    return(false);
                }
            }
Пример #7
0
 public void Update()
 {
     if (Input.GetKeyDown(KeyCode.Z))
     {
         CharacterMaster master = GetComponent <CharacterMaster>();
         if (master && CameraRigController.readOnlyInstancesList.Count >= 1)
         {
             TeleportHelper.TeleportBody(master.GetBody(), CameraRigController.readOnlyInstancesList[0].crosshairWorldPosition);
         }
     }
 }
 public void OnReceived()
 {
     if (Util.HasEffectiveAuthority(target) || NetworkServer.active)
     {
         TeleportHelper.TeleportBody(target.GetComponent <CharacterBody>(), position);
         if (!fromServer)
         {
             NetMessageExtensions.Send(new CRTeleportNetworkMessage {
                 target = target, position = position, fromServer = true
             }, R2API.Networking.NetworkDestination.Clients);
         }
     }
 }
Пример #9
0
 private void CombatSquad_AddMember(On.RoR2.CombatSquad.orig_AddMember orig, CombatSquad self, CharacterMaster memberMaster)
 {
     orig(self, memberMaster);
     if (IsUmbra(memberMaster) && self.gameObject.name.StartsWith("ShadowCloneEncounter"))
     {
         Transform  playerSpawnTransform = Stage.instance.GetPlayerSpawnTransform();
         var        body       = memberMaster.GetBody();
         Vector3    vector     = body.footPosition;
         Quaternion quaternion = Quaternion.identity;
         if (playerSpawnTransform)
         {
             vector     = playerSpawnTransform.position;
             quaternion = playerSpawnTransform.rotation;
         }
         TeleportHelper.TeleportBody(body, vector);
         Run.instance.HandlePlayerFirstEntryAnimation(body, vector, quaternion);
         //if (memberMaster.bodyPrefab.GetComponent<CharacterBody>()?.preferredPodPrefab != null)
     }
 }
 public void OnInteract(Interactor interactor)
 {
     if (teleportTarget && interactor.gameObject.GetComponent <CharacterBody>())
     {
         EffectManager.SpawnEffect(GenericCharacterDeath.voidDeathEffect, new EffectData
         {
             origin = interactor.gameObject.transform.position,
             scale  = 5f
         }, true);
         if (Util.HasEffectiveAuthority(interactor.gameObject))
         {
             TeleportHelper.TeleportBody(interactor.gameObject.GetComponent <CharacterBody>(), teleportTarget.transform.position);
         }
         else
         {
             if (NetworkServer.active)
             {
                 NetMessageExtensions.Send(new CRTeleportNetworkMessage {
                     target = interactor.gameObject, position = teleportTarget.transform.position, fromServer = true
                 }, R2API.Networking.NetworkDestination.Clients);
             }
             else
             {
                 NetMessageExtensions.Send(new CRTeleportNetworkMessage {
                     target = interactor.gameObject, position = teleportTarget.transform.position, fromServer = false
                 }, R2API.Networking.NetworkDestination.Server);
             }
         }
         EffectManager.SpawnEffect(DeathState.deathExplosionEffect, new EffectData
         {
             origin = teleportTarget.transform.position + new Vector3(0, 3, 0),
             scale  = 5f
         }, true);
     }
     else
     {
         this.outer.SetNextStateToMain();
         base.gameObject.GetComponent <PurchaseInteraction>().available = false;
     }
 }
Пример #11
0
        private void RepositionGroundedDrones(CharacterBody droneBody, Vector3 desiredPosition)
        {
            bool isGrounded = false;

            foreach (string subname in GroundedDrones)
            {
                if (droneBody.name.Contains(subname))
                {
                    isGrounded = true;
                    break;
                }
            }
            if (!isGrounded)
            {
                return;
            }
            SpawnCard spawnCard = ScriptableObject.CreateInstance <SpawnCard>();

            spawnCard.hullSize      = droneBody.hullClassification;
            spawnCard.nodeGraphType = GraphType.Ground;
            spawnCard.prefab        = helperPrefab;
            GameObject gameObject = DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(spawnCard, new DirectorPlacementRule
            {
                placementMode = DirectorPlacementRule.PlacementMode.Approximate,
                position      = desiredPosition,
                minDistance   = 0,
                maxDistance   = 50
            }, Run.instance.runRNG));

            if (gameObject)
            {
                TeleportHelper.TeleportBody(droneBody, gameObject.transform.position);
                Object.Destroy(gameObject);
            }
            else
            {
                Log.Warning($"Machines.RepositionGroundedDrones: Failed to reposition {droneBody.name}. It might be floating now.");
            }
            Object.Destroy(spawnCard);
        }
        /// <summary>
        /// Teleports a body to another GameObject using the director system.
        /// </summary>
        /// <param name="characterBody">The body to teleport.</param>
        /// <param name="target">The GameObject we should teleport to.</param>
        /// <param name="teleportEffect">The teleportation effect we should use upon arrival.</param>
        /// <param name="hullClassification">The hullclassification we should use for traversing the nodegraph.</param>
        /// <param name="rng">The random that we should use to position the body randomly around our target.</param>
        /// <param name="minDistance">How close to the target can we get?</param>
        /// <param name="maxDistance">How far out from the target can we get?</param>
        /// <param name="teleportAir">Should we use the air nodes?</param>
        /// <returns>A bool representing if the teleportation was successful or not.</returns>
        public static bool TeleportBody(CharacterBody characterBody, GameObject target, GameObject teleportEffect, HullClassification hullClassification, Xoroshiro128Plus rng, float minDistance = 20, float maxDistance = 45, bool teleportAir = false)
        {
            if (!characterBody)
            {
                return(false);
            }

            SpawnCard spawnCard = ScriptableObject.CreateInstance <SpawnCard>();

            spawnCard.hullSize      = hullClassification;
            spawnCard.nodeGraphType = teleportAir ? MapNodeGroup.GraphType.Air : MapNodeGroup.GraphType.Ground;
            spawnCard.prefab        = Resources.Load <GameObject>("SpawnCards/HelperPrefab");
            GameObject gameObject = DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(spawnCard, new DirectorPlacementRule
            {
                placementMode = DirectorPlacementRule.PlacementMode.Approximate,
                position      = target.transform.position,
                minDistance   = minDistance,
                maxDistance   = maxDistance
            }, rng));

            if (gameObject)
            {
                TeleportHelper.TeleportBody(characterBody, gameObject.transform.position);
                GameObject teleportEffectPrefab = teleportEffect;
                if (teleportEffectPrefab)
                {
                    EffectManager.SimpleEffect(teleportEffectPrefab, gameObject.transform.position, Quaternion.identity, true);
                }
                UnityEngine.Object.Destroy(gameObject);
                UnityEngine.Object.Destroy(spawnCard);
                return(true);
            }
            else
            {
                UnityEngine.Object.Destroy(spawnCard);
                return(false);
            }
        }
Пример #13
0
        public void Awake()
        {
            for (int i = 0; i < 32; i++)
            {
                Physics.IgnoreLayerCollision(22, i, collisionMap[31 - i] == '0' ? true : false);
            }
            On.RoR2.PickupDropletController.Start += (orig, self) =>
            {
                orig(self);
                self.gameObject.layer = 22;
            };
            On.RoR2.MapZone.TryZoneStart += (orig, self, collider) => {
                if (self.zoneType == MapZone.ZoneType.OutOfBounds)
                {
                    if (collider.GetComponent <PickupDropletController>() || collider.GetComponent <GenericPickupController>())
                    {
                        SpawnCard spawnCard = ScriptableObject.CreateInstance <SpawnCard>();
                        spawnCard.hullSize      = HullClassification.Human;
                        spawnCard.nodeGraphType = RoR2.Navigation.MapNodeGroup.GraphType.Ground;
                        spawnCard.prefab        = Resources.Load <GameObject>("SpawnCards/HelperPrefab");
                        GameObject gameObject = DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(spawnCard, new DirectorPlacementRule
                        {
                            placementMode = DirectorPlacementRule.PlacementMode.NearestNode,
                            position      = collider.transform.position
                        }, RoR2Application.rng));
                        if (gameObject)
                        {
                            Debug.Log("TP Item Back");
                            TeleportHelper.TeleportGameObject(collider.gameObject, gameObject.transform.position);
                            UnityEngine.Object.Destroy(gameObject);
                        }
                        UnityEngine.Object.Destroy(spawnCard);
                    }
                }

                orig(self, collider);
            };

            On.RoR2.EquipmentSlot.ExecuteIfReady += (orig, self) =>
            {
                if ((self.inventory != null) ? self.inventory.GetItemCount(ItemIndex.AutoCastEquipment) > 0 : false)
                {
                    if (SceneInfo.instance.sceneDef.nameToken == "MAP_BAZAAR_TITLE")
                    {
                        return(false);
                    }
                }
                return(orig(self));
            };

            On.RoR2.Inventory.UpdateEquipment += (orig, self) =>
            {
                if (self.GetItemCount(ItemIndex.AutoCastEquipment) > 0)
                {
                    if (SceneInfo.instance.sceneDef.nameToken == "MAP_BAZAAR_TITLE")
                    {
                        for (int i = 0; i < self.equipmentStateSlots.Length; i++)
                        {
                            self.equipmentStateSlots[0].chargeFinishTime.t += Time.deltaTime;
                        }
                        return;
                    }
                }
                orig(self);
            };
        }
Пример #14
0
        private bool TeleportAlliesToFirstAvailablePlayer(Vector3?forcePosition = null)
        {
            if (allies.Count == 0)
            {
                return(true);
            }

            CharacterBody body = null;

            foreach (var masterController in PlayerCharacterMasterController.instances)
            {
                if (masterController.master.GetBody())
                {
                    body = masterController.master.GetBody();
                    break;
                }
            }

            if (!body)
            {
                return(false);
            }

            bool teleportedAtLeastOneAlly = false;

            foreach (var ally in allies)
            {
                CharacterBody allyBody = ally.GetBody();
                if (!allyBody)
                {
                    continue;
                }
                Vector3?position = forcePosition;
                if (!forcePosition.HasValue)
                {
                    position = FindSafeTeleportDestination(body.footPosition, allyBody, RoR2Application.rng);
                }
                if (position.HasValue)
                {
                    TeleportHelper.TeleportBody(allyBody, position.Value);

                    allyBody.AddTimedBuff(RoR2Content.Buffs.Immune, 3f);
                    foreach (EntityStateMachine entityStateMachine in allyBody.GetComponents <EntityStateMachine>())
                    {
                        entityStateMachine.initialStateType = entityStateMachine.mainStateType;
                    }

                    GameObject respawnEffect = Resources.Load <GameObject>("Prefabs/Effects/HippoRezEffect");
                    if (respawnEffect)
                    {
                        Transform bodyTransform = getTransform(allyBody);
                        EffectManager.SpawnEffect(respawnEffect, new EffectData
                        {
                            origin   = position.Value,
                            rotation = bodyTransform.rotation,
                            scale    = allyBody.bestFitRadius * 2f
                        }, true);
                    }
                    if (ally.GetBodyObject())
                    {
                        Util.PlaySound("Play_item_proc_extraLife", ally.GetBodyObject());
                    }

                    teleportedAtLeastOneAlly = true;
                }
            }

            return(teleportedAtLeastOneAlly);
        }
Пример #15
0
        public void Awake()
        {
            //TeleporterInteraction - onTeleporterBeginChargingGlobal
            //This looks like the function to hook into to move all active turrets to teleporter
            //try gameobject/self from this class to get position of teleporter
            On.RoR2.TeleporterInteraction.OnInteractionBegin += (orig, self, activator) =>
            {
                //if (!self.isIdleToCharging)

                //Chat.AddMessage("Mod says teleporter has been activated");
                //if(self.mainStateMachine)
                //  Chat.AddMessage(self.mainStateMachine.state.ToString());
                //if(self.mainStateMachine.state != EntityStates.LunarTeleporter.Idle)
                if (!self.isIdle)
                {
                    //Chat.AddMessage("teleporter not idle");
                    orig(self, activator);
                    return;
                }

                var masters = CharacterMaster.readOnlyInstancesList;
                List <CharacterMaster> masterList = masters.Cast <CharacterMaster>().ToList();
                List <CharacterMaster> TurretList = new List <CharacterMaster>();

                foreach (CharacterMaster cm in masterList)
                {
                    //Chat.AddMessage(cm.name);
                    foreach (var turretName in TeleportableTurrets)
                    {
                        if (cm.name.StartsWith(turretName))
                        {
                            //Chat.AddMessage("Teleportable Turret is here");
                            TurretList.Add(cm);
                            //Chat.AddMessage(self.name);
                        }
                    }
                }

                int i     = 0;
                int count = TurretList.Count;
                //teleport turrets
                foreach (var turret in TurretList)
                {
                    // 7.5 is the magic number to have all turrets on the teleporter platform
                    // needs to be slightly larger for the primordial telepot
                    float   Radius    = 7f;
                    float   radianInc = Mathf.Deg2Rad * 360f / count;
                    Vector3 point1    = new Vector3(Mathf.Cos(radianInc * i) * Radius, 0.5f, Mathf.Sin(radianInc * i) * Radius);

                    //float x = self.transform.position.x + Mathf.Sin(3.14f * i / count) * Radius;
                    //float y = self.transform.position.y + 0.9f;//keep the turrets from sinking into the teleporter
                    //float z = self.transform.position.z + Mathf.Cos(3.14f * i / count) * Radius;
                    //Vector3 position = new Vector3(x, y, z);

                    i++;

                    //Chat.AddMessage("teleporting turret " + i + " at position " + point1);
                    TeleportHelper.TeleportBody(turret.GetBody(), self.transform.position + point1);
                }

                orig(self, activator);
            };
        }