Commit b0fe18174e4bb2b89ae0668e044b9cb8d41ca952
1 parent
bedca62d
冒险分数
Showing
3 changed files
with
75 additions
and
8 deletions
Show diff stats
src/GlobalVar.lua
| ... | ... | @@ -99,4 +99,12 @@ AdvBackEventType = { |
| 99 | 99 | BlockChange = 9, -- 块改变 |
| 100 | 100 | PowerChange = 10, --体力改变 |
| 101 | 101 | Dead = 11, --怪死亡 |
| 102 | +} | |
| 103 | + | |
| 104 | +AdvScoreType = { | |
| 105 | + Level = 1, | |
| 106 | + Kill = 2, | |
| 107 | + Item = 3, | |
| 108 | + Hurt = 4, | |
| 109 | + Block = 5, | |
| 102 | 110 | } |
| 103 | 111 | \ No newline at end of file | ... | ... |
src/adv/Adv.lua
| ... | ... | @@ -104,9 +104,12 @@ local function randomAdvMap(role, chapterId, level, notNotify) |
| 104 | 104 | --随出地图 |
| 105 | 105 | local raw_pool = chapterData.mapid:toArray(true, "=") |
| 106 | 106 | local advInfo = role:getProperty("advInfo") |
| 107 | + | |
| 107 | 108 | local lastMapId = advInfo.mapId --非同一层不连续随出同一张类似的地图 |
| 108 | 109 | local lastChapterId = advInfo.chapter |
| 110 | + local lastScore = advInfo.score or {} -- 分数 | |
| 109 | 111 | local power = advInfo.power or 100 --体力 |
| 112 | + | |
| 110 | 113 | local pool = {} |
| 111 | 114 | for _, mapId in ipairs(raw_pool) do |
| 112 | 115 | local temp = csvdb["mapCsv"][mapId] |
| ... | ... | @@ -128,12 +131,12 @@ local function randomAdvMap(role, chapterId, level, notNotify) |
| 128 | 131 | return |
| 129 | 132 | end |
| 130 | 133 | |
| 131 | - | |
| 132 | 134 | table.clear(advInfo) |
| 133 | 135 | advInfo.chapter = chapterId |
| 134 | 136 | advInfo.level = level |
| 135 | 137 | advInfo.mapId = mapId |
| 136 | 138 | advInfo.power = power |
| 139 | + advInfo.score = lastScore | |
| 137 | 140 | advInfo.enemyId = 1 --怪递增的索引 |
| 138 | 141 | advInfo.rooms = {} -- {[roomId] = {event = {}, open = {}},} -- event 事件信息(具体信息查看randomEvent), open 是否解锁 |
| 139 | 142 | --事件随机 |
| ... | ... | @@ -425,6 +428,8 @@ function Room:openBlock(block, adv) |
| 425 | 428 | self.info.open[block.blockId] = 1 |
| 426 | 429 | end |
| 427 | 430 | |
| 431 | + adv:scoreChange(AdvScoreType.Block) | |
| 432 | + | |
| 428 | 433 | if not self.isShow then |
| 429 | 434 | self.isShow = true |
| 430 | 435 | --首次展示房间 |
| ... | ... | @@ -459,11 +464,10 @@ end |
| 459 | 464 | |
| 460 | 465 | --关卡通关,非层 score < 0 失败 |
| 461 | 466 | function Adv:over(success) |
| 462 | - local score = -1 | |
| 467 | + local score = self:getScore() | |
| 468 | + local scoreInfo = self.advInfo.score | |
| 463 | 469 | local reward |
| 464 | 470 | if success then |
| 465 | - -- todo success 计算分数 | |
| 466 | - score = 1 | |
| 467 | 471 | self.owner:updateProperty({field = "advPass", self.owner:getProperty("advPass"):setv(self.advInfo.chapter, score)}) |
| 468 | 472 | reward = self.owner:award(self.owner:getProperty("advItems"):toNumMap(), {}) |
| 469 | 473 | end |
| ... | ... | @@ -473,7 +477,7 @@ function Adv:over(success) |
| 473 | 477 | |
| 474 | 478 | self.owner:updateProperty({field = "advItems", value = ""}) |
| 475 | 479 | |
| 476 | - self:backEnd(score, reward) | |
| 480 | + self:backEnd(success, score, scoreInfo, reward) | |
| 477 | 481 | end |
| 478 | 482 | |
| 479 | 483 | function Adv:exit() |
| ... | ... | @@ -531,6 +535,10 @@ end |
| 531 | 535 | function Adv:initByChapter(chapterId, level, notNotify) |
| 532 | 536 | level = level or 1 |
| 533 | 537 | randomAdvMap(self.owner, chapterId, level, notNotify) |
| 538 | + if not next(self.advInfo) then return end | |
| 539 | + if level > 1 then | |
| 540 | + self:scoreChange(AdvScoreType.Level) | |
| 541 | + end | |
| 534 | 542 | self:initByInfo() --初始化 |
| 535 | 543 | self.owner:updateProperties({advInfo = self.advInfo, advTeam = self.advTeam}, notNotify) |
| 536 | 544 | end |
| ... | ... | @@ -645,6 +653,9 @@ function Adv:award(gift, params) |
| 645 | 653 | end |
| 646 | 654 | local items = self.owner:getProperty("advItems") |
| 647 | 655 | for itemId, count in pairs(tgift) do |
| 656 | + if count > 0 then | |
| 657 | + self:scoreChange(AdvScoreType.Item, {itemId, count}) | |
| 658 | + end | |
| 648 | 659 | local origin = items:getv(itemId, 0) |
| 649 | 660 | local nums = origin + count |
| 650 | 661 | if nums <= 0 then |
| ... | ... | @@ -947,12 +958,14 @@ function Adv:enemyDead(roomId, blockId, escape) |
| 947 | 958 | if escape then |
| 948 | 959 | room:clearBEvent(block) |
| 949 | 960 | else |
| 961 | + local monsterData = csvdb["event_monsterCsv"][block.event.id] | |
| 962 | + self:scoreChange(AdvScoreType.Kill, monsterData.type) | |
| 963 | + | |
| 950 | 964 | local item = block.event.item |
| 951 | 965 | if not item then |
| 952 | 966 | if block.event.etype == AdvEventType.BOSS then |
| 953 | 967 | item = {ItemId.AdvKey, 1} |
| 954 | 968 | else |
| 955 | - local monsterData = csvdb["event_monsterCsv"][block.event.id] | |
| 956 | 969 | local dropData = csvdb["event_dropCsv"][monsterData.dropid] |
| 957 | 970 | item = dropData["range"]:randWeight(true) |
| 958 | 971 | end |
| ... | ... | @@ -1010,8 +1023,8 @@ function Adv:backNext() |
| 1010 | 1023 | self:pushBackEvent(AdvBackEventType.Next, {}) |
| 1011 | 1024 | end |
| 1012 | 1025 | |
| 1013 | -function Adv:backEnd(score, reward) | |
| 1014 | - self:pushBackEvent(AdvBackEventType.End, {score = score, reward = reward}) | |
| 1026 | +function Adv:backEnd(success, score, scoreInfo, reward) | |
| 1027 | + self:pushBackEvent(AdvBackEventType.End, {success = success, score = score, scoreInfo = scoreInfo, reward = reward}) | |
| 1015 | 1028 | end |
| 1016 | 1029 | |
| 1017 | 1030 | function Adv:backBlockChange(roomId, blockId) |
| ... | ... | @@ -1027,6 +1040,43 @@ function Adv:backDead(enemyId) |
| 1027 | 1040 | end |
| 1028 | 1041 | |
| 1029 | 1042 | |
| 1043 | +function Adv:scoreChange(scoreType, pms) | |
| 1044 | + local cutTypes = {} | |
| 1045 | + local score = 0 | |
| 1046 | + cutTypes[AdvScoreType.Level] = function() | |
| 1047 | + score = globalCsv.adv_score_floor | |
| 1048 | + end | |
| 1049 | + cutTypes[AdvScoreType.Kill] = function() | |
| 1050 | + local chapterData = csvdb["adv_chapterCsv"][self.advInfo.chapter] | |
| 1051 | + score = globalCsv.adv_score_monster[pms] * chapterData["monRatio"] | |
| 1052 | + end | |
| 1053 | + cutTypes[AdvScoreType.Item] = function() | |
| 1054 | + score = csvdb["itemCsv"][pms[1]].adv_score_item * pms[2] | |
| 1055 | + end | |
| 1056 | + cutTypes[AdvScoreType.Hurt] = function() | |
| 1057 | + score = globalCsv.adv_score_hurt * pms | |
| 1058 | + end | |
| 1059 | + cutTypes[AdvScoreType.Block] = function() | |
| 1060 | + score = globalCsv.adv_score_block | |
| 1061 | + end | |
| 1062 | + if cutTypes[scoreType] then | |
| 1063 | + cutTypes[scoreType]() | |
| 1064 | + else | |
| 1065 | + return | |
| 1066 | + end | |
| 1067 | + self.advInfo.score[scoreType] = self.advInfo.score[scoreType] or 0 | |
| 1068 | + self.advInfo.score[scoreType] = self.advInfo.score[scoreType] + score | |
| 1069 | +end | |
| 1070 | + | |
| 1071 | +function Adv:getScore() | |
| 1072 | + return math.floor(math.max( | |
| 1073 | + (self.advInfo.score[AdvScoreType.Level] or 0) + | |
| 1074 | + (self.advInfo.score[AdvScoreType.Block] or 0) + | |
| 1075 | + (self.advInfo.score[AdvScoreType.Hurt] or 0), | |
| 1076 | + 0) + (self.advInfo.score[AdvScoreType.Kill] or 0) + | |
| 1077 | + (self.advInfo.score[AdvScoreType.Item] or 0)) | |
| 1078 | +end | |
| 1079 | + | |
| 1030 | 1080 | function Adv:popBackEvents() |
| 1031 | 1081 | local events = self.backEvents |
| 1032 | 1082 | self.backEvents = {} | ... | ... |
src/adv/AdvPlayer.lua
| ... | ... | @@ -230,6 +230,11 @@ function BaseObject:hurt(value, releaser, params) |
| 230 | 230 | --受伤了~ |
| 231 | 231 | self.battle.adv:backHpChange(self.id, -value) |
| 232 | 232 | self.hp = math.max(0, self.hp - value) |
| 233 | + | |
| 234 | + if self.cutHp then | |
| 235 | + self:cutHp(value) | |
| 236 | + end | |
| 237 | + | |
| 233 | 238 | if self.hp == 0 then |
| 234 | 239 | self:triggerPassive(Passive.SELF_DEAD) |
| 235 | 240 | for _, team in ipairs(self:getTeam(1, true)) do |
| ... | ... | @@ -432,4 +437,8 @@ function Player:ctor(battle, data) |
| 432 | 437 | self:initData(data) |
| 433 | 438 | end |
| 434 | 439 | |
| 440 | +function Player:cutHp(value) | |
| 441 | + self.battle.adv:scoreChange(AdvScoreType.Hurt, value) | |
| 442 | +end | |
| 443 | + | |
| 435 | 444 | return table.pack(Player, Enemy) |
| 436 | 445 | \ No newline at end of file | ... | ... |