Commit 1ffc16b9a1583fccd06df72e83691546a4e1c15d

Authored by zhouhaihai
1 parent f45d3a7b

冒险 选择点和 建筑

@@ -538,7 +538,7 @@ local function clickMonster(self, room, block, params) @@ -538,7 +538,7 @@ local function clickMonster(self, room, block, params)
538 return true 538 return true
539 end 539 end
540 540
541 -local function chooseCommon(self, room, block, chooseData, choose) 541 +local function chooseCommon(self, room, block, chooseData, choose, tag)
542 if not chooseData or not chooseData["button".. choose .."cond"] then return end 542 if not chooseData or not chooseData["button".. choose .."cond"] then return end
543 543
544 local cond = chooseData["button".. choose .."cond"]:toArray(true, "=") 544 local cond = chooseData["button".. choose .."cond"]:toArray(true, "=")
@@ -589,25 +589,37 @@ local function chooseCommon(self, room, block, chooseData, choose) @@ -589,25 +589,37 @@ local function chooseCommon(self, room, block, chooseData, choose)
589 return true 589 return true
590 end 590 end
591 end, 591 end,
592 - }  
593 - assert(not cond[1] or checkCond[cond[1]], "error cond, event_[link]chooseCsv id :" .. block.event.id) 592 + [7] = function()
  593 + local buff = self.battle.player:getBuffById(cond[2])
  594 + if buff and buff:getLayer() >= cond[3] then
  595 + return true
  596 + end
  597 + end,
  598 + [8] = function()
  599 + return self:isHaveArtifact(cond[2])
  600 + end
  601 + }
  602 + assert(not cond[1] or checkCond[cond[1]], "error cond, event_" .. (tag or "choose") .. "Csv id :" .. block.event.id)
594 603
595 if cond[1] and not checkCond[cond[1]]() then return end 604 if cond[1] and not checkCond[cond[1]]() then return end
596 local clearBlock = chooseData.keep ~= 1 605 local clearBlock = chooseData.keep ~= 1
597 local effects = chooseData["button".. choose .."effect"]:toTableArray(true) 606 local effects = chooseData["button".. choose .."effect"]:toTableArray(true)
598 for _, effect in ipairs(effects) do 607 for _, effect in ipairs(effects) do
599 - if effect[1] == 1 then  
600 - local reward = csvdb["event_dropCsv"][effect[2]]["range"]:randWeight(true)  
601 - effect[2] = reward[1]  
602 - effect[3] = reward[2]  
603 - end  
604 -  
605 local doEffect = { 608 local doEffect = {
606 [1] = function() -- 获得某道具N个 609 [1] = function() -- 获得某道具N个
607 - self:backReward(self:award({[effect[2]] = effect[3]}, {})) 610 + local count = effect[3] or 1
  611 + local reward = {}
  612 + for i = 1, count do
  613 + local item = csvdb["event_dropCsv"][effect[2]]["range"]:randWeight(true)
  614 + reward[item[1]] = (reward[item[1]] or 0) + item[2]
  615 + end
  616 + self:backReward(self:award(reward, {}))
608 end, 617 end,
609 [2] = function() --获得冒险buff 618 [2] = function() --获得冒险buff
610 - self.battle.player:addBuff(effect[2]) 619 + local layer = effect[3] or 1
  620 + for i = 1, layer do
  621 + self.battle.player:addBuff(effect[2])
  622 + end
611 end, 623 end,
612 [3] = function() --发现怪物 624 [3] = function() --发现怪物
613 self:getCurMap():addNewMonsterRand(effect[2], {room, block}) 625 self:getCurMap():addNewMonsterRand(effect[2], {room, block})
@@ -615,25 +627,74 @@ local function chooseCommon(self, room, block, chooseData, choose) @@ -615,25 +627,74 @@ local function chooseCommon(self, room, block, chooseData, choose)
615 end, 627 end,
616 [4] = function() --无事发生 628 [4] = function() --无事发生
617 end, 629 end,
  630 + [5] = function() --5=属性枚举=数值;直接增加玩家属性
  631 + local attr
  632 + if effect[3] == 0 then
  633 + attr = "sp"
  634 + else
  635 + attr = AttsEnumEx[effect[3]]
  636 + if not AdvAttsEnum[attr] then return end
  637 + end
  638 + self.battle.player:addBaseAttr(attr, effect[4], effect[2])
  639 + end,
  640 + [6] = function() -- 商店
  641 + block:updateEvent({
  642 + etype = AdvEventType.Trader,
  643 + id = effect[2]
  644 + })
  645 + block:randomEvent()
  646 + clearBlock = false
  647 + end,
  648 + [7] = function() -- 建筑
  649 + block:updateEvent({
  650 + etype = AdvEventType.Build,
  651 + id = effect[2]
  652 + })
  653 + block:randomEvent()
  654 + clearBlock = false
  655 + end,
  656 + [8] = function() -- 选择
  657 + block:updateEvent({
  658 + etype = AdvEventType.Choose,
  659 + id = effect[2]
  660 + })
  661 + block:randomEvent()
  662 + clearBlock = false
  663 + end,
  664 + [9] = function() -- click
  665 + block:updateEvent({
  666 + etype = AdvEventType.Click,
  667 + id = effect[2]
  668 + })
  669 + block:randomEvent()
  670 + clearBlock = false
  671 + end,
  672 + [10] = function() -- 陷阱
  673 + block:updateEvent({
  674 + etype = AdvEventType.Trap,
  675 + id = effect[2]
  676 + })
  677 + block:randomEvent()
  678 + clearBlock = false
  679 + end,
618 [11] = function() -- 获得神器 680 [11] = function() -- 获得神器
619 self:waitChooseArtifact() --等待获取神器 681 self:waitChooseArtifact() --等待获取神器
620 end 682 end
621 } 683 }
622 - assert(doEffect[effect[1]], "error effect, event_[link]chooseCsv id :" .. block.event.id) 684 + assert(doEffect[effect[1]], "error effect, event_" .. (tag or "choose") .. "Csv id :" .. block.event.id)
623 doEffect[effect[1]]() 685 doEffect[effect[1]]()
624 end 686 end
625 - self:checkTask(Adv.TaskType.Choose, 1, block.event.id)  
626 - self:checkAchievement(Adv.AchievType.Choose, 1, block.event.id)  
627 - self:checkAdvUnlock(3, block.event.id)  
628 return true, clearBlock 687 return true, clearBlock
629 end 688 end
630 689
631 local function clickChoose(self, room, block, params) 690 local function clickChoose(self, room, block, params)
632 local choose = params.choose 691 local choose = params.choose
633 local chooseData = csvdb["event_chooseCsv"][block.event.id] 692 local chooseData = csvdb["event_chooseCsv"][block.event.id]
634 - local status, clearBlock = chooseCommon(self, room, block, chooseData, choose) 693 + local status, clearBlock = chooseCommon(self, room, block, chooseData, choose, "choose")
635 if not status then return end 694 if not status then return end
636 - 695 + self:checkAdvUnlock(3, block.event.id)
  696 + self:checkTask(Adv.TaskType.Choose, 1, block.event.id)
  697 + self:checkAchievement(Adv.AchievType.Choose, 1, block.event.id)
637 if clearBlock then 698 if clearBlock then
638 block:clear() 699 block:clear()
639 end 700 end
@@ -643,7 +704,7 @@ end @@ -643,7 +704,7 @@ end
643 local function clickLinkChoose(self, room, block, params) 704 local function clickLinkChoose(self, room, block, params)
644 local choose = params.choose 705 local choose = params.choose
645 local chooseData = csvdb["event_linkchooseCsv"][block.event.id] 706 local chooseData = csvdb["event_linkchooseCsv"][block.event.id]
646 - local status, clearBlock = chooseCommon(self, room, block, chooseData, choose) 707 + local status, clearBlock = chooseCommon(self, room, block, chooseData, choose, "link")
647 if not status then return end 708 if not status then return end
648 709
649 -- 完成统计次数 710 -- 完成统计次数
@@ -694,31 +755,14 @@ local function clickTrader(self, room, block, params) @@ -694,31 +755,14 @@ local function clickTrader(self, room, block, params)
694 end 755 end
695 756
696 local function clickBuild(self, room, block, params) 757 local function clickBuild(self, room, block, params)
697 - local buildData = csvdb["event_buildingCsv"][block.event.id]  
698 - if not buildData then return end-- 偷偷改表了  
699 - if not block.event.effect then return end -- 没有效果 气人不  
700 - local clearBlock = true  
701 - local effect = block.event.effect  
702 - --todo 效果生效  
703 - local doEffect = {  
704 - [1] = function() -- 获得某道具N个  
705 - self:backReward(self:award({[effect[2]] = effect[3]}, {}))  
706 - end,  
707 - [2] = function() --获得冒险buff  
708 - self.battle.player:addBuff(effect[2])  
709 - end,  
710 - [3] = function() --发现怪物  
711 - self:getCurMap():addNewMonsterRand(effect[2], {room, block})  
712 - clearBlock = false  
713 - end,  
714 - [4] = function() --无事发生  
715 - end  
716 - }  
717 - assert(doEffect[effect[1]], "error effect, event_buildingCsv id :" .. block.event.id)  
718 - if not self:cost(buildData.required:toNumMap(), {}) then return end  
719 - doEffect[effect[1]]() 758 + local choose = params.choose
  759 + local chooseData = csvdb["event_buildingCsv"][block.event.id]
  760 + local status, clearBlock = chooseCommon(self, room, block, chooseData, choose, "build")
  761 + if not status then return end
  762 +
720 self:checkTask(Adv.TaskType.Build, 1, block.event.id) 763 self:checkTask(Adv.TaskType.Build, 1, block.event.id)
721 self:checkAchievement(Adv.AchievType.Build, 1, block.event.id) 764 self:checkAchievement(Adv.AchievType.Build, 1, block.event.id)
  765 +
722 if clearBlock then 766 if clearBlock then
723 block:clear() 767 block:clear()
724 end 768 end
src/adv/AdvBuff.lua
@@ -247,7 +247,7 @@ local BuffFactory = { @@ -247,7 +247,7 @@ local BuffFactory = {
247 247
248 [Buff.CLEAR_BUFF] = function(_Buff) 248 [Buff.CLEAR_BUFF] = function(_Buff)
249 _Buff._init = function(self, data) 249 _Buff._init = function(self, data)
250 - for _, buff in ipairs(self.buffs) do -- 挂上就清除一下子 250 + for _, buff in ipairs(self.owner.buffs) do -- 挂上就清除一下子
251 if not buff.isDel and self:canEffect(buff.id) and not self.isDel then 251 if not buff.isDel and self:canEffect(buff.id) and not self.isDel then
252 if not buff.isDel and not self.isDel then 252 if not buff.isDel and not self.isDel then
253 self:effect() 253 self:effect()
@@ -629,6 +629,10 @@ function Buff:doEffectChange(effect) @@ -629,6 +629,10 @@ function Buff:doEffectChange(effect)
629 return effect * (1 + change) 629 return effect * (1 + change)
630 end 630 end
631 631
  632 +function Buff:getLayer()
  633 + return self.layer
  634 +end
  635 +
632 function Buff:getDB() 636 function Buff:getDB()
633 local db = {} 637 local db = {}
634 if self._getDB then 638 if self._getDB then
src/adv/AdvPlayer.lua
@@ -575,19 +575,39 @@ function Player:addExp(value) @@ -575,19 +575,39 @@ function Player:addExp(value)
575 local delta = level - self.level 575 local delta = level - self.level
576 if delta > 0 then 576 if delta > 0 then
577 for attr, _ in pairs(AdvAttsEnum) do 577 for attr, _ in pairs(AdvAttsEnum) do
578 - if attr == "hp" then  
579 - self[attr] = self[attr] + self.growth[attr] * delta  
580 - self._hpMax = self._hpMax + self.growth[attr] * delta  
581 - self:reSetHpMax()  
582 - else  
583 - self["_" .. attr] = self["_" .. attr] + self.growth[attr] * delta  
584 - self:reSetAttr(attr)  
585 - end 578 + self:addBaseAttr(attr, self.growth[attr] * delta)
586 end 579 end
587 end 580 end
588 self.level = level 581 self.level = level
589 self.exp = newExp 582 self.exp = newExp
590 end 583 end
  584 +--vtype 0/1 值/%
  585 +function Player:addBaseAttr(attr, value, vtype)
  586 + local attrName = attr
  587 + if attr == "hp" then
  588 + attrName = "hpMax"
  589 + elseif attr = "sp" then
  590 + attrName = "spMax"
  591 + end
  592 + local baseName = "_" .. attrName
  593 + if not self[baseName] then return end
  594 + local oldV = self[baseName]
  595 +
  596 + local change = value
  597 + if vtype == 1 then
  598 + change = oldV * value / 100
  599 + end
  600 + self[baseName] = self[baseName] + change
  601 + if attr == "hp" then
  602 + self.hp = self.hp + change
  603 + self:reSetHpMax()
  604 + elseif attr == "sp" then
  605 + self.sp = self.sp + change
  606 + self:reSetSpMax()
  607 + else
  608 + self:reSetAttr(attr)
  609 + end
  610 +end
591 611
592 --cType 0 or nil 值 1 百分比 612 --cType 0 or nil 值 1 百分比
593 function Player:changeSp(value, cType) 613 function Player:changeSp(value, cType)