private void RefreshRequireTo(ushort _tick, List <ushort> _seedList) { int oldNum = tick / CookConst.REQUIRE_PRODUCE_TIME + (tick % CookConst.REQUIRE_PRODUCE_TIME == 0 ? 0 : 1); for (int i = oldNum; i < _seedList.Count; i++) { SetSeed(_seedList[i]); DishRequirement requirement = GetRequire(); requirement.time = tick - i * CookConst.REQUIRE_PRODUCE_TIME; require.Add(requirement); } for (int i = require.Count - 1; i > -1; i--) { DishRequirement requirement = require[i]; requirement.time += _tick - tick; if (requirement.time > CookConst.REQUIRE_EXCEED_TIME * CookConst.TICK_NUM_PER_SECOND) { require.RemoveAt(i); } } }
internal void FromBytes(BinaryReader _br) { Reset(); tick = _br.ReadUInt16(); requirementUid = _br.ReadInt32(); mData.FromBytes(_br); oData.FromBytes(_br); int num = _br.ReadInt32(); for (int i = 0; i < num; i++) { DishRequirement requirement = new DishRequirement(); requirement.FromBytes(_br); require.Add(requirement); } InitDishAll(); }
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 GetCommandCompleteRequirement(CommandCompleteRequirement _command) { for (int i = 0; i < require.Count; i++) { DishRequirement requirement = require[i]; if (requirement.uid == _command.requirementUid) { PlayerData playerData = _command.isMine ? mData : oData; if (CheckCanCompleteRequirement(_command.resultList, playerData, requirement, true)) { AddReward(_command.resultList, playerData, requirement); require.RemoveAt(i); for (int m = 0; m < _command.resultList.Count; m++) { int index = _command.resultList[m]; if (index > -1) { playerData.result[index] = null; } else { DishData dish = playerData.dish[-index - 1]; dish.result = null; dish.state = DishState.NULL; dish.time = 0; } } eventCallBack?.Invoke(_command); } break; } } }
private void RefreshRequire() { if (tick % CookConst.REQUIRE_PRODUCE_TIME == 0) { DishRequirement requirement = GetRequire(); require.Add(requirement); } for (int i = require.Count - 1; i > -1; i--) { DishRequirement requirement = require[i]; requirement.time++; if (requirement.time > CookConst.REQUIRE_EXCEED_TIME * CookConst.TICK_NUM_PER_SECOND) { require.RemoveAt(i); } } }
public bool CheckCanCompleteRequirement(List <int> _resultList, DishRequirement _requirement) { PlayerData playerData = clientIsMine ? main.mData : main.oData; return(main.CheckCanCompleteRequirement(_resultList, playerData, _requirement, false)); }
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); } }