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