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,12 +290,18 @@ MailId = { | ||
| 290 | SuperMonthCardEx = 204, | 290 | SuperMonthCardEx = 204, |
| 291 | BattleCardAward = 210, | 291 | BattleCardAward = 210, |
| 292 | 292 | ||
| 293 | - ActDrawCard = 231, | ||
| 294 | - ActOpenBox = 232, | 293 | + ActSellFood = 231, |
| 294 | + ActDrawCard = 232, | ||
| 295 | ActAdvDraw = 233, | 295 | ActAdvDraw = 233, |
| 296 | - ActSellFood = 234, | ||
| 297 | - ActDrawCardReward = 221, | ||
| 298 | - ActOpenBoxReward = 222, | 296 | + ActOpenBox = 234, |
| 297 | + ActSellFoodReward = 221, | ||
| 298 | + ActDrawCardReward = 222, | ||
| 299 | ActAdvDrawReward = 223, | 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 | \ No newline at end of file | 308 | \ No newline at end of file |
src/ProtocolCode.lua
| @@ -44,6 +44,7 @@ actionCodes = { | @@ -44,6 +44,7 @@ actionCodes = { | ||
| 44 | Role_guideRpc = 129, | 44 | Role_guideRpc = 129, |
| 45 | Role_getRandomNameRpc = 130, | 45 | Role_getRandomNameRpc = 130, |
| 46 | Role_goldBuyRpc = 131, | 46 | Role_goldBuyRpc = 131, |
| 47 | + Role_getDownloadCvRewardRpc = 132, | ||
| 47 | 48 | ||
| 48 | Adv_startAdvRpc = 151, | 49 | Adv_startAdvRpc = 151, |
| 49 | Adv_startHangRpc = 152, | 50 | Adv_startHangRpc = 152, |
src/actions/RoleAction.lua
| @@ -1065,4 +1065,17 @@ function _M.goldBuyRpc(agent, data) | @@ -1065,4 +1065,17 @@ function _M.goldBuyRpc(agent, data) | ||
| 1065 | return true | 1065 | return true |
| 1066 | end | 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 | return _M | 1081 | return _M |
| 1069 | \ No newline at end of file | 1082 | \ No newline at end of file |
src/actions/StoreAction.lua
| @@ -263,6 +263,13 @@ function _M.shopBuyRpc(agent , data) | @@ -263,6 +263,13 @@ function _M.shopBuyRpc(agent , data) | ||
| 263 | local dataSet = csvdb["shop_normalCsv"][id] | 263 | local dataSet = csvdb["shop_normalCsv"][id] |
| 264 | if not dataSet then return end | 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 | local buyRecord = role.storeData:getProperty("buyR") | 273 | local buyRecord = role.storeData:getProperty("buyR") |
| 267 | if math.illegalNum(count, 1, (dataSet.limit == 0 and math.huge or dataSet.limit - (buyRecord[id] or 0))) then | 274 | if math.illegalNum(count, 1, (dataSet.limit == 0 and math.huge or dataSet.limit - (buyRecord[id] or 0))) then |
| 268 | skynet.error(string.format("shop buy over limit, user_id:%d, goods_id:%d", role:getProperty("id"), id)) | 275 | skynet.error(string.format("shop buy over limit, user_id:%d, goods_id:%d", role:getProperty("id"), id)) |
src/models/Role.lua
| @@ -159,6 +159,8 @@ Role.schema = { | @@ -159,6 +159,8 @@ Role.schema = { | ||
| 159 | redp = {"table", {}}, -- 待消除红点 -- 通常打开对应界面就消除的红点 红点消除的方法 在对应的协议中使用 {tag = pms } | 159 | redp = {"table", {}}, -- 待消除红点 -- 通常打开对应界面就消除的红点 红点消除的方法 在对应的协议中使用 {tag = pms } |
| 160 | 160 | ||
| 161 | chatline = {"table", {}}, -- 奖励发放 id=时间 | 161 | chatline = {"table", {}}, -- 奖励发放 id=时间 |
| 162 | + | ||
| 163 | + downCvR = {"number", 0}, -- 下载cv扩展包奖励 | ||
| 162 | } | 164 | } |
| 163 | 165 | ||
| 164 | 166 |
src/models/RolePlugin.lua
| @@ -217,6 +217,7 @@ function RolePlugin.bind(Role) | @@ -217,6 +217,7 @@ function RolePlugin.bind(Role) | ||
| 217 | if csvdb["player_expCsv"][level + 1] then -- 有下一级 | 217 | if csvdb["player_expCsv"][level + 1] then -- 有下一级 |
| 218 | newExp = newExp - csvdb["player_expCsv"][level].exp | 218 | newExp = newExp - csvdb["player_expCsv"][level].exp |
| 219 | level = level + 1 | 219 | level = level + 1 |
| 220 | + self:checkTaskEnter("RoleLevelUp", {level = level}) | ||
| 220 | else | 221 | else |
| 221 | newExp = csvdb["player_expCsv"][level].exp - 1 -- 没有下一级了 经验溢出太多 扣除 | 222 | newExp = csvdb["player_expCsv"][level].exp - 1 -- 没有下一级了 经验溢出太多 扣除 |
| 222 | end | 223 | end |
src/models/RoleTask.lua
| @@ -76,6 +76,9 @@ local TaskType = { | @@ -76,6 +76,9 @@ local TaskType = { | ||
| 76 | AddFriend = 802, -- 加入一个好友 - count | 76 | AddFriend = 802, -- 加入一个好友 - count |
| 77 | GetFriendP = 803, -- 获得友情点 - count | 77 | GetFriendP = 803, -- 获得友情点 - count |
| 78 | 78 | ||
| 79 | + -- 角色相关 | ||
| 80 | + RoleLevelUp = 901, -- 角色升级 - curlevel | ||
| 81 | + | ||
| 79 | --功能未实现 todo | 82 | --功能未实现 todo |
| 80 | AdvShop = 1002, -- 冒险商城 | 83 | AdvShop = 1002, -- 冒险商城 |
| 81 | UnionBoss = 1004, -- 工会boss | 84 | UnionBoss = 1004, -- 工会boss |
| @@ -216,6 +219,15 @@ local ActivityListener = { | @@ -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 | local TaskListeners = { | 232 | local TaskListeners = { |
| 221 | StoryListener, | 233 | StoryListener, |
| @@ -223,6 +235,7 @@ local TaskListeners = { | @@ -223,6 +235,7 @@ local TaskListeners = { | ||
| 223 | AchievListener, | 235 | AchievListener, |
| 224 | SudokuListener, | 236 | SudokuListener, |
| 225 | ActivityListener, | 237 | ActivityListener, |
| 238 | + StoreListener, | ||
| 226 | } | 239 | } |
| 227 | 240 | ||
| 228 | local RoleTask = {} | 241 | local RoleTask = {} |
| @@ -533,6 +546,10 @@ function RoleTask.bind(Role) | @@ -533,6 +546,10 @@ function RoleTask.bind(Role) | ||
| 533 | self.activity:checkActivity(notNotify, activityType, ...) | 546 | self.activity:checkActivity(notNotify, activityType, ...) |
| 534 | end | 547 | end |
| 535 | 548 | ||
| 549 | + function Role:checkStoreTask(notNotify, triggerType, param) | ||
| 550 | + self.storeData:OnTriggerLimitTimePack(triggerType, param) | ||
| 551 | + end | ||
| 552 | + | ||
| 536 | end | 553 | end |
| 537 | 554 | ||
| 538 | return RoleTask | 555 | return RoleTask |
| 539 | \ No newline at end of file | 556 | \ No newline at end of file |
src/models/Store.lua
| @@ -20,6 +20,7 @@ Store.schema = { | @@ -20,6 +20,7 @@ Store.schema = { | ||
| 20 | privCardEx = {"number", 0}, -- 特权卡过期时间戳 | 20 | privCardEx = {"number", 0}, -- 特权卡过期时间戳 |
| 21 | getMailT1 = {"number",0}, -- 上次发送月卡福利邮件的时间 | 21 | getMailT1 = {"number",0}, -- 上次发送月卡福利邮件的时间 |
| 22 | getMailT2 = {"number",0}, -- 上次发送超级月卡福利邮件的时间 | 22 | getMailT2 = {"number",0}, -- 上次发送超级月卡福利邮件的时间 |
| 23 | + packTrigger = {"table", {}} -- 礼包触发记录 {关卡难度1={id, 通关关卡数,升级数,爬塔层数}, ...} | ||
| 23 | } | 24 | } |
| 24 | 25 | ||
| 25 | function Store:updateProperty(params) | 26 | function Store:updateProperty(params) |
| @@ -60,7 +61,7 @@ end | @@ -60,7 +61,7 @@ end | ||
| 60 | -- 发送月卡邮件 | 61 | -- 发送月卡邮件 |
| 61 | function Store:sendMonthCardEmail() | 62 | function Store:sendMonthCardEmail() |
| 62 | local timeNow = skynet.timex() | 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 | {ex="smonthCardEx", t="getMailT2", mail=MailId.SuperMonthCard, alert=MailId.SuperMonthCardEx}} | 65 | {ex="smonthCardEx", t="getMailT2", mail=MailId.SuperMonthCard, alert=MailId.SuperMonthCardEx}} |
| 65 | for _, v in ipairs(tabs) do | 66 | for _, v in ipairs(tabs) do |
| 66 | local ex = self:getProperty(v.ex) | 67 | local ex = self:getProperty(v.ex) |
| @@ -216,7 +217,7 @@ function Store:onBattleCardReset() | @@ -216,7 +217,7 @@ function Store:onBattleCardReset() | ||
| 216 | if config then | 217 | if config then |
| 217 | local freeFlag = string.char(string.getbit(battleCardFreeRecord, id)) | 218 | local freeFlag = string.char(string.getbit(battleCardFreeRecord, id)) |
| 218 | local limitFlag = string.char(string.getbit(battleCardLimitRecord, id)) | 219 | local limitFlag = string.char(string.getbit(battleCardLimitRecord, id)) |
| 219 | - | 220 | + |
| 220 | if battlePoint < config.point then | 221 | if battlePoint < config.point then |
| 221 | break | 222 | break |
| 222 | end | 223 | end |
| @@ -227,7 +228,7 @@ function Store:onBattleCardReset() | @@ -227,7 +228,7 @@ function Store:onBattleCardReset() | ||
| 227 | concatGift(config.giftLimit) | 228 | concatGift(config.giftLimit) |
| 228 | end | 229 | end |
| 229 | end | 230 | end |
| 230 | - end | 231 | + end |
| 231 | self.owner:sendMail(MailId.BattleCardAward, nil, gift) | 232 | self.owner:sendMail(MailId.BattleCardAward, nil, gift) |
| 232 | -- 计算剩余奖励 | 233 | -- 计算剩余奖励 |
| 233 | self:updateProperty({field = "battleCard", value=0}) | 234 | self:updateProperty({field = "battleCard", value=0}) |
| @@ -266,6 +267,68 @@ function Store:resetStoreReored(resetId) | @@ -266,6 +267,68 @@ function Store:resetStoreReored(resetId) | ||
| 266 | self:updateProperty({field = "buyR", value = buyRecord}) | 267 | self:updateProperty({field = "buyR", value = buyRecord}) |
| 267 | end | 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 | function Store:data() | 332 | function Store:data() |
| 270 | return { | 333 | return { |
| 271 | buyR = self:getProperty("buyR"), | 334 | buyR = self:getProperty("buyR"), |