Commit 81032a9c2929a13da3a3be259ce09dcda864497d

Authored by zhouhaihai
1 parent 3b4d23d8

抽奖

src/GlobalVar.lua
... ... @@ -147,6 +147,7 @@ AdvBackEventType = {
147 147 Potion = 22, -- 使用营养剂
148 148 Task = 23, --接收任务
149 149 Artifact = 24, --获得神器
  150 + Level = 25, -- 升级
150 151 }
151 152  
152 153 AdvScoreType = {
... ...
src/actions/AdvAction.lua
... ... @@ -513,36 +513,45 @@ end
513 513  
514 514 function _M.wheelSurfRpc(agent, data)
515 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 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 555 return true
547 556 end
548 557  
... ...
src/adv/Adv.lua
... ... @@ -58,7 +58,6 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify)
58 58 self.lastEnemyId = 1
59 59 self.mapStack = {1} -- 最后一个为当前的地图
60 60 self.lchoose = self.lchoose or {}
61   - self.owner._advWheelSurfCount = nil -- 抽奖进行次数
62 61 self.cacheUnlock = self.cacheUnlock or {}
63 62  
64 63 -- 随机出地图
... ... @@ -359,10 +358,6 @@ function Adv:over(success, isAllPass)
359 358  
360 359 -- 冒险队等级升一下子
361 360 self.owner:checkAdvLvByAddWin()
362   -
363   - if self.owner:isFuncOpen(FuncOpenType.AdvWheelSurf) then
364   - self.owner._advWheelSurfCount = 0 -- 抽奖进行次数
365   - end
366 361 end
367 362 self:clearAdvUnlockCache()
368 363 self:clear()
... ... @@ -1167,9 +1162,6 @@ function Adv:backHpChange(enemyId, change, isMax)
1167 1162 self:pushBackEvent(AdvBackEventType.HpChange, {enemyId = enemyId, change = change, isMax = isMax})
1168 1163 end
1169 1164  
1170   -function Adv:backMiss(enemyId)
1171   - self:pushBackEvent(AdvBackEventType.Miss, {enemyId = enemyId})
1172   -end
1173 1165 -- if is player enemyId is nil
1174 1166 function Adv:backAtkChange(enemyId, change)
1175 1167 self:pushBackEvent(AdvBackEventType.AtkChange, {enemyId = enemyId, change = change})
... ...
src/adv/AdvPlayer.lua
... ... @@ -68,7 +68,7 @@ function BaseObject:clearRound()
68 68 end
69 69 for i = #self.buffs, 1, -1 do
70 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 72 self.buffs[i]:endBuff()
73 73 table.remove(self.buffs, i)
74 74 end
... ... @@ -99,7 +99,7 @@ function BaseObject:addPassive(params)
99 99 if not skillData[level] then return end
100 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 103 end
104 104  
105 105 function BaseObject:getPassiveIdx(passive)
... ... @@ -145,7 +145,7 @@ function BaseObject:addBuff(buffId, releaser)
145 145 table.insert(self.buffs, Buff.create(self, releaser, {id = buffId}))
146 146 end
147 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 149 end
150 150  
151 151 function BaseObject:getBuffById(bId)
... ... @@ -159,7 +159,7 @@ end
159 159 function BaseObject:delBuffById(bId)
160 160 for idx, buff in ipairs(self.buffs) do
161 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 163 buff:endBuff()
164 164 table.remove(self.buffs, idx)
165 165 return buff
... ... @@ -285,9 +285,9 @@ function BaseObject:reSetAttr(field)
285 285 local delta = self[field] - old
286 286 if delta ~= 0 then
287 287 if field == "atk" then
288   - self.battle.adv:backAtkChange(self.id, delta)
  288 + self.battle.adv:backAtkChange(self.monsterId, delta)
289 289 elseif field == "def" then
290   - self.battle.adv:backDefChange(self.id, delta)
  290 + self.battle.adv:backDefChange(self.monsterId, delta)
291 291 end
292 292 end
293 293 end
... ... @@ -326,19 +326,6 @@ end
326 326 --进入这个方法之前计算好释放者加成的伤害
327 327 function BaseObject:hurt(value, releaser, params)
328 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 330 if params.hurtType and (params.hurtType == 2 or params.hurtType == 6) then
344 331 self:triggerPassive(Passive.SELF_HURT, {trigger = releaser, buffId = params.buffId})
... ... @@ -397,7 +384,7 @@ function BaseObject:hurt(value, releaser, params)
397 384 end
398 385  
399 386 --受伤了~
400   - self.battle.adv:backHpChange(self.id, -value)
  387 + self.battle.adv:backHpChange(self.monsterId, -value)
401 388 self.hp = math.max(0, self.hp - value)
402 389  
403 390 if self.cutHp then
... ... @@ -426,7 +413,7 @@ function BaseObject:recover(value, releaser, params)
426 413 params = params or {}
427 414 value = math.max(0, math.ceil(value))
428 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 417 end
431 418  
432 419 function BaseObject:addSpecialSkill(skillId, skillLevel, target)
... ... @@ -439,7 +426,7 @@ function BaseObject:releaseSkill(skillId, target)
439 426 local skill = Skill.new(self, {id = skillId, target = target})
440 427 --返回客户端
441 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 430 end
444 431 skill:doEffect()
445 432 for _, team in ipairs(self:getTeam(2)) do
... ... @@ -576,6 +563,7 @@ function Player:addExp(value)
576 563 for attr, _ in pairs(AdvAttsEnum) do
577 564 self:addBaseAttr(attr, self.growth[attr] * delta)
578 565 end
  566 + self.battle.adv:pushBackEvent(AdvBackEventType.Level, {level = level, delta = delta})
579 567 end
580 568 self.level = level
581 569 self.exp = newExp
... ... @@ -619,7 +607,9 @@ function Player:changeSp(value, cType)
619 607 self.sp = self.sp + self.sp * value / 100
620 608 end
621 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 613 end
624 614  
625 615 -- 重新计算 魔法上限
... ...