diff --git a/src/ProtocolCode.lua b/src/ProtocolCode.lua index 0db8c5a..048b1a3 100644 --- a/src/ProtocolCode.lua +++ b/src/ProtocolCode.lua @@ -259,6 +259,7 @@ actionCodes = { Activity_buyBattleCommandLvlRpc = 672, Activity_returnerTaskRpc = 673, Activity_actNewUserTaskRpc = 674, + Activity_buyBattleTicketRpc = 675, Radio_startQuestRpc = 700, Radio_finishQuestRpc = 701, diff --git a/src/actions/ActivityAction.lua b/src/actions/ActivityAction.lua index a975f01..f98c0c5 100644 --- a/src/actions/ActivityAction.lua +++ b/src/actions/ActivityAction.lua @@ -588,24 +588,23 @@ function _M.startBattleRpc(agent, data) role.activity:getBattleTicket(actid) num = battleCfg.type:toArray(true, "=")[3] if count and count > 0 then - if battleCfg.rank == 0 then - return 7 + if battleCfg.rank ~= 0 then + local bi = actData[id] + if not bi then return 8 end + local star = bi["star"] or 0 + local maxP = bi["maxP"] or 0 + -- 世界boss + if battleCfg.worldBoss_award ~= 0 then + if maxP < 1 then + return 9 + end + else + if star < 1 then + return 9 + end + end end - local bi = actData[id] - if not bi then return 8 end - local star = bi["star"] or 0 - local maxP = bi["maxP"] or 0 - -- 世界boss - if battleCfg.worldBoss_award ~= 0 then - if maxP < 1 then - return 9 - end - else - if star < 1 then - return 9 - end - end - num = num * count + num = num * count end if ticket < num then return 6 @@ -627,9 +626,7 @@ function _M.startBattleRpc(agent, data) if count <= 0 then return end - if battleCfg.rank == 0 then - return 7 - end + local bi = actData[id] local star = bi["star"] or 0 local award = battleCfg.item_clear:toNumMap() @@ -644,23 +641,26 @@ function _M.startBattleRpc(agent, data) end local reward, change = role:award(award, {log = {desc = "actBattle", int1 = actid, int2 = count or 0}}) SendPacket(actionCodes.Activity_startBattleRpc, MsgPack.pack(role:packReward(reward, change))) + changeFlag = true + actData["ticket"] = ticket - num - if battleCfg.worldBoss_award ~= 0 and (bi["maxP"] or 0) > 0 then - bi["bossP"] = (bi["bossP"] or 0) + bi["maxP"] * count + if battleCfg.rank ~= 0 then + if battleCfg.worldBoss_award ~= 0 and (bi["maxP"] or 0) > 0 then + bi["bossP"] = (bi["bossP"] or 0) + bi["maxP"] * count + end + + bi["sum"] = bi["sum"] + bi["top"] * count + actData[id] = bi + + local rankVal = 0 + if battleCfg.rank == 1 then + rankVal = bi["sum"] + elseif battleCfg.rank == 2 then + rankVal = bi["top"] + end + role:updateRankCommon(RANK_TYPE.ActBattleBoss, rankVal) end - bi["sum"] = bi["sum"] + bi["top"] * count - actData["ticket"] = ticket - num - actData[id] = bi - changeFlag = true - - local rankVal = 0 - if battleCfg.rank == 1 then - rankVal = bi["sum"] - elseif battleCfg.rank == 2 then - rankVal = bi["top"] - end - role:updateRankCommon(RANK_TYPE.ActBattleBoss, rankVal) end if changeFlag then role.activity:updateActData("ChallengeLevel", actData) @@ -1466,4 +1466,30 @@ function _M.returnerTaskRpc(agent, data) return true end +function _M.buyBattleTicketRpc(agent, data) + local role = agent.role + local msg = MsgPack.unpack(data) + local actid = msg.actid + local count = msg.count + if not role.activity:isOpenById(actid, "ChallengeLevel") then return 1 end + role.activity:getBattleTicket(actid) + local actData = role.activity:getActData("ChallengeLevel") or {} + local battleInfo = actData[id] or {} + --["activity_scrofa_tickets"] = { 10, 20, 30, 40, 50, 100, 150, 200, 200, 200 } + local limit = #(globalCsv.activity_scrofa_tickets) + local curCount = actData["buyC"] or 0 + if count <= 0 or curCount + count > limit then + return 2 + end + local cost = globalCsv.activity_scrofa_tickets[curCount + 1] + if not role:checkItemEnough({[ItemId.Jade] = cost}) then return 3 end + role:costItems({[ItemId.Jade] = cost}, {log = {desc = "buyActivityBattleTicket", int1 = actid, int2 = count, cint1 = curCount}}) + actData["ticket"] = (actData["ticket"] or 0) + 1 + actData["buyC"] = curCount + count + + role.activity:updateActData("ChallengeLevel", actData) + SendPacket(actionCodes.Activity_buyBattleTicketRpc, "") + return true +end + return _M diff --git a/src/models/Activity.lua b/src/models/Activity.lua index 42f3e7d..0bdb963 100644 --- a/src/models/Activity.lua +++ b/src/models/Activity.lua @@ -797,7 +797,12 @@ activityFunc[Activity.ActivityType.ChallengeLevel] = { end, ["login"] = function(self, actType, actId) self:getBattleTicket(actId) - end + end, + ["crossDay"] = function(self, actType, notify) + local actData = self:getActData(actType) + actData["buyC"] = 0 + self:updateActData(actType, actData, not notify) + end, } function Activity:onLoginActivity(actId) diff --git a/src/models/RoleLog.lua b/src/models/RoleLog.lua index 355505e..9d0f051 100644 --- a/src/models/RoleLog.lua +++ b/src/models/RoleLog.lua @@ -107,6 +107,7 @@ local ItemReason = { actMilecrisis = 1010, -- 物资危机 battleCommandTask = 1011, -- 将军令任务 newUserTask = 1012, -- 新玩家任务 + buyActivityBattleTicket = 1013, -- 购买门票 -- 餐厅 greenHourse = 1101, -- 食材获得 -- libgit2 0.21.2