コード例 #1
0
            public void Start()
            {
                RoR2.EntityLogic.DelayedEvent delayedEvent = GetComponent <RoR2.EntityLogic.DelayedEvent>();
                delayedEvent.action = new UnityEvent();
                delayedEvent.action.AddListener(() =>
                {
                    AddShrineStack(purchaseInteraction.lastActivator);
                });
                delayedEvent.timeStepType = RoR2.EntityLogic.DelayedEvent.TimeStepType.FixedTime;

                purchaseInteraction = GetComponent <PurchaseInteraction>();
                purchaseInteraction.onPurchase.AddListener((interactor) =>
                {
                    purchaseInteraction.SetAvailable(false);
                    delayedEvent.CallDelayed(1.5f);
                });

                availableItems = new List <ItemIndex>();
                if (NetworkServer.active)
                {
                    rng = new Xoroshiro128Plus(Run.instance.stageRng.nextUlong);
                    foreach (PickupIndex pickupIndex in Run.instance.availableTier3DropList)
                    {
                        availableItems.Add(PickupCatalog.GetPickupDef(pickupIndex).itemIndex);
                    }
                }
            }
コード例 #2
0
        public override void OnLoad()
        {
            base.OnLoad();

            MysticsRisky2Utils.Utils.CopyChildren(Main.AssetBundle.LoadAsset <GameObject>("Assets/Interactables/Shrine of the Legend/ShrineLegendary.prefab"), prefab, true);

            modelBaseTransform = prefab.transform.Find("Base");
            modelTransform     = prefab.transform.Find("Base/mdlShrineLegendary");
            meshObject         = prefab.transform.Find("Base/mdlShrineLegendary").gameObject;
            prefab.transform.Find("Base/mdlShrineLegendary/Collision").gameObject.layer = LayerIndex.world.intVal;
            genericDisplayNameToken = "MYSTICSITEMS_SHRINE_LEGENDARY_NAME";

            Prepare();
            Dither();

            Material prefabMaterial = meshObject.GetComponent <MeshRenderer>().sharedMaterial;

            prefabMaterial.SetFloat("_Glossiness", 0.5f);
            prefabMaterial.SetFloat("_GlossyReflections", 1f);
            HopooShaderToMaterial.Standard.Gloss(prefabMaterial, 0.07f, 1.25f, new Color32(96, 86, 48, 255));

            GameObject shrineChanceSymbol = LegacyResourcesAPI.Load <GameObject>("Prefabs/NetworkedObjects/Shrines/ShrineGoldshoresAccess").transform.Find("Symbol").gameObject;
            GameObject symbol             = prefab.transform.Find("Symbol").gameObject;

            symbol.GetComponent <MeshFilter>().mesh = Object.Instantiate(shrineChanceSymbol.GetComponent <MeshFilter>().mesh);
            Material symbolMaterial = Object.Instantiate(shrineChanceSymbol.GetComponent <MeshRenderer>().material);

            symbol.GetComponent <MeshRenderer>().material = symbolMaterial;
            symbolMaterial.SetTexture("_MainTex", Main.AssetBundle.LoadAsset <Texture>("Assets/Interactables/Shrine of the Legend/Symbol.png"));
            symbolMaterial.SetTextureScale("_MainTex", new Vector2(1f, 1f));
            symbolMaterial.SetTexture("_RemapTex", Main.AssetBundle.LoadAsset <Texture>("Assets/Interactables/Shrine of the Legend/Symbol Ramp.png"));
            symbol.AddComponent <Billboard>();

            PurchaseInteraction purchaseInteraction = prefab.AddComponent <PurchaseInteraction>();

            purchaseInteraction.displayNameToken = "MYSTICSITEMS_SHRINE_LEGENDARY_NAME";
            purchaseInteraction.contextToken     = "MYSTICSITEMS_SHRINE_LEGENDARY_CONTEXT";
            purchaseInteraction.costType         = CostTypeIndex.LunarCoin;
            purchaseInteraction.available        = true;
            purchaseInteraction.cost             = 1;
            purchaseInteraction.automaticallyScaleCostWithDifficulty = false;
            purchaseInteraction.ignoreSpherecastForInteractability   = false;
            purchaseInteraction.setUnavailableOnTeleporterActivated  = true;
            purchaseInteraction.isShrine = true;

            PurchaseAvailabilityIndicator purchaseAvailabilityIndicator = prefab.AddComponent <PurchaseAvailabilityIndicator>();

            purchaseAvailabilityIndicator.indicatorObject = symbol.gameObject;

            RoR2.EntityLogic.DelayedEvent delayedEvent = prefab.AddComponent <RoR2.EntityLogic.DelayedEvent>();

            ShrineLegendaryBehaviour behaviour = prefab.AddComponent <ShrineLegendaryBehaviour>();

            behaviour.maxPurchaseCount          = 1;
            behaviour.costMultiplierPerPurchase = 2f;
            behaviour.symbolTransform           = symbol.transform;

            spawnCard.hullSize                              = HullClassification.Golem;
            spawnCard.forbiddenFlags                        = RoR2.Navigation.NodeFlags.NoShrineSpawn;
            spawnCard.directorCreditCost                    = 30;
            spawnCard.occupyPosition                        = true;
            spawnCard.orientToFloor                         = false;
            spawnCard.slightlyRandomizeOrientation          = false;
            spawnCard.skipSpawnWhenSacrificeArtifactEnabled = false;

            directorCard = new DirectorCard
            {
                spawnCard               = spawnCard,
                selectionWeight         = 1,
                spawnDistance           = 0f,
                preventOverhead         = false,
                minimumStageCompletions = 1,
                requiredUnlockableDef   = null,
                forbiddenUnlockableDef  = null
            };

            ConfigManager.General.onSecretsToggled += (setEnabled) => enabled = setEnabled;
            enabled = ConfigManager.General.secrets;

            // Custom purchase cost type to take a fraction of the player's items

            /*
             * GenericCostTypes.OnItemFractionCostTypeRegister += (costTypeIndex) =>
             * {
             *  purchaseInteraction.costType = costTypeIndex;
             *  purchaseInteraction.cost = 100;
             * };
             */
        }