public override void Process(FabricatorItemPickup packet)
        {
            Optional <GameObject> opGameObject = GuidHelper.GetObjectFrom(packet.FabricatorGuid);

            if (opGameObject.IsEmpty())
            {
                Console.WriteLine("Could not find fabricator from guid " + packet.FabricatorGuid);
                return;
            }

            GameObject   gameObject   = opGameObject.Get();
            CrafterLogic crafterLogic = gameObject.GetComponentInChildren <CrafterLogic>(true);

            if (crafterLogic == null)
            {
                Console.WriteLine("Game object did not have a crafterLogic component!");
                return;
            }

            if (crafterLogic.numCrafted > 0)
            {
                crafterLogic.numCrafted--;

                if (crafterLogic.numCrafted == 0)
                {
                    crafterLogic.Reset();
                }
            }
        }
 static void Prefix(GhostCrafter __instance, TechType techType)
 {
     if (techType == TechType.Titanium && extraPowerConsumption > 0f)
     {
         CrafterLogic.ConsumeEnergy(__instance.powerRelay, extraPowerConsumption);
     }
 }
示例#3
0
        private Optional <GameObject> CreateVehicle(String techTypeString, String guid)
        {
            Optional <TechType> opTechType = ApiHelper.TechType(techTypeString);

            if (opTechType.IsEmpty())
            {
                Console.WriteLine("Unknown tech type: " + techTypeString);
                return(Optional <GameObject> .Empty());
            }

            TechType techType = opTechType.Get();

            GameObject techPrefab = TechTree.main.GetGamePrefab(techType);

            if (techPrefab != null)
            {
                GameObject gameObject = (GameObject)UnityEngine.Object.Instantiate(techPrefab, Vector3.zero, Quaternion.FromToRotation(Vector3.up, Vector3.up));
                gameObject.SetActive(true);
                CrafterLogic.NotifyCraftEnd(gameObject, techType);
                gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver);

                Rigidbody rigidBody = gameObject.GetComponent <Rigidbody>();
                rigidBody.isKinematic = false;

                GuidHelper.SetNewGuid(gameObject, guid);

                return(Optional <GameObject> .Of(gameObject));
            }
            else
            {
                Console.WriteLine("No prefab for tech type: " + techType);
            }

            return(Optional <GameObject> .Empty());
        }
示例#4
0
        private void OnVehiclePrefabLoaded(GameObject prefab, string guid, Vector3 spawnPosition, Quaternion spawnRotation, Optional <List <InteractiveChildObjectIdentifier> > interactiveChildIdentifiers, Optional <string> dockingBayGuid)
        {
            // Partially copied from SubConsoleCommand.OnSubPrefabLoaded
            GameObject gameObject = Utils.SpawnPrefabAt(prefab, null, spawnPosition);

            gameObject.transform.rotation = spawnRotation;
            gameObject.SetActive(true);
            gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver);
            CrafterLogic.NotifyCraftEnd(gameObject, CraftData.GetTechType(gameObject));
            Rigidbody rigidBody = gameObject.GetComponent <Rigidbody>();

            rigidBody.isKinematic = false;
            GuidHelper.SetNewGuid(gameObject, guid);
            if (interactiveChildIdentifiers.IsPresent())
            {
                VehicleChildObjectIdentifierHelper.SetInteractiveChildrenGuids(gameObject, interactiveChildIdentifiers.Get()); //Copy From ConstructorBeginCraftingProcessor
            }

            if (dockingBayGuid.IsPresent())
            {
                GameObject        dockingBayBase = GuidHelper.RequireObjectFrom(dockingBayGuid.Get());
                VehicleDockingBay dockingBay     = dockingBayBase.GetComponentInChildren <VehicleDockingBay>();

                Vehicle vehicle = gameObject.GetComponent <Vehicle>();

                dockingBay.DockVehicle(vehicle);
            }
        }
示例#5
0
 public static void Postfix(TechType techType, ref TechUnlockState __result)
 {
     if (Main.config.Hardcore && (__result != TechUnlockState.Available || !CrafterLogic.IsCraftRecipeUnlocked(techType)))
     {
         __result = TechUnlockState.Hidden;
     }
 }
示例#6
0
        public Optional <GameObject> Spawn(Entity entity, Optional <GameObject> parent)
        {
            TechType   techType = entity.TechType.Enum();
            GameObject prefab;

            if (!PrefabDatabase.TryGetPrefab(entity.ClassId, out prefab))
            {
                prefab = CraftData.GetPrefabForTechType(techType, false);
                if (prefab == null)
                {
                    return(Optional <GameObject> .Of(Utils.CreateGenericLoot(techType)));
                }
            }

            GameObject gameObject = Utils.SpawnFromPrefab(prefab, null);

            gameObject.transform.position   = entity.Position;
            gameObject.transform.localScale = entity.Scale;

            if (parent.IsPresent())
            {
                gameObject.transform.SetParent(parent.Get().transform, true);
            }

            gameObject.transform.localRotation = entity.Rotation;
            GuidHelper.SetNewGuid(gameObject, entity.Guid);
            gameObject.SetActive(true);

            LargeWorldEntity.Register(gameObject);
            CrafterLogic.NotifyCraftEnd(gameObject, techType);

            return(Optional <GameObject> .Of(gameObject));
        }
示例#7
0
文件: Logic.cs 项目: senlace/shinkai
        public static void SpawnPrefab(string objectGuid, ChildGuid[] children, TechType tech, Vector3 position, Quaternion rotation)
        {
            if (tech == TechType.None)
            {
                return;
            }

            if (tech == TechType.Cyclops)
            {
                SpawnSub(objectGuid, children, position, rotation);
                return;
            }

            var prefab = CraftData.GetPrefabForTechType(tech);

            if (prefab == null)
            {
                return;
            }

            var gameObject = UnityEngine.Object.Instantiate <GameObject>(prefab, position, rotation);

            gameObject.SetActive(true);

            GuidHelper.Set(gameObject, objectGuid);
            GuidHelper.SetChildGuids(gameObject, children);

            LargeWorldEntity.Register(gameObject);
            gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver);
            CrafterLogic.NotifyCraftEnd(gameObject, tech);

            SyncedObject.ApplyTo(gameObject);
        }
        public Optional <GameObject> Spawn(Entity entity, Optional <GameObject> parent)
        {
            TechType       techType = entity.TechType.Enum();
            GameObject     prefab;
            IPrefabRequest prefabRequest = PrefabDatabase.GetPrefabAsync(entity.ClassId);

            if (!prefabRequest.TryGetPrefab(out prefab)) // I realize its more code but Sorry couldnt stand all the warnings
            {
                prefab = CraftData.GetPrefabForTechType(techType, false);
                if (prefab == null)
                {
                    return(Optional <GameObject> .Of(Utils.CreateGenericLoot(techType)));
                }
            }

            GameObject gameObject = Utils.SpawnFromPrefab(prefab, null);

            gameObject.transform.position   = entity.Position;
            gameObject.transform.localScale = entity.Scale;

            if (parent.IsPresent())
            {
                gameObject.transform.SetParent(parent.Get().transform, true);
            }

            gameObject.transform.localRotation = entity.Rotation;
            gameObject.SetActive(true);

            NitroxIdentifier.SetNewId(gameObject, entity.Id);
            LargeWorldEntity.Register(gameObject);
            CrafterLogic.NotifyCraftEnd(gameObject, techType);

            return(Optional <GameObject> .Of(gameObject));
        }
示例#9
0
 public static void Postfix(ref string __result, TechType techType)
 {
     if (!CrafterLogic.IsCraftRecipeUnlocked(techType))
     {
         __result = Main.config.UnKnownLabel;
     }
 }
示例#10
0
 static void craftUpdateCache(CrafterLogic __instance, TechType techType)
 {
     if (isAmountChanged(techType))
     {
         crafterCache[__instance] = currentTechInfo;
     }
 }
示例#11
0
        private void OnVehiclePrefabLoaded(GameObject prefab, string guid, Optional <string> modulesEquipmentGuid, Vector3 spawnPosition, Quaternion spawnRotation, List <InteractiveChildObjectIdentifier> interactiveChildIdentifiers)
        {
            // Partially copied from SubConsoleCommand.OnSubPrefabLoaded
            GameObject gameObject = Utils.SpawnPrefabAt(prefab, null, spawnPosition);

            gameObject.transform.rotation = spawnRotation;
            gameObject.SetActive(true);
            gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver);
            CrafterLogic.NotifyCraftEnd(gameObject, CraftData.GetTechType(gameObject));
            Rigidbody rigidBody = gameObject.GetComponent <Rigidbody>();

            rigidBody.isKinematic = false;
            GuidHelper.SetNewGuid(gameObject, guid);
            SetInteractiveChildrenGuids(gameObject, interactiveChildIdentifiers); //Copy From ConstructorBeginCraftingProcessor

            SubRoot subRoot = gameObject.GetComponent <SubRoot>();

            if (subRoot != null)
            {
                if (modulesEquipmentGuid.IsPresent())
                {
                    GuidHelper.SetNewGuid(subRoot.upgradeConsole.modules.owner, modulesEquipmentGuid.Get());
                    Log.Info("Cyclop Modules Guid: " + GuidHelper.GetGuid(subRoot.upgradeConsole.modules.owner));
                }
                else
                {
                    Log.Info("Error Cyclop Modules Guid Missing Cyclop Guid: " + GuidHelper.GetGuid(subRoot.gameObject));
                }
            }
        }
示例#12
0
        public override void Process(DroppedItem drop)
        {
            Optional <TechType> opTechType = ApiHelper.TechType(drop.TechType);

            if (opTechType.IsEmpty())
            {
                Console.WriteLine("Attempted to drop unknown tech type: " + drop.TechType);
                return;
            }

            TechType techType = opTechType.Get();

            GameObject techPrefab = TechTree.main.GetGamePrefab(techType);

            if (techPrefab != null)
            {
                GameObject gameObject = (GameObject)UnityEngine.Object.Instantiate(techPrefab, ApiHelper.Vector3(drop.ItemPosition), Quaternion.FromToRotation(Vector3.up, Vector3.up));
                gameObject.SetActive(true);
                CrafterLogic.NotifyCraftEnd(gameObject, techType);
                gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver);

                GuidHelper.SetNewGuid(gameObject, drop.Guid);

                ItemDropAction itemDropAction = ItemDropAction.FromTechType(techType);
                itemDropAction.ProcessDroppedItem(gameObject);
            }
        }
示例#13
0
        public static void Postfix(ITechData data, ref List <TooltipIcon> icons)
        {
            if (data == null)
            {
                return;
            }
            var ingredientCount = data.ingredientCount;

            for (var i = 0; i < ingredientCount; i++)
            {
                var ingredient = data.GetIngredient(i);
                var techType   = ingredient.techType;
                if (!KnownTech.Contains(techType) && PDAScanner.ContainsCompleteEntry(techType))
                {
                    KnownTech.Add(techType);
                    continue;
                }
                if (!CrafterLogic.IsCraftRecipeUnlocked(techType))
                {
                    var icon = icons.Find((TooltipIcon) => TooltipIcon.sprite == SpriteManager.Get(techType) && TooltipIcon.text.Contains(Language.main.GetOrFallback(TooltipFactory.techTypeIngredientStrings.Get(techType), techType)));
                    if (icons.Contains(icon))
                    {
                        icons.Remove(icon);
                        var tooltipIcon = new TooltipIcon()
                        {
                            sprite = SpriteManager.Get(TechType.None), text = Main.Config.UnKnownTitle
                        };
                        icons.Add(tooltipIcon);
                    }
                }
            }
        }
示例#14
0
        public override void Process(FabricatorBeginCrafting packet)
        {
            Optional <GameObject> opGameObject = GuidHelper.GetObjectFrom(packet.FabricatorGuid);

            if (opGameObject.IsEmpty())
            {
                Console.WriteLine("Could not find fabricator from guid " + packet.FabricatorGuid);
                return;
            }

            GameObject gameObject = opGameObject.Get();
            Fabricator fabricator = gameObject.GetComponentInChildren <Fabricator>(true);

            if (fabricator == null)
            {
                Console.WriteLine("Game object did not have a Fabricator component!");
                return;
            }

            Optional <TechType> opTechType = ApiHelper.TechType(packet.TechType);

            if (opTechType.IsEmpty())
            {
                Console.WriteLine("Trying to build unknown tech type: " + packet.TechType + " - ignoring.");
                return;
            }

            TechType techType      = opTechType.Get();
            float    buildDuration = packet.Duration + 0.2f; // small increase to prevent this player from swiping item from remote player

            FieldInfo    logic        = typeof(Crafter).GetField("_logic", BindingFlags.Instance | BindingFlags.NonPublic);
            CrafterLogic crafterLogic = (CrafterLogic)logic.GetValue(fabricator);

            crafterLogic.Craft(techType, buildDuration);
        }
示例#15
0
        public Optional <GameObject> Spawn(Entity entity, Optional <GameObject> parent)
        {
            GameObject prefabForTechType = CraftData.GetPrefabForTechType(entity.TechType, false);

            if (prefabForTechType == null && !PrefabDatabase.TryGetPrefab(entity.ClassId, out prefabForTechType))
            {
                return(Optional <GameObject> .Of(Utils.CreateGenericLoot(entity.TechType)));
            }

            GameObject gameObject = Utils.SpawnFromPrefab(prefabForTechType, null);

            gameObject.transform.position   = entity.Position;
            gameObject.transform.localScale = entity.Scale;

            if (parent.IsPresent())
            {
                gameObject.transform.SetParent(parent.Get().transform, true);
            }

            gameObject.transform.localRotation = entity.Rotation;
            GuidHelper.SetNewGuid(gameObject, entity.Guid);
            gameObject.SetActive(true);
            // Makes movable objects movable... we can probably do this before the server sends the spawner packet?
            if (gameObject.GetComponent <Rigidbody>() == null)
            {
                gameObject.AddComponent <Rigidbody>();
            }

            LargeWorldEntity.Register(gameObject);
            CrafterLogic.NotifyCraftEnd(gameObject, entity.TechType);

            return(Optional <GameObject> .Of(gameObject));
        }
示例#16
0
 static void craftFixAmount(CrafterLogic __instance, TechType techType)
 {
     if (isAmountChanged(techType) && originalTechInfo.craftAmount == 0)
     {
         __instance.numCrafted = 0;
     }
 }
 public static void Postfix(ref bool __result)
 {
     if (Main.config.Hardcore && __result && Builder.prefab != null)
     {
         TechType techType = CraftData.GetTechType(Builder.prefab);
         __result = CrafterLogic.IsCraftRecipeUnlocked(techType);
     }
 }
示例#18
0
 public static bool OnConsoleCommand_spawn_Prefix(NotificationCenter.Notification n)
 {
     if (n != null && n.data != null && n.data.Count > 0)
     {
         string text = (string)n.data[0];
         if (UWE.Utils.TryParseEnum <TechType>(text, out TechType techType) && techType != TechType.None)
         {
             if (CraftData.IsAllowed(techType))
             {
                 foreach (IDecorationItem item in DecorationsMod.DecorationItems)
                 {
                     // If item being spawned is one of our decoration items.
                     if (techType == item.TechType)
                     {
                         // If item being spawned is one of our new flora.
                         if (!string.IsNullOrEmpty(item.ClassID) && CustomFlora.AllPlants.Contains(item.ClassID))
                         {
                             GameObject prefabForTechType = CraftData.GetPrefabForTechType(techType, true);
                             if (prefabForTechType != null)
                             {
                                 int num = 1;
                                 int num2;
                                 if (n.data.Count > 1 && int.TryParse((string)n.data[1], out num2))
                                 {
                                     num = num2;
                                 }
                                 float maxDist = 12f;
                                 if (n.data.Count > 2)
                                 {
                                     maxDist = float.Parse((string)n.data[2]);
                                 }
                                 Debug.LogFormat("Spawning {0} {1}", new object[] { num, techType });
                                 for (int i = 0; i < num; i++)
                                 {
                                     GameObject gameObject = global::Utils.CreatePrefab(prefabForTechType, maxDist, i > 0);
                                     LargeWorldEntity.Register(gameObject);
                                     CrafterLogic.NotifyCraftEnd(gameObject, techType);
                                     gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver);
                                     // Hide plant, show seed and enable pickupable
                                     PrefabsHelper.HidePlantAndShowSeed(gameObject.transform, item.ClassID);
                                 }
                             }
                             else
                             {
                                 ErrorMessage.AddDebug("Could not find prefab for TechType = " + techType);
                             }
                             // Dont call original function if item being spawned is one of our new flora.
                             return(false);
                         }
                         break;
                     }
                 }
             }
         }
     }
     // Give back execution to original function.
     return(true);
 }
示例#19
0
 private static void UpdatePostfix(LeakingRadiation __instance)
 {
     if (__instance.radiationFixed && !CrafterLogic.IsCraftRecipeUnlocked(DeathRun.filterChip.TechType) && Config.POISONED.Equals(DeathRun.config.surfaceAir))
     {
         PDAEncyclopedia.Add("FilterChip", true);
         KnownTech.Add(DeathRun.filterChip.TechType, true);
         //DeathRun.saveData.playerSave.setCue("FilterChip", 5);
     }
 }
示例#20
0
        public override void Process(VehicleSpawned packet)
        {
            vehicles.AddVehicle(packet.VehicleModel);

            GameObject gameObject = SerializationHelper.GetGameObject(packet.SerializedData);

            LargeWorldEntity.Register(gameObject);
            CrafterLogic.NotifyCraftEnd(gameObject, CraftData.GetTechType(gameObject));
            gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver);
        }
示例#21
0
 internal static void Prefix(CrafterLogic __instance, GameObject target, TechType techType)
 {
     if (techType == SeaTruckScannerModule_Prefab.TechTypeID)
     {
         if (!target.activeSelf)
         {
             target.SetActive(true);
         }
     }
 }
示例#22
0
 public static void GivePlayerItem(Pickupable item)
 {
     if (Inventory.main.HasRoomFor(item))
     {
         if (Inventory.main.Pickup(item))
         {
             CrafterLogic.NotifyCraftEnd(Player.main.gameObject, item.GetTechType());
         }
     }
 }
        // Token: 0x0600000B RID: 11 RVA: 0x00002A8C File Offset: 0x00000C8C
        private void OnSubPrefabLoaded(GameObject prefab)
        {
            GameObject gameObject = global::Utils.SpawnPrefabAt(prefab, null, this.spawnPosition);

            gameObject.transform.localScale = new Vector3(this.x, this.y, this.z);
            gameObject.transform.rotation   = this.spawnRotation;
            gameObject.SetActive(true);
            gameObject.SendMessage("StartConstruction", 1);
            LargeWorldEntity.Register(gameObject);
            CrafterLogic.NotifyCraftEnd(gameObject, CraftData.GetTechType(gameObject));
        }
        public override void Process(FabricatorBeginCrafting packet)
        {
            GameObject gameObject = GuidHelper.RequireObjectFrom(packet.FabricatorGuid);
            Fabricator fabricator = gameObject.RequireComponentInChildren <Fabricator>(true);

            float buildDuration = packet.Duration + 0.2f; // small increase to prevent this player from swiping item from remote player

            FieldInfo    logic        = typeof(Crafter).GetField("_logic", BindingFlags.Instance | BindingFlags.NonPublic);
            CrafterLogic crafterLogic = (CrafterLogic)logic.GetValue(fabricator);

            crafterLogic.Craft(packet.TechType, buildDuration);
        }
示例#25
0
            static void craftFixEnergyConsumption(GhostCrafter __instance, TechType techType)
            {
                if (!Main.config.bulkCrafting.changePowerConsumption)
                {
                    return;
                }

                if (isAmountChanged(techType))
                {
                    CrafterLogic.ConsumeEnergy(__instance.powerRelay, (currentCraftAmount - 1) * 5f);                     // and 5f also consumed in the vanilla method
                }
            }
        public static void Postfix(ref StringBuilder sb, TechType techType)
        {
            PDAScanner.EntryData entryData = PDAScanner.GetEntryData(techType);
            if (entryData == null || PDAScanner.ContainsCompleteEntry(techType) || CrafterLogic.IsCraftRecipeUnlocked(techType))
            {
                return;
            }

            sb.Clear();
            TooltipFactory.WriteTitle(sb, Main.config.UnKnownTitle);
            TooltipFactory.WriteDescription(sb, Main.config.UnKnownDescription);
        }
示例#27
0
        public override void Process(GhostCrafterBeginCrafting packet)
        {
            GameObject   gameObject   = NitroxEntity.RequireObjectFrom(packet.GhostCrafterId);
            GhostCrafter ghostCrafter = gameObject.RequireComponentInChildren <GhostCrafter>(true);

            float buildDuration = packet.Duration + 0.2f; // small increase to prevent this player from swiping item from remote player

            FieldInfo    logic        = typeof(Crafter).GetField("_logic", BindingFlags.Instance | BindingFlags.NonPublic);
            CrafterLogic crafterLogic = (CrafterLogic)logic.GetValue(ghostCrafter);

            crafterLogic.Craft(packet.TechType.ToUnity(), buildDuration);
        }
示例#28
0
 public static bool OnConsoleCommand_item_Prefix(NotificationCenter.Notification n)
 {
     if (n != null && n.data != null && n.data.Count > 0)
     {
         string text = (string)n.data[0];
         if (UWE.Utils.TryParseEnum <TechType>(text, out TechType techType) && techType != TechType.None)
         {
             if (CraftData.IsAllowed(techType))
             {
                 foreach (IDecorationItem item in DecorationsMod.DecorationItems)
                 {
                     // If item being spawned is one of our decoration items.
                     if (techType == item.TechType)
                     {
                         // If item being spawned is one of our new flora.
                         if (!string.IsNullOrEmpty(item.ClassID) && CustomFlora.AllPlants.Contains(item.ClassID))
                         {
                             int num = 1;
                             if (n.data.Count > 1 && int.TryParse((string)n.data[1], out int num2))
                             {
                                 num = num2;
                             }
                             for (int i = 0; i < num; i++)
                             {
                                 GameObject gameObject = CraftData.InstantiateFromPrefab(techType, false);
                                 if (gameObject != null)
                                 {
                                     gameObject.transform.position = MainCamera.camera.transform.position + MainCamera.camera.transform.forward * 3f;
                                     CrafterLogic.NotifyCraftEnd(gameObject, techType);
                                     Pickupable component = gameObject.GetComponent <Pickupable>();
                                     if (component != null && !Inventory.main.Pickup(component, false))
                                     {
                                         ErrorMessage.AddError(Language.main.Get("InventoryFull"));
                                         // Hide plant, show seed and enable pickupable
                                         PrefabsHelper.HidePlantAndShowSeed(gameObject.transform, item.ClassID);
                                     }
                                 }
                             }
                             // Dont call original function if item being spawned is one of our new flora.
                             return(false);
                         }
                         break;
                     }
                 }
             }
         }
     }
     // Give back execution to original function.
     return(true);
 }
        public override void Process(FabricatorItemPickup packet)
        {
            GameObject   gameObject   = NitroxIdentifier.RequireObjectFrom(packet.FabricatorId);
            CrafterLogic crafterLogic = gameObject.RequireComponentInChildren <CrafterLogic>(true);

            if (crafterLogic.numCrafted > 0)
            {
                crafterLogic.numCrafted--;

                if (crafterLogic.numCrafted == 0)
                {
                    crafterLogic.Reset();
                }
            }
        }
示例#30
0
        private void GiveReward(TechType techType)
        {
            GameObject gameObject = CraftData.InstantiateFromPrefab(techType, false);

            if (gameObject != null)
            {
                gameObject.transform.position = MainCamera.camera.transform.position + MainCamera.camera.transform.forward * 2f;
                CrafterLogic.NotifyCraftEnd(gameObject, techType);
                Pickupable component = gameObject.GetComponent <Pickupable>();
                if (component != null && !Inventory.main.Pickup(component, false))
                {
                    ErrorMessage.AddError(Language.main.Get("InventoryFull"));
                }
            }
        }