Beispiel #1
0
            public static bool Prefix(
                // ReSharper disable InconsistentNaming
                // ReSharper disable SuggestBaseTypeForParameter
                LandmarkEntitySpawner __instance)
            // ReSharper restore SuggestBaseTypeForParameter
            // ReSharper restore InconsistentNaming
            {
                if (!Semih_Network.IsHost)
                {
                    return(true);
                }

                if (__instance.entityType != AI_NetworkBehaviourType.Llama &&
                    __instance.entityType != AI_NetworkBehaviourType.Chicken &&
                    __instance.entityType != AI_NetworkBehaviourType.Goat)
                {
                    return(true);
                }

                if (m_isInPatchMode)
                {
                    return(true);
                }

                var oldPosition = __instance.transform.position;

                try
                {
                    m_isInPatchMode = true;

                    var usableLocations = __instance.landmark.GetComponentsInChildren <MonoBehaviour>()
                                          .Where(p => m_usableItemNames.Any(u => p.name.Contains(u)))
                                          .ToArray();

                    __instance.landmark.OnLandmarkRemoved += OnLandmarkRemoved;
                    for (var i = 1; i < DomesticSpawnFactor; i++)
                    {
                        var range = Random.Range(0, usableLocations.Length);
                        __instance.transform.position = usableLocations[range].transform.position;
                        Traverse.Create(__instance).Method("CreateEntity").GetValue();
                        m_disposableAnimals.Enqueue(__instance.spawnedEntityBehaviour.ObjectIndex);
                    }
                }
                finally
                {
                    __instance.transform.position = oldPosition;
                    m_isInPatchMode = false;
                }

                return(true);
            }
Beispiel #2
0
            public static bool Prefix(
                // ReSharper disable InconsistentNaming
                // ReSharper disable SuggestBaseTypeForParameter
                LandmarkEntitySpawner __instance)
            // ReSharper restore SuggestBaseTypeForParameter
            // ReSharper restore InconsistentNaming
            {
                if (!Semih_Network.IsHost)
                {
                    return(true);
                }

                if (!m_domesticTypes.Contains(__instance.entityType))
                {
                    return(true);
                }

                if (m_isInPatchMode)
                {
                    return(true);
                }

                try
                {
                    m_isInPatchMode = true;

                    var usableLocations = __instance.landmark.GetComponentsInChildren <MonoBehaviour>()
                                          .Where(p => m_usableItemNames.Any(u => p.name.Contains(u)))
                                          .ToArray();

                    __instance.landmark.OnLandmarkRemoved += OnLandmarkRemoved;
                    for (var i = 1; i < DomesticSpawnFactor; i++)
                    {
                        var rangePosition      = Random.Range(0, usableLocations.Length);
                        var rangeDomesticTypes = Random.Range(0, m_domesticTypes.Length);

                        var position     = usableLocations[rangePosition].transform.position;
                        var domesticType = m_domesticTypes[rangeDomesticTypes];

                        var behaviour = SpawnAnimal(domesticType, position);
                        m_disposableAnimals.Enqueue(behaviour.ObjectIndex);
                    }
                }
                finally
                {
                    m_isInPatchMode = false;
                }

                return(true);
            }