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 | 129 | TimeReset = { |
130 | 130 | CrossDay = 1, --通用跨天 |
131 | 131 | CrossWeek = 2, --通用跨周 |
132 | + CrossMonth = 1, --通用跨月 索引使用跨天,在回调方法中判断是否跨越 跨月的前置条件是跨天 | |
132 | 133 | DinerRank = 1, -- 餐厅排行榜 |
133 | 134 | PvpRank = 2, -- pvp排行榜 |
134 | 135 | PvpHight = 11, --高级竞技场 |
... | ... | @@ -288,4 +289,13 @@ MailId = { |
288 | 289 | MonthCardEx = 203, |
289 | 290 | SuperMonthCardEx = 204, |
290 | 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 | 130 | |
131 | 131 | for _, name in ipairs({"dailyData", "dinerData", "activity", "storeData"}) do |
132 | 132 | response[name] = role[name]:data() |
133 | + --print("["..name.."]") | |
134 | + --dump(response[name]) | |
133 | 135 | end |
134 | 136 | |
135 | 137 | response.role = role:data() |
... | ... | @@ -516,7 +518,7 @@ function _M.openTimeBoxRpc(agent, data) |
516 | 518 | |
517 | 519 | boxL[slot] = nil |
518 | 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 | 522 | else |
521 | 523 | return |
522 | 524 | end |
... | ... | @@ -1059,7 +1061,7 @@ function _M.goldBuyRpc(agent, data) |
1059 | 1061 | goldC = goldC * coef |
1060 | 1062 | role.dailyData:updateProperty({field = "goldBuyT", value = curT + 1}) |
1061 | 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 | 1065 | SendPacket(actionCodes.Role_goldBuyRpc, MsgPack.pack(role:packReward(reward, change))) |
1064 | 1066 | return true |
1065 | 1067 | end | ... | ... |
src/actions/StoreAction.lua
... | ... | @@ -298,6 +298,9 @@ function _M.shopBuyRpc(agent , data) |
298 | 298 | end |
299 | 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 | 304 | role:log("role_action", {desc = desc, int1 = id, int2 = count}) |
302 | 305 | |
303 | 306 | SendPacket(actionCodes.Store_shopBuyRpc, MsgPack.pack({reward = reward})) | ... | ... |
src/models/Activity.lua
... | ... | @@ -4,6 +4,10 @@ local string_format = string.format |
4 | 4 | Activity.ActivityType = { |
5 | 5 | Sign = 1, -- 签到 |
6 | 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 | 28 | |
25 | 29 | Activity.schema = { |
26 | 30 | actime = {"table", {}}, -- 最近检查某项活动的开始时间 {id = time} |
31 | + round = {"table", {}}, -- 记录活动到了第几轮 {id = roundnum} | |
27 | 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 | 39 | function Activity:data() |
31 | 40 | return { |
32 | 41 | actime = self:getProperty("actime"), |
42 | + round = self:getProperty("round"), | |
33 | 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 | 49 | end |
36 | 50 | |
... | ... | @@ -163,6 +177,133 @@ activityFunc[Activity.ActivityType.Sign] = { |
163 | 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 | 307 | function Activity:initActivity(actType, isCrossDay, notify) |
167 | 308 | if activityFunc[actType] and activityFunc[actType]['close'] then |
168 | 309 | activityFunc[actType]["init"](self, actType, isCrossDay, notify) |
... | ... | @@ -173,7 +314,9 @@ function Activity:closeActivity(actType, notify, notUpdateAct) |
173 | 314 | if activityFunc[actType] and activityFunc[actType]['close'] then |
174 | 315 | activityFunc[actType]["close"](self, actType, notify) |
175 | 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 | 320 | end |
178 | 321 | |
179 | 322 | function Activity:refreshDailyData(notify) | ... | ... |
src/models/RolePlugin.lua
... | ... | @@ -1583,7 +1583,7 @@ function RolePlugin.bind(Role) |
1583 | 1583 | end |
1584 | 1584 | |
1585 | 1585 | --直接给玩家发送邮件,立即推送小红点 |
1586 | - function Role:sendMail(mailId, createTime, reward) | |
1586 | + function Role:sendMail(mailId, createTime, reward, contentPms) | |
1587 | 1587 | local tgift = {} |
1588 | 1588 | if type(reward) == "string" then |
1589 | 1589 | for _, one in pairs(reward:toTableArray(true)) do |
... | ... | @@ -1596,7 +1596,7 @@ function RolePlugin.bind(Role) |
1596 | 1596 | for k, v in pairs(tgift) do |
1597 | 1597 | gift = gift .. k.."="..v.." " |
1598 | 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 | 1600 | self.sendMailFlag = true |
1601 | 1601 | end |
1602 | 1602 | ... | ... |
src/models/RoleTask.lua
... | ... | @@ -205,10 +205,14 @@ local SudokuListener = { |
205 | 205 | } |
206 | 206 | } |
207 | 207 | |
208 | +local Activity = require("models.Activity") | |
208 | 209 | local ActivityListener = { |
209 | 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 | 30 | response.dinerS = {} |
31 | 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 | 42 | ResetFunc["DinerRank"] = function(self, notify, response) |
35 | 43 | self.dinerData:rankResetData(notify) |
... | ... | @@ -52,9 +60,11 @@ function Role:updateTimeReset(now, notify) |
52 | 60 | |
53 | 61 | local needResetId = {} |
54 | 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 | 68 | end |
59 | 69 | end |
60 | 70 | if not next(needResetId) then return end | ... | ... |
src/models/Store.lua