public void PickupPickerController_SubmitChoice(On.RoR2.PickupPickerController.orig_SubmitChoice orig, RoR2.PickupPickerController self, int index) { orig(self, index); ItemDef itemDef = ItemCatalog.GetItemDef(PickupCatalog.GetPickupDef(self.options[index].pickupIndex).itemIndex); if (itemDef.itemIndex != ItemIndex.None) { lastItem[(int)itemDef.tier] = itemDef.itemIndex; } }
private void PickupPickerController_SubmitChoice(On.RoR2.PickupPickerController.orig_SubmitChoice orig, PickupPickerController self, int choiceIndex) { var CommandCubes = InstanceTracker.GetInstancesList <PickupPickerController>(); CommandCubes.Remove(self); var displayToken = self.GetComponent <GenericDisplayNameProvider>().displayToken; var isModifying = Input.GetKey(ModifierKey.Value); if (isModifying) { Debug.Log("we are modifying"); if (!NetworkServer.active) { Debug.Log("We are a client!"); var i = 0; foreach (var cube in CommandCubes.ToList()) { Debug.Log("Entered foreach loop with cube # " + i); if (Vector3.Distance(self.gameObject.transform.position, cube.gameObject.transform.position) <= Radius.Value) { Debug.Log("Cube is in distance"); if (cube.GetComponent <GenericDisplayNameProvider>()?.displayToken == displayToken) { Debug.Log("The display token is valid, Writing the network options."); NetworkWriter networkWriter = cube.networkUIPromptController.BeginMessageToServer(); networkWriter.Write(0); networkWriter.Write(choiceIndex); cube.networkUIPromptController.FinishMessageToServer(networkWriter); } } //get rid of the return or it wont work in multiplayer i++; } } else { foreach (var cube in CommandCubes.ToList()) { if (Vector3.Distance(self.gameObject.transform.position, cube.gameObject.transform.position) <= Radius.Value) { if (cube.GetComponent <GenericDisplayNameProvider>()?.displayToken == displayToken) { cube.HandlePickupSelected(choiceIndex); } } } } } Debug.Log("We've exited."); orig(self, choiceIndex); }
void SubmitChoice(On.RoR2.PickupPickerController.orig_SubmitChoice orig, RoR2.PickupPickerController pickupPickerController, int integer) { if (Data.modEnabled) { if (Data.mode == DataShop.mode) { System.Type type = typeof(RoR2.PickupPickerController); System.Reflection.FieldInfo info = type.GetField("options", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); ICollection collection = info.GetValue(pickupPickerController) as ICollection; int index = 0; foreach (object item in collection) { if (index == integer) { RoR2.PickupPickerController.Option option = (RoR2.PickupPickerController.Option)item; ItemIndex itemIndex = RoR2.PickupCatalog.GetPickupDef(option.pickupIndex).itemIndex; RoR2.NetworkUIPromptController promptController = pickupPickerController.GetComponent <RoR2.NetworkUIPromptController>(); type = typeof(RoR2.NetworkUIPromptController); info = type.GetField("_currentLocalParticipant", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); RoR2.LocalUser localUser = (RoR2.LocalUser)info.GetValue(promptController); foreach (NetworkUser networkUser in RoR2.NetworkUser.readOnlyInstancesList) { if (localUser.currentNetworkUser.netId == networkUser.netId) { if (networkUser.isLocalPlayer) { DataShop.RemoveScrap(Data.GetItemTier(Data.allItemsIndexes[itemIndex]), Mathf.Min(DataShop.purchaseCost, networkUser.GetCurrentBody().inventory.GetItemCount(itemIndex))); } break; } } break; } index += 1; } } orig(pickupPickerController, integer); } ; }
private void PickupPickerController_SubmitChoice1(On.RoR2.PickupPickerController.orig_SubmitChoice orig, PickupPickerController self, int choiceIndex) { var CommandCubes = InstanceTracker.GetInstancesList <PickupPickerController>(); CommandCubes.Remove(self); var displayToken = self.GetComponent <GenericDisplayNameProvider>().displayToken; var isModifying = Input.GetKey(ModifierKey.Value); if (isModifying && self.networkUIPromptController.currentParticipantMaster) //2nd check to prevent recursion from the forloop { string choices = ""; // Collect Cubes for (int i = 0; i < CommandCubes.Count; i++) { var cube = CommandCubes[i]; if (Vector3.Distance(self.gameObject.transform.position, cube.gameObject.transform.position) <= finalRadius) { if (cube.GetComponent <GenericDisplayNameProvider>()?.displayToken == displayToken) { var network = cube.networkUIPromptController; if (!network.currentParticipantMaster) //prevents recursion and theft { choices += $"{i},"; } } } } //Send Request if (!choices.IsNullOrWhiteSpace()) { new Networking.RadiusCommandToServer(choices, choiceIndex).Send(NetworkDestination.Server); } } orig(self, choiceIndex); }