From 81032a9c2929a13da3a3be259ce09dcda864497d Mon Sep 17 00:00:00 2001 From: zhouhaihai Date: Fri, 17 Jan 2020 16:44:08 +0800 Subject: [PATCH] 抽奖 --- src/GlobalVar.lua | 1 + src/actions/AdvAction.lua | 51 ++++++++++++++++++++++++++++++--------------------- src/adv/Adv.lua | 8 -------- src/adv/AdvPlayer.lua | 36 +++++++++++++----------------------- 4 files changed, 44 insertions(+), 52 deletions(-) diff --git a/src/GlobalVar.lua b/src/GlobalVar.lua index a37db56..546bc60 100644 --- a/src/GlobalVar.lua +++ b/src/GlobalVar.lua @@ -147,6 +147,7 @@ AdvBackEventType = { Potion = 22, -- 使用营养剂 Task = 23, --接收任务 Artifact = 24, --获得神器 + Level = 25, -- 升级 } AdvScoreType = { diff --git a/src/actions/AdvAction.lua b/src/actions/AdvAction.lua index d9f8808..5c5f8b8 100644 --- a/src/actions/AdvAction.lua +++ b/src/actions/AdvAction.lua @@ -513,36 +513,45 @@ end function _M.wheelSurfRpc(agent, data) local role = agent.role - if not role:isFuncOpen(FuncOpenType.AdvWheelSurf) then return end + -- if not role:isFuncOpen(FuncOpenType.AdvWheelSurf) then return end -- 默认解锁 - if not role._advWheelSurfCount then return end + local msg = MsgPack.unpack(data) - local drawData = csvdb["adv_wheelsurfCsv"][role:getFuncLv(FuncOpenType.AdvWheelSurf)] - if not drawData then return end + local ptype = msg.ptype -- 池子类型 1, 2 + local ctype = msg.ctype -- 抽取次数 1 1次,2 10次 - local costs = drawData.cost:toArray(true, "=") - local maxt = math.max(#costs, drawData.time) + local countPool = { + [1] = 1, + [2] = 10 + } + local count = countPool[ctype] + if not count then return end - if role._advWheelSurfCount >= maxt then - role._advWheelSurfCount = nil - return - end - local cost = costs[role._advWheelSurfCount + 1] - if cost > 0 then - if not role:checkItemEnough({[ItemId.Diamond] = cost}) then return end - role:costItems({[ItemId.Diamond] = cost}) - end + local drawTypeData = csvdb["adv_wheelsurfCsv"][ptype] + if not drawTypeData then return end + local drawData = drawTypeData[role:getFuncLv(FuncOpenType.AdvWheelSurf)] + if not drawData then return end - role._advWheelSurfCount = role._advWheelSurfCount + 1 - if role._advWheelSurfCount >= maxt then - role._advWheelSurfCount = nil + local costs = drawData.cost:toNumMap() + for id, count_ in pairs(cost) do + costs[id] = count_ * count end - local gift = drawData.pool:randWeight(true) + if not role:checkItemEnough(costs) then return end + role:costItems(costs) - local reward = role:award({[gift[1]] = gift[2]}) - SendPacket(actionCodes.Adv_wheelSurfRpc, MsgPack.pack({reward = reward})) + -- 随机池子 + local pool = drawData.weight:randWeight() + local reward = {} + local backReward = {} + for i = 1, count do + local gift = drawData["pool" .. pool]:randWeight(true) + reward[gift[1]] = (reward[gift[1]] or 0) + gift[2] + table.insert(backReward, gift) + end + role:award(reward) + SendPacket(actionCodes.Adv_wheelSurfRpc, MsgPack.pack({reward = backReward})) return true end diff --git a/src/adv/Adv.lua b/src/adv/Adv.lua index 29a8ebc..bf0287f 100644 --- a/src/adv/Adv.lua +++ b/src/adv/Adv.lua @@ -58,7 +58,6 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify) self.lastEnemyId = 1 self.mapStack = {1} -- 最后一个为当前的地图 self.lchoose = self.lchoose or {} - self.owner._advWheelSurfCount = nil -- 抽奖进行次数 self.cacheUnlock = self.cacheUnlock or {} -- 随机出地图 @@ -359,10 +358,6 @@ function Adv:over(success, isAllPass) -- 冒险队等级升一下子 self.owner:checkAdvLvByAddWin() - - if self.owner:isFuncOpen(FuncOpenType.AdvWheelSurf) then - self.owner._advWheelSurfCount = 0 -- 抽奖进行次数 - end end self:clearAdvUnlockCache() self:clear() @@ -1167,9 +1162,6 @@ function Adv:backHpChange(enemyId, change, isMax) self:pushBackEvent(AdvBackEventType.HpChange, {enemyId = enemyId, change = change, isMax = isMax}) end -function Adv:backMiss(enemyId) - self:pushBackEvent(AdvBackEventType.Miss, {enemyId = enemyId}) -end -- if is player enemyId is nil function Adv:backAtkChange(enemyId, change) self:pushBackEvent(AdvBackEventType.AtkChange, {enemyId = enemyId, change = change}) diff --git a/src/adv/AdvPlayer.lua b/src/adv/AdvPlayer.lua index dc5a177..8186a80 100644 --- a/src/adv/AdvPlayer.lua +++ b/src/adv/AdvPlayer.lua @@ -68,7 +68,7 @@ function BaseObject:clearRound() end for i = #self.buffs, 1, -1 do if self.buffs[i].isDel then - self.battle.adv:backBuff(self.id, self.buffs[i].id, true) + self.battle.adv:backBuff(self.monsterId, self.buffs[i].id, true) self.buffs[i]:endBuff() table.remove(self.buffs, i) end @@ -99,7 +99,7 @@ function BaseObject:addPassive(params) if not skillData[level] then return end table.insert(self.passives, Passive.new(self, { id = skillId, level = level })) - self.battle.adv:backPassive(self.id, skillId) + self.battle.adv:backPassive(self.monsterId, skillId) end function BaseObject:getPassiveIdx(passive) @@ -145,7 +145,7 @@ function BaseObject:addBuff(buffId, releaser) table.insert(self.buffs, Buff.create(self, releaser, {id = buffId})) end self:triggerPassive(Passive.GET_BUFF, {buffId = buffId}) - self.battle.adv:backBuff(self.id, buffId) + self.battle.adv:backBuff(self.monsterId, buffId) end function BaseObject:getBuffById(bId) @@ -159,7 +159,7 @@ end function BaseObject:delBuffById(bId) for idx, buff in ipairs(self.buffs) do if buff.id == bId then - self.battle.adv:backBuff(self.id, buff.id, true) + self.battle.adv:backBuff(self.monsterId, buff.id, true) buff:endBuff() table.remove(self.buffs, idx) return buff @@ -285,9 +285,9 @@ function BaseObject:reSetAttr(field) local delta = self[field] - old if delta ~= 0 then if field == "atk" then - self.battle.adv:backAtkChange(self.id, delta) + self.battle.adv:backAtkChange(self.monsterId, delta) elseif field == "def" then - self.battle.adv:backDefChange(self.id, delta) + self.battle.adv:backDefChange(self.monsterId, delta) end end end @@ -326,19 +326,6 @@ end --进入这个方法之前计算好释放者加成的伤害 function BaseObject:hurt(value, releaser, params) params = params or {} - if params.hurtType and params.hurtType == 1 then - -- releaser:triggerPassive(Passive.SELF_ATK) - -- for _, team in ipairs(releaser:getTeam(1, true)) do - -- team:triggerPassive(Passive.TEAM_ATK) - -- end - -- if self:hadBuff(Buff.IMMNUE_ATK) then return end --无视普通攻击 - - -- local hit = releaser.hit - self.miss --命中率 - -- if hit < math.randomInt(1, 100) then --miss - -- self.battle.adv:backMiss(self.id) - -- return - -- end - end if params.hurtType and (params.hurtType == 2 or params.hurtType == 6) then self:triggerPassive(Passive.SELF_HURT, {trigger = releaser, buffId = params.buffId}) @@ -397,7 +384,7 @@ function BaseObject:hurt(value, releaser, params) end --受伤了~ - self.battle.adv:backHpChange(self.id, -value) + self.battle.adv:backHpChange(self.monsterId, -value) self.hp = math.max(0, self.hp - value) if self.cutHp then @@ -426,7 +413,7 @@ function BaseObject:recover(value, releaser, params) params = params or {} value = math.max(0, math.ceil(value)) self.hp = math.min(self.hpMax, self.hp + value) - self.battle.adv:backHpChange(self.id, value) + self.battle.adv:backHpChange(self.monsterId, value) end function BaseObject:addSpecialSkill(skillId, skillLevel, target) @@ -439,7 +426,7 @@ function BaseObject:releaseSkill(skillId, target) local skill = Skill.new(self, {id = skillId, target = target}) --返回客户端 for _, target in ipairs(skill:getTargets()) do - self.battle.adv:backSkill(self.id, skillId, target.id) + self.battle.adv:backSkill(self.monsterId, skillId, target.id) end skill:doEffect() for _, team in ipairs(self:getTeam(2)) do @@ -576,6 +563,7 @@ function Player:addExp(value) for attr, _ in pairs(AdvAttsEnum) do self:addBaseAttr(attr, self.growth[attr] * delta) end + self.battle.adv:pushBackEvent(AdvBackEventType.Level, {level = level, delta = delta}) end self.level = level self.exp = newExp @@ -619,7 +607,9 @@ function Player:changeSp(value, cType) self.sp = self.sp + self.sp * value / 100 end self.sp = math.floor(math.min(self.spMax, math.max(0, self.sp))) - self.battle.adv:pushBackEvent(AdvBackEventType.SpChange, {change = self.sp - oldSp}) + if self.sp - oldSp ~= 0 then + self.battle.adv:pushBackEvent(AdvBackEventType.SpChange, {change = self.sp - oldSp}) + end end -- 重新计算 魔法上限 -- libgit2 0.21.2