Exemplo n.º 1
0
        // method copied from RoR2.Inventory::GiveRandomItems
        private void BoostPlayerWithRandomItem(NetworkUser user)
        {
            if (!user || !user.master || !user.master.inventory)
            {
                return;
            }

            var inventory = user.master.inventory;

            try
            {
                WeightedSelection <List <PickupIndex> > weightedSelection = new WeightedSelection <List <PickupIndex> >(8);
                weightedSelection.AddChoice(Run.instance.availableTier1DropList, 100f);
                weightedSelection.AddChoice(Run.instance.availableTier2DropList, 20f);

                List <PickupIndex> list      = weightedSelection.Evaluate(UnityEngine.Random.value);
                PickupDef          pickupDef = PickupCatalog.GetPickupDef(list[UnityEngine.Random.Range(0, list.Count)]);
                inventory.GiveItem((pickupDef != null) ? pickupDef.itemIndex : ItemIndex.None, 1);

                ChatHelper.PlayerBoostedWithItem(user.userName, pickupDef.nameToken, pickupDef.baseColor);
            }
            catch (System.ArgumentException)
            {
            }
        }
        private void UsersRespawnTimers_OnRespawnInFiveSeconds(NetworkUserId userId)
        {
            var user = UsersHelper.GetUser(userId);

            if (user)
            {
                ChatHelper.UserWillRespawnAfter(user.userName, 5);
            }
        }
        public void StartTimedRespawn(RoR2.NetworkUser user)
        {
            if (user)
            {
                var respawnTime = RespawnTimeCalculation.GetRespawnTime();

                usersRespawnTimers.StartRespawnTimer(user.id, respawnTime);
                ChatHelper.UserWillRespawnAfter(user.userName, respawnTime);
            }
        }
        private void Run_OnServerSceneChanged(On.RoR2.Run.orig_OnServerSceneChanged orig, Run self, string sceneName)
        {
            orig(self, sceneName);

            IsAdvancingStage = false;

            if (CheckIfCurrentStageIsIgnoredForTimedRespawn())
            {
                ChatHelper.TimedRespawnBlockedOnStage();
            }
        }
        private void TeleporterInteraction_ChargingState_OnEnter(On.RoR2.TeleporterInteraction.ChargingState.orig_OnEnter orig, EntityStates.BaseState self)
        {
            orig(self);

            respawnController.RespawnType = RespawnType.Teleporter;

            if (PluginConfig.RespawnOnTPStart.Value)
            {
                respawnController.RespawnAllUsers();
            }

            if (PluginConfig.BlockTimedRespawnOnTPEvent.Value)
            {
                respawnController.BlockTimedRespawn();
                ChatHelper.RespawnBlockedOnTPEvent();
            }
        }
        private void PlayerCharacterMasterController_OnBodyDeath(On.RoR2.PlayerCharacterMasterController.orig_OnBodyDeath orig, PlayerCharacterMasterController self)
        {
            orig(self);

            Stage.instance.usePod = false;

            var user = UsersHelper.GetUser(self.master);

            if (user)
            {
                if (CheckIfCanTimedRespawn(self.master))
                {
                    usersTimedRespawn.StartTimedRespawn(user);
                }
                else if (IsTimedRespawnBlocked)
                {
                    switch (RespawnType)
                    {
                    case RespawnType.Teleporter:
                        if (PluginConfig.RespawnOnTPEnd.Value)
                        {
                            ChatHelper.UserWillRespawnAfterTPEvent(user.userName);
                        }
                        break;

                    case RespawnType.Mithrix:
                        if (PluginConfig.RespawnOnMithrixEnd.Value)
                        {
                            ChatHelper.UserWillRespawnAfterMithrixFight(user.userName);
                        }
                        break;

                    case RespawnType.Artifact:
                        if (PluginConfig.RespawnOnArtifactTrialEnd.Value)
                        {
                            ChatHelper.UserWillRespawnAfterArtifactTrial(user.userName);
                        }
                        break;
                    }
                }
            }
        }
Exemplo n.º 7
0
        // If "orig" method is fired, GenericPickupController_AttemptGrant will happen next
        private void GenericPickupController_OnInteractionBegin(On.RoR2.GenericPickupController.orig_OnInteractionBegin orig, GenericPickupController self, Interactor activator)
        {
            if (!CheckIfCurrentStageQualifyForSharing() ||
                !CheckIfItemQualifyForSharing(self.pickupIndex))
            {
                orig(self, activator);
                return;
            }

            var user = UsersHelper.GetUser(activator);

            // get item
            if (printedItemsWatcher.CheckIfUserHasPrintedItems(user, self.pickupIndex) ||
                CheckIfUserCanPickItem(user))
            {
                orig(self, activator);
                return;
            }
            // give random item to lowest cost player
            else if (PluginConfig.HowToHandleItemDisproportion.Value == HowToHandleItemDisproportion.GiveRandomItemToLowestCostsPlayer)
            {
                orig(self, activator);
                return;
            }
            // share item
            else if (pingedItemsWatcher.TryConsumeItemPingedByUser(user, self))
            {
                var userWithLeastItems           = InventoryCostCounter.GetUserWithLeastItemsCosts().user;
                var userWithLeastItemsInteractor = UsersHelper.GetUserInteractor(userWithLeastItems);

                if (userWithLeastItemsInteractor)
                {
                    self.OnInteractionBegin(userWithLeastItemsInteractor);
                }
            }
            // can't pick item
            else if (user)
            {
                ChatHelper.PlayerHasTooManyItems(user.userName);
            }
        }