コード例 #1
0
            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);
            }
コード例 #2
0
            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);
            }