static bool Prefix(Region __instance, ref bool __result, UnitHandle unitHandle, ItemPutInfo putInfo, bool changed, HomeRegionType ___regionType) { if (!enabled || ___regionType != HomeRegionType.Farm) { return(true); } Slot slot = CreateSlotFromRSlot(unitHandle); if (slot == null) { Dbgl("slot is null"); return(true); } if (__instance.IsValidCell(putInfo.cellIndex)) { Dbgl("valid cell"); return(true); } CellIndex oldSlot = slot.info.cellIndex; slot.info = putInfo; ItemHomeSystemUnitCmpt component = slot.unitObjInfo.Item.GetComponent <ItemHomeSystemUnitCmpt>(); if (changed) { slot.unit.PutDownVersion = 71; } Area area = Module <UnitFactory> .Self.GetArea(putInfo.cellIndex, putInfo.areaRot, component, component.Rotate > 0, slot.unit.PutDownVersion); if (area == null) { __result = false; return(false); } slot.area = area; slot.unitObjInfo = new UnitObjInfo(slot.unitObjInfo.Item, area); outsideUnits.Remove(oldSlot); if (!outsideUnits.ContainsKey(slot.info.cellIndex)) { outsideUnits.Add(slot.info.cellIndex, slot); } else { outsideUnits[slot.info.cellIndex] = slot; } var mySlot = CreateRSlotFromSlot(slot); typeof(Region).GetMethod("AddSlot", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, new object[] { mySlot }); __result = true; return(false); }
static bool Prefix(Unit unit) { if (!enabled) { return(true); } if (Module <TakeHomeItemModule> .Self.IsTaking) { return(false); } Slot slot = outsideUnits.Values.ToList().Find((Slot e) => e.unit == unit); if (slot == null) { return(true); } Dbgl("taking up outside item"); ItemPutInfo putInfoByUnit = slot.info; ItemObject itemByCellIndex = slot.unitObjInfo.Item; string resPath = itemByCellIndex.ItemBase.GetMountData().resPath; LayeredRegion layeredRegion = (LayeredRegion)typeof(FarmModule).GetField("layeredRegion", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(Module <FarmModule> .Self); Region itemLayer = (Region)typeof(LayeredRegion).GetField("itemLayer", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(layeredRegion); var mySlot = AccessTools.FieldRefAccess <Region, List <object> >(itemLayer, "slots").Find((object o) => typeof(Region).GetNestedType("Slot", BindingFlags.NonPublic | BindingFlags.Instance).GetField("unit").GetValue(o) == slot.unit); UnitHandle unitHandle = (UnitHandle)mySlot; if (unitHandle != null) { typeof(Region).GetMethod("RemoveSlot", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(itemLayer, new object[] { mySlot }); Dbgl("unit handle is not null"); Module <TakeHomeItemModule> .Self.TakeUp(new HomeItemThing(true, string.Empty, putInfoByUnit, unitHandle, resPath, itemByCellIndex)); } return(false); }