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); }
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(); }