diff --git a/src/GlobalVar.lua b/src/GlobalVar.lua index f76dfff..6239ee0 100644 --- a/src/GlobalVar.lua +++ b/src/GlobalVar.lua @@ -165,9 +165,11 @@ AdvBackEventType = { AdvScoreType = { Level = 1, Kill = 2, - Item = 3, - Hurt = 4, - Block = 5, + KillBoss = 3, + ItemBack = 4, + Event = 5, + Story = 6, + Task = 7, } DinerTask = { diff --git a/src/ProtocolCode.lua b/src/ProtocolCode.lua index 871b5e9..9bc60e3 100644 --- a/src/ProtocolCode.lua +++ b/src/ProtocolCode.lua @@ -153,6 +153,10 @@ actionCodes = { Pvp_endBattleRpc = 505, Pvp_rankListRpc = 506, Pvp_recordListRpc = 507, + Pvp_formatHighRpc = 508, + Pvp_refreshMatchHRpc = 509, + Pvp_startBattleHRpc = 510, + Pvp_endBattleHRpc = 511, Store_rechargeRpc = 550, diff --git a/src/adv/Adv.lua b/src/adv/Adv.lua index da2f93e..95a2681 100644 --- a/src/adv/Adv.lua +++ b/src/adv/Adv.lua @@ -126,7 +126,6 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify, isRelay, isEnt self:checkAdvUnlock(1, self.level) if isToNext then self.battle.player:afterLayer() -- 玩家的buff 清理一下 - self:scoreChange(AdvScoreType.Level) --增加层级加分 end if not notNotify then self:saveDB(notNotify) @@ -617,34 +616,47 @@ function Adv:isEndless() end function Adv:getCurFloorData() - if not self.chapterId then return end local chapter = self.chapterId % 100 - return (csvdb["adv_chapter_floorCsv"][chapter] or {})[self.level] + return (csvdb["adv_chapter_floorCsv"][self.chapterId] or {})[self.level] end --关卡结束 -function Adv:over(success, rewardRatio) +function Adv:over(success, rewardRatio, overType) if success then rewardRatio = rewardRatio or 100 + overType = overType or 0 else rewardRatio = rewardRatio or globalCsv.adv_fail_reward_ratio + overType = overType or -1 end - local score = self:getScore() - local scoreInfo = self.score - - self.battle.player:triggerPassive(Passive.ADV_OVER, {score = score, level = self.level}) - - + local chapterData = csvdb["adv_chapterCsv"][self.chapterId] + -- 扣除的东西给积分 local reward = self.owner:getProperty("advItems"):toNumMap() + local addScore = 0 for itemId, count in pairs(reward) do - reward[itemId] = math.ceil(count * rewardRatio / 100) + local itemCsv = csvdb["itemCsv"][itemId] + if itemCsv.type == ItemType.AdvItem then + addScore = addScore + count * itemCsv.advScore + else + reward[itemId] = math.ceil(count * rewardRatio / 100) + end end + self:scoreChange(AdvScoreType.ItemBack, addScore) + + local score = self.owner:fixAdvScoreChange(self:getScore()) + local scoreInfo = self.score + + local scoreReward = math.floor(score / chapterData.scoreAward) + self.owner:award({[ItemId.OldCoin] = scoreReward}) + reward = self.owner:award(reward) + self.battle.player:triggerPassive(Passive.ADV_OVER, {score = score, level = self.level}) + if success then self.owner:checkTaskEnter("AdvPass", {id = self.chapterId, level = self.level, score = score}) - local chapterData = csvdb["adv_chapterCsv"][self.chapterId].limitlevel - if not self:isEndless() and self.level >= chapterData then + + if not self:isEndless() and self.level >= chapterData.limitlevel then self.owner:checkTaskEnter("AdvAllPass", {id = self.chapterId}) end @@ -675,7 +687,7 @@ function Adv:over(success, rewardRatio) advAFGet = {}, advAFWear = {}, }) - self:backEnd(success, score, scoreInfo, reward) + self:backEnd(success, score, scoreInfo, reward, overType, scoreReward) end function Adv:exit() @@ -740,7 +752,6 @@ function Adv:award(gift, params) if count > 0 then local buffAdd = self.battle.player:getRewardChange(itemId) count = math.floor(math.max(0, (count + buffAdd[0]) * (1 + buffAdd[1]))) --附加 buff 的影响 - self:scoreChange(AdvScoreType.Item, {itemId, count}) self:checkTask(Adv.TaskType.Item, count, itemId) self:checkAchievement(Adv.AchievType.GetItem, count, itemId) end @@ -820,11 +831,16 @@ local function clickOut(self, room, block, params) self:checkAchievement(Adv.AchievType.OverWin, 1, self.level) self:checkAdvUnlock(2, self.level) + local curFloorData = self:getCurFloorData() + if not self.isRelay then + self:scoreChange(AdvScoreType.Level, curFloorData.advScore) --增加层级加分 + end + if not self:isEndless() and (self.level >= csvdb["adv_chapterCsv"][self.chapterId].limitlevel or not self.owner:advChapterIsOpen(self.chapterId, self.level + 1)) then --关卡结束 self:over(true) else self.battle.player:triggerPassive(Passive.DOWN_LAYER) - local curFloorData = self:getCurFloorData() + if curFloorData then self:backReward(self:award({[ItemId.AdvPoint] = curFloorData.exp})) end @@ -1011,6 +1027,8 @@ local function chooseCommon(self, room, block, chooseData, choose, tag) assert(doEffect[effect[1]], "error effect, event_" .. (tag or "choose") .. "Csv id :" .. block.event.id) doEffect[effect[1]]() end + self:scoreChange(AdvScoreType.Event, chooseData.advScore) --增加加分 + return true, clearBlock end @@ -1048,6 +1066,7 @@ local function clickLinkChoose(self, room, block, params) self.owner:setProperty("advStoryB", advStoryB) local storyData = csvdb["event_linkchoose_storyCsv"][chooseData.storyid] self:checkAchievement(Adv.AchievType.StorryDone, 1, storyData[1].chapter) -- 检查故事对应章节 + self:scoreChange(AdvScoreType.Story, storyData.advScore) --增加加分 self:checkAdvUnlock(4, startId) self.lchoose.cur = self.lchoose.cur or {} @@ -1433,7 +1452,7 @@ function Adv:doActive(activeId, target) --10: 立刻结算 按比例返还 doActiveEffect[10] = function(_, rewardRatio) - self:over(true, rewardRatio) + self:over(true, rewardRatio, 1) return true end @@ -1507,7 +1526,11 @@ function Adv:enemyDead(enemy, escape) else local enemyId = block.event.id local monsterData = csvdb["event_monsterCsv"][enemyId] - self:scoreChange(AdvScoreType.Kill, monsterData.type) + if block:isBoss() then + self:scoreChange(AdvScoreType.KillBoss, monsterData.advScore) + else + self:scoreChange(AdvScoreType.Kill, monsterData.advScore) + end local changeV = self.battle.player:addExp(monsterData.exp) self:backDead(enemyId, changeV) if enemy:hadBuff(Buff.CHANGE_DROP_TO_CLICK) then -- 掉落转为 click @@ -1604,8 +1627,8 @@ function Adv:backNext() self:pushBackEvent(AdvBackEventType.Next, {}) end -function Adv:backEnd(success, score, scoreInfo, reward) - self:pushBackEvent(AdvBackEventType.End, {success = success, score = score, scoreInfo = scoreInfo, reward = reward}) +function Adv:backEnd(success, score, scoreInfo, reward, overType, scoreAward) + self:pushBackEvent(AdvBackEventType.End, {success = success, score = score, scoreInfo = scoreInfo, reward = reward, type = overType, scoreAward = scoreAward}) end function Adv:backBlockChange(roomId, blockId) @@ -1641,43 +1664,27 @@ function Adv:backUse(items) end -function Adv:scoreChange(scoreType, pms) - local cutTypes = {} - local score = 0 - cutTypes[AdvScoreType.Level] = function() - score = globalCsv.adv_score_floor - end - cutTypes[AdvScoreType.Kill] = function() - local chapterData = csvdb["adv_chapterCsv"][self.chapterId] - score = globalCsv.adv_score_monster[pms] * chapterData["reward"] - end - cutTypes[AdvScoreType.Item] = function() - score = csvdb["itemCsv"][pms[1]].adv_score_item * pms[2] - end - cutTypes[AdvScoreType.Hurt] = function() - score = globalCsv.adv_score_hurt * pms - end - cutTypes[AdvScoreType.Block] = function() - score = globalCsv.adv_score_block - end - if cutTypes[scoreType] then - cutTypes[scoreType]() - else - return - end +function Adv:scoreChange(scoreType, score) self.score[scoreType] = self.score[scoreType] or 0 - self.score[scoreType] = self.score[scoreType] + self.owner:fixAdvScoreChange(score) + self.score[scoreType] = self.score[scoreType] + score end function Adv:getScore() self.score[AdvScoreType.Level] = math.floor(self.score[AdvScoreType.Level] or 0) - self.score[AdvScoreType.Block] = math.floor(self.score[AdvScoreType.Block] or 0) - self.score[AdvScoreType.Hurt] = math.max(math.floor(self.score[AdvScoreType.Hurt] or 0), - (self.score[AdvScoreType.Level] + self.score[AdvScoreType.Block])) + self.score[AdvScoreType.Task] = math.floor(self.score[AdvScoreType.Task] or 0) self.score[AdvScoreType.Kill] = math.floor(self.score[AdvScoreType.Kill] or 0) - self.score[AdvScoreType.Item] = math.floor(self.score[AdvScoreType.Item] or 0) - - return self.score[AdvScoreType.Level] + self.score[AdvScoreType.Block] + self.score[AdvScoreType.Hurt] - + self.score[AdvScoreType.Kill] + self.score[AdvScoreType.Item] + self.score[AdvScoreType.KillBoss] = math.floor(self.score[AdvScoreType.KillBoss] or 0) + self.score[AdvScoreType.ItemBack] = math.floor(self.score[AdvScoreType.ItemBack] or 0) + self.score[AdvScoreType.Event] = math.floor(self.score[AdvScoreType.Event] or 0) + self.score[AdvScoreType.Story] = math.floor(self.score[AdvScoreType.Story] or 0) + + return self.score[AdvScoreType.Level] + + self.score[AdvScoreType.Task] + + self.score[AdvScoreType.Kill] + + self.score[AdvScoreType.KillBoss] + + self.score[AdvScoreType.ItemBack] + + self.score[AdvScoreType.Event] + + self.score[AdvScoreType.Story] end function Adv:popBackEvents() diff --git a/src/adv/AdvMap.lua b/src/adv/AdvMap.lua index dc8352a..94ee183 100644 --- a/src/adv/AdvMap.lua +++ b/src/adv/AdvMap.lua @@ -142,7 +142,6 @@ function Map:openBlock(roomId, blockId, isPlayer, ignoreBack) if status then if isPlayer then self.adv.battle.player:triggerPassive(Passive.OPEN_BLOCK) - self.adv:scoreChange(AdvScoreType.Block) self.adv.owner:checkTaskEnter("AdvOpenBlock") end diff --git a/src/adv/AdvPlayer.lua b/src/adv/AdvPlayer.lua index 243bd4c..3a237b8 100644 --- a/src/adv/AdvPlayer.lua +++ b/src/adv/AdvPlayer.lua @@ -402,10 +402,6 @@ function BaseObject:hurt(value, releaser, params) end self.hp = math.max(0, self.hp - value) - if self.cutHp then - self:cutHp(value) - end - if self.hp == 0 then self:triggerPassive(Passive.SELF_DEAD) for _, team in ipairs(self:getTeam(1, true)) do @@ -542,10 +538,6 @@ function Player:ctor(battle, data) self:initData(data) end -function Player:cutHp(value) - self.battle.adv:scoreChange(AdvScoreType.Hurt, value) -end - function Player:initData(data) Player.super.initData(self, data) self.level = data.level or 1 --level 每增加1级 属性增长 growth * baseAttr diff --git a/src/adv/AdvTask.lua b/src/adv/AdvTask.lua index dad1183..011ea45 100644 --- a/src/adv/AdvTask.lua +++ b/src/adv/AdvTask.lua @@ -139,6 +139,8 @@ function AdvTask.bind(Adv) reward[item[1]] = (reward[item[1]] or 0) + item[2] reward = self:award(reward) + self:scoreChange(AdvScoreType.Task, taskData.advScore) --增加加分 + self.advTask[taskId] = nil ok = true advTaskChange.t = true diff --git a/src/models/RolePlugin.lua b/src/models/RolePlugin.lua index 38fe0b5..a4fdede 100644 --- a/src/models/RolePlugin.lua +++ b/src/models/RolePlugin.lua @@ -994,7 +994,7 @@ function RolePlugin.bind(Role) end end end - return score * (1 + change / 100) + return math.floor(score * (1 + change / 100)) end function Role:getAdvLvAddAttrs() -- libgit2 0.21.2