Пример #1
0
        public bool AddToPartyNew(Guid newPartyMemberGuid, PartyMemberType partyMemberType, PartyMemberStatus status, PartyMemberData existingPartyMemberData, AddToPartyFlags flags)
        {
            if (newPartyMemberGuid == Guid.Empty)
            {
                Debug.LogError("Failed to add party member: Empty Guid.");
                return(false);
            }
            if (m_guidToPartyMemberDataDictionary.ContainsKey(newPartyMemberGuid))
            {
                return(false);
            }
            if (!AllTimePartyMembers.Contains(newPartyMemberGuid))
            {
                AllTimePartyMembers.Add(newPartyMemberGuid);
            }
            if (partyMemberType == PartyMemberType.Primary && IsActiveStatus(status))
            {
                if ((flags & AddToPartyFlags.AllowRedirectToBench) != 0 && GodChallengeGameData.AnyEnabledChallenge(GodChallengeGameData.ProhibitPartyMembersPredicate))
                {
                    return(false);
                }
                if (m_activePrimaryPartyMembers.Count >= 6)
                {
                    Debug.LogError("Trying to add a primary party member to the party when already at max primary party members limit!");
                    return(false);
                }
            }
            PartyMemberData partyMemberData = existingPartyMemberData;

            if (partyMemberData == null)
            {
                partyMemberData = new PartyMemberData();
            }
            GameObject objectByID = InstanceID.GetObjectByID(newPartyMemberGuid);

            if ((bool)objectByID)
            {
                PartyMember partyMember = (!(bool)objectByID) ? null : objectByID.GetComponent <PartyMember>();
                if (partyMember == null)
                {
                    partyMember = ResourceManager.AddComponent <PartyMember>(objectByID);
                }
                AIController component = objectByID.GetComponent <AIController>();
                if (component != null)
                {
                    component.AssignPartyMemberBehavior();
                }
                partyMember.PartyMemberData = partyMemberData;
            }
            if (!(bool)objectByID && partyMemberData.MemberStatus == PartyMemberStatus.NotInParty)
            {
                Debug.LogError("Trying to add party member with no game object reference! Guid: " + newPartyMemberGuid.ToString());
                return(false);
            }
            if (!(bool)objectByID && status == PartyMemberStatus.Active)
            {
                status = PartyMemberStatus.InactiveAvailable;
            }
            partyMemberData.InitializePartyMemberData(newPartyMemberGuid, partyMemberType);
            m_guidToPartyMemberDataDictionary.Add(newPartyMemberGuid, partyMemberData);
            if (existingPartyMemberData != null)
            {
                RestorePartyMemberStatus(newPartyMemberGuid, status);
            }
            else
            {
                SetPartyMemberStatus(newPartyMemberGuid, status, flags);
            }
            return(true);
        }
Пример #2
0
        public static void LoadMobileObjectsNew()
        {
            bool   loadfromXML = PlayerPrefs.GetInt("SaveLoadRawXML", 0) != 0;
            string path        = PersistenceManager.s_mobileObjPath;

            if (!File.Exists(path))
            {
                return;
            }
            PersistenceManager.MobileObjects.Clear();
            List <ObjectPersistencePacket> list = new List <ObjectPersistencePacket>(5000);

            using (FileStream fileStream = new FileStream(path, FileMode.Open))
            {
                SharpSerializer binaryXMLSerializer = loadfromXML ? GameResources.GetTextXMLSerializer() : GameResources.GetBinaryXMLSerializer();
                int             num = (int)binaryXMLSerializer.Deserialize(fileStream);
                for (int i = 0; i < num; i++)
                {
                    try
                    {
                        ObjectPersistencePacket objectPersistencePacket = binaryXMLSerializer.Deserialize(fileStream) as ObjectPersistencePacket;
                        if (objectPersistencePacket != null)
                        {
                            list.Add(objectPersistencePacket);
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.LogError("Object load error! " + ex.ToString());
                    }
                }
                fileStream.Close();
            }
            foreach (ObjectPersistencePacket current in list)
            {
                PersistenceManager.MobileObjects.Add(current.GUID, current);
            }
            if (global::GameState.NumSceneLoads == 0)
            {
                PersistenceManager.CleanupInvalidMobileData();
            }
            List <Persistence> list2 = new List <Persistence>();

            foreach (ObjectPersistencePacket current2 in PersistenceManager.MobileObjects.Values)
            {
                if (current2.Global || current2.LevelName == Application.loadedLevelName)
                {
                    GameObject gameObject = InstanceID.GetObjectByID(current2.GUID);
                    if (gameObject == null && !current2.Packed)
                    {
                        gameObject = current2.CreateObject(true);
                        Persistence component = gameObject.GetComponent <Persistence>();
                        if (component)
                        {
                            list2.Add(component);
                        }
                    }
                    else if (gameObject != null)
                    {
                        Persistence persistence = gameObject.GetComponent <Persistence>();
                        if (persistence == null)
                        {
                            Debug.LogError(current2.ObjectName + " doesn't have a persistence component, yet was saved in mobile objects. Something isn't right.");
                            persistence = gameObject.AddComponent <Persistence>();
                        }
                        list2.Add(persistence);
                    }
                }
            }
            foreach (Persistence current3 in list2)
            {
                if (current3.GetComponent <Equippable>() != null)
                {
                    current3.Load();
                }
            }
            foreach (Persistence current4 in list2)
            {
                if (current4.GetComponent <Equippable>() == null)
                {
                    current4.Load();
                }
            }
            foreach (ObjectPersistencePacket current5 in PersistenceManager.PendingMobileObjects)
            {
                if (PersistenceManager.MobileObjects.ContainsKey(current5.GUID))
                {
                    PersistenceManager.MobileObjects[current5.GUID] = current5;
                }
                else
                {
                    PersistenceManager.MobileObjects.Add(current5.GUID, current5);
                }
            }
            PersistenceManager.PendingMobileObjects.Clear();
        }