Commit 6dc482bb38240b1978e1693f64999702694a51f8

Authored by zhouhaihai
1 parent 1bb3abca

中继层完成, 新增两个冒险物品使用效果

src/GlobalVar.lua
... ... @@ -106,6 +106,9 @@ AdvSpecialStage = {
106 106 [6] = "InOut",
107 107 [7] = "Diner"
108 108 }
  109 +
  110 +AdvCodeRandomStage = 10 -- 一些功能需要代码强行随机事件 随机到这个地块类型上面
  111 +
109 112 --客户端需要知道这个
110 113 AdvEventType = {
111 114 -- 特殊事件(地块决定)
... ... @@ -117,7 +120,6 @@ AdvEventType = {
117 120 InOut = -6, -- 出入口集合体
118 121 Diner = -7, -- 料理台
119 122  
120   -
121 123 -- 普通事件(随机)
122 124 Choose = 1, --选择点
123 125 Drop = 2, --物品掉落点
... ...
src/actions/AdvAction.lua
... ... @@ -315,15 +315,6 @@ function _M.useItemRpc(agent, data)
315 315 if itemData["function"] == 0 or itemData["function"] == 2 then count = 1 end
316 316 if not adv:cost({[itemId] = count}, {}, true) then return true end
317 317  
318   - local status = true
319   - for i = 1, count do
320   - status = status and adv:doActive(itemData.effect, target) -- target
321   - if not status then
322   - break
323   - end
324   - end
325   - if not status then return end
326   -
327 318 --消耗
328 319 if itemData["function"] == 0 or itemData["function"] == 1 then
329 320 adv:cost({[itemId] = count}, {})
... ... @@ -331,6 +322,11 @@ function _M.useItemRpc(agent, data)
331 322 end
332 323  
333 324 adv:checkAchievement(adv.AchievType.UseItem, count, itemId)
  325 +
  326 + for i = 1, count do
  327 + adv:doActive(itemData.effect, target) -- target
  328 + end
  329 +
334 330 adv:afterRound()
335 331 adv:saveDB()
336 332  
... ...
src/adv/Adv.lua
... ... @@ -150,6 +150,13 @@ function Adv:forceOver(notNotify)
150 150 self:clear()
151 151 local advTeam = self.owner:getProperty("advTeam")
152 152 advTeam.player = nil
  153 +
  154 + local reward = self.owner:getProperty("advItems"):toNumMap()
  155 + for itemId, count in pairs(reward) do
  156 + reward[itemId] = math.ceil(count * globalCsv.adv_fail_reward_ratio / 100) -- 奖励相当于失败
  157 + end
  158 + self.owner:award(reward)
  159 +
153 160 self.owner:updateProperties({
154 161 advInfo = {},
155 162 advTeam = advTeam,
... ... @@ -389,11 +396,20 @@ function Adv:haveComboAF(id)
389 396 return false
390 397 end
391 398  
392   -function Adv:artifactLevelUp(id)
  399 +function Adv:artifactLevelUp(id, level)
  400 + level = level or 1
393 401 local advAFGet = self.owner:getProperty("advAFGet")
  402 + if not advAFGet[id] then return end
394 403 local advAFWear = self.owner:getProperty("advAFWear")
  404 +
  405 + local newLv = advAFGet[id]
  406 + for i = 1, level do
  407 + if not self.owner:isArtifactOpen(id, self:isEndless(), newLv + 1) then break end
  408 + newLv = newLv + 1
  409 + end
  410 + if newLv == advAFGet[id] then return end
  411 +
395 412 local status = 0
396   - local newLv = advAFGet[id] + 1
397 413 if advAFWear[id] then -- 穿着呢
398 414 local oldData = csvdb["adv_artifactCsv"][id][advAFGet[id]]
399 415 local newData = csvdb["adv_artifactCsv"][id][newLv]
... ... @@ -450,16 +466,29 @@ function Adv:getCurFloorData()
450 466 return (csvdb["adv_chapter_floorCsv"][chapter] or {})[self.level]
451 467 end
452 468  
453   ---关卡通关,非层 score < 0 失败
454   -function Adv:over(success, isAllPass)
  469 +--关卡结束
  470 +function Adv:over(success, rewardRatio)
  471 + if success then
  472 + rewardRatio = rewardRatio or 100
  473 + else
  474 + rewardRatio = rewardRatio or globalCsv.adv_fail_reward_ratio
  475 + end
455 476 local score = self:getScore()
456 477 local scoreInfo = self.score
457   - local reward
  478 +
458 479 self.battle.player:triggerPassive(Passive.ADV_OVER, {score = score, level = self.level})
  480 +
  481 +
  482 + local reward = self.owner:getProperty("advItems"):toNumMap()
  483 + for itemId, count in pairs(reward) do
  484 + reward[itemId] = math.ceil(count * rewardRatio / 100)
  485 + end
  486 + reward = self.owner:award(reward)
  487 +
459 488 if success then
460   - reward = self.owner:award(self.owner:getProperty("advItems"):toNumMap())
461 489 self.owner:checkTaskEnter("AdvPass", {id = self.chapterId, level = self.level, score = score})
462   - if isAllPass then
  490 + local chapterData = csvdb["adv_chapterCsv"][self.chapterId].limitlevel
  491 + if not self:isEndless() and self.level >= chapterData then
463 492 self.owner:checkTaskEnter("AdvAllPass", {id = self.chapterId})
464 493 end
465 494  
... ... @@ -630,10 +659,9 @@ local function clickOut(self, room, block, params)
630 659  
631 660 self:checkAchievement(Adv.AchievType.OverWin, 1, self.level)
632 661 self:checkAdvUnlock(2, self.level)
633   - local levellimit = csvdb["adv_chapterCsv"][self.chapterId].limitlevel
634 662  
635   - if not self:isEndless() and (self.level >= levellimit or not self.owner:advChapterIsOpen(self.chapterId, self.level + 1)) then --关卡结束
636   - self:over(true, not self:isEndless() and self.level >= levellimit)
  663 + if not self:isEndless() and (self.level >= csvdb["adv_chapterCsv"][self.chapterId].limitlevel or not self.owner:advChapterIsOpen(self.chapterId, self.level + 1)) then --关卡结束
  664 + self:over(true)
637 665 else
638 666 self.battle.player:triggerPassive(Passive.DOWN_LAYER)
639 667 local curFloorData = self:getCurFloorData()
... ... @@ -656,8 +684,7 @@ local function clickOut(self, room, block, params)
656 684 end
657 685  
658 686 local function clickExit(self, room, block, params)
659   - local levellimit = csvdb["adv_chapterCsv"][self.chapterId].limitlevel
660   - self:over(true, not self:isEndless() and self.level >= levellimit)
  687 + self:over(true)
661 688 return true
662 689 end
663 690  
... ... @@ -1222,7 +1249,27 @@ function Adv:doActive(activeId, target)
1222 1249 return true
1223 1250 end
1224 1251  
  1252 + --10: 立刻结算 按比例返还
  1253 + doActiveEffect[10] = function(_, rewardRatio)
  1254 + self:over(true, rewardRatio)
  1255 + return true
  1256 + end
1225 1257  
  1258 + --11: 随机提升一个未满级神器等级,配置提升等级
  1259 + doActiveEffect[11] = function(_, level)
  1260 + local advAFGet = self.owner:getProperty("advAFGet")
  1261 + local pool = {}
  1262 + for id_, lv in pairs(advAFGet) do
  1263 + if self.owner:isArtifactOpen(id_, self:isEndless(), lv + 1) then
  1264 + table.insert(pool, id_)
  1265 + end
  1266 + end
  1267 + if #pool > 0 then
  1268 + local idx = math.randomInt(1, #pool)
  1269 + self:artifactLevelUp(pool[idx], level)
  1270 + end
  1271 + return true
  1272 + end
1226 1273  
1227 1274 for _, effect in ipairs(activeData.effect:toArray()) do
1228 1275 local cur = effect:toArray(true, "=")
... ...
src/adv/AdvBattle.lua
... ... @@ -91,7 +91,7 @@ function Battle:initPlayer()
91 91 for _, hero in pairs(attrs) do
92 92 player[attrName] = (player[attrName] or 0) + hero[attrName]
93 93 end
94   - player[attrName] = getAdvLvAttrUp(advAddAttrs, attrName, player[attrName])
  94 + player[attrName] = getAdvLvAttrUp(advAddAttrs, attrName, player[attrName]) * (globalCsv.adv_battle_attr_ratio[attrName] or 1)
95 95 player.growth[attrName] = player[attrName] * 0.025
96 96 player[attrName] = player[attrName] + player.growth[attrName] * (player.level - 1)
97 97 end
... ...
src/adv/AdvMap.lua
... ... @@ -336,6 +336,11 @@ createMap = function(self, mapId, isEnter, isNewRelay)
336 336 end
337 337 end
338 338  
  339 + local function giveEvent(roomId, blockId, eventType, eventId)
  340 + local event = {etype = eventType, id = eventId}
  341 + mapInfo.rooms[roomId]["event"][blockId] = event
  342 + end
  343 +
339 344  
340 345 local stagePool = {["global"] = {}}
341 346 for roomId, roomName in pairs(mapData["rooms"]) do
... ... @@ -360,6 +365,27 @@ createMap = function(self, mapId, isEnter, isNewRelay)
360 365 end
361 366 end
362 367 end
  368 +
  369 + -- 随机功能需要强制随机的东西
  370 + if self.adv.isRelay and isNewRelay then
  371 + local relayData = self.adv:isHaveRelay()
  372 + if relayData then
  373 + local choose = relayData.choose:toArray(true, "=")
  374 + local lastCount = stagePool["global"][AdvCodeRandomStage] and #stagePool["global"][AdvCodeRandomStage] or 0
  375 + if lastCount <= 0 then break end
  376 + for _, chooseId in pairs(choose) do
  377 + local idx = math.randomInt(1, lastCount)
  378 + local cur = stagePool["global"][AdvCodeRandomStage][idx]
  379 +
  380 + giveEvent(cur["room"], cur["block"], AdvEventType.Choose, chooseId)
  381 +
  382 + table.remove(stagePool["global"][AdvCodeRandomStage], idx)
  383 + lastCount = lastCount - 1
  384 + stagePool[cur["room"]][stageType][cur["block"]] = nil
  385 + end
  386 + end
  387 + end
  388 +
363 389 -- 全地图事件 优先级高
364 390 for stageType, events in pairs(mapData["events"]) do
365 391 for _, event in ipairs(events) do
... ...
src/models/RolePlugin.lua
... ... @@ -797,11 +797,15 @@ function RolePlugin.bind(Role)
797 797 advOverTime = self.advOverTime,
798 798 }))
799 799 end
  800 + -- 路过的中继层重置掉
  801 + local advRelay = self:getProperty("advRelay")
  802 + advRelay[-1] = nil
800 803 -- 清掉冒险手册
801 804 self:updateProperties({
802 805 advEAchiev = {},
803 806 advElM = 0,
804 807 advElS = nowSeason,
  808 + advRelay = advRelay,
805 809 }, notNotify)
806 810 end
807 811 end
... ...