Commit cbefef4cd764789602681bb034a4822fbe6946f5

Authored by zhouhaihai
2 parents ebeefd34 d93ec42c

Merge branch 'develop' into cn/develop

* develop: (24 commits)
  天赋系统属性加成改为百分比
  传递 count
  bug
  支付bug
  充值 整理
  奖励关卡 满星奖励
  光环相关buff
  奖励副本 完成
  编队增加战术字段
  编队整理 增加 tactics战术
  光环
  bug
  bug
  多队挂机,天赋道具合成
  修改调用位置
  新的 buff 效果
  删除等级
  天赋技能
  被动触发
  冒险 buff 类型 34 35
  ...
@@ -126,6 +126,7 @@ ItemId = { @@ -126,6 +126,7 @@ ItemId = {
126 HeroFC = {700, 701, 702, 703}, --通用角色碎片 126 HeroFC = {700, 701, 702, 703}, --通用角色碎片
127 AdvKey = 80, -- 冒险钥匙 127 AdvKey = 80, -- 冒险钥匙
128 BoxKey = 60, -- 拆解工具 128 BoxKey = 60, -- 拆解工具
  129 + AdvPower = 4701, -- 拾荒体力
129 } 130 }
130 131
131 TimeReset = { 132 TimeReset = {
src/ProtocolCode.lua
@@ -99,6 +99,7 @@ actionCodes = { @@ -99,6 +99,7 @@ actionCodes = {
99 Hero_unlockPoolRpc = 222, 99 Hero_unlockPoolRpc = 222,
100 Hero_changeCrown = 223, 100 Hero_changeCrown = 223,
101 Hero_drawHeroExtraRewardNtf = 224, 101 Hero_drawHeroExtraRewardNtf = 224,
  102 + Hero_itemComposeRpc = 225,
102 103
103 Hang_startRpc = 251, 104 Hang_startRpc = 251,
104 Hang_checkRpc = 252, 105 Hang_checkRpc = 252,
@@ -217,9 +218,8 @@ actionCodes = { @@ -217,9 +218,8 @@ actionCodes = {
217 Activity_actCalendaTaskRpc = 655, 218 Activity_actCalendaTaskRpc = 655,
218 Activity_actPaySignRpc = 656, 219 Activity_actPaySignRpc = 656,
219 220
220 - Radio_listRpc = 700, -- 获取电台讨伐任务列表  
221 - Radio_startQuestRpc = 701,  
222 - Radio_finishQuestRpc = 702, 221 + Radio_startQuestRpc = 700,
  222 + Radio_finishQuestRpc = 701,
223 } 223 }
224 224
225 rpcResponseBegin = 10000 225 rpcResponseBegin = 10000
@@ -12,6 +12,8 @@ R_RUNE = "role:%d:rune:%d" -- 符文详细信息 @@ -12,6 +12,8 @@ R_RUNE = "role:%d:rune:%d" -- 符文详细信息
12 R_EMAIL = "role:%d:emailIds" --邮件列表 12 R_EMAIL = "role:%d:emailIds" --邮件列表
13 R_EMAIL_ITEM = "email:%d:%d" --邮件 13 R_EMAIL_ITEM = "email:%d:%d" --邮件
14 R_STORE = "role:%d:store" -- 商店 14 R_STORE = "role:%d:store" -- 商店
  15 +R_ORDERS = "role:%d:orders" -- 订单
  16 +R_ORDER = "order:%d:%d"
15 17
16 18
17 -- rank 19 -- rank
src/actions/AdvAction.lua
@@ -247,13 +247,14 @@ function _M.startHangRpc(agent, data) @@ -247,13 +247,14 @@ function _M.startHangRpc(agent, data)
247 info.format.heros[slot] = heroId 247 info.format.heros[slot] = heroId
248 end 248 end
249 info.time = skynet.timex() + adv_idle_time --挂机时间 249 info.time = skynet.timex() + adv_idle_time --挂机时间
  250 + info.duration = adv_idle_time
250 info.campId = campId 251 info.campId = campId
251 info.index = index 252 info.index = index
252 253
253 -- 没有在战斗 用team来挂机了 把team清掉 254 -- 没有在战斗 用team来挂机了 把team清掉
254 - if not role:getAdvData():isRunning() then  
255 - role:updateProperty({field = "advTeam", value = {}})  
256 - end 255 + --if not role:getAdvData():isRunning() then
  256 + -- role:updateProperty({field = "advTeam", value = {}})
  257 + --end
257 role:pushMsg({type = "adv", slot = chapterId, time = adv_idle_time}) 258 role:pushMsg({type = "adv", slot = chapterId, time = adv_idle_time})
258 role:changeUpdates({{type = "advHang", field = chapterId, value = info}}) 259 role:changeUpdates({{type = "advHang", field = chapterId, value = info}})
259 260
@@ -265,6 +266,16 @@ function _M.startHangRpc(agent, data) @@ -265,6 +266,16 @@ function _M.startHangRpc(agent, data)
265 return true 266 return true
266 end 267 end
267 268
  269 +local function addHeroFaith(role, heroId, exp)
  270 + local hero = role.heros[heroId]
  271 + if not hero then
  272 + return
  273 + end
  274 +
  275 + hero:addHeroFaith(exp)
  276 + return hero:getProperty("faith")
  277 +end
  278 +
268 function _M.quickHangRpc(agent, data) 279 function _M.quickHangRpc(agent, data)
269 local role = agent.role 280 local role = agent.role
270 local msg = MsgPack.unpack(data) 281 local msg = MsgPack.unpack(data)
@@ -332,7 +343,7 @@ function _M.endHangRpc(agent, data) @@ -332,7 +343,7 @@ function _M.endHangRpc(agent, data)
332 end 343 end
333 adv_idle_time = adv_idle_time * 60 344 adv_idle_time = adv_idle_time * 60
334 345
335 - local reward, isFull, change 346 + local reward, isFull, change, heroFaithMap
336 if skynet.timex() >= info.time then 347 if skynet.timex() >= info.time then
337 -- 最新需求加成取消 348 -- 最新需求加成取消
338 --[[ 349 --[[
@@ -361,6 +372,14 @@ function _M.endHangRpc(agent, data) @@ -361,6 +372,14 @@ function _M.endHangRpc(agent, data)
361 372
362 if not maxCampsite then return end 373 if not maxCampsite then return end
363 ]] 374 ]]
  375 + -- 增加英雄信赖
  376 + local exp = info.duration / 60
  377 + heroFaithMap = {}
  378 + for _, heroId in pairs(info.format.heros) do
  379 + local curFaith = addHeroFaith(role, heroId, exp)
  380 + heroFaithMap[heroId] = curFaith
  381 + end
  382 +
364 local totalReward = campSiteData.idleReward_1 .. " " .. campSiteData.idleReward_2 383 local totalReward = campSiteData.idleReward_1 .. " " .. campSiteData.idleReward_2
365 384
366 local idleReward = totalReward:toNumMap() 385 local idleReward = totalReward:toNumMap()
@@ -388,7 +407,7 @@ function _M.endHangRpc(agent, data) @@ -388,7 +407,7 @@ function _M.endHangRpc(agent, data)
388 407
389 role:checkTaskEnter("AdvHang", {}) 408 role:checkTaskEnter("AdvHang", {})
390 409
391 - SendPacket(actionCodes.Adv_endHangRpc, MsgPack.pack({reward = reward, change = change, isFull = isFull})) 410 + SendPacket(actionCodes.Adv_endHangRpc, MsgPack.pack({reward = reward, change = change, isFull = isFull, heroFaith = heroFaithMap}))
392 return true 411 return true
393 end 412 end
394 413
@@ -508,25 +527,8 @@ function _M.useItemRpc(agent, data) @@ -508,25 +527,8 @@ function _M.useItemRpc(agent, data)
508 adv:cost({[itemId] = count}, {log = {desc = "useItem", int1 = itemId, int2 = count}}) 527 adv:cost({[itemId] = count}, {log = {desc = "useItem", int1 = itemId, int2 = count}})
509 adv:backUse({[itemId] = count}) 528 adv:backUse({[itemId] = count})
510 end 529 end
511 -  
512 - if itemId == 5020 then  
513 - role:finishGuide(53)  
514 - end  
515 - adv:checkAchievement(adv.AchievType.UseItem, count, itemId)  
516 - adv:mylog({desc = "useItem", int1 = itemId, int2 = count})  
517 -  
518 - role:log("mission_pick_use", {  
519 - mission_threadid = adv.chapterId, -- 大地图ID  
520 - mission_threadname = (csvdb["adv_chapterCsv"][adv.chapterId] or {})["chapter"] or "auto", -- 大地图名称  
521 - mission_id = adv.level, -- 关卡ID  
522 - item_id = itemId, -- 道具ID  
523 - mission_pick_use_num = count, -- 道具使用量  
524 - mission_sequenceid = adv.logid, -- 本次拾荒ID,用于关联一次拾荒产生多条不同类型的日志  
525 - })  
526 -  
527 - for i = 1, count do  
528 - adv:doActive(itemData.effect, target) -- target  
529 - end 530 +
  531 + adv:useItem(itemId, count, target)
530 532
531 adv:afterRound() 533 adv:afterRound()
532 adv:saveDB() 534 adv:saveDB()
src/actions/DinerAction.lua
@@ -609,10 +609,10 @@ function _M.refreshTaskRpc( agent, data ) @@ -609,10 +609,10 @@ function _M.refreshTaskRpc( agent, data )
609 local role = agent.role 609 local role = agent.role
610 local msg = MsgPack.unpack(data) 610 local msg = MsgPack.unpack(data)
611 611
612 - local cost = {[ItemId.Diamond] = 40}  
613 - if not role:checkItemEnough(cost) then  
614 - return 1  
615 - end 612 + --local cost = {[ItemId.Diamond] = 40}
  613 + --if not role:checkItemEnough(cost) then
  614 + -- return 1
  615 + --end
616 616
617 local orders = json.decode(role.dinerData:getProperty("order")) 617 local orders = json.decode(role.dinerData:getProperty("order"))
618 618
src/actions/GmAction.lua
@@ -402,24 +402,23 @@ function _M.advl(role, pms) @@ -402,24 +402,23 @@ function _M.advl(role, pms)
402 return "成功" 402 return "成功"
403 end 403 end
404 404
405 -table.insert(helpDes, {"冒险内等级增加", "advcl", "经验值"})  
406 -function _M.advcl(role, pms)  
407 - local exp = tonum(pms.pm1)  
408 - local advData = role:getAdvData() 405 +-- table.insert(helpDes, {"冒险内等级增加", "advcl", "经验值"})
  406 +-- function _M.advcl(role, pms)
  407 +-- local exp = tonum(pms.pm1)
  408 +-- local advData = role:getAdvData()
409 409
410 - if not advData.chapterId then  
411 - return "先随便开启一关"  
412 - end  
413 - advData.battle.player:addExp(exp)  
414 - advData:saveDB()  
415 - role:mylog("gm_action", {desc = "advcl", int1 = exp, key1 = pms.sender}) 410 +-- if not advData.chapterId then
  411 +-- return "先随便开启一关"
  412 +-- end
  413 +-- advData.battle.player:addExp(exp)
  414 +-- advData:saveDB()
  415 +-- role:mylog("gm_action", {desc = "advcl", int1 = exp, key1 = pms.sender})
416 416
417 - return "成功"  
418 -end 417 +-- return "成功"
  418 +-- end
419 419
420 table.insert(helpDes, {"挂机清除" , "idlec"}) 420 table.insert(helpDes, {"挂机清除" , "idlec"})
421 function _M.idlec(role, pms) 421 function _M.idlec(role, pms)
422 - role:updateProperty({field = "hangTeam", value = {}})  
423 role:updateProperty({field = "hangInfo", value = {}}) 422 role:updateProperty({field = "hangInfo", value = {}})
424 role:updateProperty({field = "hangBag", value = {}}) 423 role:updateProperty({field = "hangBag", value = {}})
425 role:mylog("gm_action", {desc = "idlec", key1 = pms.sender}) 424 role:mylog("gm_action", {desc = "idlec", key1 = pms.sender})
src/actions/HangAction.lua
@@ -315,6 +315,7 @@ function _M.roleFormatRpc(agent , data) @@ -315,6 +315,7 @@ function _M.roleFormatRpc(agent , data)
315 local msg = MsgPack.unpack(data) 315 local msg = MsgPack.unpack(data)
316 local index = msg.index -- 阵容索引 316 local index = msg.index -- 阵容索引
317 local title = msg.title -- 阵容名称 317 local title = msg.title -- 阵容名称
  318 + local tactics = msg.tactics -- 战术
318 local team = {} 319 local team = {}
319 for slot, heroId in pairs(msg.heros) do 320 for slot, heroId in pairs(msg.heros) do
320 if not role.heros[heroId] then 321 if not role.heros[heroId] then
@@ -346,6 +347,9 @@ function _M.roleFormatRpc(agent , data) @@ -346,6 +347,9 @@ function _M.roleFormatRpc(agent , data)
346 team.leader = msg.leader 347 team.leader = msg.leader
347 team.supports = supports 348 team.supports = supports
348 team.title = title 349 team.title = title
  350 + if msg.tactics and globalCsv.tactics_skill_passive_cell[msg.tactics] then
  351 + team.tactics = msg.tactics
  352 + end
349 353
350 role:setTeamFormat(index, team) 354 role:setTeamFormat(index, team)
351 355
@@ -459,36 +463,6 @@ function _M.quickRpc(agent , data) @@ -459,36 +463,6 @@ function _M.quickRpc(agent , data)
459 return true 463 return true
460 end 464 end
461 465
462 -function _M.bonusFormatRpc(agent , data)  
463 - local role = agent.role  
464 - local msg = MsgPack.unpack(data)  
465 - local bTeam = role:getProperty("bTeam")  
466 - for slot, heroId in pairs(msg.heros) do  
467 - if not role.heros[heroId] then  
468 - return  
469 - end  
470 - end  
471 - local supports = {}  
472 - for slot, support in pairs(msg.supports) do  
473 - if slot ~= 1 and slot ~= 2 then return end  
474 - local level = role.dinerData:getProperty("dishTree"):getv(support, 0)  
475 - if level <= 0 then return end  
476 - supports[slot] = support  
477 - end  
478 - if not checkLeader(msg.heros, msg.leader) then return end  
479 -  
480 - table.clear(bTeam)  
481 - bTeam.heros = {}  
482 - for slot, heroId in pairs(msg.heros) do  
483 - bTeam.heros[slot] = heroId  
484 - end  
485 - bTeam.leader = msg.leader  
486 - bTeam.supports = supports  
487 -  
488 - role:updateProperty({field = "bTeam", value = bTeam})  
489 - SendPacket(actionCodes.Hang_bonusFormatRpc, '')  
490 - return true  
491 -end  
492 466
493 function _M.buyBonusCountRpc(agent, data) 467 function _M.buyBonusCountRpc(agent, data)
494 local role = agent.role 468 local role = agent.role
@@ -524,10 +498,53 @@ function _M.buyBonusCountRpc(agent, data) @@ -524,10 +498,53 @@ function _M.buyBonusCountRpc(agent, data)
524 return true 498 return true
525 end 499 end
526 500
  501 +local function bonusWinReward(role, bonusData, bwin, count)
  502 + count = count or 1
  503 + local open, actId = role.activity:isOpen("BonusDouble")
  504 + local actData = csvdb["activity_ctrlCsv"][actId]
  505 + local extraCnt = role.storeData:getBonusExtraFightCount()
  506 +
  507 + local coef = 1
  508 + if open and actData then
  509 + coef = tonumber(actData.condition2)
  510 + end
  511 + local bonusC = role.dailyData:getProperty("bonusC")
  512 + bonusC[bonusData.type] = bonusC[bonusData.type] or {c = 0, b = 0}
  513 + if globalCsv.bonus_daily_count * coef + extraCnt - bonusC[bonusData.type]["c"] < count then return false, 1 end
  514 + bonusC[bonusData.type]["c"] = bonusC[bonusData.type]["c"] + count
  515 + role.dailyData:updateProperty({field = "bonusC", value = bonusC})
  516 +
  517 + local reward, change
  518 + reward = bonusData.reward:toNumMap()
  519 + for itemId, c in pairs(reward) do
  520 + reward[itemId] = c * count
  521 + end
  522 + for i = 1, count do
  523 + local chance = bonusData.chance:randWeight(true)
  524 + if chance[1] ~= 0 then
  525 + reward[chance[1]] = (reward[chance[1]] or 0) + chance[2]
  526 + end
  527 + end
  528 +
  529 + for k, v in pairs(reward) do
  530 + reward[k] = v * (coef > 1 and actData.condition or 1)
  531 + end
  532 +
  533 + if bwin then -- 满星 额外奖励
  534 + for k, v in pairs(bonusData.perfect_reward:toNumMap()) do
  535 + reward[k] = (reward[k] or 0) + v
  536 + end
  537 + end
  538 + reward, change = role:award(reward, {log = {desc = "bonusBattle", int1 = id}})
  539 + role:checkTaskEnter("BonusPass", {id = id, count = count})
  540 + return true, reward, change
  541 +end
  542 +
527 function _M.startBonusBattleRpc(agent, data) 543 function _M.startBonusBattleRpc(agent, data)
528 local role = agent.role 544 local role = agent.role
529 local msg = MsgPack.unpack(data) 545 local msg = MsgPack.unpack(data)
530 local id = msg.id 546 local id = msg.id
  547 + local count = msg.count or 1
531 548
532 local open, actId = role.activity:isOpen("BonusDouble") 549 local open, actId = role.activity:isOpen("BonusDouble")
533 550
@@ -542,9 +559,6 @@ function _M.startBonusBattleRpc(agent, data) @@ -542,9 +559,6 @@ function _M.startBonusBattleRpc(agent, data)
542 if not bonusData then return 3 end 559 if not bonusData then return 3 end
543 if not role:checkHangPass(bonusData.unlock) then return 4 end 560 if not role:checkHangPass(bonusData.unlock) then return 4 end
544 561
545 - local bTeam = role:getTeamFormatByType(TeamSystemType.BonusBattle)  
546 - if not next(bTeam) then return 5 end  
547 -  
548 local bonusC = role.dailyData:getProperty("bonusC") 562 local bonusC = role.dailyData:getProperty("bonusC")
549 bonusC[bonusData.type] = bonusC[bonusData.type] or {c = 0, b = 0} 563 bonusC[bonusData.type] = bonusC[bonusData.type] or {c = 0, b = 0}
550 564
@@ -555,15 +569,24 @@ function _M.startBonusBattleRpc(agent, data) @@ -555,15 +569,24 @@ function _M.startBonusBattleRpc(agent, data)
555 if open and actData then 569 if open and actData then
556 coef = tonumber(actData.condition2) 570 coef = tonumber(actData.condition2)
557 end 571 end
  572 +
  573 + if math.illegalNum(count, 1, globalCsv.bonus_daily_count * coef + extraCnt - bonusC[bonusData.type]["c"]) then return 7 end
558 574
559 - if globalCsv.bonus_daily_count * coef + extraCnt - bonusC[bonusData.type]["c"] <= 0 then return 7 end  
560 - 575 + local bonusStar = role:getProperty("bonusStar")
  576 + if bonusStar[id] and bonusStar[id] >= (1 << #bonusData.sweep_condition:toTableArray(true)) - 1 then
  577 + local status, reward, change = bonusWinReward(role, bonusData, nil, count)
  578 + if not status then return 10 * (reward or 0) end
  579 + SendPacket(actionCodes.Hang_startBonusBattleRpc, MsgPack.pack({reward = reward, change = change}))
  580 + else
  581 + local bTeam = role:getTeamFormatByType(TeamSystemType.BonusBattle)
  582 + if not next(bTeam) then return 5 end
  583 + role.__bonusBattleCache = {
  584 + key = tostring(math.random()),
  585 + id = id,
  586 + }
  587 + SendPacket(actionCodes.Hang_startBonusBattleRpc, MsgPack.pack({key = role.__bonusBattleCache.key}))
  588 + end
561 589
562 - role.__bonusBattleCache = {  
563 - key = tostring(math.random()),  
564 - id = id,  
565 - }  
566 - SendPacket(actionCodes.Hang_startBonusBattleRpc, MsgPack.pack({key = role.__bonusBattleCache.key}))  
567 return true 590 return true
568 end 591 end
569 592
@@ -574,14 +597,7 @@ function _M.endBonusBattleRpc(agent, data) @@ -574,14 +597,7 @@ function _M.endBonusBattleRpc(agent, data)
574 local key = msg.key 597 local key = msg.key
575 local starNum = msg.starNum 598 local starNum = msg.starNum
576 if not role.__bonusBattleCache then return 1 end 599 if not role.__bonusBattleCache then return 1 end
577 - local open, actId = role.activity:isOpen("BonusDouble")  
578 - local actData = csvdb["activity_ctrlCsv"][actId]  
579 - local extraCnt = role.storeData:getBonusExtraFightCount()  
580 -  
581 - local coef = 1  
582 - if open and actData then  
583 - coef = tonumber(actData.condition2)  
584 - end 600 +
585 601
586 if role.__bonusBattleCache.id ~= id or role.__bonusBattleCache.key ~= key then 602 if role.__bonusBattleCache.id ~= id or role.__bonusBattleCache.key ~= key then
587 SendPacket(actionCodes.Hang_endBonusBattleRpc, MsgPack.pack({errorCode = 1})) 603 SendPacket(actionCodes.Hang_endBonusBattleRpc, MsgPack.pack({errorCode = 1}))
@@ -590,24 +606,79 @@ function _M.endBonusBattleRpc(agent, data) @@ -590,24 +606,79 @@ function _M.endBonusBattleRpc(agent, data)
590 local bonusData = csvdb["bonus_battleCsv"][id] 606 local bonusData = csvdb["bonus_battleCsv"][id]
591 607
592 local reward, change 608 local reward, change
  609 +
  610 + local bonusStar = role:getProperty("bonusStar")
  611 + local curStar = 0
593 if starNum and starNum > 0 then 612 if starNum and starNum > 0 then
594 -- 胜利扣除次数 613 -- 胜利扣除次数
595 - local bonusC = role.dailyData:getProperty("bonusC")  
596 - bonusC[bonusData.type] = bonusC[bonusData.type] or {c = 0, b = 0}  
597 - if globalCsv.bonus_daily_count * coef + extraCnt - bonusC[bonusData.type]["c"] <= 0 then return 3 end  
598 - bonusC[bonusData.type]["c"] = bonusC[bonusData.type]["c"] + 1  
599 - role.dailyData:updateProperty({field = "bonusC", value = bonusC})  
600 -  
601 - reward = bonusData.reward:toNumMap()  
602 - local chance = bonusData.chance:randWeight(true)  
603 - if chance[1] ~= 0 then  
604 - reward[chance[1]] = (reward[chance[1]] or 0) + chance[2] 614 +
  615 + local bTeam = role:getTeamFormatByType(TeamSystemType.BonusBattle)
  616 + local herosInfo = role:getTeamHerosInfo(bTeam.heros)
  617 +
  618 + local check = {}
  619 + -- 1 通关
  620 + check[1] = function(_)
  621 + return true
  622 + end
  623 + -- 2 阵亡人数 <= N
  624 + check[2] = function(_, cond)
  625 + return msg.info.dead and msg.info.dead <= cond
605 end 626 end
606 - for k, v in pairs(reward) do  
607 - reward[k] = v * (coef > 1 and actData.condition or 1) 627 + -- 3 全员存活
  628 + check[3] = function(_)
  629 + return msg.info.dead and msg.info.dead == 0
608 end 630 end
609 - reward, change = role:award(reward, {log = {desc = "bonusBattle", int1 = id}})  
610 - role:checkTaskEnter("BonusPass", {id = id}) 631 + -- 4 指定种族 >= N
  632 + check[4] = function(_, cond)
  633 + local count = 0
  634 + for _, one in pairs(herosInfo) do
  635 + local heroData = csv["unitCsv"][one.type]
  636 + if heroData.camp == cond then
  637 + count = count + 1
  638 + end
  639 + end
  640 + return count >= cond
  641 + end
  642 + -- 5 指定职业 >= N
  643 + check[5] = function(_, cond)
  644 + local count = 0
  645 + for _, one in pairs(herosInfo) do
  646 + local heroData = csv["unitCsv"][one.type]
  647 + if heroData.job == cond then
  648 + count = count + 1
  649 + end
  650 + end
  651 + return count >= cond
  652 + end
  653 + -- 6 含有指定角色
  654 + check[6] = function(_, cond)
  655 + for _, one in pairs(herosInfo) do
  656 + if one.type == cond then
  657 + return true
  658 + end
  659 + end
  660 + return false
  661 + end
  662 + -- 7 通关耗时 <= X 秒 msg.info.atime
  663 + check[7] = function(_, cond)
  664 + return msg.info.atime and msg.info.atime <= cond
  665 + end
  666 + curStar = 0
  667 + local sweepConds = bonusData.sweep_condition:toTableArray(true)
  668 + for i, cond in ipairs(sweepConds) do
  669 + if check[cond[1]] and check[cond[1]](table.unpack(cond)) then
  670 + curStar = curStar + (1 << (i - 1))
  671 + end
  672 + end
  673 + local status
  674 + status, reward, change = bonusWinReward(role, bonusData, curStar >= (1 << #sweepConds) - 1)
  675 + if not status then return 10 + (reward or 0) end
  676 + else
  677 + curStar = 0
  678 + end
  679 + if curStar ~= bonusStar[id] then
  680 + bonusStar[id] = curStar
  681 + role:updateProperty({field = "bonusStar", value = bonusStar})
611 end 682 end
612 683
613 role:checkBattle("bonus", { 684 role:checkBattle("bonus", {
@@ -711,4 +782,4 @@ function _M.selectTeamRpc(agent, data) @@ -711,4 +782,4 @@ function _M.selectTeamRpc(agent, data)
711 return true 782 return true
712 end 783 end
713 784
714 -return _M  
715 \ No newline at end of file 785 \ No newline at end of file
  786 +return _M
src/actions/HeroAction.lua
@@ -143,74 +143,45 @@ function _M.talentRpc(agent, data) @@ -143,74 +143,45 @@ function _M.talentRpc(agent, data)
143 local hero = role.heros[msg.id] 143 local hero = role.heros[msg.id]
144 if not hero then return 1 end 144 if not hero then return 1 end
145 145
146 - local index = msg.index -- 第几个天赋  
147 - local need = {[0] = 1, [1] = 1, [2] = 1, [3] = 1, [4] = 1}  
148 - if not need[index] then return 2 end  
149 -  
150 local talent = hero:getProperty("talent") 146 local talent = hero:getProperty("talent")
  147 + local heroCfgId = hero:getProperty("type")
151 local curStage = talent:getv(0, 1) 148 local curStage = talent:getv(0, 1)
152 - local curData = csvdb["unit_talentCsv"][curStage]  
153 - if not curData then return 4 end 149 + local curLevel = talent:getv(1, 1)
  150 + local curData = csvdb["unit_talent_"..heroCfgId.."Csv"][curStage]
  151 + if not curData then return 1 end
154 local oldSkillLv = hero:getSkillLevel(1) 152 local oldSkillLv = hero:getSkillLevel(1)
155 153
156 154
157 local cost = {} 155 local cost = {}
158 - if index == 0 then  
159 - --是否进阶  
160 - local max = true  
161 - for i = 1, 4 do  
162 - if talent:getv(i, 0) < #curData then  
163 - max = false  
164 - break  
165 - end  
166 - end  
167 - if max then  
168 - talent = talent:setv(0, curStage + 1)  
169 - for i = 1, 4 do  
170 - talent = talent:setv(i, 0)  
171 - end  
172 - else  
173 - return 12  
174 - end 156 + if curLevel == #curData then
  157 + talent = talent:setv(0, curStage + 1)
  158 + talent = talent:setv(1, 1)
175 else 159 else
176 -  
177 - local level = talent:getv(index, 0)  
178 - if level >= #curData then return 5 end 160 + if curLevel > #curData then return 2 end
179 161
180 - local talentData = curData[level]  
181 - if not talentData then return end 162 + local talentData = curData[curLevel]
  163 + if not talentData then return 3 end
182 164
183 - if talentData.lvRequire > hero:getProperty("level") then return 6 end 165 + if talentData.lvRequire > hero:getProperty("level") then return 4 end
184 166
185 cost = talentData.money:toNumMap() 167 cost = talentData.money:toNumMap()
186 - local cost2 = talentData.cost:toNumMap()  
187 - for k,v in pairs(cost2) do  
188 - cost[globalCsv.unit_talent_cost[csvdb["unitCsv"][hero:getProperty("type")].camp][k]] = v  
189 - end  
190 - if not role:checkItemEnough(cost) then return 6 end 168 + if not role:checkItemEnough(cost) then return 5 end
191 role:costItems(cost, {log = {desc = "heroTalent", int1 = msg.id, int2 = hero:getProperty("type")}}) 169 role:costItems(cost, {log = {desc = "heroTalent", int1 = msg.id, int2 = hero:getProperty("type")}})
192 - talent = talent:incrv(index, 1)  
193 -  
194 -  
195 - local aheadLevel = 0  
196 - for i = 1, talent:getv(0, 1) - 1 do  
197 - aheadLevel = aheadLevel + #csvdb["unit_talentCsv"][i]  
198 - end  
199 - aheadLevel = aheadLevel + talent:getv(index, 0)  
200 -  
201 - role:checkTaskEnter("HeroTalent", {heroType = hero:getProperty("type"), alv = aheadLevel}) 170 + talent = talent:setv(1, curLevel + 1)
202 end 171 end
  172 + curStage = talent:getv(0, 1)
  173 + role:checkTaskEnter("HeroTalent", {heroType = hero:getProperty("type"), alv = curStage})
203 174
204 hero:updateProperty({field = "talent", value = talent}) 175 hero:updateProperty({field = "talent", value = talent})
205 176
206 role:log("hero_talent", { 177 role:log("hero_talent", {
207 hero_id = hero:getProperty("type"), --英雄ID 178 hero_id = hero:getProperty("type"), --英雄ID
208 - hero_talent_id = index, --天赋ID 179 + hero_talent_id = curStage, --天赋ID
209 hero_talent_cost = cost, -- 英雄天赋升级消耗,json格式记录,{道具ID1:消耗数量1,道具ID2:消耗数量2,………...} 180 hero_talent_cost = cost, -- 英雄天赋升级消耗,json格式记录,{道具ID1:消耗数量1,道具ID2:消耗数量2,………...}
210 hero_talent_levelbef = oldSkillLv, -- 英雄技能升级前等级 181 hero_talent_levelbef = oldSkillLv, -- 英雄技能升级前等级
211 hero_talent_level = hero:getSkillLevel(1), -- 英雄技能升级后等级 182 hero_talent_level = hero:getSkillLevel(1), -- 英雄技能升级后等级
212 }) 183 })
213 - hero:mylog({desc = "talent", int1 = index, int2 = talent:getv(index, 0)}) 184 + hero:mylog({desc = "talent", int1 = talent:getv(0, 1), int2 = talent:getv(1, 1)})
214 185
215 SendPacket(actionCodes.Hero_talentRpc, '') 186 SendPacket(actionCodes.Hero_talentRpc, '')
216 return true 187 return true
@@ -641,6 +612,7 @@ function _M.getResetRewardRpc(agent, data) @@ -641,6 +612,7 @@ function _M.getResetRewardRpc(agent, data)
641 local level = hero:getProperty("level") 612 local level = hero:getProperty("level")
642 local breakL = hero:getProperty("breakL") 613 local breakL = hero:getProperty("breakL")
643 local talent = hero:getProperty("talent") 614 local talent = hero:getProperty("talent")
  615 + local heroCfgId = hero:getProperty("type")
644 616
645 local tmpLevel = level 617 local tmpLevel = level
646 if level <= 1 and talent == "" then return end 618 if level <= 1 and talent == "" then return end
@@ -669,32 +641,18 @@ function _M.getResetRewardRpc(agent, data) @@ -669,32 +641,18 @@ function _M.getResetRewardRpc(agent, data)
669 end 641 end
670 642
671 local stage = talent:getv(0, 1) 643 local stage = talent:getv(0, 1)
672 - local tlevel = {talent:getv(1, 0), talent:getv(2, 0), talent:getv(3, 0), talent:getv(4, 0)} 644 + local curTalentLvl = talent:getv(1, 1)
  645 + --local tlevel = {talent:getv(1, 0), talent:getv(2, 0), talent:getv(3, 0), talent:getv(4, 0)}
673 646
674 - local talentCostIds = globalCsv.unit_talent_cost[csvdb["unitCsv"][hero:getProperty("type")].camp]  
675 while stage > 0 do 647 while stage > 0 do
676 - local curData = csvdb["unit_talentCsv"][stage]  
677 - for level = math.max(table.unpack(tlevel)), 1, -1 do  
678 - local add = 0  
679 - for i = 1, 4 do  
680 - if tlevel[i] == level then  
681 - add = add + 1  
682 - tlevel[i] = tlevel[i] - 1  
683 - end  
684 - end  
685 - local talentData = curData[level - 1] 648 + local curData = csvdb["unit_talent_"..heroCfgId.."Csv"][stage]
  649 + for lvl = 1, curTalentLvl - 1 do
  650 + local talentData = curData[lvl]
686 for itemId, count in pairs(talentData.money:toNumMap()) do 651 for itemId, count in pairs(talentData.money:toNumMap()) do
687 - reward[itemId] = (reward[itemId] or 0) + count * add  
688 - end  
689 - for idx , count in pairs(talentData.cost:toNumMap()) do  
690 - reward[talentCostIds[idx]] = (reward[talentCostIds[idx]] or 0) + count * add 652 + reward[itemId] = (reward[itemId] or 0) + count
691 end 653 end
692 end 654 end
693 stage = stage - 1 655 stage = stage - 1
694 - curData = csvdb["unit_talentCsv"][stage]  
695 - if curData then  
696 - tlevel = {#curData, #curData, #curData, #curData}  
697 - end  
698 end 656 end
699 657
700 local equip = hero:getProperty("equip") 658 local equip = hero:getProperty("equip")
@@ -1080,4 +1038,23 @@ function _M.changeCrown(agent, data) @@ -1080,4 +1038,23 @@ function _M.changeCrown(agent, data)
1080 return true 1038 return true
1081 end 1039 end
1082 1040
  1041 +function _M.itemComposeRpc(agent, data)
  1042 + local role = agent.role
  1043 + local msg = MsgPack.unpack(data)
  1044 +
  1045 + local itemId = msg.id
  1046 + local count = msg.count
  1047 + if not csvdb["itemCsv"][itemId] then return 1 end
  1048 + local config = csvdb["item_processCsv"][itemId]
  1049 + if not config then return 2 end
  1050 +
  1051 + local cost = config.cost:toNumMap()
  1052 + if not role:checkItemEnough(cost) then return 2 end
  1053 + role:costItems(cost, {log = {desc = "itemCompose", int1 = itemId, int2 = count}})
  1054 + role:award({[itemId] = count}, {log = {desc = "itemCompose"}})
  1055 +
  1056 + SendPacket(actionCodes.Hero_itemComposeRpc, "")
  1057 + return true
  1058 +end
  1059 +
1083 return _M 1060 return _M
src/actions/PvpAction.lua
@@ -50,6 +50,9 @@ function _M.formatCommonRpc(agent , data) @@ -50,6 +50,9 @@ function _M.formatCommonRpc(agent , data)
50 end 50 end
51 pvpTC.leader = msg.leader 51 pvpTC.leader = msg.leader
52 pvpTC.supports = supports 52 pvpTC.supports = supports
  53 + if msg.tactics and globalCsv.tactics_skill_passive_cell[msg.tactics] then
  54 + pvpTC.tactics = msg.tactics
  55 + end
53 56
54 role:savePvpCTeam(pvpTC) 57 role:savePvpCTeam(pvpTC)
55 SendPacket(actionCodes.Pvp_formatCommonRpc, '') 58 SendPacket(actionCodes.Pvp_formatCommonRpc, '')
@@ -92,6 +95,9 @@ function _M.formatHighRpc(agent , data) @@ -92,6 +95,9 @@ function _M.formatHighRpc(agent , data)
92 curTeam.heros = team.heros 95 curTeam.heros = team.heros
93 curTeam.leader = team.leader 96 curTeam.leader = team.leader
94 curTeam.supports = supports 97 curTeam.supports = supports
  98 + if team.tactics and globalCsv.tactics_skill_passive_cell[team.tactics] then
  99 + curTeam.tactics = team.tactics
  100 + end
95 101
96 table.insert(pvpTH, curTeam) 102 table.insert(pvpTH, curTeam)
97 end 103 end
@@ -462,6 +468,10 @@ function _M.startBattleHRpc(agent, data) @@ -462,6 +468,10 @@ function _M.startBattleHRpc(agent, data)
462 curTeam.heros = team.heros 468 curTeam.heros = team.heros
463 curTeam.leader = team.leader 469 curTeam.leader = team.leader
464 curTeam.supports = supports 470 curTeam.supports = supports
  471 + if team.tactics and globalCsv.tactics_skill_passive_cell[team.tactics] then
  472 + curTeam.tactics = team.tactics
  473 + end
  474 +
465 475
466 table.insert(pvpTH, curTeam) 476 table.insert(pvpTH, curTeam)
467 end 477 end
src/actions/RadioAction.lua
1 local _M = {} 1 local _M = {}
2 2
3 -function _M.listRpc(agent, data)  
4 - local role = agent.role  
5 - local roleId = role:getProperty("id")  
6 - local now = skynet.timex()  
7 - local result = {}  
8 - 3 +-- 获取英雄大成功率
  4 +local function getHeroCoef(hero, condition)
  5 + -- 基础概率
  6 + local rareMap = {[HeroQuality.N] = 10, [HeroQuality.R] = 10, [HeroQuality.SR] = 15, [HeroQuality.SSR] = 20}
  7 + local rare = hero:getRare()
  8 + local result = 0
  9 + for _, it in ipairs(condition:toTableArray(true)) do
  10 + local type = it[1]
  11 + local value = it[2]
  12 + local add = it[3]
  13 + if type == 1 then -- 种族加成
  14 + if hero:getCamp() == value then
  15 + result = result + add
  16 + end
  17 + elseif type == 2 then -- 定位加成
  18 + if hero:getPosition() == value then
  19 + result = result + add
  20 + end
  21 + end
  22 + end
9 23
10 - SendPacket(actionCodes.Email_listRpc, MsgPack.pack({list = result}))  
11 - return true 24 + return result + (rareMap[rare] or 0)
12 end 25 end
13 26
14 --- 获取英雄大成功率  
15 -local function getHeroCoef()  
16 - return 0 27 +local function getQuestMax(role)
  28 + local count = 0
  29 + for _, carbonId in ipairs(globalCsv.crusade_team_unlock or {}) do
  30 + if role:checkHangPass(carbonId) then
  31 + count = count + 1
  32 + end
  33 + end
  34 +
  35 + return count + (globalCsv.cursade_team_count_initial or 0)
17 end 36 end
18 37
19 function _M.startQuestRpc(agent, data) 38 function _M.startQuestRpc(agent, data)
@@ -22,11 +41,67 @@ function _M.startQuestRpc(agent, data) @@ -22,11 +41,67 @@ function _M.startQuestRpc(agent, data)
22 local id = msg.id 41 local id = msg.id
23 local heros = msg.heros 42 local heros = msg.heros
24 local result = {} 43 local result = {}
  44 + local radioTask = role:getProperty("radioTask")
  45 + if table.numbers(radioTask) >= getQuestMax(role) then
  46 + return 1
  47 + end
25 -- check id 48 -- check id
  49 + local config = csvdb["crusadeCsv"][id]
  50 + if not config then return 2 end
  51 + if not role:checkHangPass(config.unlock) then return 3 end
  52 + if radioTask[id] then return 4 end
26 -- check hero 53 -- check hero
  54 + --1=指定等级=人数
  55 + --2=指定稀有度=人数
  56 + --3=人数
  57 + local needHeroCnt = 0
  58 + local lvlMap = {}
  59 + local rareMap = {}
  60 + for _, it in ipairs(config.condition:toTableArray(true)) do
  61 + local type = it[1]
  62 + if type == 1 then
  63 + lvlMap[1] = it[2]
  64 + lvlMap[2] = it[3]
  65 + elseif type == 2 then
  66 + rareMap[1] = it[2]
  67 + rareMap[2] = it[3]
  68 + elseif type == 3 then
  69 + needHeroCnt = it[2]
  70 + end
  71 + end
  72 + for _, heroId in ipairs(heros) do
  73 + local hero = role.heros[heroId]
  74 + if hero then
  75 + needHeroCnt = needHeroCnt - 1
  76 + if next(lvlMap) then
  77 + if hero:getProperty("level") >= lvlMap[1] then
  78 + lvlMap[2] = lvlMap[2] - 1
  79 + if lvlMap[2] <= 0 then
  80 + lvlMap = {}
  81 + end
  82 + end
  83 + end
  84 + if next(rareMap) then
  85 + if hero:getRare() >= rareMap[1] then
  86 + rareMap[2] = rareMap[2] - 1
  87 + end
  88 + if rareMap[2] <= 0 then
  89 + rareMap = {}
  90 + end
  91 + end
  92 + end
  93 + end
  94 + if needHeroCnt > 0 or next(rareMap) or next(lvlMap) then
  95 + return 5
  96 + end
27 -- start quest, set finish time 97 -- start quest, set finish time
  98 + local taskData = {}
  99 + taskData["time"] = skynet.timex() + config.time
  100 + taskData["heros"] = heros
  101 + radioTask[id] = taskData
  102 + role:updateProperty({field="radioTask", value=radioTask, notNotify=true})
28 103
29 - SendPacket(actionCodes.Email_listRpc, MsgPack.pack({list = result})) 104 + SendPacket(actionCodes.Radio_startQuestRpc, MsgPack.pack({id=id, task=taskData}))
30 return true 105 return true
31 end 106 end
32 107
@@ -34,13 +109,56 @@ function _M.finishQuestRpc(agent, data) @@ -34,13 +109,56 @@ function _M.finishQuestRpc(agent, data)
34 local role = agent.role 109 local role = agent.role
35 local msg = MsgPack.unpack(data) 110 local msg = MsgPack.unpack(data)
36 local id = msg.id 111 local id = msg.id
37 - local result = {}  
38 -- check finish time 112 -- check finish time
  113 + local radioTask = role:getProperty("radioTask")
  114 + local task = radioTask[id]
  115 + if not task then return 1 end
  116 + if skynet.timex() < task.time then return 2 end
39 -- check id 117 -- check id
  118 + local config = csvdb["crusadeCsv"][id]
  119 + if not config then return 3 end
  120 + local carbonData = csvdb["idle_battleCsv"][config.unlock]
  121 + if not carbonData then return 4 end
40 -- get heros 122 -- get heros
  123 + local totalCoef = 0
  124 + local exp = config.time / 60
  125 + heroFaithMap = {}
  126 + for _, heroId in ipairs(task.heros) do
  127 + local hero = role.heros[heroId]
  128 + if hero then
  129 + totalCoef = totalCoef + getHeroCoef(hero, config.success)
  130 + -- 增加英雄信赖
  131 + hero:addHeroFaith(exp)
  132 + heroFaithMap[heroId] = hero:getProperty("faith")
  133 + end
  134 + end
41 -- send award 135 -- send award
  136 + local bigSuccess = false
  137 + local result = math.randomInt(0, 100)
  138 + if result < totalCoef then
  139 + bigSuccess = true
  140 + end
  141 + local money = math.ceil(carbonData.money / 5) * config.time * config.money_clear
  142 + local exp = math.ceil(carbonData.exp / 5) * config.time * config.exp_clear
  143 + local itemReward = config.item_clear_special:toNumMap()
  144 + itemReward[ItemId.Gold] = (itemReward[ItemId.Gold] or 0) + money
  145 + itemReward[ItemId.Exp] = (itemReward[ItemId.Exp] or 0) + exp
  146 + if bigSuccess then
  147 + for key, value in pairs(itemReward) do
  148 + itemReward[key] = math.ceil(1.5 * value)
  149 + end
  150 + end
  151 +
  152 + local r, change = role:award(itemReward, {log = {desc = "radioQuest", int1 = id}})
  153 +
  154 + radioTask[id] = nil
  155 + role:updateProperty({field="radioTask", value=radioTask, notNotify = true})
42 156
43 - SendPacket(actionCodes.Email_listRpc, MsgPack.pack({list = result})) 157 + local msg = role:packReward(r, change)
  158 + msg["big"] = bigSuccess
  159 + msg["id"] = id
  160 + msg["heroFaith"] = heroFaithMap
  161 + SendPacket(actionCodes.Radio_finishQuestRpc, MsgPack.pack(msg))
44 return true 162 return true
45 end 163 end
46 164
src/actions/RoleAction.lua
@@ -291,7 +291,7 @@ function _M.loginRpc( agent, data ) @@ -291,7 +291,7 @@ function _M.loginRpc( agent, data )
291 291
292 292
293 -- 玩家登陆做的一些操作 293 -- 玩家登陆做的一些操作
294 - role:saveHangTeam() 294 + role:updateHangTeamInfo()
295 role:savePvpCTeam() 295 role:savePvpCTeam()
296 role:savePvpHTeam() 296 role:savePvpHTeam()
297 297
src/actions/StoreAction.lua
1 local _M = {} 1 local _M = {}
2 2
3 -local serverId = tonumber(skynet.getenv("servId"))  
4 local md5 = require "md5" 3 local md5 = require "md5"
5 4
6 -local function makeOrder(role, rechargeId)  
7 - local roleId = role:getProperty("id")  
8 - local rechargeData = csvdb["shop_rechargeCsv"][rechargeId]  
9 - if not rechargeData then  
10 - skynet.error("recharge id not exist", rechargeId)  
11 - return ""  
12 - end  
13 - local limit = rechargeData.limit  
14 - local rechargeRecord = role:getProperty("payR") or {}  
15 - if limit ~= 0 and limit <= (rechargeRecord[rechargeId] or 0) then  
16 - skynet.error(string.format("recharge id:%d count over limit, user id:%d", rechargeId, roleId))  
17 - return ""  
18 - end  
19 -  
20 - local orderId = redisproxy:hincrby("autoincrement_set", "order", 1)  
21 - local partnerOrderId = string.format("%d_%d_%d", serverId, roleId, orderId)  
22 - local orderKey = string.format("order:%d:%d", roleId, orderId)  
23 - redisproxy:del(orderKey)  
24 - local order = require("models.Order").new({  
25 - key = orderKey,  
26 - order = partnerOrderId,  
27 - rechargeId = rechargeId,  
28 - })  
29 - order:create()  
30 - redisproxy:sadd(string.format("role:%d:orders", roleId), partnerOrderId)  
31 - return partnerOrderId  
32 -end  
33 -  
34 -- 入口在正式服关闭 -- mock 充值 5 -- 入口在正式服关闭 -- mock 充值
35 function _M.rechargeRpc(agent , data) 6 function _M.rechargeRpc(agent , data)
36 local role = agent.role 7 local role = agent.role
@@ -41,7 +12,7 @@ function _M.rechargeRpc(agent , data) @@ -41,7 +12,7 @@ function _M.rechargeRpc(agent , data)
41 local roleId = role:getProperty("id") 12 local roleId = role:getProperty("id")
42 13
43 --创建订单号 14 --创建订单号
44 - local partnerOrderId = makeOrder(role, id) 15 + local partnerOrderId = role:getPurchaseOrder(id)
45 SendPacket(actionCodes.Store_rechargeRpc, MsgPack.pack({ order = partnerOrderId })) 16 SendPacket(actionCodes.Store_rechargeRpc, MsgPack.pack({ order = partnerOrderId }))
46 17
47 18
@@ -115,7 +86,7 @@ function _M.googleRechargeRpc(agent, data) @@ -115,7 +86,7 @@ function _M.googleRechargeRpc(agent, data)
115 86
116 role.ignoreHeartbeat = true 87 role.ignoreHeartbeat = true
117 --创建订单号 88 --创建订单号
118 - local partnerOrderId = makeOrder(role, id) 89 + local partnerOrderId = role:getPurchaseOrder(id)
119 -- 签名 90 -- 签名
120 -- local secret_key = "b7657fa7ccd44c16a35e3f454ac7a075" 91 -- local secret_key = "b7657fa7ccd44c16a35e3f454ac7a075"
121 local secret_key = "8920e9dcf0cb4ebca87393ce48021ead" 92 local secret_key = "8920e9dcf0cb4ebca87393ce48021ead"
@@ -143,7 +114,7 @@ function _M.myCardRechargeRpc(agent, data) @@ -143,7 +114,7 @@ function _M.myCardRechargeRpc(agent, data)
143 114
144 role.ignoreHeartbeat = true 115 role.ignoreHeartbeat = true
145 --创建订单号 116 --创建订单号
146 - local partnerOrderId = makeOrder(role, id) 117 + local partnerOrderId = role:getPurchaseOrder(id)
147 -- 签名 118 -- 签名
148 local secret_key = "48759e07540f46d9af17ec82669b4272" 119 local secret_key = "48759e07540f46d9af17ec82669b4272"
149 local need = { 120 local need = {
@@ -169,7 +140,7 @@ function _M.iosRechargeRpc(agent, data) @@ -169,7 +140,7 @@ function _M.iosRechargeRpc(agent, data)
169 140
170 role.ignoreHeartbeat = true 141 role.ignoreHeartbeat = true
171 --创建订单号 142 --创建订单号
172 - local partnerOrderId = makeOrder(role, id) 143 + local partnerOrderId = role:getPurchaseOrder(id)
173 -- 签名 144 -- 签名
174 local secret_key = "9647d2efe1074c73b9ac19af4337a70e" 145 local secret_key = "9647d2efe1074c73b9ac19af4337a70e"
175 local need = { 146 local need = {
@@ -193,43 +164,15 @@ function _M.purchaseOrderResult(agent, data) @@ -193,43 +164,15 @@ function _M.purchaseOrderResult(agent, data)
193 164
194 role.ignoreHeartbeat = false 165 role.ignoreHeartbeat = false
195 166
196 - local partnerOrderStr = msg.order  
197 - local _, _, orderId = string.match(partnerOrderStr, "(.+)_(.+)_(.+)")  
198 - local orderObject = require("models.Order").new({ key = string.format("order:%d:%d", roleId, orderId) })  
199 - if not orderObject:load() then  
200 - -- 订单不存在  
201 - skynet.error("cancelPurchaseRpc", string.format("order %s not exist", partnerOrderStr))  
202 - return true  
203 - end  
204 -  
205 - if msg.status == "success" then  
206 - orderObject:setProperty("transactionId", msg.platformOrder or "")  
207 - local rechargeId = orderObject:getProperty("rechargeId")  
208 - local dataSet = csvdb["shop_rechargeCsv"][rechargeId]  
209 -  
210 - role:log("setOrder", {  
211 - order_status = 100, -- "订单状态:100 - 开始下单(玩家还未开始付费行为记录)200 - 支付完成并发货(SDK通知可以发货时记录),300 - 订单被取消,1000 - 其他"  
212 - item_id = rechargeId, -- 道具id  
213 - item_type = dataSet.type, -- 购买的道具类型,具体见"onItems"方法中道具类型枚举表  
214 - item_name = dataSet.title, -- 购买的道具名  
215 - item_number = 1, -- 购买的道具数量  
216 - item_level = 1, -- 购买的道具等级  
217 - order_cost = dataSet.rmb * 100, -- 此次消费的现金金额(单位:分),如 51800即未518元,对应客户端SDK传入的'total_fee'  
218 - order_currency = "CNY", -- 货币类型,默认为"CNY"(人民币),遵循ISO 4217规范  
219 - order_type = role:getProperty("rmbC") > 0 and 0 or 1, -- 订单类型,首充记录为1,否则为0  
220 - order_id = msg.platformOrder, -- 本条记录的订单号,对应客户端SDK返回的'bs_trade_no'  
221 - })  
222 -  
223 - return true  
224 - end 167 + local status = {
  168 + fail = true,
  169 + success = true
  170 + }
225 171
226 - if orderObject:getProperty("finishTime") > 0 then  
227 - return true 172 + local partnerOrderStr = msg.order
  173 + if partnerOrderStr then
  174 + role:updatePurchaseOrder(partnerOrderStr, msg.platformOrder, status[msg.status] and msg.status or "unknown")
228 end 175 end
229 -  
230 - orderObject:setProperty("status", msg.status)  
231 -  
232 - redisproxy:srem(string.format("role:%d:orders", roleId), partnerOrderStr)  
233 return true 176 return true
234 end 177 end
235 178
src/actions/TowerAction.lua
@@ -8,36 +8,6 @@ local MsgPack = MsgPack @@ -8,36 +8,6 @@ local MsgPack = MsgPack
8 local _M = {} 8 local _M = {}
9 9
10 10
11 -function _M.roleFormatRpc(agent , data)  
12 - local role = agent.role  
13 - local msg = MsgPack.unpack(data)  
14 - local towerTeam = role:getProperty("towerF")  
15 - for slot, heroId in pairs(msg.heros) do  
16 - if not role.heros[heroId] then  
17 - return  
18 - end  
19 - end  
20 - local supports = {}  
21 - for slot, support in pairs(msg.supports) do  
22 - if slot ~= 1 and slot ~= 2 then return end  
23 - local level = role.dinerData:getProperty("dishTree"):getv(support, 0)  
24 - if level <= 0 then return end  
25 - supports[slot] = support  
26 - end  
27 - table.clear(towerTeam)  
28 - towerTeam.heros = {}  
29 - for slot, heroId in pairs(msg.heros) do  
30 - towerTeam.heros[slot] = heroId  
31 - end  
32 - towerTeam.leader = msg.leader  
33 - towerTeam.supports = supports  
34 -  
35 -  
36 - role:updateProperty({field = "towerF", value = towerTeam})  
37 - SendPacket(actionCodes.Tower_roleFormatRpc, '')  
38 - return true  
39 -end  
40 -  
41 11
42 local function getUpdateTime(lastCount, lastTime) 12 local function getUpdateTime(lastCount, lastTime)
43 local nextCount, nextTime = lastCount, skynet.timex() 13 local nextCount, nextTime = lastCount, skynet.timex()
@@ -102,6 +102,9 @@ function Adv:initByChapter(params) @@ -102,6 +102,9 @@ function Adv:initByChapter(params)
102 self.cacheUnlock = self.cacheUnlock or {} 102 self.cacheUnlock = self.cacheUnlock or {}
103 self.shopStatus = self.shopStatus or {} 103 self.shopStatus = self.shopStatus or {}
104 self.support = self.support or {} 104 self.support = self.support or {}
  105 + if self.battle then
  106 + self.battle:overBattle()
  107 + end
105 self.battle = nil -- 清掉 老的 battle 108 self.battle = nil -- 清掉 老的 battle
106 self.logid = self.owner:getActionUcode() 109 self.logid = self.owner:getActionUcode()
107 110
@@ -211,7 +214,7 @@ function Adv:saveDB(notNotify) @@ -211,7 +214,7 @@ function Adv:saveDB(notNotify)
211 advInfo.logid = self.logid 214 advInfo.logid = self.logid
212 advInfo.maps = {} 215 advInfo.maps = {}
213 216
214 - self.battle:saveDB() 217 + self.battle:saveDB(advInfo)
215 218
216 for id , map in ipairs(self.maps) do 219 for id , map in ipairs(self.maps) do
217 advInfo.maps[id] = map:getDB() 220 advInfo.maps[id] = map:getDB()
@@ -468,6 +471,11 @@ function Adv:initBattle(notDb) @@ -468,6 +471,11 @@ function Adv:initBattle(notDb)
468 if notDb and self.level ~= 1 then 471 if notDb and self.level ~= 1 then
469 self.battle.player:attrChangeCondBuffCheck(1) 472 self.battle.player:attrChangeCondBuffCheck(1)
470 end 473 end
  474 +
  475 + -- 初始化
  476 + if notDb then
  477 + self.battle:newBattle()
  478 + end
471 end 479 end
472 480
473 function Adv:triggerPassive(condType, params) 481 function Adv:triggerPassive(condType, params)
@@ -936,7 +944,7 @@ end @@ -936,7 +944,7 @@ end
936 944
937 -- log long1 字段被征用!!! 945 -- log long1 字段被征用!!!
938 -- 在冒险中获得的物品都发放在冒险背包内 946 -- 在冒险中获得的物品都发放在冒险背包内
939 -function Adv:award(gift, params) 947 +function Adv:award(gift, params, backRewardParams)
940 params = params or {} 948 params = params or {}
941 local tgift = {} 949 local tgift = {}
942 if type(gift) == "string" then 950 if type(gift) == "string" then
@@ -948,6 +956,8 @@ function Adv:award(gift, params) @@ -948,6 +956,8 @@ function Adv:award(gift, params)
948 end 956 end
949 local items = self.owner:getProperty("advItems") 957 local items = self.owner:getProperty("advItems")
950 local oldItems = items 958 local oldItems = items
  959 +
  960 + local autoUse = {}
951 for itemId, count in pairs(tgift) do 961 for itemId, count in pairs(tgift) do
952 if count > 0 then 962 if count > 0 then
953 local buffAdd = self.battle.player:getRewardChange(itemId) 963 local buffAdd = self.battle.player:getRewardChange(itemId)
@@ -956,41 +966,45 @@ function Adv:award(gift, params) @@ -956,41 +966,45 @@ function Adv:award(gift, params)
956 self:checkAchievement(Adv.AchievType.GetItem, count, itemId) 966 self:checkAchievement(Adv.AchievType.GetItem, count, itemId)
957 end 967 end
958 tgift[itemId] = count 968 tgift[itemId] = count
959 - local origin = items:getv(itemId, 0)  
960 - local nums = origin + count  
961 -  
962 - if csvdb["adv_artifactCsv"][itemId] then -- 获得神器  
963 - self:awardArtifact(itemId, params)  
964 - if not self.owner:checkOverGuide(55) then  
965 - self.owner:saveGuide(55,1,true)  
966 - end 969 + if globalCsv.adv_auto_useItem[itemId] and count > 0 then
  970 + autoUse[itemId] = count
967 else 971 else
968 - if nums <= 0 then  
969 - items = items:delk(itemId)  
970 - nums = 0 972 + local origin = items:getv(itemId, 0)
  973 + local nums = origin + count
  974 +
  975 + if csvdb["adv_artifactCsv"][itemId] then -- 获得神器
  976 + self:awardArtifact(itemId, params)
  977 + if not self.owner:checkOverGuide(55) then
  978 + self.owner:saveGuide(55,1,true)
  979 + end
971 else 980 else
972 - items = items:setv(itemId, nums)  
973 - end 981 + if nums <= 0 then
  982 + items = items:delk(itemId)
  983 + nums = 0
  984 + else
  985 + items = items:setv(itemId, nums)
  986 + end
974 987
975 - if itemId == 16 and not self.owner:checkOverGuide(51,4) then  
976 - self.owner:saveGuide(51,4)  
977 - end  
978 - if params.log then  
979 - local log = clone(params.log)  
980 - if log["cint1"] or log["cint2"] or log["cint3"] or log["long1"] then  
981 - print("addAdvItem error log have cint1 or cint2 or cint3 ", debug.traceback()) 988 + if itemId == 16 and not self.owner:checkOverGuide(51,4) then
  989 + self.owner:saveGuide(51,4)
982 end 990 end
983 - log["cint1"] = itemId  
984 - log["cint2"] = math.abs(count)  
985 - log["cint3"] = self.chapterId  
986 - log["long1"] = self.level  
987 - if count >= 0 then  
988 - self.owner:mylog("in_adv", log) 991 + if params.log then
  992 + local log = clone(params.log)
  993 + if log["cint1"] or log["cint2"] or log["cint3"] or log["long1"] then
  994 + print("addAdvItem error log have cint1 or cint2 or cint3 ", debug.traceback())
  995 + end
  996 + log["cint1"] = itemId
  997 + log["cint2"] = math.abs(count)
  998 + log["cint3"] = self.chapterId
  999 + log["long1"] = self.level
  1000 + if count >= 0 then
  1001 + self.owner:mylog("in_adv", log)
  1002 + else
  1003 + self.owner:mylog("out_adv", log)
  1004 + end
989 else 1005 else
990 - self.owner:mylog("out_adv", log) 1006 + print("addAdvItem no log ", debug.traceback())
991 end 1007 end
992 - else  
993 - print("addAdvItem no log ", debug.traceback())  
994 end 1008 end
995 end 1009 end
996 end 1010 end
@@ -1001,10 +1015,48 @@ function Adv:award(gift, params) @@ -1001,10 +1015,48 @@ function Adv:award(gift, params)
1001 if tgift[ItemId.OldCoin] then 1015 if tgift[ItemId.OldCoin] then
1002 self.battle.player:attrChangeCondBuffCheck(0) 1016 self.battle.player:attrChangeCondBuffCheck(0)
1003 end 1017 end
  1018 +
  1019 + if backRewardParams then
  1020 + self:backReward(tgift, backRewardParams)
  1021 + end
  1022 +
  1023 + if next(autoUse) then
  1024 + for itemId, count in pairs(autoUse) do
  1025 + self:useItem(itemId, count)
  1026 + end
  1027 + self:backUse(autoUse, 1)
  1028 + end
1004 return tgift 1029 return tgift
1005 end 1030 end
1006 1031
1007 1032
  1033 +function Adv:useItem(itemId, count, target)
  1034 + local itemData = csvdb["adv_itemCsv"][itemId]
  1035 + if not itemData then return end
  1036 +
  1037 + if itemData["function"] == 0 or itemData["function"] == 2 then count = 1 end
  1038 +
  1039 + if itemId == 5020 then
  1040 + self.owner:finishGuide(53)
  1041 + end
  1042 +
  1043 + self:checkAchievement(self.AchievType.UseItem, count, itemId)
  1044 + self:mylog({desc = "useItem", int1 = itemId, int2 = count})
  1045 +
  1046 + self.owner:log("mission_pick_use", {
  1047 + mission_threadid = self.chapterId, -- 大地图ID
  1048 + mission_threadname = (csvdb["adv_chapterCsv"][self.chapterId] or {})["chapter"] or "auto", -- 大地图名称
  1049 + mission_id = self.level, -- 关卡ID
  1050 + item_id = itemId, -- 道具ID
  1051 + mission_pick_use_num = count, -- 道具使用量
  1052 + mission_sequenceid = self.logid, -- 本次拾荒ID,用于关联一次拾荒产生多条不同类型的日志
  1053 + })
  1054 +
  1055 + for i = 1, count do
  1056 + self:doActive(itemData.effect, target) -- target
  1057 + end
  1058 +end
  1059 +
1008 -- 消耗物品 优先冒险背包 --check 只是检查够不够 1060 -- 消耗物品 优先冒险背包 --check 只是检查够不够
1009 function Adv:cost(item, params, check) 1061 function Adv:cost(item, params, check)
1010 local items = self.owner:getProperty("advItems") 1062 local items = self.owner:getProperty("advItems")
@@ -1040,7 +1092,9 @@ local function clickOut(self, room, block, params, isExit) @@ -1040,7 +1092,9 @@ local function clickOut(self, room, block, params, isExit)
1040 end 1092 end
1041 1093
1042 if #self.mapStack > 1 then -- 处于夹层中 1094 if #self.mapStack > 1 then -- 处于夹层中
  1095 + local oldMapIdx = self:getCurMapIdx()
1043 table.remove(self.mapStack) --退出夹层 1096 table.remove(self.mapStack) --退出夹层
  1097 + self.battle:iLayerChange(oldMapIdx)
1044 self:backLayer(-1) 1098 self:backLayer(-1)
1045 else --处于底层 1099 else --处于底层
1046 1100
@@ -1071,11 +1125,10 @@ local function clickOut(self, room, block, params, isExit) @@ -1071,11 +1125,10 @@ local function clickOut(self, room, block, params, isExit)
1071 self.battle.player:triggerPassive(Passive.DOWN_LAYER) 1125 self.battle.player:triggerPassive(Passive.DOWN_LAYER)
1072 1126
1073 if curFloorData then 1127 if curFloorData then
1074 - self:backReward(self:award({[ItemId.AdvPoint] = curFloorData.exp}, {log = {desc = "passReward", int1 = self.chapterId, int2 = self.level}})) 1128 + self:award({[ItemId.AdvPoint] = curFloorData.exp}, {log = {desc = "passReward", int1 = self.chapterId, int2 = self.level}}, {})
1075 end 1129 end
1076 local isHaveRelay = self:isHaveRelay(self.level) 1130 local isHaveRelay = self:isHaveRelay(self.level)
1077 1131
1078 - self.owner:getProperty("advTeam").player = self.battle.player:getDB() -- 临时缓存住 battle 的player  
1079 if isHaveRelay and not self.isRelay then 1132 if isHaveRelay and not self.isRelay then
1080 self:initByChapter({ 1133 self:initByChapter({
1081 chapterId = self.chapterId, 1134 chapterId = self.chapterId,
@@ -1255,7 +1308,7 @@ local function chooseCommon(self, room, block, chooseData, choose, tag) @@ -1255,7 +1308,7 @@ local function chooseCommon(self, room, block, chooseData, choose, tag)
1255 skynet.error(string.format("[ERROR]: event_dropCsv no id %s in %s id: %s", effect[2], tag, chooseData.id)) 1308 skynet.error(string.format("[ERROR]: event_dropCsv no id %s in %s id: %s", effect[2], tag, chooseData.id))
1256 end 1309 end
1257 end 1310 end
1258 - self:backReward(self:award(reward, {log = {desc = "chooseEvent", key1 = tag, int1 = chooseData.id}}), {roomId = room.roomId, blockId = block.blockId}) 1311 + self:award(reward, {log = {desc = "chooseEvent", key1 = tag, int1 = chooseData.id}}, {roomId = room.roomId, blockId = block.blockId})
1259 end, 1312 end,
1260 [2] = function() --获得冒险buff 1313 [2] = function() --获得冒险buff
1261 local layer = effect[3] or 1 1314 local layer = effect[3] or 1
@@ -1419,14 +1472,12 @@ local function clickDrop(self, room, block, params) @@ -1419,14 +1472,12 @@ local function clickDrop(self, room, block, params)
1419 if not self.battle or not self.battle.player then return end 1472 if not self.battle or not self.battle.player then return end
1420 self.battle.player:triggerPassive(Passive.CLICK_DROP) 1473 self.battle.player:triggerPassive(Passive.CLICK_DROP)
1421 1474
1422 - local reward = self:award({[block.event.item[1]] = block.event.item[2]}, {log = {desc = "clickDrop"}})  
1423 - -- local reward = self:award({[5801] = 1})  
1424 - -- 获取绷带的引导 1475 + local reward = self:award({[block.event.item[1]] = block.event.item[2]}, {log = {desc = "clickDrop"}}, {roomId = room.roomId, blockId = block.blockId})
  1476 +
1425 if block.event.item[1] == 5020 and not self.owner:checkOverGuide(53,2) then 1477 if block.event.item[1] == 5020 and not self.owner:checkOverGuide(53,2) then
1426 self.owner:saveGuide(53,2) 1478 self.owner:saveGuide(53,2)
1427 end 1479 end
1428 block:clear() 1480 block:clear()
1429 - self:backReward(reward, {roomId = room.roomId, blockId = block.blockId})  
1430 return true 1481 return true
1431 end 1482 end
1432 1483
@@ -1447,7 +1498,7 @@ local function clickTrader(self, room, block, params) @@ -1447,7 +1498,7 @@ local function clickTrader(self, room, block, params)
1447 local costCount = math.ceil(goodsData.price * (block.event.shop[buyId][2] or 100) / 100) 1498 local costCount = math.ceil(goodsData.price * (block.event.shop[buyId][2] or 100) / 100)
1448 if not self:cost({[goodsData.currency] = costCount}, {log = {desc = "clickTrader", int1 = block.event.id}}) then return false, 6 end --不够 1499 if not self:cost({[goodsData.currency] = costCount}, {log = {desc = "clickTrader", int1 = block.event.id}}) then return false, 6 end --不够
1449 self:backCost({[goodsData.currency] = costCount}) 1500 self:backCost({[goodsData.currency] = costCount})
1450 - local reward = self:award({[goodsData.item] = goodsData.num}, {log = {desc = "clickTrader", int1 = block.event.id}}) 1501 + self:award({[goodsData.item] = goodsData.num}, {log = {desc = "clickTrader", int1 = block.event.id}}, {})
1451 if goodsData.restrict == 1 then 1502 if goodsData.restrict == 1 then
1452 self.shopStatus[goodsData.goods] = (self.shopStatus[goodsData.goods] or 0) + 1 1503 self.shopStatus[goodsData.goods] = (self.shopStatus[goodsData.goods] or 0) + 1
1453 elseif goodsData.restrict == 2 then 1504 elseif goodsData.restrict == 2 then
@@ -1459,7 +1510,6 @@ local function clickTrader(self, room, block, params) @@ -1459,7 +1510,6 @@ local function clickTrader(self, room, block, params)
1459 buyCount = buyCount + 1 1510 buyCount = buyCount + 1
1460 self:checkTask(Adv.TaskType.Shop, 1, block.event.id) 1511 self:checkTask(Adv.TaskType.Shop, 1, block.event.id)
1461 self:checkAchievement(Adv.AchievType.Shop, 1, block.event.id) 1512 self:checkAchievement(Adv.AchievType.Shop, 1, block.event.id)
1462 - self:backReward(reward)  
1463 1513
1464 if (traderData.purchasetime ~= 0 and traderData.purchasetime <= buyCount) or #block.event.shop <= buyCount then 1514 if (traderData.purchasetime ~= 0 and traderData.purchasetime <= buyCount) or #block.event.shop <= buyCount then
1465 block:clear() 1515 block:clear()
@@ -1501,7 +1551,7 @@ local function clickClick(self, room, block, params) @@ -1501,7 +1551,7 @@ local function clickClick(self, room, block, params)
1501 local item = csvdb["event_dropCsv"][dropId]["range"]:randWeight(true) 1551 local item = csvdb["event_dropCsv"][dropId]["range"]:randWeight(true)
1502 reward[item[1]] = (reward[item[1]] or 0) + item[2] 1552 reward[item[1]] = (reward[item[1]] or 0) + item[2]
1503 end 1553 end
1504 - self:backReward(self:award(reward, {log = {desc = "clickClick", int1 = block.event.id}}), {roomId = room.roomId, blockId = block.blockId}) 1554 + self:award(reward, {log = {desc = "clickClick", int1 = block.event.id}}, {roomId = room.roomId, blockId = block.blockId})
1505 end, 1555 end,
1506 [3] = function() 1556 [3] = function()
1507 for _, buffId in ipairs(clickData.effect:toArray(true, "=")) do 1557 for _, buffId in ipairs(clickData.effect:toArray(true, "=")) do
@@ -1521,6 +1571,7 @@ local function clickClick(self, room, block, params) @@ -1521,6 +1571,7 @@ local function clickClick(self, room, block, params)
1521 end 1571 end
1522 1572
1523 local function clickLayer(self, room, block, params) 1573 local function clickLayer(self, room, block, params)
  1574 + local oldMapIdx = self:getCurMapIdx()
1524 if block.event.mapIdx then 1575 if block.event.mapIdx then
1525 table.insert(self.mapStack, block.event.mapIdx) --进入夹层 1576 table.insert(self.mapStack, block.event.mapIdx) --进入夹层
1526 else 1577 else
@@ -1536,6 +1587,7 @@ local function clickLayer(self, room, block, params) @@ -1536,6 +1587,7 @@ local function clickLayer(self, room, block, params)
1536 self.maps[mapIdx]:initBattleAfter() 1587 self.maps[mapIdx]:initBattleAfter()
1537 self:checkAchievement(Adv.AchievType.EnterILayer, 1, mapId) 1588 self:checkAchievement(Adv.AchievType.EnterILayer, 1, mapId)
1538 end 1589 end
  1590 + self.battle:iLayerChange(oldMapIdx)
1539 self:backLayer(1) 1591 self:backLayer(1)
1540 return true 1592 return true
1541 end 1593 end
@@ -1842,23 +1894,31 @@ end @@ -1842,23 +1894,31 @@ end
1842 1894
1843 -- 地图上物品变化 1895 -- 地图上物品变化
1844 function Adv:mapItemChange(ctype) 1896 function Adv:mapItemChange(ctype)
  1897 + local blocks = {}
  1898 + for roomId, room in pairs(self:getCurMap().rooms) do
  1899 + for blockId, block in pairs(room.blocks) do
  1900 + table.insert(blocks, block)
  1901 + end
  1902 + end
  1903 + self:blockDropChange(ctype, blocks)
  1904 +end
  1905 +
  1906 +function Adv:blockDropChange(ctype, blocks)
1845 local clist = csvdb["transform_itemCsv"][ctype] 1907 local clist = csvdb["transform_itemCsv"][ctype]
1846 if clist then 1908 if clist then
1847 - for roomId, room in pairs(self:getCurMap().rooms) do  
1848 - for blockId, block in pairs(room.blocks) do  
1849 - if block:getEventType() == AdvEventType.Drop and block.event.item then  
1850 - local id = block.event.item[1]  
1851 - local count = block.event.item[2]  
1852 - local changeTo = nil  
1853 - if clist[id] then  
1854 - changeTo = {clist[id].toId, math.ceil(count * clist[id].num)}  
1855 - elseif clist[-1] then  
1856 - changeTo = {clist[-1].toId, math.ceil(count * clist[-1].num)}  
1857 - end  
1858 - if changeTo and changeTo[1] ~= 0 and changeTo[2] ~= 0 then  
1859 - block.event.item = changeTo  
1860 - self:backBlockChange(roomId, blockId, ctype)  
1861 - end 1909 + for _, block in ipairs(blocks) do
  1910 + if block:getEventType() == AdvEventType.Drop and block.event.item then
  1911 + local id = block.event.item[1]
  1912 + local count = block.event.item[2]
  1913 + local changeTo = nil
  1914 + if clist[id] then
  1915 + changeTo = {clist[id].toId, math.ceil(count * clist[id].num)}
  1916 + elseif clist[-1] then
  1917 + changeTo = {clist[-1].toId, math.ceil(count * clist[-1].num)}
  1918 + end
  1919 + if changeTo and changeTo[1] ~= 0 and changeTo[2] ~= 0 then
  1920 + block.event.item = changeTo
  1921 + self:backBlockChange(block.room.roomId, block.blockId, ctype)
1862 end 1922 end
1863 end 1923 end
1864 end 1924 end
@@ -1887,8 +1947,9 @@ function Adv:enemyDead(enemy, escape) @@ -1887,8 +1947,9 @@ function Adv:enemyDead(enemy, escape)
1887 else 1947 else
1888 self:scoreChange(AdvScoreType.Kill, monsterData.advScore) 1948 self:scoreChange(AdvScoreType.Kill, monsterData.advScore)
1889 end 1949 end
1890 - local changeV = self.battle.player:addExp(monsterData.exp)  
1891 - self:backDead(enemyId, changeV) 1950 + -- local changeV = self.battle.player:addExp(monsterData.exp)
  1951 + -- self:backDead(enemyId, changeV)
  1952 + self:backDead(enemyId)
1892 1953
1893 local toClick = enemy:hadBuff(Buff.CHANGE_DROP_TO_CLICK) 1954 local toClick = enemy:hadBuff(Buff.CHANGE_DROP_TO_CLICK)
1894 if toClick then 1955 if toClick then
@@ -1989,10 +2050,13 @@ end @@ -1989,10 +2050,13 @@ end
1989 function Adv:pushBackEvent(btype, params) 2050 function Adv:pushBackEvent(btype, params)
1990 table.insert(self.backEvents, {btype = btype, params = params}) 2051 table.insert(self.backEvents, {btype = btype, params = params})
1991 end 2052 end
1992 - 2053 +--[=[
  2054 +tag
  2055 +1 自动拾取
  2056 +--]=]
1993 function Adv:backReward(items, params) 2057 function Adv:backReward(items, params)
1994 params = params or {} 2058 params = params or {}
1995 - self:pushBackEvent(AdvBackEventType.Reward, {items = items, roomId = params.roomId, blockId = params.blockId}) 2059 + self:pushBackEvent(AdvBackEventType.Reward, {items = items, roomId = params.roomId, blockId = params.blockId, tag = params.tag})
1996 end 2060 end
1997 2061
1998 -- if is player enemyId is nil 2062 -- if is player enemyId is nil
@@ -2009,8 +2073,8 @@ function Adv:backBlockChange(roomId, blockId, itemChangeType) @@ -2009,8 +2073,8 @@ function Adv:backBlockChange(roomId, blockId, itemChangeType)
2009 self:pushBackEvent(AdvBackEventType.BlockChange, {roomId = roomId, blockId = blockId, itemChangeType = itemChangeType}) 2073 self:pushBackEvent(AdvBackEventType.BlockChange, {roomId = roomId, blockId = blockId, itemChangeType = itemChangeType})
2010 end 2074 end
2011 2075
2012 -function Adv:backDead(enemyId, exp)  
2013 - self:pushBackEvent(AdvBackEventType.Dead, {enemyId = enemyId, exp = exp}) 2076 +function Adv:backDead(enemyId)
  2077 + self:pushBackEvent(AdvBackEventType.Dead, {enemyId = enemyId})
2014 end 2078 end
2015 2079
2016 function Adv:backTrap() 2080 function Adv:backTrap()
@@ -2033,8 +2097,12 @@ function Adv:backCost(items) @@ -2033,8 +2097,12 @@ function Adv:backCost(items)
2033 self:pushBackEvent(AdvBackEventType.Cost, {items = items}) 2097 self:pushBackEvent(AdvBackEventType.Cost, {items = items})
2034 end 2098 end
2035 2099
2036 -function Adv:backUse(items)  
2037 - self:pushBackEvent(AdvBackEventType.Use, {items = items}) 2100 +--[=[
  2101 +tag
  2102 +1 自动使用
  2103 +--]=]
  2104 +function Adv:backUse(items, tag)
  2105 + self:pushBackEvent(AdvBackEventType.Use, {items = items, tag = tag})
2038 end 2106 end
2039 2107
2040 2108
@@ -2044,21 +2112,11 @@ function Adv:scoreChange(scoreType, score) @@ -2044,21 +2112,11 @@ function Adv:scoreChange(scoreType, score)
2044 end 2112 end
2045 2113
2046 function Adv:getScore() 2114 function Adv:getScore()
2047 - self.score[AdvScoreType.Level] = math.floor(self.score[AdvScoreType.Level] or 0)  
2048 - self.score[AdvScoreType.Task] = math.floor(self.score[AdvScoreType.Task] or 0)  
2049 - self.score[AdvScoreType.Kill] = math.floor(self.score[AdvScoreType.Kill] or 0)  
2050 - self.score[AdvScoreType.KillBoss] = math.floor(self.score[AdvScoreType.KillBoss] or 0)  
2051 - self.score[AdvScoreType.ItemBack] = math.floor(self.score[AdvScoreType.ItemBack] or 0)  
2052 - self.score[AdvScoreType.Event] = math.floor(self.score[AdvScoreType.Event] or 0)  
2053 - self.score[AdvScoreType.Story] = math.floor(self.score[AdvScoreType.Story] or 0)  
2054 -  
2055 - return self.score[AdvScoreType.Level]  
2056 - + self.score[AdvScoreType.Task]  
2057 - + self.score[AdvScoreType.Kill]  
2058 - + self.score[AdvScoreType.KillBoss]  
2059 - + self.score[AdvScoreType.ItemBack]  
2060 - + self.score[AdvScoreType.Event]  
2061 - + self.score[AdvScoreType.Story] 2115 + local allScore = 0
  2116 + for _, score in pairs(self.score) do
  2117 + allScore = allScore + math.floor(score)
  2118 + end
  2119 + return allScore
2062 end 2120 end
2063 2121
2064 function Adv:popBackEvents() 2122 function Adv:popBackEvents()
src/adv/AdvBattle.lua
@@ -8,6 +8,7 @@ function Battle:ctor(adv) @@ -8,6 +8,7 @@ function Battle:ctor(adv)
8 self.isNewPlayer = false 8 self.isNewPlayer = false
9 self.enemys = {} --怪 9 self.enemys = {} --怪
10 self.builds = {} -- 建筑 10 self.builds = {} -- 建筑
  11 + self.auras = {} -- 光环
11 self.cachePassiveEvent = {} 12 self.cachePassiveEvent = {}
12 self:initPlayer() 13 self:initPlayer()
13 self:initEnemys() 14 self:initEnemys()
@@ -67,17 +68,17 @@ function Battle:initPlayer() @@ -67,17 +68,17 @@ function Battle:initPlayer()
67 local advAddAttrs = self.adv.owner:getAdvLvAddAttrs() 68 local advAddAttrs = self.adv.owner:getAdvLvAddAttrs()
68 69
69 player = {} 70 player = {}
70 - player.level = 1  
71 - if self.adv.level ~= 1 then  
72 - local relayData = self.adv:isHaveRelay()  
73 - if relayData then  
74 - player.level = relayData.level  
75 - end  
76 - end  
77 - player.exp = 0 71 + -- player.level = 1
  72 + -- if self.adv.level ~= 1 then
  73 + -- local relayData = self.adv:isHaveRelay()
  74 + -- if relayData then
  75 + -- player.level = relayData.level
  76 + -- end
  77 + -- end
  78 + -- player.exp = 0
78 player.sp = getAdvLvAttrUp(advAddAttrs, "sp", 100) 79 player.sp = getAdvLvAttrUp(advAddAttrs, "sp", 100)
79 player.spMax = player.sp 80 player.spMax = player.sp
80 - player.growth = {} 81 + -- player.growth = {}
81 player.passives = {} 82 player.passives = {}
82 83
83 for slot, heroId in pairs(advTeam.heros) do 84 for slot, heroId in pairs(advTeam.heros) do
@@ -100,8 +101,8 @@ function Battle:initPlayer() @@ -100,8 +101,8 @@ function Battle:initPlayer()
100 player[attrName] = (player[attrName] or 0) + hero[attrName] 101 player[attrName] = (player[attrName] or 0) + hero[attrName]
101 end 102 end
102 player[attrName] = getAdvLvAttrUp(advAddAttrs, attrName, player[attrName]) * (globalCsv.adv_battle_attr_ratio[attrName] or 1) 103 player[attrName] = getAdvLvAttrUp(advAddAttrs, attrName, player[attrName]) * (globalCsv.adv_battle_attr_ratio[attrName] or 1)
103 - player.growth[attrName] = player[attrName] * (globalCsv.adv_battle_attr_growth_ratio[attrName] or 1)  
104 - player[attrName] = player[attrName] + player.growth[attrName] * (player.level - 1) 104 + -- player.growth[attrName] = player[attrName] * (globalCsv.adv_battle_attr_growth_ratio[attrName] or 1)
  105 + -- player[attrName] = player[attrName] + player.growth[attrName] * (player.level - 1)
105 end 106 end
106 107
107 player.hpMax = player.hp or 0 108 player.hpMax = player.hp or 0
@@ -198,8 +199,10 @@ function Battle:addEnemy(room, block, mapIdx, init) @@ -198,8 +199,10 @@ function Battle:addEnemy(room, block, mapIdx, init)
198 end 199 end
199 200
200 for _, buff in ipairs(buffs) do 201 for _, buff in ipairs(buffs) do
201 - enemy:addBuff(buff) 202 + player:addBuff(buff)
202 end 203 end
  204 + -- 新生成的怪 加上 已有的光环buff
  205 + player:checkAuraBuff(self:checkDiffAuraBuff({}, self:getAurasByMap()))
203 end 206 end
204 end 207 end
205 return player 208 return player
@@ -347,6 +350,8 @@ function Battle:afterRound() @@ -347,6 +350,8 @@ function Battle:afterRound()
347 350
348 self.player:triggerPassive(Passive.AFTER_ROUND) 351 self.player:triggerPassive(Passive.AFTER_ROUND)
349 352
  353 + self:checkAura()
  354 +
350 if self.player.isDead then 355 if self.player.isDead then
351 self.adv:over(false, nil, -2) 356 self.adv:over(false, nil, -2)
352 end 357 end
@@ -435,8 +440,116 @@ function Battle:initMapEffect(ilayer) @@ -435,8 +440,116 @@ function Battle:initMapEffect(ilayer)
435 end 440 end
436 441
437 442
  443 +-- 夹层 进入退出 接口 清理玩家身上的老光环 添加新的光环
  444 +function Battle:iLayerChange(oldMapIdx)
  445 + local auras = self:getActiveAuras()
  446 + local playerBuffs = self:checkDiffAuraBuff(self:getAurasByMap(oldMapIdx), auras)
  447 + local enemyBuffs = self:checkDiffAuraBuff(self:getAurasByMap(), auras)
  448 + self.player:checkAuraBuff(playerBuffs)
  449 + for _, enemy in pairs(self.player:getTeam(2)) do
  450 + enemy:checkAuraBuff(enemyBuffs)
  451 + end
  452 + self:setMapAuras(auras)
  453 +end
  454 +
  455 +-- 新的 关卡 关闭旧的战斗模块 清理 玩家身上的光环效果
  456 +function Battle:overBattle()
  457 + local buffs = self:checkDiffAuraBuff(self:getAurasByMap(), {})
  458 + self.player:checkAuraBuff(buffs)
  459 + self.adv.owner:getProperty("advTeam").player = self.player:getDB() -- 临时缓存住 battle 的player
  460 +end
  461 +
  462 +-- 初始化 新的 关卡
  463 +function Battle:newBattle()
  464 + local auras = self:getActiveAuras()
  465 + local buffs = self:checkDiffAuraBuff({}, auras)
  466 + self:setMapAuras(auras)
  467 +end
  468 +
  469 +-- 过了回合 检查光环
  470 +function Battle:checkAura()
  471 + local auras = self:getActiveAuras()
  472 + local buffs = self:checkDiffAuraBuff(self:getAurasByMap(), auras)
  473 + self.player:checkAuraBuff(buffs)
  474 + for _, enemy in pairs(self.player:getTeam(2)) do
  475 + enemy:checkAuraBuff(buffs)
  476 + end
  477 + self:setMapAuras(auras)
  478 +end
  479 +
  480 +-- 查找差异buff
  481 +function Battle:checkDiffAuraBuff(oldAuras, newAuras)
  482 + local auras = {}
  483 + for aurasId , count in pairs(oldAuras) do
  484 + auras[aurasId] = -count
  485 + end
  486 + for aurasId , count in pairs(newAuras) do
  487 + auras[aurasId] = (auras[aurasId] or 0) + count
  488 + end
  489 +
  490 + local buffs = {}
  491 + for aurasId , count in pairs(auras) do
  492 + local auraData = csvdb["adv_map_haloCsv"][aurasId]
  493 + if auraData then
  494 + for _, effect in ipairs(auraData.effect:toTableArray(true)) do
  495 + temp = buffs
  496 + for i = 1, #effect do
  497 + temp[effect[i]] = temp[effect[i]] or {}
  498 + temp = temp[effect[i]]
  499 + end
  500 + temp.count = (temp.count or 0) + count
  501 + if newAuras[aurasId] then
  502 + -- 加上 未消失标记
  503 + temp.exist = true
  504 + end
  505 + end
  506 + end
  507 + end
  508 + return buffs
  509 +end
  510 +
  511 +-- 获取所有生效的 光环
  512 +function Battle:getActiveAuras()
  513 + local auras = {}
  514 + for _, one in pairs(self.player:getAuras()) do
  515 + auras[one] = (auras[one] or 0) + 1
  516 + end
  517 + for _, enemy in pairs(self.player:getTeam(2)) do
  518 + for _, one in pairs(enemy:getAuras()) do
  519 + auras[one] = (auras[one] or 0) + 1
  520 + end
  521 + end
  522 + for _, build in pairs(self:getBuilds()) do
  523 + for _, one in pairs(build:getAuras()) do
  524 + auras[one] = (auras[one] or 0) + 1
  525 + end
  526 + end
  527 + return auras
  528 +end
  529 +
  530 +function Battle:setMapAuras(auras)
  531 + self.auras[self.adv:getCurMapIdx()] = auras
  532 +end
  533 +
  534 +function Battle:getAurasByMap(mapIdx)
  535 + mapIdx = mapIdx or self.adv:getCurMapIdx()
  536 + local auras = self.auras[mapIdx] or {}
  537 + return auras
  538 +end
  539 +
  540 +function Battle:getBuilds()
  541 + local team = {}
  542 + for _, build in pairs(self.builds[self.adv:getCurMapIdx()]) do
  543 + if not build.isDead and not build.lock then -- 已经翻开的
  544 + table.insert(team, build)
  545 + end
  546 + end
  547 + return team
  548 +end
  549 +
  550 +
438 --写入数据 551 --写入数据
439 -function Battle:saveDB() 552 +function Battle:saveDB(advInfo)
440 for idx, mapEnemys in pairs(self.enemys) do 553 for idx, mapEnemys in pairs(self.enemys) do
441 for _, enemy in ipairs(mapEnemys) do 554 for _, enemy in ipairs(mapEnemys) do
442 local block = self.adv:getBlock(enemy.roomId, enemy.blockId, idx) 555 local block = self.adv:getBlock(enemy.roomId, enemy.blockId, idx)
@@ -453,6 +566,7 @@ function Battle:saveDB() @@ -453,6 +566,7 @@ function Battle:saveDB()
453 end 566 end
454 end 567 end
455 end 568 end
  569 + advInfo.auras = self.auras
456 end 570 end
457 571
458 return Battle 572 return Battle
459 \ No newline at end of file 573 \ No newline at end of file
src/adv/AdvBlock.lua
@@ -48,6 +48,8 @@ function Block:updateEvent(event, isInit) @@ -48,6 +48,8 @@ function Block:updateEvent(event, isInit)
48 end 48 end
49 end 49 end
50 end 50 end
  51 + local oldet = self:getEventType()
  52 +
51 self.event = event 53 self.event = event
52 if not isInit and self.event then 54 if not isInit and self.event then
53 -- 判断下类型是不是错的 55 -- 判断下类型是不是错的
@@ -58,18 +60,49 @@ function Block:updateEvent(event, isInit) @@ -58,18 +60,49 @@ function Block:updateEvent(event, isInit)
58 end 60 end
59 self:randomEvent() 61 self:randomEvent()
60 end 62 end
  63 + self:quickDrop()
  64 +
  65 + if not isInit and self.isOpen then
  66 + local newet = self:getEventType()
  67 + if oldet ~= newet then
  68 + local em = {}
  69 + if oldet then
  70 + em[oldet] =1
  71 + end
  72 + if newet then
  73 + em[newet] =1
  74 + end
  75 +
  76 + local player = self.room.map.adv.battle.player
  77 + player:attrChangeCondBuffCheck(4, em)
  78 + for _, monster in pairs(player:getTeam(2)) do
  79 + monster:attrChangeCondBuffCheck(4, em)
  80 + end
  81 + end
  82 + end
61 end 83 end
62 84
63 function Block:clear() 85 function Block:clear()
64 - if self:getEventType() == AdvEventType.Trap then 86 + local et = self:getEventType()
  87 + if et == AdvEventType.Trap then
65 self.trapId = self.event.id 88 self.trapId = self.event.id
66 - elseif self:getEventType() == AdvEventType.Build then 89 + elseif et == AdvEventType.Build then
67 local build = self.room.map.adv.battle:getBuild(self.room.roomId, self.blockId, self.room.map.mapIdx) 90 local build = self.room.map.adv.battle:getBuild(self.room.roomId, self.blockId, self.room.map.mapIdx)
68 if build then 91 if build then
69 build.isDead = true 92 build.isDead = true
70 end 93 end
71 end 94 end
72 self.event = nil 95 self.event = nil
  96 +
  97 +
  98 + if et then
  99 + local em = {[et] = 1}
  100 + local player = self.room.map.adv.battle.player
  101 + player:attrChangeCondBuffCheck(4, em)
  102 + for _, monster in pairs(player:getTeam(2)) do
  103 + monster:attrChangeCondBuffCheck(4, em)
  104 + end
  105 + end
73 end 106 end
74 107
75 108
@@ -90,8 +123,10 @@ function Block:randomEvent() @@ -90,8 +123,10 @@ function Block:randomEvent()
90 enemy:triggerPassive(Passive.BORN_ONCE) 123 enemy:triggerPassive(Passive.BORN_ONCE)
91 124
92 adv.battle.player:triggerPassive(Passive.OPEN_MONSTER, {trigger = enemy}) 125 adv.battle.player:triggerPassive(Passive.OPEN_MONSTER, {trigger = enemy})
  126 + adv.battle.player:attrChangeCondBuffCheck(3, enemy:getClassify())
93 for _, monster in pairs(adv.battle.player:getTeam(2)) do 127 for _, monster in pairs(adv.battle.player:getTeam(2)) do
94 - adv.battle.player:triggerPassive(Passive.OPEN_MONSTER, {trigger = enemy}) 128 + monster:triggerPassive(Passive.OPEN_MONSTER, {trigger = enemy})
  129 + monster:attrChangeCondBuffCheck(3, enemy:getClassify())
95 end 130 end
96 end 131 end
97 randomFunc[AdvEventType.BOSS] = randomFunc[AdvEventType.Monster] 132 randomFunc[AdvEventType.BOSS] = randomFunc[AdvEventType.Monster]
@@ -208,6 +243,13 @@ function Block:randomEvent() @@ -208,6 +243,13 @@ function Block:randomEvent()
208 e:addBuff(buffId) 243 e:addBuff(buffId)
209 end 244 end
210 end 245 end
  246 + elseif data.target == 4 then
  247 + local enemys = self.room.map.adv:getCurMap():openBlocksIsMonsterByRoom(self.room.roomId)
  248 + for _, e in ipairs(enemys) do
  249 + for _, buffId in ipairs(buffs) do
  250 + e:addBuff(buffId)
  251 + end
  252 + end
211 end 253 end
212 254
213 if data.specialEff ~= "" then 255 if data.specialEff ~= "" then
@@ -263,10 +305,35 @@ function Block:open() @@ -263,10 +305,35 @@ function Block:open()
263 local adv = map.adv 305 local adv = map.adv
264 self.isOpen = true 306 self.isOpen = true
265 self:randomEvent() 307 self:randomEvent()
  308 + self:quickDrop()
  309 +
  310 + local et = self:getEventType()
  311 + if et then
  312 + local em = {[et] = 1}
  313 + local player = self.room.map.adv.battle.player
  314 + player:attrChangeCondBuffCheck(4, em)
  315 + for _, monster in pairs(player:getTeam(2)) do
  316 + monster:attrChangeCondBuffCheck(4, em)
  317 + end
  318 + end
266 return true 319 return true
267 end 320 end
268 321
  322 +function Block:quickDrop()
  323 + if self:getEventType() == AdvEventType.Drop and self.event.item then
  324 + local itemId, count = table.unpack(self.event.item)
  325 + if globalCsv.adv_auto_collect[itemId] then
  326 + self.room.map.adv:award({[itemId] = count}, {log = {desc = "clickDrop"}}, {roomId = self.room.roomId, blockId = self.blockId, tag = 1})
  327 + self:clear()
  328 + end
  329 + end
  330 +end
  331 +
269 function Block:getObstacle() 332 function Block:getObstacle()
  333 + if self:isMonster() then
  334 + local enemy = self.room.map.adv.battle:getEnemy(self.room.roomId, self.blockId)
  335 + return enemy:getObstacle()
  336 + end
270 local data = self:getEventData() 337 local data = self:getEventData()
271 if not data then return 0 end 338 if not data then return 0 end
272 return data.obstacle or 0 339 return data.obstacle or 0
src/adv/AdvBuff.lua
@@ -20,7 +20,7 @@ Buff.HP_CHANGE_NOW = 16 -- 生命变化(每回合生效,立刻生效) @@ -20,7 +20,7 @@ Buff.HP_CHANGE_NOW = 16 -- 生命变化(每回合生效,立刻生效)
20 Buff.BATTLE_BUFF = 17 -- 切换为战斗中的buff 20 Buff.BATTLE_BUFF = 17 -- 切换为战斗中的buff
21 Buff.CHANGE_DROP = 18 -- 转换掉落 21 Buff.CHANGE_DROP = 18 -- 转换掉落
22 Buff.BATTLE_PASSIVE = 19 -- 切换为战斗中的被动技 22 Buff.BATTLE_PASSIVE = 19 -- 切换为战斗中的被动技
23 -Buff.EXP_ADD = 20 -- 增加exp(每回合) 23 +-- Buff.EXP_ADD = 20 -- 增加exp(每回合)
24 Buff.DONT_DEFEND = 21 -- 不看守地板 -- 怪周围点半可点击 24 Buff.DONT_DEFEND = 21 -- 不看守地板 -- 怪周围点半可点击
25 Buff.SHOW_DANGER = 22 -- 扫雷 展示地上怪物和陷阱数量的标记 25 Buff.SHOW_DANGER = 22 -- 扫雷 展示地上怪物和陷阱数量的标记
26 Buff.SHOW_MONSTER_POS = 23 -- 蓝臂章训练场 感知 26 Buff.SHOW_MONSTER_POS = 23 -- 蓝臂章训练场 感知
@@ -34,6 +34,10 @@ Buff.Buff_EFFECT_CHANGE = 30 -- 改变 buff 效果 @@ -34,6 +34,10 @@ Buff.Buff_EFFECT_CHANGE = 30 -- 改变 buff 效果
34 Buff.Buff_NO_PASSIVE_MONSTER = 31 -- 地图被动刷新不出来怪物 34 Buff.Buff_NO_PASSIVE_MONSTER = 31 -- 地图被动刷新不出来怪物
35 Buff.SNEAK = 32 --潜行 35 Buff.SNEAK = 32 --潜行
36 Buff.DROP_BUFF_BY_ENEMY = 33 -- 怪物掉落加成 -- 怪物使用 36 Buff.DROP_BUFF_BY_ENEMY = 33 -- 怪物掉落加成 -- 怪物使用
  37 +Buff.GET_PASSIVE = 34 -- 获得 passive -- 结束失效
  38 +Buff.OBSTACLE_CHANGE = 35 -- 看守类型改变 -- 怪物使用 0 - 1
  39 +Buff.DISABLE_AURA = 36 -- 禁用光环
  40 +Buff.GET_AURA = 37 -- 获得光环
37 41
38 42
39 --角色一些属性的变化 43 --角色一些属性的变化
@@ -87,13 +91,24 @@ local function commonAttCond(_Buff, attrName) @@ -87,13 +91,24 @@ local function commonAttCond(_Buff, attrName)
87 if buff then 91 if buff then
88 effectCount = buff.layer 92 effectCount = buff.layer
89 end 93 end
  94 + elseif self.buffData.effectValue4 == 3 then
  95 + local classify = tonumber(self.buffData.effectValue5) -- 怪标签
  96 + local enemy = self.owner.battle.player:getTeam(2)
  97 + for _, one in pairs(enemy) do
  98 + if one.isClassify and one:isClassify(classify) then
  99 + effectCount = effectCount + 1
  100 + end
  101 + end
  102 + elseif self.buffData.effectValue4 == 4 then
  103 + local eventType = tonumber(self.buffData.effectValue5) -- event 类型
  104 + effectCount = #self.owner.battle.adv:getCurMap():getEventTypeAllMap(eventType)
90 end 105 end
91 return self.buffData.effectValue2 * effectCount 106 return self.buffData.effectValue2 * effectCount
92 end 107 end
93 108
94 _Buff.getEffectBy = function(self) 109 _Buff.getEffectBy = function(self)
95 local cond = nil 110 local cond = nil
96 - if self.buffData.effectValue4 == 2 then 111 + if self.buffData.effectValue4 == 2 or self.buffData.effectValue4 == 3 or self.buffData.effectValue4 == 4 then
97 cond = tonumber(self.buffData.effectValue5) 112 cond = tonumber(self.buffData.effectValue5)
98 end 113 end
99 return self.buffData.effectValue4, attrName, cond 114 return self.buffData.effectValue4, attrName, cond
@@ -302,18 +317,30 @@ local BuffFactory = { @@ -302,18 +317,30 @@ local BuffFactory = {
302 end 317 end
303 end, 318 end,
304 319
305 - [Buff.EXP_ADD] = function(_Buff)  
306 - _Buff._afterRound = function(self)  
307 - local value = self:effect()  
308 - self.owner.battle.player:addExp(value) 320 + -- [Buff.EXP_ADD] = function(_Buff)
  321 + -- _Buff._afterRound = function(self)
  322 + -- local value = self:effect()
  323 + -- self.owner.battle.player:addExp(value)
  324 + -- end
  325 + -- _Buff._effectValue = function(self)
  326 + -- -- 经验值
  327 + -- return self.buffData.effectValue1 * self.layer
  328 + -- end
  329 + -- end,
  330 +
  331 + [Buff.DISABLE_BUFF] = function(_Buff)
  332 + _Buff._effectValue = function(self)
  333 + return self.buffData.effectValue1
309 end 334 end
  335 + end,
  336 +
  337 + [Buff.DISABLE_AURA] = function(_Buff)
310 _Buff._effectValue = function(self) 338 _Buff._effectValue = function(self)
311 - -- 经验值  
312 - return self.buffData.effectValue1 * self.layer 339 + return self.buffData.effectValue1
313 end 340 end
314 end, 341 end,
315 342
316 - [Buff.DISABLE_BUFF] = function(_Buff) 343 + [Buff.GET_AURA] = function(_Buff)
317 _Buff._effectValue = function(self) 344 _Buff._effectValue = function(self)
318 return self.buffData.effectValue1 345 return self.buffData.effectValue1
319 end 346 end
@@ -378,6 +405,14 @@ local BuffFactory = { @@ -378,6 +405,14 @@ local BuffFactory = {
378 self.layer = self.buffData.effectValue1 405 self.layer = self.buffData.effectValue1
379 end 406 end
380 end, 407 end,
  408 + [Buff.GET_PASSIVE] = function( _Buff )
  409 + _Buff._init = function(self)
  410 + self.owner:addPassive({id = self.buffData.effectValue1})
  411 + end
  412 + _Buff._endBuff = function(self)
  413 + self.owner:delPassiveById(self.buffData.effectValue1)
  414 + end
  415 + end
381 } 416 }
382 417
383 -- 同样的返回 effectValue1, effectValue2 * self.layer 类型的buff 418 -- 同样的返回 effectValue1, effectValue2 * self.layer 类型的buff
@@ -439,7 +474,18 @@ function Buff:initNew(release, data) @@ -439,7 +474,18 @@ function Buff:initNew(release, data)
439 end 474 end
440 end 475 end
441 476
442 -function Buff:createAfter() 477 +function Buff:createAfter(layer)
  478 + layer = layer or 1
  479 + local otype, maxLayer = self:getOverlay()
  480 + if otype then
  481 + self.layer = layer
  482 + if maxLayer ~= 0 then
  483 + self.layer = math.min(maxLayer, self.layer)
  484 + end
  485 + else
  486 + self.layer = 1
  487 + end
  488 +
443 if self._init then 489 if self._init then
444 self:_init() 490 self:_init()
445 end 491 end
@@ -626,12 +672,13 @@ function Buff:getOverlay() @@ -626,12 +672,13 @@ function Buff:getOverlay()
626 end 672 end
627 673
628 -- 叠加 674 -- 叠加
629 -function Buff:overlay(releaser, data) 675 +function Buff:overlay(releaser, data, layer)
630 local otype, maxLayer = self:getOverlay() 676 local otype, maxLayer = self:getOverlay()
631 if self.isDel or not otype then -- 新获得的 (不可叠加相当于新获得的) 677 if self.isDel or not otype then -- 新获得的 (不可叠加相当于新获得的)
632 - self.isDel = false  
633 self:endBuff() 678 self:endBuff()
  679 + self.isDel = false
634 self:initNew(releaser, data) 680 self:initNew(releaser, data)
  681 + self:createAfter(layer)
635 else 682 else
636 -- 重置回合 次数 683 -- 重置回合 次数
637 self.roundSpace = 0 684 self.roundSpace = 0
@@ -644,7 +691,7 @@ function Buff:overlay(releaser, data) @@ -644,7 +691,7 @@ function Buff:overlay(releaser, data)
644 691
645 self.release = releaser or self.release 692 self.release = releaser or self.release
646 -- 叠加层数 693 -- 叠加层数
647 - self.layer = self.layer + 1 694 + self.layer = self.layer + layer
648 if maxLayer ~= 0 then 695 if maxLayer ~= 0 then
649 self.layer = math.min(maxLayer, self.layer) 696 self.layer = math.min(maxLayer, self.layer)
650 end 697 end
@@ -655,14 +702,32 @@ function Buff:overlay(releaser, data) @@ -655,14 +702,32 @@ function Buff:overlay(releaser, data)
655 end 702 end
656 703
657 -- 扣减层数 704 -- 扣减层数
658 -function Buff:uncover()  
659 - if self.layer <= 1 then 705 +function Buff:uncover(layer, isAura)
  706 + layer = layer or 1
  707 + local oldLayer = self.layer
  708 +
  709 + self.layer = self.layer - layer
  710 +
  711 + if self.layer <= 0 then
660 self.isDel = true 712 self.isDel = true
661 end 713 end
662 714
663 - self.layer = self.layer - 1  
664 - if self._uncover then  
665 - self:_uncover() 715 + if isAura then
  716 + if layer == -1 then
  717 + self.layer = 0
  718 + self.isDel = true
  719 + else
  720 + self.layer = math.max(1, self.layer)
  721 + self.isDel = false
  722 + end
  723 + end
  724 +
  725 + if self.isDel then return end
  726 +
  727 + if oldLayer ~= self.layer then
  728 + if self._uncover then
  729 + self:_uncover()
  730 + end
666 end 731 end
667 end 732 end
668 733
src/adv/AdvMap.lua
@@ -256,7 +256,7 @@ function Map:openBlock(roomId, blockId, isPlayer, ignoreBack) @@ -256,7 +256,7 @@ function Map:openBlock(roomId, blockId, isPlayer, ignoreBack)
256 256
257 if status then 257 if status then
258 if isPlayer then 258 if isPlayer then
259 - self.adv.battle:triggerPassive(Passive.OPEN_BLOCK) 259 + self.adv.battle:triggerPassive(Passive.OPEN_BLOCK, {roomId = roomId, blockId = blockId})
260 self.adv.owner:checkTaskEnter("AdvOpenBlock") 260 self.adv.owner:checkTaskEnter("AdvOpenBlock")
261 261
262 -- 潜行检查 262 -- 潜行检查
@@ -272,8 +272,8 @@ function Map:openBlock(roomId, blockId, isPlayer, ignoreBack) @@ -272,8 +272,8 @@ function Map:openBlock(roomId, blockId, isPlayer, ignoreBack)
272 if not ignoreBack then 272 if not ignoreBack then
273 self.adv:backBlockChange(roomId, blockId) 273 self.adv:backBlockChange(roomId, blockId)
274 end 274 end
275 -  
276 end 275 end
  276 + return status
277 end 277 end
278 278
279 function Map:openBlocksBySize(roomId, blockId, size, isPlayer, ignoreBack) 279 function Map:openBlocksBySize(roomId, blockId, size, isPlayer, ignoreBack)
@@ -292,6 +292,41 @@ function Map:openBlocksByRoom(roomId, isPlayer, ignoreBack) @@ -292,6 +292,41 @@ function Map:openBlocksByRoom(roomId, isPlayer, ignoreBack)
292 end 292 end
293 end 293 end
294 294
  295 +function Map:openBlocksIsMonsterByRoom(roomId, count, isPlayer, ignoreBack)
  296 + local room = self.rooms[roomId]
  297 + if not room then return end
  298 +
  299 + local allBlock = {}
  300 + for blockId, block in pairs(room.blocks) do
  301 + if block:isMonster() and not block.isOpen then
  302 + table.insert(allBlock, blockId)
  303 + end
  304 + end
  305 +
  306 + local enemys = {}
  307 + local openBlock = function(blockId)
  308 + if self:openBlock(roomId, blockId, isPlayer, ignoreBack) then
  309 + local e = self.adv.battle:getEnemy(roomId, blockId)
  310 + if e then
  311 + table.insert(enemys, e)
  312 + end
  313 + end
  314 + end
  315 +
  316 + if not count or count == -1 or count >= len(allBlock) then
  317 + for _, blockId in ipairs(allBlock) do
  318 + openBlock(blockId)
  319 + end
  320 + else
  321 + for i = 1, count do
  322 + local idx = math.randomInt(1, len(allBlock))
  323 + openBlock(allBlock[idx])
  324 + table.remove(allBlock, idx)
  325 + end
  326 + end
  327 + return enemys
  328 +end
  329 +
295 function Map:openAllBlocks(isPlayer, ignoreBack) 330 function Map:openAllBlocks(isPlayer, ignoreBack)
296 for roomId, room in pairs(self.rooms) do 331 for roomId, room in pairs(self.rooms) do
297 self:openBlocksByRoom(room.roomId, isPlayer, ignoreBack) 332 self:openBlocksByRoom(room.roomId, isPlayer, ignoreBack)
@@ -309,6 +344,22 @@ function Map:getRBByPos(c, r) @@ -309,6 +344,22 @@ function Map:getRBByPos(c, r)
309 end 344 end
310 end 345 end
311 346
  347 +function Map:getDistance(froomId, fblockId, troomId, tblockId)
  348 + local distance = -1
  349 + local room1 = self.rooms[froomId]
  350 + local room2 = self.rooms[troomId]
  351 + if room1 and room2 then
  352 + local block1 = room1[fblockId]
  353 + local block2 = room2[tblockId]
  354 + if block1 and block2 then
  355 + local c1, r1 = room1:tranLtoG(block1.col, block1.row)
  356 + local c2, r2 = room2:tranLtoG(block2.col, block2.row)
  357 + distance = math.max(math.abs(c1 - c2), math.abs(r1 - r2))
  358 + end
  359 + end
  360 + return distance
  361 +end
  362 +
312 function Map:getAroundBlocks(room, block) 363 function Map:getAroundBlocks(room, block)
313 local blocks = {} 364 local blocks = {}
314 local range = {1, -1} 365 local range = {1, -1}
@@ -412,6 +463,18 @@ function Map:getEnemysBySize(roomId, blockId, size) @@ -412,6 +463,18 @@ function Map:getEnemysBySize(roomId, blockId, size)
412 return enemys 463 return enemys
413 end 464 end
414 465
  466 +function Map:getEventTypeAllMap(eventType)
  467 + local blocks = {}
  468 + if not eventType then return blocks end
  469 + for roomId, room in pairs(self.rooms) do
  470 + for blockId, block in pairs(room.blocks) do
  471 + if block.isOpen and block:getEventType() == eventType then
  472 + table.insert(blocks, block)
  473 + end
  474 + end
  475 + end
  476 + return blocks
  477 +end
415 -----------------------------随机地图----------------------------- 478 -----------------------------随机地图-----------------------------
416 479
417 -- isEnter isNewRelay 区分中继层的类型 --是否是开始进入 是否是第一次进入 480 -- isEnter isNewRelay 区分中继层的类型 --是否是开始进入 是否是第一次进入
src/adv/AdvPassive.lua
@@ -7,6 +7,8 @@ Filter.HP_LOW = 4 -- 血量&lt;value% @@ -7,6 +7,8 @@ Filter.HP_LOW = 4 -- 血量&lt;value%
7 Filter.BUFF_BY_TYPE = 5 -- 指定类型buff 7 Filter.BUFF_BY_TYPE = 5 -- 指定类型buff
8 Filter.BUFF_BY_ID = 6 -- 指定id的buff 8 Filter.BUFF_BY_ID = 6 -- 指定id的buff
9 Filter.CAMP = 7 -- 玩家是指定阵营 9 Filter.CAMP = 7 -- 玩家是指定阵营
  10 +Filter.RANGE = 8 -- 筛选范围 (触发是地块)
  11 +Filter.CLASSIFY = 9 -- 标签
10 12
11 local FilterFactory = {} 13 local FilterFactory = {}
12 FilterFactory[Filter.HP_UP_WITH_EQUAL] = function (_Filter) 14 FilterFactory[Filter.HP_UP_WITH_EQUAL] = function (_Filter)
@@ -46,6 +48,21 @@ FilterFactory[Filter.CAMP] = function (_Filter) @@ -46,6 +48,21 @@ FilterFactory[Filter.CAMP] = function (_Filter)
46 end 48 end
47 end 49 end
48 50
  51 +FilterFactory[Filter.RANGE] = function (_Filter)
  52 + _Filter._execute = function (self, target, params)
  53 + if self.owner.blockId and self.owner.roomId and params.blockId and params.roomId then
  54 + local distance = self.owner.battle.adv:getCurMap():getDistance(self.owner.roomId, self.owner.blockId, params.roomId, params.blockId)
  55 + return distance ~= -1 and distance <= self.value
  56 + end
  57 + return false
  58 + end
  59 +end
  60 +
  61 +FilterFactory[Filter.CLASSIFY] = function (_Filter)
  62 + _Filter._execute = function (self, target)
  63 + return target.isClassify and target:isClassify(self.value)
  64 + end
  65 +end
49 66
50 function Filter:ctor(params) 67 function Filter:ctor(params)
51 self.owner = params.owner 68 self.owner = params.owner
@@ -79,7 +96,7 @@ function Filter:execute(params) @@ -79,7 +96,7 @@ function Filter:execute(params)
79 return 96 return
80 end 97 end
81 if self:_execute(target) then 98 if self:_execute(target) then
82 - return self:_execute(target) 99 + return self:_execute(target, params)
83 end 100 end
84 end 101 end
85 102
@@ -120,6 +137,7 @@ Passive.GET_BUFF = 28 --获得指定buff @@ -120,6 +137,7 @@ Passive.GET_BUFF = 28 --获得指定buff
120 Passive.OPEN_BLOCK = 29 --翻开格子 137 Passive.OPEN_BLOCK = 29 --翻开格子
121 Passive.OPEN_MONSTER = 30 --翻开怪物 138 Passive.OPEN_MONSTER = 30 --翻开怪物
122 Passive.PLAYER_BUFF = 31 --玩家获得buff 139 Passive.PLAYER_BUFF = 31 --玩家获得buff
  140 +
123 Passive.PLAYER_BUFF_CLASSIFY = 35 -- 获得指定标签的buff 141 Passive.PLAYER_BUFF_CLASSIFY = 35 -- 获得指定标签的buff
124 142
125 -- 不同的开启条件 143 -- 不同的开启条件
@@ -442,6 +460,7 @@ end @@ -442,6 +460,7 @@ end
442 460
443 --3=翻开自己所在格子 461 --3=翻开自己所在格子
444 function Passive:effect3(value) 462 function Passive:effect3(value)
  463 + if not self.owner.roomId or not self.owner.blockId then return end
445 if value == 0 then 464 if value == 0 then
446 self.owner.battle.adv:getCurMap():openBlock(self.owner.roomId, self.owner.blockId) 465 self.owner.battle.adv:getCurMap():openBlock(self.owner.roomId, self.owner.blockId)
447 elseif value > 0 then 466 elseif value > 0 then
@@ -494,7 +513,7 @@ function Passive:effect8(dropId) @@ -494,7 +513,7 @@ function Passive:effect8(dropId)
494 skynet.error(string.format("CSVDATA Error adv_map_passive %s effect 8 not id %s in event_drop", self.id, dropId)) 513 skynet.error(string.format("CSVDATA Error adv_map_passive %s effect 8 not id %s in event_drop", self.id, dropId))
495 end 514 end
496 local item = dropData["range"]:randWeight(true) 515 local item = dropData["range"]:randWeight(true)
497 - self.owner.battle.adv:backReward(self.owner.battle.adv:award({[item[1]] = item[2]}, {log = {desc = "passive", int1 = self.id}}), {roomId = self.owner.roomId, blockId = self.owner.blockId}) 516 + self.owner.battle.adv:award({[item[1]] = item[2]}, {log = {desc = "passive", int1 = self.id}}, {roomId = self.owner.roomId, blockId = self.owner.blockId})
498 517
499 end 518 end
500 519
@@ -509,7 +528,7 @@ function Passive:effect9(itemId, triggerPms, ratio, max) @@ -509,7 +528,7 @@ function Passive:effect9(itemId, triggerPms, ratio, max)
509 return 528 return
510 end 529 end
511 if not cond then return end 530 if not cond then return end
512 - self.owner.battle.adv:backReward(self.owner.battle.adv:award({[itemId] = math.floor(math.max(0, math.min(max, cond / ratio)))}, {log = {desc = "passive", int1 = self.id}}), {roomId = self.owner.roomId, blockId = self.owner.blockId}) 531 + self.owner.battle.adv:award({[itemId] = math.floor(math.max(0, math.min(max, cond / ratio)))}, {log = {desc = "passive", int1 = self.id}}, {roomId = self.owner.roomId, blockId = self.owner.blockId})
513 end 532 end
514 533
515 --10=战斗额外掉落次数 534 --10=战斗额外掉落次数
@@ -561,5 +580,22 @@ function Passive:effect14(value, triggerPms, enemyId) @@ -561,5 +580,22 @@ function Passive:effect14(value, triggerPms, enemyId)
561 end 580 end
562 end 581 end
563 582
  583 +--15=翻开房间内的count 个怪 并且增加一个buff
  584 +function Passive:effect15(count, triggerPms, buffId)
  585 + local roomId = self.owner.roomId
  586 + if not roomId then return end
  587 + local enemys = self.owner.battle.adv:getCurMap():openBlocksIsMonsterByRoom(roomId, count)
  588 + for _, e in ipairs(enemys) do
  589 + e:addBuff(buffId)
  590 + end
  591 +end
  592 +
  593 +--16=转变 value 范围内的掉落物 为 id count
  594 +function Passive:effect16(value, triggerPms, changeType)
  595 + if not self.owner.roomId or not self.owner.blockId then return end
  596 + local blocks = self.owner.battle.adv:getCurMap():getBlocksBySize(self.owner.roomId, self.owner.blockId, value)
  597 + self.owner.battle.adv:blockDropChange(changeType, blocks)
  598 +end
  599 +
564 600
565 return Passive 601 return Passive
566 \ No newline at end of file 602 \ No newline at end of file
src/adv/AdvPlayer.lua
@@ -90,6 +90,12 @@ end @@ -90,6 +90,12 @@ end
90 function BaseObject:clear() 90 function BaseObject:clear()
91 self.buffs = {} 91 self.buffs = {}
92 self.passives = {} 92 self.passives = {}
  93 + if self:is("Enemy") then
  94 + self.battle.player:attrChangeCondBuffCheck(3, self:getClassify())
  95 + for _, monster in pairs(self.battle.player:getTeam(2)) do
  96 + monster:attrChangeCondBuffCheck(3, self:getClassify())
  97 + end
  98 + end
93 end 99 end
94 100
95 function BaseObject:addPassive(params) 101 function BaseObject:addPassive(params)
@@ -137,7 +143,21 @@ function BaseObject:getDisablePassiveCount() @@ -137,7 +143,21 @@ function BaseObject:getDisablePassiveCount()
137 return count 143 return count
138 end 144 end
139 145
140 -function BaseObject:addBuff(buffId, releaser) 146 +function BaseObject:getDisableAuraCount()
  147 + local count
  148 + for _, buff in ipairs(self.buffs) do
  149 + if not buff:isHide() and buff:getType() == Buff.DISABLE_AURA then
  150 + if buff:effect() == 0 then
  151 + return 0
  152 + end
  153 + count = (count or 0) + buff:effect()
  154 + end
  155 + end
  156 + return count
  157 +end
  158 +
  159 +function BaseObject:addBuff(buffId, releaser, layer)
  160 + layer = layer or 1
141 local buffData = csvdb["adv_map_buffCsv"][buffId] 161 local buffData = csvdb["adv_map_buffCsv"][buffId]
142 if not buffData then return end 162 if not buffData then return end
143 for _, buff in ipairs(self.buffs) do 163 for _, buff in ipairs(self.buffs) do
@@ -151,7 +171,7 @@ function BaseObject:addBuff(buffId, releaser) @@ -151,7 +171,7 @@ function BaseObject:addBuff(buffId, releaser)
151 local oldBuff = self:getBuffById(buffId) 171 local oldBuff = self:getBuffById(buffId)
152 if oldBuff then 172 if oldBuff then
153 if not oldBuff:checkKeep() then return end 173 if not oldBuff:checkKeep() then return end
154 - oldBuff:overlay(releaser, {}) -- 叠加 174 + oldBuff:overlay(releaser, {}, layer) -- 叠加
155 else 175 else
156 -- 不能保持的buff 也加不上去 176 -- 不能保持的buff 也加不上去
157 if not Buff.checkKeep({ 177 if not Buff.checkKeep({
@@ -161,10 +181,11 @@ function BaseObject:addBuff(buffId, releaser) @@ -161,10 +181,11 @@ function BaseObject:addBuff(buffId, releaser)
161 }) then return end 181 }) then return end
162 local buff = Buff.create(self, releaser, {id = buffId}) 182 local buff = Buff.create(self, releaser, {id = buffId})
163 table.insert(self.buffs, buff) 183 table.insert(self.buffs, buff)
164 - buff:createAfter() 184 + buff:createAfter(layer)
165 end 185 end
166 self:triggerPassive(Passive.GET_BUFF, {trigger = releaser, buffId = buffId}) 186 self:triggerPassive(Passive.GET_BUFF, {trigger = releaser, buffId = buffId})
167 self:triggerPassive(Passive.PLAYER_BUFF_CLASSIFY, {trigger = releaser, classify = buffData.classify}) 187 self:triggerPassive(Passive.PLAYER_BUFF_CLASSIFY, {trigger = releaser, classify = buffData.classify})
  188 + self:attrChangeCondBuffCheck(2, buffId)
168 return true 189 return true
169 end 190 end
170 191
@@ -217,6 +238,44 @@ end @@ -217,6 +238,44 @@ end
217 function BaseObject:reSetSpMax() 238 function BaseObject:reSetSpMax()
218 end 239 end
219 240
  241 +function BaseObject:checkAuraBuff(buffs)
  242 +end
  243 +
  244 +function BaseObject:getAuras()
  245 + local disable = self:getDisableAuraCount()
  246 + local auras = {}
  247 + local function addAura(one)
  248 + if disable > 0 then
  249 + disable = disable - 1
  250 + else
  251 + table.insert(auras, one)
  252 + end
  253 + end
  254 + if self:is("Enemy") then
  255 + local halo = csvdb["event_monsterCsv"][self.monsterId].halo
  256 + if halo then
  257 + for _, one in ipairs(halo:toArray(true, "=")) do
  258 + addAura(one)
  259 + end
  260 + end
  261 + elseif self:is("Build") then
  262 + local halo = csvdb["event_buildingCsv"][self.id].halo
  263 + if halo then
  264 + for _, one in ipairs(halo:toArray(true, "=")) do
  265 + addAura(one)
  266 + end
  267 + end
  268 + end
  269 +
  270 + for _, buff in ipairs(self.buffs) do
  271 + if not buff:isHide() and buff:getType() == Buff.GET_AURA then
  272 + addAura(buff:effect())
  273 + end
  274 + end
  275 +
  276 + return auras
  277 +end
  278 +
220 279
221 -- 通用的buff 效果汇总 -- 0 固定 1百分比 两种分类 280 -- 通用的buff 效果汇总 -- 0 固定 1百分比 两种分类
222 function BaseObject:getCommonBuffEffect(bType, otherCond) 281 function BaseObject:getCommonBuffEffect(bType, otherCond)
@@ -417,7 +476,7 @@ function BaseObject:hurt(value, releaser, params) @@ -417,7 +476,7 @@ function BaseObject:hurt(value, releaser, params)
417 if self.hp == 0 then 476 if self.hp == 0 then
418 self:triggerPassive(Passive.SELF_DEAD) 477 self:triggerPassive(Passive.SELF_DEAD)
419 for _, team in ipairs(self:getTeam(1, true)) do 478 for _, team in ipairs(self:getTeam(1, true)) do
420 - team:triggerPassive(Passive.TEAM_DEAD) 479 + team:triggerPassive(Passive.TEAM_DEAD, {trigger = self})
421 end 480 end
422 481
423 if (params.hurtType == 6 or params.hurtType == 2) and self ~= self.battle.player then 482 if (params.hurtType == 6 or params.hurtType == 2) and self ~= self.battle.player then
@@ -505,6 +564,50 @@ function BaseObject:getTeam(nType, noSelf, mapIdx, includeLock) @@ -505,6 +564,50 @@ function BaseObject:getTeam(nType, noSelf, mapIdx, includeLock)
505 return team 564 return team
506 end 565 end
507 566
  567 +function BaseObject:attrChangeCondBuffCheck(etype, cond)
  568 + local effect = {}
  569 + if etype == 3 then
  570 + if type(cond) ~= "string" then
  571 + return
  572 + end
  573 + local temp = cond:toArray(true, " ")
  574 + cond = {}
  575 + for _, one in pairs(temp) do
  576 + cond[one] = 1
  577 + end
  578 + elseif etype == 4 then
  579 + if not cond then
  580 + cond = {}
  581 + end
  582 + if type(cond) == "number" then
  583 + cond = {[cond] = 1}
  584 + end
  585 + end
  586 + for _, buff in ipairs(self.buffs) do
  587 + if not buff:isHide() and (buff:getType() == Buff.ATTR_CHANGE_COND) then
  588 + local _et, _attr, _co = buff:getEffectBy()
  589 + if etype == _et then
  590 + if etype == 3 or etype == 4 then
  591 + if cond[_co] then
  592 + effect[_attr] = 1
  593 + end
  594 + else
  595 + if (not _co or _co == cond) then
  596 + effect[_attr] = 1
  597 + end
  598 + end
  599 + end
  600 + end
  601 + end
  602 + for attrName, _ in pairs(effect) do
  603 + if attrName == "hp" then
  604 + self:reSetHpMax()
  605 + else
  606 + self:reSetAttr(attrName)
  607 + end
  608 + end
  609 +end
  610 +
508 function BaseObject:getDB() 611 function BaseObject:getDB()
509 local db = {} 612 local db = {}
510 db.hp = self.hp 613 db.hp = self.hp
@@ -557,6 +660,51 @@ function Enemy:isEnemy() @@ -557,6 +660,51 @@ function Enemy:isEnemy()
557 return true 660 return true
558 end 661 end
559 662
  663 +function Enemy:getObstacle()
  664 + local obstacle = csvdb["event_monsterCsv"][self.monsterId].obstacle
  665 + if obstacle == 0 and self:hadBuff(Buff.OBSTACLE_CHANGE) then
  666 + obstacle = 1
  667 + end
  668 + return obstacle
  669 +end
  670 +
  671 +function Enemy:isClassify(check)
  672 + local classify = self:getClassify()
  673 + return classify and classify:sismember(check, " ")
  674 +end
  675 +
  676 +function Enemy:getClassify()
  677 + return csvdb["event_monsterCsv"][self.monsterId].classify
  678 +end
  679 +
  680 +-- 0=所有 1=怪物 2=玩家
  681 +function Enemy:checkAuraBuff(buffs)
  682 + local needBuffs = {}
  683 +
  684 + for buffId, info in pairs(buffs[0] or {}) do
  685 + needBuffs[buffId] = needBuffs[buffId] or {}
  686 + needBuffs[buffId].count = (needBuffs[buffId].count or 0) + info.count
  687 + needBuffs[buffId].exist = info.exist
  688 + end
  689 +
  690 + for buffId, info in pairs(buffs[1] or {}) do
  691 + needBuffs[buffId] = needBuffs[buffId] or {}
  692 + needBuffs[buffId].count = (needBuffs[buffId].count or 0) + info.count
  693 + needBuffs[buffId].exist = info.exist
  694 + end
  695 +
  696 + for buffId, info in pairs(needBuffs) do
  697 + if info.count < 0 then
  698 + local buff = self:getBuffById(buffId)
  699 + if buff then
  700 + buff:uncover(info.exist and -info.count or -1, true)
  701 + end
  702 + elseif count > 0 then
  703 + self:addBuff(buffId, nil, info.count)
  704 + end
  705 + end
  706 +end
  707 +
560 function Enemy:kill() 708 function Enemy:kill()
561 self:hurt(self.hp, self.battle.player, {hurtType = 5}) 709 self:hurt(self.hp, self.battle.player, {hurtType = 5})
562 end 710 end
@@ -569,44 +717,44 @@ end @@ -569,44 +717,44 @@ end
569 717
570 function Player:initData(data) 718 function Player:initData(data)
571 Player.super.initData(self, data) 719 Player.super.initData(self, data)
572 - self.level = data.level or 1 --level 每增加1级 属性增长 growth * baseAttr 720 + -- self.level = data.level or 1 --level 每增加1级 属性增长 growth * baseAttr
573 self.growth = data.growth 721 self.growth = data.growth
574 - self.exp = data.exp or 0 722 + -- self.exp = data.exp or 0
575 self.sp = data.sp or 100 723 self.sp = data.sp or 100
576 self.spMax = data.spMax or 100 724 self.spMax = data.spMax or 100
577 self._spMax = data._spMax or 100 725 self._spMax = data._spMax or 100
578 end 726 end
579 727
580 -function Player:addExp(value)  
581 - -- buff 经验加成  
582 - local up = self:getCommonBuffEffect(Buff.EXP_UP)  
583 - value = math.ceil((value + up[0]) * (1 + up[1]))  
584 -  
585 - if value <= 0 then return end  
586 - local newExp = self.exp + value  
587 - local level = self.level  
588 - if level >= #csvdb["adv_levelCsv"] then return end  
589 - while true do  
590 - local curData = csvdb["adv_levelCsv"][level]  
591 - if newExp < curData.exp then break end  
592 - level = level + 1  
593 - newExp = newExp - curData.exp  
594 - if level >= #csvdb["adv_levelCsv"] then break end  
595 - end  
596 - local delta = level - self.level  
597 -  
598 - self.battle.adv:pushBackEvent(AdvBackEventType.Exp, {delta = value})  
599 -  
600 - if delta > 0 then  
601 - for attr, _ in pairs(AdvAttsEnum) do  
602 - self:addBaseAttr(attr, self.growth[attr] * delta, 0, true)  
603 - end  
604 - self.battle.adv:pushBackEvent(AdvBackEventType.Level, {level = level, delta = delta})  
605 - end  
606 - self.level = level  
607 - self.exp = newExp  
608 - return value  
609 -end 728 +-- function Player:addExp(value)
  729 +-- -- buff 经验加成
  730 +-- local up = self:getCommonBuffEffect(Buff.EXP_UP)
  731 +-- value = math.ceil((value + up[0]) * (1 + up[1]))
  732 +
  733 +-- if value <= 0 then return end
  734 +-- local newExp = self.exp + value
  735 +-- local level = self.level
  736 +-- if level >= #csvdb["adv_levelCsv"] then return end
  737 +-- while true do
  738 +-- local curData = csvdb["adv_levelCsv"][level]
  739 +-- if newExp < curData.exp then break end
  740 +-- level = level + 1
  741 +-- newExp = newExp - curData.exp
  742 +-- if level >= #csvdb["adv_levelCsv"] then break end
  743 +-- end
  744 +-- local delta = level - self.level
  745 +
  746 +-- self.battle.adv:pushBackEvent(AdvBackEventType.Exp, {delta = value})
  747 +
  748 +-- if delta > 0 then
  749 +-- for attr, _ in pairs(AdvAttsEnum) do
  750 +-- self:addBaseAttr(attr, self.growth[attr] * delta, 0, true)
  751 +-- end
  752 +-- self.battle.adv:pushBackEvent(AdvBackEventType.Level, {level = level, delta = delta})
  753 +-- end
  754 +-- self.level = level
  755 +-- self.exp = newExp
  756 +-- return value
  757 +-- end
610 --vtype 0/1 值/% 758 --vtype 0/1 值/%
611 function Player:addBaseAttr(attr, value, vtype, ignoreBack) 759 function Player:addBaseAttr(attr, value, vtype, ignoreBack)
612 local attrName = attr 760 local attrName = attr
@@ -696,7 +844,6 @@ end @@ -696,7 +844,6 @@ end
696 function Player:addBuff(buffId, releaser) 844 function Player:addBuff(buffId, releaser)
697 local status = Player.super.addBuff(self, buffId, releaser) 845 local status = Player.super.addBuff(self, buffId, releaser)
698 if status then 846 if status then
699 - self.battle.player:attrChangeCondBuffCheck(2, buffId)  
700 self.battle.adv:checkAchievement(self.battle.adv.AchievType.GetBuff, 1, buffId) 847 self.battle.adv:checkAchievement(self.battle.adv.AchievType.GetBuff, 1, buffId)
701 self.battle.adv:pushBackEvent(AdvBackEventType.Buff, {buffId = buffId}) 848 self.battle.adv:pushBackEvent(AdvBackEventType.Buff, {buffId = buffId})
702 self.battle:triggerPassive(Passive.PLAYER_BUFF, {buffId = buffId}) 849 self.battle:triggerPassive(Passive.PLAYER_BUFF, {buffId = buffId})
@@ -707,23 +854,30 @@ function Player:addBuff(buffId, releaser) @@ -707,23 +854,30 @@ function Player:addBuff(buffId, releaser)
707 end 854 end
708 return status 855 return status
709 end 856 end
  857 +-- 0=所有 1=怪物 2=玩家
  858 +function Player:checkAuraBuff(buffs)
  859 + local needBuffs = {}
710 860
711 -function Player:attrChangeCondBuffCheck(etype, cond)  
712 - local effect = {}  
713 - for _, buff in ipairs(self.buffs) do  
714 - if not buff:isHide() and (buff:getType() == Buff.ATTR_CHANGE_COND) then  
715 - local _et, _attr, _co = buff:getEffectBy()  
716 - if etype == _et and (not _co or _co == cond) then  
717 - effect[_attr] = 1  
718 - end  
719 -  
720 - end 861 + for buffId, info in pairs(buffs[0] or {}) do
  862 + needBuffs[buffId] = needBuffs[buffId] or {}
  863 + needBuffs[buffId].count = (needBuffs[buffId].count or 0) + info.count
  864 + needBuffs[buffId].exist = info.exist
721 end 865 end
722 - for attrName, _ in pairs(effect) do  
723 - if attrName == "hp" then  
724 - self:reSetHpMax()  
725 - else  
726 - self:reSetAttr(attrName) 866 +
  867 + for buffId, info in pairs(buffs[2] or {}) do
  868 + needBuffs[buffId] = needBuffs[buffId] or {}
  869 + needBuffs[buffId].count = (needBuffs[buffId].count or 0) + info.count
  870 + needBuffs[buffId].exist = info.exist
  871 + end
  872 +
  873 + for buffId, info in pairs(needBuffs) do
  874 + if info.count < 0 then
  875 + local buff = self:getBuffById(buffId)
  876 + if buff then
  877 + buff:uncover(info.exist and -info.count or -1, true)
  878 + end
  879 + elseif info.count > 0 then
  880 + self:addBuff(buffId, nil, info.count)
727 end 881 end
728 end 882 end
729 end 883 end
@@ -734,7 +888,8 @@ end @@ -734,7 +888,8 @@ end
734 888
735 function Player:getDB() 889 function Player:getDB()
736 local db = Player.super.getDB(self) 890 local db = Player.super.getDB(self)
737 - for _ , field in pairs({"level", "exp", "growth", "sp", "spMax"}) do 891 + -- for _ , field in pairs({"level", "exp", "growth", "sp", "spMax"}) do
  892 + for _ , field in pairs({"level", "growth", "sp", "spMax"}) do
738 db[field] = self[field] 893 db[field] = self[field]
739 end 894 end
740 db["_spMax"] = self._spMax 895 db["_spMax"] = self._spMax
1 -Subproject commit 02a9bbbb10bb99a91cc5d67f62dc7e5b49d8cb46 1 +Subproject commit a2598231ccc5e16da1a27f976602871f30fcd035
src/models/Hero.lua
@@ -15,6 +15,7 @@ Hero.schema = { @@ -15,6 +15,7 @@ Hero.schema = {
15 -- loveL = {"number", 0}, --好感度等级 15 -- loveL = {"number", 0}, --好感度等级
16 equip = {"string",""}, --装备 type=level 16 equip = {"string",""}, --装备 type=level
17 rune = {"string",""}, --零件 type=id 17 rune = {"string",""}, --零件 type=id
  18 + faith = {"number", 0}, -- 信赖
18 } 19 }
19 20
20 function Hero:ctor( properties ) 21 function Hero:ctor( properties )
@@ -102,6 +103,7 @@ function Hero:data() @@ -102,6 +103,7 @@ function Hero:data()
102 -- loveL = self:getProperty("loveL"), 103 -- loveL = self:getProperty("loveL"),
103 equip = self:getProperty("equip"), 104 equip = self:getProperty("equip"),
104 rune = self:getProperty("rune"), 105 rune = self:getProperty("rune"),
  106 + faith = self:getProperty("faith")
105 } 107 }
106 end 108 end
107 109
@@ -113,4 +115,8 @@ function Hero:getRare() @@ -113,4 +115,8 @@ function Hero:getRare()
113 return csvdb["unitCsv"][self:getProperty("type")].rare 115 return csvdb["unitCsv"][self:getProperty("type")].rare
114 end 116 end
115 117
  118 +function Hero:getPosition()
  119 + return csvdb["unitCsv"][self:getProperty("type")].position
  120 +end
  121 +
116 return Hero 122 return Hero
117 \ No newline at end of file 123 \ No newline at end of file
src/models/HeroPlugin.lua
@@ -48,30 +48,29 @@ function HeroPlugin.bind(Hero) @@ -48,30 +48,29 @@ function HeroPlugin.bind(Hero)
48 local breakL = params.breakL or self:getProperty("breakL") 48 local breakL = params.breakL or self:getProperty("breakL")
49 local wakeL = params.wakeL or self:getProperty("wakeL") 49 local wakeL = params.wakeL or self:getProperty("wakeL")
50 local talent = params.talent or self:getProperty("talent") 50 local talent = params.talent or self:getProperty("talent")
51 - 51 + local heroCfgId = self:getProperty("type")
52 --天赋 52 --天赋
53 local talentAttrS = {} 53 local talentAttrS = {}
54 54
55 -- 四个基础属性 55 -- 四个基础属性
56 local curData = csvdb["unit_talentCsv"][talent:getv(0, 1)] 56 local curData = csvdb["unit_talentCsv"][talent:getv(0, 1)]
  57 + local curTalentLvl = 0
57 if not curData then -- 已经满阶段了 58 if not curData then -- 已经满阶段了
58 - curData = csvdb["unit_talentCsv"][#csvdb["unit_talentCsv"]]  
59 - local strength = curData[#curData].strength  
60 - for i = 1, 4 do  
61 - talentAttrS[TalentAttsEnumEx[i]] = (talentAttrS[TalentAttsEnumEx[i]] or 0) + strength  
62 - end 59 + local cfgName = "unit_talent_"..heroCfgId.."Csv"
  60 + curData = csvdb[cfgName][#csvdb[cfgName]]
63 else 61 else
64 - for i = 1, 4 do --4个天赋  
65 - talentAttrS[TalentAttsEnumEx[i]] = (talentAttrS[TalentAttsEnumEx[i]] or 0) + curData[talent:getv(i, 0)].strength  
66 - end 62 + curTalentLvl = talent:getv(1, 1)
67 end 63 end
68 - --阶段属性  
69 - for i = 1, (talent:getv(0, 1) - 1) do  
70 - local curData = csvdb["unit_talentCsv"][i]  
71 - local effect = curData[#curData].effect:toArray(true, "=")  
72 - talentAttrS[AttsEnumEx[effect[1]]] = (talentAttrS[AttsEnumEx[effect[1]]] or 0) + effect[2] 64 + for lvl, cfg in pairs(curData) do
  65 + if lvl < curTalentLvl or curTalentLvl == 0 then
  66 + if cfg.effect ~= 99 then
  67 + local curVal = talentAttrS[cfg.effect] or 0
  68 + if curVal < cfg.strength then
  69 + talentAttrS[cfg.effect] = cfg.strength
  70 + end
  71 + end
  72 + end
73 end 73 end
74 -  
75 74
76 for _, attrName in pairs(AttsEnumEx) do 75 for _, attrName in pairs(AttsEnumEx) do
77 if talentAttrS[attrName] then 76 if talentAttrS[attrName] then
@@ -79,6 +78,22 @@ function HeroPlugin.bind(Hero) @@ -79,6 +78,22 @@ function HeroPlugin.bind(Hero)
79 end 78 end
80 end 79 end
81 80
  81 + -- 信赖属性
  82 + local faithAttr = {}
  83 + local faith = self:getProperty("faith")
  84 + local faithConfig = csvdb["unit_trustCsv"]
  85 + for lvl = 1, #faithConfig do
  86 + if faith >= faithConfig[lvl].exp then
  87 + local add = faithConfig[lvl]["position_"..unitData.position]:toArray(true, "=")
  88 + faithAttr[add[1]] = (faithAttr[add[1]] or 0) + add[2]
  89 + end
  90 + end
  91 + for _, attrName in pairs(AttsEnumEx) do
  92 + if faithAttr[attrName] then
  93 + faithAttr[attrName] = addAttr(unitData[attrName], faithAttr[attrName], 1, attrName)
  94 + end
  95 + end
  96 +
82 local attrs = {} 97 local attrs = {}
83 for _, attName in pairs(AttsEnumEx) do 98 for _, attName in pairs(AttsEnumEx) do
84 attrs[attName] = unitData[attName] or 0 99 attrs[attName] = unitData[attName] or 0
@@ -90,7 +105,7 @@ function HeroPlugin.bind(Hero) @@ -90,7 +105,7 @@ function HeroPlugin.bind(Hero)
90 for attr, value in pairs(attrs) do 105 for attr, value in pairs(attrs) do
91 attrs[attr] = attrs[attr] + addAttr(attrs[attr], lData[attr .. "Level"], 1, attr) 106 attrs[attr] = attrs[attr] + addAttr(attrs[attr], lData[attr .. "Level"], 1, attr)
92 attrs[attr] = attrs[attr] + addAttr(attrs[attr], blData[attr .. "Level"], 1, attr) 107 attrs[attr] = attrs[attr] + addAttr(attrs[attr], blData[attr .. "Level"], 1, attr)
93 - attrs[attr] = attrs[attr] + addAttr(attrs[attr], wData[attr .. "Level"], 1, attr) + (talentAttrS[attr] or 0) 108 + attrs[attr] = attrs[attr] + addAttr(attrs[attr], wData[attr .. "Level"], 1, attr) + (talentAttrS[attr] or 0) + (faithAttr[attr] or 0)
94 end 109 end
95 110
96 return attrs 111 return attrs
@@ -237,6 +252,37 @@ function HeroPlugin.bind(Hero) @@ -237,6 +252,37 @@ function HeroPlugin.bind(Hero)
237 return level 252 return level
238 end 253 end
239 254
  255 + -- 天赋获得的技能
  256 + function Hero:getTalentSkill()
  257 + local TalentEnum = {
  258 + [1] = 1, -- 血量
  259 + [2] = 2, -- 攻击
  260 + [3] = 3, -- 物理防御
  261 + [4] = 4, -- 命中
  262 + [5] = 5, -- 闪避
  263 + }
  264 + local talentCsv = csvdb["unit_talent_" .. self:getProperty("type") .. "Csv"]
  265 + local curLv = self:getProperty("talent"):getv(1,1) - 1
  266 + local curRan = self:getProperty("talent"):getv(0,1)
  267 + local skills = {}
  268 + for ran, data in ipairs(talentCsv) do
  269 + if ran <= curRan then
  270 + for lv, value in ipairs(data) do
  271 + if ran < curRan or lv <= curLv then
  272 + if not TalentEnum[value.effect] then
  273 + skills[value.strength] = true
  274 + end
  275 + else
  276 + break
  277 + end
  278 + end
  279 + else
  280 + break
  281 + end
  282 + end
  283 + return skills
  284 + end
  285 +
240 function Hero:getSkillData(idx) 286 function Hero:getSkillData(idx)
241 local unitData = csvdb["unitCsv"][self:getProperty("type")] 287 local unitData = csvdb["unitCsv"][self:getProperty("type")]
242 if idx == 1 then 288 if idx == 1 then
@@ -296,6 +342,27 @@ function HeroPlugin.bind(Hero) @@ -296,6 +342,27 @@ function HeroPlugin.bind(Hero)
296 end 342 end
297 return 343 return
298 end 344 end
  345 +
  346 + -- 添加英雄信赖
  347 + function Hero:addHeroFaith(exp)
  348 + local faith = self:getProperty("faith")
  349 + local config = csvdb["unit_trustCsv"]
  350 + local star = self:getProperty("wakeL")
  351 + local tmpExp = faith + exp
  352 + for lvl = 1, #config do
  353 + if star < config[lvl].star then
  354 + break
  355 + end
  356 + if tmpExp < config[lvl].exp then
  357 + faith = tmpExp
  358 + break
  359 + else
  360 + faith = config[lvl].exp
  361 + end
  362 + end
  363 + self:setProperty("faith", faith)
  364 + end
  365 +
299 end 366 end
300 367
301 368
src/models/Role.lua
@@ -103,7 +103,6 @@ Role.schema = { @@ -103,7 +103,6 @@ Role.schema = {
103 --挂机相关 103 --挂机相关
104 hangPass = {"table", {}}, -- 挂机通过的最大关卡 104 hangPass = {"table", {}}, -- 挂机通过的最大关卡
105 hangGift = {"table", {}}, -- 挂机奖励 {id = 1} 105 hangGift = {"table", {}}, -- 挂机奖励 {id = 1}
106 - hangTeam = {"table", {}}, -- 挂机队伍  
107 hangTS = {"table", {}}, -- 挂机队伍他人可读的队伍信息 106 hangTS = {"table", {}}, -- 挂机队伍他人可读的队伍信息
108 hangTB = {"table", {}}, -- 挂机队伍他人可用的战斗信息mao 107 hangTB = {"table", {}}, -- 挂机队伍他人可用的战斗信息mao
109 hangTBV = {"number", 0}, -- 挂机队伍他人可用的战斗力 108 hangTBV = {"number", 0}, -- 挂机队伍他人可用的战斗力
@@ -111,11 +110,12 @@ Role.schema = { @@ -111,11 +110,12 @@ Role.schema = {
111 hangInfo = {"table", {}}, -- 当前挂机信息 110 hangInfo = {"table", {}}, -- 当前挂机信息
112 hangBag = {"table", {}}, -- 背包 111 hangBag = {"table", {}}, -- 背包
113 hangBagLimit = {"number", globalCsv.idle_field_origin}, --背包上限 112 hangBagLimit = {"number", globalCsv.idle_field_origin}, --背包上限
114 - bTeam = {"table", {}}, -- 奖励副本队伍  
115 hangTeams = {"table", {}}, -- pve自选编队 113 hangTeams = {"table", {}}, -- pve自选编队
116 teamIndex = {"table", {}}, -- 各个系统使用的编队索引 type->index 见TeamSystemType 114 teamIndex = {"table", {}}, -- 各个系统使用的编队索引 type->index 见TeamSystemType
117 advTeams = {"table", {}}, -- 拾荒自选编队 115 advTeams = {"table", {}}, -- 拾荒自选编队
118 116
  117 + bonusStar = {"table", {}}, -- 奖励关卡 通关星星 {[id] = 1} 三个二进制位 表示三个星 从低到高 (1 << 0) (1 << 1) (1 << 2) 满星 (1 << 3) - 1
  118 +
119 --引导相关 119 --引导相关
120 newerGuide = {"string","1=1"}, -- 新手引导 master=slave 120 newerGuide = {"string","1=1"}, -- 新手引导 master=slave
121 funcGuide = {"string",""}, -- 功能引导 0=0跳过次数(999永久跳过) 1=1功能1触发情况 121 funcGuide = {"string",""}, -- 功能引导 0=0跳过次数(999永久跳过) 1=1功能1触发情况
@@ -145,7 +145,6 @@ Role.schema = { @@ -145,7 +145,6 @@ Role.schema = {
145 boxL = {"table", {}}, -- boxList 正开启的箱子 -- {[1] = {id = 1010, gem = 101, time = 1313}} 145 boxL = {"table", {}}, -- boxList 正开启的箱子 -- {[1] = {id = 1010, gem = 101, time = 1313}}
146 146
147 towerInfo = {"table", {c = globalCsv.tower_count_limit, l = 1}}, -- 当天爬塔消耗的次数 -- {t = time, c = count, l = layer, k = battleKey} 147 towerInfo = {"table", {c = globalCsv.tower_count_limit, l = 1}}, -- 当天爬塔消耗的次数 -- {t = time, c = count, l = layer, k = battleKey}
148 - towerF = {"table", {}}, -- 爬塔阵容  
149 148
150 spTask = {"table", {}}, -- 特殊任务 -- {id = status} 149 spTask = {"table", {}}, -- 特殊任务 -- {id = status}
151 150
@@ -181,6 +180,7 @@ Role.schema = { @@ -181,6 +180,7 @@ Role.schema = {
181 feedback = {"table", {}}, -- 反馈相关信息 {flag = false, count = 0} flag是否评论过,count 提示次数 180 feedback = {"table", {}}, -- 反馈相关信息 {flag = false, count = 0} flag是否评论过,count 提示次数
182 181
183 calTask = {"table", {}}, -- 英雄令活动 日历任务活动 182 calTask = {"table", {}}, -- 英雄令活动 日历任务活动
  183 + radioTask = {"table", {}}, -- 电台任务 {id = {time=end_ts,heros=heros}} 表crusadeCsv
184 } 184 }
185 185
186 186
@@ -356,14 +356,14 @@ function Role:data() @@ -356,14 +356,14 @@ function Role:data()
356 356
357 hangPass = self:getProperty("hangPass"), 357 hangPass = self:getProperty("hangPass"),
358 hangGift = self:getProperty("hangGift"), 358 hangGift = self:getProperty("hangGift"),
359 - hangTeam = self:getProperty("hangTeam"),  
360 hangInfo = self:getProperty("hangInfo"), 359 hangInfo = self:getProperty("hangInfo"),
361 hangBag = self:getProperty("hangBag"), 360 hangBag = self:getProperty("hangBag"),
362 hangBagLimit = self:getProperty("hangBagLimit"), 361 hangBagLimit = self:getProperty("hangBagLimit"),
363 - bTeam = self:getProperty("bTeam"),  
364 hangTeams = self:getProperty("hangTeams"), 362 hangTeams = self:getProperty("hangTeams"),
365 teamIndex = self:getProperty("teamIndex"), 363 teamIndex = self:getProperty("teamIndex"),
366 advTeams = self:getProperty("advTeams"), 364 advTeams = self:getProperty("advTeams"),
  365 +
  366 + bonusStar = self:getProperty("bonusStar"),
367 367
368 newerGuide = self:getProperty("newerGuide"), 368 newerGuide = self:getProperty("newerGuide"),
369 funcGuide = self:getProperty("funcGuide"), 369 funcGuide = self:getProperty("funcGuide"),
@@ -379,7 +379,6 @@ function Role:data() @@ -379,7 +379,6 @@ function Role:data()
379 equips = self:getProperty("equips"), 379 equips = self:getProperty("equips"),
380 boxL = self:getProperty("boxL"), 380 boxL = self:getProperty("boxL"),
381 towerInfo = self:getProperty("towerInfo"), 381 towerInfo = self:getProperty("towerInfo"),
382 - towerF = self:getProperty("towerF"),  
383 spTask = self:getProperty("spTask"), 382 spTask = self:getProperty("spTask"),
384 dTask = self:getProperty("dTask"), 383 dTask = self:getProperty("dTask"),
385 wTask = self:getProperty("wTask"), 384 wTask = self:getProperty("wTask"),
@@ -406,6 +405,7 @@ function Role:data() @@ -406,6 +405,7 @@ function Role:data()
406 feedback = self:getProperty("feedback"), 405 feedback = self:getProperty("feedback"),
407 ctime = self:getProperty("ctime"), 406 ctime = self:getProperty("ctime"),
408 calTask = self:getProperty("calTask"), 407 calTask = self:getProperty("calTask"),
  408 + radioTask = self:getProperty("radioTask"),
409 } 409 }
410 end 410 end
411 411
src/models/RoleBattle.lua
@@ -57,7 +57,6 @@ function Role:checkBattle(battleType, params) @@ -57,7 +57,6 @@ function Role:checkBattle(battleType, params)
57 end 57 end
58 end, 58 end,
59 tower = function() 59 tower = function()
60 - --local towerF = self:getProperty("towerF")  
61 local towerF = self:getTeamFormatByType(TeamSystemType.Tower) 60 local towerF = self:getTeamFormatByType(TeamSystemType.Tower)
62 for slot, hero in pairs(self:getTeamHerosInfo(towerF.heros)) do 61 for slot, hero in pairs(self:getTeamHerosInfo(towerF.heros)) do
63 selflist[slot] = hero.type 62 selflist[slot] = hero.type
@@ -73,7 +72,6 @@ function Role:checkBattle(battleType, params) @@ -73,7 +72,6 @@ function Role:checkBattle(battleType, params)
73 end 72 end
74 end, 73 end,
75 bonus = function() 74 bonus = function()
76 - --local bTeam = self:getProperty("bTeam")  
77 local bTeam = self:getTeamFormatByType(TeamSystemType.BonusBattle) 75 local bTeam = self:getTeamFormatByType(TeamSystemType.BonusBattle)
78 for slot, hero in pairs(self:getTeamHerosInfo(bTeam.heros)) do 76 for slot, hero in pairs(self:getTeamHerosInfo(bTeam.heros)) do
79 selflist[slot] = hero.type 77 selflist[slot] = hero.type
src/models/RoleLog.lua
@@ -107,6 +107,8 @@ local ItemReason = { @@ -107,6 +107,8 @@ local ItemReason = {
107 unlockPool = 1208, -- 解锁英雄定向抽卡池 107 unlockPool = 1208, -- 解锁英雄定向抽卡池
108 downloadCv = 1209, -- 下载 cv包奖励 108 downloadCv = 1209, -- 下载 cv包奖励
109 refer = 1210, -- 穿戴 109 refer = 1210, -- 穿戴
  110 + itemCompose = 1211, -- 天赋道具合成
  111 + radioQuest = 1212, -- 电台任务奖励
110 112
111 -- pvp 113 -- pvp
112 pvpCHead = 1301, -- pvp 跨服竞技场头像 114 pvpCHead = 1301, -- pvp 跨服竞技场头像
src/models/RolePlugin.lua
1 1
2 - 2 +local serverId = tonumber(skynet.getenv("servId"))
3 local RolePlugin = {} 3 local RolePlugin = {}
4 4
5 function RolePlugin.bind(Role) 5 function RolePlugin.bind(Role)
@@ -64,6 +64,9 @@ function RolePlugin.bind(Role) @@ -64,6 +64,9 @@ function RolePlugin.bind(Role)
64 [ItemId.PlayerExp] = function() 64 [ItemId.PlayerExp] = function()
65 self:addPlayExp(count, pms) 65 self:addPlayExp(count, pms)
66 end, 66 end,
  67 + [ItemId.AdvPower] = function()
  68 + self:changeAdvCount(-count)
  69 + end,
67 } 70 }
68 71
69 local itemTypeAward = { 72 local itemTypeAward = {
@@ -1132,7 +1135,6 @@ function RolePlugin.bind(Role) @@ -1132,7 +1135,6 @@ function RolePlugin.bind(Role)
1132 local now = skynet.timex() 1135 local now = skynet.timex()
1133 local ct = math.ceil((now - StdTowerRankTime) / 86400) --按天计算 365 * 27 < 10000 可以维持 27 年 1136 local ct = math.ceil((now - StdTowerRankTime) / 86400) --按天计算 365 * 27 < 10000 可以维持 27 年
1134 local ct = 10000 - ct -- 越早的排名越靠前 1137 local ct = 10000 - ct -- 越早的排名越靠前
1135 - --local towerTeam = self:getProperty("towerF")  
1136 local towerTeam = self:getTeamFormatByType(TeamSystemType.Tower) 1138 local towerTeam = self:getTeamFormatByType(TeamSystemType.Tower)
1137 local battleV = self:getTeamBattleValue(towerTeam.heros) 1139 local battleV = self:getTeamBattleValue(towerTeam.heros)
1138 local score = (level * 10000 + ct) * 10000000 + battleV 1140 local score = (level * 10000 + ct) * 10000000 + battleV
@@ -1280,11 +1282,13 @@ function RolePlugin.bind(Role) @@ -1280,11 +1282,13 @@ function RolePlugin.bind(Role)
1280 info.specialLevel = hero:getSkillLevel(1) 1282 info.specialLevel = hero:getSkillLevel(1)
1281 info.passiveLevel = hero:getSkillLevel(3) 1283 info.passiveLevel = hero:getSkillLevel(3)
1282 info.runeSkill = hero:getRuneSkill(102) 1284 info.runeSkill = hero:getRuneSkill(102)
  1285 + info.talentSkills = hero:getTalentSkill()
1283 teamInfo.heros[slot] = info 1286 teamInfo.heros[slot] = info
1284 end 1287 end
1285 for slot, id in pairs(team.supports or {}) do 1288 for slot, id in pairs(team.supports or {}) do
1286 teamInfo.supports[slot] = {id, self.dinerData:getProperty("dishTree"):getv(id, 0)} 1289 teamInfo.supports[slot] = {id, self.dinerData:getProperty("dishTree"):getv(id, 0)}
1287 end 1290 end
  1291 + teamInfo.tactics = globalCsv.tactics_skill_passive_cell[team.tactics] and team.tactics or nil
1288 return teamInfo 1292 return teamInfo
1289 end 1293 end
1290 1294
@@ -1311,20 +1315,6 @@ function RolePlugin.bind(Role) @@ -1311,20 +1315,6 @@ function RolePlugin.bind(Role)
1311 return self:getRealBattleValue(heros) 1315 return self:getRealBattleValue(heros)
1312 end 1316 end
1313 1317
1314 - -- 不传参数 只修改保存的阵容信息  
1315 - function Role:saveHangTeam(team)  
1316 - if not team then  
1317 - team = self:getProperty("hangTeam")  
1318 - else  
1319 - self:updateProperty({field = "hangTeam", value = team})  
1320 - end  
1321 - self:setProperties({  
1322 - hangTS = self:getTeamHerosInfo(team.heros),  
1323 - hangTB = self:getTeamBattleInfo(team),  
1324 - hangTBV = self:getTeamBattleValue(team.heros),  
1325 - })  
1326 - end  
1327 -  
1328 function Role:updateHangTeamInfo() 1318 function Role:updateHangTeamInfo()
1329 local team = self:getTeamFormatByType(TeamSystemType.Hang) 1319 local team = self:getTeamFormatByType(TeamSystemType.Hang)
1330 if not team then return end 1320 if not team then return end
@@ -1544,6 +1534,102 @@ function RolePlugin.bind(Role) @@ -1544,6 +1534,102 @@ function RolePlugin.bind(Role)
1544 self:updateProperty({field = "redp", value = redp}) 1534 self:updateProperty({field = "redp", value = redp})
1545 end 1535 end
1546 1536
  1537 + -- 获取充值订单号
  1538 + function Role:getPurchaseOrder(rechargeId)
  1539 + local roleId = self:getProperty("id")
  1540 + local rechargeData = csvdb["shop_rechargeCsv"][rechargeId]
  1541 + if not rechargeData then
  1542 + skynet.error("recharge id not exist", rechargeId)
  1543 + return ""
  1544 + end
  1545 + local limit = rechargeData.limit
  1546 + local rechargeRecord = self:getProperty("payR") or {}
  1547 + if limit ~= 0 and limit <= (rechargeRecord[rechargeId] or 0) then
  1548 + return ""
  1549 + end
  1550 +
  1551 + local orderId = redisproxy:hget(string.format(R_ORDERS, roleId), rechargeId)
  1552 + if orderId then
  1553 + local orderObject = require("models.Order").new({ key = string.format(R_ORDER, roleId, orderId) })
  1554 + if orderObject:load() and orderObject:getProperty("rechargeId") == rechargeId and math.abs(skynet.timex() - orderObject:getProperty("createTime")) < 5 * 60 then
  1555 + return string.format("%d_%d_%d", serverId, roleId, orderId)
  1556 + end
  1557 + end
  1558 +
  1559 + orderId = redisproxy:hincrby("autoincrement_set", "order", 1)
  1560 + local partnerOrderId = string.format("%d_%d_%d", serverId, roleId, orderId)
  1561 + local orderKey = string.format(R_ORDER, roleId, orderId)
  1562 + redisproxy:del(orderKey) -- 删掉可能有了
  1563 + local order = require("models.Order").new({
  1564 + key = orderKey,
  1565 + order = partnerOrderId,
  1566 + rechargeId = rechargeId,
  1567 + })
  1568 + order:create()
  1569 + -- 正在进行中的订单 缓存
  1570 + redisproxy:hset(string.format(R_ORDERS, roleId), rechargeId, orderId)
  1571 + return partnerOrderId
  1572 + end
  1573 +
  1574 + -- 更新订单信息
  1575 + --[[
  1576 +
  1577 + status
  1578 +
  1579 + success
  1580 + fail
  1581 + finsh
  1582 + unknow
  1583 +
  1584 + --]]
  1585 + function Role:updatePurchaseOrder(partnerOrderStr, platformOrder, status)
  1586 + if not partnerOrderStr then return false end
  1587 + local _, _, orderId = string.match(partnerOrderStr, "(.+)_(.+)_(.+)")
  1588 +
  1589 + local roleId = self:getProperty("id")
  1590 + local orderObject = require("models.Order").new({ key = string.format(R_ORDER, roleId, orderId) })
  1591 + if not orderObject:load() then
  1592 + return false
  1593 + end
  1594 +
  1595 + local rechargeId = orderObject:getProperty("rechargeId")
  1596 + local dataSet = csvdb["shop_rechargeCsv"][rechargeId]
  1597 +
  1598 + if orderObject:getProperty("finishTime") > 0 then
  1599 + return false, "finsh"
  1600 + end
  1601 +
  1602 + if platformOrder then
  1603 + orderObject:setProperty("transactionId", platformOrder)
  1604 + end
  1605 + orderObject:setProperty("status", status)
  1606 +
  1607 + -- 开始下单
  1608 + if status == "success" then
  1609 + elseif status == "fail" then
  1610 + redisproxy:hdel(string.format(R_ORDERS, roleId), rechargeId)
  1611 + elseif status == "finsh" then
  1612 + orderObject:setProperty("finishTime", skynet.time())
  1613 + redisproxy:hdel(string.format(R_ORDERS, roleId), rechargeId)
  1614 + end
  1615 +
  1616 + if status ~= "unknow" then
  1617 + self:log("setOrder", {
  1618 + order_status = ({success = 100, finsh = 200, fail = 300})[status] or 1000, -- "订单状态:100 - 开始下单(玩家还未开始付费行为记录)200 - 支付完成并发货(SDK通知可以发货时记录),300 - 订单被取消,1000 - 其他"
  1619 + item_id = rechargeId, -- 道具id
  1620 + item_type = dataSet.type, -- 购买的道具类型,具体见"onItems"方法中道具类型枚举表
  1621 + item_name = dataSet.title, -- 购买的道具名
  1622 + item_number = 1, -- 购买的道具数量
  1623 + item_level = 1, -- 购买的道具等级
  1624 + order_cost = dataSet.rmb * 100, -- 此次消费的现金金额(单位:分),如 51800即未518元,对应客户端SDK传入的'total_fee'
  1625 + order_currency = "CNY", -- 货币类型,默认为"CNY"(人民币),遵循ISO 4217规范
  1626 + order_type = self:getProperty("rmbC") > 0 and 0 or 1, -- 订单类型,首充记录为1,否则为0
  1627 + order_id = platformOrder, -- 本条记录的订单号,对应客户端SDK返回的'bs_trade_no'
  1628 + })
  1629 + end
  1630 +
  1631 + return true, rechargeId
  1632 + end
1547 1633
1548 -- 充值 -- 1634 -- 充值 --
1549 --[[ 1635 --[[
@@ -1558,63 +1644,37 @@ function RolePlugin.bind(Role) @@ -1558,63 +1644,37 @@ function RolePlugin.bind(Role)
1558 local roleId = self:getProperty("id") 1644 local roleId = self:getProperty("id")
1559 local partnerOrderStr = params.order 1645 local partnerOrderStr = params.order
1560 1646
1561 - local _, _, orderId = string.match(partnerOrderStr, "(.+)_(.+)_(.+)")  
1562 - local orderObject = require("models.Order").new({ key = string.format("order:%d:%d", roleId, orderId) })  
1563 - if not orderObject:load() then  
1564 - -- 订单不存在  
1565 - skynet.error("ayncPurchaseRpc", string.format("order %s not exist", partnerOrderStr))  
1566 - return  
1567 - end  
1568 1647
1569 - if orderObject:getProperty("finishTime") > 0 then  
1570 - -- 订单已经处理  
1571 - SendPacket(actionCodes.Store_ayncPurchaseRpc, MsgPack.pack({ result = "handled" })) 1648 + local status, back = self:updatePurchaseOrder(partnerOrderStr, params.transactionId, "finsh")
  1649 + if not status then
  1650 + if back == "finsh" then
  1651 + -- 订单已经处理
  1652 + SendPacket(actionCodes.Store_ayncPurchaseRpc, MsgPack.pack({ result = "handled" }))
  1653 + end
1572 return 1654 return
1573 end 1655 end
1574 - local rechargeId = orderObject:getProperty("rechargeId") 1656 + local rechargeId = back
1575 local rechargeData = csvdb["shop_rechargeCsv"][rechargeId] 1657 local rechargeData = csvdb["shop_rechargeCsv"][rechargeId]
1576 if rechargeData.rmb ~= tonumber(params.amount) then 1658 if rechargeData.rmb ~= tonumber(params.amount) then
1577 - skynet.error(string.format("fake order: %s, roleId: %d, order: %s, rmb %s, get %s", 1659 + skynet.error(string.format("[recharge] fake order: %s, roleId: %d, order: %s, rmb %s, get %s",
1578 params.transactionId, roleId, partnerOrderStr, rechargeData.rmb, params.amount 1660 params.transactionId, roleId, partnerOrderStr, rechargeData.rmb, params.amount
1579 )) 1661 ))
1580 return 1662 return
1581 end 1663 end
1582 1664
1583 - local order_type = self:getProperty("rmbC") > 0 and 0 or 1  
1584 local status, reward = self:recharge({ 1665 local status, reward = self:recharge({
1585 id = rechargeId, 1666 id = rechargeId,
1586 transactionId = params.transactionId, 1667 transactionId = params.transactionId,
1587 pay_time = params.pay_time, 1668 pay_time = params.pay_time,
1588 order = partnerOrderStr, 1669 order = partnerOrderStr,
1589 }) 1670 })
1590 - orderObject:setProperty("finishTime", skynet.time())  
1591 - orderObject:setProperty("status", "finish")  
1592 -  
1593 - redisproxy:srem(string.format("role:%d:orders", roleId), partnerOrderStr)  
1594 1671
1595 if not status then 1672 if not status then
1596 - status = 200  
1597 - else  
1598 - status = 1000 + status  
1599 - end  
1600 - self:log("setOrder", {  
1601 - order_status = status, -- "订单状态:100 - 开始下单(玩家还未开始付费行为记录)200 - 支付完成并发货(SDK通知可以发货时记录),300 - 订单被取消,1000 - 其他"  
1602 - item_id = rechargeId, -- 道具id  
1603 - item_type = rechargeData.type, -- 购买的道具类型,具体见"onItems"方法中道具类型枚举表  
1604 - item_name = rechargeData.title, -- 购买的道具名  
1605 - item_number = 1, -- 购买的道具数量  
1606 - item_level = 1, -- 购买的道具等级  
1607 - order_cost = rechargeData.rmb * 100, -- 此次消费的现金金额(单位:分),如 51800即未518元,对应客户端SDK传入的'total_fee'  
1608 - order_currency = "CNY", -- 货币类型,默认为"CNY"(人民币),遵循ISO 4217规范  
1609 - order_type = order_type, -- 订单类型,首充记录为1,否则为0  
1610 - order_id = params.transactionId, -- 本条记录的订单号,对应客户端SDK返回的'bs_trade_no'  
1611 - })  
1612 - if status ~= 200 then return end  
1613 -  
1614 - SendPacket(actionCodes.Store_ayncPurchaseRpc, MsgPack.pack({ order = partnerOrderStr,  
1615 - result = "success", reward = reward})) 1673 + SendPacket(actionCodes.Store_ayncPurchaseRpc, MsgPack.pack({ order = partnerOrderStr,
  1674 + result = "success", reward = reward}))
  1675 + end
1616 1676
1617 - return orderObject:getProperty("rechargeId") 1677 + return rechargeId
1618 end 1678 end
1619 1679
1620 1680
@@ -1622,7 +1682,7 @@ function RolePlugin.bind(Role) @@ -1622,7 +1682,7 @@ function RolePlugin.bind(Role)
1622 local id = tonumber(params.id) 1682 local id = tonumber(params.id)
1623 local rechargeData = csvdb["shop_rechargeCsv"][id] 1683 local rechargeData = csvdb["shop_rechargeCsv"][id]
1624 if not rechargeData then 1684 if not rechargeData then
1625 - skynet.error("recharge id not exist", id) 1685 + skynet.error("[recharge] recharge id not exist", id)
1626 return 1 1686 return 1
1627 end 1687 end
1628 1688
@@ -1647,7 +1707,7 @@ function RolePlugin.bind(Role) @@ -1647,7 +1707,7 @@ function RolePlugin.bind(Role)
1647 elseif rechargeData.shop == 3 then -- 礼包商店 1707 elseif rechargeData.shop == 3 then -- 礼包商店
1648 reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}}) 1708 reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}})
1649 else 1709 else
1650 - skynet.error("invalid recharge shop type " .. id) 1710 + skynet.error("[recharge] invalid recharge shop type " .. id)
1651 return 3 1711 return 3
1652 end 1712 end
1653 1713
src/models/RoleTask.lua
@@ -33,7 +33,7 @@ local TaskType = { @@ -33,7 +33,7 @@ local TaskType = {
33 HangQuick = 303, -- 快速挂机 33 HangQuick = 303, -- 快速挂机
34 HangBattle = 304, -- 挂机战斗 - id 34 HangBattle = 304, -- 挂机战斗 - id
35 HangGetGold = 305, -- 挂机获得齿轮 - count 35 HangGetGold = 305, -- 挂机获得齿轮 - count
36 - BonusPass = 306, -- 奖励副本通关 - id 36 + BonusPass = 306, -- 奖励副本通关 - id count
37 37
38 -- 冒险相关 38 -- 冒险相关
39 AdvPass = 401, -- 冒险通过关 - id level score 39 AdvPass = 401, -- 冒险通过关 - id level score
@@ -142,7 +142,7 @@ local CommonListener = { @@ -142,7 +142,7 @@ local CommonListener = {
142 [TaskType.GiveFriendP] = {{20, f("count")}}, 142 [TaskType.GiveFriendP] = {{20, f("count")}},
143 [TaskType.UnionBoss] = {{21}}, 143 [TaskType.UnionBoss] = {{21}},
144 [TaskType.GetFriendP] = {{22, f("count")}}, 144 [TaskType.GetFriendP] = {{22, f("count")}},
145 - [TaskType.BonusPass] = {{23}}, 145 + [TaskType.BonusPass] = {{23, f("count")}},
146 [TaskType.AdvStartSelf] = {{24}}, 146 [TaskType.AdvStartSelf] = {{24}},
147 [TaskType.ShopAll] = {{25, f("count")}}, 147 [TaskType.ShopAll] = {{25, f("count")}},
148 [TaskType.RuneUp] = {{26}}, 148 [TaskType.RuneUp] = {{26}},
@@ -244,7 +244,7 @@ local CalendaTaskListener = { @@ -244,7 +244,7 @@ local CalendaTaskListener = {
244 func = "checkCalendaTask", 244 func = "checkCalendaTask",
245 listen = { 245 listen = {
246 [TaskType.DrawHero] = {{1, 1, f("count")}}, 246 [TaskType.DrawHero] = {{1, 1, f("count")}},
247 - [TaskType.BonusPass]= {{2, 1}}, 247 + [TaskType.BonusPass]= {{2, 1, f("count")}},
248 [TaskType.AdvStart]= {{3, 1}}, 248 [TaskType.AdvStart]= {{3, 1}},
249 [TaskType.DinerLevelUp]= {{4, 2, f("level")}}, 249 [TaskType.DinerLevelUp]= {{4, 2, f("level")}},
250 [TaskType.HeroLvlCollect]= {{5, 3}}, -- x名y级英雄 250 [TaskType.HeroLvlCollect]= {{5, 3}}, -- x名y级英雄
src/models/Store.lua
@@ -226,7 +226,7 @@ end @@ -226,7 +226,7 @@ end
226 function Store:checkRechargeRecord(limit, id) 226 function Store:checkRechargeRecord(limit, id)
227 local rechargeRecord = self:getProperty("payR") or {} 227 local rechargeRecord = self:getProperty("payR") or {}
228 if limit ~= 0 and limit <= (rechargeRecord[id] or 0) then 228 if limit ~= 0 and limit <= (rechargeRecord[id] or 0) then
229 - skynet.error(string.format("recharge id:%d count over limit, user id:%d", id, self.owner:getProperty("id"))) 229 + skynet.error(string.format("[recharge] recharge id:%d count over limit, user id:%d", id, self.owner:getProperty("id")))
230 return false 230 return false
231 end 231 end
232 rechargeRecord[id] = (rechargeRecord[id] or 0) + 1 232 rechargeRecord[id] = (rechargeRecord[id] or 0) + 1