Commit 81032a9c2929a13da3a3be259ce09dcda864497d

Authored by zhouhaihai
1 parent 3b4d23d8

抽奖

@@ -147,6 +147,7 @@ AdvBackEventType = { @@ -147,6 +147,7 @@ AdvBackEventType = {
147 Potion = 22, -- 使用营养剂 147 Potion = 22, -- 使用营养剂
148 Task = 23, --接收任务 148 Task = 23, --接收任务
149 Artifact = 24, --获得神器 149 Artifact = 24, --获得神器
  150 + Level = 25, -- 升级
150 } 151 }
151 152
152 AdvScoreType = { 153 AdvScoreType = {
src/actions/AdvAction.lua
@@ -513,36 +513,45 @@ end @@ -513,36 +513,45 @@ end
513 513
514 function _M.wheelSurfRpc(agent, data) 514 function _M.wheelSurfRpc(agent, data)
515 local role = agent.role 515 local role = agent.role
516 - if not role:isFuncOpen(FuncOpenType.AdvWheelSurf) then return end 516 + -- if not role:isFuncOpen(FuncOpenType.AdvWheelSurf) then return end -- 默认解锁
517 517
518 - if not role._advWheelSurfCount then return end 518 + local msg = MsgPack.unpack(data)
519 519
520 - local drawData = csvdb["adv_wheelsurfCsv"][role:getFuncLv(FuncOpenType.AdvWheelSurf)]  
521 - if not drawData then return end 520 + local ptype = msg.ptype -- 池子类型 1, 2
  521 + local ctype = msg.ctype -- 抽取次数 1 1次,2 10次
522 522
523 - local costs = drawData.cost:toArray(true, "=")  
524 - local maxt = math.max(#costs, drawData.time) 523 + local countPool = {
  524 + [1] = 1,
  525 + [2] = 10
  526 + }
  527 + local count = countPool[ctype]
  528 + if not count then return end
525 529
526 - if role._advWheelSurfCount >= maxt then  
527 - role._advWheelSurfCount = nil  
528 - return  
529 - end  
530 530
531 - local cost = costs[role._advWheelSurfCount + 1]  
532 - if cost > 0 then  
533 - if not role:checkItemEnough({[ItemId.Diamond] = cost}) then return end  
534 - role:costItems({[ItemId.Diamond] = cost})  
535 - end 531 + local drawTypeData = csvdb["adv_wheelsurfCsv"][ptype]
  532 + if not drawTypeData then return end
  533 + local drawData = drawTypeData[role:getFuncLv(FuncOpenType.AdvWheelSurf)]
  534 + if not drawData then return end
536 535
537 - role._advWheelSurfCount = role._advWheelSurfCount + 1  
538 - if role._advWheelSurfCount >= maxt then  
539 - role._advWheelSurfCount = nil 536 + local costs = drawData.cost:toNumMap()
  537 + for id, count_ in pairs(cost) do
  538 + costs[id] = count_ * count
540 end 539 end
541 540
542 - local gift = drawData.pool:randWeight(true) 541 + if not role:checkItemEnough(costs) then return end
  542 + role:costItems(costs)
543 543
544 - local reward = role:award({[gift[1]] = gift[2]})  
545 - SendPacket(actionCodes.Adv_wheelSurfRpc, MsgPack.pack({reward = reward})) 544 + -- 随机池子
  545 + local pool = drawData.weight:randWeight()
  546 + local reward = {}
  547 + local backReward = {}
  548 + for i = 1, count do
  549 + local gift = drawData["pool" .. pool]:randWeight(true)
  550 + reward[gift[1]] = (reward[gift[1]] or 0) + gift[2]
  551 + table.insert(backReward, gift)
  552 + end
  553 + role:award(reward)
  554 + SendPacket(actionCodes.Adv_wheelSurfRpc, MsgPack.pack({reward = backReward}))
546 return true 555 return true
547 end 556 end
548 557
@@ -58,7 +58,6 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify) @@ -58,7 +58,6 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify)
58 self.lastEnemyId = 1 58 self.lastEnemyId = 1
59 self.mapStack = {1} -- 最后一个为当前的地图 59 self.mapStack = {1} -- 最后一个为当前的地图
60 self.lchoose = self.lchoose or {} 60 self.lchoose = self.lchoose or {}
61 - self.owner._advWheelSurfCount = nil -- 抽奖进行次数  
62 self.cacheUnlock = self.cacheUnlock or {} 61 self.cacheUnlock = self.cacheUnlock or {}
63 62
64 -- 随机出地图 63 -- 随机出地图
@@ -359,10 +358,6 @@ function Adv:over(success, isAllPass) @@ -359,10 +358,6 @@ function Adv:over(success, isAllPass)
359 358
360 -- 冒险队等级升一下子 359 -- 冒险队等级升一下子
361 self.owner:checkAdvLvByAddWin() 360 self.owner:checkAdvLvByAddWin()
362 -  
363 - if self.owner:isFuncOpen(FuncOpenType.AdvWheelSurf) then  
364 - self.owner._advWheelSurfCount = 0 -- 抽奖进行次数  
365 - end  
366 end 361 end
367 self:clearAdvUnlockCache() 362 self:clearAdvUnlockCache()
368 self:clear() 363 self:clear()
@@ -1167,9 +1162,6 @@ function Adv:backHpChange(enemyId, change, isMax) @@ -1167,9 +1162,6 @@ function Adv:backHpChange(enemyId, change, isMax)
1167 self:pushBackEvent(AdvBackEventType.HpChange, {enemyId = enemyId, change = change, isMax = isMax}) 1162 self:pushBackEvent(AdvBackEventType.HpChange, {enemyId = enemyId, change = change, isMax = isMax})
1168 end 1163 end
1169 1164
1170 -function Adv:backMiss(enemyId)  
1171 - self:pushBackEvent(AdvBackEventType.Miss, {enemyId = enemyId})  
1172 -end  
1173 -- if is player enemyId is nil 1165 -- if is player enemyId is nil
1174 function Adv:backAtkChange(enemyId, change) 1166 function Adv:backAtkChange(enemyId, change)
1175 self:pushBackEvent(AdvBackEventType.AtkChange, {enemyId = enemyId, change = change}) 1167 self:pushBackEvent(AdvBackEventType.AtkChange, {enemyId = enemyId, change = change})
src/adv/AdvPlayer.lua
@@ -68,7 +68,7 @@ function BaseObject:clearRound() @@ -68,7 +68,7 @@ function BaseObject:clearRound()
68 end 68 end
69 for i = #self.buffs, 1, -1 do 69 for i = #self.buffs, 1, -1 do
70 if self.buffs[i].isDel then 70 if self.buffs[i].isDel then
71 - self.battle.adv:backBuff(self.id, self.buffs[i].id, true) 71 + self.battle.adv:backBuff(self.monsterId, self.buffs[i].id, true)
72 self.buffs[i]:endBuff() 72 self.buffs[i]:endBuff()
73 table.remove(self.buffs, i) 73 table.remove(self.buffs, i)
74 end 74 end
@@ -99,7 +99,7 @@ function BaseObject:addPassive(params) @@ -99,7 +99,7 @@ function BaseObject:addPassive(params)
99 if not skillData[level] then return end 99 if not skillData[level] then return end
100 table.insert(self.passives, Passive.new(self, { id = skillId, level = level })) 100 table.insert(self.passives, Passive.new(self, { id = skillId, level = level }))
101 101
102 - self.battle.adv:backPassive(self.id, skillId) 102 + self.battle.adv:backPassive(self.monsterId, skillId)
103 end 103 end
104 104
105 function BaseObject:getPassiveIdx(passive) 105 function BaseObject:getPassiveIdx(passive)
@@ -145,7 +145,7 @@ function BaseObject:addBuff(buffId, releaser) @@ -145,7 +145,7 @@ function BaseObject:addBuff(buffId, releaser)
145 table.insert(self.buffs, Buff.create(self, releaser, {id = buffId})) 145 table.insert(self.buffs, Buff.create(self, releaser, {id = buffId}))
146 end 146 end
147 self:triggerPassive(Passive.GET_BUFF, {buffId = buffId}) 147 self:triggerPassive(Passive.GET_BUFF, {buffId = buffId})
148 - self.battle.adv:backBuff(self.id, buffId) 148 + self.battle.adv:backBuff(self.monsterId, buffId)
149 end 149 end
150 150
151 function BaseObject:getBuffById(bId) 151 function BaseObject:getBuffById(bId)
@@ -159,7 +159,7 @@ end @@ -159,7 +159,7 @@ end
159 function BaseObject:delBuffById(bId) 159 function BaseObject:delBuffById(bId)
160 for idx, buff in ipairs(self.buffs) do 160 for idx, buff in ipairs(self.buffs) do
161 if buff.id == bId then 161 if buff.id == bId then
162 - self.battle.adv:backBuff(self.id, buff.id, true) 162 + self.battle.adv:backBuff(self.monsterId, buff.id, true)
163 buff:endBuff() 163 buff:endBuff()
164 table.remove(self.buffs, idx) 164 table.remove(self.buffs, idx)
165 return buff 165 return buff
@@ -285,9 +285,9 @@ function BaseObject:reSetAttr(field) @@ -285,9 +285,9 @@ function BaseObject:reSetAttr(field)
285 local delta = self[field] - old 285 local delta = self[field] - old
286 if delta ~= 0 then 286 if delta ~= 0 then
287 if field == "atk" then 287 if field == "atk" then
288 - self.battle.adv:backAtkChange(self.id, delta) 288 + self.battle.adv:backAtkChange(self.monsterId, delta)
289 elseif field == "def" then 289 elseif field == "def" then
290 - self.battle.adv:backDefChange(self.id, delta) 290 + self.battle.adv:backDefChange(self.monsterId, delta)
291 end 291 end
292 end 292 end
293 end 293 end
@@ -326,19 +326,6 @@ end @@ -326,19 +326,6 @@ end
326 --进入这个方法之前计算好释放者加成的伤害 326 --进入这个方法之前计算好释放者加成的伤害
327 function BaseObject:hurt(value, releaser, params) 327 function BaseObject:hurt(value, releaser, params)
328 params = params or {} 328 params = params or {}
329 - if params.hurtType and params.hurtType == 1 then  
330 - -- releaser:triggerPassive(Passive.SELF_ATK)  
331 - -- for _, team in ipairs(releaser:getTeam(1, true)) do  
332 - -- team:triggerPassive(Passive.TEAM_ATK)  
333 - -- end  
334 - -- if self:hadBuff(Buff.IMMNUE_ATK) then return end --无视普通攻击  
335 -  
336 - -- local hit = releaser.hit - self.miss --命中率  
337 - -- if hit < math.randomInt(1, 100) then --miss  
338 - -- self.battle.adv:backMiss(self.id)  
339 - -- return  
340 - -- end  
341 - end  
342 329
343 if params.hurtType and (params.hurtType == 2 or params.hurtType == 6) then 330 if params.hurtType and (params.hurtType == 2 or params.hurtType == 6) then
344 self:triggerPassive(Passive.SELF_HURT, {trigger = releaser, buffId = params.buffId}) 331 self:triggerPassive(Passive.SELF_HURT, {trigger = releaser, buffId = params.buffId})
@@ -397,7 +384,7 @@ function BaseObject:hurt(value, releaser, params) @@ -397,7 +384,7 @@ function BaseObject:hurt(value, releaser, params)
397 end 384 end
398 385
399 --受伤了~ 386 --受伤了~
400 - self.battle.adv:backHpChange(self.id, -value) 387 + self.battle.adv:backHpChange(self.monsterId, -value)
401 self.hp = math.max(0, self.hp - value) 388 self.hp = math.max(0, self.hp - value)
402 389
403 if self.cutHp then 390 if self.cutHp then
@@ -426,7 +413,7 @@ function BaseObject:recover(value, releaser, params) @@ -426,7 +413,7 @@ function BaseObject:recover(value, releaser, params)
426 params = params or {} 413 params = params or {}
427 value = math.max(0, math.ceil(value)) 414 value = math.max(0, math.ceil(value))
428 self.hp = math.min(self.hpMax, self.hp + value) 415 self.hp = math.min(self.hpMax, self.hp + value)
429 - self.battle.adv:backHpChange(self.id, value) 416 + self.battle.adv:backHpChange(self.monsterId, value)
430 end 417 end
431 418
432 function BaseObject:addSpecialSkill(skillId, skillLevel, target) 419 function BaseObject:addSpecialSkill(skillId, skillLevel, target)
@@ -439,7 +426,7 @@ function BaseObject:releaseSkill(skillId, target) @@ -439,7 +426,7 @@ function BaseObject:releaseSkill(skillId, target)
439 local skill = Skill.new(self, {id = skillId, target = target}) 426 local skill = Skill.new(self, {id = skillId, target = target})
440 --返回客户端 427 --返回客户端
441 for _, target in ipairs(skill:getTargets()) do 428 for _, target in ipairs(skill:getTargets()) do
442 - self.battle.adv:backSkill(self.id, skillId, target.id) 429 + self.battle.adv:backSkill(self.monsterId, skillId, target.id)
443 end 430 end
444 skill:doEffect() 431 skill:doEffect()
445 for _, team in ipairs(self:getTeam(2)) do 432 for _, team in ipairs(self:getTeam(2)) do
@@ -576,6 +563,7 @@ function Player:addExp(value) @@ -576,6 +563,7 @@ function Player:addExp(value)
576 for attr, _ in pairs(AdvAttsEnum) do 563 for attr, _ in pairs(AdvAttsEnum) do
577 self:addBaseAttr(attr, self.growth[attr] * delta) 564 self:addBaseAttr(attr, self.growth[attr] * delta)
578 end 565 end
  566 + self.battle.adv:pushBackEvent(AdvBackEventType.Level, {level = level, delta = delta})
579 end 567 end
580 self.level = level 568 self.level = level
581 self.exp = newExp 569 self.exp = newExp
@@ -619,7 +607,9 @@ function Player:changeSp(value, cType) @@ -619,7 +607,9 @@ function Player:changeSp(value, cType)
619 self.sp = self.sp + self.sp * value / 100 607 self.sp = self.sp + self.sp * value / 100
620 end 608 end
621 self.sp = math.floor(math.min(self.spMax, math.max(0, self.sp))) 609 self.sp = math.floor(math.min(self.spMax, math.max(0, self.sp)))
622 - self.battle.adv:pushBackEvent(AdvBackEventType.SpChange, {change = self.sp - oldSp}) 610 + if self.sp - oldSp ~= 0 then
  611 + self.battle.adv:pushBackEvent(AdvBackEventType.SpChange, {change = self.sp - oldSp})
  612 + end
623 end 613 end
624 614
625 -- 重新计算 魔法上限 615 -- 重新计算 魔法上限