Commit fdddc1884f9e5e497b65815cbdc2aea7af6c45ce

Authored by zhouhaihai
2 parents aa4a843a 82520a23

Merge branch 'tr/bugfix' into tr/publish/preview

* tr/bugfix: (28 commits)
  拾荒随机 错误
  金额使用 乘以 100 的方式
  mycard twd
  反回 的是twd
  战令-一次性领取超出周上限的战令经验应该只领取到达周上限的那一部分
  战令奖励错位
  战令活动购买等级扣除钻石bug
  代理拾荒出勤人数计数错误, 代理拾荒没有统计进拾荒体力消耗
  httpweb
  活动任务数据重置
  战令每周积分判空
  战令任务活动
  拾荒增加选择类型
  拆解术式,可以自主选择加速多长时间
  查询角色
  去除preLoad时间偏移
  去除调试日志
  拾荒活动关卡开启时间检测
  活动拾荒活动结束重置数据
  拾荒活动
  ...
@@ -224,6 +224,7 @@ AdvBackEventType = { @@ -224,6 +224,7 @@ AdvBackEventType = {
224 LinkChooseOver = 26, -- 连锁事件结束 224 LinkChooseOver = 26, -- 连锁事件结束
225 BuffEffect = 27, -- buff 效果 225 BuffEffect = 27, -- buff 效果
226 PassiveEffect = 28, -- 被动 效果 226 PassiveEffect = 28, -- 被动 效果
  227 + ChooseDice = 29, -- 选择点随机效果
227 } 228 }
228 229
229 AdvScoreType = { 230 AdvScoreType = {
@@ -290,6 +291,7 @@ CardType = { @@ -290,6 +291,7 @@ CardType = {
290 BattleCard = 5, --赛季卡 291 BattleCard = 5, --赛季卡
291 PaySignCard = 6, -- 付费签到卡 292 PaySignCard = 6, -- 付费签到卡
292 BattlePassCard = 7, -- 探索指令 293 BattlePassCard = 7, -- 探索指令
  294 + ActBattleCommandCard = 8, -- 战令活动卡
293 } 295 }
294 296
295 ShopPackType = { 297 ShopPackType = {
src/ProtocolCode.lua
@@ -231,6 +231,11 @@ actionCodes = { @@ -231,6 +231,11 @@ actionCodes = {
231 Activity_crisisMilestoneRpc = 665, 231 Activity_crisisMilestoneRpc = 665,
232 Activity_commonSignRpc = 666, 232 Activity_commonSignRpc = 666,
233 Activity_friendHelpRpc = 667, 233 Activity_friendHelpRpc = 667,
  234 + Activity_battleCommandRpc = 668,
  235 + Activity_actBattleCommandTaskRpc = 669,
  236 + Activity_newSignRpc = 670,
  237 + Activity_advLevelRpc = 671,
  238 + Activity_buyBattleCommandLvlRpc = 672,
234 239
235 Radio_startQuestRpc = 700, 240 Radio_startQuestRpc = 700,
236 Radio_finishQuestRpc = 701, 241 Radio_finishQuestRpc = 701,
@@ -248,4 +253,4 @@ for key, value in pairs(actionCodes) do @@ -248,4 +253,4 @@ for key, value in pairs(actionCodes) do
248 actionHandlers[value + rpcResponseBegin] = handlerName .. "Response" 253 actionHandlers[value + rpcResponseBegin] = handlerName .. "Response"
249 end 254 end
250 actionHandlers[value] = string.gsub(key, "_", ".") 255 actionHandlers[value] = string.gsub(key, "_", ".")
251 -end  
252 \ No newline at end of file 256 \ No newline at end of file
  257 +end
src/actions/ActivityAction.lua
@@ -266,6 +266,53 @@ function _M.actCalendaTaskRpc(agent, data) @@ -266,6 +266,53 @@ function _M.actCalendaTaskRpc(agent, data)
266 return true 266 return true
267 end 267 end
268 268
  269 +function _M.actBattleCommandTaskRpc(agent, data)
  270 + local role = agent.role
  271 + local msg = MsgPack.unpack(data)
  272 + local taskId = msg.id
  273 + local calTask = role:getProperty("bcTask") or {}
  274 + local record = calTask["r"] or {}
  275 + local flag = record[taskId] or 0
  276 + if flag == 1 then return 1 end
  277 + local open, actId = role.activity:isOpen("BattleCommandTask")
  278 + local actData = csvdb["activity_ctrlCsv"][actId]
  279 + if not open then return 2 end
  280 + if not actData then return 3 end
  281 +
  282 + local taskList = csvdb["activity_taskCsv"][actData.condition]
  283 + if not taskList then return 4 end
  284 + local taskCfg = taskList[taskId]
  285 + if not taskCfg then return 5 end
  286 + if taskCfg.key ~= actData.condition then return 6 end
  287 +
  288 + if (calTask[taskId] or 0) < taskCfg.condition1 then return 7 end
  289 +
  290 + local open, actId = role.activity:isOpen("BattleCommand")
  291 + local actData = csvdb["activity_ctrlCsv"][actId]
  292 + if not open then return 2 end
  293 + if not actData then return 3 end
  294 +
  295 +
  296 + record[taskId] = 1
  297 + calTask["r"] = record
  298 +
  299 + role:updateProperty({field = "bcTask", value = calTask})
  300 +
  301 + local reward, change = role:award(taskCfg.reward, {log = {desc = "battleCommandTask"}})
  302 +
  303 + role:log("activity", {
  304 + activity_id = taskId, -- 活动ID(或活动指定任务的ID)
  305 + activity_type = role.activity.ActivityType.BattleCommandTask, -- 活动类型,见活动类型枚举表
  306 + activity_reward = reward, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...}
  307 + })
  308 +
  309 + role:checkTaskEnter("FinishSpeTask", {taskId = taskId, actId = actId})
  310 +
  311 + SendPacket(actionCodes.Activity_actBattleCommandTaskRpc, MsgPack.pack(role:packReward(reward, change)))
  312 +
  313 + return true
  314 +end
  315 +
269 function _M.exchangeRpc(agent, data) 316 function _M.exchangeRpc(agent, data)
270 local role = agent.role 317 local role = agent.role
271 local msg = MsgPack.unpack(data) 318 local msg = MsgPack.unpack(data)
@@ -1113,11 +1160,212 @@ function _M.friendHelpRpc(agent, data) @@ -1113,11 +1160,212 @@ function _M.friendHelpRpc(agent, data)
1113 1160
1114 local reward, change 1161 local reward, change
1115 if next(award) then 1162 if next(award) then
1116 - reward, change = role:award(award, {log = {desc = "actFriendHelp", int1 = actid, int2 = level}}) 1163 + reward, change = role:award(award, {log = {desc = "actFriendHelp", int1 = actid}})
1117 end 1164 end
1118 role.activity:updateActData("FriendEnergy", actData) 1165 role.activity:updateActData("FriendEnergy", actData)
1119 SendPacket(actionCodes.Activity_friendHelpRpc, MsgPack.pack({result = result, reward = reward})) 1166 SendPacket(actionCodes.Activity_friendHelpRpc, MsgPack.pack({result = result, reward = reward}))
1120 return true 1167 return true
1121 end 1168 end
1122 1169
1123 -return _M  
1124 \ No newline at end of file 1170 \ No newline at end of file
  1171 +-- 战令活动奖励
  1172 +function _M.battleCommandRpc(agent, data)
  1173 + local role = agent.role
  1174 + local msg = MsgPack.unpack(data)
  1175 + local actid = msg.actid -- 活动id
  1176 + local index = msg.index -- 领取的阶段id
  1177 + local pay = msg.pay -- 是否是超级奖励
  1178 +
  1179 + if not role.activity:isOpenById(actid, "BattleCommand") then return 1 end
  1180 + local actCtrlData = csvdb["activity_ctrlCsv"][actid]
  1181 +
  1182 + if not actCtrlData then return end
  1183 +
  1184 + local actData = role.activity:getActData("BattleCommand") or {}
  1185 + if pay and not actData["unlock"] then return 2 end
  1186 +
  1187 + local bpCfg = csvdb["activity_battlepass_rewardCsv"][actid]
  1188 + if not bpCfg then return 3 end
  1189 +
  1190 + local unlock = actData["unlock"] or 0
  1191 + local award = {}
  1192 + if not index then -- 一键领取
  1193 + for i = 1, #bpCfg do
  1194 + local cfg = bpCfg[i]
  1195 + if not cfg then return 4 end
  1196 +
  1197 + if (actData["lvl"] or 0) < cfg["type"] then break end
  1198 + local records = {{"freeR", "rewardNormal"}, {"payR", "rewardHigh"}}
  1199 +
  1200 + for _, info in ipairs(records) do
  1201 + local typeKey, rewardKey = info[1], info[2]
  1202 + if typeKey == "payR" and unlock == 0 then
  1203 + break
  1204 + end
  1205 + local record = actData[typeKey] or ""
  1206 + local flag = string.char(string.getbit(record, i))
  1207 + if flag == "0" then
  1208 + record = string.setbit(record, i)
  1209 + local awd = cfg[rewardKey]
  1210 + for k, v in pairs(awd:toNumMap()) do
  1211 + award[k] = (award[k] or 0) + v
  1212 + end
  1213 + end
  1214 + actData[typeKey] = record
  1215 +
  1216 + end
  1217 + end
  1218 + else
  1219 + bpCfg = bpCfg[index]
  1220 + if not bpCfg then return 4 end
  1221 +
  1222 + if (actData["lvl"] or 0) < bpCfg["type"] then return 5 end
  1223 +
  1224 + local record = ""
  1225 + if pay then
  1226 + record = actData["payR"] or ""
  1227 + else
  1228 + record = actData["freeR"] or ""
  1229 + end
  1230 +
  1231 + local flag = string.char(string.getbit(record, index))
  1232 +
  1233 + if flag == "1" then
  1234 + return 6
  1235 + end
  1236 +
  1237 + record = string.setbit(record, index)
  1238 + local awd = ""
  1239 + if pay then
  1240 + actData["payR"] = record
  1241 + awd = bpCfg["rewardHigh"]
  1242 + else
  1243 + actData["freeR"] = record
  1244 + awd = bpCfg["rewardNormal"]
  1245 + end
  1246 + for k, v in pairs(awd:toNumMap()) do
  1247 + award[k] = (award[k] or 0) + v
  1248 + end
  1249 + end
  1250 +
  1251 + role.activity:updateActData("BattleCommand", actData)
  1252 +
  1253 + local reward, change = role:award(award, {log = {desc = "actBattleCommand", int1 = actid, int2 = index}})
  1254 +
  1255 + SendPacket(actionCodes.Activity_battleCommandRpc, MsgPack.pack(role:packReward(reward, change)))
  1256 + return true
  1257 +end
  1258 +
  1259 +function _M.buyBattleCommandLvlRpc(agent, data)
  1260 + local role = agent.role
  1261 + local msg = MsgPack.unpack(data)
  1262 + local actid = msg.actid -- 活动id
  1263 + local count = msg.count
  1264 +
  1265 + if not role.activity:isOpenById(actid, "BattleCommand") then return 1 end
  1266 + local actCtrlData = csvdb["activity_ctrlCsv"][actid]
  1267 +
  1268 + if not actCtrlData then return 2 end
  1269 +
  1270 + local bpCfg = csvdb["activity_battlepass_rewardCsv"][actid]
  1271 + if not bpCfg then return 3 end
  1272 +
  1273 + local actData = role.activity:getActData("BattleCommand") or {}
  1274 +
  1275 + local curLvl = actData["lvl"] or 0
  1276 + local nextLvl = curLvl + count
  1277 + if curLvl >= bpCfg[#bpCfg]["type"] then return 4 end
  1278 + local cost = 0
  1279 + for i = 1, #bpCfg do
  1280 + local cfg = bpCfg[i]
  1281 + if cfg["type"] > curLvl and cfg["type"] <= nextLvl then
  1282 + cost = cost + cfg["cost"]
  1283 + elseif cfg["type"] > nextLvl then
  1284 + break
  1285 + end
  1286 + end
  1287 + if cost == 0 then return 5 end
  1288 +
  1289 + if not role:checkItemEnough({[ItemId.Diamond] = cost}) then return 6 end
  1290 + role:costItems({[ItemId.Diamond] = cost}, {log = {desc = "actBuyBpLevel", int1 = curLvl}})
  1291 + actData["lvl"] = nextLvl
  1292 + role.activity:updateActData("BattleCommand", actData)
  1293 +
  1294 + SendPacket(actionCodes.Activity_buyBattleCommandLvlRpc, MsgPack.pack({}))
  1295 + return true
  1296 +end
  1297 +
  1298 +function _M.newSignRpc(agent, data)
  1299 + local role = agent.role
  1300 + local msg = MsgPack.unpack(data)
  1301 +
  1302 + local open, actId = role.activity:isOpen("NewSign")
  1303 + if not open then return 1 end
  1304 +
  1305 + local actData = role.activity:getActData("NewSign")
  1306 + if actData[actData[0] or 0] then
  1307 + return 2
  1308 + end
  1309 +
  1310 + local actCfg = csvdb["activity_signInCsv"][actId]
  1311 + if not actCfg then return 4 end
  1312 +
  1313 + local sumDay = actData[0] or 0
  1314 + local award = {}
  1315 + for k, data in pairs(actCfg) do
  1316 + if not actData[data.day] and data.day <= sumDay then
  1317 + for id, value in pairs(data.reward:toNumMap()) do
  1318 + award[id] = (award[id] or 0) + value
  1319 + end
  1320 + actData[data.day] = 1
  1321 + end
  1322 + end
  1323 +
  1324 + local reward, change
  1325 + if next(award) then
  1326 + role.activity:updateActData("NewSign", actData)
  1327 + reward, change = role:award(award, {log = {desc = "newSign", int1 = actId, int2 = sumDay}})
  1328 + end
  1329 +
  1330 + SendPacket(actionCodes.Activity_newSignRpc, MsgPack.pack(role:packReward(reward, change)))
  1331 + return true
  1332 +end
  1333 +
  1334 +-- 活动拾荒领取阶段奖励
  1335 +function _M.advLevelRpc(agent, data)
  1336 + local role = agent.role
  1337 + local msg = MsgPack.unpack(data)
  1338 + local actid = msg.actid
  1339 + local index = msg.index
  1340 +
  1341 + if not role.activity:isOpenById(actid, "AdvLevel") then return 1 end
  1342 +
  1343 + local actCfg = csvdb["activity_stagesAwardCsv"][actid]
  1344 + if not actCfg then return 2 end
  1345 + actCfg = actCfg[index]
  1346 + if not actCfg then return 3 end
  1347 +
  1348 + local actData = role.activity:getActData("AdvLevel") or {}
  1349 + local record = actData["r"] or ""
  1350 + local flag = string.char(string.getbit(record, index))
  1351 +
  1352 + if flag == "1" then return 4 end
  1353 +
  1354 + local chapters = actCfg["condition2"]:toArray(true, "=")
  1355 + local totalVal = 0
  1356 + for i = 1, #chapters do
  1357 + local cid = chapters[i]
  1358 + local info = actData[cid] or {}
  1359 + totalVal = totalVal + (info["max"] or 0)
  1360 + end
  1361 + if totalVal < actCfg["condition1"] then return 5 end
  1362 +
  1363 + actData["r"] = string.setbit(record, index)
  1364 + role.activity:updateActData("AdvLevel", actData)
  1365 +
  1366 + local reward, change = role:award(actCfg.reward, {log = {desc = "advLevelStage", int1 = actid, int2 = index}})
  1367 +
  1368 + SendPacket(actionCodes.Activity_advLevelRpc, MsgPack.pack(role:packReward(reward, change)))
  1369 + return true
  1370 +end
  1371 +
  1372 +return _M
src/actions/AdvAction.lua
@@ -95,16 +95,49 @@ function _M.startAdvRpc( agent, data ) @@ -95,16 +95,49 @@ function _M.startAdvRpc( agent, data )
95 local role = agent.role 95 local role = agent.role
96 local msg = MsgPack.unpack(data) 96 local msg = MsgPack.unpack(data)
97 local chapterId = msg.chapterId --关卡id 97 local chapterId = msg.chapterId --关卡id
  98 + local actid = msg.actid --活动id
98 local layer = msg.layer or 1 --选择层数 99 local layer = msg.layer or 1 --选择层数
99 --local format = msg.format --编队 100 --local format = msg.format --编队
100 local supportIdx = msg.supportIdx --选择的支援效果 101 local supportIdx = msg.supportIdx --选择的支援效果
101 if not role:isFuncUnlock(FuncUnlock.Adv) then return end 102 if not role:isFuncUnlock(FuncUnlock.Adv) then return end
102 - 103 +
103 --上一个关卡结束才可以开始新的关卡 104 --上一个关卡结束才可以开始新的关卡
104 if role:getAdvData():isRunning() then return 8 end 105 if role:getAdvData():isRunning() then return 8 end
105 local advHang = role:getProperty("advHang") 106 local advHang = role:getProperty("advHang")
106 -- if advHang[chapterId] then return 9 end --正在挂机 107 -- if advHang[chapterId] then return 9 end --正在挂机
107 108
  109 + -- 检查活动正确性
  110 + if actid then
  111 + if not role.activity:isOpenById(actid, "AdvLevel") then
  112 + return 20
  113 + end
  114 + local actCfg = csvdb["activity_adv_chapterCsv"][actid]
  115 + if not actCfg then return 21 end
  116 + actCfg = actCfg[chapterId]
  117 + if not actCfg then return 22 end
  118 +
  119 + if actCfg["unlockTime"] ~= 0 then
  120 + local st = toUnixtime(actCfg["unlockTime"]..string_format("%02x", RESET_TIME))
  121 + if st > skynet.timex() then return 23 end
  122 + end
  123 +
  124 + if actCfg["prepose"] ~= "" then
  125 + local type, cid = actCfg["prepose"]:toArray(true, "=")
  126 + if type == 1 then
  127 + local actData = role.activity:getActData("ChallengeLevel")
  128 + local battleInfo = actData[cid] or {}
  129 + if (battleInfo["star"] or 0) == 0 then
  130 + return 24
  131 + end
  132 + elseif type == 2 then
  133 + local actData = role.activity:getActData("AdvLevel")
  134 + local advInfo = actData[cid] or {}
  135 + if not advInfo["pass"] then
  136 + return 25
  137 + end
  138 + end
  139 + end
  140 + end
108 141
109 local chapterData = csvdb["adv_chapterCsv"][chapterId] 142 local chapterData = csvdb["adv_chapterCsv"][chapterId]
110 if not chapterData or layer < 1 then return 1 end 143 if not chapterData or layer < 1 then return 1 end
@@ -113,6 +146,7 @@ function _M.startAdvRpc( agent, data ) @@ -113,6 +146,7 @@ function _M.startAdvRpc( agent, data )
113 146
114 if not checkFormat(role) then return 7 end 147 if not checkFormat(role) then return 7 end
115 148
  149 + local cost = 0
116 if AdvCommon.isEndless(chapterId) then -- 无尽模式判断 150 if AdvCommon.isEndless(chapterId) then -- 无尽模式判断
117 151
118 if chapterId ~= role.advElChapter then return end -- 不是当前进行的章节 152 if chapterId ~= role.advElChapter then return end -- 不是当前进行的章节
@@ -131,6 +165,7 @@ function _M.startAdvRpc( agent, data ) @@ -131,6 +165,7 @@ function _M.startAdvRpc( agent, data )
131 end 165 end
132 166
133 role.dailyData:updateProperty({field = "advElC", delta = 1}) 167 role.dailyData:updateProperty({field = "advElC", delta = 1})
  168 + cost = 1
134 else -- 普通模式判断 169 else -- 普通模式判断
135 if layer >= chapterData.limitlevel then return 4 end 170 if layer >= chapterData.limitlevel then return 4 end
136 171
@@ -145,7 +180,9 @@ function _M.startAdvRpc( agent, data ) @@ -145,7 +180,9 @@ function _M.startAdvRpc( agent, data )
145 if not role:advChapterIsOpen(chapterId) then return 5 end 180 if not role:advChapterIsOpen(chapterId) then return 5 end
146 181
147 role:changeAdvCount(relayData.supply) 182 role:changeAdvCount(relayData.supply)
  183 + cost = relayData.supply
148 end 184 end
  185 + role:checkTaskEnter("AdvCostPower", {count = cost})
149 186
150 local support = {} -- 支援效果 187 local support = {} -- 支援效果
151 if AdvCommon.isEndless(chapterId) then 188 if AdvCommon.isEndless(chapterId) then
@@ -173,6 +210,7 @@ function _M.startAdvRpc( agent, data ) @@ -173,6 +210,7 @@ function _M.startAdvRpc( agent, data )
173 isRelay = layer ~= 1, 210 isRelay = layer ~= 1,
174 isEnter = true, 211 isEnter = true,
175 support = support, 212 support = support,
  213 + actid = actid
176 }) 214 })
177 215
178 role:checkTaskEnter("AdvStart", {id = chapterId}) 216 role:checkTaskEnter("AdvStart", {id = chapterId})
@@ -191,6 +229,40 @@ function _M.startHangRpc(agent, data) @@ -191,6 +229,40 @@ function _M.startHangRpc(agent, data)
191 local campId = msg.campId or 2 --营地id 229 local campId = msg.campId or 2 --营地id
192 local format = msg.format --编队 230 local format = msg.format --编队
193 local index = msg.index or 1--时间索引id 231 local index = msg.index or 1--时间索引id
  232 + local actid = msg.actid
  233 +
  234 + -- 检查活动正确性
  235 + if actid then
  236 + if not role.activity:isOpenById(actid, "AdvLevel") then
  237 + return 20
  238 + end
  239 + local actCfg = csvdb["activity_adv_chapterCsv"][actid]
  240 + if not actCfg then return 21 end
  241 + actCfg = actCfg[chapterId]
  242 + if not actCfg then return 22 end
  243 +
  244 + if actCfg["unlockTime"] ~= 0 then
  245 + local st = toUnixtime(actCfg["unlockTime"]..string_format("%02x", RESET_TIME))
  246 + if st > skynet.timex() then return 23 end
  247 + end
  248 +
  249 + if actCfg["prepose"] ~= "" then
  250 + local type, cid = actCfg["prepose"]:toArray(true, "=")
  251 + if type == 1 then
  252 + local actData = role.activity:getActData("ChallengeLevel")
  253 + local battleInfo = actData[cid] or {}
  254 + if (battleInfo["star"] or 0) == 0 then
  255 + return 24
  256 + end
  257 + elseif type == 2 then
  258 + local actData = role.activity:getActData("AdvLevel")
  259 + local advInfo = actData[cid] or {}
  260 + if not advInfo["pass"] then
  261 + return 25
  262 + end
  263 + end
  264 + end
  265 + end
194 266
195 local chapterData = csvdb["adv_chapter_campsiteCsv"][chapterId] 267 local chapterData = csvdb["adv_chapter_campsiteCsv"][chapterId]
196 if not chapterData then return 1 end 268 if not chapterData then return 1 end
@@ -219,6 +291,8 @@ function _M.startHangRpc(agent, data) @@ -219,6 +291,8 @@ function _M.startHangRpc(agent, data)
219 291
220 if not role:checkAdvCount(adv_idle_energy) then return 7 end -- 是否有体力 292 if not role:checkAdvCount(adv_idle_energy) then return 7 end -- 是否有体力
221 293
  294 + role:checkTaskEnter("AdvCostPower", {count = adv_idle_energy})
  295 +
222 if not checkFormat(role, format, role:getAdvData():isRunning()) then return 8 end --编队是否正确 296 if not checkFormat(role, format, role:getAdvData():isRunning()) then return 8 end --编队是否正确
223 297
224 local player = {} 298 local player = {}
src/actions/GmAction.lua
@@ -390,6 +390,7 @@ function _M.advt(role, pms) @@ -390,6 +390,7 @@ function _M.advt(role, pms)
390 local chapterId = tonum(pms.pm1) 390 local chapterId = tonum(pms.pm1)
391 local layer = tonum(pms.pm2) 391 local layer = tonum(pms.pm2)
392 local mapId = tonum(pms.pm3) 392 local mapId = tonum(pms.pm3)
  393 + local actid = tonum(pms.pm4)
393 local advCsv = csvdb["adv_chapterCsv"][chapterId] 394 local advCsv = csvdb["adv_chapterCsv"][chapterId]
394 if not advCsv then return "不存在的章节" end 395 if not advCsv then return "不存在的章节" end
395 396
@@ -406,6 +407,7 @@ function _M.advt(role, pms) @@ -406,6 +407,7 @@ function _M.advt(role, pms)
406 level = layer, 407 level = layer,
407 isEnter = true, 408 isEnter = true,
408 debugMapId = mapId, 409 debugMapId = mapId,
  410 + actid = actid,
409 }) 411 })
410 role:mylog("gm_action", {desc = "advt", int1 = chapterId, int2 = layer, key1 = pms.sender}) 412 role:mylog("gm_action", {desc = "advt", int1 = chapterId, int2 = layer, key1 = pms.sender})
411 return "成功" 413 return "成功"
@@ -704,15 +706,18 @@ function _M.drawHero(role, t, act) @@ -704,15 +706,18 @@ function _M.drawHero(role, t, act)
704 elseif values[1] == HeroQuality.SSR then 706 elseif values[1] == HeroQuality.SSR then
705 weight = unitPool["up_ssr_weight"] 707 weight = unitPool["up_ssr_weight"]
706 up_pool = unitPool["up_ssr_id"] 708 up_pool = unitPool["up_ssr_id"]
  709 + if btype == 5 then
  710 + weight = 3 * weight
  711 + end
707 end 712 end
708 --print(poolId, rand_v, weight, up_pool, values[1]) 713 --print(poolId, rand_v, weight, up_pool, values[1])
709 if rand_v < weight and up_pool then 714 if rand_v < weight and up_pool then
710 up_pool = up_pool:toArray(true, "=") 715 up_pool = up_pool:toArray(true, "=")
711 if btype == 5 then -- 爱心卡池,使用玩家设置的备选池子 716 if btype == 5 then -- 爱心卡池,使用玩家设置的备选池子
712 up_pool = role:getProperty("wishPool") 717 up_pool = role:getProperty("wishPool")
713 - up_pool[1] = 606  
714 - up_pool[2] = 607  
715 - up_pool[3] = 608 718 + up_pool[1] = 408
  719 + up_pool[2] = 409
  720 + up_pool[3] = 410
716 end 721 end
717 for k, v in ipairs(up_pool) do 722 for k, v in ipairs(up_pool) do
718 resultPool[v] = {1} 723 resultPool[v] = {1}
@@ -733,6 +738,14 @@ function _M.drawHero(role, t, act) @@ -733,6 +738,14 @@ function _M.drawHero(role, t, act)
733 if heroData[field] ~= values[idx] then ok = false break end 738 if heroData[field] ~= values[idx] then ok = false break end
734 end 739 end
735 end 740 end
  741 + if up_pool then
  742 + for k, v in ipairs(up_pool) do
  743 + if v == itemData.id then
  744 + ok = false
  745 + break
  746 + end
  747 + end
  748 + end
736 if not ok then break end 749 if not ok then break end
737 if oneData[pool_str] > 0 then 750 if oneData[pool_str] > 0 then
738 resultPool[itemId] = {oneData[pool_str]} -- itemId, count, 概率 751 resultPool[itemId] = {oneData[pool_str]} -- itemId, count, 概率
src/actions/HeroAction.lua
@@ -617,7 +617,7 @@ function _M.getResetRewardRpc(agent, data) @@ -617,7 +617,7 @@ function _M.getResetRewardRpc(agent, data)
617 if level <= 1 and talent == "" then return end 617 if level <= 1 and talent == "" then return end
618 618
619 local pay = true 619 local pay = true
620 - if level <= 60 then 620 + if level <= 60 or role.activity:isOpen("HeroBackFree") then
621 pay = false 621 pay = false
622 end 622 end
623 623
@@ -976,6 +976,9 @@ function _M.drawHeroRpc(agent, data) @@ -976,6 +976,9 @@ function _M.drawHeroRpc(agent, data)
976 end 976 end
977 977
978 role:checkTaskEnter("DrawHero", {pool = btype, count = drawCount[drawType]}) 978 role:checkTaskEnter("DrawHero", {pool = btype, count = drawCount[drawType]})
  979 + if btype ~= 3 then
  980 + role:checkTaskEnter("DrawHeroNotFriend", {pool = btype, count = drawCount[drawType]})
  981 + end
979 if ssrCount > 0 then 982 if ssrCount > 0 then
980 role:checkTaskEnter("DrawSSR", {count = ssrCount}) 983 role:checkTaskEnter("DrawSSR", {count = ssrCount})
981 end 984 end
src/actions/HttpAction.lua
@@ -151,7 +151,7 @@ function _M.query_role(query) @@ -151,7 +151,7 @@ function _M.query_role(query)
151 if not query.uid then return "not found" end 151 if not query.uid then return "not found" end
152 local user = redisproxy:get(string.format("uid:%s", query.uid)) 152 local user = redisproxy:get(string.format("uid:%s", query.uid))
153 if not user then return "not found" end 153 if not user then return "not found" end
154 - local roleId = redisproxy:get(string_format("user:%s", string.upper(user))) 154 + local roleId = redisproxy:get(string.format("user:%s", string.upper(user)))
155 if not roleId then return "not found" end 155 if not roleId then return "not found" end
156 return json.encode({roleId, user}) 156 return json.encode({roleId, user})
157 end 157 end
src/actions/RoleAction.lua
@@ -166,6 +166,7 @@ function _M.loginRpc( agent, data ) @@ -166,6 +166,7 @@ function _M.loginRpc( agent, data )
166 role.activity:checkActivityStatus(now, false, false) 166 role.activity:checkActivityStatus(now, false, false)
167 role:log("onLogin") 167 role:log("onLogin")
168 end 168 end
  169 + role:checkTaskEnter("Login", {})
169 170
170 redisproxy:zadd(FRIEND_RECOMMEND, now, roleId) 171 redisproxy:zadd(FRIEND_RECOMMEND, now, roleId)
171 172
@@ -607,9 +608,9 @@ function _M.openTimeBoxRpc(agent, data) @@ -607,9 +608,9 @@ function _M.openTimeBoxRpc(agent, data)
607 local itemData = csvdb["itemCsv"][itemId] 608 local itemData = csvdb["itemCsv"][itemId]
608 local unitTime = globalCsv.box_key_time[itemId] * 60 609 local unitTime = globalCsv.box_key_time[itemId] * 60
609 if quick then 610 if quick then
610 - stopTime = time + globalCsv.box_productLine_time * 3600 611 + stopTime = nowTime + quick
611 local cost_pre = globalCsv.box_timeOpen_diamond:toArray(true, "=") 612 local cost_pre = globalCsv.box_timeOpen_diamond:toArray(true, "=")
612 - local costKey = math.ceil((stopTime - nowTime) / (cost_pre[1] * 60)) * cost_pre[2] 613 + local costKey = math.ceil(quick / (cost_pre[1] * 60)) * cost_pre[2]
613 if not role:checkItemEnough({[ItemId.Diamond] = costKey}) then return 5 end 614 if not role:checkItemEnough({[ItemId.Diamond] = costKey}) then return 5 end
614 role:costItems({[ItemId.Diamond] = costKey}, {log = {desc = "openTimeBox", int1 = slot, int2 = oper}}) 615 role:costItems({[ItemId.Diamond] = costKey}, {log = {desc = "openTimeBox", int1 = slot, int2 = oper}})
615 else 616 else
@@ -851,6 +852,8 @@ function _M.taskRpc(agent, data) @@ -851,6 +852,8 @@ function _M.taskRpc(agent, data)
851 -- 日常活动完成 852 -- 日常活动完成
852 if taskType == 1 then 853 if taskType == 1 then
853 role:checkTaskEnter("DailyTask", {pre = (taskStatus["a"] or 0), cur = active}) 854 role:checkTaskEnter("DailyTask", {pre = (taskStatus["a"] or 0), cur = active})
  855 + else
  856 + role:checkTaskEnter("WeekTask", {pre = (taskStatus["a"] or 0), cur = active})
854 end 857 end
855 858
856 role:changeUpdates({ 859 role:changeUpdates({
@@ -913,62 +916,96 @@ function _M.achiveRpc(agent, data) @@ -913,62 +916,96 @@ function _M.achiveRpc(agent, data)
913 local taskId = msg.id --任务id 916 local taskId = msg.id --任务id
914 917
915 if not role:isFuncUnlock(FuncUnlock.TaskAchiv) then return end 918 if not role:isFuncUnlock(FuncUnlock.TaskAchiv) then return end
916 -  
917 - local achiveTask = csvdb["achievementCsv"][taskId]  
918 - if not achiveTask then return 1 end  
919 -  
920 local achiveT = role:getProperty("achiveT") 919 local achiveT = role:getProperty("achiveT")
921 local achiveV = role:getProperty("achiveV") 920 local achiveV = role:getProperty("achiveV")
  921 + local fuxRecord = role:getProperty("fuxR") or 0
  922 +
  923 + local groups = {}
  924 +
  925 + if not taskId then
  926 + local awards = {}
  927 + for id, cfg in pairs(csvdb["achievementCsv"]) do
  928 + -- 没领过
  929 + if not achiveV[id] then
  930 + if (achiveT[cfg.type] or 0) >= cfg.condition1 then
  931 + local award = cfg.reward:toNumMap()
  932 + for k, v in pairs(award) do
  933 + awards[k] = (awards[k] or 0) + v
  934 + end
  935 + achiveV[id] = skynet.timex()
  936 + groups[cfg.group] = 1
  937 +
  938 + role:log("achievement", {
  939 + achievement_id = cfg.id, -- 成就id
  940 + achievement_type = cfg.type, -- 成就类型,具体枚举表中成就类型枚举表
  941 + achievement_reward = award, -- 达成成就奖励,json格式记录,{"itemid1":123,"itemid2":12,……….}
  942 + })
  943 + end
  944 + end
  945 + end
  946 + if not next(awards) then
  947 + return 5
  948 + end
  949 + local reward, change = role:award(awards, {log = {desc = "finishAchive", int1 = 0}})
  950 + role:updateProperty({field = "achiveV", value = achiveV})
922 951
923 - if achiveV[taskId] then return 2 end 952 + SendPacket(actionCodes.Role_achiveRpc, MsgPack.pack(role:packReward(reward, change)))
  953 + else
  954 + local achiveTask = csvdb["achievementCsv"][taskId]
  955 + if not achiveTask then return 1 end
924 956
925 - local curStatus = achiveT[achiveTask.type] or 0  
926 - local maxc = achiveTask.condition1 957 + if achiveV[taskId] then return 2 end
927 958
928 - if maxc > curStatus then  
929 - return 3  
930 - end 959 + local curStatus = achiveT[achiveTask.type] or 0
  960 + local maxc = achiveTask.condition1
931 961
932 - local reward, change = role:award(achiveTask.reward, {log = {desc = "finishAchive", int1 = taskId}})  
933 - role:changeUpdates({  
934 - { type = "achiveV", field = taskId, value = skynet.timex() }  
935 - }) 962 + if maxc > curStatus then
  963 + return 3
  964 + end
936 965
937 - -- 复兴奖励  
938 - if csvdb["achievement_groupCsv"][achiveTask.group].bookmark == 3 then  
939 - local overCount = 0  
940 - for tId, status in pairs(achiveV) do  
941 - local tData = csvdb["achievementCsv"][tId]  
942 - if tData then  
943 - local groupData = csvdb["achievement_groupCsv"][tData.group]  
944 - if groupData.bookmark == 3 then  
945 - overCount = overCount + 1 966 + local reward, change = role:award(achiveTask.reward, {log = {desc = "finishAchive", int1 = taskId}})
  967 + role:changeUpdates({
  968 + { type = "achiveV", field = taskId, value = skynet.timex() }
  969 + })
  970 + groups[achiveTask.group] = 1
  971 +
  972 + role:log("achievement", {
  973 + achievement_id = taskId, -- 成就id
  974 + achievement_type = achiveTask.type, -- 成就类型,具体枚举表中成就类型枚举表
  975 + achievement_reward = reward, -- 达成成就奖励,json格式记录,{"itemid1":123,"itemid2":12,……….}
  976 + })
  977 +
  978 + SendPacket(actionCodes.Role_achiveRpc, MsgPack.pack(role:packReward(reward, change)))
  979 + end
  980 +
  981 + for group, _ in pairs(groups) do
  982 + -- 复兴奖励
  983 + if csvdb["achievement_groupCsv"][group].bookmark == 3 then
  984 + local overCount = 0
  985 + local preMaxCount = fuxRecord or 0
  986 + for tId, status in pairs(achiveV) do
  987 + local tData = csvdb["achievementCsv"][tId]
  988 + if tData then
  989 + local groupData = csvdb["achievement_groupCsv"][tData.group]
  990 + if groupData.bookmark == 3 then
  991 + overCount = overCount + 1
  992 + end
946 end 993 end
947 end 994 end
948 - end  
949 -  
950 - for level, pData in pairs(csvdb["achievement_rewardCsv"]) do  
951 - if pData.request == overCount then  
952 - -- 发放奖励  
953 - redisproxy:insertEmail({  
954 - roleId = role:getProperty("id"),  
955 - emailId = 101,  
956 - attachments = pData.reward,  
957 - contentPms = {pData.level},  
958 - })  
959 - elseif pData.request > overCount then  
960 - break 995 + local flag = false
  996 + for level, pData in pairs(csvdb["achievement_rewardCsv"]) do
  997 + if preMaxCount < pData.request and overCount >= pData.request then
  998 + role:sendMail(101, skynet.timex(), pData.reward, {pData.level})
  999 + flag = true
  1000 + end
  1001 + end
  1002 + if flag then
  1003 + role:updateProperty({field = "fuxR", value = overCount, notNotify = true})
961 end 1004 end
  1005 + break
962 end 1006 end
963 end 1007 end
964 -  
965 - role:log("achievement", {  
966 - achievement_id = taskId, -- 成就id  
967 - achievement_type = achiveTask.type, -- 成就类型,具体枚举表中成就类型枚举表  
968 - achievement_reward = reward, -- 达成成就奖励,json格式记录,{"itemid1":123,"itemid2":12,……….}  
969 - })  
970 1008
971 - SendPacket(actionCodes.Role_achiveRpc, MsgPack.pack(role:packReward(reward, change)))  
972 return true 1009 return true
973 end 1010 end
974 1011
@@ -40,6 +40,7 @@ function Adv:initByInfo() @@ -40,6 +40,7 @@ function Adv:initByInfo()
40 40
41 self.chapterId = advInfo.chapterId 41 self.chapterId = advInfo.chapterId
42 self.level = advInfo.level or 1 42 self.level = advInfo.level or 1
  43 + self.actid = advInfo.actid
43 self.round = advInfo.round or 0 44 self.round = advInfo.round or 0
44 self.score = advInfo.score or {} 45 self.score = advInfo.score or {}
45 self.isRelay = advInfo.isRelay 46 self.isRelay = advInfo.isRelay
@@ -84,6 +85,7 @@ function Adv:initByChapter(params) @@ -84,6 +85,7 @@ function Adv:initByChapter(params)
84 local isEnter = params.isEnter 85 local isEnter = params.isEnter
85 local support = params.support 86 local support = params.support
86 local debugMapId = params.debugMapId 87 local debugMapId = params.debugMapId
  88 + local actid = params.actid
87 89
88 if not self.chapterId then -- 开始新的章节 90 if not self.chapterId then -- 开始新的章节
89 self.chapterId = chapterId 91 self.chapterId = chapterId
@@ -94,6 +96,7 @@ function Adv:initByChapter(params) @@ -94,6 +96,7 @@ function Adv:initByChapter(params)
94 96
95 self.level = level or 1 97 self.level = level or 1
96 self.round = 0 98 self.round = 0
  99 + self.actid = self.actid or actid
97 self.score = self.score or {} 100 self.score = self.score or {}
98 self.lastEnemyId = 1 101 self.lastEnemyId = 1
99 self.mapStack = {1} -- 最后一个为当前的地图 102 self.mapStack = {1} -- 最后一个为当前的地图
@@ -183,6 +186,7 @@ end @@ -183,6 +186,7 @@ end
183 function Adv:clear() 186 function Adv:clear()
184 self.chapterId = nil 187 self.chapterId = nil
185 self.level = nil 188 self.level = nil
  189 + self.actid = nil
186 self.score = {} 190 self.score = {}
187 self.round = 0 191 self.round = 0
188 self.lastEnemyId = 1 192 self.lastEnemyId = 1
@@ -205,6 +209,7 @@ function Adv:saveDB(notNotify) @@ -205,6 +209,7 @@ function Adv:saveDB(notNotify)
205 advInfo.level = self.level 209 advInfo.level = self.level
206 advInfo.round = self.round 210 advInfo.round = self.round
207 advInfo.score = self.score 211 advInfo.score = self.score
  212 + advInfo.actid = self.actid
208 advInfo.isRelay = self.isRelay 213 advInfo.isRelay = self.isRelay
209 advInfo.lastEId = self.lastEnemyId 214 advInfo.lastEId = self.lastEnemyId
210 advInfo.mstack = self.mapStack 215 advInfo.mstack = self.mapStack
@@ -771,6 +776,10 @@ function Adv:isEndless() @@ -771,6 +776,10 @@ function Adv:isEndless()
771 return AdvCommon.isEndless(self.chapterId) 776 return AdvCommon.isEndless(self.chapterId)
772 end 777 end
773 778
  779 +function Adv:isActivity()
  780 + return self.actid ~= nil
  781 +end
  782 +
774 function Adv:getCurFloorData() 783 function Adv:getCurFloorData()
775 local chapter = self.chapterId % 100 784 local chapter = self.chapterId % 100
776 return (csvdb["adv_chapter_floorCsv"][self.chapterId] or {})[self.level] 785 return (csvdb["adv_chapter_floorCsv"][self.chapterId] or {})[self.level]
@@ -800,9 +809,57 @@ function Adv:over(success, rewardRatio, overType) @@ -800,9 +809,57 @@ function Adv:over(success, rewardRatio, overType)
800 809
801 local score = self.owner:fixAdvScoreChange(self:getScore()) 810 local score = self.owner:fixAdvScoreChange(self:getScore())
802 local scoreInfo = self.score 811 local scoreInfo = self.score
  812 +
  813 + local scoreCoef = chapterData.scoreAward
  814 + local itemId = ItemId.OldCoin
  815 + -- 拾荒活动关卡相关处理
  816 + if self.actid then
  817 + while true do
  818 + if not self.owner.activity:isOpenById(self.actid, "AdvLevel") then
  819 + break
  820 + end
  821 + local actCfg = csvdb["activity_adv_chapterCsv"][self.actid]
  822 + if not actCfg then break end
  823 + actCfg = actCfg[self.chapterId]
  824 + if not actCfg then break end
  825 + local arr = actCfg["transform"]:toArray(true, "=")
  826 + itemId, scoreCoef = arr[1], arr[2]
  827 + local actData = self.owner.activity:getActData("AdvLevel")
  828 +
  829 + -- 计算活动积分up
  830 + local upMap = actCfg["upCharacter"]
  831 + local team = self.owner:getProperty("advTeam")
  832 + local format = self.owner:getTeamHerosInfo(team).heros
  833 + local upVal = 0
  834 + for _, hero in pairs(format) do
  835 + local heroId = hero["type"]
  836 + upVal = upVal + (upMap[heroId] or 0)
  837 + end
  838 + score = math.floor(score * (1 + upVal / 100))
  839 +
  840 + local advInfo = actData[self.chapterId] or {}
  841 + --print("upVal", upVal, score, advInfo["max"], itemId, scoreCoef)
  842 + local maxScore = advInfo["max"] or 0
  843 + local flag = false
  844 + if success then
  845 + advInfo["pass"] = 1
  846 + flag = true
  847 + end
  848 + -- 更新活动最大积分
  849 + if score > maxScore then
  850 + advInfo["max"] = score
  851 + actData[self.chapterId] = advInfo
  852 + flag = true
  853 + end
  854 + if flag then
  855 + self.owner.activity:updateActData("AdvLevel", actData)
  856 + end
  857 + break
  858 + end
  859 + end
803 860
804 - local scoreReward = math.floor(score / chapterData.scoreAward)  
805 - self.owner:award({[ItemId.OldCoin] = scoreReward}, {log = {desc = "advOver", int1 = self.chapterId}}) 861 + local scoreReward = math.floor(score / scoreCoef)
  862 + self.owner:award({[itemId] = scoreReward}, {log = {desc = "advOver", int1 = self.chapterId}})
806 863
807 -- 被动技会影响奖励 864 -- 被动技会影响奖励
808 self.battle.player:triggerPassive(Passive.ADV_OVER, {score = score, level = self.level}) 865 self.battle.player:triggerPassive(Passive.ADV_OVER, {score = score, level = self.level})
@@ -836,9 +893,10 @@ function Adv:over(success, rewardRatio, overType) @@ -836,9 +893,10 @@ function Adv:over(success, rewardRatio, overType)
836 end 893 end
837 end 894 end
838 895
  896 +
839 local roleId = self.owner:getProperty("id") 897 local roleId = self.owner:getProperty("id")
840 local oldMaxScore = tonum(redisproxy:zscore(self.owner:getAdvRankKey(), roleId)) 898 local oldMaxScore = tonum(redisproxy:zscore(self.owner:getAdvRankKey(), roleId))
841 - if score > oldMaxScore then 899 + if score > oldMaxScore and not self.actid then
842 local team = self.owner:getProperty("advTeam") 900 local team = self.owner:getProperty("advTeam")
843 local curInfo = { 901 local curInfo = {
844 name = self.owner:getProperty("name"), 902 name = self.owner:getProperty("name"),
@@ -906,6 +964,7 @@ function Adv:over(success, rewardRatio, overType) @@ -906,6 +964,7 @@ function Adv:over(success, rewardRatio, overType)
906 }) 964 })
907 965
908 local chapterId = self.chapterId 966 local chapterId = self.chapterId
  967 + local actid = self.actid
909 self:clear() 968 self:clear()
910 self.owner:checkTaskEnter("AdvScore", {score = score}) 969 self.owner:checkTaskEnter("AdvScore", {score = score})
911 970
@@ -924,6 +983,7 @@ function Adv:over(success, rewardRatio, overType) @@ -924,6 +983,7 @@ function Adv:over(success, rewardRatio, overType)
924 scoreAward = scoreReward, 983 scoreAward = scoreReward,
925 chapterId = chapterId, 984 chapterId = chapterId,
926 backAdvCount = backAdvCount, 985 backAdvCount = backAdvCount,
  986 + actid = actid
927 }) 987 })
928 end 988 end
929 989
@@ -1233,24 +1293,22 @@ local function clickMonster(self, room, block, params) @@ -1233,24 +1293,22 @@ local function clickMonster(self, room, block, params)
1233 return true 1293 return true
1234 end 1294 end
1235 1295
1236 -local function chooseCommon(self, room, block, chooseData, choose, tag)  
1237 - if not choose then return end  
1238 - if not chooseData or not chooseData["button".. choose .."cond"] then return end  
1239 1296
1240 - local conds = chooseData["button".. choose .."cond"]:toTableArray(true) 1297 +local function checkChooseCondFunc(self, condStr, room, block, tag, chooseData)
  1298 + chooseData = chooseData or {}
1241 local checkCond = { 1299 local checkCond = {
1242 -- 没有条件 1300 -- 没有条件
1243 [0] = function() 1301 [0] = function()
1244 return true 1302 return true
1245 end, 1303 end,
1246 -- 拥有道具 1304 -- 拥有道具
1247 - [1] = function(_, itemId, count) 1305 + [1] = function(itemId, count)
1248 if self:cost({[itemId] = count}, {log = {desc = "chooseEvent", key1 = tag, int1 = chooseData.id}}, true) then 1306 if self:cost({[itemId] = count}, {log = {desc = "chooseEvent", key1 = tag, int1 = chooseData.id}}, true) then
1249 return true 1307 return true
1250 end 1308 end
1251 end, 1309 end,
1252 -- xx角色(todo 队长) 1310 -- xx角色(todo 队长)
1253 - [2] = function(_, heroType) 1311 + [2] = function(heroType)
1254 for slot, heroId in pairs(self.owner:getProperty("advTeam").heros) do 1312 for slot, heroId in pairs(self.owner:getProperty("advTeam").heros) do
1255 local hero = self.owner.heros[heroId] 1313 local hero = self.owner.heros[heroId]
1256 if hero and hero:getProperty("type") == heroType then 1314 if hero and hero:getProperty("type") == heroType then
@@ -1270,38 +1328,38 @@ local function chooseCommon(self, room, block, chooseData, choose, tag) @@ -1270,38 +1328,38 @@ local function chooseCommon(self, room, block, chooseData, choose, tag)
1270 return true 1328 return true
1271 end, 1329 end,
1272 --制定属性 1330 --制定属性
1273 - [4] = function(_, attrType, value) 1331 + [4] = function(attrType, value)
1274 if (self.battle.player[AttsEnumEx[attrType]] or 0) >= value then 1332 if (self.battle.player[AttsEnumEx[attrType]] or 0) >= value then
1275 return true 1333 return true
1276 end 1334 end
1277 end, 1335 end,
1278 -- 提交一个物品 1336 -- 提交一个物品
1279 - [5] = function (_, itemId, count) 1337 + [5] = function (itemId, count)
1280 if self:cost({[itemId] = count}, {log = {desc = "chooseEvent", key1 = tag, int1 = chooseData.id}}) then 1338 if self:cost({[itemId] = count}, {log = {desc = "chooseEvent", key1 = tag, int1 = chooseData.id}}) then
1281 self:backCost({[itemId] = count}) 1339 self:backCost({[itemId] = count})
1282 return true 1340 return true
1283 end 1341 end
1284 end, 1342 end,
1285 -- sp 到达指定值 1343 -- sp 到达指定值
1286 - [6] = function(_, value) 1344 + [6] = function(value)
1287 if self.battle.player.sp >= value then 1345 if self.battle.player.sp >= value then
1288 self.battle.player:changeSp(-value) 1346 self.battle.player:changeSp(-value)
1289 return true 1347 return true
1290 end 1348 end
1291 end, 1349 end,
1292 --7=拥有指定buff指定层数 1350 --7=拥有指定buff指定层数
1293 - [7] = function(_, buffId, layer) 1351 + [7] = function(buffId, layer)
1294 local buff = self.battle.player:getBuffById(buffId) 1352 local buff = self.battle.player:getBuffById(buffId)
1295 if buff and buff:getLayer() >= layer then 1353 if buff and buff:getLayer() >= layer then
1296 return true 1354 return true
1297 end 1355 end
1298 end, 1356 end,
1299 --8=拥有x神器 1357 --8=拥有x神器
1300 - [8] = function(_, artifactId) 1358 + [8] = function(artifactId)
1301 return self:isHaveArtifact(artifactId) 1359 return self:isHaveArtifact(artifactId)
1302 end, 1360 end,
1303 -- 9 = 生命值大于x% 1361 -- 9 = 生命值大于x%
1304 - [9] = function (_, value) 1362 + [9] = function (value)
1305 local cost = value / 100 * self.battle.player.hpMax 1363 local cost = value / 100 * self.battle.player.hpMax
1306 if self.battle.player.hp > cost then 1364 if self.battle.player.hp > cost then
1307 self.battle.player:hurt(cost, nil, {hurtType = 6, buffId = -1}) 1365 self.battle.player:hurt(cost, nil, {hurtType = 6, buffId = -1})
@@ -1309,16 +1367,27 @@ local function chooseCommon(self, room, block, chooseData, choose, tag) @@ -1309,16 +1367,27 @@ local function chooseCommon(self, room, block, chooseData, choose, tag)
1309 end 1367 end
1310 end, 1368 end,
1311 -- 10 = 未获得x神器 1369 -- 10 = 未获得x神器
1312 - [10] = function(_, artifactId) 1370 + [10] = function(artifactId)
1313 return not self:isHaveArtifact(artifactId) 1371 return not self:isHaveArtifact(artifactId)
1314 end, 1372 end,
1315 -- 11 = 地图上没有指定id 的怪 1373 -- 11 = 地图上没有指定id 的怪
1316 - [11] = function(_, monsterId)  
1317 - for _, room in pairs(self:getCurMap().rooms) do  
1318 - for _, block in pairs(room.blocks) do  
1319 - if block:isMonster() then 1374 + [11] = function(monsterId, size)
  1375 + if not size or size == 0 then
  1376 + for _, room in pairs(self:getCurMap().rooms) do
  1377 + for _, block in pairs(room.blocks) do
  1378 + if block:isMonster() then
  1379 + if not monsterId then return false end
  1380 + if block.event.id == monsterId then
  1381 + return false
  1382 + end
  1383 + end
  1384 + end
  1385 + end
  1386 + else
  1387 + for _, cblock in ipairs(self:getCurMap():getBlocksBySize(room.roomId, block.blockId, size)) do
  1388 + if cblock:isMonster() then
1320 if not monsterId then return false end 1389 if not monsterId then return false end
1321 - if block.event.id == monsterId then 1390 + if cblock.event.id == monsterId then
1322 return false 1391 return false
1323 end 1392 end
1324 end 1393 end
@@ -1327,12 +1396,23 @@ local function chooseCommon(self, room, block, chooseData, choose, tag) @@ -1327,12 +1396,23 @@ local function chooseCommon(self, room, block, chooseData, choose, tag)
1327 return true 1396 return true
1328 end, 1397 end,
1329 -- 12 = 地图上没有指定id 的建筑 1398 -- 12 = 地图上没有指定id 的建筑
1330 - [12] = function(_, buildId)  
1331 - for _, room in pairs(self:getCurMap().rooms) do  
1332 - for _, block in pairs(room.blocks) do  
1333 - if block:isBuild() then 1399 + [12] = function(buildId, size)
  1400 + if not size or size == 0 then
  1401 + for _, room in pairs(self:getCurMap().rooms) do
  1402 + for _, block in pairs(room.blocks) do
  1403 + if block:isBuild() then
  1404 + if not buildId then return false end
  1405 + if block.event.id == buildId then
  1406 + return false
  1407 + end
  1408 + end
  1409 + end
  1410 + end
  1411 + else
  1412 + for _, cblock in ipairs(self:getCurMap():getBlocksBySize(room.roomId, block.blockId, size)) do
  1413 + if cblock:isBuild() then
1334 if not buildId then return false end 1414 if not buildId then return false end
1335 - if block.event.id == buildId then 1415 + if cblock.event.id == buildId then
1336 return false 1416 return false
1337 end 1417 end
1338 end 1418 end
@@ -1341,12 +1421,23 @@ local function chooseCommon(self, room, block, chooseData, choose, tag) @@ -1341,12 +1421,23 @@ local function chooseCommon(self, room, block, chooseData, choose, tag)
1341 return true 1421 return true
1342 end, 1422 end,
1343 -- 13 = 地图上没有指定的 选择点 1423 -- 13 = 地图上没有指定的 选择点
1344 - [13] = function(_, chooseId)  
1345 - for _, room in pairs(self:getCurMap().rooms) do  
1346 - for _, block in pairs(room.blocks) do  
1347 - if block:isChoose() then 1424 + [13] = function(chooseId, size)
  1425 + if not size or size == 0 then
  1426 + for _, room in pairs(self:getCurMap().rooms) do
  1427 + for _, block in pairs(room.blocks) do
  1428 + if block:isChoose() then
  1429 + if not chooseId then return false end
  1430 + if block.event.id == chooseId then
  1431 + return false
  1432 + end
  1433 + end
  1434 + end
  1435 + end
  1436 + else
  1437 + for _, cblock in ipairs(self:getCurMap():getBlocksBySize(room.roomId, block.blockId, size)) do
  1438 + if cblock:isChoose() then
1348 if not chooseId then return false end 1439 if not chooseId then return false end
1349 - if block.event.id == chooseId then 1440 + if cblock.event.id == chooseId then
1350 return false 1441 return false
1351 end 1442 end
1352 end 1443 end
@@ -1355,138 +1446,175 @@ local function chooseCommon(self, room, block, chooseData, choose, tag) @@ -1355,138 +1446,175 @@ local function chooseCommon(self, room, block, chooseData, choose, tag)
1355 return true 1446 return true
1356 end, 1447 end,
1357 } 1448 }
1358 - for _, cond in ipairs(conds) do 1449 +
  1450 + local status, count = true, 0
  1451 + for _, cond in ipairs(condStr:toTableArray(true)) do
1359 assert(not cond[1] or checkCond[cond[1]], "error cond, event_" .. (tag or "choose") .. "Csv id :" .. block.event.id) 1452 assert(not cond[1] or checkCond[cond[1]], "error cond, event_" .. (tag or "choose") .. "Csv id :" .. block.event.id)
1360 - if cond[1] and not checkCond[cond[1]](table.unpack(cond)) then return end 1453 + if not checkCond[cond[1]](select(2, table.unpack(cond))) then
  1454 + status = false
  1455 + else
  1456 + count = count + 1
  1457 + end
1361 end 1458 end
1362 -  
1363 - local clearBlock = chooseData.keep ~= 1  
1364 - local effects = chooseData["button".. choose .."effect"]:toTableArray(true)  
1365 - for _, effect in ipairs(effects) do  
1366 - local doEffect = {  
1367 - [1] = function() -- 获得某道具N个  
1368 - local count = effect[3] or 1  
1369 - local reward = {}  
1370 - for i = 1, count do  
1371 - local dropData = csvdb["event_dropCsv"][effect[2]]  
1372 - if dropData then  
1373 - local item = dropData["range"]:randWeight(true)  
1374 - reward[item[1]] = (reward[item[1]] or 0) + item[2]  
1375 - else  
1376 - skynet.error(string.format("[ERROR]: event_dropCsv no id %s in %s id: %s", effect[2], tag, chooseData.id))  
1377 - end  
1378 - end  
1379 - self:award(reward, {log = {desc = "chooseEvent", key1 = tag, int1 = chooseData.id}}, {roomId = room.roomId, blockId = block.blockId})  
1380 - end,  
1381 - [2] = function() --获得冒险buff  
1382 - local layer = effect[3] or 1  
1383 - for i = 1, layer do  
1384 - self.battle.player:addBuff(effect[2])  
1385 - end  
1386 - end,  
1387 - [3] = function() --发现怪物  
1388 - self:getCurMap():addNewMonsterRand(effect[2], {room, block})  
1389 - self:pushBackEvent(AdvBackEventType.Monster, {id = effect[2]})  
1390 - clearBlock = false  
1391 - end,  
1392 - [4] = function() --无事发生  
1393 - end,  
1394 - [5] = function() --5=属性枚举=数值;直接增加玩家属性  
1395 - local attr  
1396 - if effect[3] == 0 then  
1397 - attr = "sp" 1459 + return status, count
  1460 +end
  1461 +
  1462 +local function doChooseEffect(self, effectStr, room, block, tag, chooseData)
  1463 + chooseData = chooseData or {}
  1464 + local clearBlock = true
  1465 + local doEffect = {
  1466 + [1] = function(dropId, count) -- 获得某道具N个
  1467 + count = count or 1
  1468 + local reward = {}
  1469 + for i = 1, count do
  1470 + local dropData = csvdb["event_dropCsv"][dropId]
  1471 + if dropData then
  1472 + local item = dropData["range"]:randWeight(true)
  1473 + reward[item[1]] = (reward[item[1]] or 0) + item[2]
1398 else 1474 else
1399 - attr = AttsEnumEx[effect[3]]  
1400 - if not AdvAttsEnum[attr] then return end 1475 + skynet.error(string.format("[ERROR]: event_dropCsv no id %s in %s id: %s", dropId, tag, chooseData.id))
1401 end 1476 end
1402 - self.battle.player:addBaseAttr(attr, effect[4], effect[2])  
1403 - end,  
1404 - [6] = function() -- 商店  
1405 - block:updateEvent({  
1406 - etype = AdvEventType.Trader,  
1407 - id = effect[2]  
1408 - })  
1409 - self:pushBackEvent(AdvBackEventType.Trader, {id = effect[2]})  
1410 - clearBlock = false  
1411 - end,  
1412 - [7] = function() -- 建筑  
1413 - block:updateEvent({  
1414 - etype = AdvEventType.Build,  
1415 - id = effect[2]  
1416 - })  
1417 - clearBlock = false  
1418 - end,  
1419 - [8] = function() -- 选择  
1420 - block:updateEvent({  
1421 - etype = AdvEventType.Choose,  
1422 - id = effect[2]  
1423 - })  
1424 - clearBlock = false  
1425 - end,  
1426 - [9] = function() -- click  
1427 - block:updateEvent({  
1428 - etype = AdvEventType.Click,  
1429 - id = effect[2]  
1430 - })  
1431 - clearBlock = false  
1432 - end,  
1433 - [10] = function() -- 陷阱  
1434 - block:updateEvent({  
1435 - etype = AdvEventType.Trap,  
1436 - id = effect[2]  
1437 - })  
1438 - clearBlock = false  
1439 - end,  
1440 - [11] = function() -- 获得神器  
1441 - self:waitChooseArtifact() --等待获取神器  
1442 - end,  
1443 - [12] = function()  
1444 - -- buffId  
1445 - local targers = self.battle.player:getTeam(2, nil, nil, true)  
1446 - for _, target in pairs(targers) do  
1447 - target:addBuff(effect[2]) 1477 + end
  1478 + self:award(reward, {log = {desc = "chooseEvent", key1 = tag, int1 = chooseData.id}}, {roomId = room.roomId, blockId = block.blockId})
  1479 + end,
  1480 + [2] = function(buffId, layer) --获得冒险buff
  1481 + self.battle.player:addBuff(buffId, nil, layer or 1)
  1482 + end,
  1483 + [3] = function(id) --发现怪物
  1484 + self:getCurMap():addNewMonsterRand(id, {room, block})
  1485 + self:pushBackEvent(AdvBackEventType.Monster, {id = id})
  1486 + clearBlock = false
  1487 + end,
  1488 + [4] = function() --无事发生
  1489 + end,
  1490 + [5] = function(addType, attrType, value) --5=属性枚举=数值;直接增加玩家属性
  1491 + local attr
  1492 + if attrType == 0 then
  1493 + attr = "sp"
  1494 + else
  1495 + attr = AttsEnumEx[attrType]
  1496 + if not AdvAttsEnum[attr] then return end
  1497 + end
  1498 + self.battle.player:addBaseAttr(attr, value, addType)
  1499 + end,
  1500 + [6] = function(id) -- 商店
  1501 + block:updateEvent({
  1502 + etype = AdvEventType.Trader,
  1503 + id = id
  1504 + })
  1505 + self:pushBackEvent(AdvBackEventType.Trader, {id = id})
  1506 + clearBlock = false
  1507 + end,
  1508 + [7] = function(id) -- 建筑
  1509 + block:updateEvent({
  1510 + etype = AdvEventType.Build,
  1511 + id = id
  1512 + })
  1513 + clearBlock = false
  1514 + end,
  1515 + [8] = function(id) -- 选择
  1516 + block:updateEvent({
  1517 + etype = AdvEventType.Choose,
  1518 + id = id
  1519 + })
  1520 + clearBlock = false
  1521 + end,
  1522 + [9] = function(id) -- click
  1523 + block:updateEvent({
  1524 + etype = AdvEventType.Click,
  1525 + id = id
  1526 + })
  1527 + clearBlock = false
  1528 + end,
  1529 + [10] = function(id) -- 陷阱
  1530 + block:updateEvent({
  1531 + etype = AdvEventType.Trap,
  1532 + id = id
  1533 + })
  1534 + clearBlock = false
  1535 + end,
  1536 + [11] = function() -- 获得神器
  1537 + self:waitChooseArtifact() --等待获取神器
  1538 + end,
  1539 + [12] = function(id)
  1540 + -- buffId
  1541 + local targers = self.battle.player:getTeam(2, nil, nil, true)
  1542 + for _, target in pairs(targers) do
  1543 + target:addBuff(id)
  1544 + end
  1545 + end,
  1546 + [13] = function() -- 显示地图
  1547 + self:getCurMap():showMap()
  1548 + self:backMapShow()
  1549 + end,
  1550 + [14] = function(eventType, eventId, count, stage) -- 指定地块召唤 指定类型的id
  1551 + local change = self:getCurMap():layEventToStage(eventType, eventId, count, stage)
  1552 + for _, one in ipairs(change) do
  1553 + if one[1].roomId == room.roomId and one[2].blockId == block.blockId then
  1554 + clearBlock = false
  1555 + else
  1556 + self:backBlockChange(one[1].roomId, one[2].blockId)
1448 end 1557 end
1449 - end,  
1450 - [13] = function() -- 显示地图  
1451 - self:getCurMap():showMap()  
1452 - self:backMapShow()  
1453 - end,  
1454 - [14] = function() -- 指定地块召唤 指定类型的id  
1455 - local change = self:getCurMap():layEventToStage(effect[2], effect[3], effect[4], effect[5])  
1456 - for _, one in ipairs(change) do  
1457 - if one[1].roomId == room.roomId and one[2].blockId == block.blockId then  
1458 - clearBlock = false  
1459 - else  
1460 - self:backBlockChange(one[1].roomId, one[2].blockId)  
1461 - end 1558 + end
  1559 + end,
  1560 + [15] = function(eventType, eventId, count) -- 移除指定事件
  1561 + local change = self:getCurMap():clearEventById(eventType, eventId, count)
  1562 + for _, one in ipairs(change) do
  1563 + if one[1].roomId == room.roomId and one[2].blockId == block.blockId then
  1564 + clearBlock = false
  1565 + else
  1566 + self:backBlockChange(one[1].roomId, one[2].blockId)
1462 end 1567 end
1463 - end,  
1464 - [15] = function() -- 移除指定事件  
1465 - local change = self:getCurMap():clearEventById(effect[2], effect[3], effect[4])  
1466 - for _, one in ipairs(change) do  
1467 - if one[1].roomId == room.roomId and one[2].blockId == block.blockId then  
1468 - clearBlock = false  
1469 - else  
1470 - self:backBlockChange(one[1].roomId, one[2].blockId)  
1471 - end 1568 + end
  1569 + end,
  1570 + [16] = function(eventTypeF, eventIdF, eventTypeT, eventIdT, count) -- 指定事件转移
  1571 + local change = self:getCurMap():eventChangeToOther(eventTypeF, eventIdF, eventTypeT, eventIdT, count)
  1572 + for _, one in ipairs(change) do
  1573 + if one[1].roomId == room.roomId and one[2].blockId == block.blockId then
  1574 + clearBlock = false
  1575 + else
  1576 + self:backBlockChange(one[1].roomId, one[2].blockId)
1472 end 1577 end
1473 - end,  
1474 - [16] = function() -- 指定事件转移  
1475 - local change = self:getCurMap():eventChangeToOther(effect[2], effect[3], effect[4], effect[5], effect[6])  
1476 - for _, one in ipairs(change) do  
1477 - if one[1].roomId == room.roomId and one[2].blockId == block.blockId then  
1478 - clearBlock = false  
1479 - else  
1480 - self:backBlockChange(one[1].roomId, one[2].blockId)  
1481 - end 1578 + end
  1579 + end,
  1580 + [17] = function(eventId)
  1581 + local diceCsv = csvdb["event_choose_diceCsv"][eventId]
  1582 + if not diceCsv then return end
  1583 + local weight = math.randomInt(1, 12)
  1584 + local sum = 0
  1585 + local needEffect = nil
  1586 + local pool = {}
  1587 + for _, v in ipairs(diceCsv) do
  1588 + local status, okCount = checkChooseCondFunc(self, v.cond, room, block, tag .. " dice", chooseData)
  1589 + pool[#pool + 1] = v.weight + okCount * v.weightUp
  1590 + sum = sum + pool[#pool]
  1591 + if sum >= weight and not needEffect then
  1592 + -- 达成效果
  1593 + needEffect = v.effect
1482 end 1594 end
1483 - end,  
1484 - } 1595 + end
  1596 + if needEffect then
  1597 + self:pushBackEvent(AdvBackEventType.ChooseDice, {id = eventId, pool = pool, result = weight})
  1598 + clearBlock = doChooseEffect(self, needEffect, room, block, tag .. " dice", chooseData)
  1599 + end
  1600 + end,
  1601 + }
  1602 +
  1603 + for _, effect in ipairs(effectStr:toTableArray(true)) do
1485 assert(doEffect[effect[1]], "error effect, event_" .. (tag or "choose") .. "Csv id :" .. (block.event and block.event.id or 0) .. "effect " .. effect[1]) 1604 assert(doEffect[effect[1]], "error effect, event_" .. (tag or "choose") .. "Csv id :" .. (block.event and block.event.id or 0) .. "effect " .. effect[1])
1486 - doEffect[effect[1]]() 1605 + doEffect[effect[1]](select(2, table.unpack(effect)))
1487 end 1606 end
1488 - self:scoreChange(AdvScoreType.Event, chooseData.advScore) --增加加分 1607 + return clearBlock
  1608 +end
1489 1609
  1610 +
  1611 +local function chooseCommon(self, room, block, chooseData, choose, tag)
  1612 + if not choose then return end
  1613 + if not chooseData or not chooseData["button".. choose .."cond"] then return end
  1614 + if not checkChooseCondFunc(self, chooseData["button".. choose .."cond"], room, block, tag, chooseData) then return end
  1615 + local clearBlock = chooseData.keep ~= 1
  1616 + clearBlock = clearBlock and doChooseEffect(self, chooseData["button".. choose .."effect"], room, block, tag, chooseData)
  1617 + self:scoreChange(AdvScoreType.Event, chooseData.advScore) --增加加分
1490 return true, clearBlock 1618 return true, clearBlock
1491 end 1619 end
1492 1620
1 -Subproject commit b86293f02222b1fbd499e57de9ead6cbd6e0d736 1 +Subproject commit 5c618b16315e74aaa111b3e84dbc4da3f7b3d699
src/models/Activity.lua
@@ -33,6 +33,12 @@ Activity.ActivityType = { @@ -33,6 +33,12 @@ Activity.ActivityType = {
33 33
34 CommonSignIn = 28, --通用签到 34 CommonSignIn = 28, --通用签到
35 FriendEnergy = 30, -- 好友互赠能量活动 35 FriendEnergy = 30, -- 好友互赠能量活动
  36 + AdvLevel = 33, -- 拾荒关卡
  37 + BattleCommand = 34, -- 战令活动
  38 + NewSign = 36, -- 活动签到,单独的签到界面
  39 + HeroBackFree = 37, -- 无损耗归还
  40 +
  41 + BattleCommandTask = 38, -- 战令任务活动
36 } 42 }
37 43
38 local function checkActivityType(activityType) 44 local function checkActivityType(activityType)
@@ -79,6 +85,11 @@ Activity.schema = { @@ -79,6 +85,11 @@ Activity.schema = {
79 85
80 act28 = {"table", {}}, -- 每日活跃签到 {0=day, 1=1,2=1,3=1} 86 act28 = {"table", {}}, -- 每日活跃签到 {0=day, 1=1,2=1,3=1}
81 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 +
  89 + act33 = {"table", {}}, -- 拾荒关卡活动 {id={max=最大积分, pass=1}, r=""}
  90 +
  91 + act34 = {"table", {}}, -- 战令记录{unlock = 1, freeR = "", payR = "", lvl = 10, sum = 100}
  92 + act36 = {"table", {}}, -- 每日活跃签到 {0=day, 1=1,2=1,3=1}
82 } 93 }
83 94
84 function Activity:data() 95 function Activity:data()
@@ -102,6 +113,11 @@ function Activity:data() @@ -102,6 +113,11 @@ function Activity:data()
102 113
103 act28 = self:getProperty("act28"), 114 act28 = self:getProperty("act28"),
104 act30 = self:getProperty("act30"), 115 act30 = self:getProperty("act30"),
  116 +
  117 + act33 = self:getProperty("act33"),
  118 +
  119 + act34 = self:getProperty("act34"),
  120 + act36 = self:getProperty("act36"),
105 } 121 }
106 end 122 end
107 123
@@ -457,6 +473,7 @@ activityFunc[Activity.ActivityType.CalendaTask] = { @@ -457,6 +473,7 @@ activityFunc[Activity.ActivityType.CalendaTask] = {
457 ["init"] = function(self, actType, isCrossDay, notify) 473 ["init"] = function(self, actType, isCrossDay, notify)
458 local calTask = self.owner:getProperty("calTask") 474 local calTask = self.owner:getProperty("calTask")
459 calTask = {} 475 calTask = {}
  476 + self.owner:updateProperty({field="calTask", value=calTask})
460 local role = self.owner 477 local role = self.owner
461 local buildL = role.dinerData:getProperty("buildL") 478 local buildL = role.dinerData:getProperty("buildL")
462 local curLevel = buildL:getv(1, 1) 479 local curLevel = buildL:getv(1, 1)
@@ -480,11 +497,113 @@ activityFunc[Activity.ActivityType.CalendaTask] = { @@ -480,11 +497,113 @@ activityFunc[Activity.ActivityType.CalendaTask] = {
480 role:checkTaskEnter("RuneQualityCollect", {}) 497 role:checkTaskEnter("RuneQualityCollect", {})
481 498
482 end, 499 end,
  500 + ["crossDay"] = function(self, actType, notify, actId)
  501 + local actData = self.owner:getProperty("calTask") or {}
  502 + local record = actData["r"] or {}
  503 + local actCfg = csvdb["activity_taskCsv"][actId]
  504 + if not actCfg then return end
  505 + local change = false
  506 + for taskId, cfg in pairs(actCfg) do
  507 + if cfg["resetType"] == 1 then -- 每日重置
  508 + record[taskId] = nil
  509 + actData[taskId] = nil
  510 + change = true
  511 + end
  512 + end
  513 + if change then
  514 + self.owner:updateProperty({field="calTask", value=actData})
  515 + end
  516 + end,
  517 + ["crossWeek"] = function(self, actType, notify, actId)
  518 + local actData = self.owner:getProperty("calTask") or {}
  519 + local record = actData["r"] or {}
  520 + local actCfg = csvdb["activity_taskCsv"][actId]
  521 + if not actCfg then return end
  522 + local change = false
  523 + for taskId, cfg in pairs(actCfg) do
  524 + if cfg["resetType"] == 2 then -- 每周重置
  525 + record[taskId] = nil
  526 + actData[taskId] = nil
  527 + change = true
  528 + end
  529 + end
  530 + if change then
  531 + self.owner:updateProperty({field="calTask", value=actData})
  532 + end
  533 + end,
483 ["close"] = function(self, actType, notify) 534 ["close"] = function(self, actType, notify)
484 self.owner:updateProperty({field="calTask", value={}}) 535 self.owner:updateProperty({field="calTask", value={}})
485 end, 536 end,
486 } 537 }
487 538
  539 +-- 活动任务 仅供春节活动使用 防冲突
  540 +activityFunc[Activity.ActivityType.BattleCommandTask] = {
  541 + ["init"] = function(self, actType, isCrossDay, notify)
  542 + local bcTask = self.owner:getProperty("bcTask")
  543 + bcTask = {}
  544 + self.owner:updateProperty({field="bcTask", value=bcTask})
  545 + local role = self.owner
  546 + local buildL = role.dinerData:getProperty("buildL")
  547 + local curLevel = buildL:getv(1, 1)
  548 + role:checkTaskEnter("DinerLevelUp", {level = curLevel})
  549 +
  550 + role:checkTaskEnter("HeroLvlCollect", {})
  551 + role:checkTaskEnter("HeroQualityCollect", {})
  552 +
  553 + local curPopular = role.dinerData:getProperty("popular")
  554 + role:checkTaskEnter("DinerPopular", {count = curPopular})
  555 +
  556 + local rLevel = role:getProperty("level")
  557 + role:checkTaskEnter("RoleLevelUp", {level = rLevel})
  558 +
  559 + local towerInfo = role:getProperty("towerInfo")
  560 + role:checkTaskEnter("TowerPass", {level = towerInfo.l})
  561 + --"PvpWin"
  562 + --role:checkTaskEnter("HangPass", {id = 0})
  563 + role:checkCalendaTask(true, 15, 3)
  564 + role:checkTaskEnter("HeroStarCollect", {})
  565 + role:checkTaskEnter("RuneQualityCollect", {})
  566 +
  567 + end,
  568 + ["crossDay"] = function(self, actType, notify, actId)
  569 + local actData = self.owner:getProperty("bcTask") or {}
  570 + local record = actData["r"] or {}
  571 + local actCfg = csvdb["activity_taskCsv"][actId]
  572 + if not actCfg then return end
  573 + local change = false
  574 + for taskId, cfg in pairs(actCfg) do
  575 + if cfg["resetType"] == 1 then -- 每日充值
  576 + record[taskId] = nil
  577 + actData[taskId] = nil
  578 + change = true
  579 + end
  580 + end
  581 + if change then
  582 + self.owner:updateProperty({field="bcTask", value=actData})
  583 + end
  584 + end,
  585 + ["crossWeek"] = function(self, actType, notify, actId)
  586 + local actData = self.owner:getProperty("bcTask") or {}
  587 + local record = actData["r"] or {}
  588 + local actCfg = csvdb["activity_taskCsv"][actId]
  589 + if not actCfg then return end
  590 + local change = false
  591 + for taskId, cfg in pairs(actCfg) do
  592 + if cfg["resetType"] == 2 then -- 每周重置
  593 + record[taskId] = nil
  594 + actData[taskId] = nil
  595 + change = true
  596 + end
  597 + end
  598 + if change then
  599 + self.owner:updateProperty({field="bcTask", value=actData})
  600 + end
  601 + end,
  602 + ["close"] = function(self, actType, notify)
  603 + self.owner:updateProperty({field="bcTask", value={}})
  604 + end,
  605 +}
  606 +
488 -- 兑换 607 -- 兑换
489 activityFunc[Activity.ActivityType.Exchange] = { 608 activityFunc[Activity.ActivityType.Exchange] = {
490 ["init"] = function(self, actType, isCrossDay, notify, actId) 609 ["init"] = function(self, actType, isCrossDay, notify, actId)
@@ -619,6 +738,18 @@ function Activity:refreshDailyData(notify) @@ -619,6 +738,18 @@ function Activity:refreshDailyData(notify)
619 end 738 end
620 end 739 end
621 740
  741 +function Activity:refreshWeekData(notify)
  742 + for actId, status in pairs(self._isOpen) do
  743 + local actData = csvdb["activity_ctrlCsv"][actId]
  744 + if status and actData then
  745 + local actType = actData.showType
  746 + if activityFunc[actType] and activityFunc[actType]['crossWeek'] then
  747 + activityFunc[actType]["crossWeek"](self, actType, notify, actId)
  748 + end
  749 + end
  750 + end
  751 +end
  752 +
622 function Activity:checkActivity(notNotify, activityType, ...) 753 function Activity:checkActivity(notNotify, activityType, ...)
623 if not activityType then return end 754 if not activityType then return end
624 if not self:isOpen(activityType) then return end 755 if not self:isOpen(activityType) then return end
@@ -888,7 +1019,7 @@ activityFunc[Activity.ActivityType.CommonSignIn] = { @@ -888,7 +1019,7 @@ activityFunc[Activity.ActivityType.CommonSignIn] = {
888 local actData = self:getActData(actType) or {} 1019 local actData = self:getActData(actType) or {}
889 local actCfg = csvdb["activity_ctrlCsv"][actId] 1020 local actCfg = csvdb["activity_ctrlCsv"][actId]
890 if not actCfg then return end 1021 if not actCfg then return end
891 - local conArr = actCfg.condition2:toArray("true", "=") 1022 + local conArr = actCfg.condition2:toArray(true, "=")
892 -- 0 登录即可, 1 达到指定活跃度 1023 -- 0 登录即可, 1 达到指定活跃度
893 if conArr[1] ~= 1 then 1024 if conArr[1] ~= 1 then
894 return 1025 return
@@ -901,4 +1032,149 @@ activityFunc[Activity.ActivityType.CommonSignIn] = { @@ -901,4 +1032,149 @@ activityFunc[Activity.ActivityType.CommonSignIn] = {
901 end, 1032 end,
902 } 1033 }
903 1034
  1035 +activityFunc[Activity.ActivityType.BattleCommand] = {
  1036 + ["init"] = function (self, actType, isCrossDay, notify, actId)
  1037 + local data = {unlock = 0, freeR = "", payR = "", lvl = 0, sum = 0, week = 0}
  1038 + self:updateActData(actType, data, not notify)
  1039 + end,
  1040 + ["check"] = function(self, actType, notify, id, count) -- 检查 itemid, count
  1041 + local isOpen, actId = self:isOpen(actType)
  1042 + local actData = self:getActData(actType) or {}
  1043 + local actCfg = csvdb["activity_ctrlCsv"][actId]
  1044 + if not actCfg then return end
  1045 + if actCfg.condition1 == "" then return end
  1046 + local arr = actCfg.condition2:toArray(true, "=")
  1047 + local itemIdWeek, itemIdNormal, limit = arr[1], arr[2], arr[3]
  1048 + if (itemIdWeek == id or itemIdNormal == id) and count > 0 then
  1049 + if itemIdWeek == id then
  1050 + if (actData["week"] or 0) >= limit then
  1051 + return
  1052 + end
  1053 + local old = actData["week"] or 0
  1054 + actData["week"] = math.min(old + count, limit)
  1055 + count = actData["week"] - old
  1056 + end
  1057 + local total = actData["sum"] + count
  1058 + local curLvl = actData["lvl"] or 0
  1059 + if actCfg.condition == 1 then -- 代表sum需要转换为等级
  1060 + local bpCfg = csvdb["activity_battlepass_rewardCsv"][actId]
  1061 + if not bpCfg then return end
  1062 + for i = 1, #bpCfg do
  1063 + local cfg = bpCfg[i]
  1064 + if cfg["type"] > curLvl then
  1065 + if total < cfg["condition"] then break end
  1066 + total = total - cfg["condition"]
  1067 + curLvl = curLvl + 1
  1068 + end
  1069 + end
  1070 + actData["lvl"] = curLvl
  1071 + actData["sum"] = total
  1072 + end
  1073 +
  1074 + self:updateActData(actType, actData)
  1075 + end
  1076 + end,
  1077 + ["crossWeek"] = function(self, actType, notify, actId)
  1078 + local actData = self:getActData(actType) or {}
  1079 + actData["week"] = 0
  1080 + self:updateActData(actType, actData, true)
  1081 + end,
  1082 +}
  1083 +
  1084 +
  1085 +activityFunc[Activity.ActivityType.NewSign] = {
  1086 + -- ["check"] = function(self, actType, notify) -- 检查
  1087 + -- end,
  1088 + ["init"] = function(self, actType, isCrossDay, notify)
  1089 + if not isCrossDay then
  1090 + activityFunc[Activity.ActivityType.NewSign]["crossDay"](self, actType, notify)
  1091 + end
  1092 + end,
  1093 + -- ["close"] = function(self, actType, notify)
  1094 + -- end,
  1095 + ["crossDay"] = function(self, actType, notify)
  1096 + local curData = self:getActData(actType)
  1097 + curData[0] = (curData[0] or 0) + 1
  1098 + local actData = csvdb["activity_signInCsv"][48] or {}
  1099 + if curData[0] > #actData then return end -- 满了就忽略了
  1100 +
  1101 + -- 没满更新一下
  1102 + self:updateActData(actType, curData, not notify)
  1103 + end,
  1104 +}
  1105 +
  1106 +local function closeActAdvHang(role, chapterId)
  1107 + local advHang = role:getProperty("advHang")
  1108 + local info = advHang[chapterId]
  1109 + if not info then return end
  1110 +
  1111 + local index = info.index or 1
  1112 + local chapterData = csvdb["adv_chapter_campsiteCsv"][chapterId]
  1113 + if not chapterData then return end
  1114 + local campSiteData = chapterData[info.campId or 2]
  1115 + if not campSiteData then return 1 end
  1116 + if campSiteData.idleReward_1 == "" and campSiteData.idleReward_2 == "" then return 2 end --没有奖励 没有挂机
  1117 +
  1118 + local adv_idle_time = globalCsv.adv_idle_time[index]
  1119 + local adv_idle_energy = globalCsv.adv_idle_energy[index]
  1120 + local adv_idle_reward_coef = globalCsv.adv_idle_reward[index]
  1121 + if not adv_idle_time or not adv_idle_energy or not adv_idle_reward_coef then
  1122 + return 2
  1123 + end
  1124 + adv_idle_time = adv_idle_time * 60
  1125 +
  1126 + local reward, isFull, change, heroFaithMap
  1127 + local heroCnt = 0
  1128 + if skynet.timex() >= info.time then
  1129 + -- 增加英雄信赖
  1130 + local exp = info.duration / 60
  1131 + heroFaithMap = {}
  1132 + for _, heroId in pairs(info.format.heros) do
  1133 + local curFaith = role:addHeroFaith(heroId, exp)
  1134 + heroFaithMap[heroId] = curFaith
  1135 + heroCnt = heroCnt + 1
  1136 + end
  1137 +
  1138 + local totalReward = campSiteData.idleReward_1 .. " " .. campSiteData.idleReward_2
  1139 +
  1140 + local idleReward = totalReward:toNumMap()
  1141 + for itemId, count in pairs(idleReward) do
  1142 + idleReward[itemId] = count * adv_idle_reward_coef
  1143 + end
  1144 + reward, change = role:award(idleReward, {log = {desc = "advHang", int1 = chapterId}})
  1145 + end
  1146 +
  1147 + role:changeUpdates({{type = "advHang", field = chapterId, value = nil}})
  1148 +
  1149 + role:mylog("adv_action", {desc = "endHang", int1 = chapterId, short1 = 2})
  1150 +
  1151 + role:checkTaskEnter("AdvHang", {})
  1152 + role:checkTaskEnter("AdvHangHeroCnt", {count = heroCnt})
  1153 +end
  1154 +
  1155 +activityFunc[Activity.ActivityType.AdvLevel] = {
  1156 + -- ["check"] = function(self, actType, notify) -- 检查
  1157 + -- end,
  1158 + ["init"] = function(self, actType, isCrossDay, notify)
  1159 + end,
  1160 + ["close"] = function(self, actType, notify, actid)
  1161 + local actCfg = csvdb["activity_adv_chapterCsv"][actid]
  1162 + if not actCfg then return end
  1163 + for chapterId, _ in ipairs(actCfg) do
  1164 + local advPass = self.owner:getProperty("advPass")
  1165 + advPass[chapterId] = nil
  1166 + self.owner:updateProperty({field="advPass", value=advPass})
  1167 +
  1168 + -- 关闭活动代理拾荒
  1169 + closeActAdvHang(chapterId)
  1170 + end
  1171 + -- 强制关闭活动拾荒关卡
  1172 + local adv = self.owner:getAdvData()
  1173 + if adv:isRunning() and adv:isActivity() then
  1174 + adv:forceOver()
  1175 + end
  1176 +
  1177 + end,
  1178 +}
  1179 +
904 return Activity 1180 return Activity
src/models/Role.lua
@@ -155,6 +155,7 @@ Role.schema = { @@ -155,6 +155,7 @@ Role.schema = {
155 155
156 achiveT = {"table", {}}, -- 成就计数统计 achivement_type {id = status} 156 achiveT = {"table", {}}, -- 成就计数统计 achivement_type {id = status}
157 achiveV = {"table", {}}, -- 成就领奖统计 achivement {id = status} 157 achiveV = {"table", {}}, -- 成就领奖统计 achivement {id = status}
  158 + fuxR = {"number", 0}, -- 复兴成就最大完成数量
158 159
159 rechargeF = {"table", {}}, -- 是否首次充值某一项 -- —{[id] = 1} -- 不存在就是没有充值过 160 rechargeF = {"table", {}}, -- 是否首次充值某一项 -- —{[id] = 1} -- 不存在就是没有充值过
160 dinerS = {"table", {}}, -- 美食币商城 购买记录 {[id] = count} 161 dinerS = {"table", {}}, -- 美食币商城 购买记录 {[id] = count}
@@ -183,6 +184,7 @@ Role.schema = { @@ -183,6 +184,7 @@ Role.schema = {
183 feedback = {"table", {}}, -- 反馈相关信息 {flag = false, count = 0} flag是否评论过,count 提示次数 184 feedback = {"table", {}}, -- 反馈相关信息 {flag = false, count = 0} flag是否评论过,count 提示次数
184 185
185 calTask = {"table", {}}, -- 英雄令活动 日历任务活动 186 calTask = {"table", {}}, -- 英雄令活动 日历任务活动
  187 + bcTask = {"table", {}}, -- 英雄令活动 日历任务活动 临时使用
186 radioTask = {"table", {}}, -- 电台任务 {id = {time=end_ts,heros=heros}} 表crusadeCsv 188 radioTask = {"table", {}}, -- 电台任务 {id = {time=end_ts,heros=heros}} 表crusadeCsv
187 } 189 }
188 190
@@ -410,6 +412,7 @@ function Role:data() @@ -410,6 +412,7 @@ function Role:data()
410 feedback = self:getProperty("feedback"), 412 feedback = self:getProperty("feedback"),
411 ctime = self:getProperty("ctime"), 413 ctime = self:getProperty("ctime"),
412 calTask = self:getProperty("calTask"), 414 calTask = self:getProperty("calTask"),
  415 + bcTask = self:getProperty("bcTask"),
413 radioTask = self:getProperty("radioTask"), 416 radioTask = self:getProperty("radioTask"),
414 } 417 }
415 end 418 end
src/models/RoleLog.lua
@@ -53,6 +53,10 @@ local ItemReason = { @@ -53,6 +53,10 @@ local ItemReason = {
53 worldBossReward = 137, -- 世界boss翻牌奖励 53 worldBossReward = 137, -- 世界boss翻牌奖励
54 commonSign = 138, -- 每日活跃签到 54 commonSign = 138, -- 每日活跃签到
55 actFriendHelp = 139,-- 好友能量互助活动 55 actFriendHelp = 139,-- 好友能量互助活动
  56 + actBattleCommand = 140, -- 活动战令
  57 + actBuyBpLevel = 141, -- 购买活动战令等级
  58 + newSign = 142,-- 新的活动签到
  59 + advLevelStage = 143, -- 拾荒活动阶段奖励
56 60
57 61
58 advHang = 301, -- 拾荒挂机 62 advHang = 301, -- 拾荒挂机
@@ -94,6 +98,7 @@ local ItemReason = { @@ -94,6 +98,7 @@ local ItemReason = {
94 actPaySign = 1008, -- 活动付费签到 98 actPaySign = 1008, -- 活动付费签到
95 calendaTask = 1009, -- 英雄帖 99 calendaTask = 1009, -- 英雄帖
96 actMilecrisis = 1010, -- 物资危机 100 actMilecrisis = 1010, -- 物资危机
  101 + battleCommandTask = 1011, -- 将军令任务
97 102
98 -- 餐厅 103 -- 餐厅
99 greenHourse = 1101, -- 食材获得 104 greenHourse = 1101, -- 食材获得
@@ -879,4 +884,4 @@ function RoleLog.bind(Role) @@ -879,4 +884,4 @@ function RoleLog.bind(Role)
879 884
880 885
881 end 886 end
882 -return RoleLog  
883 \ No newline at end of file 887 \ No newline at end of file
  888 +return RoleLog
src/models/RolePlugin.lua
@@ -135,6 +135,15 @@ function RolePlugin.bind(Role) @@ -135,6 +135,15 @@ function RolePlugin.bind(Role)
135 self:addPotion({id = itemId, count = count, notNotify = pms.notNotify, log = pms.log}) 135 self:addPotion({id = itemId, count = count, notNotify = pms.notNotify, log = pms.log})
136 end, 136 end,
137 } 137 }
  138 +
  139 + if count > 0 then
  140 + local itemCfg = csvdb["itemCsv"][itemId]
  141 + local itemType = 0
  142 + if itemCfg then
  143 + itemType = itemCfg.type
  144 + end
  145 + self:checkTaskEnter("AddItem", {id = itemId, count = count, type = itemType})
  146 + end
138 -- 对数量筛查 147 -- 对数量筛查
139 count = checkItemCount(self, itemId, count) 148 count = checkItemCount(self, itemId, count)
140 if count ~= 0 then 149 if count ~= 0 then
@@ -515,6 +524,8 @@ function RolePlugin.bind(Role) @@ -515,6 +524,8 @@ function RolePlugin.bind(Role)
515 end 524 end
516 525
517 self:notifyUpdateProperty("diamond", self:getAllDiamond()) 526 self:notifyUpdateProperty("diamond", self:getAllDiamond())
  527 +
  528 + self:checkTaskEnter("CostDiamond", {count = count})
518 return true 529 return true
519 end 530 end
520 531
@@ -1687,7 +1698,7 @@ function RolePlugin.bind(Role) @@ -1687,7 +1698,7 @@ function RolePlugin.bind(Role)
1687 for k , v in pairs(csvdb["shop_rechargeCsv"]) do 1698 for k , v in pairs(csvdb["shop_rechargeCsv"]) do
1688 if not v[pidField] then return "no product" end 1699 if not v[pidField] then return "no product" end
1689 if v[pidField] == params.product_id then 1700 if v[pidField] == params.product_id then
1690 - if v.rmb ~= params.money then 1701 + if v.twd * 100 ~= tonumber(params.money) then
1691 return "error money" 1702 return "error money"
1692 end 1703 end
1693 -- 发现需要的id 1704 -- 发现需要的id
@@ -1812,12 +1823,13 @@ function RolePlugin.bind(Role) @@ -1812,12 +1823,13 @@ function RolePlugin.bind(Role)
1812 -- 充值 -- 1823 -- 充值 --
1813 --[[ 1824 --[[
1814 request.order = data.out_trade_no 1825 request.order = data.out_trade_no
1815 - request.amount = data.money / 100 1826 + request.amount = data.money
1816 request.game_money = data.game_money 1827 request.game_money = data.game_money
1817 request.product_id = data.product_id 1828 request.product_id = data.product_id
1818 request.pay_time = data.pay_time 1829 request.pay_time = data.pay_time
1819 request.transactionId = data.order_no 1830 request.transactionId = data.order_no
1820 request.extension_info = data.extension_info 1831 request.extension_info = data.extension_info
  1832 + request.is_mycard = 1
1821 ]] 1833 ]]
1822 function Role:handlePurchase(params) 1834 function Role:handlePurchase(params)
1823 local roleId = self:getProperty("id") 1835 local roleId = self:getProperty("id")
@@ -1833,7 +1845,7 @@ function RolePlugin.bind(Role) @@ -1833,7 +1845,7 @@ function RolePlugin.bind(Role)
1833 end 1845 end
1834 local rechargeId = back 1846 local rechargeId = back
1835 local rechargeData = csvdb["shop_rechargeCsv"][rechargeId] 1847 local rechargeData = csvdb["shop_rechargeCsv"][rechargeId]
1836 - if rechargeData.rmb ~= tonumber(params.amount) then 1848 + if (params.is_mycard and rechargeData.twd * 100 ~= tonumber(params.amount)) or (not params.is_mycard and rechargeData.rmb * 100 ~= tonumber(params.amount)) then
1837 skynet.error(string.format("[recharge] fake order: %s, roleId: %d, order: %s, rmb %s, get %s", 1849 skynet.error(string.format("[recharge] fake order: %s, roleId: %d, order: %s, rmb %s, get %s",
1838 params.transactionId, roleId, partnerOrderStr, rechargeData.rmb, params.amount 1850 params.transactionId, roleId, partnerOrderStr, rechargeData.rmb, params.amount
1839 )) 1851 ))
@@ -1885,7 +1897,7 @@ function RolePlugin.bind(Role) @@ -1885,7 +1897,7 @@ function RolePlugin.bind(Role)
1885 self:gainDiamond({count = diamondCount, isRecharge = true, log = {desc = "recharge", int1 = id}}) 1897 self:gainDiamond({count = diamondCount, isRecharge = true, log = {desc = "recharge", int1 = id}})
1886 elseif rechargeData.shop == 2 then --通行证商店 1898 elseif rechargeData.shop == 2 then --通行证商店
1887 reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}}) 1899 reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}})
1888 - self.storeData:onBuyCard(rechargeData.type, rechargeData.time, rechargeData.id) 1900 + self.storeData:onBuyCard(rechargeData.type, rechargeData.time, rechargeData.id, rechargeData.activity_id)
1889 elseif rechargeData.shop == 3 then -- 礼包商店 1901 elseif rechargeData.shop == 3 then -- 礼包商店
1890 reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}}) 1902 reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}})
1891 else 1903 else
@@ -2125,6 +2137,15 @@ function RolePlugin.bind(Role) @@ -2125,6 +2137,15 @@ function RolePlugin.bind(Role)
2125 return {list = list, rank = rank} 2137 return {list = list, rank = rank}
2126 end 2138 end
2127 2139
  2140 + function Role:addHeroFaith(heroId, exp)
  2141 + local hero = self.heros[heroId]
  2142 + if not hero then
  2143 + return
  2144 + end
  2145 +
  2146 + hero:addHeroFaith(exp)
  2147 + return hero:getProperty("faith")
  2148 + end
2128 2149
2129 end 2150 end
2130 2151
src/models/RoleTask.lua
@@ -15,6 +15,7 @@ local TaskType = { @@ -15,6 +15,7 @@ local TaskType = {
15 HeroLvlCollect = 10, -- 英雄等级收集进度 15 HeroLvlCollect = 10, -- 英雄等级收集进度
16 HeroQualityCollect = 11, -- 英雄品质收集进度 16 HeroQualityCollect = 11, -- 英雄品质收集进度
17 HeroStarCollect = 12, -- 英雄星级收集进度 17 HeroStarCollect = 12, -- 英雄星级收集进度
  18 + DrawHeroNotFriend = 13, -- 非友情招募 -- count
18 19
19 --装备相关 20 --装备相关
20 AddEquip = 101, -- 获得装备 - equipId rarity 21 AddEquip = 101, -- 获得装备 - equipId rarity
@@ -53,7 +54,8 @@ local TaskType = { @@ -53,7 +54,8 @@ local TaskType = {
53 AdvMineLayer = 414, -- 宝藏洞激活 54 AdvMineLayer = 414, -- 宝藏洞激活
54 AdvKillBoss = 415, -- 拾荒击杀boss 55 AdvKillBoss = 415, -- 拾荒击杀boss
55 AdvHangHeroCnt = 416, -- 拾荒人数 56 AdvHangHeroCnt = 416, -- 拾荒人数
56 - AdvPassFirst = 417, -- 冒险首次通关 - id 57 + AdvCostPower = 417, -- 消耗体力
  58 + AdvPassFirst = 418, -- 冒险首次通关 - id
57 59
58 --爬塔相关 60 --爬塔相关
59 TowerPass = 501, -- 爬塔通关 - level 61 TowerPass = 501, -- 爬塔通关 - level
@@ -98,6 +100,10 @@ local TaskType = { @@ -98,6 +100,10 @@ local TaskType = {
98 DailyTask = 904, -- 完成每日活跃任务 100 DailyTask = 904, -- 完成每日活跃任务
99 RadioTaskStart = 905, -- 电台任务开始 101 RadioTaskStart = 905, -- 电台任务开始
100 FinishSpeTask = 906, -- 指定任务完成 102 FinishSpeTask = 906, -- 指定任务完成
  103 + AddItem = 907, -- 获得道具
  104 + Login = 908, -- 登入
  105 + CostDiamond = 909, -- 消耗钻石
  106 + WeekTask = 910, -- 完成每周活跃任务
101 107
102 --功能未实现 todo 108 --功能未实现 todo
103 AdvShop = 1002, -- 冒险商城 109 AdvShop = 1002, -- 冒险商城
@@ -239,6 +245,7 @@ local ActivityListener = { @@ -239,6 +245,7 @@ local ActivityListener = {
239 [TaskType.AdvMineKill] = {{Activity.ActivityType.Crisis, 1}}, 245 [TaskType.AdvMineKill] = {{Activity.ActivityType.Crisis, 1}},
240 [TaskType.AdvMineLayer] = {{Activity.ActivityType.Crisis, 2}}, 246 [TaskType.AdvMineLayer] = {{Activity.ActivityType.Crisis, 2}},
241 [TaskType.DailyTask] = {{Activity.ActivityType.CommonSignIn, f("pre"), f("cur")}}, 247 [TaskType.DailyTask] = {{Activity.ActivityType.CommonSignIn, f("pre"), f("cur")}},
  248 + [TaskType.AddItem] = {{Activity.ActivityType.BattleCommand, f("id"), f("count")}},
242 } 249 }
243 } 250 }
244 251
@@ -278,15 +285,27 @@ local CalendaTaskListener = { @@ -278,15 +285,27 @@ local CalendaTaskListener = {
278 [TaskType.OpenBox]= {{20, 3, f("count"), f("quality")}}, 285 [TaskType.OpenBox]= {{20, 3, f("count"), f("quality")}},
279 [TaskType.RadioTaskStart] = {{21, 1}, {22, 3, f("heroCnt")}}, 286 [TaskType.RadioTaskStart] = {{21, 1}, {22, 3, f("heroCnt")}},
280 [TaskType.BonusQuick] = {{23, 1, f("count")}}, 287 [TaskType.BonusQuick] = {{23, 1, f("count")}},
281 - [TaskType.AdvHangHeroCnt] = {{24, 3, f("HeroCnt")}}, 288 + [TaskType.AdvHangHeroCnt] = {{24, 3, f("count")}},
282 [TaskType.AdvKillBoss] = {{25, 1}}, 289 [TaskType.AdvKillBoss] = {{25, 1}},
283 [TaskType.AdvMineKill] = {{26, 1}}, 290 [TaskType.AdvMineKill] = {{26, 1}},
284 [TaskType.PvpBattle] = {{27, 1}}, 291 [TaskType.PvpBattle] = {{27, 1}},
285 [TaskType.FinishSpeTask] = {{28, 3, f("taskId"), f("actId")}}, 292 [TaskType.FinishSpeTask] = {{28, 3, f("taskId"), f("actId")}},
286 - 293 + [TaskType.Login] = {{29, 1}},
  294 + [TaskType.DailyTask] = {{30, 2, f("cur")}},
  295 + [TaskType.WeekTask] = {{31, 2, f("cur")}},
  296 + [TaskType.MakeFood] = {{32, 1, f("count")}},
  297 + [TaskType.AddItem] = {{33, 3, f("type"), f("count")}},
  298 + [TaskType.CostDiamond] = {{34, 1, f("count")}},
  299 + [TaskType.DrawHeroNotFriend] = {{35, 1, f("count")}},
  300 + [TaskType.AdvCostPower] = {{36, 1, f("count")}},
287 } 301 }
288 } 302 }
289 303
  304 +local BattleCommandTaskListener = {
  305 + func = "checkBattleCommandTask",
  306 + listen = CalendaTaskListener["listen"]
  307 +}
  308 +
290 local TaskListeners = { 309 local TaskListeners = {
291 StoryListener, 310 StoryListener,
292 CommonListener, 311 CommonListener,
@@ -295,6 +314,7 @@ local TaskListeners = { @@ -295,6 +314,7 @@ local TaskListeners = {
295 ActivityListener, 314 ActivityListener,
296 StoreListener, 315 StoreListener,
297 CalendaTaskListener, 316 CalendaTaskListener,
  317 + BattleCommandTaskListener,
298 } 318 }
299 319
300 local RoleTask = {} 320 local RoleTask = {}
@@ -623,15 +643,136 @@ function RoleTask.bind(Role) @@ -623,15 +643,136 @@ function RoleTask.bind(Role)
623 end 643 end
624 644
625 function Role:checkCalendaTask(notNotify, mainType, subType, param1, param2) 645 function Role:checkCalendaTask(notNotify, mainType, subType, param1, param2)
626 - --print("check calenda taskl", mainType, subType, param1, param2) 646 + --print("check calenda task", mainType, subType, param1, param2)
  647 + local actEnum = "CalendaTask"
  648 + local keyName = "calTask"
  649 + if not self.activity then return end
  650 + local open, actId = self.activity:isOpen(actEnum)
  651 + local actData = csvdb["activity_ctrlCsv"][actId]
  652 + if not actData then return end
  653 + if not open then return end
  654 +
  655 + local change = false
  656 + local calTask = self:getProperty(keyName) or {}
  657 + param1 = param1 or 1
  658 +
  659 + local cid = actData.condition
  660 + for k, taskList in pairs(csvdb["activity_taskCsv"]) do
  661 + if k == cid then
  662 + for id, cfg in pairs(taskList) do
  663 + if cfg.type == mainType then
  664 + if subType == 1 then -- 增加数值
  665 + calTask[id] = (calTask[id] or 0) + param1
  666 + elseif subType == 2 then -- 直接赋值
  667 + calTask[id] = param1
  668 + elseif subType == 3 then -- 自定义类型
  669 + if cfg.type == 7 then -- 英雄品质收集进度
  670 + local count = 0
  671 + for _, hero in pairs(self.heros) do
  672 + local unitData = csvdb["unitCsv"][hero:getProperty("type")]
  673 + if unitData then
  674 + if cfg.condition2 <= unitData.rare then
  675 + count = count + 1
  676 + end
  677 + end
  678 + end
  679 + if (calTask[id] or 0) < count then
  680 + calTask[id] = count
  681 + end
  682 + elseif cfg.type == 5 then -- 英雄等级收集进度
  683 + local count = 0
  684 + for _, hero in pairs(self.heros) do
  685 + if cfg.condition2 <= hero:getProperty("level") then
  686 + count = count + 1
  687 + end
  688 + end
  689 + if (calTask[id] or 0) < count then
  690 + calTask[id] = count
  691 + end
  692 + elseif cfg.type == 16 then -- 英雄星级收集进度
  693 + local count = 0
  694 + for _, hero in pairs(self.heros) do
  695 + if cfg.condition2 <= hero:getProperty("wakeL") then
  696 + count = count + 1
  697 + end
  698 + end
  699 + if (calTask[id] or 0) < count then
  700 + calTask[id] = count
  701 + end
  702 + elseif cfg.type == 18 then -- 挂机累计收获id,y个
  703 + for rid, v in pairs(param1) do
  704 + if cfg.condition2 == rid then
  705 + calTask[id] = (calTask[id] or 0) + v
  706 + end
  707 + end
  708 + elseif cfg.type == 19 then -- x名英雄装备y品质以上符文套装
  709 + local count = 0
  710 + for _, hero in pairs(self.heros) do
  711 + local rcount = 0
  712 + for _,uid in pairs(hero:getRunes()) do
  713 + if uid > 0 then
  714 + local runeData = self.runeBag[uid]
  715 + if runeData then
  716 + local csvData = csvdb["runeCsv"][runeData:getProperty("type")][runeData:getProperty("id")]
  717 +
  718 + if csvData and cfg.condition2 <= csvData.rarity then
  719 + rcount = rcount + 1
  720 + end
  721 + end
  722 + end
  723 + end
  724 + if rcount == 6 then
  725 + count = count + 1
  726 + end
  727 + end
  728 + calTask[id] = count
  729 + elseif cfg.type == 20 then -- 开启x品质时钟箱子
  730 + if cfg.condition2 <= (param2 or 0) then
  731 + calTask[id] = (calTask[id] or 0) + param1
  732 + end
  733 + elseif cfg.type == 15 then -- 通关关卡
  734 + if (calTask[id] or 0) == 0 then
  735 + local hangPass = self:getProperty("hangPass")
  736 + local diff = math.floor(cfg.condition2 / 10000)
  737 + if (hangPass[diff] or 0) >= cfg.condition1 then
  738 + calTask[id] = 1
  739 + end
  740 + end
  741 + elseif cfg.type == 22 then -- 电台任务出勤人数
  742 + calTask[id] = (calTask[id] or 0) + (param1 or 0)
  743 + elseif cfg.type == 24 then -- 代理拾荒出勤人数
  744 + calTask[id] = (calTask[id] or 0) + (param1 or 0)
  745 + elseif cfg.type == 28 then -- 完成指定任务
  746 + --print(actId,param2, cfg.condition2, param1)
  747 + if actId == param2 and cfg.condition2 == param1 then
  748 + calTask[id] = (calTask[id] or 0) + 1
  749 + end
  750 + elseif cfg.type == 33 then -- 获得指定类型道具多少个
  751 + if cfg.condition2 == param1 then
  752 + calTask[id] = (calTask[id] or 0) + (param2 or 0)
  753 + end
  754 + end
  755 + end
  756 + end
  757 + end
  758 + end
  759 + end
  760 + self:updateProperty({field = keyName, value = calTask, notNotify = notNotify})
  761 + --dump(calTask)
  762 + end
  763 +
  764 + function Role:checkBattleCommandTask(notNotify, mainType, subType, param1, param2)
  765 + --print("check battle command task", mainType, subType, param1, param2)
  766 + local actEnum = "BattleCommandTask"
  767 + local keyName = "bcTask"
627 if not self.activity then return end 768 if not self.activity then return end
628 - local open, actId = self.activity:isOpen("CalendaTask") 769 + local open, actId = self.activity:isOpen(actEnum)
629 local actData = csvdb["activity_ctrlCsv"][actId] 770 local actData = csvdb["activity_ctrlCsv"][actId]
630 if not actData then return end 771 if not actData then return end
631 if not open then return end 772 if not open then return end
632 773
633 local change = false 774 local change = false
634 - local calTask = self:getProperty("calTask") or {} 775 + local calTask = self:getProperty(keyName) or {}
635 param1 = param1 or 1 776 param1 = param1 or 1
636 777
637 local cid = actData.condition 778 local cid = actData.condition
@@ -721,17 +862,21 @@ function RoleTask.bind(Role) @@ -721,17 +862,21 @@ function RoleTask.bind(Role)
721 elseif cfg.type == 24 then -- 代理拾荒出勤人数 862 elseif cfg.type == 24 then -- 代理拾荒出勤人数
722 calTask[id] = (calTask[id] or 0) + (param1 or 0) 863 calTask[id] = (calTask[id] or 0) + (param1 or 0)
723 elseif cfg.type == 28 then -- 完成指定任务 864 elseif cfg.type == 28 then -- 完成指定任务
724 - print(actId,param2, cfg.condition2, param1) 865 + --print(actId,param2, cfg.condition2, param1)
725 if actId == param2 and cfg.condition2 == param1 then 866 if actId == param2 and cfg.condition2 == param1 then
726 calTask[id] = (calTask[id] or 0) + 1 867 calTask[id] = (calTask[id] or 0) + 1
727 end 868 end
  869 + elseif cfg.type == 33 then -- 获得指定类型道具多少个
  870 + if cfg.condition2 == param1 then
  871 + calTask[id] = (calTask[id] or 0) + (param2 or 0)
  872 + end
728 end 873 end
729 end 874 end
730 end 875 end
731 end 876 end
732 end 877 end
733 end 878 end
734 - self:updateProperty({field = "calTask", value = calTask, notNotify = notNotify}) 879 + self:updateProperty({field = keyName, value = calTask, notNotify = notNotify})
735 --dump(calTask) 880 --dump(calTask)
736 end 881 end
737 882
src/models/RoleTimeReset.lua
@@ -46,6 +46,8 @@ ResetFunc[&quot;CrossWeek&quot;] = function(self, notify, response) @@ -46,6 +46,8 @@ ResetFunc[&quot;CrossWeek&quot;] = function(self, notify, response)
46 46
47 response.wTask = {} 47 response.wTask = {}
48 response.dinerS = {} 48 response.dinerS = {}
  49 +
  50 + self.activity:refreshWeekData(notify)
49 end 51 end
50 52
51 53
src/models/Store.lua
@@ -186,7 +186,7 @@ end @@ -186,7 +186,7 @@ end
186 186
187 187
188 -- 购买通行证 188 -- 购买通行证
189 -function Store:onBuyCard(type, duration, id) 189 +function Store:onBuyCard(type, duration, id, actid)
190 local timeNow = skynet.timex() 190 local timeNow = skynet.timex()
191 if type == CardType.NormalMonthCard then 191 if type == CardType.NormalMonthCard then
192 if self:isMonthCardExpire() then 192 if self:isMonthCardExpire() then
@@ -221,6 +221,18 @@ function Store:onBuyCard(type, duration, id) @@ -221,6 +221,18 @@ function Store:onBuyCard(type, duration, id)
221 info["flag"] = 1 221 info["flag"] = 1
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
  225 + if not self.owner.activity:isOpenById(actid, "ActShopGoods") then
  226 + return
  227 + end
  228 + local actCfg = csvdb["activity_ctrlCsv"][actid]
  229 + if not actCfg then return end
  230 + local actData = self.owner.activity:getActData("BattleCommand") or {}
  231 + actData["unlock"] = 1
  232 + if actCfg.condition ~= 0 then
  233 + actData["lvl"] = (actData["lvl"] or 0) + actCfg.condition
  234 + end
  235 + self.owner.activity:updateActData("BattleCommand", actData)
224 end 236 end
225 end 237 end
226 238
src/services/httpweb.lua
@@ -41,8 +41,10 @@ local port = ... @@ -41,8 +41,10 @@ local port = ...
41 port = tonumber(port) 41 port = tonumber(port)
42 42
43 local key = "zhaolu1234dangge" 43 local key = "zhaolu1234dangge"
44 -local function response(id, ...)  
45 - local ok, err = httpd.write_response(sockethelper.writefunc(id), ...) 44 +local function response(id, code, body)
  45 + local ok, err = httpd.write_response(sockethelper.writefunc(id), code, body, {
  46 + ["Connection"] = "Close",
  47 + })
46 if not ok then 48 if not ok then
47 -- if err == sockethelper.socket_error , that means socket closed. 49 -- if err == sockethelper.socket_error , that means socket closed.
48 skynet.error(string.format("fd = %d, %s", id, err)) 50 skynet.error(string.format("fd = %d, %s", id, err))