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
|
a734980c
suhongyang
冒险战斗数据打完以前不存储
|
9
|
self.enemy = nil
|
46fac6f1
zhouahaihai
酱料
|
10
|
self.enemys = {} --怪
|
e459a5fc
suhongyang
战斗回合检查同步以及回合数据缓存
|
11
|
self.tempData = {} -- 临时回合数据
|
46fac6f1
zhouahaihai
酱料
|
12
13
14
|
self:initPlayer()
self:initEnemys()
self:initAfter()
|
02c4de8d
zhouahaihai
增加 固有技
|
15
16
17
|
if self.isNewPlayer then
self.player:triggerPassive(Passive.BORN_ONCE)
end
|
46fac6f1
zhouahaihai
酱料
|
18
19
20
21
22
23
24
|
end
function Battle:initAfter()
self.player:initAfter(self.adv.advTeam.player)
for _, enemy in pairs(self.enemys) do
enemy:initAfter(self.adv.rooms[enemy.roomId].blocks[enemy.blockId].event.enemy)
end
|
ae20365b
suhongyang
Revert "修改冒险战斗逻辑"
|
25
26
27
28
|
if self.adv.advTeam.enemyId then
local enemy = self:getEnemyById(self.adv.advTeam.enemyId)
self.enemy = enemy
end
|
46fac6f1
zhouahaihai
酱料
|
29
|
end
|
b53593b5
zhouhaihai
羁绊加成
|
30
31
32
33
34
35
36
37
38
|
--[[
队伍总属性 = 基础属性 + 等级 × 成长率
基础属性: 固定属性,与章节、队伍够成、养成无关,由策划给出
等级: 根据进入时的关卡,获得一个【初始等级】;消灭怪物获得经验后,累计N点会提升等级
羁绊加成: 加成条件与“战斗”相同,加成目标改为【冒险队】
成长率: 由【队伍总生存力】决定
成长率 =(总生存力 / 80)^0.52 + INT(总角色等级 / 50)* 1
--]]
|
46fac6f1
zhouahaihai
酱料
|
39
40
41
42
|
function Battle:initPlayer()
if not next(self.adv.advTeam.heros) then return end
if not self.adv.advTeam.player then
|
46fac6f1
zhouahaihai
酱料
|
43
44
|
local player = {}
player.passives = {}
|
b53593b5
zhouhaihai
羁绊加成
|
45
|
local heroLevel = 0
|
46fac6f1
zhouahaihai
酱料
|
46
|
for slot, heroId in pairs(self.adv.advTeam.heros) do
|
b53593b5
zhouhaihai
羁绊加成
|
47
48
49
|
local hero = self.adv.owner.heros[heroId]
if hero then
heroLevel = heroLevel + hero:getProperty("level")
|
46fac6f1
zhouahaihai
酱料
|
50
51
|
local advSkillId = csvdb["unitCsv"][self.adv.owner.heros[heroId]:getSkinId()]["adv"]
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
|
b53593b5
zhouhaihai
羁绊加成
|
56
|
player.growth = (self.adv.owner:getRealBattleValue(self.adv.advTeam.heros) / 80) ^ 0.52 + math.floor(heroLevel / 50) / 50
|
386ca58e
zhouhaihai
优化log
|
57
|
player.level = 1
|
b53593b5
zhouhaihai
羁绊加成
|
58
|
player.exp = 0
|
a41b9076
zhouhaihai
增加羁绊方法
|
59
|
local activeRelation = self.adv.owner:getHeroActiveRelation()
|
b53593b5
zhouhaihai
羁绊加成
|
60
61
62
|
local baseAttr = csvdb["adv_unitCsv"][math.floor(self.adv.advInfo.chapter / 100)]
for _, attr in pairs(AttsEnumEx) do
if baseAttr[attr] then
|
9812cb83
zhouhaihai
冒险队属性
|
63
|
player[attr] = baseAttr[attr] + baseAttr[attr] * player.growth * (player.level - 1)
|
b53593b5
zhouhaihai
羁绊加成
|
64
65
|
end
end
|
1b35c0a2
zhouhaihai
冒险
|
66
|
player.hpMax = player.hp or 0
|
46fac6f1
zhouahaihai
酱料
|
67
|
self.adv.advTeam.player = player
|
02c4de8d
zhouahaihai
增加 固有技
|
68
|
self.isNewPlayer = true
|
46fac6f1
zhouahaihai
酱料
|
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
end
self.player = Player.new(self, self.adv.advTeam.player)
end
function Battle:initEnemys()
for _, room in pairs(self.adv.rooms) do
for _, block in pairs(room.blocks) do
self:addEnemy(room, block)
end
end
end
function Battle:addEnemy(room, block)
if block.event and (block.event.etype == AdvEventType.BOSS or block.event.etype == AdvEventType.Monster) then
if not block.event.enemy then
local enemyCsv = csvdb["event_monsterCsv"][block.event.id]
local enemy = {}
enemy.hp = enemyCsv.hp + enemyCsv.levelhp * self.adv.advInfo.level
enemy.atk = enemyCsv.atk + enemyCsv.levelatk * self.adv.advInfo.level
enemy.hit = enemyCsv.hit + enemyCsv.levelhit * self.adv.advInfo.level
enemy.miss = enemyCsv.miss + enemyCsv.levelmiss * self.adv.advInfo.level
|
e996b82a
zhouahaihai
冒险增加防御属性
|
90
|
enemy.def = enemyCsv.def + enemyCsv.leveldef * self.adv.advInfo.level
|
46fac6f1
zhouahaihai
酱料
|
91
92
93
94
95
|
enemy.passives = {}
for _, id in ipairs(enemyCsv.passive:toArray(true, "=")) do
table.insert(enemy.passives, {id = id})
end
block.event.enemy = enemy
|
46fac6f1
zhouahaihai
酱料
|
96
|
end
|
02c4de8d
zhouahaihai
增加 固有技
|
97
98
99
|
local player = Enemy.new(self, block.event.mId or 999, block.event.id, room.roomId, block.blockId, not block.isOpen, block.event.enemy)
table.insert(self.enemys, player)
return player
|
46fac6f1
zhouahaihai
酱料
|
100
101
102
103
104
|
end
end
function Battle:getEnemy(roomId, blockId)
for _, enemy in ipairs(self.enemys) do
|
36c30c5c
zhouahaihai
冒险
|
105
|
if enemy.roomId == roomId and enemy.blockId == blockId then
|
46fac6f1
zhouahaihai
酱料
|
106
107
108
109
110
111
112
113
114
115
116
117
|
return enemy
end
end
end
function Battle:getEnemyById(id)
for _, enemy in ipairs(self.enemys) do
if enemy.id == id then
return enemy
end
end
end
|
39a6e08b
suhongyang
冒险战斗内逻辑调整
|
118
119
120
121
122
123
|
function Battle:getRBByEnemyId(enemyId)
local enemy = self:getEnemyById(enemyId)
return enemy.roomId, enemy.blockId
end
|
ae20365b
suhongyang
Revert "修改冒险战斗逻辑"
|
124
125
126
127
128
129
130
|
function Battle:isBattleEnd()
if not self.enemy then
return true
end
end
--战斗开始
|
ae9a74b5
suhongyang
返回miss,快速战斗逻辑
|
131
|
function Battle:battleBegin(roomId, blockId, isQuick)
|
e459a5fc
suhongyang
战斗回合检查同步以及回合数据缓存
|
132
|
self.tempData = {} -- 清理上次战斗数据
|
ae20365b
suhongyang
Revert "修改冒险战斗逻辑"
|
133
|
if self.enemy then
|
e459a5fc
suhongyang
战斗回合检查同步以及回合数据缓存
|
134
|
self.player:reset(self.adv.advTeam.player)
|
ae20365b
suhongyang
Revert "修改冒险战斗逻辑"
|
135
136
|
self.enemy:reset(self.adv.rooms[self.enemy.roomId].blocks[self.enemy.blockId].event.enemy)
end
|
46fac6f1
zhouahaihai
酱料
|
137
138
|
local enemy = self:getEnemy(roomId, blockId)
if enemy then
|
8cec27ce
suhongyang
战斗开始
|
139
|
self.adv:backBattleBegin()
|
a734980c
suhongyang
冒险战斗数据打完以前不存储
|
140
|
self.enemy = enemy
|
821f2b60
suhongyang
冒险战斗完善,增加battlebe...
|
141
|
self.player:battleBegin()
|
a734980c
suhongyang
冒险战斗数据打完以前不存储
|
142
|
self.enemy:battleBegin()
|
ae9a74b5
suhongyang
返回miss,快速战斗逻辑
|
143
144
145
146
147
148
149
|
if not isQuick then
self:doBattleTurn()
return
end
while not enemy.isDead and not self.player.isDead do
self:doBattleTurn()
end
|
39a6e08b
suhongyang
冒险战斗内逻辑调整
|
150
151
152
|
end
end
|
e459a5fc
suhongyang
战斗回合检查同步以及回合数据缓存
|
153
154
155
156
157
158
159
|
-- 检查回合数同步
function Battle:checkTurn(turn)
if self.tempData[turn] then
return true
end
end
|
39a6e08b
suhongyang
冒险战斗内逻辑调整
|
160
161
|
-- 战斗内一回合
function Battle:doBattleTurn()
|
a734980c
suhongyang
冒险战斗数据打完以前不存储
|
162
|
local enemy = self.enemy
|
39a6e08b
suhongyang
冒险战斗内逻辑调整
|
163
164
165
166
167
168
169
170
171
172
173
174
|
-- 玩家先出手
self.adv:backAtk(nil, enemy.id)
self:doPlayerTurn(self.player, enemy)
--是否无法攻击
if not enemy.isDead and not enemy:hadBuff(Buff.CANT_BACK_ATK) then
self.adv:backAtk(enemy.id, nil)
self:doPlayerTurn(enemy, self.player)
end
-- 判定死亡
if enemy.isDead or self.player.isDead then
local deadPlayer = enemy.isDead and enemy or self.player
deadPlayer:battleEnd()
|
a734980c
suhongyang
冒险战斗数据打完以前不存储
|
175
|
self.enemy = nil
|
ae20365b
suhongyang
Revert "修改冒险战斗逻辑"
|
176
177
|
else
self.adv:backTurnEnd()
|
46fac6f1
zhouahaihai
酱料
|
178
|
end
|
a88a35fd
suhongyang
Fix bug
|
179
|
self:getTempDB()
|
46fac6f1
zhouahaihai
酱料
|
180
|
end
|
39a6e08b
suhongyang
冒险战斗内逻辑调整
|
181
182
183
|
--战斗内角色回合逻辑
function Battle:doPlayerTurn(atkPlayer, hurtPlayer)
|
7c55db1f
suhongyang
Buff逻辑完善,buff生效次数...
|
184
|
atkPlayer:beforeTurn()
|
42f2d1d3
suhongyang
战斗内技能序列逻辑
|
185
186
187
188
189
|
if #(atkPlayer.skillOrder) > 0 then
atkPlayer:releaseSpecialSkill()
else
hurtPlayer:hurt(atkPlayer:getHurtValue(), atkPlayer, {hurtType = 1})
end
|
7c55db1f
suhongyang
Buff逻辑完善,buff生效次数...
|
190
191
192
|
atkPlayer:afterTurn()
atkPlayer:clearTurn()
end
|
39a6e08b
suhongyang
冒险战斗内逻辑调整
|
193
|
|
46fac6f1
zhouahaihai
酱料
|
194
195
|
--触发全员被动技能
function Battle:triggerPassive(condType, params)
|
02c4de8d
zhouahaihai
增加 固有技
|
196
197
198
199
|
self.player:triggerPassive(condType, params)
for _, enemy in ipairs(self.enemys) do
enemy:triggerPassive(condType, params)
end
|
46fac6f1
zhouahaihai
酱料
|
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
|
end
--回合
function Battle:afterRound()
self.player:afterRound()
table.sort(self.enemys, function(e1, e2)
return e1.id < e2.id
end)
for _, enemy in ipairs(self.enemys) do
enemy:afterRound()
end
self.player:clearRound()
for _, enemy in ipairs(self.enemys) do
enemy:clearRound()
end
for i = #self.enemys, 1, -1 do
if self.enemys[i].isDead then
self.adv:enemyDead(self.enemys[i].roomId, self.enemys[i].blockId)
self.enemys[i]:clear()
table.remove(self.enemys, i)
end
end
|
ec87b4a5
zhouahaihai
冒险 完善
|
222
|
|
46fac6f1
zhouahaihai
酱料
|
223
|
if self.player.isDead then
|
4b7c7c96
zhouahaihai
增加 清空 挂机 冒险gm 角色经验
|
224
|
self.adv:over(false)
|
46fac6f1
zhouahaihai
酱料
|
225
226
227
|
end
end
|
e459a5fc
suhongyang
战斗回合检查同步以及回合数据缓存
|
228
229
230
231
232
233
234
235
236
237
|
-- 写入临时数据
function Battle:getTempDB()
local turnDB = {}
if self.enemy then
turnDB.enemy = self.enemy:getDB()
end
turnDB.player = self.player:getDB()
table.insert(self.tempData, turnDB)
end
|
46fac6f1
zhouahaihai
酱料
|
238
239
|
--写入数据
function Battle:getDB()
|
ae20365b
suhongyang
Revert "修改冒险战斗逻辑"
|
240
241
242
243
244
245
|
if not self.enemy then
self.adv.advTeam.enemyId = nil
else
self.adv.advTeam.enemyId = self.enemy.id
return
end
|
46fac6f1
zhouahaihai
酱料
|
246
247
248
249
250
|
self.adv.advTeam.player = self.player:getDB()
for _, enemy in ipairs(self.enemys) do
local block = self.adv.rooms[enemy.roomId].blocks[enemy.blockId]
block.event.enemy = enemy:getDB()
end
|
46fac6f1
zhouahaihai
酱料
|
251
252
|
end
|
36c30c5c
zhouahaihai
冒险
|
253
|
return Battle
|