// Token: 0x060012AA RID: 4778 RVA: 0x00050500 File Offset: 0x0004E700
        public void SetState(SceneExitController.ExitState newState)
        {
            if (newState == this.exitState)
            {
                return;
            }
            this.exitState = newState;
            switch (this.exitState)
            {
            case SceneExitController.ExitState.Idle:
                break;

            case SceneExitController.ExitState.ExtractExp:
                SceneExitController.isRunning = true;
                this.experienceCollector      = base.gameObject.AddComponent <ConvertPlayerMoneyToExperience>();
                return;

            case SceneExitController.ExitState.TeleportOut:
            {
                ReadOnlyCollection <CharacterMaster> readOnlyInstancesList = CharacterMaster.readOnlyInstancesList;
                for (int i = 0; i < readOnlyInstancesList.Count; i++)
                {
                    CharacterMaster component = readOnlyInstancesList[i].GetComponent <CharacterMaster>();
                    if (component.GetComponent <SetDontDestroyOnLoad>())
                    {
                        GameObject bodyObject = component.GetBodyObject();
                        if (bodyObject)
                        {
                            GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(Resources.Load <GameObject>("Prefabs/NetworkedObjects/TeleportOutController"), bodyObject.transform.position, Quaternion.identity);
                            gameObject.GetComponent <TeleportOutController>().Networktarget = bodyObject;
                            NetworkServer.Spawn(gameObject);
                        }
                    }
                }
                this.teleportOutTimer = 4f;
                return;
            }

            case SceneExitController.ExitState.Finished:
                if (Run.instance && Run.instance.isGameOverServer)
                {
                    return;
                }
                if (this.useRunNextStageScene)
                {
                    Stage.instance.BeginAdvanceStage(Run.instance.nextStageScene);
                    return;
                }
                if (this.destinationScene)
                {
                    Stage.instance.BeginAdvanceStage(this.destinationScene);
                    return;
                }
                Debug.Log("SceneExitController: destinationScene not set!");
                break;

            default:
                return;
            }
        }
Пример #2
0
 // Token: 0x06001C47 RID: 7239 RVA: 0x00084580 File Offset: 0x00082780
 public static string GetBestBodyNameColored(GameObject bodyObject)
 {
     if (bodyObject)
     {
         CharacterBody component = bodyObject.GetComponent <CharacterBody>();
         if (component)
         {
             CharacterMaster master = component.master;
             if (master)
             {
                 PlayerCharacterMasterController component2 = master.GetComponent <PlayerCharacterMasterController>();
                 if (component2)
                 {
                     GameObject networkUserObject = component2.networkUserObject;
                     if (networkUserObject)
                     {
                         NetworkUser component3 = networkUserObject.GetComponent <NetworkUser>();
                         if (component3)
                         {
                             return(Util.GenerateColoredString(component3.userName, component3.userColor));
                         }
                     }
                 }
             }
         }
         IDisplayNameProvider component4 = bodyObject.GetComponent <IDisplayNameProvider>();
         if (component4 != null)
         {
             return(component4.GetDisplayName());
         }
     }
     return("???");
 }
Пример #3
0
 // try and setup our character, if we hit an error we set it to false
 //TODO: Find a way to stop it from checking whilst in main menu/lobby menu
 private static void GetCharacter()
 {
     try
     {
         LocalNetworkUser = null;
         foreach (NetworkUser readOnlyInstance in NetworkUser.readOnlyInstancesList)
         {
             //localplayer == you!
             if (readOnlyInstance.isLocalPlayer)
             {
                 LocalNetworkUser = readOnlyInstance;
                 LocalPlayer      = LocalNetworkUser.master;
                 LocalPlayerInv   = LocalPlayer.GetComponent <Inventory>();
                 LocalHealth      = LocalPlayer.GetBody().GetComponent <HealthComponent>();
                 LocalSkills      = LocalPlayer.GetBody().GetComponent <SkillLocator>();
                 if (LocalHealth.alive)
                 {
                     _CharacterCollected = true;
                 }
                 else
                 {
                     _CharacterCollected = false;
                 }
             }
         }
     }
     catch (Exception e)
     {
         _CharacterCollected = false;
     }
 }
Пример #4
0
        private void CharacterMaster_TransformBody(On.RoR2.CharacterMaster.orig_TransformBody orig, RoR2.CharacterMaster self, string bodyName)
        {
            var baseAI = self.GetComponent <BaseAI>();

            if (baseAI)
            {
                //Chat.AddMessage($"baseAI found");
                var masterPrefab = MasterCatalog.FindMasterPrefab(bodyName);
                if (masterPrefab)
                {
                    //Chat.AddMessage($"1");
                    ReplaceSkillDrivers(self, baseAI, masterPrefab);
                }
                if (!masterPrefab)
                {
                    var bodyPrefab = BodyCatalog.FindBodyPrefab(bodyName);
                    if (bodyPrefab)
                    {
                        var masterIndex = MasterCatalog.FindAiMasterIndexForBody(bodyPrefab.GetComponent <CharacterBody>().bodyIndex);
                        masterPrefab = MasterCatalog.GetMasterPrefab(masterIndex);
                        if (masterPrefab)
                        {
                            //Chat.AddMessage($"2");
                            ReplaceSkillDrivers(self, baseAI, masterPrefab);
                        }
                    }
                }
            }
            orig(self, bodyName);
        }
Пример #5
0
        public void RespawnCharacter(CharacterMaster characterMaster)
        {
            if (!NetworkServer.active)
            {
                Debug.LogWarning("[Server] function 'System.Void RoR2.Stage::RespawnCharacter(RoR2.CharacterMaster)' called on client");
                return;
            }
            if (!characterMaster)
            {
                return;
            }
            Transform  playerSpawnTransform = this.GetPlayerSpawnTransform();
            Vector3    vector     = Vector3.zero;
            Quaternion quaternion = Quaternion.identity;

            if (playerSpawnTransform)
            {
                vector     = playerSpawnTransform.position;
                quaternion = playerSpawnTransform.rotation;
            }
            characterMaster.Respawn(vector, quaternion);
            if (characterMaster.GetComponent <PlayerCharacterMasterController>())
            {
                this.spawnedAnyPlayer = true;
            }
            if (this.usePod)
            {
                Run.instance.HandlePlayerFirstEntryAnimation(characterMaster.GetBody(), vector, quaternion);
            }
        }
Пример #6
0
 private void CharacterMaster_TransformBody(On.RoR2.CharacterMaster.orig_TransformBody orig, RoR2.CharacterMaster self, string bodyName)
 {
     if (bodyName == "HereticBody" && self.GetComponent <BaseAI>())
     {
         CopyFromHeretic(self);
     }
     orig(self, bodyName);
 }
Пример #7
0
        private static void AddMinionOwnershipComponent(AssetCheckArgs args)
        {
            CharacterMaster characterMaster = args.asset as CharacterMaster;

            if (!characterMaster.GetComponent <MinionOwnership>())
            {
                characterMaster.gameObject.AddComponent <MinionOwnership>();
                args.UpdatePrefab();
            }
        }
Пример #8
0
        // Token: 0x06001C20 RID: 7200 RVA: 0x00083300 File Offset: 0x00081500
        public static CharacterBody TryToCreateGhost(CharacterBody targetBody, CharacterBody ownerBody, int duration)
        {
            if (!targetBody || !NetworkServer.active)
            {
                return(null);
            }
            if (TeamComponent.GetTeamMembers(ownerBody.teamComponent.teamIndex).Count >= 40)
            {
                return(null);
            }
            int num = BodyCatalog.FindBodyIndex(targetBody.gameObject);

            if (num < 0)
            {
                return(null);
            }
            GameObject bodyPrefab = BodyCatalog.GetBodyPrefab(num);

            if (!bodyPrefab)
            {
                return(null);
            }
            CharacterMaster characterMaster = MasterCatalog.allAiMasters.FirstOrDefault((CharacterMaster master) => master.bodyPrefab == bodyPrefab);

            if (!characterMaster)
            {
                return(null);
            }
            GameObject      gameObject = UnityEngine.Object.Instantiate <GameObject>(characterMaster.gameObject);
            CharacterMaster component  = gameObject.GetComponent <CharacterMaster>();

            component.teamIndex = ownerBody.teamComponent.teamIndex;
            component.GetComponent <BaseAI>().leader.gameObject = ownerBody.gameObject;
            Inventory inventory = targetBody.inventory;

            if (inventory)
            {
                component.inventory.CopyItemsFrom(inventory);
                component.inventory.CopyEquipmentFrom(inventory);
            }
            component.inventory.GiveItem(ItemIndex.Ghost, 1);
            component.inventory.GiveItem(ItemIndex.HealthDecay, duration);
            component.inventory.GiveItem(ItemIndex.BoostDamage, 30);
            NetworkServer.Spawn(gameObject);
            CharacterBody characterBody = component.Respawn(targetBody.footPosition, targetBody.transform.rotation);

            if (characterBody)
            {
                foreach (EntityStateMachine entityStateMachine in characterBody.GetComponents <EntityStateMachine>())
                {
                    entityStateMachine.initialStateType = entityStateMachine.mainStateType;
                }
            }
            return(characterBody);
        }
Пример #9
0
 // Token: 0x06001517 RID: 5399 RVA: 0x0005A198 File Offset: 0x00058398
 public virtual void SetFromMaster(CharacterMaster master)
 {
     if (master)
     {
         PlayerCharacterMasterController component = master.GetComponent <PlayerCharacterMasterController>();
         if (component)
         {
             NetworkUser networkUser = component.networkUser;
             this.SetFromSteamId(networkUser.id.value);
             return;
         }
     }
     this.userSteamId = 0UL;
     this.sourceType  = SocialUserIcon.SourceType.None;
     this.Refresh();
 }
Пример #10
0
 // Token: 0x060015D5 RID: 5589 RVA: 0x0006897C File Offset: 0x00066B7C
 private void Start()
 {
     this.sceneDef = SceneCatalog.GetSceneDefForCurrentScene();
     if (NetworkServer.active)
     {
         this.NetworkstartRunTime = Run.instance.fixedTime;
         this.stageSpawnPosition  = this.SampleNodeGraphForSpawnPosition();
         ReadOnlyCollection <CharacterMaster> readOnlyInstancesList = CharacterMaster.readOnlyInstancesList;
         Transform playerSpawnTransform = this.GetPlayerSpawnTransform();
         for (int i = 0; i < readOnlyInstancesList.Count; i++)
         {
             CharacterMaster characterMaster = readOnlyInstancesList[i];
             if (characterMaster && !characterMaster.GetComponent <PlayerCharacterMasterController>() && !characterMaster.GetBodyObject() && characterMaster.gameObject.scene.buildIndex == -1)
             {
                 Vector3    vector   = Vector3.zero;
                 Quaternion rotation = Quaternion.identity;
                 if (playerSpawnTransform)
                 {
                     vector   = playerSpawnTransform.position;
                     rotation = playerSpawnTransform.rotation;
                     BaseAI        component  = readOnlyInstancesList[i].GetComponent <BaseAI>();
                     CharacterBody component2 = readOnlyInstancesList[i].bodyPrefab.GetComponent <CharacterBody>();
                     if (component && component2)
                     {
                         NodeGraph nodeGraph = component.GetNodeGraph();
                         if (nodeGraph)
                         {
                             List <NodeGraph.NodeIndex> list = nodeGraph.FindNodesInRange(vector, 10f, 100f, (HullMask)(1 << (int)component2.hullClassification));
                             if ((float)list.Count > 0f)
                             {
                                 nodeGraph.GetNodePosition(list[UnityEngine.Random.Range(0, list.Count)], out vector);
                             }
                         }
                     }
                 }
                 readOnlyInstancesList[i].Respawn(vector, rotation);
             }
         }
         this.BeginServer();
     }
     if (NetworkClient.active)
     {
         this.RespawnLocalPlayers();
     }
 }
        public void ModifySpawnedMasters(GameObject targetGameObject)
        {
            if (!NetworkServer.active)
            {
                Debug.LogWarning("[Server] function 'System.Void RoR2.ArenaMissionController::ModifySpawnedMasters(UnityEngine.GameObject)' called on client");
                return;
            }
            ArenaMissionController.< > c__DisplayClass62_0 CS$ < > 8__locals1 = new ArenaMissionController.< > c__DisplayClass62_0();
            CharacterMaster component = targetGameObject.GetComponent <CharacterMaster>();

            CS$ < > 8__locals1.ai = component.GetComponent <BaseAI>();
            if (CS$ < > 8__locals1.ai)
            {
                CS$ < > 8__locals1.ai.onBodyDiscovered += CS$ < > 8__locals1.< ModifySpawnedMasters > g__OnBodyDiscovered | 0;
            }
            CharacterBody body = component.GetBody();

            if (body)
            {
                foreach (EntityStateMachine entityStateMachine in body.GetComponents <EntityStateMachine>())
                {
                    entityStateMachine.initialStateType = entityStateMachine.mainStateType;
                }
            }
            for (int j = 0; j < this.syncActivePickups.Count; j++)
            {
                int       count     = 0;
                ItemIndex itemIndex = PickupCatalog.GetPickupDef(new PickupIndex(this.syncActivePickups[j])).itemIndex;
                switch (ItemCatalog.GetItemDef(itemIndex).tier)
                {
                case ItemTier.Tier1:
                    count = this.stackCountPerTier1;
                    break;

                case ItemTier.Tier2:
                    count = this.stackCountPerTier2;
                    break;

                case ItemTier.Tier3:
                    count = this.stackCountPerTier3;
                    break;
                }
                component.inventory.GiveItem(itemIndex, count);
            }
        }
 private static void Init()
 {
     GlobalEventManager.onCharacterDeathGlobal += delegate(DamageReport damageReport)
     {
         CharacterMaster characterMaster = damageReport.attackerMaster;
         if (characterMaster)
         {
             if (characterMaster.minionOwnership.ownerMaster)
             {
                 characterMaster = characterMaster.minionOwnership.ownerMaster;
             }
             PlayerCharacterMasterController component = characterMaster.GetComponent <PlayerCharacterMasterController>();
             if (component && Util.CheckRoll(1f * component.lunarCoinChanceMultiplier, 0f, null))
             {
                 PickupDropletController.CreatePickupDroplet(PickupIndex.Find("LunarCoin.Coin0"), damageReport.victim.transform.position, Vector3.up * 10f);
                 component.lunarCoinChanceMultiplier *= 0.5f;
             }
         }
     };
 }
Пример #13
0
 // Token: 0x06001C48 RID: 7240 RVA: 0x00084610 File Offset: 0x00082810
 public static string GetBestMasterName(CharacterMaster characterMaster)
 {
     if (characterMaster)
     {
         PlayerCharacterMasterController component = characterMaster.GetComponent <PlayerCharacterMasterController>();
         if (component)
         {
             GameObject networkUserObject = component.networkUserObject;
             if (networkUserObject)
             {
                 NetworkUser component2 = networkUserObject.GetComponent <NetworkUser>();
                 if (component2)
                 {
                     return(component2.userName);
                 }
             }
         }
         return(characterMaster.name);
     }
     return("Null Master");
 }
Пример #14
0
        // Token: 0x060013CA RID: 5066 RVA: 0x00054964 File Offset: 0x00052B64
        private void RespawnAllNPCs()
        {
            if (this.sceneDef.suppressNpcEntry)
            {
                return;
            }
            ReadOnlyCollection <CharacterMaster> readOnlyInstancesList = CharacterMaster.readOnlyInstancesList;
            Transform playerSpawnTransform = this.GetPlayerSpawnTransform();

            for (int i = 0; i < readOnlyInstancesList.Count; i++)
            {
                CharacterMaster characterMaster = readOnlyInstancesList[i];
                if (characterMaster && !characterMaster.GetComponent <PlayerCharacterMasterController>() && !characterMaster.GetBodyObject() && characterMaster.gameObject.scene.buildIndex == -1)
                {
                    Vector3    vector   = Vector3.zero;
                    Quaternion rotation = Quaternion.identity;
                    if (playerSpawnTransform)
                    {
                        vector   = playerSpawnTransform.position;
                        rotation = playerSpawnTransform.rotation;
                        BaseAI        component  = readOnlyInstancesList[i].GetComponent <BaseAI>();
                        CharacterBody component2 = readOnlyInstancesList[i].bodyPrefab.GetComponent <CharacterBody>();
                        if (component && component2)
                        {
                            NodeGraph desiredSpawnNodeGraph = component.GetDesiredSpawnNodeGraph();
                            if (desiredSpawnNodeGraph)
                            {
                                List <NodeGraph.NodeIndex> list = desiredSpawnNodeGraph.FindNodesInRange(vector, 10f, 100f, (HullMask)(1 << (int)component2.hullClassification));
                                if ((float)list.Count > 0f)
                                {
                                    desiredSpawnNodeGraph.GetNodePosition(list[UnityEngine.Random.Range(0, list.Count)], out vector);
                                }
                            }
                        }
                    }
                    readOnlyInstancesList[i].Respawn(vector, rotation, false);
                }
            }
        }
Пример #15
0
        // Token: 0x06000F9C RID: 3996 RVA: 0x000446C4 File Offset: 0x000428C4
        private void OnTriggerEnter(Collider other)
        {
            if ((this.serverOnly && !NetworkServer.active) || this.calledAction)
            {
                return;
            }
            CharacterBody component = other.GetComponent <CharacterBody>();

            if (component)
            {
                CharacterMaster master = component.master;
                if (master && master.GetComponent <PlayerCharacterMasterController>())
                {
                    this.calledAction = true;
                    UnityEvent unityEvent = this.action;
                    if (unityEvent == null)
                    {
                        return;
                    }
                    unityEvent.Invoke();
                }
            }
        }
Пример #16
0
 // Token: 0x06001C4A RID: 7242 RVA: 0x0008467C File Offset: 0x0008287C
 public static NetworkUser LookUpBodyNetworkUser(CharacterBody characterBody)
 {
     if (characterBody)
     {
         CharacterMaster master = characterBody.master;
         if (master)
         {
             PlayerCharacterMasterController component = master.GetComponent <PlayerCharacterMasterController>();
             if (component)
             {
                 GameObject networkUserObject = component.networkUserObject;
                 if (networkUserObject)
                 {
                     NetworkUser component2 = networkUserObject.GetComponent <NetworkUser>();
                     if (component2)
                     {
                         return(component2);
                     }
                 }
             }
         }
     }
     return(null);
 }
Пример #17
0
        // Token: 0x0600162E RID: 5678 RVA: 0x0006A288 File Offset: 0x00068488
        private void SetupIndicator()
        {
            if (this.indicator)
            {
                return;
            }
            CharacterBody component = base.GetComponent <CharacterBody>();

            if (component)
            {
                TeamComponent component2 = component.GetComponent <TeamComponent>();
                if (component2)
                {
                    CharacterMaster master     = component.master;
                    bool            flag       = master && master.isBoss;
                    GameObject      gameObject = null;
                    if (master && component2.teamIndex == TeamIndex.Player)
                    {
                        bool flag2 = false;
                        PlayerCharacterMasterController component3 = master.GetComponent <PlayerCharacterMasterController>();
                        if (component3)
                        {
                            flag2 = true;
                            GameObject networkUserObject = component3.networkUserObject;
                            if (networkUserObject)
                            {
                                NetworkIdentity component4 = networkUserObject.GetComponent <NetworkIdentity>();
                                if (component4)
                                {
                                    bool isLocalPlayer = component4.isLocalPlayer;
                                }
                            }
                        }
                        Vector3 position = component.transform.position;
                        component.GetComponent <Collider>();
                        if (flag2)
                        {
                            gameObject = Resources.Load <GameObject>("Prefabs/PositionIndicators/PlayerPositionIndicator");
                        }
                        else
                        {
                            gameObject = Resources.Load <GameObject>("Prefabs/PositionIndicators/NPCPositionIndicator");
                        }
                        this.indicator = UnityEngine.Object.Instantiate <GameObject>(gameObject, position, Quaternion.identity, component.transform);
                    }
                    else if (flag)
                    {
                        gameObject = Resources.Load <GameObject>("Prefabs/PositionIndicators/BossPositionIndicator");
                    }
                    if (this.indicator)
                    {
                        UnityEngine.Object.Destroy(this.indicator);
                        this.indicator = null;
                    }
                    if (gameObject)
                    {
                        this.indicator = UnityEngine.Object.Instantiate <GameObject>(gameObject, base.transform);
                        this.indicator.GetComponent <PositionIndicator>().targetTransform = component.coreTransform;
                        Nameplate component5 = this.indicator.GetComponent <Nameplate>();
                        if (component5)
                        {
                            component5.SetBody(component);
                        }
                    }
                }
            }
        }
Пример #18
0
        private static void HandlePickupMessage(NetworkMessage netMsg)
        {
            Debug.Log("GenericPickupController.HandlePickupMessage: Received pickup message.");
            ReadOnlyCollection <NotificationQueue> readOnlyInstancesList = NotificationQueue.readOnlyInstancesList;

            GenericPickupController.PickupMessage pickupMessage = GenericPickupController.pickupMessageInstance;
            netMsg.ReadMessage <GenericPickupController.PickupMessage>(pickupMessage);
            GameObject  masterGameObject = pickupMessage.masterGameObject;
            PickupIndex pickupIndex      = pickupMessage.pickupIndex;
            uint        pickupQuantity   = pickupMessage.pickupQuantity;

            pickupMessage.Reset();
            if (!masterGameObject)
            {
                Debug.Log("GenericPickupController.HandlePickupMessage: failed! masterObject is not valid.");
                return;
            }
            CharacterMaster component = masterGameObject.GetComponent <CharacterMaster>();

            if (!component)
            {
                Debug.Log("GenericPickupController.HandlePickupMessage: failed! master component is not valid.");
                return;
            }
            PlayerCharacterMasterController component2 = component.GetComponent <PlayerCharacterMasterController>();

            if (component2)
            {
                NetworkUser networkUser = component2.networkUser;
                if (networkUser)
                {
                    LocalUser localUser = networkUser.localUser;
                    if (localUser != null)
                    {
                        localUser.userProfile.DiscoverPickup(pickupIndex);
                    }
                }
            }
            for (int i = 0; i < readOnlyInstancesList.Count; i++)
            {
                readOnlyInstancesList[i].OnPickup(component, pickupIndex);
            }
            CharacterBody body = component.GetBody();

            if (!body)
            {
                Debug.Log("GenericPickupController.HandlePickupMessage: failed! characterBody is not valid.");
            }
            ItemDef itemDef = ItemCatalog.GetItemDef(pickupIndex.itemIndex);

            if (itemDef != null && itemDef.hidden)
            {
                Debug.LogFormat("GenericPickupController.HandlePickupMessage: skipped item {0}, marked hidden.", new object[]
                {
                    itemDef.nameToken
                });
                return;
            }
            Chat.AddPickupMessage(body, pickupIndex.GetPickupNameToken(), pickupIndex.GetPickupColor(), pickupQuantity);
            if (body)
            {
                Util.PlaySound("Play_UI_item_pickup", body.gameObject);
            }
        }