Пример #1
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;
     }
 }
Пример #2
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);
            }
        }
Пример #3
0
        // Token: 0x0600124C RID: 4684 RVA: 0x00059CBC File Offset: 0x00057EBC
        public CharacterBody GetCurrentBody()
        {
            CharacterMaster master = this.master;

            if (master)
            {
                return(master.GetBody());
            }
            return(null);
        }
Пример #4
0
        // Token: 0x06000522 RID: 1314 RVA: 0x00014908 File Offset: 0x00012B08
        public DamageReport(DamageInfo damageInfo, HealthComponent victim, float damageDealt)
        {
            this.damageInfo = damageInfo;
            this.victim     = victim;
            this.victimBody = (victim ? victim.body : null);
            CharacterBody characterBody = this.victimBody;

            this.victimBodyIndex = ((characterBody != null) ? characterBody.bodyIndex : -1);
            CharacterBody characterBody2 = this.victimBody;

            this.victimTeamIndex = ((characterBody2 != null) ? characterBody2.teamComponent.teamIndex : TeamIndex.None);
            CharacterBody characterBody3 = this.victimBody;

            this.victimMaster = ((characterBody3 != null) ? characterBody3.master : null);
            CharacterBody characterBody4 = this.victimBody;

            this.victimIsElite = (characterBody4 != null && characterBody4.isElite);
            CharacterBody characterBody5 = this.victimBody;

            this.victimIsBoss = (characterBody5 != null && characterBody5.isBoss);
            this.attacker     = damageInfo.attacker;
            this.attackerBody = (this.attacker ? this.attacker.GetComponent <CharacterBody>() : null);
            CharacterBody characterBody6 = this.attackerBody;

            this.attackerBodyIndex = ((characterBody6 != null) ? characterBody6.bodyIndex : -1);
            CharacterBody characterBody7 = this.attackerBody;

            this.attackerTeamIndex = ((characterBody7 != null) ? characterBody7.teamComponent.teamIndex : TeamIndex.None);
            CharacterBody characterBody8 = this.attackerBody;

            this.attackerMaster = ((characterBody8 != null) ? characterBody8.master : null);
            CharacterMaster characterMaster = this.attackerMaster;

            this.attackerOwnerMaster = ((characterMaster != null) ? characterMaster.minionOwnership.ownerMaster : null);
            CharacterMaster characterMaster2 = this.attackerOwnerMaster;
            int?            num;

            if (characterMaster2 == null)
            {
                num = null;
            }
            else
            {
                CharacterBody body = characterMaster2.GetBody();
                num = ((body != null) ? new int?(body.bodyIndex) : null);
            }
            this.attackerOwnerBodyIndex = (num ?? -1);
            this.dotType     = damageInfo.dotIndex;
            this.damageDealt = damageDealt;
        }
Пример #5
0
        private System.Collections.IEnumerator GlobalEventManager_CreateLevelUpEffect(On.RoR2.GlobalEventManager.orig_CreateLevelUpEffect orig, RoR2.GlobalEventManager self, float delay, GameObject levelUpEffect, RoR2.EffectData effectData)
        {
            yield return(new WaitForSeconds(delay));

            orig.Invoke(self, delay, levelUpEffect, effectData);

            foreach (RoR2.PlayerCharacterMasterController playerCharacterMasterController in RoR2.PlayerCharacterMasterController.instances)
            {
                bool isClient = playerCharacterMasterController.master.isClient;
                if (isClient)
                {
                    string        displayName = playerCharacterMasterController.GetDisplayName();
                    System.Random rnd         = new System.Random();

                    RoR2.CharacterMaster localUser  = playerCharacterMasterController.master;
                    RoR2.CharacterBody   playerBody = localUser.GetBody();
                    int playerLevel = (int)playerBody.level;

                    if (currentLevel < playerLevel)
                    {
                        ItemTier itemTier1           = ItemTier.Tier1;
                        int      amountOfItemsInTier = this.getAmountOfItemsInTier(itemTier1, playerCharacterMasterController.master);
                        this.removeAllItemsInTier(itemTier1, playerCharacterMasterController.master);
                        this.addItems(itemTier1, amountOfItemsInTier, playerCharacterMasterController.master, rnd, tier1Min.Value, tier1Max.Value);

                        ItemTier itemTier2 = ItemTier.Tier2;
                        amountOfItemsInTier = this.getAmountOfItemsInTier(itemTier2, playerCharacterMasterController.master);
                        this.removeAllItemsInTier(itemTier2, playerCharacterMasterController.master);
                        this.addItems(itemTier2, amountOfItemsInTier, playerCharacterMasterController.master, rnd, tier2Min.Value, tier2Max.Value);

                        ItemTier itemTier3 = ItemTier.Tier3;
                        amountOfItemsInTier = this.getAmountOfItemsInTier(itemTier3, playerCharacterMasterController.master);
                        this.removeAllItemsInTier(itemTier3, playerCharacterMasterController.master);
                        this.addItems(itemTier3, amountOfItemsInTier, playerCharacterMasterController.master, rnd, tier3Min.Value, tier3Max.Value);

                        ItemTier itemTierLunar = ItemTier.Lunar;
                        amountOfItemsInTier = this.getAmountOfItemsInTier(itemTierLunar, playerCharacterMasterController.master);
                        this.removeAllItemsInTier(itemTierLunar, playerCharacterMasterController.master);
                        this.addItems(itemTierLunar, amountOfItemsInTier, playerCharacterMasterController.master, rnd, tierLunarMin.Value, tierLunarMax.Value);
                        currentLevel = playerLevel;
                    }
                }
            }

            yield break;
        }
        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);
            }
        }
Пример #7
0
        public void ShowItemPicker(List <RoR2.PickupIndex> availablePickups, RoR2.CharacterMaster master)
        {
            showUI = true;

            var itemInventoryDisplay = GameObject.Find("ItemInventoryDisplay");

            float uiWidth = 220f;

            Logger.Log(LogLevel.Info, "Run started");
            var g = new GameObject();

            g.name  = "LevelUpProgressionUI";
            g.layer = 5;                                 // UI
            g.AddComponent <Canvas>().renderMode   = RenderMode.ScreenSpaceOverlay;
            g.GetComponent <Canvas>().sortingOrder = -1; // Required or the UI will render over pause and tooltips.
            // g.AddComponent<CanvaschanceScaling>().scaleFactor = 10.0f;
            // g.GetComponent<CanvaschanceScaling>().dynamicPixelsPerUnit = 10f;
            g.AddComponent <GraphicRaycaster>();
            g.AddComponent <MPEventSystemProvider>().fallBackToMainEventSystem = true;
            g.AddComponent <MPEventSystemLocator>();
            //g.AddComponent<CursorOpener>();

            var ctr = new GameObject();

            ctr.name = "Container";
            ctr.transform.SetParent(g.transform, false);
            ctr.AddComponent <RectTransform>();
            ctr.GetComponent <RectTransform>().anchorMin = new Vector2(0f, 0f);
            ctr.GetComponent <RectTransform>().anchorMax = new Vector2(1f, 1f);
            ctr.GetComponent <RectTransform>().pivot     = new Vector2(0.5f, 0f);
            ctr.GetComponent <RectTransform>().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, uiWidth);

            var bg2 = new GameObject();

            bg2.name = "Background";
            bg2.transform.SetParent(ctr.transform, false);
            bg2.AddComponent <TranslucentImage>().color         = new Color(0f, 0f, 0f, 1f);
            bg2.GetComponent <TranslucentImage>().raycastTarget = true;
            bg2.GetComponent <TranslucentImage>().material      = Resources.Load <GameObject>("Prefabs/UI/Tooltip").GetComponentInChildren <TranslucentImage>(true).material;
            bg2.GetComponent <RectTransform>().anchorMin        = new Vector2(0f, 0f);
            bg2.GetComponent <RectTransform>().anchorMax        = new Vector2(1f, 1f);
            bg2.GetComponent <RectTransform>().sizeDelta        = new Vector2(0, 0);

            var bg = new GameObject();

            bg.name = "Background";
            bg.transform.SetParent(ctr.transform, false);
            bg.AddComponent <Image>().sprite            = itemInventoryDisplay.GetComponent <Image>().sprite;
            bg.GetComponent <Image>().type              = Image.Type.Sliced;
            bg.GetComponent <RectTransform>().anchorMin = new Vector2(0f, 0f);
            bg.GetComponent <RectTransform>().anchorMax = new Vector2(1f, 1f);
            bg.GetComponent <RectTransform>().sizeDelta = new Vector2(0, 0);

            var header = new GameObject();

            header.name = "Header";
            header.transform.SetParent(ctr.transform, false);
            header.transform.localPosition = new Vector2(0, 0);
            header.AddComponent <HGTextMeshProUGUI>().fontSize = 15;

            if (startMessage)
            {
                header.GetComponent <HGTextMeshProUGUI>().text = "GOOD LUCK\n" + "Choose a starting perk.";
                startMessage = false;
            }
            else
            {
                header.GetComponent <HGTextMeshProUGUI>().text = "LEVEL UP\n" + "Choose a perk for level " + (levelsSpent + 1) + ".";
            }

            header.GetComponent <HGTextMeshProUGUI>().color     = Color.white;
            header.GetComponent <HGTextMeshProUGUI>().alignment = TextAlignmentOptions.Center;
            header.GetComponent <RectTransform>().anchorMin     = new Vector2(0f, 1f);
            header.GetComponent <RectTransform>().anchorMax     = new Vector2(1f, 1f);
            header.GetComponent <RectTransform>().pivot         = new Vector2(0.5f, 1f);
            header.GetComponent <RectTransform>().sizeDelta     = new Vector2(0, 40);

            var itemCtr = new GameObject();

            itemCtr.name = "Item Container";
            itemCtr.transform.SetParent(ctr.transform, false);
            itemCtr.transform.localPosition = new Vector2(0, -40f);
            itemCtr.AddComponent <GridLayoutGroup>().childAlignment = TextAnchor.UpperCenter;
            itemCtr.GetComponent <GridLayoutGroup>().cellSize       = new Vector2(50f, 50f);
            itemCtr.GetComponent <GridLayoutGroup>().spacing        = new Vector2(4f, 4f);
            itemCtr.GetComponent <RectTransform>().anchorMin        = new Vector2(0f, 1f);
            itemCtr.GetComponent <RectTransform>().anchorMax        = new Vector2(1f, 1f);
            itemCtr.GetComponent <RectTransform>().pivot            = new Vector2(0.5f, 1f);
            itemCtr.GetComponent <RectTransform>().sizeDelta        = new Vector2(0f, 0);
            itemCtr.AddComponent <ContentSizeFitter>().verticalFit  = ContentSizeFitter.FitMode.PreferredSize;

            var itemIconPrefab = itemInventoryDisplay.GetComponent <ItemInventoryDisplay>().itemIconPrefab;

            foreach (RoR2.PickupIndex index in availablePickups)
            {
                var item = Instantiate <GameObject>(itemIconPrefab, itemCtr.transform).GetComponent <ItemIcon>();

                if (index.equipmentIndex == EquipmentIndex.None)
                {
                    item.SetItemIndex(index.itemIndex, 1);
                    var temp = index.value;

                    item.gameObject.AddComponent <Button>().onClick.AddListener(() =>
                    {
                        //RoR2.Util.PlaySound("Item", currentPlayer.gameObject);
                        //RoR2.Chat.AddMessage(currentPlayer.GetBody().GetUserName() + " chose " + index + ".");
                        Logger.LogInfo("Item picked: " + index);
                        UnityEngine.Object.Destroy(g);
                        master.inventory.GiveItem(index.itemIndex);
                        showUI       = false;
                        button1      = null;
                        button2      = null;
                        button3      = null;
                        levelsSpent += 1;
                        if (levelsSpent >= 0 && levelsSpent < levelsTotal)
                        {
                            ShowItemPicker(GetAvailablePickups(), master);
                        }
                    });
                }

                if (index.itemIndex == ItemIndex.None)
                {
                    var def = RoR2.EquipmentCatalog.GetEquipmentDef(index.equipmentIndex);
                    item.GetComponent <RawImage>().texture = def.pickupIconTexture;
                    item.stackText.enabled          = false;
                    item.tooltipProvider.titleToken = def.nameToken;
                    item.tooltipProvider.titleColor = RoR2.ColorCatalog.GetColor(def.colorIndex);
                    item.tooltipProvider.bodyToken  = def.pickupToken;
                    item.tooltipProvider.bodyColor  = Color.gray;
                    var temp = index.value;
                    item.gameObject.AddComponent <Button>().onClick.AddListener(() =>
                    {
                        if (master.inventory.GetEquipmentIndex() != null)
                        {
                            RoR2.PickupDropletController.CreatePickupDroplet(RoR2.PickupCatalog.FindPickupIndex(master.inventory.currentEquipmentIndex), master.GetBody().transform.position, new Vector3(0, 0, 1));
                        }

                        Logger.LogInfo("Equipment picked: " + index);
                        //RoR2.Chat.AddMessage(currentPlayer.GetBody().GetUserName() + " chose " + def.nameToken + ".");
                        UnityEngine.Object.Destroy(g);
                        master.inventory.GiveEquipmentString(def.name);
                        showUI       = false;
                        button1      = null;
                        button2      = null;
                        button3      = null;
                        levelsSpent += 1;
                        if (levelsSpent >= 0 && levelsSpent < levelsTotal)
                        {
                            ShowItemPicker(GetAvailablePickups(), master);
                        }
                    });
                }

                if (index == availablePickups[0])
                {
                    button1 = item.gameObject.GetComponent <Button>();
                }
                else if (index == availablePickups[1])
                {
                    button2 = item.gameObject.GetComponent <Button>();
                }
                else if (index == availablePickups[2])
                {
                    button3 = item.gameObject.GetComponent <Button>();
                }
            }

            LayoutRebuilder.ForceRebuildLayoutImmediate(itemCtr.GetComponent <RectTransform>());
            ctr.GetComponent <RectTransform>().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, itemCtr.GetComponent <RectTransform>().sizeDelta.y + 45f);

            //////////////////////////////////////////////////////////////////////////////////////////////
            ///Teleport out code
            //////////////////////////////////////////////////////////////////////////////////////////////


            /* Also activates on teleport in...
             * On.RoR2.TeleportOutController.AddTPOutEffect += delegate (On.RoR2.TeleportOutController.orig_AddTPOutEffect orig, RoR2.CharacterModel characterModel, float beginAlpha, float endAlpha, float duration)
             * {
             *
             *  orig.Invoke(characterModel, beginAlpha, endAlpha, duration);
             *
             *  StartCoroutine(DestroyUICoroutine(2, g));
             *
             *  }
             * };
             */
        }
Пример #8
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);
            }
        }