Beispiel #1
0
    private void LoadResource()
    {
        var jsonText = Resources.Load <TextAsset>("Json/Mission");

        LoadedMissions = JsonUtility.FromJson <AllMissions>(jsonText.text);
        jsonText       = Resources.Load <TextAsset>("Json/Item");
        LoadItems      = JsonUtility.FromJson <AllItems>(jsonText.text);
        #endregion
    }
        public AllMissions GetMissions(WorldInfo world, IEnumerable <World> worlds)
        {
            AllMissions allmisions = new AllMissions();

            foreach (var map in worlds)
            {
                allmisions.missions.AddRange(world.missions.Where(p => p.theaterId == map.uniqueId));
                allmisions.missionAlerts.AddRange(world.missionAlerts.Where(p => p.theaterId == map.uniqueId));
            }
            return(allmisions);
        }
Beispiel #3
0
        //랜덤 Guid로 플레이어들을 정렬해서 미션을 분배하는 방식을 선택
        private void AssignMissions(Guid orderId)
        {
            var players = GameManager.Instance.Players.Values.OrderBy(p => p.PlayerId).ToList();

            for (int i = 0; i < players.Count; i++)
            {
                Player player = players[i];
                //PlayerState might not be updated here. However, Missions assigned to Profesor has no meaning.
                if (player.State != PlayerState.Student)
                {
                    continue;
                }

                PlayerMissionsProgress.Add(player.PlayerId, false);

                player.AssignMissions(AllMissions.Skip(i * MissionsPerPlayer).Take(MissionsPerPlayer));
            }
        }
Beispiel #4
0
        public override void OnStartClient()
        {
            base.OnStartClient();

            var interactables = FindObjectsOfType <Interactable>();

            foreach (var interactable in interactables)
            {
                AllMissions.Add(interactable.MiniGame);
            }

            //TODO : 정렬방법 더 좋은 거 가져와
            AllMissions = AllMissions.OrderBy(x => x.gameObject.transform.parent.name).ToList();

            OpenableDoors = FindObjectsOfType <OpenableDoor>().ToList();

            AssignMissions(MatchManager.Instance.Match.MatchID.ToGuid());
        }
        private bool LoadWorld()
        {
            IsWorldReady = false;
            MissionsList = null;
            WorldInfo world = EpicApi.GetWorldInfo().Value;

            if (world != null)
            {
                // MyLogger.Log.Information("{lt}: WorldInfo is loading", "Service");
                List <World> worlds     = GetWorlds(world.theaters).ToList();
                AllMissions  allmisions = GetMissions(world, worlds);
                MissionsList      = MissionMaping(worlds, allmisions);
                Top10MissionsList = TopMissions().Take(10);
                worlds            = null;
                allmisions        = null;
                SetCooldowns();
                IsWorldReady = true;
                Global.Log.Information("{lt}: WorldInfo is successfuly loaded", "Service");
                return(true);
            }
            Global.Log.Error("{lt}: WorldInfo is not loaded", "Service");
            return(false);
        }
        public IEnumerable <IMissionX> MissionMaping(List <World> worlds, AllMissions allMissions)
        {
            List <IMissionX> MissionXsList = new List <IMissionX>();

            try
            {
                for (int i = 0; i < allMissions.missionAlerts.Count; i++)
                {
                    var missionAlertsGroup = allMissions.missionAlerts[i].availableMissionAlerts
                                             .Where(c => c.missionAlertModifiers != null)
                                             .GroupBy(f => f.categoryName).ToList();
                    var theater    = worlds[i];
                    var missionMap = allMissions.missions[i];
                    for (int j = 0; j < missionAlertsGroup.Count; j++)
                    {
                        var category = missionAlertsGroup[j].Key;
                        if (category == "DudebroCategory")
                        {
                            continue;
                        }
                        var mssinsAlert = missionAlertsGroup[j].ToList();
                        for (int k = 0; k < mssinsAlert.Count; k++)
                        {
                            IMissionX mssnx = new MissionX
                            {
                                WorldName   = theater.displayName.ParseMapName(),
                                NextRefresh = missionMap.nextRefresh
                            };
                            mssnx.MissionCategory = ((Alert)Enum.Parse(typeof(Alert), category));
                            mssnx.availableUntil  = mssinsAlert[k].availableUntil;
                            var currentMap = missionMap.availableMissions.First(p => p.tileIndex == mssinsAlert[k].tileIndex);
                            var mapName    = currentMap.missionGenerator.Split('.')[1].Replace("MissionGen_", "");
                            mssnx.IsGroupMission = mapName.IndexOf("_Group", StringComparison.CurrentCultureIgnoreCase) > -1;

                            Regex r = new Regex("Mission_Select_T(\\d+)", RegexOptions.Singleline);
                            var   m = r.Match(currentMap.missionRewards.tierGroupName);
                            if (m.Success)//mission level
                            {
                                mssnx.IsStormShieldDefense = false;
                                mssnx.Tier = byte.Parse(m.Groups[1].Value);
                            }
                            else
                            {
                                r = new Regex("Outpost_Select_Theater(\\d+)", RegexOptions.Singleline);
                                m = r.Match(currentMap.missionRewards.tierGroupName);
                                if (m.Success)//stormshield detected no energy
                                {
                                    mssnx.IsStormShieldDefense = true;
                                    mssnx.Tier = 0;
                                }
                                else
                                {
                                    r = new Regex("Mission_Select_Group_T(\\d+)", RegexOptions.Singleline);
                                    m = r.Match(currentMap.missionRewards.tierGroupName);
                                    if (m.Success)//group missions
                                    {
                                        mssnx.Tier = byte.Parse(m.Groups[1].Value);
                                    }
                                    else
                                    {
                                        throw new Exception("i think this is, not defined case");
                                    }
                                }
                            }
                            //debuff//2. emoji serverinden
                            bool hasMiniboss = false;
                            foreach (var item in mssinsAlert[k].missionAlertModifiers.items)
                            {
                                mssnx.Modifiers.Add(new AlertModifierItem()
                                {
                                    ItemType = item.itemType
                                });
                                if (item.itemType == "GameplayModifier:minibossenableprimarymissionitem")
                                {
                                    hasMiniboss = true;
                                }
                            }
                            mssnx.MissionNameInfo = Utils.GetMissionName(mapName, hasMiniboss);

                            foreach (var item in currentMap.missionRewards.items)
                            {
                                var ms1x = new MissionItemX
                                {
                                    AlertReward = false,
                                    quantity    = item.quantity,
                                    ItemType    = item.itemType
                                };
                                mssnx.Items.Add(ms1x);
                            }
                            for (int l = 0; l < mssinsAlert[k].missionAlertRewards.items.Count; l++)
                            {
                                var item = mssinsAlert[k].missionAlertRewards.items[l];
                                if (item.itemType.StartsWith("#"))
                                {
                                    continue;
                                }
                                else
                                {
                                }
                                var ms2x = new MissionItemX
                                {
                                    AlertReward = true,
                                    quantity    = item.quantity,
                                    ItemType    = item.itemType
                                };
                                mssnx.Items.Add(ms2x);
                            }
                            MissionXsList.Add(mssnx);
                        }
                    }
                }
            }
            catch (Exception e2)
            {
                Global.Log.Exception(e2);
            }
            return(MissionXsList.AsEnumerable());
        }