local DailyPlugin = {} oneDay = 60*60*24 function DailyPlugin.bind(Daily) --解锁 function Daily:checkUnlock(treaval) local role = self.owner local treasureC = treaval.unlock:toArray(true, "=") if treasureC[1] == 1 then --通关关卡 return self.owner:checkHangPass(treasureC[2]) elseif treasureC[1] == 2 then --通关拾荒章节=x层 return role:checkAdvChapterPass(treasureC[2]) elseif treasureC[1] == 3 then --拥有指定id的角色时 local hero = role:getHeroByID(treasureC[2]) if hero then return true end else return true end return false end --CD function Daily:checkTreasureExpired(treasureAttr, treasureList) local curInfo = treasureList[treasureAttr.id] if curInfo then -- check finish if curInfo["expire_time"] then if curInfo.cool_time > 1 then if skynet.timex() >= curInfo["expire_time"] then treasureList[treasureAttr.id] = nil curInfo = clone(treasureAttr) elseif skynet.timex() >= curInfo["expire_time"] - curInfo.cool_time * oneDay then --未冷却 curInfo = nil else curInfo = clone(treasureAttr) end else if skynet.timex() >= curInfo["expire_time"] then treasureList[treasureAttr.id] = nil end curInfo = clone(treasureAttr) end end else curInfo = clone(treasureAttr) end return curInfo end --绑定通关关卡 function Daily:checkChapters(treasureList, treasureListOther) local chapters = {} local tmp_chapters = {} for _, curInfo in pairs(treasureList or {}) do if curInfo["expire_time"] or not curInfo["end_time"] then tmp_chapters[curInfo.chapter_id] = curInfo end end for _, curInfo in pairs(treasureListOther or {}) do if curInfo["expire_time"] or not curInfo["end_time"] then tmp_chapters[curInfo.chapter_id] = curInfo end end local hangInfo = self.owner:getProperty("hangInfo") or {} for chapter_id, val in pairs(csvdb["idle_battleCsv"]) do if chapter_id ~= hangInfo.carbonId then if self.owner:checkHangPass(chapter_id) then if next(tmp_chapters) and not tmp_chapters[chapter_id] then chapters[chapter_id] = val else chapters[chapter_id] = val end end end end return chapters end --权重 function Daily:checkTreasureWeight(treasureList, tmpTreasure, treasureBase, treasureListOther) local chapters = self:checkChapters(treasureList, treasureListOther) if not chapters or not next(chapters) then return end --扣除在挖宝列表里未过期宝藏的资源值 for _, val in pairs(treasureList) do if not val["expire_time"] then treasureBase = treasureBase - val["treasure_value"] end end if tmpTreasure and next(tmpTreasure) then table.sort(tmpTreasure, function (a, b) return a.treasure_value > b.treasure_value end) end local treasure while next(tmpTreasure or {}) do local tmp = {} local tmpBase = treasureBase for _, val in pairs(tmpTreasure) do if tmpBase >= val.treasure_value then tmpBase = tmpBase - val.treasure_value tmp[val.id] = val end end if not next(tmp) then break end local id = math.randWeight(tmp, "weight") --宝藏id if not id then break end treasure = tmp[id] if treasureBase < treasure.treasure_value then break end --扣除资源值 treasureBase = treasureBase - treasure.treasure_value local chapterId = math.randWeight(chapters, "treasure_weight") --关卡id if not chapterId then break end treasure.chapter_id = chapterId treasureList[treasure.id] = treasure tmpTreasure[treasure.id] = nil chapters[chapterId] = nil end end --只抓一个 额外宝藏 function Daily:getOneTreasureExtra(treasureList, tmpTreasure, treasureBase, treasureListOther) local chapters = self:checkChapters(treasureList, treasureListOther) if not chapters or not next(chapters) then return end --扣除在挖宝列表里未过期宝藏的资源值 for _, val in pairs(treasureList) do if not val["expire_time"] then treasureBase = treasureBase - val["treasure_value"] end end if tmpTreasure and next(tmpTreasure) then table.sort(tmpTreasure, function (a, b) return a.treasure_value > b.treasure_value end) end local treasure local tmp = {} local tmpBase = treasureBase for _, val in pairs(tmpTreasure) do if tmpBase >= val.treasure_value then tmpBase = tmpBase - val.treasure_value tmp[val.id] = val end end if not next(tmp) then return end local id = math.randWeight(tmp, "weight") --宝藏id if not id then return end treasure = tmp[id] if treasureBase < treasure.treasure_value then return end --扣除资源值 treasureBase = treasureBase - treasure.treasure_value local chapterId = math.randWeight(chapters, "treasure_weight") --关卡id if not chapterId then return end treasure.chapter_id = chapterId treasureList[treasure.id] = treasure return treasure end --chapterId function Daily:checkTreasureChapterId(curInfo, treasureList, chapterId, treasureBase) if not curInfo then return nil end local treasure = nil --开始挖宝关卡ID=挂机关卡ID if chapterId == curInfo.chapter_id then --开始挖宝 if not curInfo["end_time"] then curInfo["end_time"] = skynet.timex() + curInfo.working_time else if skynet.timex() >= curInfo["end_time"] then if curInfo.cool_time > 1 then --宝藏冷却时间 if not curInfo["expire_time"] then if treasureBase >= curInfo["treasure_value"] then treasureBase = treasureBase - curInfo["treasure_value"] treasure = treasureList[curInfo.id] curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay end else --已经领取宝藏 检索宝藏冷却时间 if skynet.timex() >= curInfo["expire_time"] then treasureList[curInfo.id] = nil end end else if treasureBase >= curInfo["treasure_value"] then treasureBase = treasureBase - curInfo["treasure_value"] treasure = treasureList[curInfo.id] treasureList[curInfo.id] = nil end end end end else --已经开始挖宝 if curInfo["end_time"] then if skynet.timex() >= curInfo["end_time"] then if curInfo.cool_time > 1 then --宝藏冷却时间 if not curInfo["expire_time"] then if treasureBase >= curInfo["treasure_value"] then treasureBase = treasureBase - curInfo["treasure_value"] treasure = treasureList[curInfo.id] curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay end else --已经领取宝藏 检索宝藏冷却时间 if skynet.timex() >= curInfo["expire_time"] then treasureList[curInfo.id] = nil end end else if treasureBase >= curInfo["treasure_value"] then treasureBase = treasureBase - curInfo["treasure_value"] treasure = treasureList[curInfo.id] treasureList[curInfo.id] = nil end end else curInfo["end_time"] = nil end end end return treasure end function Daily:buyTreasure(treasureList) local boughtTreasure = {} local treasureBase = self:getProperty("treasureBase") for id, val in pairs(treasureList) do if treasureBase >= val.treasure_value then boughtTreasure[id] = val treasureBase = treasureBase - val.treasure_value end end self:updateProperty({field = "treasureBase", value = treasureBase}) return boughtTreasure end --重置宝藏图鉴 function Daily:resetTreasureList() self:updateProperty({field = "treasureList", value = {}}) self:updateProperty({field = "treasureListExtra", value = {}}) end --宝藏图鉴 function Daily:getTreasureList() local tmpcsv = csvdb["idle_treasureCsv"] local treasureList = self:getProperty("treasureList") or {} --挖宝列表 过期删除 领取奖励删除 跨天更新 local treasureListExtra = self:getProperty("treasureListExtra") or {} --额外宝藏列表 过期删除 领取奖励删除 跨天更新 local tmpTreasure = {} local treasureBase = globalCsv.idle_treasure_base + self.owner:getBnousTreasureBaseMaximum() for _, val in pairs(tmpcsv) do if self:checkUnlock(val) == true then local treasure = self:checkTreasureExpired(val, treasureList) if treasure then table.insert(tmpTreasure, treasure) end end end if not next(tmpTreasure) then return treasureList end self:checkTreasureWeight(treasureList, tmpTreasure, treasureBase, treasureListExtra) self:updateProperty({field = "treasureList", value = treasureList}) self:updateProperty({field = "treasureBase", value = treasureBase}) return treasureList end --检索挖宝列表 获得宝藏 function Daily:checkTreasureList(chapterId) local treasureList = self:getProperty("treasureList") or {} local treasureBase = self:getProperty("treasureBase") or {} local tmpTreasure = {} for id, val in pairs(treasureList) do local treasure = self:checkTreasureChapterId(val, treasureList, chapterId, treasureBase) if treasure then tmpTreasure[id] = treasure end end if not next(tmpTreasure) then self:updateProperty({field = "treasureList", value = treasureList}) return nil end local boughtTreasure = self:buyTreasure(tmpTreasure) self:updateProperty({field = "treasureList", value = treasureList}) return boughtTreasure end --宝藏加速 function Daily:quickTreasureList(chapterId, time) local treasureList = self:getProperty("treasureList") or {} if next(treasureList) then for _, val in pairs(treasureList) do if val["end_time"] and val["chapter_id"] and chapterId == val["chapter_id"] then val["end_time"] = val["end_time"] - time end end end self:updateProperty({field = "treasureList", value = treasureList}) return self:checkTreasureList(chapterId) end --宝藏功能优化——增加"发现宝藏"功能 function Daily:buyTreasureExtra(treasureList) local boughtTreasure = {} local treasureBase = self:getProperty("treasureExtraBase") for id, val in pairs(treasureList) do if treasureBase >= val.treasure_value then boughtTreasure[id] = val treasureBase = treasureBase - val.treasure_value end end self:updateProperty({field = "treasureExtraBase", value = treasureBase}) return boughtTreasure end function Daily:getTreasureExtra(tmpBaseExtra) local tmpcsv = csvdb["idle_treasureCsv"] local treasureList = self:getProperty("treasureList") or {} --挖宝列表 过期删除 领取奖励删除 跨天更新 local treasureListExtra = self:getProperty("treasureListExtra") or {} --额外宝藏 过期删除 领取奖励删除 跨天更新 local tmpTreasure = {} for _, val in pairs(tmpcsv) do if self:checkUnlock(val) then local treasure = self:checkTreasureExpired(val, treasureListExtra) if treasure then table.insert(tmpTreasure, treasure) end end end if not next(tmpTreasure) then return nil, treasureListExtra end local tmp = self:getOneTreasureExtra(treasureListExtra, tmpTreasure, tmpBaseExtra, treasureList) self:updateProperty({field = "treasureListExtra", value = treasureListExtra}) return tmp, treasureListExtra end --检索宝藏列表 获得额外宝藏 function Daily:checkTreasureListExtra(chapterId) local treasureListExtra = self:getProperty("treasureListExtra") or {} local treasureBaseExtra = self:getProperty("treasureBaseExtra") or {} local tmpTreasure = {} for id, val in pairs(treasureListExtra) do local treasure = self:checkTreasureChapterId(val, treasureListExtra, chapterId, treasureBaseExtra) if treasure then tmpTreasure[id] = treasure end end if next(tmpTreasure) then self:updateProperty({field = "treasureListExtra", value = treasureListExtra}) return nil end local boughtTreasure = self:buyTreasureExtra(tmpTreasure) self:updateProperty({field = "treasureListExtra", value = treasureListExtra}) return boughtTreasure end --额外宝藏加速 function Daily:quickTreasureListExtra(chapterId, time) local treasureListExtra = self:getProperty("treasureListExtra") or {} if next(treasureListExtra) then for _, val in pairs(treasureListExtra) do if val["end_time"] and val["chapter_id"] and chapterId == val["chapter_id"] then val["end_time"] = val["end_time"] - time end end end self:updateProperty({field = "treasureListExtra", value = treasureListExtra}) return self:checkTreasureListExtra(chapterId) end end return DailyPlugin