Commit 98be031a95ed3dd5bee1ad553e5237d256c9d259

Authored by liuzujun
1 parent c3c1b7e0

新年活动

src/ProtocolCode.lua
@@ -234,6 +234,8 @@ actionCodes = { @@ -234,6 +234,8 @@ actionCodes = {
234 Activity_battleCommandRpc = 668, 234 Activity_battleCommandRpc = 668,
235 Activity_actCalendaTmpTaskRpc = 669, 235 Activity_actCalendaTmpTaskRpc = 669,
236 Activity_newSignRpc = 670, 236 Activity_newSignRpc = 670,
  237 + Activity_advLevelRpc = 671,
  238 + Activity_buyBattleCommandLvlRpc = 672,
237 239
238 Radio_startQuestRpc = 700, 240 Radio_startQuestRpc = 700,
239 Radio_finishQuestRpc = 701, 241 Radio_finishQuestRpc = 701,
src/actions/ActivityAction.lua
@@ -1152,6 +1152,7 @@ function _M.battleCommandRpc(agent, data) @@ -1152,6 +1152,7 @@ function _M.battleCommandRpc(agent, data)
1152 local actid = msg.actid -- 活动id 1152 local actid = msg.actid -- 活动id
1153 local index = msg.index -- 领取的阶段id 1153 local index = msg.index -- 领取的阶段id
1154 local pay = msg.pay -- 是否是超级奖励 1154 local pay = msg.pay -- 是否是超级奖励
  1155 + print(actid, index, pay)
1155 1156
1156 if not role.activity:isOpenById(actid, "BattleCommand") then return 1 end 1157 if not role.activity:isOpenById(actid, "BattleCommand") then return 1 end
1157 local actCtrlData = csvdb["activity_ctrlCsv"][actid] 1158 local actCtrlData = csvdb["activity_ctrlCsv"][actid]
@@ -1167,7 +1168,7 @@ function _M.battleCommandRpc(agent, data) @@ -1167,7 +1168,7 @@ function _M.battleCommandRpc(agent, data)
1167 bpCfg = bpCfg[index] 1168 bpCfg = bpCfg[index]
1168 if not bpCfg then return 4 end 1169 if not bpCfg then return 4 end
1169 1170
1170 - if (actData["lvl"] or 0) < bpCfg["typeId"] then return 5 end 1171 + if (actData["lvl"] or 0) < bpCfg["type"] then return 5 end
1171 1172
1172 local record = "" 1173 local record = ""
1173 if pay then 1174 if pay then
@@ -1179,7 +1180,7 @@ function _M.battleCommandRpc(agent, data) @@ -1179,7 +1180,7 @@ function _M.battleCommandRpc(agent, data)
1179 local flag = string.char(string.getbit(record, index)) 1180 local flag = string.char(string.getbit(record, index))
1180 1181
1181 if flag == "1" then 1182 if flag == "1" then
1182 - return 4 1183 + return 6
1183 end 1184 end
1184 1185
1185 record = string.setbit(record, index) 1186 record = string.setbit(record, index)
@@ -1204,6 +1205,7 @@ function _M.buyBattleCommandLvlRpc(agent, data) @@ -1204,6 +1205,7 @@ function _M.buyBattleCommandLvlRpc(agent, data)
1204 local role = agent.role 1205 local role = agent.role
1205 local msg = MsgPack.unpack(data) 1206 local msg = MsgPack.unpack(data)
1206 local actid = msg.actid -- 活动id 1207 local actid = msg.actid -- 活动id
  1208 + local count = msg.count
1207 1209
1208 if not role.activity:isOpenById(actid, "BattleCommand") then return 1 end 1210 if not role.activity:isOpenById(actid, "BattleCommand") then return 1 end
1209 local actCtrlData = csvdb["activity_ctrlCsv"][actid] 1211 local actCtrlData = csvdb["activity_ctrlCsv"][actid]
@@ -1216,13 +1218,13 @@ function _M.buyBattleCommandLvlRpc(agent, data) @@ -1216,13 +1218,13 @@ function _M.buyBattleCommandLvlRpc(agent, data)
1216 local actData = role.activity:getActData("BattleCommand") or {} 1218 local actData = role.activity:getActData("BattleCommand") or {}
1217 1219
1218 local curLvl = actData["lvl"] or 0 1220 local curLvl = actData["lvl"] or 0
1219 - local nextLvl = curLvl + 1 1221 + local nextLvl = curLvl + count
1220 if curLvl >= bpCfg[#bpCfg]["type"] then return 4 end 1222 if curLvl >= bpCfg[#bpCfg]["type"] then return 4 end
1221 local cost = 0 1223 local cost = 0
1222 for i = 1, #bpCfg do 1224 for i = 1, #bpCfg do
1223 local cfg = bpCfg[i] 1225 local cfg = bpCfg[i]
1224 - if cfg["type"] == curLvl then  
1225 - cost = cfg["cost"] 1226 + if cfg["type"] > curLvl and cfg["type"] <= nextLvl then
  1227 + cost = cost + cfg["cost"]
1226 break 1228 break
1227 end 1229 end
1228 end 1230 end
@@ -1267,4 +1269,41 @@ function _M.newSignRpc(agent, data) @@ -1267,4 +1269,41 @@ function _M.newSignRpc(agent, data)
1267 return true 1269 return true
1268 end 1270 end
1269 1271
  1272 +-- 活动拾荒领取阶段奖励
  1273 +function _M.advLevelRpc(agent, data)
  1274 + local role = agent.role
  1275 + local msg = MsgPack.unpack(data)
  1276 + local actid = msg.actid
  1277 + local index = msg.index
  1278 +
  1279 + if not role.activity:isOpenById(actid, "AdvLevel") then return 1 end
  1280 +
  1281 + local actCfg = csvdb["activity_stagesAwardCsv"][actid]
  1282 + if not actCfg then return 2 end
  1283 + actCfg = actCfg[index]
  1284 + if not actCfg then return 3 end
  1285 +
  1286 + local actData = role.activity:getActData("AdvLevel") or {}
  1287 + local record = actData["r"]
  1288 + local flag = string.char(string.getbit(record, index))
  1289 +
  1290 + if flag == "1" then return 4 end
  1291 +
  1292 + local chapters = actCfg["condition2"]:toArray(true, "=")
  1293 + local totalVal = 0
  1294 + for i = 1, #chapters do
  1295 + local cid = chapters[i]
  1296 + totalVal = totalVal + (actData[cid] or 0)
  1297 + end
  1298 + if totalVal < actCfg["condition1"] then return 5 end
  1299 +
  1300 + actData["r"] = string.setbit(record, index)
  1301 + role.activity:updateActData("AdvLevel", actData)
  1302 +
  1303 + local reward, change = role:award(actCfg.reward, {log = {desc = "advLevelStage", int1 = actid, int2 = index}})
  1304 +
  1305 + SendPacket(actionCodes.Activity_advLevelRpc, MsgPack.pack(role:packReward(reward, change)))
  1306 + return true
  1307 +end
  1308 +
1270 return _M 1309 return _M
src/actions/AdvAction.lua
@@ -86,6 +86,7 @@ function _M.startAdvRpc( agent, data ) @@ -86,6 +86,7 @@ function _M.startAdvRpc( agent, data )
86 local role = agent.role 86 local role = agent.role
87 local msg = MsgPack.unpack(data) 87 local msg = MsgPack.unpack(data)
88 local chapterId = msg.chapterId --关卡id 88 local chapterId = msg.chapterId --关卡id
  89 + local actid = msg.actid --活动id
89 local layer = msg.layer or 1 --选择层数 90 local layer = msg.layer or 1 --选择层数
90 --local format = msg.format --编队 91 --local format = msg.format --编队
91 local supportIdx = msg.supportIdx --选择的支援效果 92 local supportIdx = msg.supportIdx --选择的支援效果
@@ -96,6 +97,36 @@ function _M.startAdvRpc( agent, data ) @@ -96,6 +97,36 @@ function _M.startAdvRpc( agent, data )
96 local advHang = role:getProperty("advHang") 97 local advHang = role:getProperty("advHang")
97 -- if advHang[chapterId] then return 9 end --正在挂机 98 -- if advHang[chapterId] then return 9 end --正在挂机
98 99
  100 + -- 检查活动正确性
  101 + if actid then
  102 + if not role.activity:isOpenById(actid, "AdvLevel") then
  103 + return 20
  104 + end
  105 + local actCfg = csvdb["activity_adv_chapterCsv"][actid]
  106 + if not actCfg then return 21 end
  107 + actCfg = actCfg[chapterId]
  108 + if not actCfg then return 22 end
  109 +
  110 + local st = toUnixtime(actCfg["unlockTime"]..string_format("%02x", RESET_TIME))
  111 + if st > skynet.timex() then return 23 end
  112 +
  113 + if actCfg["prepose"] ~= "" then
  114 + local type, cid = actCfg["prepose"]:toArray(true, "=")
  115 + if type == 1 then
  116 + local actData = role.activity:getActData("ChallengeLevel")
  117 + local battleInfo = actData[cid] or {}
  118 + if (battleInfo["star"] or 0) == 0 then
  119 + return 24
  120 + end
  121 + elseif type == 2 then
  122 + local actData = role.activity:getActData("AdvLevel")
  123 + local advInfo = actData[cid] or {}
  124 + if not advInfo["pass"] then
  125 + return 25
  126 + end
  127 + end
  128 + end
  129 + end
99 130
100 local chapterData = csvdb["adv_chapterCsv"][chapterId] 131 local chapterData = csvdb["adv_chapterCsv"][chapterId]
101 if not chapterData or layer < 1 then return 1 end 132 if not chapterData or layer < 1 then return 1 end
@@ -174,6 +205,7 @@ function _M.startAdvRpc( agent, data ) @@ -174,6 +205,7 @@ function _M.startAdvRpc( agent, data )
174 isRelay = layer ~= 1, 205 isRelay = layer ~= 1,
175 isEnter = true, 206 isEnter = true,
176 support = support, 207 support = support,
  208 + actid = actid
177 }) 209 })
178 role:checkTaskEnter("AdvStart", {id = chapterId}) 210 role:checkTaskEnter("AdvStart", {id = chapterId})
179 role:checkTaskEnter("AdvStartSelf", {id = chapterId}) 211 role:checkTaskEnter("AdvStartSelf", {id = chapterId})
@@ -41,6 +41,7 @@ function Adv:initByInfo(advInfo) @@ -41,6 +41,7 @@ function Adv:initByInfo(advInfo)
41 41
42 self.chapterId = advInfo.chapterId 42 self.chapterId = advInfo.chapterId
43 self.level = advInfo.level or 1 43 self.level = advInfo.level or 1
  44 + self.actid = advInfo.actid
44 self.round = advInfo.round or 0 45 self.round = advInfo.round or 0
45 self.score = advInfo.score or {} 46 self.score = advInfo.score or {}
46 self.isRelay = advInfo.isRelay 47 self.isRelay = advInfo.isRelay
@@ -85,6 +86,7 @@ function Adv:initByChapter(params) @@ -85,6 +86,7 @@ function Adv:initByChapter(params)
85 local isEnter = params.isEnter 86 local isEnter = params.isEnter
86 local support = params.support 87 local support = params.support
87 local debugMapId = params.debugMapId 88 local debugMapId = params.debugMapId
  89 + local actid = params.actid
88 90
89 if not self.chapterId then -- 开始新的章节 91 if not self.chapterId then -- 开始新的章节
90 self.chapterId = chapterId 92 self.chapterId = chapterId
@@ -95,6 +97,7 @@ function Adv:initByChapter(params) @@ -95,6 +97,7 @@ function Adv:initByChapter(params)
95 97
96 self.level = level or 1 98 self.level = level or 1
97 self.round = 0 99 self.round = 0
  100 + self.actid = self.actid or actid
98 self.score = self.score or {} 101 self.score = self.score or {}
99 self.lastEnemyId = 1 102 self.lastEnemyId = 1
100 self.mapStack = {1} -- 最后一个为当前的地图 103 self.mapStack = {1} -- 最后一个为当前的地图
@@ -175,6 +178,7 @@ end @@ -175,6 +178,7 @@ end
175 function Adv:clear() 178 function Adv:clear()
176 self.chapterId = nil 179 self.chapterId = nil
177 self.level = nil 180 self.level = nil
  181 + self.actid = 0
178 self.score = {} 182 self.score = {}
179 self.round = 0 183 self.round = 0
180 self.lastEnemyId = 1 184 self.lastEnemyId = 1
@@ -197,6 +201,7 @@ function Adv:saveDB(notNotify) @@ -197,6 +201,7 @@ function Adv:saveDB(notNotify)
197 advInfo.level = self.level 201 advInfo.level = self.level
198 advInfo.round = self.round 202 advInfo.round = self.round
199 advInfo.score = self.score 203 advInfo.score = self.score
  204 + advInfo.actid = self.actid
200 advInfo.isRelay = self.isRelay 205 advInfo.isRelay = self.isRelay
201 advInfo.lastEId = self.lastEnemyId 206 advInfo.lastEId = self.lastEnemyId
202 advInfo.mstack = self.mapStack 207 advInfo.mstack = self.mapStack
@@ -793,9 +798,55 @@ function Adv:over(success, rewardRatio, overType) @@ -793,9 +798,55 @@ function Adv:over(success, rewardRatio, overType)
793 798
794 local score = self.owner:fixAdvScoreChange(self:getScore()) 799 local score = self.owner:fixAdvScoreChange(self:getScore())
795 local scoreInfo = self.score 800 local scoreInfo = self.score
  801 +
  802 + local scoreCoef = chapterData.scoreAward
  803 + local itemId = ItemId.OldCoin
  804 + -- 拾荒活动关卡相关处理
  805 + if self.actid then
  806 + while true do
  807 + if not self.owner.activity:isOpenById(self.actid, "AdvLevel") then
  808 + break
  809 + end
  810 + local actCfg = csvdb["activity_adv_chapterCsv"][self.actid]
  811 + if not actCfg then break end
  812 + actCfg = actCfg[self.chapterId]
  813 + if not actCfg then break end
  814 + itemId, scoreCoef = actCfg["transform"]:toArray(true, "=")
  815 + local actData = self.owner.activity:getActData("AdvLevel")
  816 +
  817 + -- 计算活动积分up
  818 + local upMap = actCfg["upCharacter"]
  819 + local team = self.owner:getProperty("advTeam")
  820 + local format = self.owner:getTeamHerosInfo(team).heros
  821 + local upVal = 0
  822 + for _, hero in pairs(format) do
  823 + local heroId = hero["type"]
  824 + upVal = upVal + (upMap[heroId] or 0)
  825 + end
  826 + score = math.floor(score * (1 + upVal / 100))
  827 +
  828 + local advInfo = actData[self.chapterId] or {}
  829 + local maxScore = advInfo["max"] or 0
  830 + local flag = false
  831 + if success then
  832 + advInfo["pass"] = 1
  833 + flag = true
  834 + end
  835 + -- 更新活动最大积分
  836 + if score > maxScore then
  837 + advInfo["max"] = score
  838 + actData[self.chapterId] = advInfo
  839 + flag = true
  840 + end
  841 + if flag then
  842 + self.owner.activity:updateActData("AdvLevel", actData)
  843 + end
  844 + break
  845 + end
  846 + end
796 847
797 - local scoreReward = math.floor(score / chapterData.scoreAward)  
798 - self.owner:award({[ItemId.OldCoin] = scoreReward}, {log = {desc = "advOver", int1 = self.chapterId}}) 848 + local scoreReward = math.floor(score / scoreCoef)
  849 + self.owner:award({[itemId] = scoreReward}, {log = {desc = "advOver", int1 = self.chapterId}})
799 850
800 -- 被动技会影响奖励 851 -- 被动技会影响奖励
801 self.battle.player:triggerPassive(Passive.ADV_OVER, {score = score, level = self.level}) 852 self.battle.player:triggerPassive(Passive.ADV_OVER, {score = score, level = self.level})
@@ -832,7 +883,7 @@ function Adv:over(success, rewardRatio, overType) @@ -832,7 +883,7 @@ function Adv:over(success, rewardRatio, overType)
832 883
833 local roleId = self.owner:getProperty("id") 884 local roleId = self.owner:getProperty("id")
834 local oldMaxScore = tonum(redisproxy:zscore(self.owner:getAdvRankKey(), roleId)) 885 local oldMaxScore = tonum(redisproxy:zscore(self.owner:getAdvRankKey(), roleId))
835 - if score > oldMaxScore then 886 + if score > oldMaxScore and not self.actid then
836 local team = self.owner:getProperty("advTeam") 887 local team = self.owner:getProperty("advTeam")
837 local curInfo = { 888 local curInfo = {
838 name = self.owner:getProperty("name"), 889 name = self.owner:getProperty("name"),
@@ -918,6 +969,7 @@ function Adv:over(success, rewardRatio, overType) @@ -918,6 +969,7 @@ function Adv:over(success, rewardRatio, overType)
918 scoreAward = scoreReward, 969 scoreAward = scoreReward,
919 chapterId = chapterId, 970 chapterId = chapterId,
920 backAdvCount = backAdvCount, 971 backAdvCount = backAdvCount,
  972 + actid = self.actid
921 }) 973 })
922 end 974 end
923 975
1 -Subproject commit d79bc812353a7e7f9f7e9826ea38e54e0e7339d9 1 +Subproject commit 7320a5f8d782d63b7ad6fc6e310e3f7425c280a1
src/models/Activity.lua
@@ -86,6 +86,8 @@ Activity.schema = { @@ -86,6 +86,8 @@ Activity.schema = {
86 act28 = {"table", {}}, -- 每日活跃签到 {0=day, 1=1,2=1,3=1} 86 act28 = {"table", {}}, -- 每日活跃签到 {0=day, 1=1,2=1,3=1}
87 act30 = {"table", {}}, -- {magic = 0, limit = 0, reward = {id = 1, id = 1}, giveAE = {}, getAE = {}} 奖励字段1表示领取过奖励 87 act30 = {"table", {}}, -- {magic = 0, limit = 0, reward = {id = 1, id = 1}, giveAE = {}, getAE = {}} 奖励字段1表示领取过奖励
88 88
  89 + act33 = {"table", {}}, -- 拾荒关卡活动 {id={max=最大积分, pass=1}, r=""}
  90 +
89 act34 = {"table", {}}, -- 战令记录{unlock = 1, freeR = "", payR = "", lvl = 10, sum = 100} 91 act34 = {"table", {}}, -- 战令记录{unlock = 1, freeR = "", payR = "", lvl = 10, sum = 100}
90 act36 = {"table", {}}, -- 每日活跃签到 {0=day, 1=1,2=1,3=1} 92 act36 = {"table", {}}, -- 每日活跃签到 {0=day, 1=1,2=1,3=1}
91 } 93 }
@@ -112,6 +114,8 @@ function Activity:data() @@ -112,6 +114,8 @@ function Activity:data()
112 act28 = self:getProperty("act28"), 114 act28 = self:getProperty("act28"),
113 act30 = self:getProperty("act30"), 115 act30 = self:getProperty("act30"),
114 116
  117 + act33 = self:getProperty("act33"),
  118 +
115 act34 = self:getProperty("act34"), 119 act34 = self:getProperty("act34"),
116 act36 = self:getProperty("act36"), 120 act36 = self:getProperty("act36"),
117 } 121 }
@@ -975,6 +979,7 @@ activityFunc[Activity.ActivityType.BattleCommand] = { @@ -975,6 +979,7 @@ activityFunc[Activity.ActivityType.BattleCommand] = {
975 self:updateActData(actType, data, not notify) 979 self:updateActData(actType, data, not notify)
976 end, 980 end,
977 ["check"] = function(self, actType, notify, id, count) -- 检查 itemid, count 981 ["check"] = function(self, actType, notify, id, count) -- 检查 itemid, count
  982 + print("babababa", id, count)
978 local isOpen, actId = self:isOpen(actType) 983 local isOpen, actId = self:isOpen(actType)
979 local actData = self:getActData(actType) or {} 984 local actData = self:getActData(actType) or {}
980 local actCfg = csvdb["activity_ctrlCsv"][actId] 985 local actCfg = csvdb["activity_ctrlCsv"][actId]
@@ -1026,4 +1031,20 @@ activityFunc[Activity.ActivityType.NewSign] = { @@ -1026,4 +1031,20 @@ activityFunc[Activity.ActivityType.NewSign] = {
1026 end, 1031 end,
1027 } 1032 }
1028 1033
  1034 +activityFunc[Activity.ActivityType.AdvLevel] = {
  1035 + -- ["check"] = function(self, actType, notify) -- 检查
  1036 + -- end,
  1037 + ["init"] = function(self, actType, isCrossDay, notify)
  1038 + end,
  1039 + ["close"] = function(self, actType, notify, actid)
  1040 + local actCfg = csvdb["activity_adv_chapterCsv"][actid]
  1041 + if not actCfg then return end
  1042 + for chapterId, _ in ipairs(actCfg) do
  1043 + local advPass = self.owner:getProperty("advPass")
  1044 + advPass[chapterId] = nil
  1045 + self.owner:updateProperty({field="advPass", value=advPass})
  1046 + end
  1047 + end,
  1048 +}
  1049 +
1029 return Activity 1050 return Activity
src/models/RoleLog.lua
@@ -56,6 +56,7 @@ local ItemReason = { @@ -56,6 +56,7 @@ local ItemReason = {
56 actBattleCommand = 140, -- 活动战令 56 actBattleCommand = 140, -- 活动战令
57 actBuyBpLevel = 141, -- 购买活动战令等级 57 actBuyBpLevel = 141, -- 购买活动战令等级
58 newSign = 142,-- 新的活动签到 58 newSign = 142,-- 新的活动签到
  59 + advLevelStage = 143, -- 拾荒活动阶段奖励
59 60
60 61
61 advHang = 301, -- 拾荒挂机 62 advHang = 301, -- 拾荒挂机
src/models/Store.lua
@@ -222,17 +222,17 @@ function Store:onBuyCard(type, duration, id, actid) @@ -222,17 +222,17 @@ function Store:onBuyCard(type, duration, id, actid)
222 bpInfo[index] = info 222 bpInfo[index] = info
223 self:updateProperty({field = "bpInfo", value = bpInfo}) 223 self:updateProperty({field = "bpInfo", value = bpInfo})
224 elseif type == CardType.ActBattleCommandCard then 224 elseif type == CardType.ActBattleCommandCard then
225 - if not self.owner.activity:isOpenById(actid, "BattleCommand") then 225 + if not self.owner.activity:isOpenById(actid, "ActShopGoods") then
226 return 226 return
227 end 227 end
228 local actCfg = csvdb["activity_ctrlCsv"][actid] 228 local actCfg = csvdb["activity_ctrlCsv"][actid]
229 if not actCfg then return end 229 if not actCfg then return end
230 local actData = self.owner.activity:getActData("BattleCommand") or {} 230 local actData = self.owner.activity:getActData("BattleCommand") or {}
231 - if actData["unlock"] == 1 then return end  
232 actData["unlock"] = 1 231 actData["unlock"] = 1
233 if actCfg.condition ~= 0 then 232 if actCfg.condition ~= 0 then
234 actData["lvl"] = (actData["lvl"] or 0) + actCfg.condition 233 actData["lvl"] = (actData["lvl"] or 0) + actCfg.condition
235 end 234 end
  235 + self.owner.activity:updateActData("BattleCommand", actData)
236 end 236 end
237 end 237 end
238 238
@@ -2,5 +2,5 @@ @@ -2,5 +2,5 @@
2 local skynet = require "skynet" 2 local skynet = require "skynet"
3 3
4 skynet.timex = function () 4 skynet.timex = function ()
5 - return math.floor(skynet.time()) 5 + return math.floor(skynet.time()) + 2332771
6 end 6 end
7 \ No newline at end of file 7 \ No newline at end of file