Commit 1ffc16b9a1583fccd06df72e83691546a4e1c15d

Authored by zhouhaihai
1 parent f45d3a7b

冒险 选择点和 建筑

src/adv/Adv.lua
... ... @@ -538,7 +538,7 @@ local function clickMonster(self, room, block, params)
538 538 return true
539 539 end
540 540  
541   -local function chooseCommon(self, room, block, chooseData, choose)
  541 +local function chooseCommon(self, room, block, chooseData, choose, tag)
542 542 if not chooseData or not chooseData["button".. choose .."cond"] then return end
543 543  
544 544 local cond = chooseData["button".. choose .."cond"]:toArray(true, "=")
... ... @@ -589,25 +589,37 @@ local function chooseCommon(self, room, block, chooseData, choose)
589 589 return true
590 590 end
591 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 604 if cond[1] and not checkCond[cond[1]]() then return end
596 605 local clearBlock = chooseData.keep ~= 1
597 606 local effects = chooseData["button".. choose .."effect"]:toTableArray(true)
598 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 608 local doEffect = {
606 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 617 end,
609 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 623 end,
612 624 [3] = function() --发现怪物
613 625 self:getCurMap():addNewMonsterRand(effect[2], {room, block})
... ... @@ -615,25 +627,74 @@ local function chooseCommon(self, room, block, chooseData, choose)
615 627 end,
616 628 [4] = function() --无事发生
617 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 680 [11] = function() -- 获得神器
619 681 self:waitChooseArtifact() --等待获取神器
620 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 685 doEffect[effect[1]]()
624 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 687 return true, clearBlock
629 688 end
630 689  
631 690 local function clickChoose(self, room, block, params)
632 691 local choose = params.choose
633 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 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 698 if clearBlock then
638 699 block:clear()
639 700 end
... ... @@ -643,7 +704,7 @@ end
643 704 local function clickLinkChoose(self, room, block, params)
644 705 local choose = params.choose
645 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 708 if not status then return end
648 709  
649 710 -- 完成统计次数
... ... @@ -694,31 +755,14 @@ local function clickTrader(self, room, block, params)
694 755 end
695 756  
696 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 763 self:checkTask(Adv.TaskType.Build, 1, block.event.id)
721 764 self:checkAchievement(Adv.AchievType.Build, 1, block.event.id)
  765 +
722 766 if clearBlock then
723 767 block:clear()
724 768 end
... ...
src/adv/AdvBuff.lua
... ... @@ -247,7 +247,7 @@ local BuffFactory = {
247 247  
248 248 [Buff.CLEAR_BUFF] = function(_Buff)
249 249 _Buff._init = function(self, data)
250   - for _, buff in ipairs(self.buffs) do -- 挂上就清除一下子
  250 + for _, buff in ipairs(self.owner.buffs) do -- 挂上就清除一下子
251 251 if not buff.isDel and self:canEffect(buff.id) and not self.isDel then
252 252 if not buff.isDel and not self.isDel then
253 253 self:effect()
... ... @@ -629,6 +629,10 @@ function Buff:doEffectChange(effect)
629 629 return effect * (1 + change)
630 630 end
631 631  
  632 +function Buff:getLayer()
  633 + return self.layer
  634 +end
  635 +
632 636 function Buff:getDB()
633 637 local db = {}
634 638 if self._getDB then
... ...
src/adv/AdvPlayer.lua
... ... @@ -575,19 +575,39 @@ function Player:addExp(value)
575 575 local delta = level - self.level
576 576 if delta > 0 then
577 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 579 end
587 580 end
588 581 self.level = level
589 582 self.exp = newExp
590 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 612 --cType 0 or nil 值 1 百分比
593 613 function Player:changeSp(value, cType)
... ...