19d8c401
zhouhaihai
大小写
|
1
|
local Player, Enemy = table.unpack(require "adv.AdvPlayer")
|
46fac6f1
zhouahaihai
酱料
|
2
|
local Buff = require "adv.AdvBuff"
|
32bca13b
zhouahaihai
bug
|
3
|
local Passive = require "adv.AdvPassive"
|
36c30c5c
zhouahaihai
冒险
|
4
|
local Battle = class("Battle")
|
46fac6f1
zhouahaihai
酱料
|
5
6
7
|
function Battle:ctor(adv)
self.adv = adv
self.player = nil --玩家
|
02c4de8d
zhouahaihai
增加 固有技
|
8
|
self.isNewPlayer = false
|
46fac6f1
zhouahaihai
酱料
|
9
|
self.enemys = {} --怪
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
10
|
self.cachePassiveEvent = {}
|
46fac6f1
zhouahaihai
酱料
|
11
12
13
|
self:initPlayer()
self:initEnemys()
self:initAfter()
|
02c4de8d
zhouahaihai
增加 固有技
|
14
15
|
if self.isNewPlayer then
self.player:triggerPassive(Passive.BORN_ONCE)
|
51718558
zhouhaihai
中继层初始经验
|
16
|
self.player:addExp((self.adv.level - 1) * 40)
|
02c4de8d
zhouahaihai
增加 固有技
|
17
|
end
|
46fac6f1
zhouahaihai
酱料
|
18
19
20
|
end
function Battle:initAfter()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
21
22
23
24
25
|
self.player:initAfter(self.adv.owner:getProperty("advTeam").player)
for idx, mapEnemys in pairs(self.enemys) do
for _, enemy in ipairs(mapEnemys) do
enemy:initAfter(self.adv:getBlock(enemy.roomId, enemy.blockId, idx).event.enemy)
end
|
46fac6f1
zhouahaihai
酱料
|
26
|
end
|
46fac6f1
zhouahaihai
酱料
|
27
|
end
|
b53593b5
zhouhaihai
羁绊加成
|
28
29
30
31
32
33
34
35
36
|
--[[
队伍总属性 = 基础属性 + 等级 × 成长率
基础属性: 固定属性,与章节、队伍够成、养成无关,由策划给出
等级: 根据进入时的关卡,获得一个【初始等级】;消灭怪物获得经验后,累计N点会提升等级
羁绊加成: 加成条件与“战斗”相同,加成目标改为【冒险队】
成长率: 由【队伍总生存力】决定
成长率 =(总生存力 / 80)^0.52 + INT(总角色等级 / 50)* 1
--]]
|
46fac6f1
zhouahaihai
酱料
|
37
38
|
function Battle:initPlayer()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
39
40
41
42
43
|
local advTeam = self.adv.owner:getProperty("advTeam")
if not next(advTeam.heros) then return end
local player = advTeam.player
if not player then
player = {}
|
46fac6f1
zhouahaihai
酱料
|
44
|
player.passives = {}
|
b53593b5
zhouhaihai
羁绊加成
|
45
|
local heroLevel = 0
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
46
|
for slot, heroId in pairs(advTeam.heros) do
|
b53593b5
zhouhaihai
羁绊加成
|
47
48
49
|
local hero = self.adv.owner.heros[heroId]
if hero then
heroLevel = heroLevel + hero:getProperty("level")
|
f2fa488d
wangyujie
删除skin相关
|
50
|
local advSkillId = csvdb["unitCsv"][self.adv.owner.heros[heroId]:getProperty("type")]["adv"]
|
46fac6f1
zhouahaihai
酱料
|
51
|
if advSkillId > 1000 then
|
b53593b5
zhouhaihai
羁绊加成
|
52
|
table.insert(player.passives, {id = advSkillId, level = hero:getSkillLevel(4)})
|
46fac6f1
zhouahaihai
酱料
|
53
54
55
|
end
end
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
56
|
player.growth = (self.adv.owner:getRealBattleValue(advTeam.heros) / 80) ^ 0.52 + math.floor(heroLevel / 50) / 50
|
386ca58e
zhouhaihai
优化log
|
57
|
player.level = 1
|
b53593b5
zhouhaihai
羁绊加成
|
58
|
player.exp = 0
|
3b0526d2
zhouhaihai
冒险demo
|
59
|
player.sp = 100
|
a41b9076
zhouhaihai
增加羁绊方法
|
60
|
local activeRelation = self.adv.owner:getHeroActiveRelation()
|
4d943586
zhouhaihai
直通 advt gm
|
61
|
local baseAttr = csvdb["adv_unitCsv"][self.adv.chapterId]
|
b53593b5
zhouhaihai
羁绊加成
|
62
63
|
for _, attr in pairs(AttsEnumEx) do
if baseAttr[attr] then
|
8019d0bb
zhouhaihai
冒险buff 调整
|
64
|
player[attr] = baseAttr[attr] + player.growth * (player.level - 1)
|
b53593b5
zhouhaihai
羁绊加成
|
65
66
|
end
end
|
1b35c0a2
zhouhaihai
冒险
|
67
|
player.hpMax = player.hp or 0
|
02c4de8d
zhouahaihai
增加 固有技
|
68
|
self.isNewPlayer = true
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
69
|
advTeam.player = player
|
46fac6f1
zhouahaihai
酱料
|
70
|
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
71
|
self.player = Player.new(self, player)
|
46fac6f1
zhouahaihai
酱料
|
72
73
74
|
end
function Battle:initEnemys()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
for idx, map in pairs(self.adv.maps) do
self:initMapEnemys(idx)
end
end
function Battle:initMapEnemys(mapIdx)
self.enemys[mapIdx] = {}
local map = self.adv.maps[mapIdx]
if map then
for _, room in pairs(map.rooms) do
for _, block in pairs(room.blocks) do
self:addEnemy(room, block, mapIdx)
end
end
end
if self.cachePassiveEvent[mapIdx] then
for _, passiveC in ipairs(self.cachePassiveEvent or {}) do
for _, enemy in ipairs(self.enemys[mapIdx]) do
enemy:triggerPassive(passiveC[1], passiveC[2])
end
|
46fac6f1
zhouahaihai
酱料
|
95
96
|
end
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
97
|
self.cachePassiveEvent[mapIdx] = nil
|
46fac6f1
zhouahaihai
酱料
|
98
99
|
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
100
101
102
103
|
function Battle:addEnemy(room, block, mapIdx)
mapIdx = mapIdx or self.adv:getCurMapIdx()
if block:isMonster() then
|
46fac6f1
zhouahaihai
酱料
|
104
105
106
|
if not block.event.enemy then
local enemyCsv = csvdb["event_monsterCsv"][block.event.id]
local enemy = {}
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
107
108
109
110
111
|
enemy.hp = enemyCsv.hp + enemyCsv.levelhp * self.adv.level
enemy.atk = enemyCsv.atk + enemyCsv.levelatk * self.adv.level
enemy.hit = enemyCsv.hit + enemyCsv.levelhit * self.adv.level
enemy.miss = enemyCsv.miss + enemyCsv.levelmiss * self.adv.level
enemy.def = enemyCsv.def + enemyCsv.leveldef * self.adv.level
|
46fac6f1
zhouahaihai
酱料
|
112
|
enemy.passives = {}
|
de3b786f
zhouhaihai
字段换名字
|
113
|
for _, id in ipairs(enemyCsv.mapPassive:toArray(true, "=")) do
|
46fac6f1
zhouahaihai
酱料
|
114
115
116
|
table.insert(enemy.passives, {id = id})
end
block.event.enemy = enemy
|
46fac6f1
zhouahaihai
酱料
|
117
|
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
118
119
|
local player = Enemy.new(self, block.event.mId or 999, block.event.id, room.roomId, block.blockId, not block.isOpen, block.event.enemy, mapIdx)
table.insert(self.enemys[mapIdx], player)
|
02c4de8d
zhouahaihai
增加 固有技
|
120
|
return player
|
46fac6f1
zhouahaihai
酱料
|
121
122
123
|
end
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
124
125
126
|
function Battle:getEnemy(roomId, blockId, mapIdx)
mapIdx = mapIdx or self.adv:getCurMapIdx()
for _, enemy in ipairs(self.enemys[mapIdx] or {}) do
|
36c30c5c
zhouahaihai
冒险
|
127
|
if enemy.roomId == roomId and enemy.blockId == blockId then
|
46fac6f1
zhouahaihai
酱料
|
128
129
130
131
132
133
|
return enemy
end
end
end
function Battle:getEnemyById(id)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
134
135
136
137
138
|
for idx, mapEnemys in pairs(self.enemys) do
for _, enemy in ipairs(mapEnemys) do
if enemy.id == id then
return enemy
end
|
46fac6f1
zhouahaihai
酱料
|
139
140
141
|
end
end
end
|
39a6e08b
suhongyang
冒险战斗内逻辑调整
|
142
143
144
|
function Battle:getRBByEnemyId(enemyId)
local enemy = self:getEnemyById(enemyId)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
145
|
return enemy.roomId, enemy.blockId, enemy.mapIdx
|
39a6e08b
suhongyang
冒险战斗内逻辑调整
|
146
147
|
end
|
39a6e08b
suhongyang
冒险战斗内逻辑调整
|
148
|
|
46fac6f1
zhouahaihai
酱料
|
149
|
--触发全员被动技能
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
150
151
|
function Battle:triggerPassive(condType, params, mapIdx)
mapIdx = mapIdx or self.adv:getCurMapIdx()
|
02c4de8d
zhouahaihai
增加 固有技
|
152
|
self.player:triggerPassive(condType, params)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
153
154
155
156
157
158
159
160
|
if not self.enemys[mapIdx] then
-- 缓存一下
self.cachePassiveEvent[mapIdx] = self.cachePassiveEvent[mapIdx] or {}
table.insert(self.cachePassiveEvent[mapIdx], {condType, params})
else
for _, enemy in ipairs(self.enemys[mapIdx]) do
enemy:triggerPassive(condType, params)
end
|
02c4de8d
zhouahaihai
增加 固有技
|
161
|
end
|
46fac6f1
zhouahaihai
酱料
|
162
163
164
165
|
end
--回合
function Battle:afterRound()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
166
|
local mapIdx = self.adv:getCurMapIdx()
|
46fac6f1
zhouahaihai
酱料
|
167
|
self.player:afterRound()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
168
|
table.sort(self.enemys[mapIdx], function(e1, e2)
|
46fac6f1
zhouahaihai
酱料
|
169
170
|
return e1.id < e2.id
end)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
171
|
for _, enemy in ipairs(self.enemys[mapIdx]) do
|
46fac6f1
zhouahaihai
酱料
|
172
173
174
|
enemy:afterRound()
end
self.player:clearRound()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
175
|
for _, enemy in ipairs(self.enemys[mapIdx]) do
|
46fac6f1
zhouahaihai
酱料
|
176
177
|
enemy:clearRound()
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
178
179
|
for i = #self.enemys[mapIdx], 1, -1 do
if self.enemys[mapIdx][i].isDead then
|
4faef572
zhouhaihai
冒险任务,冒险扫荡, 冒险中继
|
180
|
local enemy = table.remove(self.enemys[mapIdx], i)
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
181
182
|
self.adv:enemyDead(enemy, enemy.isDead == 1)
enemy:clear()
|
46fac6f1
zhouahaihai
酱料
|
183
184
|
end
end
|
ec87b4a5
zhouahaihai
冒险 完善
|
185
|
|
46fac6f1
zhouahaihai
酱料
|
186
|
if self.player.isDead then
|
4b7c7c96
zhouahaihai
增加 清空 挂机 冒险gm 角色经验
|
187
|
self.adv:over(false)
|
46fac6f1
zhouahaihai
酱料
|
188
189
190
|
end
end
|
e459a5fc
suhongyang
战斗回合检查同步以及回合数据缓存
|
191
|
|
12f7b52c
zhouhaihai
冒险战斗
|
192
193
194
195
196
197
198
|
function Battle:battleBegin(roomId, blockId, params)
local enemy = self:getEnemy(roomId, blockId)
if not enemy then return end
local player = params.player
-- 玩家没死就是怪死了
if player.hp > 0 then
enemy:hurt(enemy.hp, self.player, {hurtType = 5})
|
e90b4d20
zhouhaihai
战斗buff
|
199
|
self.player:effectBattleBuff()
|
53e8037e
zhouhaihai
任务
|
200
201
|
self.adv.owner:checkTaskEnter("AdvBattleWin", {id = self.adv.chapterId})
|
12f7b52c
zhouhaihai
冒险战斗
|
202
|
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
203
204
205
206
207
208
209
|
if player.hp > self.player.hp then
self.player:recover(player.hp - self.player.hp, player)
else
self.player:hurt(math.max(0, math.ceil(self.player.hp - player.hp)), enemy, {hurtType = 5}) --战斗血量只会变少
end
self.player:changeSp(math.floor(player.sp - self.player.sp) , 0) --战斗魔力只会变少
|
12f7b52c
zhouhaihai
冒险战斗
|
210
211
212
|
end
|
46fac6f1
zhouahaihai
酱料
|
213
|
--写入数据
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
214
215
216
217
218
219
220
221
|
function Battle:saveDB()
for idx, mapEnemys in pairs(self.enemys) do
for _, enemy in ipairs(mapEnemys) do
local block = self.adv:getBlock(enemy.roomId, enemy.blockId, idx)
if block and block:isMonster() then
block.event.enemy = enemy:getDB()
end
end
|
46fac6f1
zhouahaihai
酱料
|
222
|
end
|
46fac6f1
zhouahaihai
酱料
|
223
224
|
end
|
36c30c5c
zhouahaihai
冒险
|
225
|
return Battle
|