Commit 36875ec5121152c3468d5b4f64fb0874fcafeb7b

Authored by zhouhaihai
1 parent f2bebfc4

宝藏怪

@@ -1953,73 +1953,144 @@ function Adv:enemyDead(enemy, escape) @@ -1953,73 +1953,144 @@ function Adv:enemyDead(enemy, escape)
1953 -- self:backDead(enemyId, changeV) 1953 -- self:backDead(enemyId, changeV)
1954 self:backDead(enemyId) 1954 self:backDead(enemyId)
1955 1955
1956 - local toClick = enemy:hadBuff(Buff.CHANGE_DROP_TO_CLICK)  
1957 - if toClick then  
1958 - toClick = toClick:effect() 1956 + local isMine = false -- 是不是宝藏怪
  1957 + for _, mid in ipairs(globalCsv.adv_egg_treasureMonster_id) do
  1958 + if mid == enemyId then
  1959 + isMine = true
  1960 + break
  1961 + end
1959 end 1962 end
  1963 + if isMine then
  1964 + local advMine = self.owner:getProperty("advMine")
  1965 + advMine[1] = advMine[1] or {}
  1966 + advMine[2] = advMine[2] or {}
  1967 + local mineCo = advMine[1].co or {}
  1968 + local mineCo2 = advMine[2].co or {}
  1969 + local mineCh = advMine[2].ch or globalCsv.adv_egg_treasureLayer_showup
  1970 + if monsterData.limit ~= 0 then
  1971 + mineCo[enemyId] = (mineCo[enemyId] or 0) + 1
  1972 + end
1960 1973
1961 - local changItem = enemy:hadBuff(Buff.CHANGE_DROP)  
1962 - if changItem then  
1963 - changItem = table.pack(changItem:effect())  
1964 - end 1974 + local had = false
  1975 + if math.randomInt(1, 100) <= mineCh then -- 刷出来了
  1976 + local mpool = {}
  1977 + for _, mid in ipairs(globalCsv.adv_egg_treasureLayer_id) do
  1978 + local layer = csvdb["event_buildingCsv"][mid]
  1979 + if (not mineCo2[mid] or layer.limit == 0 or mineCo2[mid] < layer.limit) and layer.showup > 0 then
  1980 + mpool[mid] = {layer.showup}
  1981 + end
  1982 + end
  1983 + if next(mpool) then
  1984 + local cId = math.randWeight(mpool, 1)
  1985 + block:updateEvent({
  1986 + etype = AdvEventType.Build,
  1987 + id = cId
  1988 + })
  1989 + if csvdb["event_buildingCsv"][cId].limit ~= 0 then
  1990 + mineCo2[cId] = (mineCo2[cId] or 0) + 1
  1991 + end
  1992 + had = true
  1993 + end
  1994 + end
  1995 + if had then
  1996 + mineCh = math.min(mineCh + globalCsv.adv_egg_treasureLayer_showup_add, 100)
  1997 + else
  1998 + mineCh = nil
  1999 + end
1965 2000
1966 - local addMult = 0  
1967 - local dropBuff = enemy:hadBuff(Buff.DROP_BUFF_BY_ENEMY) -- 根据敌人数量变化个数  
1968 - if dropBuff then  
1969 - local team = enemy:getTeam(1, true)  
1970 - addMult = addMult + 0.2 * #team  
1971 - end 2001 + local drops = {}
  2002 + for _, dropId in ipairs(monsterData.dropid:toArray(true, "=")) do
  2003 + local dropData = csvdb["event_dropCsv"][dropId]
  2004 + if dropData then
  2005 + local cur = dropData["range"]:randWeight(true)
  2006 + if cur and cur[1] ~= 0 then
  2007 + drops[#drops + 1] = cur
  2008 + end
  2009 + end
  2010 + end
  2011 + local blocks = self:getCurMap():getEmptyBlocks(roomId, blockId, #drops)
  2012 + for _i, cblock in ipairs(blocks) do
  2013 + cblock:updateEvent({
  2014 + etype = AdvEventType.Drop,
  2015 + item = drops[_i]
  2016 + })
  2017 + if cblock ~= block then
  2018 + self:backBlockChange(cblock.room.roomId, cblock.blockId)
  2019 + end
  2020 + end
  2021 + advMine[1].co = mineCo
  2022 + advMine[2].co = mineCo2
  2023 + advMine[2].ch = mineCh
  2024 + self.owner:setProperty("advMine", advMine)
  2025 + else
  2026 + local toClick = enemy:hadBuff(Buff.CHANGE_DROP_TO_CLICK)
  2027 + if toClick then
  2028 + toClick = toClick:effect()
  2029 + end
1972 2030
1973 - local dropIds = monsterData.dropid:toArray(true, "=")  
1974 - local drops = {}  
1975 - local cCcount = 0 -- 需要改变为click 的个数  
1976 - for _, dropId in ipairs(dropIds) do  
1977 - local dropData = csvdb["event_dropCsv"][dropId]  
1978 - if dropData then  
1979 - local cur = dropData["range"]:randWeight(true)  
1980 - if cur and cur[1] ~= 0 then  
1981 - if toClick then  
1982 - cCcount = cCcount + 1  
1983 - else  
1984 - local item = changItem and changItem or cur  
1985 - item[2] = math.floor(item[2] * (1 + addMult))  
1986 - drops[#drops + 1] = item 2031 + local changItem = enemy:hadBuff(Buff.CHANGE_DROP)
  2032 + if changItem then
  2033 + changItem = table.pack(changItem:effect())
  2034 + end
  2035 +
  2036 + local addMult = 0
  2037 + local dropBuff = enemy:hadBuff(Buff.DROP_BUFF_BY_ENEMY) -- 根据敌人数量变化个数
  2038 + if dropBuff then
  2039 + local team = enemy:getTeam(1, true)
  2040 + addMult = addMult + 0.2 * #team
  2041 + end
  2042 +
  2043 + local dropIds = monsterData.dropid:toArray(true, "=")
  2044 + local drops = {}
  2045 + local cCcount = 0 -- 需要改变为click 的个数
  2046 + for _, dropId in ipairs(dropIds) do
  2047 + local dropData = csvdb["event_dropCsv"][dropId]
  2048 + if dropData then
  2049 + local cur = dropData["range"]:randWeight(true)
  2050 + if cur and cur[1] ~= 0 then
  2051 + if toClick then
  2052 + cCcount = cCcount + 1
  2053 + else
  2054 + local item = changItem and changItem or cur
  2055 + item[2] = math.floor(item[2] * (1 + addMult))
  2056 + drops[#drops + 1] = item
  2057 + end
1987 end 2058 end
1988 end 2059 end
1989 end 2060 end
1990 - end  
1991 - -- 这些奖励可能会有被动加成  
1992 - self.battle.player:triggerPassive(Passive.BATTLE_WIN, {drops = drops}) 2061 + -- 这些奖励可能会有被动加成
  2062 + self.battle.player:triggerPassive(Passive.BATTLE_WIN, {drops = drops})
1993 2063
1994 - -- 自身带的掉落是不会被改变的 也不会被加成  
1995 - if block.event.item and block.event.item[1] ~= 0 then  
1996 - table.insert(drops, 1, block.event.item)  
1997 - end 2064 + -- 自身带的掉落是不会被改变的 也不会被加成
  2065 + if block.event.item and block.event.item[1] ~= 0 then
  2066 + table.insert(drops, 1, block.event.item)
  2067 + end
1998 2068
1999 - -- 清空当前的格子  
2000 - block:clear() 2069 + -- 清空当前的格子
  2070 + block:clear()
2001 2071
2002 - -- 掉落走一波  
2003 - local blocks = self:getCurMap():getEmptyBlocks(roomId, blockId, #drops)  
2004 - for _i, cblock in ipairs(blocks) do  
2005 - cblock:updateEvent({  
2006 - etype = AdvEventType.Drop,  
2007 - item = drops[_i]  
2008 - })  
2009 - if cblock ~= block then  
2010 - self:backBlockChange(cblock.room.roomId, cblock.blockId) 2072 + -- 掉落走一波
  2073 + local blocks = self:getCurMap():getEmptyBlocks(roomId, blockId, #drops)
  2074 + for _i, cblock in ipairs(blocks) do
  2075 + cblock:updateEvent({
  2076 + etype = AdvEventType.Drop,
  2077 + item = drops[_i]
  2078 + })
  2079 + if cblock ~= block then
  2080 + self:backBlockChange(cblock.room.roomId, cblock.blockId)
  2081 + end
2011 end 2082 end
2012 - end  
2013 2083
2014 - -- 转换的click走一波  
2015 - local blocks = self:getCurMap():getEmptyBlocks(roomId, blockId, cCcount)  
2016 - for _i, cblock in ipairs(blocks) do  
2017 - cblock:updateEvent({  
2018 - etype = AdvEventType.Click,  
2019 - id = clickId  
2020 - })  
2021 - if cblock ~= block then  
2022 - self:backBlockChange(cblock.room.roomId, cblock.blockId) 2084 + -- 转换的click走一波
  2085 + local blocks = self:getCurMap():getEmptyBlocks(roomId, blockId, cCcount)
  2086 + for _i, cblock in ipairs(blocks) do
  2087 + cblock:updateEvent({
  2088 + etype = AdvEventType.Click,
  2089 + id = clickId
  2090 + })
  2091 + if cblock ~= block then
  2092 + self:backBlockChange(cblock.room.roomId, cblock.blockId)
  2093 + end
2023 end 2094 end
2024 end 2095 end
2025 2096
src/adv/AdvBattle.lua
@@ -366,18 +366,34 @@ function Battle:battleBegin(roomId, blockId, params) @@ -366,18 +366,34 @@ function Battle:battleBegin(roomId, blockId, params)
366 if not enemy then return end 366 if not enemy then return end
367 local player = params.player 367 local player = params.player
368 if not player then return end 368 if not player then return end
  369 + local penemy = params.enemy
  370 + if not penemy then return end
  371 +
  372 + if player.hp ~= 0 then
  373 + if penemy.hp <= 0 then
  374 + enemy:kill()
  375 + self.adv.owner:checkTaskEnter("AdvBattleWin", {id = self.adv.chapterId})
  376 + else
  377 + -- 处理一下怪物
  378 + if penemy.hp > enemy.hp then
  379 + enemy:recover(penemy.hp - enemy.hp)
  380 + else
  381 + enemy:hurt(math.max(0, math.ceil(enemy.hp - penemy.hp)), self.player, {hurtType = 5}) --战斗血量只会变少
  382 + end
  383 + if penemy.escape and penemy.escape == 0 then
  384 + enemy.isDead = 1
  385 + end
  386 + end
  387 + end
369 -- 玩家没死就是怪死了 388 -- 玩家没死就是怪死了
370 if player.hp > 0 then 389 if player.hp > 0 then
371 - enemy:kill()  
372 self.player:effectBattleBuff() 390 self.player:effectBattleBuff()
373 -  
374 - self.adv.owner:checkTaskEnter("AdvBattleWin", {id = self.adv.chapterId})  
375 if params.bySkill then 391 if params.bySkill then
376 self.player:triggerPassive(Passive.SKILL_KILL) 392 self.player:triggerPassive(Passive.SKILL_KILL)
377 end 393 end
378 end 394 end
379 if player.hp > self.player.hp then 395 if player.hp > self.player.hp then
380 - self.player:recover(player.hp - self.player.hp, player) 396 + self.player:recover(player.hp - self.player.hp)
381 else 397 else
382 self.player:hurt(math.max(0, math.ceil(self.player.hp - player.hp)), enemy, {hurtType = 5}) --战斗血量只会变少 398 self.player:hurt(math.max(0, math.ceil(self.player.hp - player.hp)), enemy, {hurtType = 5}) --战斗血量只会变少
383 end 399 end
src/adv/AdvMap.lua
@@ -812,6 +812,47 @@ createMap = function(self, mapId, isEnter, isNewRelay) @@ -812,6 +812,47 @@ createMap = function(self, mapId, isEnter, isNewRelay)
812 end 812 end
813 end 813 end
814 814
  815 + -- 宝藏怪刷新
  816 + for idx = #(stagePool["global"][AdvCodeRandomStage] or {}), 1, -1 do
  817 + local c = stagePool["global"][AdvCodeRandomStage][idx] -- {room = roomId, block = blockId}
  818 + if mapInfo.rooms[c["room"]]["event"][c["block"]] then -- 存在
  819 + table.remove(stagePool["global"][AdvCodeRandomStage], idx)
  820 + end
  821 + end
  822 + local ln = #(stagePool["global"][AdvCodeRandomStage] or {})
  823 + local advMine = self.adv.owner:getProperty("advMine")
  824 + advMine[1] = advMine[1] or {}
  825 + local mineCh = advMine[1].ch or globalCsv.adv_egg_treasureMonster_showup
  826 + local mineCo = advMine[1].co or {}
  827 + local had = false
  828 + if ln > 0 then
  829 + if math.randomInt(1, 100) <= mineCh then -- 刷出来了
  830 + local mpool = {}
  831 + for _, mid in ipairs(globalCsv.adv_egg_treasureMonster_id) do
  832 + local monster = csvdb["event_monsterCsv"][mid]
  833 + if (not mineCo[mid] or monster.limit == 0 or mineCo[mid] < monster.limit) and monster.showup > 0 then
  834 + mpool[mid] = {monster.showup}
  835 + end
  836 + end
  837 + if next(mpool) then
  838 + local idx = math.randomInt(1, ln)
  839 + local cur = stagePool["global"][AdvCodeRandomStage][idx]
  840 + giveEvent(cur["room"], cur["block"], AdvEventType.Monster, math.randWeight(mpool, 1))
  841 + table.remove(stagePool["global"][AdvCodeRandomStage], idx)
  842 + ln = ln - 1
  843 + had = true
  844 + end
  845 + end
  846 + end
  847 + if not had then
  848 + mineCh = math.min(mineCh + globalCsv.adv_egg_treasureMonster_showup_add, 100)
  849 + else
  850 + mineCh = nil
  851 + end
  852 + advMine[1].ch = mineCh
  853 + self.adv.owner:setProperty("advMine", advMine)
  854 +
  855 +
815 if mapCsvData.clearType == 1 and not haveBoss then 856 if mapCsvData.clearType == 1 and not haveBoss then
816 if not next(monsterEvents) then 857 if not next(monsterEvents) then
817 error("这个地图没有钥匙!!! mapId : " .. mapId) 858 error("这个地图没有钥匙!!! mapId : " .. mapId)
src/models/Role.lua
@@ -99,7 +99,8 @@ Role.schema = { @@ -99,7 +99,8 @@ Role.schema = {
99 advLimit = {"table", {}}, -- 冒险事件每次的limit 99 advLimit = {"table", {}}, -- 冒险事件每次的limit
100 advC = {"number", 0}, -- 冒险次数(消耗体力) 100 advC = {"number", 0}, -- 冒险次数(消耗体力)
101 advCT = {"number", 0}, -- 冒险次数 上次恢复时间 101 advCT = {"number", 0}, -- 冒险次数 上次恢复时间
102 - 102 + advMine = {"table", {}}, -- -- {1 = {ch = 0, co = {id = count}}, 2 = {ch = 0, co = {id = count}}} 宝藏怪刷出概率 1 宝藏怪 2 宝藏洞 ch 概率 co 不同id 次数记录
  103 +
103 --挂机相关 104 --挂机相关
104 hangPass = {"table", {}}, -- 挂机通过的最大关卡 105 hangPass = {"table", {}}, -- 挂机通过的最大关卡
105 hangGift = {"table", {}}, -- 挂机奖励 {id = 1} 106 hangGift = {"table", {}}, -- 挂机奖励 {id = 1}
src/models/RoleTimeReset.lua
@@ -17,6 +17,11 @@ ResetFunc[&quot;CrossDay&quot;] = function(self, notify, response, now) @@ -17,6 +17,11 @@ ResetFunc[&quot;CrossDay&quot;] = function(self, notify, response, now)
17 self:advRandomSupportEffect(not notify) 17 self:advRandomSupportEffect(not notify)
18 18
19 self:checkExpireItem(not notify) 19 self:checkExpireItem(not notify)
  20 + local advMine = self:getProperty("advMine")
  21 + if advMine[1] then
  22 + advMine[1].co = nil
  23 + end
  24 + self:setProperty("advMine", advMine)
20 25
21 response.dTask = {} 26 response.dTask = {}
22 response.advSup = self:getProperty("advSup") 27 response.advSup = self:getProperty("advSup")
@@ -24,10 +29,16 @@ ResetFunc[&quot;CrossDay&quot;] = function(self, notify, response, now) @@ -24,10 +29,16 @@ ResetFunc[&quot;CrossDay&quot;] = function(self, notify, response, now)
24 end 29 end
25 30
26 ResetFunc["CrossWeek"] = function(self, notify, response) 31 ResetFunc["CrossWeek"] = function(self, notify, response)
  32 + local advMine = self:getProperty("advMine")
  33 + if advMine[2] then
  34 + advMine[2].co = nil
  35 + end
27 self:setProperties({ 36 self:setProperties({
28 wTask = {}, 37 wTask = {},
29 dinerS = {}, 38 dinerS = {},
  39 + advMine = advMine,
30 }) 40 })
  41 +
31 response.wTask = {} 42 response.wTask = {}
32 response.dinerS = {} 43 response.dinerS = {}
33 end 44 end