diff --git a/src/ProtocolCode.lua b/src/ProtocolCode.lua index 61375e4..29b6d6a 100644 --- a/src/ProtocolCode.lua +++ b/src/ProtocolCode.lua @@ -247,7 +247,7 @@ actionCodes = { Activity_actCalendaTaskRpc = 655, Activity_actPaySignRpc = 656, Activity_exchangeRpc = 657, - Activity_gachakonRpc = 658, + Activity_gachakonRpc = 658, --狩猎祭 抽扭蛋机 Activity_hangDropRpc = 659, Activity_startBattleRpc = 660, Activity_endBattleRpc = 661, @@ -265,6 +265,7 @@ actionCodes = { Activity_returnerTaskRpc = 673, Activity_actNewUserTaskRpc = 674, Activity_buyBattleTicketRpc = 675, + Activity_resetGachakonRpc = 676, --狩猎祭,重制扭蛋机 Radio_startQuestRpc = 700, Radio_finishQuestRpc = 701, diff --git a/src/actions/ActivityAction.lua b/src/actions/ActivityAction.lua index 8f5d92e..eb5e9c9 100644 --- a/src/actions/ActivityAction.lua +++ b/src/actions/ActivityAction.lua @@ -479,6 +479,20 @@ function _M.gachakonRpc(agent, data) return true end +function _M.resetGachakonRpc(agent, data) + local role = agent.role + local msg = MsgPack.unpack(data) + local actid = msg.actid + + if not role.activity:isOpenById(actid, "Gachakon") then return 1 end + + if role.activity:isResetById(actid, "Gachakon") then return 2 end + role.activity:resetActDataById(actid) + + SendPacket(actionCodes.Activity_resetGachakonRpc, MsgPack.pack({})) + return true +end + function _M.hangDropRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) diff --git a/src/models/Activity.lua b/src/models/Activity.lua index b815c59..8fa2f90 100644 --- a/src/models/Activity.lua +++ b/src/models/Activity.lua @@ -93,6 +93,8 @@ Activity.schema = { act34 = {"table", {}}, -- 战令记录{unlock = 1, freeR = "", payR = "", lvl = 10, sum = 100} act36 = {"table", {}}, -- 每日活跃签到 {0=day, 1=1,2=1,3=1} + + reset20 = {"number", 1}, -- 重置扭蛋机 } function Activity:data() @@ -121,6 +123,8 @@ function Activity:data() act34 = self:getProperty("act34"), act36 = self:getProperty("act36"), + + reset20 = self:getProperty("reset20") } end @@ -207,6 +211,24 @@ function Activity:isOpenById(id, activityType) return self._isOpen[id] end +function Activity:isResetById(id, activityType) + activityType = checkActivityType(activityType) + local cfg = csvdb["activity_ctrlCsv"][id] + if not cfg then return false end + if activityType ~= 0 and cfg.showType ~= activityType then return false end + return self:getResetData(activityType) == 0 +end + +function Activity:getResetData(actType) + actType = checkActivityType(actType) + return self:getProperty("reset" .. actType) +end + +function Activity:updateResetData(actType, reset) + actType = checkActivityType(actType) + self:updateProperty({field = "reset" .. actType, value = reset}) +end + function Activity:getActData(actType) actType = checkActivityType(actType) return self:getProperty("act" .. actType) @@ -756,8 +778,14 @@ activityFunc[Activity.ActivityType.Gachakon] = { self:updateActData(actType, {}, not notify) end, ["crossDay"] = function(self, actType, notify) + self:updateResetData(actType, 1) self:updateActData(actType, {}, not notify) end, + ["reset"] = function(self, actType) + if self:getResetData(actType) == 0 then return end + self:updateResetData(actType, 0) + self:updateActData(actType, {}) + end } -- 活动卡池 @@ -865,6 +893,15 @@ function Activity:refreshWeekData(notify) end end +function Activity:resetActDataById(actId) + local actData = csvdb["activity_ctrlCsv"][actId] + if not actData then return end + local actType = actData.showType + if activityFunc[actType] and activityFunc[actType]['reset'] then + activityFunc[actType]["reset"](self, actType) + end +end + function Activity:checkActivity(notNotify, activityType, ...) if not activityType then return end if not self:isOpen(activityType) then return end -- libgit2 0.21.2