Commit 7f9f002db73f666e35f7e196ec94526ed721ec2f
1 parent
d9d51454
循环周活动
Showing
9 changed files
with
184 additions
and
12 deletions
 
Show diff stats
src/GlobalVar.lua
| @@ -129,6 +129,7 @@ ItemId = { | @@ -129,6 +129,7 @@ ItemId = { | ||
| 129 | TimeReset = { | 129 | TimeReset = { | 
| 130 | CrossDay = 1, --通用跨天 | 130 | CrossDay = 1, --通用跨天 | 
| 131 | CrossWeek = 2, --通用跨周 | 131 | CrossWeek = 2, --通用跨周 | 
| 132 | + CrossMonth = 1, --通用跨月 索引使用跨天,在回调方法中判断是否跨越 跨月的前置条件是跨天 | ||
| 132 | DinerRank = 1, -- 餐厅排行榜 | 133 | DinerRank = 1, -- 餐厅排行榜 | 
| 133 | PvpRank = 2, -- pvp排行榜 | 134 | PvpRank = 2, -- pvp排行榜 | 
| 134 | PvpHight = 11, --高级竞技场 | 135 | PvpHight = 11, --高级竞技场 | 
| @@ -288,4 +289,13 @@ MailId = { | @@ -288,4 +289,13 @@ MailId = { | ||
| 288 | MonthCardEx = 203, | 289 | MonthCardEx = 203, | 
| 289 | SuperMonthCardEx = 204, | 290 | SuperMonthCardEx = 204, | 
| 290 | BattleCardAward = 210, | 291 | BattleCardAward = 210, | 
| 292 | + | ||
| 293 | + ActDrawCard = 231, | ||
| 294 | + ActOpenBox = 232, | ||
| 295 | + ActAdvDraw = 233, | ||
| 296 | + ActSellFood = 234, | ||
| 297 | + ActDrawCardReward = 221, | ||
| 298 | + ActOpenBoxReward = 222, | ||
| 299 | + ActAdvDrawReward = 223, | ||
| 300 | + ActSellFoodReward = 224, | ||
| 291 | } | 301 | } | 
src/actions/RoleAction.lua
| @@ -130,6 +130,8 @@ function _M.loginRpc( agent, data ) | @@ -130,6 +130,8 @@ function _M.loginRpc( agent, data ) | ||
| 130 | 130 | ||
| 131 | for _, name in ipairs({"dailyData", "dinerData", "activity", "storeData"}) do | 131 | for _, name in ipairs({"dailyData", "dinerData", "activity", "storeData"}) do | 
| 132 | response[name] = role[name]:data() | 132 | response[name] = role[name]:data() | 
| 133 | + --print("["..name.."]") | ||
| 134 | + --dump(response[name]) | ||
| 133 | end | 135 | end | 
| 134 | 136 | ||
| 135 | response.role = role:data() | 137 | response.role = role:data() | 
| @@ -516,7 +518,7 @@ function _M.openTimeBoxRpc(agent, data) | @@ -516,7 +518,7 @@ function _M.openTimeBoxRpc(agent, data) | ||
| 516 | 518 | ||
| 517 | boxL[slot] = nil | 519 | boxL[slot] = nil | 
| 518 | reward, change = role:award(reward, {log = {desc = "openTimeBox", int1 = boxId}}) | 520 | reward, change = role:award(reward, {log = {desc = "openTimeBox", int1 = boxId}}) | 
| 519 | - role:checkTaskEnter("OpenBox", {id = boxId}) | 521 | + role:checkTaskEnter("OpenBox", {id = boxId, count=1}) | 
| 520 | else | 522 | else | 
| 521 | return | 523 | return | 
| 522 | end | 524 | end | 
| @@ -1059,7 +1061,7 @@ function _M.goldBuyRpc(agent, data) | @@ -1059,7 +1061,7 @@ function _M.goldBuyRpc(agent, data) | ||
| 1059 | goldC = goldC * coef | 1061 | goldC = goldC * coef | 
| 1060 | role.dailyData:updateProperty({field = "goldBuyT", value = curT + 1}) | 1062 | role.dailyData:updateProperty({field = "goldBuyT", value = curT + 1}) | 
| 1061 | role:costItems({[ItemId.Diamond] = costD}, {log = {desc = "goldBuy"}}) | 1063 | role:costItems({[ItemId.Diamond] = costD}, {log = {desc = "goldBuy"}}) | 
| 1062 | - local reward, change = role:award({[ItemId.Gold] = goldC}, {log = {desc = "goldBuy"}}) | 1064 | + local reward, change = role:award({[ItemId.Gold] = math.floor(goldC)}, {log = {desc = "goldBuy"}}) | 
| 1063 | SendPacket(actionCodes.Role_goldBuyRpc, MsgPack.pack(role:packReward(reward, change))) | 1065 | SendPacket(actionCodes.Role_goldBuyRpc, MsgPack.pack(role:packReward(reward, change))) | 
| 1064 | return true | 1066 | return true | 
| 1065 | end | 1067 | end | 
src/actions/StoreAction.lua
| @@ -298,6 +298,9 @@ function _M.shopBuyRpc(agent , data) | @@ -298,6 +298,9 @@ function _M.shopBuyRpc(agent , data) | ||
| 298 | end | 298 | end | 
| 299 | local reward = role:award(gift, {log = {desc = desc, int1 = id, int2 = count}}) | 299 | local reward = role:award(gift, {log = {desc = desc, int1 = id, int2 = count}}) | 
| 300 | 300 | ||
| 301 | + if dataSet.shop == 1 then | ||
| 302 | + role:checkTaskEnter("ShopAll", {count = count}) | ||
| 303 | + end | ||
| 301 | role:log("role_action", {desc = desc, int1 = id, int2 = count}) | 304 | role:log("role_action", {desc = desc, int1 = id, int2 = count}) | 
| 302 | 305 | ||
| 303 | SendPacket(actionCodes.Store_shopBuyRpc, MsgPack.pack({reward = reward})) | 306 | SendPacket(actionCodes.Store_shopBuyRpc, MsgPack.pack({reward = reward})) | 
src/models/Activity.lua
| @@ -4,6 +4,10 @@ local string_format = string.format | @@ -4,6 +4,10 @@ local string_format = string.format | ||
| 4 | Activity.ActivityType = { | 4 | Activity.ActivityType = { | 
| 5 | Sign = 1, -- 签到 | 5 | Sign = 1, -- 签到 | 
| 6 | DoubleDrop = 2, -- 双倍掉落 | 6 | DoubleDrop = 2, -- 双倍掉落 | 
| 7 | + DrawHero = 3, --抽卡周 | ||
| 8 | + FoodSell = 4, --贩卖周 | ||
| 9 | + OpenBox = 5, --拆解周 | ||
| 10 | + AdvDraw = 6, --拾荒抽周 | ||
| 7 | } | 11 | } | 
| 8 | 12 | ||
| 9 | 13 | ||
| @@ -24,13 +28,23 @@ end | @@ -24,13 +28,23 @@ end | ||
| 24 | 28 | ||
| 25 | Activity.schema = { | 29 | Activity.schema = { | 
| 26 | actime = {"table", {}}, -- 最近检查某项活动的开始时间 {id = time} | 30 | actime = {"table", {}}, -- 最近检查某项活动的开始时间 {id = time} | 
| 31 | + round = {"table", {}}, -- 记录活动到了第几轮 {id = roundnum} | ||
| 27 | act1 = {"table", {}}, -- {0 = day, 1= -1, 2 = -1} == 签到活动 | 32 | act1 = {"table", {}}, -- {0 = day, 1= -1, 2 = -1} == 签到活动 | 
| 33 | + act3 = {"table", {}}, -- {0 = 抽卡次数, 1=1, 2=1} 抽卡周活动 1表示领取过该档位的奖励 | ||
| 34 | + act4 = {"table", {}}, -- {0 = 贩卖数量, 1=1, 2=1} 贩卖周活动 1表示领取过该档位的奖励 | ||
| 35 | + act5 = {"table", {}}, -- {0 = 拆解数量, 1=1, 2=1} 拆解周活动 1表示领取过该档位的奖励 | ||
| 36 | + act6 = {"table", {}}, -- {0 = 拾荒消耗远古金币数量, 1=1, 2=1} 拾荒周活动 1表示领取过该档位的奖励 | ||
| 28 | } | 37 | } | 
| 29 | 38 | ||
| 30 | function Activity:data() | 39 | function Activity:data() | 
| 31 | return { | 40 | return { | 
| 32 | actime = self:getProperty("actime"), | 41 | actime = self:getProperty("actime"), | 
| 42 | + round = self:getProperty("round"), | ||
| 33 | act1 = self:getProperty("act1"), | 43 | act1 = self:getProperty("act1"), | 
| 44 | + act3 = self:getProperty("act3"), | ||
| 45 | + act4 = self:getProperty("act4"), | ||
| 46 | + act5 = self:getProperty("act5"), | ||
| 47 | + act6 = self:getProperty("act6"), | ||
| 34 | } | 48 | } | 
| 35 | end | 49 | end | 
| 36 | 50 | ||
| @@ -163,6 +177,133 @@ activityFunc[Activity.ActivityType.Sign] = { | @@ -163,6 +177,133 @@ activityFunc[Activity.ActivityType.Sign] = { | ||
| 163 | end, | 177 | end, | 
| 164 | } | 178 | } | 
| 165 | 179 | ||
| 180 | +--loop1:累计料理贩卖N次 | ||
| 181 | +--loop2:累计招募N次 | ||
| 182 | +--loop3:累计资助N次 | ||
| 183 | +--loop4:时钟箱拆解N个 | ||
| 184 | +function Activity:checkWeeklyAct(actType, notify, count) | ||
| 185 | + local actInfoMap = { | ||
| 186 | + [Activity.ActivityType.DrawHero] = {mailId = MailId.ActDrawCardReward, table = "activity_loop2Csv"}, | ||
| 187 | + [Activity.ActivityType.AdvDraw] = {mailId = MailId.ActAdvDrawReward, table = "activity_loop3Csv"}, | ||
| 188 | + [Activity.ActivityType.OpenBox] = {mailId = MailId.ActOpenBoxReward, table = "activity_loop4Csv"}, | ||
| 189 | + [Activity.ActivityType.FoodSell] = {mailId = MailId.ActSellFoodReward, table = "activity_loop1Csv"} | ||
| 190 | + } | ||
| 191 | + local info = actInfoMap[actType] | ||
| 192 | + if not info then return end | ||
| 193 | + | ||
| 194 | + local curData = self:getActData(actType) | ||
| 195 | + local roundData = self:getProperty("round") | ||
| 196 | + local curRound = roundData[actType] or 0 | ||
| 197 | + local ctrlData = csvdb["activity_ctrlCsv"][actType] | ||
| 198 | + if not ctrlData then return end | ||
| 199 | + if curRound >= ctrlData.condition then | ||
| 200 | + return | ||
| 201 | + end | ||
| 202 | + curData[0] = (curData[0] or 0) + count | ||
| 203 | + local totalCnt = 0 | ||
| 204 | + local finishCnt = 0 | ||
| 205 | + local maxCondition = 0 | ||
| 206 | + for k, cfg in pairs(csvdb[info.table] or {}) do | ||
| 207 | + totalCnt = totalCnt + 1 | ||
| 208 | + if maxCondition < cfg.condition1 then | ||
| 209 | + maxCondition = cfg.condition1 | ||
| 210 | + end | ||
| 211 | + if not curData[cfg.id] and curData[0] >= cfg.condition1 then | ||
| 212 | + if info.mailId then | ||
| 213 | + self.owner:sendMail(info.mailId, nil, cfg.reward, {cfg.condition1}) | ||
| 214 | + curData[cfg.id] = 1 | ||
| 215 | + end | ||
| 216 | + end | ||
| 217 | + if curData[cfg.id] then | ||
| 218 | + finishCnt = finishCnt + 1 | ||
| 219 | + end | ||
| 220 | + end | ||
| 221 | + if totalCnt == finishCnt then | ||
| 222 | + roundData[actType] = curRound + 1 | ||
| 223 | + for k,v in pairs(curData) do | ||
| 224 | + if k == 0 then | ||
| 225 | + curData[k] = curData[0] >= maxCondition and curData[0] - maxCondition or 0 | ||
| 226 | + else | ||
| 227 | + curData[k] = nil | ||
| 228 | + end | ||
| 229 | + end | ||
| 230 | + self:updateProperty({field = "round", value = roundData, notNotify = not notify}) | ||
| 231 | + end | ||
| 232 | + self:updateActData(actType, curData, not notify) | ||
| 233 | +end | ||
| 234 | + | ||
| 235 | +-- 抽卡周 | ||
| 236 | +activityFunc[Activity.ActivityType.DrawHero] = { | ||
| 237 | + ["check"] = function(self, actType, notify, count) -- 检查 | ||
| 238 | + self:checkWeeklyAct(actType, notify, count) | ||
| 239 | + end, | ||
| 240 | + ["init"] = function(self, actType, isCrossDay, notify) | ||
| 241 | + local roundData = self:getProperty("round") | ||
| 242 | + roundData[actType] = 0 | ||
| 243 | + self:updateProperty({field = "round", value = roundData, notNotify = not notify}) | ||
| 244 | + end, | ||
| 245 | + -- ["close"] = function(self, actType, notify) | ||
| 246 | + -- end, | ||
| 247 | + ["crossDay"] = function(self, actType, notify) | ||
| 248 | + print("cross day draw card") | ||
| 249 | + self.owner:sendMail(MailId.ActDrawCard) | ||
| 250 | + end, | ||
| 251 | +} | ||
| 252 | + | ||
| 253 | +-- 售卖周 | ||
| 254 | +activityFunc[Activity.ActivityType.FoodSell] = { | ||
| 255 | + ["check"] = function(self, actType, notify, count) -- 检查 | ||
| 256 | + self:checkWeeklyAct(actType, notify, count) | ||
| 257 | + end, | ||
| 258 | + ["init"] = function(self, actType, isCrossDay, notify) | ||
| 259 | + local roundData = self:getProperty("round") | ||
| 260 | + roundData[actType] = 0 | ||
| 261 | + self:updateProperty({field = "round", value = roundData, notNotify = not notify}) | ||
| 262 | + end, | ||
| 263 | + -- ["close"] = function(self, actType, notify) | ||
| 264 | + -- end, | ||
| 265 | + ["crossDay"] = function(self, actType, notify) | ||
| 266 | + print("cross day sell food") | ||
| 267 | + self.owner:sendMail(MailId.ActSellFood) | ||
| 268 | + end, | ||
| 269 | +} | ||
| 270 | + | ||
| 271 | +-- 拾荒周 | ||
| 272 | +activityFunc[Activity.ActivityType.AdvDraw] = { | ||
| 273 | + ["check"] = function(self, actType, notify, count) -- 检查 | ||
| 274 | + self:checkWeeklyAct(actType, notify, count) | ||
| 275 | + end, | ||
| 276 | + ["init"] = function(self, actType, isCrossDay, notify) | ||
| 277 | + local roundData = self:getProperty("round") | ||
| 278 | + roundData[actType] = 0 | ||
| 279 | + self:updateProperty({field = "round", value = roundData, notNotify = not notify}) | ||
| 280 | + end, | ||
| 281 | + -- ["close"] = function(self, actType, notify) | ||
| 282 | + -- end, | ||
| 283 | + ["crossDay"] = function(self, actType, notify) | ||
| 284 | + print("cross day act adv cost") | ||
| 285 | + self.owner:sendMail(MailId.ActAdvDraw) | ||
| 286 | + end, | ||
| 287 | +} | ||
| 288 | + | ||
| 289 | +-- 拆解周 | ||
| 290 | +activityFunc[Activity.ActivityType.OpenBox] = { | ||
| 291 | + ["check"] = function(self, actType, notify, count) -- 检查 | ||
| 292 | + self:checkWeeklyAct(actType, notify, count) | ||
| 293 | + end, | ||
| 294 | + ["init"] = function(self, actType, isCrossDay, notify) | ||
| 295 | + local roundData = self:getProperty("round") | ||
| 296 | + roundData[actType] = 0 | ||
| 297 | + self:updateProperty({field = "round", value = roundData, notNotify = not notify}) | ||
| 298 | + end, | ||
| 299 | + -- ["close"] = function(self, actType, notify) | ||
| 300 | + -- end, | ||
| 301 | + ["crossDay"] = function(self, actType, notify) | ||
| 302 | + print("cross day open box") | ||
| 303 | + self.owner:sendMail(MailId.ActOpenBox) | ||
| 304 | + end, | ||
| 305 | +} | ||
| 306 | + | ||
| 166 | function Activity:initActivity(actType, isCrossDay, notify) | 307 | function Activity:initActivity(actType, isCrossDay, notify) | 
| 167 | if activityFunc[actType] and activityFunc[actType]['close'] then | 308 | if activityFunc[actType] and activityFunc[actType]['close'] then | 
| 168 | activityFunc[actType]["init"](self, actType, isCrossDay, notify) | 309 | activityFunc[actType]["init"](self, actType, isCrossDay, notify) | 
| @@ -173,7 +314,9 @@ function Activity:closeActivity(actType, notify, notUpdateAct) | @@ -173,7 +314,9 @@ function Activity:closeActivity(actType, notify, notUpdateAct) | ||
| 173 | if activityFunc[actType] and activityFunc[actType]['close'] then | 314 | if activityFunc[actType] and activityFunc[actType]['close'] then | 
| 174 | activityFunc[actType]["close"](self, actType, notify) | 315 | activityFunc[actType]["close"](self, actType, notify) | 
| 175 | end | 316 | end | 
| 176 | - self:updateActData(actType, Activity.schema["act" .. actType][2], not notify or notUpdateAct) | 317 | + if Activity.schema["act".. actType] then | 
| 318 | + self:updateActData(actType, Activity.schema["act" .. actType][2], not notify or notUpdateAct) | ||
| 319 | + end | ||
| 177 | end | 320 | end | 
| 178 | 321 | ||
| 179 | function Activity:refreshDailyData(notify) | 322 | function Activity:refreshDailyData(notify) | 
src/models/RolePlugin.lua
| @@ -1583,7 +1583,7 @@ function RolePlugin.bind(Role) | @@ -1583,7 +1583,7 @@ function RolePlugin.bind(Role) | ||
| 1583 | end | 1583 | end | 
| 1584 | 1584 | ||
| 1585 | --直接给玩家发送邮件,立即推送小红点 | 1585 | --直接给玩家发送邮件,立即推送小红点 | 
| 1586 | - function Role:sendMail(mailId, createTime, reward) | 1586 | + function Role:sendMail(mailId, createTime, reward, contentPms) | 
| 1587 | local tgift = {} | 1587 | local tgift = {} | 
| 1588 | if type(reward) == "string" then | 1588 | if type(reward) == "string" then | 
| 1589 | for _, one in pairs(reward:toTableArray(true)) do | 1589 | for _, one in pairs(reward:toTableArray(true)) do | 
| @@ -1596,7 +1596,7 @@ function RolePlugin.bind(Role) | @@ -1596,7 +1596,7 @@ function RolePlugin.bind(Role) | ||
| 1596 | for k, v in pairs(tgift) do | 1596 | for k, v in pairs(tgift) do | 
| 1597 | gift = gift .. k.."="..v.." " | 1597 | gift = gift .. k.."="..v.." " | 
| 1598 | end | 1598 | end | 
| 1599 | - redisproxy:insertEmail({roleId = self:getProperty("id"), emailId = mailId, createtime = createTime, attachments = gift}) | 1599 | + redisproxy:insertEmail({roleId = self:getProperty("id"), emailId = mailId, createtime = createTime, attachments = gift, contentPms = contentPms}) | 
| 1600 | self.sendMailFlag = true | 1600 | self.sendMailFlag = true | 
| 1601 | end | 1601 | end | 
| 1602 | 1602 | 
src/models/RoleTask.lua
| @@ -205,10 +205,14 @@ local SudokuListener = { | @@ -205,10 +205,14 @@ local SudokuListener = { | ||
| 205 | } | 205 | } | 
| 206 | } | 206 | } | 
| 207 | 207 | ||
| 208 | +local Activity = require("models.Activity") | ||
| 208 | local ActivityListener = { | 209 | local ActivityListener = { | 
| 209 | func = "checkActivityTask", | 210 | func = "checkActivityTask", | 
| 210 | - listener = { | ||
| 211 | - | 211 | + listen = { | 
| 212 | + [TaskType.DrawHero] = {{Activity.ActivityType.DrawHero, f("count")}}, | ||
| 213 | + [TaskType.FoodSell] = {{Activity.ActivityType.FoodSell, f("count")}}, | ||
| 214 | + [TaskType.AdvDraw] = {{Activity.ActivityType.AdvDraw, f("count")}}, | ||
| 215 | + [TaskType.OpenBox] = {{Activity.ActivityType.OpenBox, f("count")}}, | ||
| 212 | } | 216 | } | 
| 213 | } | 217 | } | 
| 214 | 218 | 
src/models/RoleTimeReset.lua
| @@ -30,6 +30,14 @@ ResetFunc["CrossWeek"] = function(self, notify, response) | @@ -30,6 +30,14 @@ ResetFunc["CrossWeek"] = function(self, notify, response) | ||
| 30 | response.dinerS = {} | 30 | response.dinerS = {} | 
| 31 | end | 31 | end | 
| 32 | 32 | ||
| 33 | +ResetFunc["CrossMonth"] = function(self, notify, response) | ||
| 34 | + local ltime = self:getProperty("ltime") | ||
| 35 | + if isCrossMonth(ltime, skynet.timex()) then | ||
| 36 | + print("cross month") | ||
| 37 | + self.storeData:resetStoreReored(3) --商店跨月重置 time_reset表关联id | ||
| 38 | + end | ||
| 39 | +end | ||
| 40 | + | ||
| 33 | 41 | ||
| 34 | ResetFunc["DinerRank"] = function(self, notify, response) | 42 | ResetFunc["DinerRank"] = function(self, notify, response) | 
| 35 | self.dinerData:rankResetData(notify) | 43 | self.dinerData:rankResetData(notify) | 
| @@ -52,9 +60,11 @@ function Role:updateTimeReset(now, notify) | @@ -52,9 +60,11 @@ function Role:updateTimeReset(now, notify) | ||
| 52 | 60 | ||
| 53 | local needResetId = {} | 61 | local needResetId = {} | 
| 54 | for resetId, resetData in pairs(csvdb["time_resetCsv"]) do | 62 | for resetId, resetData in pairs(csvdb["time_resetCsv"]) do | 
| 55 | - local curRound = math.floor((passTime - resetData.start) / resetData.interval) | ||
| 56 | - if not timeReset[resetId] or curRound ~= timeReset[resetId] then | ||
| 57 | - needResetId[resetId] = curRound | 63 | + if resetData.interval > 0 then | 
| 64 | + local curRound = math.floor((passTime - resetData.start) / resetData.interval) | ||
| 65 | + if not timeReset[resetId] or curRound ~= timeReset[resetId] then | ||
| 66 | + needResetId[resetId] = curRound | ||
| 67 | + end | ||
| 58 | end | 68 | end | 
| 59 | end | 69 | end | 
| 60 | if not next(needResetId) then return end | 70 | if not next(needResetId) then return end | 
src/models/Store.lua
| @@ -144,7 +144,7 @@ function Store:getGearExchangeCoef() | @@ -144,7 +144,7 @@ function Store:getGearExchangeCoef() | ||
| 144 | return 1 | 144 | return 1 | 
| 145 | end | 145 | end | 
| 146 | 146 | ||
| 147 | - local coef = (globalCsv.shop_priv_card_produce_coef or 50)/ 100 | 147 | + local coef = (globalCsv.shop_priv_exchange_gear_coef or 50)/ 100 | 
| 148 | return 1 + coef | 148 | return 1 + coef | 
| 149 | end | 149 | end | 
| 150 | 150 |