Beispiel #1
0
        private DishRequirement GetRequire()
        {
            DishRequirement requirement = new DishRequirement();

            requirement.uid = GetRequirementUid();

            List <IResultSDS> list = new List <IResultSDS>(dishAll);

            int num = random.Get(CookConst.REQUIRE_NUM_MIN, maxRequirementNum + 1);

            DishResultBase[] resultArr = new DishResultBase[num];

            requirement.dishArr = resultArr;

            int optimizeNum = random.Get((int)(CookConst.OPTIMIZE_PROBABILITY_MAX * num) + 1);

            for (int i = 0; i < num; i++)
            {
                int index = random.Get(list.Count);

                IResultSDS sds = list[index];

                if (sds.GetMaxNum() > 1)
                {
                    int oldNum = 1;

                    for (int m = 0; m < i; m++)
                    {
                        DishResultBase tmpResult = resultArr[m];

                        if (tmpResult.sds == sds)
                        {
                            oldNum++;
                        }
                    }

                    if (oldNum == sds.GetMaxNum())
                    {
                        list.RemoveAt(index);
                    }
                }
                else
                {
                    list.RemoveAt(index);
                }

                bool isOptimize = i < optimizeNum;

                DishResultBase result = new DishResultBase();

                result.sds = sds;

                result.isOptimized = isOptimize;

                resultArr[i] = result;
            }

            return(requirement);
        }
Beispiel #2
0
        private void AddReward(List <int> _resultList, PlayerData _playerData, DishRequirement _requirement)
        {
            int num = 0;

            bool allOptimized = true;

            for (int i = 0; i < _requirement.dishArr.Length; i++)
            {
                DishResultBase resultBase = _requirement.dishArr[i];

                num += resultBase.isOptimized ? resultBase.sds.GetMoneyOptimized() : resultBase.sds.GetMoney();

                int index = _resultList[i];

                DishResult result;

                if (index > -1 && index < _playerData.result.Length)
                {
                    result = _playerData.result[index];
                }
                else
                {
                    result = _playerData.dish[-index - 1].result;
                }

                if (!result.isOptimized)
                {
                    allOptimized = false;
                }
            }

            float fix = 1 + (_requirement.dishArr.Length - CookConst.REQUIRE_NUM_MIN) * (CookConst.REQUIRE_REWARD_FIX - 1) / (CookConst.REQUIRE_NUM_MAX - CookConst.REQUIRE_NUM_MIN);

            if (allOptimized)
            {
                num = (int)(num * fix * CookConst.REQUIRE_REWARD_ALL_OPTIMIZED_FIX);
            }
            else
            {
                num = (int)(num * fix);
            }

            _playerData.money += num;
        }
Beispiel #3
0
        internal void FromBytes(BinaryReader _br)
        {
            uid = _br.ReadInt32();

            int num = _br.ReadInt32();

            dishArr = new DishResultBase[num];

            for (int i = 0; i < num; i++)
            {
                DishResultBase result = new DishResultBase();

                result.FromBytes(_br);

                dishArr[i] = result;
            }

            time = _br.ReadInt32();
        }
Beispiel #4
0
        internal bool CheckCanCompleteRequirement(List <int> _resultList, PlayerData _playerData, DishRequirement _requirement, bool _throwException)
        {
            if (_resultList.Count != _requirement.dishArr.Length)
            {
                if (_throwException)
                {
                    throw new Exception("CheckCanCompleteRequirement  false0");
                }

                return(false);
            }

            List <DishResult> resultList = new List <DishResult>();

            for (int i = 0; i < _resultList.Count; i++)
            {
                int index = _resultList[i];

                if (index > -1 && index < _playerData.result.Length)
                {
                    DishResult result = _playerData.result[index];

                    if (result != null && !resultList.Contains(result))
                    {
                        resultList.Add(result);
                    }
                    else
                    {
                        if (_throwException)
                        {
                            throw new Exception("CheckCanCompleteRequirement  false1");
                        }

                        return(false);
                    }
                }
                else if (index < 0 && index > -_playerData.dish.Count - 1)
                {
                    DishResult result = _playerData.dish[-index - 1].result;

                    if (result != null && !resultList.Contains(result))
                    {
                        resultList.Add(result);
                    }
                    else
                    {
                        if (_throwException)
                        {
                            throw new Exception("CheckCanCompleteRequirement  false2");
                        }

                        return(false);
                    }
                }
                else
                {
                    if (_throwException)
                    {
                        throw new Exception("CheckCanCompleteRequirement  false3");
                    }

                    return(false);
                }
            }

            List <DishResultBase> requirementList = new List <DishResultBase>(_requirement.dishArr);

            for (int i = resultList.Count - 1; i > -1; i--)
            {
                DishResult result = resultList[i];

                for (int m = requirementList.Count - 1; m > -1; m--)
                {
                    DishResultBase requirement = requirementList[m];

                    if (result.sds == requirement.sds && result.isOptimized == requirement.isOptimized)
                    {
                        resultList.RemoveAt(i);

                        requirementList.RemoveAt(m);

                        break;
                    }
                }
            }

            if (requirementList.Count == 0)
            {
                return(true);
            }

            for (int i = resultList.Count - 1; i > -1; i--)
            {
                DishResult result = resultList[i];

                for (int m = requirementList.Count - 1; m > -1; m--)
                {
                    DishResultBase requirement = requirementList[m];

                    if (result.sds == requirement.sds && result.isOptimized)
                    {
                        resultList.RemoveAt(i);

                        requirementList.RemoveAt(m);

                        break;
                    }
                }
            }

            if (requirementList.Count == 0)
            {
                return(true);
            }

            for (int i = resultList.Count - 1; i > -1; i--)
            {
                DishResult result = resultList[i];

                for (int m = requirementList.Count - 1; m > -1; m--)
                {
                    DishResultBase requirement = requirementList[m];

                    if (result.sds.GetIsUniversal() && (result.isOptimized == requirement.isOptimized || result.isOptimized))
                    {
                        resultList.RemoveAt(i);

                        requirementList.RemoveAt(m);

                        break;
                    }
                }
            }

            if (requirementList.Count == 0)
            {
                return(true);
            }
            else
            {
                if (_throwException)
                {
                    throw new Exception("CheckCanCompleteRequirement  false4");
                }

                return(false);
            }
        }