Commit d232676aa51f3cbb880888e83b4dc0a8bcfdd91b

Authored by zhouhaihai
1 parent 3df1e9ea

功能解锁 冒险返回

src/GlobalVar.lua
... ... @@ -66,6 +66,18 @@ FuncOpenType = {
66 66 TimeBoxSlot = 8, -- 时钟箱槽
67 67 }
68 68  
  69 +-- 关卡通关相关的 功能开放 对应 guide_unlock
  70 +FuncUnlock = {
  71 + GetHero = 1, -- 招募
  72 + TaskAchiv = 2, -- 任务成就
  73 + BonusBattle = 3, -- 奖励关卡
  74 + DifficultHang = 4, --困难难度
  75 + Tower = 5, -- 电波塔
  76 + Diner = 6, -- 餐厅
  77 + Pvp = 7, --竞技场
  78 + Adv = 8, -- 冒险
  79 +}
  80 +
69 81 TypeIsFunc = {}
70 82 for _, v in pairs(FuncOpenType) do
71 83 TypeIsFunc[v] = true
... ... @@ -139,16 +151,16 @@ AdvBackEventType = {
139 151 AtkChange = 3, --攻击改变
140 152 Buff = 4, --buff 改变
141 153 Skill = 5, --释放技能
142   - Atk = 6, --攻击动作
  154 + BaseAttrChange = 6, -- 基础属性变化
143 155 Next = 7, --进入下一层
144 156 End = 8, -- 结束
145 157 BlockChange = 9, -- 块改变
146 158 SpChange = 10, --体力改变
147 159 Dead = 11, --怪死亡
148   - DefChange = 12, -- 防御变化
149   - Passive = 13, -- 獲得被動
150   - TurnEnd = 14, -- 回合结束
151   - Miss = 15, -- miss
  160 + Trader = 12, -- 召唤商人
  161 + Monster = 13, -- 召唤怪物
  162 +
  163 +
152 164 Cost = 16, -- 消耗道具
153 165 Trap = 17, --陷阱
154 166 Layer = 18, --切换层
... ...
src/actions/AdvAction.lua
... ... @@ -85,7 +85,8 @@ function _M.startAdvRpc( agent, data )
85 85 local layer = msg.layer or 1 --选择层数
86 86 local format = msg.format --编队
87 87 local supportIdx = msg.supportIdx --选择的支援效果
88   -
  88 + if not role:isFuncUnlock(FuncUnlock.Adv) then return end
  89 +
89 90 --上一个关卡结束才可以开始新的关卡
90 91 if role:getAdvData():isRunning() then return 8 end
91 92  
... ...
src/actions/HangAction.lua
... ... @@ -71,6 +71,10 @@ function _M.startRpc( agent, data )
71 71 local carbonData = csvdb["idle_battleCsv"][carbonId]
72 72 if not carbonData then return 1 end
73 73  
  74 + if math.floor(carbonId / 10000) ~= 1 then
  75 + if not role:isFuncUnlock(FuncUnlock.DifficultHang) then return end
  76 + end
  77 +
74 78 local hangPass = role:getProperty("hangPass")
75 79  
76 80 for _, preCarbonId in ipairs(carbonData.prepose:toArray(true, "=")) do
... ... @@ -413,6 +417,9 @@ function _M.startBonusBattleRpc(agent, data)
413 417 local msg = MsgPack.unpack(data)
414 418 local id = msg.id
415 419  
  420 + if not role:isFuncUnlock(FuncUnlock.BonusBattle) then return end
  421 +
  422 +
416 423 local bonusData = csvdb["bonus_battleCsv"][id]
417 424 if not bonusData then return 1 end
418 425 local hangPass = role:getProperty("hangPass")
... ...
src/actions/HeroAction.lua
... ... @@ -713,6 +713,7 @@ function _M.drawHeroRpc(agent, data)
713 713 local role = agent.role
714 714 local msg = MsgPack.unpack(data)
715 715  
  716 + if not role:isFuncUnlock(FuncUnlock.GetHero) then return end
716 717 local pool = msg.pool -- 1 2 3
717 718 local drawType = msg.type -- 1 单抽 2 十连
718 719  
... ...
src/actions/PvpAction.lua
... ... @@ -92,6 +92,8 @@ function _M.infoRpc(agent, data)
92 92 local roleId = role:getProperty("id")
93 93 local msg = MsgPack.unpack(data)
94 94 local ptype = msg.ptype or 1
  95 +
  96 + if not role:isFuncUnlock(FuncUnlock.Pvp) then return end
95 97  
96 98 local response = {}
97 99 if ptype == 1 then -- 普通pvp
... ...
src/actions/RoleAction.lua
... ... @@ -622,6 +622,9 @@ end
622 622 function _M.taskRpc(agent, data)
623 623 local role = agent.role
624 624 local msg = MsgPack.unpack(data)
  625 +
  626 + if not role:isFuncUnlock(FuncUnlock.TaskAchiv) then return end
  627 +
625 628 local taskType = msg.type -- 1 日常 2 周长
626 629 local taskId = msg.id --任务id
627 630 local roleField = {"dTask", "wTask"}
... ... @@ -652,6 +655,9 @@ end
652 655 function _M.taskActiveRpc(agent, data)
653 656 local role = agent.role
654 657 local msg = MsgPack.unpack(data)
  658 +
  659 + if not role:isFuncUnlock(FuncUnlock.TaskAchiv) then return end
  660 +
655 661 local taskType = msg.type -- 1 日常 2 周长
656 662 local taskId = msg.id --任务id
657 663 local roleField = {"dTask", "wTask"}
... ... @@ -681,6 +687,8 @@ function _M.achiveRpc(agent, data)
681 687 local msg = MsgPack.unpack(data)
682 688 local taskId = msg.id --任务id
683 689  
  690 + if not role:isFuncUnlock(FuncUnlock.TaskAchiv) then return end
  691 +
684 692 local achiveTask = csvdb["achievementCsv"][taskId]
685 693 if not achiveTask then return end
686 694  
... ...
src/actions/TowerAction.lua
... ... @@ -52,6 +52,8 @@ function _M.startBattleRpc(agent, data)
52 52 local role = agent.role
53 53 local msg = MsgPack.unpack(data)
54 54 local id = msg.id
  55 +
  56 + if not role:isFuncUnlock(FuncUnlock.Tower) then return end
55 57  
56 58 local towerInfo = role:getProperty("towerInfo")
57 59  
... ...
src/adv/Adv.lua
... ... @@ -979,6 +979,7 @@ local function chooseCommon(self, room, block, chooseData, choose, tag)
979 979 end,
980 980 [3] = function() --发现怪物
981 981 self:getCurMap():addNewMonsterRand(effect[2], {room, block})
  982 + self:pushBackEvent(AdvBackEventType.Monster, {id = effect[2]})
982 983 clearBlock = false
983 984 end,
984 985 [4] = function() --无事发生
... ... @@ -999,6 +1000,7 @@ local function chooseCommon(self, room, block, chooseData, choose, tag)
999 1000 id = effect[2]
1000 1001 })
1001 1002 block:randomEvent()
  1003 + self:pushBackEvent(AdvBackEventType.Trader, {id = effect[2]})
1002 1004 clearBlock = false
1003 1005 end,
1004 1006 [7] = function() -- 建筑
... ... @@ -1386,6 +1388,7 @@ function Adv:doActive(activeId, target)
1386 1388 })
1387 1389 target:randomEvent()
1388 1390 self:backBlockChange(target.room.roomId, target.blockId)
  1391 + self:pushBackEvent(AdvBackEventType.Trader, {id = traderId})
1389 1392 end
1390 1393 end
1391 1394 return true
... ... @@ -1398,6 +1401,7 @@ function Adv:doActive(activeId, target)
1398 1401 self.battle:removeEnemyById(target.id)
1399 1402 self:getCurMap():addNewMonsterRand(monsterId, {self:getRoom(target.roomId), self:getBlock(target.roomId, target.blockId)})
1400 1403 self:backBlockChange(target.roomId, target.blockId)
  1404 + self:pushBackEvent(AdvBackEventType.Monster, {id = monsterId})
1401 1405 end
1402 1406 end
1403 1407 return true
... ... @@ -1490,6 +1494,18 @@ function Adv:doActive(activeId, target)
1490 1494 return true
1491 1495 end
1492 1496  
  1497 + doActiveEffect[12] = function(_, vtype, attrType, value)
  1498 + local attr
  1499 + if attrType == 0 then
  1500 + attr = "sp"
  1501 + else
  1502 + attr = AttsEnumEx[attrType]
  1503 + if not AdvAttsEnum[attr] then return end
  1504 + end
  1505 + self.battle.player:addBaseAttr(attr, value, vtype)
  1506 + return true
  1507 + end
  1508 +
1493 1509 for _, effect in ipairs(activeData.effect:toArray()) do
1494 1510 local cur = effect:toArray(true, "=")
1495 1511 if doActiveEffect[cur[1]] then
... ... @@ -1612,36 +1628,12 @@ function Adv:backReward(items, params)
1612 1628 params = params or {}
1613 1629 self:pushBackEvent(AdvBackEventType.Reward, {items = items, roomId = params.roomId, blockId = params.blockId})
1614 1630 end
1615   --- if is player enemyId is nil
1616   ---isMax 是否是改变血量上限
1617   -function Adv:backHpChange(enemyId, change, isMax)
1618   - self:pushBackEvent(AdvBackEventType.HpChange, {enemyId = enemyId, change = change, isMax = isMax})
1619   -end
1620   -
1621   --- if is player enemyId is nil
1622   -function Adv:backAtkChange(enemyId, change)
1623   - self:pushBackEvent(AdvBackEventType.AtkChange, {enemyId = enemyId, change = change})
1624   -end
1625 1631  
1626 1632 -- if is player enemyId is nil
1627   -function Adv:backDefChange(enemyId, change)
1628   - self:pushBackEvent(AdvBackEventType.DefChange, {enemyId = enemyId, change = change})
1629   -end
1630   -
1631   --- if is player enemyId is nil
1632   -function Adv:backBuff(enemyId, buffId, isDel)
1633   - self:pushBackEvent(AdvBackEventType.Buff, {enemyId = enemyId, buffId = buffId, isDel = isDel})
1634   -end
1635   --- if is player enemyId is nil
1636 1633 function Adv:backSkill(enemyId, skillId, receiver)
1637 1634 self:pushBackEvent(AdvBackEventType.Skill, {enemyId = enemyId, skillId = skillId, receiver = receiver})
1638 1635 end
1639 1636  
1640   --- if is player enemyId is nil
1641   -function Adv:backPassive(enemyId, passiveId)
1642   - self:pushBackEvent(AdvBackEventType.Passive, {enemyId = enemyId, passiveId = passiveId})
1643   -end
1644   -
1645 1637 function Adv:backNext()
1646 1638 self:pushBackEvent(AdvBackEventType.Next, {})
1647 1639 end
... ...
src/adv/AdvPassive.lua
... ... @@ -423,6 +423,8 @@ function Passive:effect5(monsterId)
423 423 end
424 424 end
425 425 self.owner.battle.adv:getCurMap():addNewMonsterRand(monsterId)
  426 + self.owner.battle.adv:pushBackEvent(AdvBackEventType.Monster, {id = monsterId})
  427 +
426 428 end
427 429  
428 430 --6=给所有场上怪物增加buff
... ...
src/adv/AdvPlayer.lua
... ... @@ -69,7 +69,6 @@ function BaseObject:clearRound()
69 69 for i = #self.buffs, 1, -1 do
70 70 if self.buffs[i].isDel then
71 71 local buff = self.buffs[i]
72   - self.battle.adv:backBuff(self.monsterId, buff.id, true)
73 72 table.remove(self.buffs, i)
74 73 buff:endBuff()
75 74 if self.attrChangeCondBuffCheck then
... ... @@ -102,8 +101,6 @@ function BaseObject:addPassive(params)
102 101 local level = params.level or 1
103 102 if not skillData[level] then return end
104 103 table.insert(self.passives, Passive.new(self, { id = skillId, level = level }))
105   -
106   - self.battle.adv:backPassive(self.monsterId, skillId)
107 104 end
108 105  
109 106 function BaseObject:getPassiveIdx(passive)
... ... @@ -151,7 +148,6 @@ function BaseObject:addBuff(buffId, releaser)
151 148 buff:createAfter()
152 149 end
153 150 self:triggerPassive(Passive.GET_BUFF, {buffId = buffId})
154   - self.battle.adv:backBuff(self.monsterId, buffId)
155 151 return true
156 152 end
157 153  
... ... @@ -166,7 +162,6 @@ end
166 162 function BaseObject:delBuffById(bId)
167 163 for idx, buff in ipairs(self.buffs) do
168 164 if buff.id == bId then
169   - self.battle.adv:backBuff(self.monsterId, buff.id, true)
170 165 table.remove(self.buffs, idx)
171 166 buff:endBuff()
172 167 if self.attrChangeCondBuffCheck then
... ... @@ -293,13 +288,6 @@ function BaseObject:reSetAttr(field)
293 288 local effect = self:getAttrBuffChange(field)
294 289 self[field] = math.ceil((self[field] + effect[0]) * (1 + effect[1]))
295 290 local delta = self[field] - old
296   - if delta ~= 0 then
297   - if field == "atk" then
298   - self.battle.adv:backAtkChange(self.monsterId, delta)
299   - elseif field == "def" then
300   - self.battle.adv:backDefChange(self.monsterId, delta)
301   - end
302   - end
303 291 end
304 292  
305 293 -- 重新计算 血量上限
... ... @@ -394,7 +382,10 @@ function BaseObject:hurt(value, releaser, params)
394 382 end
395 383  
396 384 --受伤了~
397   - self.battle.adv:backHpChange(self.monsterId, -value)
  385 + if self:is("Player") and params.hurtType ~= 5 then
  386 + self.battle.adv:pushBackEvent(AdvBackEventType.HpChange, {change = -value})
  387 + end
  388 +
398 389 if params.hurtType ~= 5 then -- 非客户端发回的伤害 返回更新地块
399 390 if self.roomId and self.blockId then
400 391 self.battle.adv:backBlockChange(self.roomId, self.blockId)
... ... @@ -423,7 +414,7 @@ function BaseObject:recover(value, releaser, params)
423 414 params = params or {}
424 415 value = math.max(0, math.ceil(value))
425 416 self.hp = math.min(self.hpMax, self.hp + value)
426   - self.battle.adv:backHpChange(self.monsterId, value)
  417 + self.battle.adv:pushBackEvent(AdvBackEventType.HpChange, {change = value})
427 418 end
428 419  
429 420 function BaseObject:addSpecialSkill(skillId, skillLevel, target)
... ... @@ -516,6 +507,10 @@ end
516 507 function BaseObject:changeSp()
517 508 end
518 509  
  510 +function BaseObject:is(what)
  511 + return self["is" .. what] and self["is" .. what](self)
  512 +end
  513 +
519 514 local Enemy = class("Enemy", BaseObject)
520 515 function Enemy:ctor(battle, mId, monsterId, roomId, blockId, lock, enemy, mapIdx)
521 516 Enemy.super.ctor(self, battle)
... ... @@ -532,6 +527,10 @@ function Enemy:unlock(id)
532 527 self.lock = nil
533 528 end
534 529  
  530 +function Enemy:isEnemy()
  531 + return true
  532 +end
  533 +
535 534 local Player = class("Player", BaseObject)
536 535 function Player:ctor(battle, data)
537 536 Player.super.ctor(self, battle)
... ... @@ -567,7 +566,7 @@ function Player:addExp(value)
567 566 local delta = level - self.level
568 567 if delta > 0 then
569 568 for attr, _ in pairs(AdvAttsEnum) do
570   - self:addBaseAttr(attr, self.growth[attr] * delta)
  569 + self:addBaseAttr(attr, self.growth[attr] * delta, 0, true)
571 570 end
572 571 self.battle.adv:pushBackEvent(AdvBackEventType.Level, {level = level, delta = delta})
573 572 end
... ... @@ -576,7 +575,7 @@ function Player:addExp(value)
576 575 return value
577 576 end
578 577 --vtype 0/1 值/%
579   -function Player:addBaseAttr(attr, value, vtype)
  578 +function Player:addBaseAttr(attr, value, vtype, ignoreBack)
580 579 local attrName = attr
581 580 if attr == "hp" then
582 581 attrName = "hpMax"
... ... @@ -601,6 +600,10 @@ function Player:addBaseAttr(attr, value, vtype)
601 600 else
602 601 self:reSetAttr(attr)
603 602 end
  603 +
  604 + if not ignoreBack then
  605 + self.battle.adv:pushBackEvent(AdvBackEventType.BaseAttrChange, {type = AdvAttsEnum[attr] or 0, change = change})
  606 + end
604 607 end
605 608  
606 609 --cType 0 or nil 值 1 百分比
... ... @@ -649,6 +652,7 @@ function Player:addBuff(buffId, releaser)
649 652 if status then
650 653 self.battle.player:attrChangeCondBuffCheck(2, buffId)
651 654 self.battle.adv:checkAchievement(self.battle.adv.AchievType.GetBuff, 1, buffId)
  655 + self.battle.adv:pushBackEvent(AdvBackEventType.Buff, {buffId = buffId})
652 656 end
653 657 return status
654 658 end
... ... @@ -673,6 +677,10 @@ function Player:attrChangeCondBuffCheck(etype, cond)
673 677 end
674 678 end
675 679  
  680 +function Player:isPlayer()
  681 + return true
  682 +end
  683 +
676 684 function Player:getDB()
677 685 local db = Player.super.getDB(self)
678 686 for _ , field in pairs({"level", "exp", "growth", "sp", "spMax"}) do
... ... @@ -705,6 +713,9 @@ end
705 713 function Build:hurt()
706 714 end
707 715  
  716 +function Build:isBuild()
  717 + return true
  718 +end
708 719 --0 全部 1 怪物 2 玩家
709 720 function Build:getTeam(nType, noSelf, mapIdx, includeLock)
710 721 noSelf = false -- 不管怎么都取不到自己
... ...
src/models/RolePlugin.lua
... ... @@ -692,7 +692,21 @@ function RolePlugin.bind(Role)
692 692 return globalCsv.adv_endless_daily_cross_count
693 693 end
694 694  
  695 + -- 走 guide_unlock 表的 被动解锁
  696 + function Role:isFuncUnlock(func)
  697 + if not func then return true end -- 没有就是解锁了
  698 + local data = csvdb["guide_unlockCsv"][func]
  699 + if not data then return true end -- 没有就是解锁了
  700 +
  701 + local hangPass = role:getProperty("hangPass")
  702 + if hangPass[data.carbonId] then
  703 + return true
  704 + else
  705 + return false
  706 + end
  707 + end
695 708  
  709 + -- 走 unlock 表的主动解锁
696 710 function Role:isFuncOpen(func)
697 711 return self:getProperty("funcOpen")[func] == 1
698 712 end
... ...