예제 #1
0
 public PlayerChoiceDecision()
 {
     decide = () =>
     {
         return(EventParameterStorage.GetInstance().PlayerChoice);
     };
 }
    public void HunterRewardSubmit(int payment) //그냥 eps 처리를 이 단에서 해주려고 한거.
    {
        //완전지불 버튼이면 0 , 부분지불 버튼이면 1 , 거부면 2
        //버튼에서 인자 확실하게 넘겨줄것!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        EventParameterStorage.GetInstance().PlayerMultipleChoice = payment;

        QuestRoomSceneUIManager.GetInstance().OnlyShowMainUIOrigin();

        CharactorFrame.GetInstance().UpdateFSM();
    }
    public void QuestCheckIsDone(List <QuestPerMob> checkedList)
    {
        ClientIdea client = CharactorFrame.GetInstance().clientIdea;

        float completeness = client.GetCompletenessClientOriginQuest(checkedList);

        EventParameterStorage.GetInstance().QuestCompareCompleteness = completeness;

        CharactorFrame.GetInstance().UpdateFSM();
    }
    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);
    }
예제 #5
0
    void VisitNextOne() //다음 놈 부르기.
    {
        if (RoomEventManager.GetInstance().IsNowWineAndDine)
        {
            return;                                                     //접대중이면 패쓰함.
        }
        EventParameterStorage.GetInstance().ParametersReset();

        CharactorIdea nextOne = CharactorManager.GetInstance().GetNextCharactor();

        if (nextOne == null)
        {
            return;
        }

        nextOne.AnamnesisToCharactorFrame();
        CharactorFrame.GetInstance().ComeAnim();
    }
    public void HunterInquireQuestSubmit(string Qkey, bool didDetermined, List <Weapon> rentalSelected) //헌터에게 퀘스트를 맡기고 렌탈등과 퀘스트 등과 선택 했을 때.
    {
        if (!didDetermined)                                                                             //ui에서 제출이면 true 인자로 넣어서 보내주기!
        {
            EventParameterStorage.GetInstance().PlayerChoice = false;
            CharactorFrame.GetInstance().UpdateFSM();
            return;
        }

        EventParameterStorage.GetInstance().PlayerChoice = true;
        HunterIdea hunter        = CharactorFrame.GetInstance().hunterIdea;
        Quest      selectedQuest = QuestManager.GetInstance().GetQuest(Qkey);

        //본래 퀘스트의 만기보다 하루 빨리. 그리고 10시~ 17시 사이를 랜덤으로 지정.
        InGameTime dayOneMinus  = InGameTime.GetOnlyOneDayMinus(selectedQuest.ExpireDate);
        uint       hour         = (uint)Random.Range(Constant.dayStartHour, Constant.dayEndHour - 1);
        InGameTime hunterExpire = new InGameTime(dayOneMinus.Year, dayOneMinus.Month, dayOneMinus.Day, hour, 0);

        hunter.SetHasCommission(Qkey);
        hunter.SetHuntExpireDay(hunterExpire);

        if (rentalSelected != null)
        {
            //렌탈 처리 해주기.
            hunter.SetRentalTheseWeapon(rentalSelected);
            Inventory.GetInstance().RemoveWeaponsFromInven(rentalSelected);//렌탈해간 물건들 인벤에서 뺴주는 처리.
        }

        WholeMonsterRiskManager.GetInstance().AddHunter(hunter);    //수임을 받은날 위협도 매니져에서 일함.(그 날의 데이오프 부터)

        QuestRoomSceneUIManager.GetInstance().OnlyShowMainUIOrigin();

        int deposit = PayFormula.CalculateHuntDeposit(selectedQuest, hunter.GetHunterExpireGap());   //헌터 착수금 지불.

        GoldManager.GetInstance().AdjustGold(-1 * deposit, GoldManager.E_PayType.TO_HUNTER);

        CharactorFrame.GetInstance().UpdateFSM();
    }
예제 #7
0
    protected override void MakeTransitions(FSMState state, E_HunterState e)
    {
        state.ClearTransitions();
        switch (e)
        {
        case E_HunterState.IDLE:
            state.AddTransitions(
                new MyTransition(
                    () =>
            {
                bool hasCommision = true;          //캐릭터 틀에서 수임 여부
                hasCommision      = CharactorFrame.GetInstance().hunterIdea.hasCommission;

                if (hasCommision)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            },
                    GetState(E_HunterState.HUNT_REWARD),
                    GetState(E_HunterState.INQUIRE_QUEST)
                    )
                );
            break;

        case E_HunterState.INQUIRE_QUEST:
            state.AddTransitions(new PlayerChoiceTransition(
                                     GetState(E_HunterState.INQUIRE_QUEST_SELECT_START)
                                     , GetState(E_HunterState.INQUIRE_QUEST_CANCEL)));
            break;

        case E_HunterState.INQUIRE_QUEST_SELECT_START:      //퀘스트 인콰이;어 ui에서 플레이어초이스에 퀘스트 선택 여부를 담음.
            state.AddTransitions(
                new PlayerChoiceTransition(
                    GetState(E_HunterState.INQUIRE_QUEST_ACCEPT), GetState(E_HunterState.INQUIRE_QUEST_CANCEL)));

            /*  무기렌탈 로직을 퀘스트 인콰이어와 합쳤음.
             * ,
             * new MyTransition(
             * ()=>
             * {
             *  bool pc = EventParameterStorage.GetInstance().PlayerChoice;
             *
             *      if (pc == true)//퀘스트 선택창의 제출 버튼을 누른것.
             *  {
             *      //요구능력 치에 따라서 징징과 어셉트를 구분해야함.
             #if DEBUG_TEST
             *      if (fsmTestHunter.GetInstance().isHuntersPowerMoreThanQuest)
             *      {
             *          return true;
             *      }
             #else
             *      if (
             *      QuestManager.GetInstance().GetQuest(
             *      EventParameterStorage.GetInstance().selectedQuestKey)
             *      .GetWeight()
             *      <=
             *      CharactorFrame.GetInstance().hunterIdea.HuntingCapabillity
             *
             *      ) //만약 헌터의 능력치가 퀘스트의 요구 능력치를 상회한다면. )
             *      {
             *          return true;
             *      }
             #endif
             *      else return false;//헌터의 능력치가 퀘스트의 요구 능력치에 못미침.
             *  }
             *  return false;   //의미 없음.
             * }
             * ,GetState(E_HunterState.INQUIRE_QUEST_ACCEPT),
             * GetState(E_HunterState.INQUIRE_QUEST_RENTAL_REQUIRE)
             * )
             *
             */


            break;

        case E_HunterState.INQUIRE_QUEST_ACCEPT:
            state.AddTransitions(new TriggerTransition(GetState(E_HunterState.LEAVE)));
            break;

        /*무기 렌탈 로직을 퀘스트 인콰이어와 합침.
         * case E_HunterState.INQUIRE_QUEST_RENTAL_REQUIRE:
         * state.AddTransitions(new PlayerChoiceTransition(GetState(E_HunterState.INQUIRE_QUEST_RENTAL_START),
         *  GetState(E_HunterState.INQUIRE_QUEST_ACCEPT)//징징 했으나 무시해서 그냥 의뢰만 받아감.
         *  ));
         * break;
         *
         * case E_HunterState.INQUIRE_QUEST_RENTAL_START:
         * state.AddTransitions(new TriggerTransition(GetState(E_HunterState.LEAVE)));
         * //무기를 빌려주든 말든 그 로직처리는 ui 제출 버튼 쪽에서 할테니까.
         * //그냥 리브 해주면 됨.
         * break;
         */

        case E_HunterState.INQUIRE_QUEST_CANCEL:
            state.AddTransitions(new TriggerTransition(GetState(E_HunterState.LEAVE)));
            break;

        case E_HunterState.HUNT_REWARD:
            state.AddTransitions(
                new MyTransition(
                    () =>
            {
                bool rentalSth      = true;       //캐릭터 틀이든 뭐든 대여한 무기가 있는지, 없는지 검사함.
                bool isRentalBroken = true;       //무기의 내구도 도 조건이야...
                HunterIdea hunter   = CharactorFrame.GetInstance().hunterIdea;
                rentalSth           = hunter.DidRentalWeapon();

                if (rentalSth)
                {
                    isRentalBroken = hunter.IsBrokenRental();
                }

                if (rentalSth && isRentalBroken)             //빌린게 있음. 그리고 그것은 부서진 것이 존재한다.
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_RETURN_OF_RENTAL_BROKEN), null
                    )
                ,
                new MyTransition(
                    () =>
            {
                bool rentalSth      = true;       //캐릭터 틀이든 뭐든 대여한 무기가 있는지, 없는지 검사함.
                bool isRentalBroken = true;       //무기의 내구도 도 조건이야...

                HunterIdea hunter = CharactorFrame.GetInstance().hunterIdea;
                rentalSth         = hunter.DidRentalWeapon();

                if (rentalSth)
                {
                    isRentalBroken = hunter.IsBrokenRental();
                }
                if (rentalSth && !isRentalBroken)             //빌린게 있음.
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_RETURN_OF_RENTAL_NOT_BROKEN), null
                    )
                ,
                new MyTransition(
                    () =>
            {
                bool rentalSth = true;           //캐릭터 틀이든 뭐든 대여한 무기가 있는지, 없는지 검사함.
                bool expired   = true;           //만기에 늦었는지.

                HunterIdea hunter = CharactorFrame.GetInstance().hunterIdea;
                rentalSth         = hunter.DidRentalWeapon();


                expired = hunter.haveComeBeforeExpire;

                if (!rentalSth && expired)             //빌린게 있음.
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_EXPIRED), null
                    )
                ,
                new MyTransition(
                    () =>
            {
                bool rentalSth = true;           //캐릭터 틀이든 뭐든 대여한 무기가 있는지, 없는지 검사함.
                bool expired   = true;           //만기에 늦었는지.

                HunterIdea hunter = CharactorFrame.GetInstance().hunterIdea;
                rentalSth         = hunter.DidRentalWeapon();
                expired           = hunter.haveComeBeforeExpire;

                if (!rentalSth && !expired)             //빌리지 않았고, 만기에 늦지도 않았음.
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_START), null
                    )
                );

            break;

        case E_HunterState.HUNT_REWARD_RETURN_OF_RENTAL_NOT_BROKEN:
            state.AddTransitions(
                new MyTransition(
                    () =>
            {
                bool expired      = true;      //만기 전에 왔었는지 어쟀는지.
                HunterIdea hunter = CharactorFrame.GetInstance().hunterIdea;
                expired           = hunter.haveComeBeforeExpire;
                if (expired)            //만지 전에 왔었다가 그냥 갔음.
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_EXPIRED),
                    GetState(E_HunterState.HUNT_REWARD_START)
                    ));
            break;

        case E_HunterState.HUNT_REWARD_RETURN_OF_RENTAL_BROKEN:
            state.AddTransitions(
                new MyTransition(
                    () =>
            {
                bool expired      = true;     //만기 전에 왔었는지 어쟀는지.
                HunterIdea hunter = CharactorFrame.GetInstance().hunterIdea;
                expired           = hunter.haveComeBeforeExpire;
                if (expired)           //만지 전에 왔었다가 그냥 갔음.
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_EXPIRED),
                    GetState(E_HunterState.HUNT_REWARD_START)
                    ));
            break;

        case E_HunterState.HUNT_REWARD_EXPIRED:
            state.AddTransitions(new TriggerTransition(GetState(E_HunterState.HUNT_REWARD_START)));
            break;

        case E_HunterState.HUNT_REWARD_START:
            state.AddTransitions(
                new MyTransition(
                    () =>
            {
                int pmc = EventParameterStorage.GetInstance().PlayerMultipleChoice;
                if (pmc == 0)            //완전지불이면
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_ALL_PAYMENT), null
                    ),
                new MyTransition(
                    () =>
            {
                int pmc = EventParameterStorage.GetInstance().PlayerMultipleChoice;
                if (pmc == 2)            //지불 거부, 거래쫑이면.
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_DENIED), null
                    ),
                new MyTransition(
                    () =>
            {
                int pmc     = EventParameterStorage.GetInstance().PlayerMultipleChoice;
                bool beSulk = true;

                beSulk = CharactorFrame.GetInstance().hunterIdea.IsSulked();
                if (pmc == 1)            //부분지불이면
                {
                    if (false == beSulk) //성격 등등을 통해 갬블하고
                                         //삐쳤으면 거래 거부 해버림.
                                         //안 삐쳤으면 부분 지불 받고 감.
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    Debug.LogError("EPS에러." + pmc);
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_PARTIAL_PAYMENT), GetState(E_HunterState.HUNT_REWARD_DENIED)
                    )
                );
            break;

        case E_HunterState.HUNT_REWARD_ALL_PAYMENT:
            state.AddTransitions(new TriggerTransition(GetState(E_HunterState.LEAVE)));
            break;

        case E_HunterState.HUNT_REWARD_PARTIAL_PAYMENT:
            state.AddTransitions(new TriggerTransition(GetState(E_HunterState.LEAVE)));
            break;

        case E_HunterState.HUNT_REWARD_DENIED:
            state.AddTransitions(new TriggerTransition(GetState(E_HunterState.LEAVE)));
            break;

        case E_HunterState.LEAVE:
            break;
        }
    }
 public void PlayerChoice(bool playerChoice) //버튼 콜백 메서드
 {
     EventParameterStorage.GetInstance().PlayerChoice = playerChoice;
     CharactorFrame.GetInstance().UpdateFSM();
 }
    protected override void MakeTransitions(FSMState state, E_ClientState e)
    {
        state.ClearTransitions();
        switch (e)
        {
        case E_ClientState.IDLE:
            state.AddTransitions(
                new MyTransition(
                    () =>
            {
                bool hasCommision = true;        //캐릭터 틀에서 수임 여부
#if DEBUG_TEST
                hasCommision = fsmTestHunter.GetInstance().hasCommision;
#endif
                hasCommision = CharactorFrame.GetInstance().clientIdea.hasCommission;
                if (hasCommision == false)        //캐릭터 틀에서 수임 했는지 여부를 받아오기.
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            },
                    GetState(E_ClientState.COMMISSION), null
                    )
                ,
                new MyTransition(
                    () =>
            {
                bool hasCommision = true;            //캐릭터 틀에서 수임 여부
#if DEBUG_TEST
                hasCommision = fsmTestHunter.GetInstance().hasCommision;
#endif
                if (hasCommision)            //캐릭터 틀에서 수임 했는지 여부를 받아오기.
                {
                    bool expired;
#if DEBUG_TEST
                    expired = fsmTestHunter.GetInstance().expired;
#endif
                    expired = CharactorFrame.GetInstance().clientIdea.haveComeBeforeExpire;
                    if (expired)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);            //의미없음
                }
            },
                    GetState(E_ClientState.CHECK_EXPIRED),
                    GetState(E_ClientState.CHECK_NO_EXPIRE)
                    )
                );
            break;

        case E_ClientState.COMMISSION:
            state.AddTransitions(
                new TriggerTransition(GetState(E_ClientState.COMMISSION_SAY_1))
                );
            break;

        case E_ClientState.COMMISSION_SAY_1:
            state.AddTransitions(
                new PlayerChoiceTransition(GetState(E_ClientState.COMMISSION_MAKE_START), GetState(E_ClientState.COMMISSION_SAY_2))
                );
            break;

        case E_ClientState.COMMISSION_SAY_2:
            state.AddTransitions(
                new PlayerChoiceTransition(GetState(E_ClientState.COMMISSION_MAKE_START), GetState(E_ClientState.COMMISSION_SAY_3))
                );
            break;

        case E_ClientState.COMMISSION_SAY_3:
            state.AddTransitions(
                new PlayerChoiceTransition(GetState(E_ClientState.COMMISSION_MAKE_START), GetState(E_ClientState.COMMISSION_CANCEL))
                );
            break;

        case E_ClientState.COMMISSION_MAKE_START:
            state.AddTransitions(new TriggerTransition(GetState(E_ClientState.COMMISION_MAKE_DONE)));
            break;

        case E_ClientState.COMMISION_MAKE_DONE:
        case E_ClientState.COMMISSION_CANCEL:
            state.AddTransitions(new TriggerTransition(GetState(E_ClientState.LEAVE)));
            break;

        case E_ClientState.CHECK_NO_EXPIRE:
        case E_ClientState.CHECK_EXPIRED:
            state.AddTransitions(new TriggerTransition(GetState(E_ClientState.CHECK_START)));
            break;

        case E_ClientState.CHECK_START:
            state.AddTransitions(
                new MyTransition(
                    () => {
                float completeness;             //qc 끝난 거랑 얘가 갖고 있는 원래 퀘스트랑 비겨ㅛ해서 나온 완성도
                completeness = EventParameterStorage.GetInstance().QuestCompareCompleteness;
                if (completeness <= 0)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_ClientState.CHECK_IMPERFACT_00), null
                    ),
                new MyTransition(
                    () => {
                float completeness;             //qc 끝난 거랑 얘가 갖고 있는 원래 퀘스트랑 비겨ㅛ해서 나온 완성도
                completeness = EventParameterStorage.GetInstance().QuestCompareCompleteness;
                if (completeness > 0 && completeness <= 50)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_ClientState.CHECK_IMPERFACT_50), null
                    ),
                new MyTransition(
                    () => {
                float completeness;             //qc 끝난 거랑 얘가 갖고 있는 원래 퀘스트랑 비겨ㅛ해서 나온 완성도
                completeness = EventParameterStorage.GetInstance().QuestCompareCompleteness;
                if (completeness > 50 && completeness <= 80)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_ClientState.CHECK_IMPERFACT_80), null
                    ),
                new MyTransition(
                    () => {
                float completeness;             //qc 끝난 거랑 얘가 갖고 있는 원래 퀘스트랑 비겨ㅛ해서 나온 완성도
                completeness = EventParameterStorage.GetInstance().QuestCompareCompleteness;
                if (completeness > 80 && completeness <= 95)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_ClientState.CHECK_IMPERFACT_95), null
                    ),
                new MyTransition(
                    () => {
                float completeness;             //qc 끝난 거랑 얘가 갖고 있는 원래 퀘스트랑 비겨ㅛ해서 나온 완성도
                completeness = EventParameterStorage.GetInstance().QuestCompareCompleteness;
                if (completeness > 95)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_ClientState.CHECK_PERFACT), null
                    )
                );
            break;

        case E_ClientState.CHECK_IMPERFACT_00:
        case E_ClientState.CHECK_IMPERFACT_50:
        case E_ClientState.CHECK_IMPERFACT_80:
        case E_ClientState.CHECK_IMPERFACT_95:
        case E_ClientState.CHECK_PERFACT:
            state.AddTransitions(new TriggerTransition(GetState(E_ClientState.LEAVE)));
            break;

        case E_ClientState.LEAVE:
            break;
        }
    }
예제 #10
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);
    }