Exemplo n.º 1
0
        private void CharacterMaster_OnInventoryChanged(On.RoR2.CharacterMaster.orig_OnInventoryChanged orig, CharacterMaster self)
        {
            orig(self);
            var InventoryCount = GetCount(self);

            if (InventoryCount > 0)
            {
                var magnetObject = self.GetBody().GetComponentInChildren <MagnetManager>()?.gameObject;
                if (!magnetObject)
                {
#if DEBUG
                    TurboEdition._logger.LogWarning(ItemName + " " + self + "'s body didn't have a MagnetManager, creating one.");
#endif
                    magnetObject = UnityEngine.Object.Instantiate(magnetManager);
                    magnetObject.GetComponent <MagnetManager>().ownerBody = self.GetBody();
                    magnetObject.GetComponent <MagnetManager>().NetLoS    = useLoS;
                    magnetObject.GetComponent <NetworkedBodyAttachment>().AttachToGameObjectAndSpawn(self.GetBody().gameObject);
                }
                //we update the radius after creating / finding out is already created
#if DEBUG
                TurboEdition._logger.LogWarning(ItemName + " updating " + self + "'s body MagnetManager, with radius of " + attractInitial + (InventoryCount - 1) * attractStack);
#endif
                magnetObject.GetComponent <MagnetManager>().NetRadius    = attractInitial + ((InventoryCount - 1) * attractStack);
                magnetObject.GetComponent <MagnetManager>().NetDupChance = duplicationInitial + ((InventoryCount - 1) * duplicationStack);
            }
        }
Exemplo n.º 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();
            }
        }
Exemplo n.º 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>();                 //gets player inventory
                        LocalHealth      = LocalPlayer.GetBody().GetComponent <HealthComponent>(); //gets players local health numbers
                        LocalSkills      = LocalPlayer.GetBody().GetComponent <SkillLocator>();    //gets current for local character skills
                        Localbody        = LocalPlayer.GetBody().GetComponent <CharacterBody>();   //gets all stats for local character
                        LocalMotor       = LocalPlayer.GetBody().GetComponent <CharacterMotor>();

                        if (LocalPlayer.alive)
                        {
                            _CharacterCollected = true;
                        }
                        else
                        {
                            _CharacterCollected = false;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                _CharacterCollected = false;
            }
        }
Exemplo n.º 4
0
        public EnemyData(CharacterMaster enemy)
        {
            var inventory       = enemy.inventory;
            var healthComponent = enemy.GetBody().healthComponent;
            var deathRewards    = enemy.GetBody().GetComponent <DeathRewards>();

            transform = new SerializableTransform(enemy.GetBody().transform);
            enemyName = enemy.name.Replace("Master(Clone)", "");
            teamIndex = (int)enemy.teamIndex;

            items = new int[(int)ItemIndex.Count];
            for (int i = 0; i < (int)ItemIndex.Count; i++)
            {
                items[i] = inventory.GetItemCount((ItemIndex)i);
            }

            equipmentIndex = (int)inventory.GetEquipmentIndex();
            health         = (float)healthComponent.health;
            shields        = (float)healthComponent.shield;

            if (deathRewards != null)
            {
                expReward  = (int)deathRewards.expReward;
                goldReward = (int)deathRewards.goldReward;
            }

            isBoss = enemy.isBoss;
        }
Exemplo n.º 5
0
        private static void CCChangeTeam(ConCommandArgs args)
        {
            if (args.Count == 0)
            {
                Log.Message(MagicVars.TEAM_ARGS);
                return;
            }

            CharacterMaster master = args.sender.master;

            if (args.Count > 1)
            {
                NetworkUser player = GetNetUserFromString(args[1]);
                if (player != null)
                {
                    master = player.master;
                }
            }

            if (Enum.TryParse(Alias.GetEnumFromPartial <TeamIndex>(args[0]).ToString(), true, out TeamIndex teamIndex))
            {
                if ((int)teamIndex >= (int)TeamIndex.None && (int)teamIndex < (int)TeamIndex.Count)
                {
                    if (master.GetBody())
                    {
                        master.GetBody().teamComponent.teamIndex = teamIndex;
                        master.teamIndex = teamIndex;
                        Log.Message("Changed to team " + teamIndex);
                        return;
                    }
                }
            }
            //Note the `return` on succesful evaluation.
            Log.Message("Invalid team. Please use 0,'neutral',1,'player',2, or 'monster'");
        }
        public void Awake()
        {
            Chat.AddMessage("ResurrectOnLevelup Loaded!");

            On.RoR2.GlobalEventManager.OnTeamLevelUp += (orig, self) =>
            {
                orig(self);
                bool groupRevive = true;

                int connectedPlayers          = PlayerCharacterMasterController.instances.Count;
                int index                     = 0;
                CharacterMaster[] deadPlayers = new CharacterMaster[connectedPlayers];
                for (int i = 0; i < connectedPlayers; i++)
                {
                    CharacterMaster character = PlayerCharacterMasterController.instances[i].master;
                    if (!character.alive && !groupRevive)
                    {
                        deadPlayers[index] = character;
                        index++;
                    }
                    else if (!character.alive && groupRevive)
                    {
                        character.Respawn(character.GetBody().footPosition, character.GetBody().transform.rotation);
                    }
                }
                int luckyPlayerIndex = Run.instance.stageRng.RangeInt(0, index);
                if (!groupRevive)
                {
                    CharacterMaster luckyPlayer = deadPlayers[luckyPlayerIndex];
                    luckyPlayer.Respawn(luckyPlayer.GetBody().footPosition, luckyPlayer.GetBody().transform.rotation);
                }
            };
        }
Exemplo n.º 7
0
        IEnumerator TriggerInteractorBarrelInteraction(CharacterMaster master, int money)
        {
            yield return(new WaitUntil(() => master.GetBody() != null));

            yield return(new WaitUntil(() => master.GetBody().gameObject.GetComponentInChildren <Interactor>() != null));

            ShareSuiteMoneyFix(master.GetBody().gameObject.GetComponentInChildren <Interactor>(), money - Math.Abs((int)master.money));
        }
Exemplo n.º 8
0
        private static void MMSpawnAs(ConCommandArgs args)
        {
            if (args.Count == 0)
            {
                return;
            }

            string character = GetBodyName(args[0]);

            if (character == null)
            {
                Debug.Log("Please use mmspawnlist to view all bodies");
                return;
            }

            GameObject newBody = BodyCatalog.FindBodyPrefab(character);

            if (args.sender == null && args.Count < 2)
            {
                Debug.Log("Error");
                return;
            }

            CharacterMaster master = args.sender?.master;

            if (args.Count > 1)
            {
                NetworkUser player = GetNetUserFromString(args.userArgs, 1);

                if (player != null)
                {
                    master = player.master;
                }

                else
                {
                    Debug.Log("User not found");
                    return;
                }
            }

            if (!master.GetBody())
            {
                Debug.Log("User is dead");
                return;
            }

            master.bodyPrefab = newBody;
            Debug.Log(args.sender.userName + " is spawning as " + character);
            RoR2.ConVar.BoolConVar stage1pod = ((RoR2.ConVar.BoolConVar)(typeof(Stage)).GetFieldCached("stage1PodConVar").GetValue(null));
            bool oldVal = stage1pod.value;

            stage1pod.SetBool(false);

            master.Respawn(master.GetBody().transform.position, master.GetBody().transform.rotation);
            stage1pod.SetBool(oldVal);
        }
Exemplo n.º 9
0
        private void EnsureNameplateUpdated()
        {
            CharacterBody body = master.GetBody();

            if (body && !string.IsNullOrWhiteSpace(NameToken) && !body.baseNameToken.Equals(NameToken))
            {
                Debug.LogWarning($"Updating nameplate: {body.baseNameToken} => {NameToken}");
                body.baseNameToken = NameToken;
            }
        }
Exemplo n.º 10
0
        private static void CCSpawnAs(ConCommandArgs args)
        {
            if (args.Count == 0)
            {
                Log.MessageNetworked(Lang.SPAWNAS_ARGS, args, LogLevel.MessageClientOnly);
                return;
            }
            string character = StringFinder.Instance.GetBodyName(args[0]);

            if (character == null)
            {
                Log.MessageNetworked(Lang.SPAWN_ERROR + args[0], args, LogLevel.MessageClientOnly);
                Log.MessageNetworked("Please use list_body to print CharacterBodies", args, LogLevel.MessageClientOnly);
                return;
            }
            GameObject newBody = BodyCatalog.FindBodyPrefab(character);

            if (args.sender == null && args.Count < 2)
            {
                Log.Message(Lang.DS_REQUIREFULLQUALIFY, LogLevel.Error);
                return;
            }

            CharacterMaster master = args.sender?.master;

            if (args.Count > 1)
            {
                NetworkUser player = Util.GetNetUserFromString(args.userArgs, 1);
                if (player != null)
                {
                    master = player.master;
                }
                else
                {
                    Log.MessageNetworked(Lang.PLAYER_NOTFOUND, args, LogLevel.MessageClientOnly);
                    return;
                }
            }

            if (!master.GetBody())
            {
                Log.MessageNetworked(Lang.PLAYER_DEADRESPAWN, args, LogLevel.MessageClientOnly);
                return;
            }

            master.bodyPrefab = newBody;
            Log.MessageNetworked(args.sender.userName + " is spawning as " + character, args);
            RoR2.ConVar.BoolConVar stage1pod = ((RoR2.ConVar.BoolConVar)(typeof(Stage)).GetFieldCached("stage1PodConVar").GetValue(null));
            bool oldVal = stage1pod.value;

            stage1pod.SetBool(false);

            master.Respawn(master.GetBody().transform.position, master.GetBody().transform.rotation);
            stage1pod.SetBool(oldVal);
        }
Exemplo n.º 11
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);
        }
Exemplo n.º 12
0
            private void FindTarget()
            {
                this.targetFinder.teamMaskFilter = TeamMask.allButNeutral;
                this.targetFinder.teamMaskFilter.RemoveTeam(this.teamIndex);
                this.targetFinder.sortMode    = BullseyeSearch.SortMode.Distance;
                this.targetFinder.filterByLoS = true;
                Ray ray = CameraRigController.ModifyAimRayIfApplicable(characterMaster.GetBody().inputBank.GetAimRay(), base.gameObject, out float num);

                this.targetFinder.searchOrigin    = ray.origin;
                this.targetFinder.searchDirection = ray.direction;
                //this.targetFinder.maxAngleFilter = 10f;
                this.targetFinder.viewer         = characterMaster.GetBody();
                this.targetFinder.teamMaskFilter = TeamMask.GetUnprotectedTeams(teamIndex);
            }
Exemplo n.º 13
0
        public void PickupItems()
        {
            if (!master.inventory)
            {
                return;
            }

            List <GenericPickupController> pickups = InstanceTracker.GetInstancesList <GenericPickupController>();

            for (int i = 0; i < pickups.Count; i++)
            {
                GenericPickupController pickup = pickups[i];

                // Skip lunar coins
                if (pickup.pickupIndex.coinValue > 0)
                {
                    continue;
                }

                // Skip these
                ItemDef def = ItemCatalog.GetItemDef(pickup.pickupIndex.itemIndex);
                if (def != null && def.tier == ItemTier.Lunar)
                {
                    continue;
                }
                EquipmentIndex equipmentIndex = pickup.pickupIndex.equipmentIndex;
                if (equipmentIndex != EquipmentIndex.None)
                {
                    if (EquipmentCatalog.GetEquipmentDef(equipmentIndex).isLunar)
                    {
                        continue;
                    }
                    if (master.inventory.currentEquipmentIndex != EquipmentIndex.None)
                    {
                        continue;
                    }
                }

                if (pickup.GetInteractability(this.bodyInteractor) == Interactability.Available)
                {
                    // Move to pickup item if within 60 meters
                    float dist = PlayerBotUtils.GetFastDist(master.GetBody().transform.position, pickup.gameObject.transform.position);
                    if (dist <= (60f * 60f))
                    {
                        this.ai.customTarget.gameObject = pickup.gameObject;
                        return;
                    }
                }
            }
        }
Exemplo n.º 14
0
        private static void SpawnAs(NetworkUser user, string bodyString, string userString)
        {
            if (!SpawnAsEnabled.Value)
            {
                return;
            }

            CharacterMaster sender = user.master;

            if (HostOnlySpawnAsEnabled.Value)
            {
                if (NetworkUser.readOnlyInstancesList[0].netId != user.netId)
                {
                    return;
                }
            }

            bodyString = bodyString.Replace("Master", "");
            bodyString = bodyString.Replace("Body", "");
            bodyString = bodyString + "Body";

            NetworkUser     player = GetNetUserFromString(userString);
            CharacterMaster master = player != null ? player.master : sender;

            if (!master.alive)
            {
                Debug.Log("Player is dead and cannot respawn.");
                return;
            }

            GameObject bodyPrefab = BodyCatalog.FindBodyPrefab(bodyString);

            if (bodyPrefab == null)
            {
                List <string> array = new List <string>();
                foreach (var item in BodyCatalog.allBodyPrefabs)
                {
                    array.Add(item.name);
                }
                string list = string.Join("\n", array);
                Debug.LogFormat("Could not spawn as {0}, Try: spawn_as GolemBody   --- \n{1}", bodyString, list);
                return;
            }
            master.bodyPrefab = bodyPrefab;
            Debug.Log(master.GetBody().GetUserName() + " is spawning as " + bodyString);

            master.Respawn(master.GetBody().transform.position, master.GetBody().transform.rotation);
        }
Exemplo n.º 15
0
        private static void PPDoppel(ConCommandArgs args) //borrowed code from debugtoolkit
        {
            var beetles = UnityEngine.Object.FindObjectsOfType <UmbraBeetle>();

            if (beetles.Length == 0)
            {
                GameObject masterPrefab = MasterCatalog.FindMasterPrefab("BeetleMaster");
                GameObject bodyPrefab   = masterPrefab.GetComponent <CharacterMaster>().bodyPrefab;

                var             bodyGameObject = UnityEngine.Object.Instantiate <GameObject>(masterPrefab, args.sender.master.GetBody().transform.position, Quaternion.identity);
                var             component      = bodyGameObject.AddComponent <UmbraBeetle>();
                CharacterMaster master         = bodyGameObject.GetComponent <CharacterMaster>();
                master.inventory.GiveItem(ItemIndex.InvadingDoppelganger);
                component.characterBody = master.GetBody();
                NetworkServer.Spawn(bodyGameObject);
                master.SpawnBody(bodyPrefab, args.sender.master.GetBody().transform.position, Quaternion.identity);

                Debug.Log("Spawned umbra beetle");
            }
            else
            {
                //UnityEngine.Object.DestroyImmediate(beetles[0].gameObject);
                beetles[0].Suicide();
                Debug.Log("Destroyed umbra beetle");
            }
        }
Exemplo n.º 16
0
        private void CharacterMaster_OnInventoryChanged(On.RoR2.CharacterMaster.orig_OnInventoryChanged orig, CharacterMaster self)
        {
            orig(self);

            if (self.hasBody)
            {
                if (self.GetBody().baseNameToken == "PALADIN_NAME")
                {
                    Misc.PaladinSwordController swordComponent = self.GetBody().GetComponent <Misc.PaladinSwordController>();
                    if (swordComponent)
                    {
                        swordComponent.CheckInventory();
                    }
                }
            }
        }
Exemplo n.º 17
0
        private string GetTeamEntityLabel(CharacterBody teamEntity)
        {
            string victimLabel;

            if (!IsRealPlayer(teamEntity))
            {
                if (MinionTogglesDisabled())
                {
                    return(null);
                }

                CharacterMaster minionOwner = TryResolveMinionOwnerMaster(teamEntity);
                if (minionOwner == null)
                {
                    return(null);
                }

                victimLabel = ComposeMinionVictimLabel(teamEntity, minionOwner.GetBody());
            }
            else
            {
                victimLabel = ComposePlayerVictimLabel(teamEntity);
            }

            return(victimLabel);
        }
Exemplo n.º 18
0
        private static void RevivalHook()
        {
            On.RoR2.Run.OnServerBossDefeated += (orig, self, bossGroup) =>
            {
                orig(self, bossGroup);

                if (NetworkServer.active)
                {
                    if (Enabled)
                    {
                        if (Run.instance && Run.instance.livingPlayerCount > 0)
                        {
                            foreach (NetworkUser networkUser in NetworkUser.readOnlyInstancesList)
                            {
                                if (networkUser.isActiveAndEnabled)
                                {
                                    CharacterMaster master = networkUser.master;

                                    if (master.IsDeadAndOutOfLivesServer() || !master.GetBody() || !master.GetBody().healthComponent.alive)
                                    {
                                        RespawnAtDeathPoint(master);
                                    }
                                }
                            }
                        }
                    }
                }
            };
        }
Exemplo n.º 19
0
        public void RespawnExtraLife()
        {
            Chat.AddMessage("Heros Never Die");
            characterMaster.Respawn(this.deathFootPosition, Quaternion.Euler(0f, UnityEngine.Random.Range(0f, 360f), 0f), false);
            characterMaster.GetBody().AddTimedBuff(BuffIndex.Immune, 3f);
            GameObject   gameObject = Resources.Load <GameObject>("Prefabs/Effects/HippoRezEffect");
            BindingFlags flags      = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Default | BindingFlags.DeclaredOnly;
            var          prop_bodyInstanceObject = characterMaster.GetType().GetProperty("bodyInstanceObject", flags);
            GameObject   bodyInstanceObject      = prop_bodyInstanceObject.GetValue(characterMaster) as GameObject;

            if (bodyInstanceObject != null)
            {
                foreach (EntityStateMachine entityStateMachine in bodyInstanceObject.GetComponents <EntityStateMachine>())
                {
                    entityStateMachine.initialStateType = entityStateMachine.mainStateType;
                }
                if (gameObject)
                {
                    EffectManager.instance.SpawnEffect(gameObject, new EffectData
                    {
                        origin   = this.deathFootPosition,
                        rotation = bodyInstanceObject.transform.rotation
                    }, true);
                }
            }
        }
Exemplo n.º 20
0
        public void Update()
        {
            if (gameObject.GetComponent <CharacterMaster>() is CharacterMaster characterMaster)
            {
                trackerMaster = characterMaster;
                if (trackerMaster.GetBody() is CharacterBody characterBody)
                {
                    trackerBody = characterBody;
                    int tempCurseCount = 0;

                    foreach (AffixTracker tracker in affixTrackers)
                    {
                        //If the buff is StageLock or CurseLock, give it to me
                        if (tracker.isCurseLock || tracker.isStageLock)
                        {
                            //trackerBody.AddBuff(tracker.buffIndex);
                            trackerBody.ApplyBuff(tracker.buffIndex, 1);
                        }
                        //If neither Lock, and also not Held nor Vulture, take it away
                        else if (!tracker.isHeld && !tracker.isVultured)
                        {
                            //trackerBody.RemoveBuff(tracker.buffIndex);
                            trackerBody.ApplyBuff(tracker.buffIndex, 0);
                        }

                        //Check is the buff is currently from Wake of Vultures
                        if (tracker.isVultured)
                        {
                            //Reduce the amount of time and remove flag if no time left
                            tracker.vultureTimeLeft -= Time.deltaTime;
                            if (tracker.vultureTimeLeft <= 0)
                            {
                                tracker.isVultured = false;
                            }
                        }

                        //Calculate the current curse count
                        if (tracker.isCurseLock)
                        {
                            //If its cursed and neither staged nor held nor vultured, add a curse
                            if (!tracker.isHeld && !tracker.isStageLock && !tracker.isVultured)
                            {
                                tempCurseCount++;
                            }
                        }
                    }
                    //Update curse count if its changed
                    if (tempCurseCount != curseCount)
                    {
                        curseCount = tempCurseCount;
                        //Chat.AddMessage("Current Curse Level is: " + curseCount.ToString());
                    }
                    //Update the visual effect if needed
                    if (trackerBody.GetBuffCount(CurseBuff.index) != curseCount)
                    {
                        trackerBody.ApplyBuff(CurseBuff.index, curseCount);
                    }
                }
            }
        }
Exemplo n.º 21
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);
                }
            }
        }
Exemplo n.º 22
0
        private static void CCTestBots(ConCommandArgs args)
        {
            if (Stage.instance == null)
            {
                return;
            }

            NetworkUser user = args.sender;

            foreach (GameObject gameObject in playerbots)
            {
                CharacterMaster master      = gameObject.GetComponent <CharacterMaster>();
                AIOwnership     aiOwnership = gameObject.GetComponent <AIOwnership>();
                string          name        = master.GetBody().GetDisplayName();

                if (aiOwnership.ownerMaster)
                {
                    Debug.Log(name + "'s master: " + aiOwnership.ownerMaster.GetBody().GetUserName());
                }
                else
                {
                    Debug.Log(name + " has no master");
                }

                Debug.Log(name + "'s money: " + master.money);
            }
        }
        private void CharacterMaster_RespawnExtraLife(On.RoR2.CharacterMaster.orig_RespawnExtraLife orig, CharacterMaster self)
        {
            orig(self);

            if (playersToRespawn.Contains(self))
            {
                playersToRespawn.Remove(self);
                var characterBody = self.GetBody();

                CharacterBody component = characterBody;
                if (component)
                {
                    var count       = component.GetBuffCount(InitBuffs.maxHPDownStage);
                    var added_count = (int)Mathf.Ceil(((100f - (float)component.GetBuffCount(InitBuffs.maxHPDownStage)) / 100f) * (float)purchaseInteraction.cost);
                    //Debug.Log(count + added_count);
                    if (count + added_count < 100)
                    {
                        for (var i = 0; i < added_count; i++)
                        {
                            component.AddBuff(InitBuffs.maxHPDownStage);
                        }
                    }
                }
            }
        }
            // Token: 0x060025DA RID: 9690 RVA: 0x000AFCF4 File Offset: 0x000ADEF4
            private static void OnCharacterDeath(DamageReport damageReport)
            {
                if (!damageReport.victim)
                {
                    return;
                }
                CharacterBody component = damageReport.victim.GetComponent <CharacterBody>();

                if (!component || !component.isChampion || !component.isElite)
                {
                    return;
                }
                foreach (HardEliteBossKillAchievement.EliteBossKillServerAchievement eliteBossKillServerAchievement in HardEliteBossKillAchievement.EliteBossKillServerAchievement.instancesList)
                {
                    GameObject masterObject = eliteBossKillServerAchievement.serverAchievementTracker.networkUser.masterObject;
                    if (masterObject)
                    {
                        CharacterMaster component2 = masterObject.GetComponent <CharacterMaster>();
                        if (component2)
                        {
                            CharacterBody body = component2.GetBody();
                            if (body && body.healthComponent && body.healthComponent.alive)
                            {
                                eliteBossKillServerAchievement.Grant();
                            }
                        }
                    }
                }
            }
Exemplo n.º 25
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
                                                              ));
                    }
                }
            }
        }
Exemplo n.º 26
0
        public static void SendRichCauldronMessage(CharacterMaster player, PickupIndex index)
        {
            var body = player.hasBody ? player.GetBody() : null;

            if (!GeneralHooks.IsMultiplayer() || body == null ||
                !ShareSuite.RichMessagesEnabled.Value)
            {
                SendPickupMessage(player, index);
                return;
            }

            var pickupDef   = PickupCatalog.GetPickupDef(index);
            var pickupColor = pickupDef.baseColor;
            var pickupName  = Language.GetString(pickupDef.nameToken);
            var playerColor = GetPlayerColor(player.playerCharacterMasterController);

            var pickupMessage =
                $"<color=#{playerColor}>{body.GetUserName()}</color> <color=#{GrayColor}>traded for</color> " +
                $"<color=#{ColorUtility.ToHtmlStringRGB(pickupColor)}>" +
                $"{pickupName ?? "???"}</color><color=#{GrayColor}>.</color>";

            Chat.SendBroadcastChat(new Chat.SimpleChatMessage {
                baseToken = pickupMessage
            });
        }
Exemplo n.º 27
0
        private void AllySquad_onMemberLost(CharacterMaster master)
        {
            string[] standardDeathQuoteTokens = (string[])typeof(GlobalEventManager)
                                                .GetField("standardDeathQuoteTokens", BindingFlags.Static | BindingFlags.NonPublic)
                                                .GetValue(null);
            Chat.SendBroadcastChat(new Chat.PlayerDeathChatMessage
            {
                subjectAsCharacterBody = master.GetBody(),
                baseToken = standardDeathQuoteTokens[Random.Range(0, standardDeathQuoteTokens.Length)]
            });

            if (allySquad.memberCount == 0)
            {
                foreach (var controller in PlayerCharacterMasterController.instances)
                {
                    CharacterMaster characterMaster = controller.master;
                    if (!characterMaster.IsDeadAndOutOfLivesServer())
                    {
                        CharacterBody characterBody = characterMaster.GetBody();
                        if (characterBody)
                        {
                            EffectManager.SpawnEffect(Resources.Load <GameObject>("Prefabs/Effects/BrittleDeath"), new EffectData
                            {
                                origin   = characterBody.corePosition,
                                rotation = Quaternion.identity,
                                scale    = characterBody.bestFitRadius * 2f
                            }, true);
                        }
                        characterMaster.TrueKill(null, null, DamageType.VoidDeath);
                    }
                }
                TriggerGameOver();
            }
        }
Exemplo n.º 28
0
        private static void CreateEclipseDoppelganger(CharacterMaster master, Xoroshiro128Plus rng)
        {
            var card = DoppelgangerSpawnCard.FromMaster(master);

            if (card is null)
            {
                return;
            }
            if (card.prefab is null)
            {
                card.prefab = MasterCatalog.GetMasterPrefab(defaultMasterIndex);
            }

            Transform spawnOnTarget;

            DirectorCore.MonsterSpawnDistance input;
            if (TeleporterInteraction.instance)
            {
                spawnOnTarget = TeleporterInteraction.instance.transform;
                input         = DirectorCore.MonsterSpawnDistance.Close;
            }
            else
            {
                spawnOnTarget = master.GetBody().coreTransform;
                input         = DirectorCore.MonsterSpawnDistance.Far;
            }
            DirectorPlacementRule directorPlacementRule = new DirectorPlacementRule
            {
                spawnOnTarget = spawnOnTarget,
                placementMode = DirectorPlacementRule.PlacementMode.NearestNode
            };

            DirectorCore.GetMonsterSpawnDistance(input, out directorPlacementRule.minDistance, out directorPlacementRule.maxDistance);
            DirectorSpawnRequest directorSpawnRequest = new DirectorSpawnRequest(card, directorPlacementRule, rng);

            directorSpawnRequest.teamIndexOverride     = new TeamIndex?(TeamIndex.Monster);
            directorSpawnRequest.ignoreTeamMemberLimit = true;

            CombatSquad squad = null;

            DirectorSpawnRequest directorSpawnRequest2 = directorSpawnRequest;

            directorSpawnRequest2.onSpawnedServer = DelegateHelper.Combine(directorSpawnRequest2.onSpawnedServer, (res) =>
            {
                if (squad is null)
                {
                    squad = UnityEngine.Object.Instantiate <GameObject>(Resources.Load <GameObject>("Prefabs/NetworkedObjects/Encounters/ShadowCloneEncounter")).GetComponent <CombatSquad>();
                }
                squad.AddMember(res.spawnedInstance.GetComponent <CharacterMaster>());
            });

            DirectorCore.instance.TrySpawnObject(directorSpawnRequest);

            if (squad is not null)
            {
                NetworkServer.Spawn(squad.gameObject);
            }
            UnityEngine.Object.Destroy(card);
        }
Exemplo n.º 29
0
        private static void CCSpawnAs(ConCommandArgs args)
        {
            if (args.Count == 0)
            {
                return;
            }

            string bodyString   = ArgsHelper.GetValue(args.userArgs, 0);
            string playerString = ArgsHelper.GetValue(args.userArgs, 1);

            var character = Character.GetCharacter(bodyString);

            if (character == null)
            {
                Debug.LogFormat("Could not spawn {0}, Try: spawn_ai GolemBody", character.body);
                return;
            }

            NetworkUser player = GetNetUserFromString(playerString);

            CharacterMaster master = player != null ? player.master : args.sender.master;

            if (!master.alive)
            {
                Debug.Log("Player is dead and cannot respawn.");
                return;
            }

            GameObject newBody = BodyCatalog.FindBodyPrefab(character.body);

            if (newBody == null)
            {
                List <string> array = new List <string>();
                foreach (var item in BodyCatalog.allBodyPrefabs)
                {
                    array.Add(item.name);
                }
                string list = string.Join("\n", array);
                Debug.LogFormat("Could not spawn as {0}, Try: spawn_as GolemBody   --- \n{1}", character.body, list);
                return;
            }
            master.bodyPrefab = newBody;
            Debug.Log(args.sender.userName + " is spawning as " + character.body);

            master.Respawn(master.GetBody().transform.position, master.GetBody().transform.rotation);
        }
Exemplo n.º 30
0
        IEnumerator WaitForStart(CharacterMaster enemy)
        {
            yield return(null);

            var healthComponent = enemy.GetBody().healthComponent;

            healthComponent.health = health;
            healthComponent.shield = shields;

            var deathRewards = enemy.GetBody().GetComponent <DeathRewards>();

            if (deathRewards != null)
            {
                deathRewards.expReward  = (uint)expReward;
                deathRewards.goldReward = (uint)goldReward;
            }
        }