public static bool PreAllowedToAdd(Equipment __instance, ref bool __result, string slot, Pickupable pickupable, bool verbose) { TechType objTechType = pickupable.GetTechType(); EquipmentType slotType = Equipment.GetSlotType(slot); if (slotType == EquipmentType.BatteryCharger && InventoryPatches.IsChip(objTechType)) { #if BELOWZERO EquipmentType eType = TechData.GetEquipmentType(objTechType); #else EquipmentType eType = CraftData.GetEquipmentType(objTechType); #endif if (eType == EquipmentType.Chip || eType == EquipmentType.BatteryCharger) { #if false Logger.Log("DEBUG: AllowedToAdd battery charger for " + objTechType.AsString(false)); #endif bool result = ((IItemsContainer)__instance).AllowedToAdd(pickupable, verbose); __result = result; return(false); } } return(true); }
internal static bool PreCanSwitchOrSwap(uGUI_Equipment __instance, ref ItemAction __result, string slotB) { if (!ItemDragManager.isDragging) { return(true); } InventoryItem draggedItem = ItemDragManager.draggedItem; if (draggedItem == null) { return(true); } Pickupable item = draggedItem.item; if (item == null) { return(true); } TechType techType = item.GetTechType(); if (InventoryPatches.IsChip(techType)) { if (Equipment.GetSlotType(slotB) == EquipmentType.BatteryCharger) { Equipment equipmentValue = __instance.equipment; InventoryItem itemInSlot = equipmentValue.GetItemInSlot(slotB); if (itemInSlot == null) { #if DEBUG_PLACE_TOOL Logger.Log("DEBUG: CanSwitchOrSwap returns SWITCH battery for " + techType.AsString(false)); #endif __result = ItemAction.Switch; return(false); } if (Inventory.CanSwap(draggedItem, itemInSlot)) { #if DEBUG_PLACE_TOOL Logger.Log("DEBUG: CanSwitchOrSwap returns SWAP battery for " + techType.AsString(false)); #endif __result = ItemAction.Swap; return(false); } #if DEBUG_PLACE_TOOL Logger.Log("DEBUG: CanSwitchOrSwap returns NONE battery for " + techType.AsString(false)); #endif __result = ItemAction.None; return(false); } } return(true); }
internal static void PostCanBite(MeleeAttack __instance, ref bool __result, GameObject target) { if (__result) // No point doing anything if the game has already concluded that it can't bite! { //GameObject target = __instance.GetTarget(collider); if (target.TryGetComponent <Player>(out Player component)) { //TechType chipType = Main.GetModTechType("DiverPerimeterDefenceChipItem"); Log.LogDebug($"MeleeAttackPatches.PostCanBite: Target is player, checking for discharge chip"); Equipment e = Inventory.main.equipment; if (Main.chipSlots.Count < 1) { e.GetSlots(EquipmentType.Chip, Main.chipSlots); } foreach (string slot in Main.chipSlots) { TechType tt = e.GetTechTypeInSlot(slot); Log.LogDebug($"MeleeAttackPatches.PostCanBite: found TechType {tt.AsString()} in slot {slot}"); if (InventoryPatches.IsChip(tt)) { InventoryItem item = e.GetItemInSlot(slot); Log.LogDebug($"MeleeAttackPatches.PostCanBite: Found discharge chip {tt.AsString()} in slot {slot}, checking for associated MonoBehaviour"); /*DiverPerimeterDefenceBehaviour behaviour = item.item.gameObject.GetComponent<DiverPerimeterDefenceBehaviour>(); * if (behaviour != null)*/ if (item.item.gameObject.TryGetComponent <DiverPerimeterDefenceBehaviour>(out DiverPerimeterDefenceBehaviour behaviour)) { Log.LogDebug($"MeleeAttackPatches.PostCanBite: MonoBehaviour found, calling Discharge()"); if (behaviour.Discharge(__instance.gameObject)) { Log.LogDebug($"MeleeAttackPatches.PostCanBite: Discharge() returned true"); __result = false; return; } else { Log.LogDebug($"MeleeAttackPatches.PostCanBite: Discharge() returned false"); } } } } } } }