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); }
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; }
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(); }
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); } }