Beispiel #1
0
        private static void CreateList(
            AgentActor agent,
            List <ActionPoint> source,
            List <ActionPoint> destination,
            EventType eventType,
            bool isDate)
        {
            PlayerActor            player      = Singleton <Manager.Map> .Instance.Player;
            int                    searchCount = Singleton <Manager.Map> .Instance.EnvironmentProfile.SearchCount;
            Dictionary <int, bool> toRelease   = DictionaryPool <int, bool> .Get();

            foreach (ActionPoint actionPoint1 in source)
            {
                if (!Object.op_Equality((Object)actionPoint1, (Object)null) && !Object.op_Equality((Object)actionPoint1.OwnerArea, (Object)null) && (actionPoint1.IsNeutralCommand && !actionPoint1.IsReserved(agent)))
                {
                    List <ActionPoint> connectedActionPoints = actionPoint1.ConnectedActionPoints;
                    if (!connectedActionPoints.IsNullOrEmpty <ActionPoint>())
                    {
                        bool flag = false;
                        foreach (ActionPoint actionPoint2 in connectedActionPoints)
                        {
                            if (!Object.op_Equality((Object)actionPoint2, (Object)null) && (!actionPoint2.IsNeutralCommand || actionPoint2.IsReserved(agent)))
                            {
                                flag = true;
                                break;
                            }
                        }
                        if (flag)
                        {
                            continue;
                        }
                    }
                    MapArea ownerArea = actionPoint1.OwnerArea;
                    bool    flag1;
                    if (!toRelease.TryGetValue(ownerArea.AreaID, out flag1))
                    {
                        toRelease[ownerArea.AreaID] = flag1 = Singleton <Manager.Map> .Instance.CheckAvailableMapArea(ownerArea.AreaID);
                    }
                    if (flag1 && (!isDate ? actionPoint1.PlayerEventType : actionPoint1.PlayerDateEventType[(int)player.ChaControl.sex]).Contains(eventType))
                    {
                        if (eventType == EventType.Search)
                        {
                            SearchActionPoint searchActionPoint = actionPoint1 as SearchActionPoint;
                            if (Object.op_Inequality((Object)searchActionPoint, (Object)null))
                            {
                                int registerId = searchActionPoint.RegisterID;
                                Dictionary <int, Environment.SearchActionInfo> searchActionLockTable = agent.AgentData.SearchActionLockTable;
                                Environment.SearchActionInfo searchActionInfo1;
                                if (!searchActionLockTable.TryGetValue(registerId, out searchActionInfo1))
                                {
                                    Environment.SearchActionInfo searchActionInfo2 = new Environment.SearchActionInfo();
                                    searchActionLockTable[registerId] = searchActionInfo2;
                                    searchActionInfo1 = searchActionInfo2;
                                }
                                if (searchActionInfo1.Count < searchCount)
                                {
                                    int       tableId  = searchActionPoint.TableID;
                                    StuffItem itemInfo = agent.AgentData.EquipedSearchItem(tableId);
                                    if (agent.SearchAreaID == 0)
                                    {
                                        if (tableId != 0 && tableId != 1 && tableId != 2 || !searchActionPoint.CanSearch(EventType.Search, itemInfo))
                                        {
                                            continue;
                                        }
                                    }
                                    else if (agent.SearchAreaID != searchActionPoint.TableID || !searchActionPoint.CanSearch(EventType.Search, itemInfo))
                                    {
                                        continue;
                                    }
                                }
                                else
                                {
                                    continue;
                                }
                            }
                        }
                        if (ExistsDesiredPAction._navMeshPath == null)
                        {
                            ExistsDesiredPAction._navMeshPath = new NavMeshPath();
                        }
                        if (agent.NavMeshAgent.CalculatePath(actionPoint1.LocatedPosition, ExistsDesiredPAction._navMeshPath) && ExistsDesiredPAction._navMeshPath.get_status() == null)
                        {
                            destination.Add(actionPoint1);
                        }
                    }
                }
            }
            DictionaryPool <int, bool> .Release(toRelease);
        }
        private static void CreateList(
            AgentActor agent,
            List <ActionPoint> source,
            List <ActionPoint> destination,
            EventType eventType,
            bool isFollow,
            bool isRain)
        {
            int   searchCount                = Singleton <Manager.Map> .Instance.EnvironmentProfile.SearchCount;
            float meshSampleDistance         = Singleton <Resources> .Instance.LocomotionProfile.ActionPointNavMeshSampleDistance;
            Dictionary <int, bool> toRelease = DictionaryPool <int, bool> .Get();

            foreach (ActionPoint actionPoint1 in source)
            {
                if (!Object.op_Equality((Object)actionPoint1, (Object)null) && !Object.op_Equality((Object)actionPoint1.OwnerArea, (Object)null) && (actionPoint1.IsNeutralCommand && !actionPoint1.IsReserved(agent)))
                {
                    List <ActionPoint> connectedActionPoints = actionPoint1.ConnectedActionPoints;
                    if (!connectedActionPoints.IsNullOrEmpty <ActionPoint>())
                    {
                        bool flag = false;
                        foreach (ActionPoint actionPoint2 in connectedActionPoints)
                        {
                            if (!Object.op_Equality((Object)actionPoint2, (Object)null) && (!actionPoint2.IsNeutralCommand || actionPoint2.IsReserved(agent)))
                            {
                                flag = true;
                                break;
                            }
                        }
                        if (flag)
                        {
                            continue;
                        }
                    }
                    if (!isRain || actionPoint1.AreaType == MapArea.AreaType.Indoor)
                    {
                        MapArea ownerArea = actionPoint1.OwnerArea;
                        bool    flag1;
                        if (!toRelease.TryGetValue(ownerArea.AreaID, out flag1))
                        {
                            toRelease[ownerArea.AreaID] = flag1 = Singleton <Manager.Map> .Instance.CheckAvailableMapArea(ownerArea.AreaID);
                        }
                        if (flag1 && (!isFollow ? actionPoint1.AgentEventType : actionPoint1.AgentDateEventType).Contains(eventType))
                        {
                            switch (eventType)
                            {
                            case EventType.Eat:
                                StuffItem       carryingItem     = agent.AgentData.CarryingItem;
                                AgentProfile    agentProfile     = Singleton <Resources> .Instance.AgentProfile;
                                ItemIDKeyPair[] canStandEatItems = Singleton <Resources> .Instance.AgentProfile.CanStandEatItems;
                                bool            flag2            = false;
                                foreach (ItemIDKeyPair itemIdKeyPair in canStandEatItems)
                                {
                                    if (carryingItem.CategoryID == itemIdKeyPair.categoryID && carryingItem.ID == itemIdKeyPair.itemID)
                                    {
                                        flag2 = true;
                                        break;
                                    }
                                }
                                ActionPointInfo outInfo;
                                if (flag2)
                                {
                                    PoseKeyPair eatDeskId1 = agentProfile.PoseIDTable.EatDeskID;
                                    PoseKeyPair eatDeskId2 = agentProfile.PoseIDTable.EatDeskID;
                                    if (actionPoint1.FindAgentActionPointInfo(EventType.Eat, eatDeskId1.poseID, out outInfo) || actionPoint1.FindAgentActionPointInfo(EventType.Eat, eatDeskId2.poseID, out outInfo))
                                    {
                                        break;
                                    }
                                    continue;
                                }
                                PoseKeyPair eatDishId = agentProfile.PoseIDTable.EatDishID;
                                if (actionPoint1.FindAgentActionPointInfo(EventType.Eat, eatDishId.poseID, out outInfo))
                                {
                                    break;
                                }
                                continue;

                            case EventType.Search:
                                SearchActionPoint searchActionPoint = actionPoint1 as SearchActionPoint;
                                if (Object.op_Inequality((Object)searchActionPoint, (Object)null))
                                {
                                    int registerId = searchActionPoint.RegisterID;
                                    Dictionary <int, AIProject.SaveData.Environment.SearchActionInfo> searchActionLockTable = agent.AgentData.SearchActionLockTable;
                                    AIProject.SaveData.Environment.SearchActionInfo searchActionInfo1;
                                    if (!searchActionLockTable.TryGetValue(registerId, out searchActionInfo1))
                                    {
                                        AIProject.SaveData.Environment.SearchActionInfo searchActionInfo2 = new AIProject.SaveData.Environment.SearchActionInfo();
                                        searchActionLockTable[registerId] = searchActionInfo2;
                                        searchActionInfo1 = searchActionInfo2;
                                    }
                                    if (searchActionInfo1.Count < searchCount)
                                    {
                                        int       tableId  = searchActionPoint.TableID;
                                        StuffItem itemInfo = agent.AgentData.EquipedSearchItem(tableId);
                                        if (agent.SearchAreaID == 0)
                                        {
                                            if (tableId != 0 && tableId != 1 && tableId != 2 || !searchActionPoint.CanSearch(EventType.Search, itemInfo))
                                            {
                                                continue;
                                            }
                                            break;
                                        }
                                        if (agent.SearchAreaID != searchActionPoint.TableID || !searchActionPoint.CanSearch(EventType.Search, itemInfo))
                                        {
                                            continue;
                                        }
                                        break;
                                    }
                                    continue;
                                }
                                break;

                            case EventType.Warp:
                                WarpPoint warpPoint = actionPoint1 as WarpPoint;
                                Dictionary <int, List <WarpPoint> > dictionary;
                                List <WarpPoint> warpPointList;
                                if (!Object.op_Inequality((Object)warpPoint, (Object)null) || !Singleton <Manager.Map> .Instance.WarpPointDic.TryGetValue(ownerArea.ChunkID, out dictionary) || (!dictionary.TryGetValue(warpPoint.TableID, out warpPointList) || warpPointList.Count < 2))
                                {
                                    continue;
                                }
                                break;
                            }
                            if (SetDesiredAllNearAction._navMeshPath == null)
                            {
                                SetDesiredAllNearAction._navMeshPath = new NavMeshPath();
                            }
                            NavMeshHit navMeshHit;
                            if (agent.NavMeshAgent.CalculatePath(actionPoint1.LocatedPosition, SetDesiredAllNearAction._navMeshPath) && SetDesiredAllNearAction._navMeshPath.get_status() == null && NavMesh.SamplePosition(actionPoint1.LocatedPosition, ref navMeshHit, meshSampleDistance, agent.NavMeshAgent.get_areaMask()))
                            {
                                destination.Add(actionPoint1);
                            }
                        }
                    }
                }
            }
            DictionaryPool <int, bool> .Release(toRelease);
        }