Commit c67af9c702a763f653bf45f9f0cbd65baad4fb40

Authored by liuzujun
2 parents df622b85 ecf87563

Merge branch 'cn/develop' of 120.26.43.151:wasteland/server into cn/develop

# Conflicts:
#	src/ProtocolCode.lua
#	src/actions/HeroAction.lua
#	src/models/RoleLog.lua
src/ProtocolCode.lua
@@ -67,6 +67,8 @@ actionCodes = { @@ -67,6 +67,8 @@ actionCodes = {
67 Role_itemConvertDevilTicketRpc = 148, -- 兑换魔鬼训练营门票 67 Role_itemConvertDevilTicketRpc = 148, -- 兑换魔鬼训练营门票
68 Role_unRegisterRpc = 149, --注销账号 68 Role_unRegisterRpc = 149, --注销账号
69 Role_searchAllRoleRpc = 150, --查询所有服的角色信息 69 Role_searchAllRoleRpc = 150, --查询所有服的角色信息
  70 + Role_takeTreasureRpc = 151, --抓取额外宝藏
  71 + Role_treasureMapRpc = 152, --兑换宝藏图
70 72
71 Adv_startAdvRpc = 151, 73 Adv_startAdvRpc = 151,
72 Adv_startHangRpc = 152, 74 Adv_startHangRpc = 152,
src/actions/GmAction.lua
@@ -1025,7 +1025,7 @@ function _M.treasure(role, pms) @@ -1025,7 +1025,7 @@ function _M.treasure(role, pms)
1025 dump(treasureList) 1025 dump(treasureList)
1026 return "宝藏图鉴" 1026 return "宝藏图鉴"
1027 elseif pm1 == "FLUSH" then 1027 elseif pm1 == "FLUSH" then
1028 - local treasureList= role.dailyData:getTreasrueList(role) 1028 + local treasureList= role.dailyData:getTreasureList(role)
1029 dump(treasureList) 1029 dump(treasureList)
1030 return "宝藏图鉴" 1030 return "宝藏图鉴"
1031 elseif pm1 == "CHECK" then 1031 elseif pm1 == "CHECK" then
@@ -1188,5 +1188,40 @@ function _M.draw_code(role, pms) @@ -1188,5 +1188,40 @@ function _M.draw_code(role, pms)
1188 return ret 1188 return ret
1189 end 1189 end
1190 1190
  1191 +table.insert(helpDes, {"抓取额外宝藏", "treasure_extra"})
  1192 +function _M.treasure_extra(role, pms)
  1193 + local extraCount = role.dailyData:getProperty("treasureExtraCount") --每日发现额外宝藏使用次数(累计),隔天清零
  1194 + local mapCount = role.dailyData:getProperty("treasureMapCount")
  1195 + local baseExtra = role.dailyData:getProperty("treasureBaseExtra")
  1196 +
  1197 + if extraCount >= globalCsv.idle_treasure_extra_limie then return 1 end
  1198 + if mapCount <= 0 then return 2 end
  1199 +
  1200 + baseExtra = baseExtra + globalCsv.idle_treasure_base_extra
  1201 +
  1202 + local tmpTreasure, treasureListExtra = role.dailyData:getTreasureExtra(baseExtra)
  1203 +
  1204 + dump(tmpTreasure)
  1205 + dump(treasureListExtra)
  1206 + if not tmpTreasure then return 3 end
  1207 +
  1208 + role.dailyData:updateProperty({field = "treasureExtraCount", delta = 1})
  1209 + role.dailyData:updateProperty({field = "treasureBaseExtra", value = mapCount - 1})
  1210 + role.dailyData:updateProperty({field = "treasureBaseExtra", value = baseExtra})
  1211 +
  1212 + return "成功"
  1213 +end
  1214 +
  1215 +table.insert(helpDes, {"兑换宝藏图", "treasure_map"})
  1216 +function _M.treasure_map(role, pms)
  1217 + local count = tonumber(pms.pm1 or 1)
  1218 + local cost ={[ItemId.Jade] = globalCsv.idle_treasure_buy * count}
  1219 + if not role:checkItemEnough(cost) then return -1 end
  1220 + if not role:costItems(cost, {log = {desc = "treasureMap", int1 = count}}) then return -2 end
  1221 + role.dailyData:updateProperty({field = "treasureMapCount", delta = 1*count})
  1222 +
  1223 + local treasureMapCount = role.dailyData:getProperty("treasureMapCount")
  1224 + return treasureMapCount
  1225 +end
1191 1226
1192 return _M 1227 return _M
1193 \ No newline at end of file 1228 \ No newline at end of file
src/actions/HangAction.lua
@@ -125,10 +125,18 @@ local function checkReward(role, isTreasure, carbonId) @@ -125,10 +125,18 @@ local function checkReward(role, isTreasure, carbonId)
125 randomItem() 125 randomItem()
126 end 126 end
127 127
128 - --挂机得到的宝藏加入到挂机奖励  
129 - if isTreasure or false == true then  
130 - local treasureList= role.dailyData:checkTreasureList(carbonId or hangInfo.carbonId) or {}  
131 - for _, val in pairs(treasureList) do 128 + --挂机得到的宝藏加入到挂机奖励 + 额外宝藏奖励
  129 + if isTreasure then
  130 + local treasureList= role.dailyData:checkTreasureList(carbonId or hangInfo.carbonId)
  131 + for _, val in pairs(treasureList or {}) do
  132 + local award = val.award:toNumMap()
  133 + for k,v in pairs(award) do
  134 + items[k] = (items[k] or 0) + v
  135 + end
  136 + end
  137 +
  138 + treasureList = role.dailyData:checkTreasureListExtra(carbonId or hangInfo.carbonId)
  139 + for _, val in pairs(treasureList or {}) do
132 local award = val.award:toNumMap() 140 local award = val.award:toNumMap()
133 for k,v in pairs(award) do 141 for k,v in pairs(award) do
134 items[k] = (items[k] or 0) + v 142 items[k] = (items[k] or 0) + v
@@ -339,7 +347,7 @@ function _M.endBattleRpc(agent, data) @@ -339,7 +347,7 @@ function _M.endBattleRpc(agent, data)
339 347
340 --刷新宝藏图鉴 348 --刷新宝藏图鉴
341 if isWin and globalCsv.idle_treasure_point and globalCsv.idle_treasure_point == carbonId then 349 if isWin and globalCsv.idle_treasure_point and globalCsv.idle_treasure_point == carbonId then
342 - role.dailyData:getTreasrueList() 350 + role.dailyData:getTreasureList()
343 end 351 end
344 352
345 role:updateProperty({field = "hangInfo", value = hangInfo}) 353 role:updateProperty({field = "hangInfo", value = hangInfo})
@@ -513,8 +521,17 @@ function _M.quickRpc(agent , data) @@ -513,8 +521,17 @@ function _M.quickRpc(agent , data)
513 end 521 end
514 522
515 --宝藏加速 523 --宝藏加速
516 - local treasureList = role.dailyData:quickTreasureList(hangInfo.carbonId, time) or {}  
517 - for id, val in pairs(treasureList) do 524 + local treasureList = role.dailyData:quickTreasureList(hangInfo.carbonId, time)
  525 + for _, val in pairs(treasureList or {}) do
  526 + local award = val.award:toNumMap()
  527 + for k,v in pairs(award) do
  528 + reward[k] = (reward[k] or 0) + v
  529 + end
  530 + end
  531 +
  532 + --额外宝藏加速
  533 + treasureList = role.dailyData:quickTreasureListExtra(hangInfo.carbonId, time)
  534 + for _, val in pairs(treasureList or {}) do
518 local award = val.award:toNumMap() 535 local award = val.award:toNumMap()
519 for k,v in pairs(award) do 536 for k,v in pairs(award) do
520 reward[k] = (reward[k] or 0) + v 537 reward[k] = (reward[k] or 0) + v
src/actions/RoleAction.lua
@@ -1900,4 +1900,40 @@ function _M.itemConvertDevilTicketRpc(agent, data) @@ -1900,4 +1900,40 @@ function _M.itemConvertDevilTicketRpc(agent, data)
1900 return true 1900 return true
1901 end 1901 end
1902 1902
  1903 +function _M.takeTreasureRpc(agent, data)
  1904 + local role = agent.role
  1905 + local extraCount = role.dailyData:getProperty("treasureExtraCount") --每日发现额外宝藏使用次数(累计),隔天清零
  1906 + local mapCount = role.dailyData:getProperty("treasureMapCount")
  1907 + local baseExtra = role.dailyData:getProperty("treasureBaseExtra")
  1908 +
  1909 + if extraCount >= globalCsv.idle_treasure_extra_limie then return 1 end
  1910 + if mapCount <= 0 then return 2 end
  1911 +
  1912 + baseExtra = baseExtra + globalCsv.idle_treasure_base_extra
  1913 +
  1914 + local tmpTreasure, treasureListExtra = role.dailyData:getTreasureExtra(baseExtra)
  1915 + if not tmpTreasure then return 3 end
  1916 +
  1917 + role.dailyData:updateProperty({field = "treasureExtraCount", delta = 1})
  1918 + role.dailyData:updateProperty({field = "treasureBaseExtra", value = mapCount - 1})
  1919 + role.dailyData:updateProperty({field = "treasureBaseExtra", value = baseExtra})
  1920 +
  1921 + SendPacket(actionCodes.Role_takeTreasureRpc, MsgPack.pack({treasureListExtra = treasureListExtra, treasure = tmpTreasure}))
  1922 + return true
  1923 +end
  1924 +
  1925 +function _M.treasureMapRpc(agent,data)
  1926 + local role = agent.role
  1927 + local msg = MsgPack.unpack(data)
  1928 + local count = msg.count or 1
  1929 + local cost ={[ItemId.Jade] = globalCsv.idle_treasure_buy * count}
  1930 + if not role:checkItemEnough(cost) then return 1 end
  1931 + if not role:costItems(cost, {log = {desc = "treasureMap", int1 = count}}) then return 2 end
  1932 + role.dailyData:updateProperty({field = "treasureMapCount", delta = 1*count})
  1933 +
  1934 + local treasureMapCount = role.dailyData:getProperty("treasureMapCount")
  1935 + SendPacket(actionCodes.Role_treasureMapRpc, MsgPack.pack({mapCount = treasureMapCount}))
  1936 + return true
  1937 +end
  1938 +
1903 return _M 1939 return _M
1904 \ No newline at end of file 1940 \ No newline at end of file
src/models/Daily.lua
1 -- 日常数据 1 -- 日常数据
2 2
3 local Daily = class("Daily", require("shared.ModelBaseMysql")) 3 local Daily = class("Daily", require("shared.ModelBaseMysql"))
4 -  
5 -oneDay = 60*60*24 4 +local DailyPlugin = import(".DailyPlugin") --宝藏相关
  5 +DailyPlugin.bind(Daily)
6 6
7 function Daily:ctor(properties) 7 function Daily:ctor(properties)
8 Daily.super.ctor(self, properties) 8 Daily.super.ctor(self, properties)
@@ -37,6 +37,11 @@ Daily.schema = { @@ -37,6 +37,11 @@ Daily.schema = {
37 treasureBase = {"number", 0}, -- 资源值 37 treasureBase = {"number", 0}, -- 资源值
38 treasureList = {"table", {}}, --挂机图鉴 38 treasureList = {"table", {}}, --挂机图鉴
39 39
  40 + treasureListExtra = {"table", {}}, --额外宝藏,挂机图鉴扩展功能
  41 + treasureMapCount = {"number", 0}, --宝藏图,消耗一张宝藏图可以发现一次额外宝藏
  42 + treasureExtraCount = {"number", 0}, --每日发现额外宝藏使用次数(累计),隔天清零
  43 + treasureBaseExtra = {"number", 0}, --额外宝藏资源值
  44 +
40 chatTimes = {"number", 0}, --每日发言次数 45 chatTimes = {"number", 0}, --每日发言次数
41 } 46 }
42 47
@@ -73,7 +78,9 @@ function Daily:refreshDailyData(notify) @@ -73,7 +78,9 @@ function Daily:refreshDailyData(notify)
73 elseif field == "treasureBase" then 78 elseif field == "treasureBase" then
74 dataMap[field] = globalCsv.idle_treasure_base + self.owner:getBnousTreasureBaseMaximum() 79 dataMap[field] = globalCsv.idle_treasure_base + self.owner:getBnousTreasureBaseMaximum()
75 elseif field == "treasureList" then 80 elseif field == "treasureList" then
76 - dataMap[field] = self:getTreasrueList() 81 + dataMap[field] = self:getTreasureList()
  82 + elseif field == "treasureExtraCount" then
  83 + dataMap[field] = 0
77 elseif field == "pvpBought" then 84 elseif field == "pvpBought" then
78 dataMap[field] = 0 85 dataMap[field] = 0
79 elseif field ~= "key" then 86 elseif field ~= "key" then
@@ -101,300 +108,6 @@ function Daily:refreshDailyData(notify) @@ -101,300 +108,6 @@ function Daily:refreshDailyData(notify)
101 end 108 end
102 end 109 end
103 110
104 ---解锁  
105 -function Daily:checkUnlock(treaval)  
106 - local role = self.owner  
107 - local treasureC = treaval.unlock:toArray(true, "=")  
108 - local show = false  
109 - if treasureC[1] == 1 then --通关关卡  
110 - show = self.owner:checkHangPass(treasureC[2])  
111 - elseif treasureC[1] == 2 then --通关拾荒章节=x层  
112 - show = role:checkAdvChapterPass(treasureC[2])  
113 - elseif treasureC[1] == 3 then --拥有指定id的角色时  
114 - local hero = role:getHeroByID(treasureC[2])  
115 - if hero then show = true end  
116 - else  
117 - show = true  
118 - end  
119 - return show  
120 -end  
121 -  
122 ---CD  
123 -function Daily:checkTreasureExpired(treasureAttr, treasureList)  
124 - local curInfo = treasureList[treasureAttr.id]  
125 - if curInfo then  
126 - -- check finish  
127 - if curInfo["expire_time"] then  
128 - if curInfo.cool_time > 1 then  
129 - if skynet.timex() >= curInfo["expire_time"] then  
130 - treasureList[treasureAttr.id] = nil  
131 - curInfo = clone(treasureAttr)  
132 - elseif skynet.timex() >= curInfo["expire_time"] - curInfo.cool_time * oneDay then --未冷却  
133 - curInfo = nil  
134 - else  
135 - curInfo = clone(treasureAttr)  
136 - end  
137 - else  
138 - if skynet.timex() >= curInfo["expire_time"] then  
139 - treasureList[treasureAttr.id] = nil  
140 - end  
141 - curInfo = clone(treasureAttr)  
142 - end  
143 - end  
144 - else  
145 - curInfo = clone(treasureAttr)  
146 - end  
147 -  
148 - return curInfo  
149 -end  
150 -  
151 ---资源  
152 -function Daily:checkTreasureBase(treasureList, treasureBase, removeId)  
153 - local tmptreasure = {}  
154 - local num = 0  
155 - for k, val in pairs(treasureList) do  
156 - if removeId and val.id == removeId then  
157 - treasureList[k] = nil  
158 - else  
159 - if treasureBase >= val.treasure_value then  
160 - treasureBase = treasureBase - val.treasure_value  
161 - tmptreasure[val.id] = val  
162 - num = num + 1  
163 - end  
164 - end  
165 -  
166 - end  
167 - return tmptreasure, num  
168 -end  
169 -  
170 ---绑定通关关卡  
171 -function Daily:checkChapters()  
172 - local chapters = {}  
173 - local tmp_chapters = {}  
174 - local treasureList = self:getProperty("treasureList")  
175 - if next(treasureList) then  
176 - for _, curInfo in pairs(treasureList) do  
177 - if curInfo["expire_time"] or not curInfo["end_time"] then  
178 - tmp_chapters[curInfo.chapter_id] = curInfo  
179 - end  
180 - end  
181 - end  
182 - local hangInfo = self.owner:getProperty("hangInfo") or {}  
183 - for chapter_id, val in pairs(csvdb["idle_battleCsv"]) do  
184 - if chapter_id ~= hangInfo.carbonId then  
185 - if self.owner:checkHangPass(chapter_id) then  
186 - if next(tmp_chapters) and not tmp_chapters[chapter_id] then  
187 - chapters[chapter_id] = val  
188 - else  
189 - chapters[chapter_id] = val  
190 - end  
191 - end  
192 - end  
193 -  
194 - end  
195 - return chapters  
196 -end  
197 -  
198 ---权重  
199 -function Daily:checkTreasureWeight(treasureList, tmptreasure, treasureBase)  
200 - local removeId  
201 - local chapters = self:checkChapters()  
202 - local treasure  
203 - if next(chapters) == nil then return end  
204 -  
205 - --扣除在挖宝列表里未过期宝藏的资源值  
206 - for _, val in pairs(treasureList) do  
207 - if not val["expire_time"] then  
208 - treasureBase = treasureBase - val["treasure_value"]  
209 - end  
210 - end  
211 -  
212 - while next(tmptreasure) do  
213 - local tmp, num = self:checkTreasureBase(tmptreasure, treasureBase, removeId)  
214 -  
215 - if num == 0 then  
216 - break  
217 - elseif num == 1 then  
218 - for _, val in pairs(tmp) do  
219 - treasure = val  
220 - end  
221 - else  
222 - local id = math.randWeight(tmp, "weight") --宝藏id  
223 - if not id then  
224 - break  
225 - end  
226 - treasure = tmp[id]  
227 - end  
228 -  
229 - if treasureBase >= treasure.treasure_value then  
230 - --扣除资源值  
231 - treasureBase = treasureBase - treasure.treasure_value  
232 - else  
233 - break  
234 - end  
235 - local chapterId = math.randWeight(chapters, "treasure_weight") --关卡id  
236 - if not chapterId then  
237 - break  
238 - end  
239 -  
240 - treasure.chapter_id = chapterId  
241 - treasureList[treasure.id] = treasure  
242 - removeId = treasure.id  
243 - end  
244 -end  
245 -  
246 ---chapterId  
247 -function Daily:checkTreasureChapterId(curInfo, treasureList, chapterId)  
248 - local treasure = nil  
249 -  
250 - if not curInfo then  
251 - return treasure  
252 - end  
253 - local treasureBase = self:getProperty("treasureBase")  
254 -  
255 - --开始挖宝关卡ID=挂机关卡ID  
256 - if chapterId == curInfo.chapter_id then  
257 - --开始挖宝  
258 - if not curInfo["end_time"] then  
259 - curInfo["end_time"] = skynet.timex() + curInfo.working_time  
260 - else  
261 - if skynet.timex() >= curInfo["end_time"] then  
262 - if curInfo.cool_time > 1 then  
263 - --宝藏冷却时间  
264 - if not curInfo["expire_time"] then  
265 - if treasureBase >= curInfo["treasure_value"] then  
266 - treasureBase = treasureBase - curInfo["treasure_value"]  
267 -  
268 - treasure = treasureList[curInfo.id]  
269 - curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay  
270 - end  
271 - else  
272 - --已经领取宝藏 检索宝藏冷却时间  
273 - if skynet.timex() >= curInfo["expire_time"] then  
274 - treasureList[curInfo.id] = nil  
275 - end  
276 - end  
277 - else  
278 - if treasureBase >= curInfo["treasure_value"] then  
279 - treasureBase = treasureBase - curInfo["treasure_value"]  
280 -  
281 - treasure = treasureList[curInfo.id]  
282 - treasureList[curInfo.id] = nil  
283 - end  
284 - end  
285 - end  
286 - end  
287 - else  
288 - --已经开始挖宝  
289 - if curInfo["end_time"] then  
290 - if skynet.timex() >= curInfo["end_time"] then  
291 - if curInfo.cool_time > 1 then  
292 - --宝藏冷却时间  
293 - if not curInfo["expire_time"] then  
294 - if treasureBase >= curInfo["treasure_value"] then  
295 - treasureBase = treasureBase - curInfo["treasure_value"]  
296 -  
297 - treasure = treasureList[curInfo.id]  
298 - curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay  
299 - end  
300 -  
301 - else  
302 - --已经领取宝藏 检索宝藏冷却时间  
303 - if skynet.timex() >= curInfo["expire_time"] then  
304 - treasureList[curInfo.id] = nil  
305 - end  
306 - end  
307 - else  
308 - if treasureBase >= curInfo["treasure_value"] then  
309 - treasureBase = treasureBase - curInfo["treasure_value"]  
310 -  
311 - treasure = treasureList[curInfo.id]  
312 - treasureList[curInfo.id] = nil  
313 - end  
314 - end  
315 - else  
316 - curInfo["end_time"] = nil  
317 - end  
318 - end  
319 - end  
320 - return treasure  
321 -end  
322 -  
323 -function Daily:buyTreasure(treasureList)  
324 - local boughtTreasurer = {}  
325 - local treasureBase = self:getProperty("treasureBase")  
326 - for id, val in pairs(treasureList) do  
327 - if treasureBase >= val.treasure_value then  
328 - boughtTreasurer[id] = val  
329 - treasureBase = treasureBase - val.treasure_value  
330 - end  
331 - end  
332 - self:updateProperty({field = "treasureBase", value = treasureBase})  
333 - return boughtTreasurer  
334 -end  
335 -  
336 ---重置宝藏图鉴  
337 -function Daily:resetTreasureList()  
338 - self:updateProperty({field = "treasureList", value = {}})  
339 -end  
340 -  
341 ---宝藏图鉴  
342 -function Daily:getTreasrueList()  
343 - local tmpcsv = csvdb["idle_treasureCsv"]  
344 - local treasureList = self:getProperty("treasureList") or {} --挖宝列表 过期删除 领取奖励删除 跨天更新  
345 - local tmptreasure = {}  
346 - local treasureBase = globalCsv.idle_treasure_base + self.owner:getBnousTreasureBaseMaximum()  
347 - for id, val in pairs(tmpcsv) do  
348 - if self:checkUnlock(val) == true then  
349 - local treasure = self:checkTreasureExpired(val, treasureList)  
350 - if treasure then  
351 - table.insert(tmptreasure, treasure)  
352 - end  
353 - end  
354 - end  
355 - table.sort(tmptreasure, function (a,b) return a.treasure_value > b.treasure_value end)  
356 -  
357 - self:checkTreasureWeight(treasureList, tmptreasure, treasureBase)  
358 - self:updateProperty({field = "treasureList", value = treasureList})  
359 - self:updateProperty({field = "treasureBase", value = treasureBase})  
360 - return treasureList  
361 -end  
362 -  
363 -  
364 ---检索挖宝列表  
365 -function Daily:checkTreasureList(chapterId)  
366 - local treasureList = self:getProperty("treasureList") or {}  
367 - local tmptreasure = {}  
368 - for id, val in pairs(treasureList) do  
369 - local treasure = self:checkTreasureChapterId(val, treasureList, chapterId)  
370 - if treasure ~= nil then  
371 - tmptreasure[id] = treasure  
372 - end  
373 - end  
374 -  
375 - if next(tmptreasure) == nil then  
376 - self:updateProperty({field = "treasureList", value = treasureList})  
377 - return nil  
378 - end  
379 - local boughtTreasurer = self:buyTreasure(tmptreasure)  
380 - self:updateProperty({field = "treasureList", value = treasureList})  
381 - return boughtTreasurer  
382 -end  
383 -  
384 ---宝藏加速  
385 -function Daily:quickTreasureList(chapterId, time)  
386 - local treasureList = self:getProperty("treasureList") or {}  
387 - if next(treasureList) then  
388 - for id, val in pairs(treasureList) do  
389 - if val["end_time"] and val["chapter_id"] and chapterId == val["chapter_id"] then  
390 - val["end_time"] = val["end_time"] - time  
391 - end  
392 - end  
393 - end  
394 - self:updateProperty({field = "treasureList", value = treasureList})  
395 - return self:checkTreasureList(chapterId)  
396 -end  
397 -  
398 function Daily:data() 111 function Daily:data()
399 return { 112 return {
400 hangQC = self:getProperty("hangQC"), 113 hangQC = self:getProperty("hangQC"),
@@ -417,6 +130,10 @@ function Daily:data() @@ -417,6 +130,10 @@ function Daily:data()
417 curPool = self:getProperty("curPool"), 130 curPool = self:getProperty("curPool"),
418 treasureBase = self:getProperty("treasureBase"), 131 treasureBase = self:getProperty("treasureBase"),
419 treasureList = self:getProperty("treasureList"), 132 treasureList = self:getProperty("treasureList"),
  133 + treasureListExtra = self:getProperty("treasureListExtra"),
  134 + treasureMapCount = self:getProperty("treasureMapCount"),
  135 + treasureExtraCount = self:getProperty("treasureExtraCount"),
  136 + treasureBaseExtra = self:getProperty("treasureBaseExtra"),
420 chatTimes = self:getProperty("chatTimes"), 137 chatTimes = self:getProperty("chatTimes"),
421 } 138 }
422 end 139 end
src/models/DailyPlugin.lua 0 → 100644
@@ -0,0 +1,402 @@ @@ -0,0 +1,402 @@
  1 +
  2 +local DailyPlugin = {}
  3 +oneDay = 60*60*24
  4 +function DailyPlugin.bind(Daily)
  5 + --解锁
  6 + function Daily:checkUnlock(treaval)
  7 + local role = self.owner
  8 + local treasureC = treaval.unlock:toArray(true, "=")
  9 + if treasureC[1] == 1 then --通关关卡
  10 + return self.owner:checkHangPass(treasureC[2])
  11 + elseif treasureC[1] == 2 then --通关拾荒章节=x层
  12 + return role:checkAdvChapterPass(treasureC[2])
  13 + elseif treasureC[1] == 3 then --拥有指定id的角色时
  14 + local hero = role:getHeroByID(treasureC[2])
  15 + if hero then return true end
  16 + else
  17 + return true
  18 + end
  19 + return false
  20 + end
  21 +
  22 + --CD
  23 + function Daily:checkTreasureExpired(treasureAttr, treasureList)
  24 + local curInfo = treasureList[treasureAttr.id]
  25 + if curInfo then
  26 + -- check finish
  27 + if curInfo["expire_time"] then
  28 + if curInfo.cool_time > 1 then
  29 + if skynet.timex() >= curInfo["expire_time"] then
  30 + treasureList[treasureAttr.id] = nil
  31 + curInfo = clone(treasureAttr)
  32 + elseif skynet.timex() >= curInfo["expire_time"] - curInfo.cool_time * oneDay then --未冷却
  33 + curInfo = nil
  34 + else
  35 + curInfo = clone(treasureAttr)
  36 + end
  37 + else
  38 + if skynet.timex() >= curInfo["expire_time"] then
  39 + treasureList[treasureAttr.id] = nil
  40 + end
  41 + curInfo = clone(treasureAttr)
  42 + end
  43 + end
  44 + else
  45 + curInfo = clone(treasureAttr)
  46 + end
  47 +
  48 + return curInfo
  49 + end
  50 +
  51 + --绑定通关关卡
  52 + function Daily:checkChapters(treasureList, treasureListOther)
  53 + local chapters = {}
  54 + local tmp_chapters = {}
  55 +
  56 + for _, curInfo in pairs(treasureList or {}) do
  57 + if curInfo["expire_time"] or not curInfo["end_time"] then
  58 + tmp_chapters[curInfo.chapter_id] = curInfo
  59 + end
  60 + end
  61 +
  62 + for _, curInfo in pairs(treasureListOther or {}) do
  63 + if curInfo["expire_time"] or not curInfo["end_time"] then
  64 + tmp_chapters[curInfo.chapter_id] = curInfo
  65 + end
  66 + end
  67 +
  68 + local hangInfo = self.owner:getProperty("hangInfo") or {}
  69 + for chapter_id, val in pairs(csvdb["idle_battleCsv"]) do
  70 + if chapter_id ~= hangInfo.carbonId then
  71 + if self.owner:checkHangPass(chapter_id) then
  72 + if next(tmp_chapters) and not tmp_chapters[chapter_id] then
  73 + chapters[chapter_id] = val
  74 + else
  75 + chapters[chapter_id] = val
  76 + end
  77 + end
  78 + end
  79 +
  80 + end
  81 + return chapters
  82 + end
  83 +
  84 + --权重
  85 + function Daily:checkTreasureWeight(treasureList, tmpTreasure, treasureBase, treasureListOther)
  86 + local chapters = self:checkChapters(treasureList, treasureListOther)
  87 + if not chapters or not next(chapters) then return end
  88 +
  89 + --扣除在挖宝列表里未过期宝藏的资源值
  90 + for _, val in pairs(treasureList) do
  91 + if not val["expire_time"] then
  92 + treasureBase = treasureBase - val["treasure_value"]
  93 + end
  94 + end
  95 +
  96 + if tmpTreasure and next(tmpTreasure) then
  97 + table.sort(tmpTreasure, function (a, b) return a.treasure_value > b.treasure_value end)
  98 + end
  99 +
  100 + local treasure
  101 + while next(tmpTreasure or {}) do
  102 + local tmp = {}
  103 + local tmpBase = treasureBase
  104 + for _, val in pairs(tmpTreasure) do
  105 + if tmpBase >= val.treasure_value then
  106 + tmpBase = tmpBase - val.treasure_value
  107 + tmp[val.id] = val
  108 + end
  109 + end
  110 + if not next(tmp) then break end
  111 +
  112 + local id = math.randWeight(tmp, "weight") --宝藏id
  113 + if not id then break end
  114 +
  115 + treasure = tmp[id]
  116 + if treasureBase < treasure.treasure_value then break end
  117 + --扣除资源值
  118 + treasureBase = treasureBase - treasure.treasure_value
  119 +
  120 + local chapterId = math.randWeight(chapters, "treasure_weight") --关卡id
  121 + if not chapterId then break end
  122 +
  123 + treasure.chapter_id = chapterId
  124 + treasureList[treasure.id] = treasure
  125 +
  126 + tmpTreasure[treasure.id] = nil
  127 + chapters[chapterId] = nil
  128 + end
  129 + end
  130 +
  131 + --只抓一个 额外宝藏
  132 + function Daily:getOneTreasureExtra(treasureList, tmpTreasure, treasureBase, treasureListOther)
  133 + local chapters = self:checkChapters(treasureList, treasureListOther)
  134 + if not chapters or not next(chapters) then return end
  135 +
  136 + --扣除在挖宝列表里未过期宝藏的资源值
  137 + for _, val in pairs(treasureList) do
  138 + if not val["expire_time"] then
  139 + treasureBase = treasureBase - val["treasure_value"]
  140 + end
  141 + end
  142 +
  143 + if tmpTreasure and next(tmpTreasure) then
  144 + table.sort(tmpTreasure, function (a, b) return a.treasure_value > b.treasure_value end)
  145 + end
  146 +
  147 + local treasure
  148 + local tmp = {}
  149 + local tmpBase = treasureBase
  150 + for _, val in pairs(tmpTreasure) do
  151 + if tmpBase >= val.treasure_value then
  152 + tmpBase = tmpBase - val.treasure_value
  153 + tmp[val.id] = val
  154 + end
  155 + end
  156 + if not next(tmp) then return end
  157 +
  158 + local id = math.randWeight(tmp, "weight") --宝藏id
  159 + if not id then return end
  160 +
  161 + treasure = tmp[id]
  162 + if treasureBase < treasure.treasure_value then return end
  163 + --扣除资源值
  164 + treasureBase = treasureBase - treasure.treasure_value
  165 +
  166 + local chapterId = math.randWeight(chapters, "treasure_weight") --关卡id
  167 + if not chapterId then return end
  168 +
  169 +
  170 + treasure.chapter_id = chapterId
  171 + treasureList[treasure.id] = treasure
  172 +
  173 + return treasure
  174 + end
  175 +
  176 + --chapterId
  177 + function Daily:checkTreasureChapterId(curInfo, treasureList, chapterId, treasureBase)
  178 + if not curInfo then return nil end
  179 +
  180 + local treasure = nil
  181 + --开始挖宝关卡ID=挂机关卡ID
  182 + if chapterId == curInfo.chapter_id then
  183 + --开始挖宝
  184 + if not curInfo["end_time"] then
  185 + curInfo["end_time"] = skynet.timex() + curInfo.working_time
  186 + else
  187 + if skynet.timex() >= curInfo["end_time"] then
  188 + if curInfo.cool_time > 1 then
  189 + --宝藏冷却时间
  190 + if not curInfo["expire_time"] then
  191 + if treasureBase >= curInfo["treasure_value"] then
  192 + treasureBase = treasureBase - curInfo["treasure_value"]
  193 +
  194 + treasure = treasureList[curInfo.id]
  195 + curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay
  196 + end
  197 + else
  198 + --已经领取宝藏 检索宝藏冷却时间
  199 + if skynet.timex() >= curInfo["expire_time"] then
  200 + treasureList[curInfo.id] = nil
  201 + end
  202 + end
  203 + else
  204 + if treasureBase >= curInfo["treasure_value"] then
  205 + treasureBase = treasureBase - curInfo["treasure_value"]
  206 +
  207 + treasure = treasureList[curInfo.id]
  208 + treasureList[curInfo.id] = nil
  209 + end
  210 + end
  211 + end
  212 + end
  213 + else
  214 + --已经开始挖宝
  215 + if curInfo["end_time"] then
  216 + if skynet.timex() >= curInfo["end_time"] then
  217 + if curInfo.cool_time > 1 then
  218 + --宝藏冷却时间
  219 + if not curInfo["expire_time"] then
  220 + if treasureBase >= curInfo["treasure_value"] then
  221 + treasureBase = treasureBase - curInfo["treasure_value"]
  222 +
  223 + treasure = treasureList[curInfo.id]
  224 + curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay
  225 + end
  226 +
  227 + else
  228 + --已经领取宝藏 检索宝藏冷却时间
  229 + if skynet.timex() >= curInfo["expire_time"] then
  230 + treasureList[curInfo.id] = nil
  231 + end
  232 + end
  233 + else
  234 + if treasureBase >= curInfo["treasure_value"] then
  235 + treasureBase = treasureBase - curInfo["treasure_value"]
  236 +
  237 + treasure = treasureList[curInfo.id]
  238 + treasureList[curInfo.id] = nil
  239 + end
  240 + end
  241 + else
  242 + curInfo["end_time"] = nil
  243 + end
  244 + end
  245 + end
  246 + return treasure
  247 + end
  248 +
  249 + function Daily:buyTreasure(treasureList)
  250 + local boughtTreasure = {}
  251 + local treasureBase = self:getProperty("treasureBase")
  252 + for id, val in pairs(treasureList) do
  253 + if treasureBase >= val.treasure_value then
  254 + boughtTreasure[id] = val
  255 + treasureBase = treasureBase - val.treasure_value
  256 + end
  257 + end
  258 + self:updateProperty({field = "treasureBase", value = treasureBase})
  259 + return boughtTreasure
  260 + end
  261 +
  262 + --重置宝藏图鉴
  263 + function Daily:resetTreasureList()
  264 + self:updateProperty({field = "treasureList", value = {}})
  265 + self:updateProperty({field = "treasureListExtra", value = {}})
  266 + end
  267 +
  268 + --宝藏图鉴
  269 + function Daily:getTreasureList()
  270 + local tmpcsv = csvdb["idle_treasureCsv"]
  271 + local treasureList = self:getProperty("treasureList") or {} --挖宝列表 过期删除 领取奖励删除 跨天更新
  272 + local treasureListExtra = self:getProperty("treasureListExtra") or {} --额外宝藏列表 过期删除 领取奖励删除 跨天更新
  273 + local tmpTreasure = {}
  274 + local treasureBase = globalCsv.idle_treasure_base + self.owner:getBnousTreasureBaseMaximum()
  275 + for _, val in pairs(tmpcsv) do
  276 + if self:checkUnlock(val) == true then
  277 + local treasure = self:checkTreasureExpired(val, treasureList)
  278 + if treasure then
  279 + table.insert(tmpTreasure, treasure)
  280 + end
  281 + end
  282 + end
  283 +
  284 + if not next(tmpTreasure) then return treasureList end
  285 +
  286 + self:checkTreasureWeight(treasureList, tmpTreasure, treasureBase, treasureListExtra)
  287 + self:updateProperty({field = "treasureList", value = treasureList})
  288 + self:updateProperty({field = "treasureBase", value = treasureBase})
  289 + return treasureList
  290 + end
  291 +
  292 +
  293 + --检索挖宝列表 获得宝藏
  294 + function Daily:checkTreasureList(chapterId)
  295 + local treasureList = self:getProperty("treasureList") or {}
  296 + local treasureBase = self:getProperty("treasureBase") or {}
  297 + local tmpTreasure = {}
  298 + for id, val in pairs(treasureList) do
  299 + local treasure = self:checkTreasureChapterId(val, treasureList, chapterId, treasureBase)
  300 + if treasure then
  301 + tmpTreasure[id] = treasure
  302 + end
  303 + end
  304 +
  305 + if not next(tmpTreasure) then
  306 + self:updateProperty({field = "treasureList", value = treasureList})
  307 + return nil
  308 + end
  309 + local boughtTreasure = self:buyTreasure(tmpTreasure)
  310 + self:updateProperty({field = "treasureList", value = treasureList})
  311 + return boughtTreasure
  312 + end
  313 +
  314 + --宝藏加速
  315 + function Daily:quickTreasureList(chapterId, time)
  316 + local treasureList = self:getProperty("treasureList") or {}
  317 + if next(treasureList) then
  318 + for _, val in pairs(treasureList) do
  319 + if val["end_time"] and val["chapter_id"] and chapterId == val["chapter_id"] then
  320 + val["end_time"] = val["end_time"] - time
  321 + end
  322 + end
  323 + end
  324 + self:updateProperty({field = "treasureList", value = treasureList})
  325 + return self:checkTreasureList(chapterId)
  326 + end
  327 +
  328 + --宝藏功能优化——增加"发现宝藏"功能
  329 + function Daily:buyTreasureExtra(treasureList)
  330 + local boughtTreasure = {}
  331 + local treasureBase = self:getProperty("treasureExtraBase")
  332 + for id, val in pairs(treasureList) do
  333 + if treasureBase >= val.treasure_value then
  334 + boughtTreasure[id] = val
  335 + treasureBase = treasureBase - val.treasure_value
  336 + end
  337 + end
  338 + self:updateProperty({field = "treasureExtraBase", value = treasureBase})
  339 + return boughtTreasure
  340 + end
  341 +
  342 + function Daily:getTreasureExtra(tmpBaseExtra)
  343 + local tmpcsv = csvdb["idle_treasureCsv"]
  344 + local treasureList = self:getProperty("treasureList") or {} --挖宝列表 过期删除 领取奖励删除 跨天更新
  345 + local treasureListExtra = self:getProperty("treasureListExtra") or {} --额外宝藏 过期删除 领取奖励删除 跨天更新
  346 +
  347 + local tmpTreasure = {}
  348 + for _, val in pairs(tmpcsv) do
  349 + if self:checkUnlock(val) then
  350 + local treasure = self:checkTreasureExpired(val, treasureListExtra)
  351 + if treasure then
  352 + table.insert(tmpTreasure, treasure)
  353 + end
  354 + end
  355 + end
  356 + if not next(tmpTreasure) then return nil, treasureListExtra end
  357 +
  358 + local tmp = self:getOneTreasureExtra(treasureListExtra, tmpTreasure, tmpBaseExtra, treasureList)
  359 + self:updateProperty({field = "treasureListExtra", value = treasureListExtra})
  360 + return tmp, treasureListExtra
  361 + end
  362 +
  363 + --检索宝藏列表 获得额外宝藏
  364 + function Daily:checkTreasureListExtra(chapterId)
  365 + local treasureListExtra = self:getProperty("treasureListExtra") or {}
  366 + local treasureBaseExtra = self:getProperty("treasureBaseExtra") or {}
  367 + local tmpTreasure = {}
  368 + for id, val in pairs(treasureListExtra) do
  369 + local treasure = self:checkTreasureChapterId(val, treasureListExtra, chapterId, treasureBaseExtra)
  370 + if treasure then
  371 + tmpTreasure[id] = treasure
  372 + end
  373 + end
  374 +
  375 + if next(tmpTreasure) then
  376 + self:updateProperty({field = "treasureListExtra", value = treasureListExtra})
  377 + return nil
  378 + end
  379 +
  380 + local boughtTreasure = self:buyTreasureExtra(tmpTreasure)
  381 + self:updateProperty({field = "treasureListExtra", value = treasureListExtra})
  382 + return boughtTreasure
  383 + end
  384 +
  385 + --额外宝藏加速
  386 + function Daily:quickTreasureListExtra(chapterId, time)
  387 + local treasureListExtra = self:getProperty("treasureListExtra") or {}
  388 + if next(treasureListExtra) then
  389 + for _, val in pairs(treasureListExtra) do
  390 + if val["end_time"] and val["chapter_id"] and chapterId == val["chapter_id"] then
  391 + val["end_time"] = val["end_time"] - time
  392 + end
  393 + end
  394 + end
  395 +
  396 + self:updateProperty({field = "treasureListExtra", value = treasureListExtra})
  397 + return self:checkTreasureListExtra(chapterId)
  398 + end
  399 +end
  400 +
  401 +
  402 +return DailyPlugin
0 \ No newline at end of file 403 \ No newline at end of file
src/models/RoleLog.lua
@@ -76,6 +76,7 @@ local ItemReason = { @@ -76,6 +76,7 @@ local ItemReason = {
76 itemConvertDevilTicket = 160, -- 兑换魔鬼训练营门票 76 itemConvertDevilTicket = 160, -- 兑换魔鬼训练营门票
77 trainHero = 161, -- 魔鬼训练开始 77 trainHero = 161, -- 魔鬼训练开始
78 trainQuickHero = 162, -- 魔鬼训练加速 78 trainQuickHero = 162, -- 魔鬼训练加速
  79 + treasureMap = 163, --虹光玉兑换宝藏图
79 80
80 81
81 82
src/models/RolePlugin.lua
@@ -2319,6 +2319,18 @@ function RolePlugin.bind(Role) @@ -2319,6 +2319,18 @@ function RolePlugin.bind(Role)
2319 -- end 2319 -- end
2320 -- end 2320 -- end
2321 2321
  2322 + --月卡-特刊加判断;
  2323 + -- 问题描述: 支付回调里订单支付完成,但是没有奖励,对应的特刊也没有购买成功。
  2324 + -- 避免这种情况发生,在生成订单的时候就判断是否能购买特刊,生成对应的订单id
  2325 + if rechargeData.shop == 2 and rechargeData.type == CardType.SuperMonthCard then
  2326 + local card = csvdb["shop_cardCsv"][rechargeData.id]
  2327 + if not card then return "" end
  2328 +
  2329 + if not self.storeData:buySMonthCardLimit(card["buyLimit"]) then
  2330 + return ""
  2331 + end
  2332 + end
  2333 +
2322 local orderId = redisproxy:hincrby("autoincrement_set", "order", 1) 2334 local orderId = redisproxy:hincrby("autoincrement_set", "order", 1)
2323 local uid = orderId * MAX_SVR_ID + serverId 2335 local uid = orderId * MAX_SVR_ID + serverId
2324 local partnerOrderId = string.format("%d", orderId * MAX_SVR_ID + serverId) 2336 local partnerOrderId = string.format("%d", orderId * MAX_SVR_ID + serverId)
src/models/Store.lua
@@ -342,26 +342,26 @@ function Store:isSMonthCardExpired(id) @@ -342,26 +342,26 @@ function Store:isSMonthCardExpired(id)
342 end 342 end
343 343
344 function Store:buySMonthCardLimit(buylimit) 344 function Store:buySMonthCardLimit(buylimit)
  345 + if not buylimit or buylimit == "" then return true end
  346 +
345 local smonthCards = self:getProperty("smonthCards") or {} 347 local smonthCards = self:getProperty("smonthCards") or {}
346 - for k, v in pairs(buylimit) do 348 + for k, v in pairs(buylimit:toNumMap() or {}) do
347 if k == 1 then 349 if k == 1 then
348 if v == 101 then 350 if v == 101 then
349 if self:isMonthCardExpire() then 351 if self:isMonthCardExpire() then
350 - skynet.error("月卡过期")  
351 return false 352 return false
352 end 353 end
353 else 354 else
354 - if smonthCards[v] == nil then  
355 - skynet.error("没有购买增刊里的条件, %d", v) 355 + if not smonthCards[v] then
356 return false 356 return false
357 end 357 end
358 end 358 end
359 elseif k == 2 then 359 elseif k == 2 then
360 - if smonthCards[v] == nil and v ~= 101 then 360 + if not smonthCards[v] then
361 skynet.error("没有购买增刊条件里的特刊, %d", v) 361 skynet.error("没有购买增刊条件里的特刊, %d", v)
362 return false 362 return false
363 end 363 end
364 - if self:isSMonthCardExpired(v) == false and v ~= 101 then 364 + if not self:isSMonthCardExpired(v) then
365 skynet.error("上期特刊奖励没领完") --策划yc+hbw 没领完上期特刊,新一期特刊不展示,不允许购买 365 skynet.error("上期特刊奖励没领完") --策划yc+hbw 没领完上期特刊,新一期特刊不展示,不允许购买
366 return false 366 return false
367 end 367 end
@@ -372,18 +372,17 @@ end @@ -372,18 +372,17 @@ end
372 372
373 function Store:buySMonthCard(id) 373 function Store:buySMonthCard(id)
374 local smonthCards = self:getProperty("smonthCards") or {} 374 local smonthCards = self:getProperty("smonthCards") or {}
  375 + local card = csvdb["shop_cardCsv"][id]
  376 + if not card then return false end
  377 +
  378 + if not self:buySMonthCardLimit(card["buyLimit"]) then
  379 + skynet.error("不满足购买条件")
  380 + return false
  381 + end
375 382
376 local BuyMonthCard = {} 383 local BuyMonthCard = {}
377 BuyMonthCard["renewal"]= function() 384 BuyMonthCard["renewal"]= function()
378 --续刊 385 --续刊
379 - local card = csvdb["shop_cardCsv"][id] or {}  
380 - if card["buyLimit"] and card["buyLimit"] ~= "" then  
381 - if not self:buySMonthCardLimit(card["buyLimit"]:toNumMap()) then  
382 - skynet.error("不满足购买条件")  
383 - return false  
384 - end  
385 - end  
386 -  
387 local smonthCard = smonthCards[id] or {} 386 local smonthCard = smonthCards[id] or {}
388 if next(smonthCard) then 387 if next(smonthCard) then
389 smonthCard["buyCount"] = (smonthCard["buyCount"] or 0) + 1 388 smonthCard["buyCount"] = (smonthCard["buyCount"] or 0) + 1
@@ -397,14 +396,6 @@ function Store:buySMonthCard(id) @@ -397,14 +396,6 @@ function Store:buySMonthCard(id)
397 396
398 BuyMonthCard["order"] = function() 397 BuyMonthCard["order"] = function()
399 --增刊 398 --增刊
400 - local card = csvdb["shop_cardCsv"][id] or {}  
401 - if card["buyLimit"] and card["buyLimit"] ~= "" then  
402 - if not self:buySMonthCardLimit(card["buyLimit"]:toNumMap()) then  
403 - skynet.error("不满足增刊条件")  
404 - return false  
405 - end  
406 - end  
407 -  
408 smonthCards[id] = {["periods"] = (card["amount"] or 30), ["buyCount"] = 1} 399 smonthCards[id] = {["periods"] = (card["amount"] or 30), ["buyCount"] = 1}
409 self:updateProperty({field= "smonthCards", value = smonthCards}) 400 self:updateProperty({field= "smonthCards", value = smonthCards})
410 return true 401 return true