From e10edb5f2060abce65b7b9f28733a17a0d504b37 Mon Sep 17 00:00:00 2001 From: zhouahaihai Date: Sat, 20 Apr 2019 17:16:21 +0800 Subject: [PATCH] 冒险事件新 --- src/adv/Adv.lua | 72 +++++++++++++++++++++++++++++++++++------------------------------------- src/adv/AdvPlayer.lua | 6 +++--- 2 files changed, 38 insertions(+), 40 deletions(-) diff --git a/src/adv/Adv.lua b/src/adv/Adv.lua index 92e1683..9a6ff56 100644 --- a/src/adv/Adv.lua +++ b/src/adv/Adv.lua @@ -340,19 +340,6 @@ function Block:open(adv, room) self.event.effect[3] = reward[2] end end - --抉择点 - randomFunc[AdvEventType.Choose] = function() - local data = csvdb["event_chooseCsv"][self.event.id] - self.event.effect = {} - for i = 1, 2 do - self.event.effect[i] = data["button".. i .."effect"]:toArray(true, "=") - if self.event.effect[i][1] == 1 then --获得某道具 - local reward = csvdb["event_dropCsv"][self.event.effect[i][2]]["range"]:randWeight(true) - self.event.effect[i][2] = reward[1] - self.event.effect[i][3] = reward[2] - end - end - end if self.event then -- 随机出具体的事件 if randomFunc[self.event.etype] then randomFunc[self.event.etype]() @@ -757,23 +744,32 @@ local function clickChoose(self, room, block, params) assert(not cond[1] or checkCond[cond[1]], "error cond, event_chooseCsv id :" .. block.event.id) if cond[1] and not checkCond[cond[1]]() then return end local clearBlock = true - local effect = block.event.effect[choose] - local doEffect = { - [1] = function() -- 获得某道具N个 - self:backReward(self:award({[effect[2]] = effect[3]}, {})) - end, - [2] = function() --获得冒险buff - self.battle.player:addBuff(effect[2]) - end, - [3] = function() --发现怪物 - self:addNewMonsterRand(effect[2], {room, block}) - clearBlock = false - end, - [4] = function() --无事发生 + local effects = chooseData["button".. choose .."effect"]:toTableArray(true) + for _, effect in ipairs(effects) do + if effect[1] == 1 then + local reward = csvdb["event_dropCsv"][effect[2]]["range"]:randWeight(true) + effect[2] = reward[1] + effect[3] = reward[2] end - } - assert(doEffect[effect[1]], "error effect, event_chooseCsv id :" .. block.event.id) - doEffect[effect[1]]() + + local doEffect = { + [1] = function() -- 获得某道具N个 + self:backReward(self:award({[effect[2]] = effect[3]}, {})) + end, + [2] = function() --获得冒险buff + self.battle.player:addBuff(effect[2]) + end, + [3] = function() --发现怪物 + self:addNewMonsterRand(effect[2], {room, block}) + clearBlock = false + end, + [4] = function() --无事发生 + end + } + assert(doEffect[effect[1]], "error effect, event_chooseCsv id :" .. block.event.id) + doEffect[effect[1]]() + end + if clearBlock then room:clearBEvent(block) end @@ -797,7 +793,7 @@ local function clickTrader(self, room, block, params) if not block.event.shop or not block.event.shop[buyId] then return end if (block.event.status or ""):getv(buyId, 0) == 1 then return end -- 买过了 - if not self:cost(traderData.type:toNumMap(), {}) then return end --不够 + if not self:cost({[traderData.type] = block.event.shop[buyId][3]}, {}) then return end --不够 local reward = self:award({[block.event.shop[buyId][1]] = block.event.shop[buyId][2]}, {}) block.event.status = block.event.status:setv(buyId, 1) @@ -827,7 +823,7 @@ local function clickBuild(self, room, block, params) end } assert(doEffect[effect[1]], "error effect, event_buildingCsv id :" .. block.event.id) - if not self:cost({[buildData.type] = 1}, {}) then return end + if not self:cost(buildData.required:toNumMap(), {}) then return end doEffect[effect[1]]() if clearBlock then room:clearBEvent(block) @@ -1075,12 +1071,14 @@ function Adv:scoreChange(scoreType, pms) end function Adv:getScore() - return math.floor(math.max( - (self.advInfo.score[AdvScoreType.Level] or 0) + - (self.advInfo.score[AdvScoreType.Block] or 0) + - (self.advInfo.score[AdvScoreType.Hurt] or 0), - 0) + (self.advInfo.score[AdvScoreType.Kill] or 0) + - (self.advInfo.score[AdvScoreType.Item] or 0)) + self.advInfo.score[AdvScoreType.Level] = math.floor(self.advInfo.score[AdvScoreType.Level] or 0) + self.advInfo.score[AdvScoreType.Block] = math.floor(self.advInfo.score[AdvScoreType.Block] or 0) + self.advInfo.score[AdvScoreType.Hurt] = math.max(math.floor(self.advInfo.score[AdvScoreType.Hurt] or 0), - (self.advInfo.score[AdvScoreType.Level] + self.advInfo.score[AdvScoreType.Block])) + self.advInfo.score[AdvScoreType.Kill] = math.floor(self.advInfo.score[AdvScoreType.Kill] or 0) + self.advInfo.score[AdvScoreType.Item] = math.floor(self.advInfo.score[AdvScoreType.Item] or 0) + + return self.advInfo.score[AdvScoreType.Level] + self.advInfo.score[AdvScoreType.Block] + self.advInfo.score[AdvScoreType.Hurt] + + self.advInfo.score[AdvScoreType.Kill] + self.advInfo.score[AdvScoreType.Item] end function Adv:popBackEvents() diff --git a/src/adv/AdvPlayer.lua b/src/adv/AdvPlayer.lua index db09e4f..5bd3782 100644 --- a/src/adv/AdvPlayer.lua +++ b/src/adv/AdvPlayer.lua @@ -141,7 +141,7 @@ function BaseObject:reSetAttr(field) self[field] = self["_" .. field] --重置一下 local fieldToBuff = {atk = Buff.IMMNUE_ATK, hit = Buff.HIT_CHANGE, miss = Buff.MISS_CHANGE, def = Buff.DEF_CHANGE} local effect = self:getCommonBuffEffect(fieldToBuff[field]) - self[field] = (self[field] + effect[0]) * (1 + effect[1]) + self[field] = math.ceil((self[field] + effect[0]) * (1 + effect[1])) local delta = self[field] - old if delta ~= 0 then if field == "atk" then @@ -223,7 +223,7 @@ function BaseObject:hurt(value, releaser, params) end end - value = math.max(0, value) + value = math.max(0, math.ceil(value)) if value == 0 then return end -- 反弹伤害 if params.hurtType ~= 3 and releaser and not releaser.isDead then @@ -257,7 +257,7 @@ end --恢复 function BaseObject:recover(value, releaser, params) params = params or {} - value = math.max(0, value) + value = math.max(0, math.ceil(value)) self.hp = math.min(self.hpMax, self.hp + value) self.battle.adv:backHpChange(self.id, value) end -- libgit2 0.21.2