//-----------------------------------------------

        public void Awake()
        {
            frame          = 0;
            isImp          = false;
            count          = false;
            master         = gameObject.GetComponent <CharacterMaster>();
            origBodyPrefab = BodyCatalog.FindBodyPrefab(master.GetBodyObject()); //origBody is where the user's original bodyprefab is stored
        }
Ejemplo n.º 2
0
        public static void DropEquipment(CharacterMaster master, EquipmentIndex equipmentIndex)
        {
            var transform  = master.GetBodyObject().transform;
            var dropVector = UnityEngine.Random.insideUnitCircle;

            PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(equipmentIndex), transform.position, new Vector3(dropVector.x, 0, dropVector.y) * 5f);
            master.inventory.SetEquipmentIndex(EquipmentIndex.None);
            DropperChat.EquipmentDropMessage(master.GetBody().GetUserName(), equipmentIndex);
        }
Ejemplo n.º 3
0
        public CharacterMaster SummonHeretic(GameObject summonerBodyObject, Vector3 spawnPosition)
        {
            if (!NetworkServer.active)
            {
                Debug.LogWarning("[Server] function 'SummonHeretic(UnityEngine.GameObject)' called on client");
                return(null);
            }
            MasterSummon masterSummon = new MasterSummon
            {
                masterPrefab          = MasterCatalog.FindMasterPrefab("HereticMonsterMaster"),
                position              = spawnPosition,
                rotation              = Quaternion.identity,
                summonerBodyObject    = summonerBodyObject,
                ignoreTeamMemberLimit = true,
                useAmbientLevel       = new bool?(true),
            };
            CharacterMaster characterMaster = masterSummon.Perform();

            if (characterMaster)
            {
                GameObject bodyObject = characterMaster.GetBodyObject();
                if (bodyObject)
                {
                    ModelLocator component = bodyObject.GetComponent <ModelLocator>();
                    if (component && component.modelTransform)
                    {
                        TemporaryOverlay temporaryOverlay = component.modelTransform.gameObject.AddComponent <TemporaryOverlay>();
                        temporaryOverlay.duration              = 0.5f;
                        temporaryOverlay.animateShaderAlpha    = true;
                        temporaryOverlay.alphaCurve            = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
                        temporaryOverlay.destroyComponentOnEnd = true;
                        temporaryOverlay.originalMaterial      = Resources.Load <Material>("Materials/matSummonDrone");
                        temporaryOverlay.AddToCharacerModel(component.modelTransform.GetComponent <CharacterModel>());
                    }
                    var inventory = characterMaster.inventory;
                    if (inventory)
                    {
                        inventory.CopyItemsFrom(summonerBodyObject.GetComponent <CharacterBody>().inventory);
                    }
                }
            }
            if (characterMaster && characterMaster.bodyInstanceObject)
            {
                characterMaster.GetBody().AddTimedBuff(RoR2Content.Buffs.Immune, 3f);
                GameObject gameObject = Resources.Load <GameObject>("Prefabs/Effects/HippoRezEffect");
                if (gameObject)
                {
                    EffectManager.SpawnEffect(gameObject, new EffectData
                    {
                        origin   = spawnPosition,
                        rotation = characterMaster.bodyInstanceObject.transform.rotation
                    }, true);
                }
            }
            return(characterMaster);
        }
Ejemplo n.º 4
0
        private static void OnSpawned(CharacterMaster master)
        {
            master.inventory.GiveItem(ItemIndex.ChainLightning);
            var bodyObj = master.GetBodyObject();
            var decor   = UnityEngine.Object.Instantiate(HailstormAssets.TwisterVisualPrefab, bodyObj.transform);

            decor.transform.localScale = new Vector3(1.5f, 1.5f, 1.5f);
            var launcher = bodyObj.AddComponent <TornadoLauncher>();

            launcher.enabled = true;
        }
Ejemplo n.º 5
0
        public static void DropItem(CharacterMaster master, ItemIndex itemIndex)
        {
            var transform  = master.GetBodyObject().transform;
            var dropVector = UnityEngine.Random.insideUnitCircle;

            PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(itemIndex), transform.position, new Vector3(dropVector.x, 0, dropVector.y) * 5f);
            master.inventory.RemoveItem(itemIndex);
            DropperChat.ItemDropMessage(master.GetBody().GetUserName(), itemIndex);
            var limits = master.GetComponent <InventoryLimits>();

            DropperChat.ItemCountMessage(master.GetBody().GetUserName(), limits.amount, limits.limit);
        }
Ejemplo n.º 6
0
 // Token: 0x060021E3 RID: 8675 RVA: 0x000A072C File Offset: 0x0009E92C
 private static HealthComponent GetCharacterHealthComponent(CharacterMaster master)
 {
     if (master)
     {
         GameObject bodyObject = master.GetBodyObject();
         if (bodyObject)
         {
             return(bodyObject.GetComponent <HealthComponent>());
         }
     }
     return(null);
 }
        private void GenericPickupController_GrantLunarCoin(On.RoR2.GenericPickupController.orig_GrantLunarCoin orig, GenericPickupController self, CharacterBody body, uint count)
        {
            if (!NetworkServer.active)
            {
                Debug.LogWarning("[Server] function 'System.Void RoR2.GenericPickupController::GrantLunarCoin(RoR2.CharacterBody,System.UInt32)' called on client");
                return;
            }
            if (!ArtifactEnabled)
            {
                orig(self, body, count);
                return;
            }
            CharacterMaster master      = body.master;
            NetworkUser     networkUser = Util.LookUpBodyNetworkUser(body);

            if (networkUser)
            {
                if (master)
                {
                    GenericPickupController.SendPickupMessage(master, self.pickupIndex);
                }
                networkUser.AwardLunarCoins(count);
                UnityEngine.Object.Destroy(self.gameObject);
            }
            else
            {
                if (master && master.teamIndex != TeamIndex.Player)
                {
                    var component = master.GetBodyObject().GetComponent <DropInventoryOnDeath>();
                    if (!component)
                    {
                        component = master.GetBodyObject().AddComponent <DropInventoryOnDeath>();
                    }
                    component.incrementCoins();
                    GenericPickupController.SendPickupMessage(master, self.pickupIndex);
                    UnityEngine.Object.Destroy(self.gameObject);
                }
            }
        }
Ejemplo n.º 8
0
        private void CharacterMaster_OnBodyDamaged(On.RoR2.CharacterMaster.orig_OnBodyDamaged orig, CharacterMaster self, DamageReport damageReport)
        {
            if (self)
            {
                if (self.GetBody().baseNameToken == "DG_SAMUS_NAME")
                {
                    //Debug.Log("worked");
                    Util.PlaySound(SamusMod.Modules.Sounds.hurtSound, self.GetBodyObject());
                }

                orig(self, damageReport);
            }
        }
Ejemplo n.º 9
0
            private void TaseTarget()
            {
                FindTarget();
                this.targetFinder.maxDistanceFilter = cfgWolfRadius.Value;
                this.targetFinder.RefreshCandidates();
                this.targetFinder.FilterOutGameObject(base.gameObject);

                var result = targetFinder.GetResults().FirstOrDefault <HurtBox>();

                if (result)
                {
                    result.healthComponent.TakeDamage(
                        new DamageInfo()
                    {
                        attacker         = characterMaster.GetBodyObject(),
                        crit             = false,
                        damage           = 1f,
                        damageColorIndex = DamageColorIndex.Item,
                        damageType       = DamageType.Shock5s,
                        force            = Vector3.zero,
                        position         = result.healthComponent.body.corePosition,
                        inflictor        = gameObject,
                        procCoefficient  = 0
                    });
                    Vector3 position = result.healthComponent.body.corePosition;
                    Vector3 start    = characterMaster.GetBody().corePosition;
                    if (EntityStates.CaptainDefenseMatrixItem.DefenseMatrixOn.tracerEffectPrefab)
                    {
                        EffectData effectData = new EffectData
                        {
                            origin = position,
                            start  = start
                        };
                        EffectManager.SpawnEffect(EntityStates.CaptainDefenseMatrixItem.DefenseMatrixOn.tracerEffectPrefab, effectData, true);
                    }

                    /*
                     * FireProjectileInfo fireProjectileInfo = new FireProjectileInfo
                     * {
                     *  projectilePrefab = EntityStates.Captain.Weapon.FireTazer.projectilePrefab,
                     *  position = characterMaster.GetBody().corePosition,
                     *  owner = characterMaster.GetBodyObject(),
                     *  damage = 0f,
                     *  force = FireTazer.force,
                     * };
                     * var lookAtRot = fireProjectileInfo.position - result.healthComponent.body.corePosition;
                     * fireProjectileInfo.rotation = Util.QuaternionSafeLookRotation(lookAtRot);
                     * //fireProjectileInfo.crit = Util.CheckRoll(this.critStat, base.characterBody.master);
                     * ProjectileManager.instance.FireProjectile(fireProjectileInfo);*/
                }
            }
Ejemplo n.º 10
0
        public void OnReceived()
        {
            if (NetworkServer.active)
            {
                return;
            }
            GameObject ownerObject = Util.FindNetworkObject(ownerId);

            if (!ownerObject)
            {
                Log.Warning("SyncOptionTargetForClients: ownerObject is null.");
                return;
            }
            GameObject targetObject = Util.FindNetworkObject(targetId);

            if (!targetObject)
            {
                Log.Warning("SyncOptionTargetForClients: targetObject is null.");
                return;
            }
            OptionTracker tracker = null;

            switch (bodyOrMaster)
            {
            case GameObjectType.Body:
                tracker = ownerObject.GetComponent <OptionTracker>();
                break;

            case GameObjectType.Master:
                CharacterMaster ownerMaster = ownerObject.GetComponent <CharacterMaster>();
                if (!ownerMaster)
                {
                    Log.Warning("SpawnOptionsForClients: ownerMaster is null.");
                    return;
                }
                GameObject bodyObject = ownerMaster.GetBodyObject();
                if (!bodyObject)
                {
                    Log.Warning("SpawnOptionsForClients: bodyObject is null.");
                    return;
                }
                tracker = bodyObject.GetComponent <OptionTracker>();
                break;
            }
            if (!tracker)
            {
                return;
            }
            SetTarget(tracker, targetObject);
        }
        private void markImp(CharacterMaster imp)
        {
            GameObject gameObject        = Instantiate(Resources.Load <GameObject>("Prefabs/PositionIndicators/PoiPositionIndicator"), imp.GetBodyObject().transform.position, imp.GetBodyObject().transform.rotation);
            var        positionIndicator = gameObject.GetComponent <PositionIndicator>();

            //positionIndicator.alwaysVisibleObject = true;

            positionIndicator.insideViewObject.GetComponent <SpriteRenderer>().color = impColor;
            Destroy(positionIndicator.insideViewObject.GetComponent <ObjectScaleCurve>());
            positionIndicator.insideViewObject.transform.localScale = positionIndicator.insideViewObject.transform.localScale / 2f;
            positionIndicator.insideViewObject.GetComponent <SpriteRenderer>().sprite = Resources.Load <Sprite>("textures/miscicons/texAttackIcon");

            positionIndicator.outsideViewObject.transform.Find("Sprite").GetComponent <SpriteRenderer>().color = impColor;

            positionIndicator.targetTransform = imp.GetBodyObject().transform;
            gameObject.AddComponent <ImpMarkerKiller>();
        }
Ejemplo n.º 12
0
        private static ROBConsoleCommand HasComponent(CharacterMaster characterMaster)
        {
            var bodyObject = characterMaster.GetBodyObject();

            if (bodyObject)
            {
                var component = bodyObject.GetComponent <ROBConsoleCommand>();
                if (!component)
                {
                    Debug.LogError("Player is missing component. Do ROB_target_component, and try again.");
                    return(null);
                }
                return(component);
            }
            Debug.LogError("Player's body object is missing.");
            return(null);
        }
Ejemplo n.º 13
0
        public CharacterMaster SummonMage(GameObject summonerBody, Vector3 spawnPosition)
        {
            if (!NetworkServer.active)
            {
                return(null);
            }
            Inventory    summonerInventory = summonerBody.GetComponent <CharacterBody>()?.inventory ? summonerBody.GetComponent <CharacterBody>().inventory : null;
            MasterSummon masterSummon      = new MasterSummon
            {
                masterPrefab          = MageMasterPrefab,
                position              = spawnPosition,
                rotation              = Quaternion.identity,
                summonerBodyObject    = summonerBody ?? null,
                ignoreTeamMemberLimit = true,
                useAmbientLevel       = new bool?(true),
                inventoryToCopy       = cfgCopyInventory.Value ? summonerInventory : null,
            };
            CharacterMaster characterMaster = masterSummon.Perform();

            if (characterMaster)
            {
                DontDestroyOnLoad(characterMaster);
                if (characterMaster.inventory)
                {
                    characterMaster.inventory.GiveItem(RoR2Content.Items.ExtraLife, cfgLives.Value);
                }

                GameObject bodyObject = characterMaster.GetBodyObject();
                if (bodyObject)
                {
                    ModelLocator component = bodyObject.GetComponent <ModelLocator>();
                    if (component && component.modelTransform)
                    {
                        TemporaryOverlay temporaryOverlay = component.modelTransform.gameObject.AddComponent <TemporaryOverlay>();
                        temporaryOverlay.duration              = 0.5f;
                        temporaryOverlay.animateShaderAlpha    = true;
                        temporaryOverlay.alphaCurve            = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
                        temporaryOverlay.destroyComponentOnEnd = true;
                        temporaryOverlay.originalMaterial      = Resources.Load <Material>("Materials/matSummonDrone");
                        temporaryOverlay.AddToCharacerModel(component.modelTransform.GetComponent <CharacterModel>());
                    }
                }
            }
            return(characterMaster);
        }
Ejemplo n.º 14
0
        private void GiveExpToPlayers()
        {
            var instances = PlayerCharacterMasterController.instances;

            for (int i = 0; i < instances.Count; i++)
            {
                GameObject      gameObject = instances[i].gameObject;
                CharacterMaster component  = gameObject.GetComponent <CharacterMaster>();
                uint            num        = component.money;
                component.money -= num;
                GameObject bodyObject = component.GetBodyObject();
                ulong      num2       = (ulong)(num / 2f / (float)instances.Count);
                if (bodyObject)
                {
                    ExperienceManager.instance.AwardExperience(base.transform.position, bodyObject.GetComponent <CharacterBody>(), num2);
                }
            }
        }
        private GameObject FindBodyOnClient(uint masterID)
        {
            if (masterID == __ownerMasterNetID)
            {
                return(ownerBodyObject);
            }

            GameObject find = ClientScene.FindLocalObject(new NetworkInstanceId(masterID));

            if (find)
            {
                CharacterMaster cm = find.GetComponent <CharacterMaster>();
                if (cm)
                {
                    return(cm.GetBodyObject());
                }
            }
            return(null);
        }
Ejemplo n.º 16
0
            public CharacterMaster SummonDrone(GameObject bodyPrefab, Vector3 spawnPosition, EquipmentIndex equipmentIndex = EquipmentIndex.None)
            {
                if (!NetworkServer.active)
                {
                    Debug.LogWarning("[Server] function 'RoR2.CharacterMaster RoR2.MithrixSpawnsDronesActivator::SummonMaster(UnityEngine.GameObject)' called on client");
                    return(null);
                }
                MasterSummon masterSummon = new MasterSummon
                {
                    masterPrefab          = masterPrefab,
                    position              = spawnPosition,
                    rotation              = Quaternion.identity,
                    summonerBodyObject    = bodyPrefab,
                    ignoreTeamMemberLimit = true,
                    useAmbientLevel       = new bool?(true),
                };
                CharacterMaster characterMaster = masterSummon.Perform();

                if (characterMaster)
                {
                    GameObject bodyObject = characterMaster.GetBodyObject();
                    if (bodyObject)
                    {
                        ModelLocator component = bodyObject.GetComponent <ModelLocator>();
                        if (component && component.modelTransform)
                        {
                            TemporaryOverlay temporaryOverlay = component.modelTransform.gameObject.AddComponent <TemporaryOverlay>();
                            temporaryOverlay.duration              = 0.5f;
                            temporaryOverlay.animateShaderAlpha    = true;
                            temporaryOverlay.alphaCurve            = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
                            temporaryOverlay.destroyComponentOnEnd = true;
                            temporaryOverlay.originalMaterial      = Resources.Load <Material>("Materials/matSummonDrone");
                            temporaryOverlay.AddToCharacerModel(component.modelTransform.GetComponent <CharacterModel>());
                        }
                        var inventory = characterMaster.inventory;
                        if (inventory)
                        {
                            inventory.SetEquipmentIndex(equipmentIndex);
                        }
                    }
                }
                return(characterMaster);
            }
Ejemplo n.º 17
0
        private void UnlockingMage_onOpened(Interactor obj)
        {
            GameObject mageMasterPrefab = MasterCatalog.FindMasterPrefab("MageMonsterMaster");
            GameObject mageBodyPrefab   = mageMasterPrefab.GetComponent <CharacterMaster>().bodyPrefab;

            GameObject      mageMasterGameObject = UnityEngine.Object.Instantiate(mageMasterPrefab, gameObject.transform.position, Quaternion.identity);
            GameObject      mageBodyGameObject   = UnityEngine.Object.Instantiate(mageBodyPrefab, gameObject.transform.position, Quaternion.identity);
            CharacterMaster mageCharacterMaster  = mageBodyGameObject.GetComponent <CharacterMaster>();

            mageCharacterMaster.bodyPrefab = mageBodyGameObject;
            AIOwnership mageAIOwnership = mageBodyGameObject.GetComponent <AIOwnership>();

            CharacterMaster playerMaster = obj.gameObject.GetComponent <CharacterBody>().master;
            BaseAI          mageBaseAI   = gameObject.GetComponent <BaseAI>();

            if (mageCharacterMaster)
            {
                mageCharacterMaster.inventory.GiveItem(ItemIndex.BoostDamage, 10);
                mageCharacterMaster.inventory.GiveItem(ItemIndex.BoostHp, 10);
                GameObject bodyObject = playerMaster.GetBodyObject();
                if (bodyObject)
                {
                    Deployable component4 = mageBodyGameObject.GetComponent <Deployable>();
                    if (!component4)
                    {
                        component4 = mageBodyGameObject.AddComponent <Deployable>();
                    }
                    playerMaster.AddDeployable(component4, DeployableSlot.ParentAlly);
                }
            }
            if (mageAIOwnership)
            {
                mageAIOwnership.ownerMaster = obj.gameObject.GetComponent <CharacterBody>().master;
            }
            if (mageBaseAI)
            {
                mageBaseAI.leader.gameObject = base.gameObject;
            }

            NetworkServer.Spawn(mageBodyGameObject);
            mageCharacterMaster.SpawnBody(mageBodyGameObject, gameObject.transform.position, Quaternion.identity);
        }
Ejemplo n.º 18
0
        void FixedUpdate()
        {
            if (!NetworkServer.active || !master || index == ItemIndex.None)
            {
                return;
            }
            var body = master.GetBodyObject();

            if (!body)
            {
                return;
            }
            var ward = body.GetComponent <ItemWard>();

            if (!ward)
            {
                return;
            }
            if (ward.radius != 100f)
            {
                ward.radius = 100f;
            }
            ward.itemcounts.TryGetValue(index, out int oldCount);
            var ctc = Mathf.Abs(oldCount - count);

            if (oldCount < count)
            {
                for (var i = 0; i < ctc; i++)
                {
                    ward.ServerAddItem(index);
                }
            }
            else if (oldCount > count)
            {
                for (var i = 0; i < ctc; i++)
                {
                    ward.ServerRemoveItem(index);
                }
            }
        }
Ejemplo n.º 19
0
        private void ForceNameplateUpdate()
        {
            Debug.LogWarning($"Forcing ally {master.GetBody()?.GetDisplayName()} to have player nameplate.");

            TeamComponent team = master.GetBodyObject().GetComponent <TeamComponent>();

            if (!team)
            {
                Debug.LogError("Could not find TeamComponent!");
                return;
            }
            FieldInfo indicatorField = typeof(TeamComponent)
                                       .GetField("indicator", BindingFlags.Instance | BindingFlags.NonPublic);
            GameObject indicator = (GameObject)indicatorField.GetValue(team);

            if (indicator)
            {
                Destroy(indicator);
                indicatorField.SetValue(team, null);
            }
            typeof(TeamComponent)
            .GetMethod("SetupIndicator", BindingFlags.Instance | BindingFlags.NonPublic)
            .Invoke(team, new object[0]);
        }
Ejemplo n.º 20
0
        public static void SimulatePickup(CharacterMaster characterMaster, ItemIndex itemIndex, int amount = 1)
        {
            var self = characterMaster.inventory;
            //var list = NotificationQueue.instancesList;
            var pickupIndex = PickupCatalog.FindPickupIndex(itemIndex);

            //var pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
            //var nameToken = pickupDef.nameToken;
            //var color = pickupDef.baseColor;
            //var body = characterMaster.GetBody();


            //Chat.AddPickupMessage(body, nameToken, color, (uint)amount);
            Util.PlaySound("Play_UI_item_pickup", characterMaster.GetBodyObject());

            self.GiveItem(itemIndex, amount);
            GenericPickupController.SendPickupMessage(characterMaster, pickupIndex);

            /*
             * for (int i = 0; i < list.Count; i++)
             * {
             *  list[i].OnPickup(characterMaster, pickupIndex);
             * }*/
        }
Ejemplo n.º 21
0
        private void SpawnVIPSelections(CharacterMaster master)
        {
            Shuffle(characterAllies);

            int     numSpawns = characterAllies.Count;
            float   radius    = Mathf.Max(30f, (numSpawns + 1) * 3f);
            Vector3 center    = getTransform(master.GetBody()).position;

            // Disable Swarm if enabled, as that spawns multiple enemies, which we don't want
            bool swarmsWasEnabled = false;

            if (RunArtifactManager.instance.IsArtifactEnabled(RoR2Content.Artifacts.swarmsArtifactDef))
            {
                RunArtifactManager.instance.SetArtifactEnabledServer(RoR2Content.Artifacts.swarmsArtifactDef, false);
                swarmsWasEnabled = true;
            }
            try
            {
                for (int i = 0; i < numSpawns; ++i)
                {
                    // Add one more to make a slot for skipping Ally selection
                    float             angle       = i * (360f / (numSpawns + 1));
                    GameObject        barrel      = SpawnBarrel(center, angle, radius).spawnedInstance;
                    BarrelInteraction interaction = barrel.GetComponent <BarrelInteraction>();
                    interaction.goldReward = 0;
                    interaction.expReward  = 0;
                    GameObject allyDummy = SpawnAllyDummy(characterAllies[i], center, angle, radius + 5f).spawnedInstance;
                    ApplyDummyAI(allyDummy.GetComponent <BaseAI>(), master.GetBodyObject());
                    SetGodMode(allyDummy.GetComponent <CharacterMaster>(), true);
                    ApplyPurchaseLogic(barrel, allyDummy);
                }

                // Add barrel to skip ally interaction
                float             noAllyAngle       = numSpawns * (360f / (numSpawns + 1));
                GameObject        noAllybarrel      = SpawnBarrel(center, noAllyAngle, radius).spawnedInstance;
                BarrelInteraction noAllyInteraction = noAllybarrel.GetComponent <BarrelInteraction>();
                noAllyInteraction.goldReward = 0;
                noAllyInteraction.expReward  = 0;
                GameObject         portal            = SpawnPortal(center, noAllyAngle, radius + 5f).spawnedInstance;
                GenericInteraction portalInteraction = portal.GetComponent <GenericInteraction>();
                portalInteraction.SetInteractabilityDisabled();
                portalInteraction.onActivation.RemoveAllListeners();
                //portalInteraction.onActivation.AddListener((interactor) =>
                //{
                //    portalInteraction.SetInteractabilityDisabled();
                //    Chat.SendBroadcastChat(new Chat.SimpleChatMessage()
                //    {
                //        baseToken = $"<color=#{ColorUtility.ToHtmlStringRGB(Color.green)}>Protect the VIP:</color> " +
                //            $"<color=#{ColorUtility.ToHtmlStringRGB(Color.gray)}>Starting run with no ally.</color>"
                //    });
                //    GoToNextLevel();
                //});
                ApplyPurchaseLogic(noAllybarrel, null);
            }
            finally
            {
                if (swarmsWasEnabled)
                {
                    RunArtifactManager.instance.SetArtifactEnabledServer(RoR2Content.Artifacts.swarmsArtifactDef, true);
                }
            }
        }
Ejemplo n.º 22
0
        private void BarrelInteraction_OnInteractionBegin(On.RoR2.BarrelInteraction.orig_OnInteractionBegin orig, BarrelInteraction self, Interactor activator)
        {
            if (!NetworkServer.active)
            {
                orig(self, activator);
                return;
            }

            if (IsOnVIPSelectionStage)
            {
                if (self.Networkopened)
                {
                    orig(self, activator);
                    return;
                }

                foreach (var barrel in spawnedBarrels)
                {
                    BarrelInteraction interaction = barrel.GetComponent <BarrelInteraction>();
                    if (self != interaction)
                    {
                        interaction.Networkopened = true;
                    }
                }

                AllyDetails details = self.GetComponent <AllyDetails>();
                if (details && details.ally)
                {
                    CharacterMaster summonCharacterMaster = activator.GetComponent <CharacterBody>().master;
                    CharacterMaster allyCharacterMaster   = details.ally.GetComponent <CharacterMaster>();

                    AllyMaster allyMaster = allyCharacterMaster.gameObject.AddComponent <AllyMaster>();
                    allyMaster.NameToken = "VIP";

                    GiveHelpingHand(allyCharacterMaster);
                    ApplyNormalAI(
                        details.ally.GetComponent <BaseAI>(),
                        summonCharacterMaster.GetBodyObject());

                    allies.Add(allyCharacterMaster);
                    allySquad.AddMember(allyCharacterMaster);

                    Chat.SendBroadcastChat(new Chat.SimpleChatMessage()
                    {
                        baseToken = $"<color=#{ColorUtility.ToHtmlStringRGB(Color.green)}>Protect the VIP:</color> " +
                                    $"<color=#{ColorUtility.ToHtmlStringRGB(Color.gray)}>Protect the ally at all costs.</color> " +
                                    $"<color=#{ColorUtility.ToHtmlStringRGB(Color.red)}>If it dies, you die.</color>"
                    });
                }
                else if (details && !details.ally)
                {
                    Chat.SendBroadcastChat(new Chat.SimpleChatMessage()
                    {
                        baseToken = $"<color=#{ColorUtility.ToHtmlStringRGB(Color.green)}>Protect the VIP:</color> " +
                                    $"<color=#{ColorUtility.ToHtmlStringRGB(Color.gray)}>Starting run with no ally.</color>"
                    });
                }
                else
                {
                    Debug.LogError("No details attached to barrel :( Starting normal run...");
                }

                GoToNextLevel();

                Debug.Log("Unhooking from RoR2.BarrelInteraction.OnInteractionBegin");
                On.RoR2.BarrelInteraction.OnInteractionBegin -= BarrelInteraction_OnInteractionBegin;
            }

            orig(self, activator);
        }
Ejemplo n.º 23
0
 private static void OnSpawned(CharacterMaster master)
 {
     var bodyObj = master.GetBodyObject();
 }