// 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; } } } }
// 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); } }