void SelectExpires() //만기일 온 애들 큐에 집어넣는 과정.
    {
        string visitMsg = UIGeneralTextsManager.GetUIGeneralText("quickMessage", "visited");
        int    idx      = 0;

        while (idx < charaList.Count)
        {
            if (charaList[idx].hasCommission && !charaList[idx].haveComeBeforeExpire)   //기본 조건.
            {
                if (!expired(charaList[idx]))
                {
                    idx++;
                    continue;
                }

                CharactorIdea expireOne = charaList[idx];
                charaList.RemoveAt(idx);
                expireCharaQue.Enqueue(new VisitChara(InGameTimeManager.GetInstance().GetNowInGameTimeStamp(), expireOne));
                QuickMessageUIManager.GetInstance().ShowQuickMessage(expireOne.CharaName + visitMsg);
                Debug.Log(expireOne.CharaName + "만기 큐에 들어옴. 현재시각 - " + InGameTimeManager.GetInstance().GetNowTime()
                          + "캐릭터의 만기는" + expireOne.GetExpire() + "였음"
                          );
            }
            else
            {
                idx++;
            }
        }
    }
    void CheckMonsterShowUp()
    {
        mobShowUpScreen.SetActive(false);
        int    daysAfter  = InGameTimeManager.GetInstance().GetDaysAfterGameStart();
        string noticeBase = UIGeneralTextsManager.GetUIGeneralText("mobshowup", "notice");

        mobShowUpExitBtn.onClick.AddListener(() => { mobShowUpScreen.SetActive(false); });

        for (int i = (int)E_Monster.GARGOYLE; i < (int)E_Monster.MAX; i++)    //가고일 부터 체크 시작.
        {
            E_Monster mob       = (E_Monster)i;
            int       showUpDay = MobEviInfoManager.GetInstance().GetMonsterShowUpDay(mob);
            string    mobname   = MobEviInfoManager.GetInstance().GetMobName(mob);
            string    notice    = noticeBase.Replace("[0]", mobname);

            if (daysAfter == showUpDay)
            {
                AudioThing.GetInstance().PlaySFX(AudioThing.E_SFX.GROWL);
                PhaseManager.GetInstance().MonsterShowUp(mob);  //몬스터 출현하도록 처리

                showUpMobStampedImage.sprite = SpriteManager.GetInstance().GetMobStampedSprite(mob);
                mobShowUpText.text           = notice;
                mobShowUpScreen.SetActive(true);
                PhaseManager.GetInstance().LogDebug();
                return;
            }
        }
    }
Пример #3
0
    public void SetExpireAfterDays(int days)
    {
        InGameTime exTemp = InGameTimeManager.GetInstance().GetNowTime();

        exTemp.PlusDays(days);
        exTemp.SetInGameTimeHourMin((uint)(Random.Range(Constant.dayStartHour, (Constant.dayEndHour - 1))), 0);
        expireDate = exTemp;
    }
Пример #4
0
    /*
     * 퀘스트 목록 셑팅
     */
    void InitQuestList()
    {
        questCap = 0;

        for (int i = 0; i < questsListContent.transform.childCount; i++)
        {
            Destroy(questsListContent.transform.GetChild(i).gameObject);
        }

        List <Quest> nowQuests = QuestManager.GetInstance().GetNowWrittenQuestList();

        InGameTime nowTime = InGameTimeManager.GetInstance().GetNowTime();

        var hq = from q in nowQuests
                 where q.ExpireDate.GetDays() > nowTime.GetDays() + 1   //현재 일 보다 이틀 많은 일 수 (헌터의 만기는 의뢰인의 만기보다 하루 빨라야함.)
                 select q;

        List <Quest> hunterAbleQuesttemp = hq.ToList <Quest>(); //이 헌터가 수임 가능한 퀘스트만 고른것 (만기 상태가)

        hunterAbleQuest = new List <Quest>();

        for (int i = 0; i < hunterAbleQuesttemp.Count; i++)
        {
            hunterAbleQuest.Add(hunterAbleQuesttemp[i]);
        }

        for (int i = 0; i < hunterAbleQuest.Count; i++)
        {
            //대체가 도대체 어째서 i를 쓰면 0 번째 자리에서도 i 맨 마지막이 들어가는 거야????????
            int        num       = i;
            GameObject iqBtnTemp = Instantiate(iquestBtn, questsListContent.transform);
            SetTxtsIQBtn(hunterAbleQuest[num], iqBtnTemp);  //퀘스트 버튼.

            Quest a = hunterAbleQuest[num];

            iqBtnTemp.GetComponent <Button>().onClick.AddListener(
                () =>
            {
                qradio.SelectIQBtn(
                    num, questsListContent,
                    () =>
                {
                    AudioThing.GetInstance().PlaySFX(AudioThing.E_SFX.SLIDE);
                    //    Debug.Log(i + "번째 온클릭 란다식 메소드 진입."
                    //      + hunterAbleQuest[num].ToString()
                    //       );
                    OnClickIQBtn(hunterAbleQuest[num], num);            //왜 이 헌터에이블에 접근을 못하지?
                    //도대체 왜 a 대신 hunterAbleQuest[i] 로 들어가면 접근을 못핮;???????????????????
                }
                    );
            }
                );

            qradio.SetQDic(num, hunterAbleQuest[num]);
        }
    }
Пример #5
0
    int GetNumOfQPM()
    {
        int basic = 9;
        int days  = InGameTimeManager.GetInstance().GetDaysAfterGameStart();
        int plus  = (int)(days / 7); //일주일 마다 하나씩 올림.

        if (plus > 90)
        {
            plus = 90;                             //그래도 한 번에 최대는 99
        }
        return(Random.Range(1, basic + plus + 1)); //(1~9)  ~ (1~99)
    }
    bool expired(CharactorIdea idea)
    {
        uint nowTime    = InGameTimeManager.GetInstance().GetNowInGameTimeStamp();
        uint expireTime = idea.GetExpire().InGameTimeMinuteStamp;

        if (expireTime <= nowTime)
        {
            return(true);
        }
        //나중에 만기시각 몇 시간 정도 까지 랜덤? 하게 봐줄지 결정하기.
        return(false);
    }
Пример #7
0
    public void Update()
    {
        if (!dayDone && !dayOnGoing)    //데이 오프.
        {
            return;
        }

        if (dayDone)    //하루가 끝났으면.
        {
            dayOnGoing      = false;
            wineDineCursor += Time.deltaTime;

            if (wineDineCursor >= wineDineCheck)
            {
                wineDineCursor = 0f;
                if (false == RoomEventManager.GetInstance().IsNowWineAndDine)   //접대 중이 아니라면
                {
                    EndOfDay();
                }
            }
            return;
        }

        else if (dayOnGoing) //하루의 시작
        {
            timeCursor     += Time.deltaTime;
            wineDineCursor += Time.deltaTime;

            if (timeCursor >= time15Min)
            {
                timeCursor = 0f;
                InGameTimeManager.GetInstance().Update15Minute(out dayDone); //15분 지나게 처리.
                MainUIManager.GetInstance().AdjustTime(InGameTimeManager.GetInstance().Hour, InGameTimeManager.GetInstance().Minute);
            }

            if (wineDineCursor >= wineDineCheck)
            {
                wineDineCursor = 0f;
                if (false == RoomEventManager.GetInstance().IsNowWineAndDine)   //접대 중이 아니라면
                {
                    VisitNextOne();
                }
                else
                {
                    //접대 중이면. 만기 방문자 부름.
                    CharactorManager.GetInstance().SelectExpireVisit();
                }
            }
        }
    }
    void ClientCommissionCheckCalculateLastincome()   //만기여부와 등등을 고려하여 정산할것!! 클라이언트가 qc 정산 하는 단계!
    {
        ClientIdea client = CharactorFrame.GetInstance().clientIdea;
        int        outDue = 0;

        if (client.haveComeBeforeExpire)
        {
            InGameTime clientExpire = client.GetExpire();
            InGameTime nowTime      = InGameTimeManager.GetInstance().GetNowTime();
            outDue = nowTime.GetDaysGap(clientExpire);
        }
        int lastClientPayment = PayFormula.CalculateClientRequestLastPayment(client.OriginOrderedQuest,
                                                                             client.DaysExpire,
                                                                             EventParameterStorage.GetInstance().QuestCompareCompleteness, outDue);

        GoldManager.GetInstance().AdjustGold(lastClientPayment, GoldManager.E_PayType.FROM_CLIENT);
    }
    void GoBackExpires() //만기일 온 애들 기다리다가 그냥 가는 애들.
    {
        string leaveMsg = UIGeneralTextsManager.GetUIGeneralText("quickMessage", "leaved");

        if (expireCharaQue.Count <= 0)
        {
            return;
        }

        uint nowTime = InGameTimeManager.GetInstance().GetNowInGameTimeStamp();

        VisitChara visited;

        visited = expireCharaQue.Peek();

        while (visited != null)  //1시간 기다리다 감.
        {
            if (visited.comeTimeStamp + 60 >= nowTime)
            {
                CharactorIdea goback = expireCharaQue.Dequeue().one;
                goback.haveComeBeforeExpire = true;
                visitedToday.Add(goback);
                QuickMessageUIManager.GetInstance().ShowQuickMessage(goback.CharaName + leaveMsg);
                Debug.Log(goback.CharaName + "만기 기다리다 그냥 돌아감 현재 시각 " + InGameTimeManager.GetInstance().GetNowTime()
                          + "캐릭터의 만기는" + goback.GetExpire() + "였음  비지트 타음스탬프 =" + visited.comeTimeStamp + "현재시각 타임스탬프 ="
                          + nowTime
                          );
                if (expireCharaQue.Count <= 0)
                {
                    return;
                }
                visited = expireCharaQue.Peek();
            }
            else
            {
                return;
            }
        }
    }
Пример #10
0
    public void NewStartGame()  //완전 새로운 게임 시작.
    {
        SaveManager.GetInstance().DeleteSavedGame();

        SettingUIManager.GetInstance().PauseBtn.interactable = true;
        Debug.Log("게임매니져 - 뉴스타트게임-");

        InGameTimeManager.GetInstance().SetMainTime(1, 1, 1, 1, 1);
        WholeMonsterRiskManager.GetInstance().Init();
        PhaseManager.GetInstance().InitForNewStart();
        GoldManager.GetInstance().SetGold(Constant.newStartGolds);
        QuestManager.GetInstance().QuestDic.Clear();
        Inventory.GetInstance().MobEvidenceInven.Clear();
        Inventory.GetInstance().WeaponInventory.Clear();
        GameEndJudgeManager.GetInstance().InitForNewStart();
        CharactorManager.GetInstance().InitForNewStart();
        TextManager.GetInstance().DistributedNames.Clear();

        //모킹/
        for (int i = 0; i < (int)E_Monster.MAX; i++)
        {
            for (int j = 0; j < (int)E_Evidence.MAX; j++)
            {
                Inventory.GetInstance().AddMobEvi(new QuestPerMob((E_Monster)i, (E_Evidence)j, 3));
            }
        }
        List <Weapon> temp = new List <Weapon>();
        Weapon        w    = WeaponInfoManager.GetInstance().CreateWeapon(E_Weapon.AXE);

        temp.Add(w);
        Inventory.GetInstance().AddWeaponsToInven(temp);

        //모킹종료


        StartCoroutine(LoadingScene("QuestRoom_1", StartNewMorning));
    }
Пример #11
0
    public void SavePrepare()
    {
        lang  = LanguageManager.GetInstance().Language;
        golds = GoldManager.GetInstance().Gold;
        goldRunOutContinuityDays = GameEndJudgeManager.GetInstance().GoldRunOutContinuityDays;
        threatMaxContinuityDays  = GameEndJudgeManager.GetInstance().ThreatMaxContinuityDays;
        savedDate = InGameTimeManager.GetInstance().GetNowTime();

        charactorList_Client = CharactorManager.GetInstance().GetClientListSave();
        charactorList_Hunter = CharactorManager.GetInstance().GetHunterListSave();

        questDic          = QuestManager.GetInstance().QuestDic;
        inventoryMobEvi   = Inventory.GetInstance().MobEvidenceInven;
        inventoryWeapon   = Inventory.GetInstance().GetWeaponInvenSave();
        threatState       = WholeMonsterRiskManager.GetInstance().MonsterRiskList;
        threatHunters     = WholeMonsterRiskManager.GetInstance().HuntersWhohaveQuest;
        phaseMobShowedUp  = PhaseManager.GetInstance().MobShowedUp;
        phaseMobOpen      = PhaseManager.GetInstance().MobOpen;
        phaseEvidenceOpen = PhaseManager.GetInstance().EvidenceOpen;
        phaseUpgradeOpen  = PhaseManager.GetInstance().UpgradeOpen;
        phaseInteriorOpen = PhaseManager.GetInstance().InteriorOpen;

        distributedNames = TextManager.GetInstance().DistributedNames;
    }
Пример #12
0
    public void StartNewMorning()
    {
        InGameTimeManager.GetInstance().NewMorningStart();  //하루 올라가고 9시 00분.
        Debug.Log(InGameTimeManager.GetInstance().GetNowTime());
        string dateTxt = LanguageManager.GetInstance().GetDateString(InGameTimeManager.GetInstance().GetNowTime());

        MainUIManager.GetInstance().AdjustYMD(dateTxt);
        MainUIManager.GetInstance().AdjustTime(InGameTimeManager.GetInstance().Hour, InGameTimeManager.GetInstance().Minute);

        dayOnGoing     = true;
        dayDone        = false;
        timeCursor     = 0f;
        wineDineCursor = 0f;

#if UNITY_ANDROID
        if (Social.localUser.authenticated)
        {
            if (InGameTimeManager.GetInstance().GetNowTime().GetDaysGap(Constant.GameStartTime) >= 10)
            {
                Social.ReportProgress(GPGSIds.achievement_hold_10_days, 100.0, (sucess) =>
                {
                });
            }
            if (InGameTimeManager.GetInstance().GetNowTime().GetDaysGap(Constant.GameStartTime) >= 20)
            {
                Social.ReportProgress(GPGSIds.achievement_hold_20_days, 100.0, (sucess) =>
                {
                });
            }

            Social.ReportScore(GoldManager.GetInstance().Gold, GPGSIds.leaderboard_gold_leaderboard, (s) =>
            {
            });
        }
#endif
    }
Пример #13
0
    public string GetClientText(E_ClientState state, ClientIdea client)
    {
        string          result   = "";
        Client_TextData textData = clientText.dataArray[(int)state];

        switch (LanguageManager.GetInstance().Language)
        {
        case E_Language.KOREAN:
            result = textData.Charatextkor;
            break;

        case E_Language.ENGLISH:
            result = textData.Charatexteng;
            break;
        }
        int deposit = PayFormula.CalculateClientRequestDeposit(client.OriginOrderedQuest, client.DaysExpire);


        switch (state)  //치환해야하는 문자열의 경우.
        {
        case E_ClientState.COMMISSION:
            int clientLastPayin100per = PayFormula.CalculateClientRequestLastPayment(
                client.OriginOrderedQuest, client.DaysExpire, 100f, 0
                );
            result = result.Replace("[0]", deposit.ToString());
            result = result.Replace("[1]", clientLastPayin100per.ToString());
            break;

        case E_ClientState.COMMISION_MAKE_DONE:

            result = result.Replace("[0]", client.DaysExpire.ToString());
            result = result.Replace("[1]", deposit.ToString());
            break;

        case E_ClientState.CHECK_NO_EXPIRE:
            result = result.Replace("[0]", client.DaysExpire.ToString());
            break;

        case E_ClientState.CHECK_IMPERFACT_00:      //뺐을 착수금으로 치환
            result = result.Replace("[0]", deposit.ToString());
            break;

        case E_ClientState.CHECK_IMPERFACT_50:      //성공보수금으로 치환
        case E_ClientState.CHECK_IMPERFACT_80:
        case E_ClientState.CHECK_IMPERFACT_95:
        case E_ClientState.CHECK_PERFACT:
            int outDue = 0;
            if (client.haveComeBeforeExpire)
            {
                InGameTime clientExpire = client.GetExpire();
                InGameTime nowTime      = InGameTimeManager.GetInstance().GetNowTime();
                outDue = nowTime.GetDaysGap(clientExpire);
            }
            int lastClientPayment = PayFormula.CalculateClientRequestLastPayment(client.OriginOrderedQuest,
                                                                                 client.DaysExpire,
                                                                                 EventParameterStorage.GetInstance().QuestCompareCompleteness, outDue);

            result = result.Replace("[0]", lastClientPayment.ToString());
            break;
        }

        return(result);
    }
Пример #14
0
    public List <QuestPerMob> HuntingAtNight(out bool isLastDayHunt)   //위협 매니저에서 밤에 얘를 호출.
    {
        Quest quest = QuestManager.GetInstance().GetQuest(associatedQuestKey);

        if (quest == null || !hasCommission)
        {
            isLastDayHunt = true;
            Debug.LogError("헌팅 나이트 불려오면 안됨.");
            return(null);
        }

        InGameTime nowTime            = InGameTimeManager.GetInstance().GetNowTime();
        InGameTime questExpireDay     = questHuntExpireDay;
        int        wholeQTerm         = questExpireDay.GetDaysGap(questTakeOnDay);
        int        daysAfterTakeQuest = nowTime.GetDaysGap(questTakeOnDay); //0~ 부터 기간-1 까지 나옮.

        if (wholeQTerm <= 0)
        {
            isLastDayHunt = true;
            Debug.LogError("헌터" + charaName + " 헌팅나이트 수임 부터 만기 까지 0일 이하임." + wholeQTerm + "퀘스트 만기 = " + questExpireDay + "퀘스트 입기" + questTakeOnDay);
            return(null);
        }

        if (daysAfterTakeQuest >= wholeQTerm)
        {
            isLastDayHunt = true;
            Debug.Log(charaName + " 헌터는 이미 만기일이 지났으므로 사냥을 하지 않아용");
            return(null);
        }



        if (huntedList == null)
        {
            huntedList = new List <QuestPerMob>();
        }

        List <QuestPerMob> orderedQuest = quest.QuestList;

        List <QuestPerMob> tonightHunted;

        float huntCapTillTonight = (GetHuntCapabillityForRealhunt() / wholeQTerm) * (daysAfterTakeQuest + 1);

        //능력치를 전체 기간으로 나누고 수임한 날부터 이 밤까지 곱해서 나오는 값.

        Debug.LogFormat("{0}의 밤사냥 {1} 일 기간 , 수임날 부터 {2} 지남 , 전체 헌터 무기포함 능력치 = {3} , 오늘 사용할 수 있는 능력치 = {4} , 지금까지 잡은 목록 = {5}",

                        charaName, wholeQTerm, daysAfterTakeQuest, GetHuntCapabillityForRealhunt(), huntCapTillTonight, huntedList.DebugString());


        if (daysAfterTakeQuest == wholeQTerm - 1)   //마지막 날임.
        {
            isLastDayHunt = true;
            tonightHunted = HuntCompactOrder(orderedQuest, huntCapTillTonight);
            Debug.LogFormat("{0}이 오늘 잡은 목록 - 컴팩트 오더 {1}", charaName, tonightHunted.DebugString());

            huntedList.AddQPMList(tonightHunted);
            BrakeGambleRentalWeapons(); //사냥 할때 마다 갬블을 한 번씩.
            return(tonightHunted);
        }

        isLastDayHunt = false;

        //수임~ 만기 까지의 마지막 밤이 아닌 밤임.
        tonightHunted = HuntBigOrder(orderedQuest, huntCapTillTonight);
        Debug.LogFormat("{0}이 오늘 잡은 목록 - 빅 오더 {1}", charaName, tonightHunted.DebugString());
        huntedList.AddQPMList(tonightHunted);
        BrakeGambleRentalWeapons();
        return(tonightHunted);
    }
Пример #15
0
    public bool LoadGame()  //이닛 후에 불려져야함.
    {
#if UNITY_ANDROID
        if (st == null || !savedGame)
        {
            Debug.Log("로드게임 - 세이브 데이타가 존재하지 않음 또는 " + savedGame);
            return(false);
        }


        if (false == PlayGamesPlatform.Instance.localUser.authenticated)
        {
            PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder().EnableSavedGames().Build();
            PlayGamesPlatform.InitializeInstance(config);
            PlayGamesPlatform.DebugLogEnabled = true;
            PlayGamesPlatform.Activate();
            Social.localUser.Authenticate((bool success, string msg) =>
            {
                if (false == success)
                {
                    Debug.Log("로드 실패 - 로그인 불가");
                    return;
                }
            });
        }
        ISavedGameClient saveClient = PlayGamesPlatform.Instance.SavedGame;
        saveClient.OpenWithAutomaticConflictResolution(Constant.saveFileNameInGPGSCloud, DataSource.ReadCacheOrNetwork, ConflictResolutionStrategy.UseMostRecentlySaved, (status, metaData) =>
        {
            if (status != SavedGameRequestStatus.Success)
            {
                Debug.Log("로드 실패 - 메타데이타 오픈 불가");
                return;
            }
            saveClient.ReadBinaryData(metaData, (readStatus, savedData) =>
            {
                if (readStatus == SavedGameRequestStatus.Success)
                {
                    Debug.Log("바이너리 데이타 리드 읽기 성공!");
                    byte[] savedDataByteArr = savedData;

                    BinaryFormatter bt = new BinaryFormatter();
                    MemoryStream ms    = new MemoryStream(savedDataByteArr);
                    st = bt.Deserialize(ms) as SaveStructure;
                    ms.Dispose();
                    ms.Close();

                    if (st == null)
                    {
                        Debug.Log("리드는 했으나 스트럭쳐가 널임.");
                    }
                }
                else
                {
                    Debug.Log("바이너리 데이타 리드 읽기 실패!");
                    saveClient.ShowSelectSavedGameUI("리드가 안됨.", 5, false, false, (stq, md) => { });
                }
            });
        });
        if (st == null)
        {
            Debug.Log("리드 실패");
            return(false);
        }
#else
        BinaryFormatter bt   = new BinaryFormatter();
        FileStream      file = File.Open(Constant.saveDataAllPath, FileMode.Open);

        if (file != null && file.Length > 0)
        {
            st = bt.Deserialize(file) as SaveStructure;
            file.Close();
            if (st == null)
            {
                Debug.Log("파일이 없음.");
                return(false);
            }
        }
        else
        {
            file.Close();
            return(false);
        }
#endif
        Debug.Log("로드 게임");
        //  LanguageManager.GetInstance().SetLanguage(st.lang);   언어설정은 새로 할 수 있게.
        GoldManager.GetInstance().SetGold(st.golds);
        GameEndJudgeManager.GetInstance().Load(st);
        InGameTimeManager.GetInstance().Load(st);
        CharactorManager.GetInstance().Load(st);
        QuestManager.GetInstance().Load(st);
        Inventory.GetInstance().Load(st);
        WholeMonsterRiskManager.GetInstance().Load(st);
        PhaseManager.GetInstance().Load(st);
        TextManager.GetInstance().Load(st);

        return(true);
    }
Пример #16
0
 public override void SetHasCommission(string Qkey)
 {
     base.SetHasCommission(Qkey);
     questTakeOnDay = InGameTimeManager.GetInstance().GetNowTime();
 }
Пример #17
0
 public static string MakeQuestKey(string charaName)
 {
     return(charaName + "-" + InGameTimeManager.GetInstance().GetNowInGameTimeStamp().ToString());
 }
Пример #18
0
    public void SetOrderDateAtNowTime()
    {
        InGameTime orTemp = InGameTimeManager.GetInstance().GetNowTime();

        orderDate = orTemp;
    }