Commit 9ea0c50278fab51eb65e3a184490bd945cdfe712
1 parent
70aa8660
限时礼包
Showing
9 changed files
with
120 additions
and
10 deletions
Show diff stats
src/GlobalVar.lua
| ... | ... | @@ -290,12 +290,18 @@ MailId = { |
| 290 | 290 | SuperMonthCardEx = 204, |
| 291 | 291 | BattleCardAward = 210, |
| 292 | 292 | |
| 293 | - ActDrawCard = 231, | |
| 294 | - ActOpenBox = 232, | |
| 293 | + ActSellFood = 231, | |
| 294 | + ActDrawCard = 232, | |
| 295 | 295 | ActAdvDraw = 233, |
| 296 | - ActSellFood = 234, | |
| 297 | - ActDrawCardReward = 221, | |
| 298 | - ActOpenBoxReward = 222, | |
| 296 | + ActOpenBox = 234, | |
| 297 | + ActSellFoodReward = 221, | |
| 298 | + ActDrawCardReward = 222, | |
| 299 | 299 | ActAdvDrawReward = 223, |
| 300 | - ActSellFoodReward = 224, | |
| 300 | + ActOpenBoxReward = 224, | |
| 301 | 301 | } |
| 302 | + | |
| 303 | +TriggerEventType = { | |
| 304 | + HangPass = 1, | |
| 305 | + LevelUp = 2, | |
| 306 | + TowerPass = 3, | |
| 307 | +} | |
| 302 | 308 | \ No newline at end of file | ... | ... |
src/ProtocolCode.lua
src/actions/RoleAction.lua
| ... | ... | @@ -1065,4 +1065,17 @@ function _M.goldBuyRpc(agent, data) |
| 1065 | 1065 | return true |
| 1066 | 1066 | end |
| 1067 | 1067 | |
| 1068 | +function _M.getDownloadCvRewardRpc(agent, data) | |
| 1069 | + local role = agent.role | |
| 1070 | + local flag = role:getProperty("downCvR") or 0 | |
| 1071 | + if flag ~= 0 then | |
| 1072 | + return 1 | |
| 1073 | + end | |
| 1074 | + local r = globalCsv.role_download_cv_reward | |
| 1075 | + local reward, change = role:award(r, {log = {desc = "downloadCv"}}) | |
| 1076 | + role:updateProperty({field="downCvR", value=1}) | |
| 1077 | + SendPacket(actionCodes.Role_getDownloadCvRewardRpc, MsgPack.pack(role:packReward(reward, change))) | |
| 1078 | + return true | |
| 1079 | +end | |
| 1080 | + | |
| 1068 | 1081 | return _M |
| 1069 | 1082 | \ No newline at end of file | ... | ... |
src/actions/StoreAction.lua
| ... | ... | @@ -263,6 +263,13 @@ function _M.shopBuyRpc(agent , data) |
| 263 | 263 | local dataSet = csvdb["shop_normalCsv"][id] |
| 264 | 264 | if not dataSet then return end |
| 265 | 265 | |
| 266 | + if dataSet.unlock ~= "" then | |
| 267 | + if not role:checkHangPass(tonumber(config.unlock)) then | |
| 268 | + skynet.error(string.format("shopBuyRpc,user do not finish hang pass, user_id:%d", role:getProperty("id"))) | |
| 269 | + return 1 | |
| 270 | + end | |
| 271 | + end | |
| 272 | + | |
| 266 | 273 | local buyRecord = role.storeData:getProperty("buyR") |
| 267 | 274 | if math.illegalNum(count, 1, (dataSet.limit == 0 and math.huge or dataSet.limit - (buyRecord[id] or 0))) then |
| 268 | 275 | skynet.error(string.format("shop buy over limit, user_id:%d, goods_id:%d", role:getProperty("id"), id)) | ... | ... |
src/models/Role.lua
src/models/RolePlugin.lua
| ... | ... | @@ -217,6 +217,7 @@ function RolePlugin.bind(Role) |
| 217 | 217 | if csvdb["player_expCsv"][level + 1] then -- 有下一级 |
| 218 | 218 | newExp = newExp - csvdb["player_expCsv"][level].exp |
| 219 | 219 | level = level + 1 |
| 220 | + self:checkTaskEnter("RoleLevelUp", {level = level}) | |
| 220 | 221 | else |
| 221 | 222 | newExp = csvdb["player_expCsv"][level].exp - 1 -- 没有下一级了 经验溢出太多 扣除 |
| 222 | 223 | end | ... | ... |
src/models/RoleTask.lua
| ... | ... | @@ -76,6 +76,9 @@ local TaskType = { |
| 76 | 76 | AddFriend = 802, -- 加入一个好友 - count |
| 77 | 77 | GetFriendP = 803, -- 获得友情点 - count |
| 78 | 78 | |
| 79 | + -- 角色相关 | |
| 80 | + RoleLevelUp = 901, -- 角色升级 - curlevel | |
| 81 | + | |
| 79 | 82 | --功能未实现 todo |
| 80 | 83 | AdvShop = 1002, -- 冒险商城 |
| 81 | 84 | UnionBoss = 1004, -- 工会boss |
| ... | ... | @@ -216,6 +219,15 @@ local ActivityListener = { |
| 216 | 219 | } |
| 217 | 220 | } |
| 218 | 221 | |
| 222 | +local StoreListener = { | |
| 223 | + func = "checkStoreTask", | |
| 224 | + listen = { | |
| 225 | + [TaskType.HangPass] = {{TriggerEventType.HangPass, f("id")}}, | |
| 226 | + [TaskType.RoleLevelUp] = {{TriggerEventType.LevelUp, f("level")}}, | |
| 227 | + [TaskType.TowerPass] = {{TriggerEventType.TowerPass, f("level")}}, | |
| 228 | + } | |
| 229 | +} | |
| 230 | + | |
| 219 | 231 | |
| 220 | 232 | local TaskListeners = { |
| 221 | 233 | StoryListener, |
| ... | ... | @@ -223,6 +235,7 @@ local TaskListeners = { |
| 223 | 235 | AchievListener, |
| 224 | 236 | SudokuListener, |
| 225 | 237 | ActivityListener, |
| 238 | + StoreListener, | |
| 226 | 239 | } |
| 227 | 240 | |
| 228 | 241 | local RoleTask = {} |
| ... | ... | @@ -533,6 +546,10 @@ function RoleTask.bind(Role) |
| 533 | 546 | self.activity:checkActivity(notNotify, activityType, ...) |
| 534 | 547 | end |
| 535 | 548 | |
| 549 | + function Role:checkStoreTask(notNotify, triggerType, param) | |
| 550 | + self.storeData:OnTriggerLimitTimePack(triggerType, param) | |
| 551 | + end | |
| 552 | + | |
| 536 | 553 | end |
| 537 | 554 | |
| 538 | 555 | return RoleTask |
| 539 | 556 | \ No newline at end of file | ... | ... |
src/models/Store.lua
| ... | ... | @@ -20,6 +20,7 @@ Store.schema = { |
| 20 | 20 | privCardEx = {"number", 0}, -- 特权卡过期时间戳 |
| 21 | 21 | getMailT1 = {"number",0}, -- 上次发送月卡福利邮件的时间 |
| 22 | 22 | getMailT2 = {"number",0}, -- 上次发送超级月卡福利邮件的时间 |
| 23 | + packTrigger = {"table", {}} -- 礼包触发记录 {关卡难度1={id, 通关关卡数,升级数,爬塔层数}, ...} | |
| 23 | 24 | } |
| 24 | 25 | |
| 25 | 26 | function Store:updateProperty(params) |
| ... | ... | @@ -60,7 +61,7 @@ end |
| 60 | 61 | -- 发送月卡邮件 |
| 61 | 62 | function Store:sendMonthCardEmail() |
| 62 | 63 | local timeNow = skynet.timex() |
| 63 | - local tabs = {{ex="monthCardEx", t="getMailT1", mail=MailId.MonthCard, alert=MailId.MonthCardEx}, | |
| 64 | + local tabs = {{ex="monthCardEx", t="getMailT1", mail=MailId.MonthCard, alert=MailId.MonthCardEx}, | |
| 64 | 65 | {ex="smonthCardEx", t="getMailT2", mail=MailId.SuperMonthCard, alert=MailId.SuperMonthCardEx}} |
| 65 | 66 | for _, v in ipairs(tabs) do |
| 66 | 67 | local ex = self:getProperty(v.ex) |
| ... | ... | @@ -216,7 +217,7 @@ function Store:onBattleCardReset() |
| 216 | 217 | if config then |
| 217 | 218 | local freeFlag = string.char(string.getbit(battleCardFreeRecord, id)) |
| 218 | 219 | local limitFlag = string.char(string.getbit(battleCardLimitRecord, id)) |
| 219 | - | |
| 220 | + | |
| 220 | 221 | if battlePoint < config.point then |
| 221 | 222 | break |
| 222 | 223 | end |
| ... | ... | @@ -227,7 +228,7 @@ function Store:onBattleCardReset() |
| 227 | 228 | concatGift(config.giftLimit) |
| 228 | 229 | end |
| 229 | 230 | end |
| 230 | - end | |
| 231 | + end | |
| 231 | 232 | self.owner:sendMail(MailId.BattleCardAward, nil, gift) |
| 232 | 233 | -- 计算剩余奖励 |
| 233 | 234 | self:updateProperty({field = "battleCard", value=0}) |
| ... | ... | @@ -266,6 +267,68 @@ function Store:resetStoreReored(resetId) |
| 266 | 267 | self:updateProperty({field = "buyR", value = buyRecord}) |
| 267 | 268 | end |
| 268 | 269 | |
| 270 | +--触发限时礼包 | |
| 271 | +function Store:OnTriggerLimitTimePack(eventType, param) | |
| 272 | + local limitPack = self:getProperty("limitTPack") | |
| 273 | + local timeNow = skynet.timex() | |
| 274 | + local find = false | |
| 275 | + -- 有未过期的限时礼包不再推送 | |
| 276 | + for k, v in pairs(limitPack) do | |
| 277 | + if v > timeNow then | |
| 278 | + find = true | |
| 279 | + break | |
| 280 | + end | |
| 281 | + end | |
| 282 | + if find == true then | |
| 283 | + return | |
| 284 | + end | |
| 285 | + limitPack = {} | |
| 286 | + local hangPass = self.owner:getProperty("hangPass") | |
| 287 | + local triggerRecord = self:getProperty("packTrigger") | |
| 288 | + local result = {} | |
| 289 | + local maxDiff = 0 | |
| 290 | + -- 取满足限时礼包关卡要求的对应数据 | |
| 291 | + for diff, maxCarbonId in pairs(hangPass) do | |
| 292 | + for id, cfg in pairs(csvdb["shop_packCsv"]) do | |
| 293 | + local range = cfg.showRange:toArray(true, "=") | |
| 294 | + local beginRange = range[1] or 0 | |
| 295 | + local endRange = range[2] or 0 | |
| 296 | + if maxCarbonId > beginRange and maxCarbonId <= endRange and cfg.type == eventType then | |
| 297 | + result[diff] = cfg | |
| 298 | + maxDiff = math.max(maxDiff, diff) | |
| 299 | + break | |
| 300 | + end | |
| 301 | + end | |
| 302 | + end | |
| 303 | + local shopGoodsId = 0 | |
| 304 | + for diff, cfg in pairs(result) do | |
| 305 | + if diff == maxDiff then | |
| 306 | + local record = triggerRecord[diff] or {} | |
| 307 | + if (record[0] or 0) ~= cfg.id and next(record) then | |
| 308 | + record = {} | |
| 309 | + end | |
| 310 | + record[0] = cfg.id | |
| 311 | + record[eventType] = (record[eventType] or 0) + 1 | |
| 312 | + if record[eventType] == 1 or record[eventType] % 10 == 0 then | |
| 313 | + local pool = cfg.packId:toArray(true, "=") | |
| 314 | + local idx = math.random(1, #pool) | |
| 315 | + shopGoodsId = pool[idx] | |
| 316 | + end | |
| 317 | + triggerRecord[diff] = record | |
| 318 | + end | |
| 319 | + end | |
| 320 | + if shopGoodsId ~= 0 then | |
| 321 | + local rechargeCfg = csvdb["shop_rechargeCsv"][shopGoodsId] | |
| 322 | + if rechargeCfg then | |
| 323 | + limitPack[rechargeCfg.id] = timeNow + rechargeCfg.time | |
| 324 | + self:updateProperty({field = "limitTPack", value = limitPack}) | |
| 325 | + end | |
| 326 | + end | |
| 327 | + if next(result) then | |
| 328 | + self:updateProperty({field = "packTrigger", value = triggerRecord}) | |
| 329 | + end | |
| 330 | +end | |
| 331 | + | |
| 269 | 332 | function Store:data() |
| 270 | 333 | return { |
| 271 | 334 | buyR = self:getProperty("buyR"), | ... | ... |