public static void SetGUID(LG_DistributeItem item, string guid = "")
        {
            if (string.IsNullOrEmpty(guid))
            {
                guid = Guid.NewGuid().ToString();
            }

            if (TryGetGUIDData(item.m_localTerminalLogFiles, out var existingGuid))
            {
                existingGuid.FileContent = guid;
            }
            else
            {
                if (item.m_localTerminalLogFiles == null)
                {
                    item.m_localTerminalLogFiles = new LogList();
                }

                item.m_localTerminalLogFiles.Add(new TerminalLogFileData()
                {
                    FileName    = "!PLUGIN_RESERVED_SPECIAL_GUID",
                    FileContent = guid
                });
            }
        }
        public static BuilderInfo FindInfoByItem(LG_DistributeItem item)
        {
            var guid = GetGUID(item);

            if (guid == null)
            {
                return(null);
            }

            return(_ItemBuilderDict.ContainsKey(guid) ? _ItemBuilderDict[guid] : null);
        }
        public static void PushFunctionMarker(LG_Zone zone, ZonePlacementWeights weight, ExpeditionFunction function, out LG_DistributeItem distItem, out AIG_CourseNode distNode)
        {
            var randNode    = LG_DistributionJobUtils.GetRandomNodeFromZoneForFunction(zone, function, Builder.BuildSeedRandom.Value("FindFunctionMarker"), 1f);
            var newDistItem = new LG_DistributeItem()
            {
                m_function     = function,
                m_amount       = 1.0f,
                m_assignedNode = randNode
            };

            randNode.m_zone.DistributionData.GenericFunctionItems.Enqueue(newDistItem);

            distItem = newDistItem;
            distNode = randNode;
        }
        public static void RegisterItem(LG_DistributeItem item, string guid = "", Action <GameObject> onSpawn = null)
        {
            ItemUtil.SetGUID(item, guid);

            if (onSpawn != null)
            {
                ItemMessage.OnItemSpawned += (itemGuid, gameObject) =>
                {
                    if (itemGuid != GetGUID(item))
                    {
                        return;
                    }

                    onSpawn?.Invoke(gameObject);
                };
            }
        }
        public static void RegisterItem(LG_DistributeItem item, Action <GameObject> onSpawn)
        {
            var info = FindInfoByItem(item);

            if (info == null)
            {
                info = new BuilderInfo();

                ItemUtil.SetGUID(item);

                _ItemBuilderDict.Add(ItemUtil.GetGUID(item), info);
            }

            //TODO: Refactor code
            ItemMessage.OnItemSpawned += (guid, gameObject) =>
            {
                if (guid == GetGUID(item))
                {
                    onSpawn?.Invoke(gameObject);
                }
            };
        }
 public static bool TryFetchFunctionMarker(LG_Zone zone, ZonePlacementWeights weight, ExpeditionFunction function, out LG_DistributeItem distItem)
 {
     return(TryFetchFunctionMarker(zone, weight, function, out distItem, out _));
 }
        public static bool TryFetchFunctionMarker(LG_Zone zone, ZonePlacementWeights weight, ExpeditionFunction function, out LG_DistributeItem distItem, out AIG_CourseNode distNode, bool createNew = true)
        {
            float rand  = RandomUtil.Value("LG_Distribute_WardenObjective");
            var   exist = LG_DistributionJobUtils.TryGetExistingZoneFunctionDistribution(zone, function, rand, weight, out distItem, out distNode);

            if (!exist && createNew)
            {
                PushFunctionMarker(zone, weight, function, out distItem, out distNode);
                return(true);
            }

            return(exist);
        }
Beispiel #8
0
 internal static void Postfix(LG_DistributeItem __instance, ref bool __result)
 {
     __result = ItemUtil.IsReusableItem(__instance);
 }
 public static bool IsReusableItem(LG_DistributeItem item)
 {
     return(!IsWardenObjectiveItem(item));
 }
 public static bool IsWardenObjectiveItem(LG_DistributeItem item)
 {
     return(FindInfoByItem(item)?.IsWardenObjectiveItem ?? false);
 }
 public static bool HasRegistered(LG_DistributeItem item)
 {
     return(FindInfoByItem(item) != null);
 }
 public static string GetGUID(LG_DistributeItem item)
 {
     return(GetGUID(item.m_localTerminalLogFiles));
 }