diff --git a/src/GlobalVar.lua b/src/GlobalVar.lua index 27e4807..efadfaf 100644 --- a/src/GlobalVar.lua +++ b/src/GlobalVar.lua @@ -274,6 +274,10 @@ CardType = { PrivilegeCard = 3, --特权卡 GrowFund = 4, --成长助力 BattleCard = 5, --赛季卡 + BattlePassCard_1 = 6, -- 探索指令1 + BattlePassCard_2 = 7, -- 探索指令2 + BattlePassCard_3 = 8, -- 探索指令3 + BattlePassCard_4 = 9, -- 探索指令4 } HeroQuality = { @@ -290,6 +294,8 @@ MailId = { SuperMonthCardEx = 204, BattleCardAward = 210, + PaySignAward = 222, + ActSellFood = 231, ActDrawCard = 232, ActAdvDraw = 233, diff --git a/src/ProtocolCode.lua b/src/ProtocolCode.lua index 3dba2e3..8103315 100644 --- a/src/ProtocolCode.lua +++ b/src/ProtocolCode.lua @@ -45,6 +45,7 @@ actionCodes = { Role_getRandomNameRpc = 130, Role_goldBuyRpc = 131, Role_getDownloadCvRewardRpc = 132, + Role_updateFeedbackInfoRpc = 133, Adv_startAdvRpc = 151, Adv_startHangRpc = 152, @@ -191,6 +192,7 @@ actionCodes = { Store_getFreeChestRpc = 560, Store_getGrowFundRewardRpc = 561, --成长助力奖励 Store_getBattlePassRewardRpc = 562, --赛季卡奖励 + Store_getExploreCommandRewardRpc = 563, --探索指令 Email_listRpc = 600, @@ -203,6 +205,7 @@ actionCodes = { Activity_signRpc = 651, Activity_sudokuRewardRpc = 652, Activity_actSignRpc = 653, + Activity_actPaySignRewardNtf = 654, } rpcResponseBegin = 10000 diff --git a/src/actions/ActivityAction.lua b/src/actions/ActivityAction.lua index 11c2aa3..c943acc 100644 --- a/src/actions/ActivityAction.lua +++ b/src/actions/ActivityAction.lua @@ -178,5 +178,46 @@ function _M.actSignRpc(agent, data) end +function _M.actPaySignRpc(agent, data) + local role = agent.role + local msg = MsgPack.unpack(data) + local actGoodsFlag = role.storeData:getProperty("actGoodsFlag") + local index = GetActGoodsIndex("paySignIn") + local flag = actGoodsFlag[index] or 0 + if flag == 0 then return 1 end + + if not role.activity:isOpen("PaySignIn") then return 2 end + + local diffDay = diffFromOpen() + 1 + + local curData = role.activity:getActData("PaySignIn") + local reward, change = {} + for day, csvData in ipairs(csvdb["pay_signInCsv"]) do + if day <= diffDay then + if not curData[day] then + curData[day] = 1 + -- 奖励 + for itemId, count in pairs(csvData.reward:toNumMap()) do + reward[itemId] = (reward[itemId] or 0) + count + end + end + else + break + end + end + if next(reward) then + role.activity:updateActData("PaySignIn", curData) + reward, change = role:award(reward, {log = {desc = "actPaySign"}}) + end + + role:log("activity", { + activity_id = curData[0], -- 活动ID(或活动指定任务的ID) + activity_type = role.activity.ActivityType.PaySignIn, -- 活动类型,见活动类型枚举表 + activity_reward = reward, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...} + }) + + SendPacket(actionCodes.Activity_actPaySignRpc, MsgPack.pack(role:packReward(reward, change))) + return true +end return _M \ No newline at end of file diff --git a/src/actions/HeroAction.lua b/src/actions/HeroAction.lua index 7a56809..37a4623 100644 --- a/src/actions/HeroAction.lua +++ b/src/actions/HeroAction.lua @@ -941,7 +941,7 @@ function _M.unlockPoolRpc(agent, data) return true end -function _M.changeCrown(agnet, data) +function _M.changeCrown(agent, data) local role = agent.role local msg = MsgPack.unpack(data) diff --git a/src/actions/RoleAction.lua b/src/actions/RoleAction.lua index f0184a6..3ac789b 100644 --- a/src/actions/RoleAction.lua +++ b/src/actions/RoleAction.lua @@ -173,6 +173,7 @@ function _M.loginRpc( agent, data ) response.role = role:data() response.result = "SUCCESS" response.serverTime = now + response.openTime = getServerOpenTs() local modules = {} @@ -1194,4 +1195,16 @@ function _M.getDownloadCvRewardRpc(agent, data) return true end +function _M.updateFeedbackInfoRpc(agent, data) + local role = agent.role + local info = role:getProperty("feedback") or {} + local msg = MsgPack.unpack(data) + info["flag"] = msg.flag + info["count"] = msg.count + info["ts"] = skynet.timex() + role:updateProperty({field="feedback", value=info}) + SendPacket(actionCodes.Role_updateFeedbackInfoRpc, MsgPack.pack({})) + return true +end + return _M \ No newline at end of file diff --git a/src/actions/StoreAction.lua b/src/actions/StoreAction.lua index 16789de..2dc6957 100644 --- a/src/actions/StoreAction.lua +++ b/src/actions/StoreAction.lua @@ -322,6 +322,7 @@ function _M.getGrowFundRewardRpc(agent, data) return true end +-- 赛季卡 function _M.getBattlePassRewardRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) @@ -376,4 +377,65 @@ function _M.getBattlePassRewardRpc(agent, data) return true end +-- 探索指令奖励 +function _M.getExploreCommandRewardRpc(agent, data) + local role = agent.role + local msg = MsgPack.unpack(data) + local id = msg.id -- 探索id + local subId = msg.subId -- 领取的阶段id + + local tab_name = "reward_battlepass_" .. id .. "Csv" + local config = csvdb[tab_name][id] + if not config then return end + + local bpInfo = role.storeData:getProperty("bpInfo") or {} + local info = bpInfo[id] or {} + local flag = info["flag"] or 0 + if flag == 0 then return 1 end + + local freeRecord = info["fr"] or "" + local buyRecord = info["br"] or "" + + local freeFlag = string.char(string.getbit(freeRecord, subId)) + local limitFlag = string.char(string.getbit(buyRecord, subId)) + + if freeFlag == "1" and limitFlag == "1" then + skynet.error("user already get explore command reward") + return 2 + end + + if flag == 1 and limitFlag == "1" then + return 3 + end + + if not role:checkHangPass(config.carbonId) then + return 4 + end + + local gift = "" + if freeFlag == "0" then + gift = config.giftFree + + freeRecord = string.setbit(freeRecord, id) + info["fr"] = freeRecord + end + + if flag == 1 and limitFlag == "0" then + if gift ~= "" then + gift = gift .. " " + end + gift = gift .. config.giftLimit + + buyRecord = string.setbit(buyRecord, id) + info["br"] = buyRecord + end + + role.storeData:updateProperty({field = "bpInfo", value = info}) + + local reward, _ = role:award(gift, {log = {desc = "exploreCommand", int1 = id, int2 = subId}}) + + SendPacket(actionCodes.Store_getExploreCommandRewardRpc, MsgPack.pack({reward = reward})) + return true +end + return _M \ No newline at end of file diff --git a/src/agent.lua b/src/agent.lua index d536dc3..2796c90 100644 --- a/src/agent.lua +++ b/src/agent.lua @@ -53,6 +53,8 @@ end local _pipelinings = {} --可同时多个序列 栈的形式保证嵌套不出错 function SendPacket(actionCode, bin, client_fd) + --print(actionHandlers[actionCode]) + --dump(MsgPack.unpack(bin)) -- 内部消息不扩散出去 if actionCode == actionCodes.Sys_endlessSeason then if agentInfo.role then diff --git a/src/csvdata b/src/csvdata index 2de1748..15cca1c 160000 --- a/src/csvdata +++ b/src/csvdata @@ -1 +1 @@ -Subproject commit 2de1748bed665c9220f68eeb23a8ce3d1f810bda +Subproject commit 15cca1cea5a190b9ed014890efdf3343dd28c2b8 diff --git a/src/models/Activity.lua b/src/models/Activity.lua index 2831c76..ca1d41a 100644 --- a/src/models/Activity.lua +++ b/src/models/Activity.lua @@ -8,6 +8,7 @@ Activity.ActivityType = { DrawHero = 4, --抽卡周 招募 AdvDraw = 5, --拾荒抽周 资助 OpenBox = 6, --拆解周 时钟箱 + PaySignIn = 7, --付费签到 SsrUpPoolChange = 10, -- 特定英雄活动,切卡池 } @@ -36,6 +37,7 @@ Activity.schema = { act4 = {"table", {}}, -- {0 = 贩卖数量, 1=1, 2=1} 贩卖周活动 1表示领取过该档位的奖励 act5 = {"table", {}}, -- {0 = 拆解数量, 1=1, 2=1} 拆解周活动 1表示领取过该档位的奖励 act6 = {"table", {}}, -- {0 = 拾荒消耗远古金币数量, 1=1, 2=1} 拾荒周活动 1表示领取过该档位的奖励 + act7 = {"table", {}}, -- {1 = 1, 2 = 1} == 付费签到活动 } function Activity:data() @@ -47,6 +49,7 @@ function Activity:data() act4 = self:getProperty("act4"), act5 = self:getProperty("act5"), act6 = self:getProperty("act6"), + act7 = self:getProperty("act7"), } end @@ -315,6 +318,15 @@ activityFunc[Activity.ActivityType.OpenBox] = { end, } +-- 付费签到 +activityFunc[Activity.ActivityType.PaySignIn] = { + ["init"] = function(self, actType, isCrossDay, notify) + self:updateActData(actType, {}, not notify) + end, + -- ["close"] = function(self, actType, notify) + -- end, +} + function Activity:initActivity(actType, isCrossDay, notify) if activityFunc[actType] and activityFunc[actType]['close'] then activityFunc[actType]["init"](self, actType, isCrossDay, notify) @@ -384,5 +396,46 @@ function Activity:getActivityPool(mainType, subType) return 0 end +-- 付费签到可领奖励 +function Activity:getPaySignReward() + local actGoodsFlag = self.storeData:getProperty("actGoodsFlag") + local index = GetActGoodsIndex("paySignIn") + local flag = actGoodsFlag[index] or 0 + if flag == 0 then return {} end + + if not self.owner.activity:isOpen("PaySignIn") then return {} end + + local diffDay = diffFromOpen() + 1 + + local curData = self.activity:getActData("PaySignIn") + local reward, change = {} + for day, csvData in ipairs(csvdb["pay_signInCsv"]) do + if day <= diffDay then + if not curData[day] then + curData[day] = 1 + -- 奖励 + for itemId, count in pairs(csvData.reward:toNumMap()) do + reward[itemId] = (reward[itemId] or 0) + count + end + end + else + break + end + end + return reward, curData + --if next(reward) then + --role.activity:updateActData("PaySignIn", curData) + --reward, change = role:award(reward, {log = {desc = "actPaySign"}}) + --end + + --role:log("activity", { + -- activity_id = curData[0], -- 活动ID(或活动指定任务的ID) + -- activity_type = role.activity.ActivityType.PaySignIn, -- 活动类型,见活动类型枚举表 + -- activity_reward = reward, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...} + --}) + + --SendPacket(actionCodes.Activity_actPaySignRpc, MsgPack.pack(role:packReward(reward, change))) +end + return Activity diff --git a/src/models/Role.lua b/src/models/Role.lua index dfc5388..0e677de 100644 --- a/src/models/Role.lua +++ b/src/models/Role.lua @@ -165,6 +165,7 @@ Role.schema = { chatline = {"table", {}}, -- 奖励发放 id=时间 downCvR = {"number", 0}, -- 下载cv扩展包奖励 + feedback = {"table", {}}, -- 反馈相关信息 {flag = false, count = 0} flag是否评论过,count 提示次数 } @@ -383,6 +384,7 @@ function Role:data() chatline = self:getProperty("chatline"), downCvR = self:getProperty("downCvR"), -- 下载cv扩展包奖励 + feedback = self:getProperty("feedback") } end diff --git a/src/models/RoleLog.lua b/src/models/RoleLog.lua index eba9cec..210e3c2 100644 --- a/src/models/RoleLog.lua +++ b/src/models/RoleLog.lua @@ -38,6 +38,8 @@ local ItemReason = { startPvp = 124, -- 开始pvp unlockStory = 125, -- 解锁剧情 towerCount = 126, -- 电波塔次数 + freeGift = 127, -- 免费礼包 + exploreCommand = 128, -- 探索指令 advHang = 301, -- 拾荒挂机 @@ -75,6 +77,7 @@ local ItemReason = { friendPoint = 1005, -- 友情 birth = 1006, -- 出生奖励 actSign = 1007, -- 活动签到 + actPaySign = 1008, -- 活动付费签到 -- 餐厅 greenHourse = 1101, -- 食材获得 diff --git a/src/models/RolePlugin.lua b/src/models/RolePlugin.lua index 5cd0a58..e2f0271 100644 --- a/src/models/RolePlugin.lua +++ b/src/models/RolePlugin.lua @@ -1454,6 +1454,9 @@ function RolePlugin.bind(Role) self.storeData:onBuyCard(rechargeData.type, rechargeData.time) elseif rechargeData.shop == 3 then -- 礼包商店 reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}}) + elseif rechargeData.shop == 4 then -- 付费签到 + reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}}) + self.storeData:onBuyPaySignCard(rechargeData.time) else skynet.error("invalid recharge shop type " .. id) return 3 diff --git a/src/models/Store.lua b/src/models/Store.lua index 3a89254..92f4bb1 100644 --- a/src/models/Store.lua +++ b/src/models/Store.lua @@ -6,21 +6,33 @@ function Store:ctor(properties) Store.super.ctor(self, properties) end +ActGoodsType = { + paySignIn = 1, -- 付费签到 +} + Store.schema = { buyR = {"table", {}}, -- 购买商品记录 {id=count} payR = {"table", {}}, -- 充值记录 {id=count} growFund = {"number", 0}, -- 成长基金 - growFundR = {"string", ""}, -- 成长基金领取记录 + growFundR = {"string", ""}, -- 成长基金领取记录 + monthCardEx = {"number", 0}, -- 月卡过期时间戳 - smonthCardEx = {"number", 0}, -- 超级月卡过期时间戳 + smonthCardEx = {"number", 0}, -- 超级月卡过期时间戳 + battleCard = {"number", 0}, -- 赛季卡 battleFR = {"string", ""}, -- 免费赛季卡领取记录 battleLR = {"string", ""}, -- 付费赛季卡领取记录 + limitTPack = {"table", {}}, -- 限时礼包 {id=expire_ts} privCardEx = {"number", 0}, -- 特权卡过期时间戳 getMailT1 = {"number",0}, -- 上次发送月卡福利邮件的时间 getMailT2 = {"number",0}, -- 上次发送超级月卡福利邮件的时间 - packTrigger = {"table", {}} -- 礼包触发记录 {关卡难度1={id, 通关关卡数,升级数,爬塔层数}, ...} + packTrigger = {"table", {}}, -- 礼包触发记录 {关卡难度1={id, 通关关卡数,升级数,爬塔层数}, ...} + + -- 活动商品购买记录 + actGoodsFlag = {"table", {}}, -- ActGoodsType 1购买,0未购买 + + bpInfo = {"table", {}}, -- battle pass 探索指令 1={flag=0 为1表示买了,br=""付费领取记录, fr=""免费领取记录},2,3,4 } function Store:updateProperty(params) @@ -45,6 +57,7 @@ end function Store:onCrossDay() self:sendMonthCardEmail() self:deleteExpireLimitGoods() + self:checkPaySignReward() end -- 删除过期商品 @@ -176,6 +189,14 @@ function Store:onBuyCard(type, duration) self:updateProperty({field = "growFund", value = 1}) elseif type == CardType.BattleCard then self:updateProperty({field = "battleCard", value = 1}) + elseif type == CardType.BattlePassCard_1 or type == CardType.BattlePassCard_2 or + type == CardType.BattlePassCard_3 or type == CardType.BattlePassCard_4 then + local index = type - CardType.BattlePassCard_1 + 1 + local bpInfo = self:getProperty("bpInfo") or {} + local info = bpInfo[index] or {} + info["flag"] = 1 + bpInfo[index] = info + self:updateProperty({field = "bpInfo", value = bpInfo}) end end @@ -330,6 +351,47 @@ function Store:OnTriggerLimitTimePack(eventType, param) end end +function GetActGoodsIndex(goodsType) + return ActGoodsType[goodsType] or 0 +end + +-- 购买付费签到 按开服时间算奖励 +function Store:onBuyPaySignCard(dur) + local curTs = skynet.timex() + local actGoodsFlag = self:getProperty("actGoodsFlag") or {} + local goodsIndex = GetActGoodsIndex("paySignIn") + if goodsIndex == 0 then + print("get act goods index fail :paySignIn") + return + end + actGoodsFlag[goodsIndex] = 1 + -- 发钱 + local change + local reward, curData = self.owner.activity:getPaySignReward() + if next(reward) then + self.owner.activity:updateActData("PaySignIn", curData) + reward, change = self.owner:award(reward, {log = {desc = "actPaySign"}}) + end + + self.owner:log("activity", { + activity_id = 0, -- 活动ID(或活动指定任务的ID) + activity_type = self.onwer.activity.ActivityType.PaySignIn, -- 活动类型,见活动类型枚举表 + activity_reward = reward, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...} + }) + + SendPacket(actionCodes.Activity_actPaySignRewardNtf, MsgPack.pack(self.owner:packReward(reward, change))) + + self.owner:updateProperty({field = "actGoodsFlag", value = actGoodsFlag}) +end + +function Store:checkPaySignReward() + local reward, curData = self.owner.activity:getPaySignReward() + if next(reward) then + self.owner.activity:updateActData("PaySignIn", curData) + self.owner:sendMail(MailId.PaySignAward, nil, reward) + end +end + function Store:data() return { buyR = self:getProperty("buyR"), @@ -343,7 +405,9 @@ function Store:data() battleLR = self:getProperty("battleLR"), limitTPack = self:getProperty("limitTPack"), privCardEx = self:getProperty("privCardEx"), - packTrigger = self:getProperty("packTrigger") + packTrigger = self:getProperty("packTrigger"), + actGoodsFlag = self:getProperty("actGoodsFlag"), + bpInfo = self:getProperty("bpInfo"), } end diff --git a/src/utils/CommonFunc.lua b/src/utils/CommonFunc.lua index 9817c1e..a7b99b6 100644 --- a/src/utils/CommonFunc.lua +++ b/src/utils/CommonFunc.lua @@ -146,6 +146,31 @@ function crossDayFromOpen(now) return crossDay(openTime, now) end +function diffFromOpen() + now = now or skynet.timex() + local openTime = os.time{ + year = tonum(SERV_OPEN:sub(1,4)), + month = tonum(SERV_OPEN:sub(5,6)), + day = tonum(SERV_OPEN:sub(7,8)), + hour = RESET_TIME, + } + if now < openTime then + return 0 + end + + return math.floor((now - openTime) / DAY_SEC) +end + +function getServerOpenTs() + local openTime = os.time{ + year = tonum(SERV_OPEN:sub(1,4)), + month = tonum(SERV_OPEN:sub(5,6)), + day = tonum(SERV_OPEN:sub(7,8)), + hour = RESET_TIME, + } + return openTime +end + -- 30*86400 = 2592000 function monthLater(now) now = now or skynet.timex() -- libgit2 0.21.2