Blame view

src/adv/AdvBattle.lua 4.44 KB
36c30c5c   zhouahaihai   冒险
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
10
11
12
  	self.enemys = {} --怪
  	self:initPlayer()
  	self:initEnemys()
  	self:initAfter()
02c4de8d   zhouahaihai   增加 固有技
13
14
15
  	if self.isNewPlayer then
  		self.player:triggerPassive(Passive.BORN_ONCE)
  	end
46fac6f1   zhouahaihai   酱料
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  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
  end
  
  function Battle:initPlayer()
  	if not next(self.adv.advTeam.heros) then return end
  	if not self.adv.advTeam.player then
  		local hp = 0
  		local player = {}
  		player.passives = {}
  		for slot, heroId in pairs(self.adv.advTeam.heros) do
  			if self.adv.owner.heros[heroId] then
  				hp = hp + self.adv.owner.heros[heroId]:getProperty("battleV")
  				local advSkillId = csvdb["unitCsv"][self.adv.owner.heros[heroId]:getSkinId()]["adv"]
  				if advSkillId > 1000 then
  					table.insert(player.passives, {id = advSkillId, level = self.adv.owner.heros[heroId]:getSkillLevel(4)})
  				end
  			end
  		end
  		player.hp = hp
384bb077   zhouahaihai   挂机
41
  		player.atk = tonumber(string.format("%0.0f", player.hp * 0.1)) --todo 系数是临时的
46fac6f1   zhouahaihai   酱料
42
43
44
  		player.miss = 0
  		player.hit = 100
  		self.adv.advTeam.player = player
02c4de8d   zhouahaihai   增加 固有技
45
  		self.isNewPlayer = true
46fac6f1   zhouahaihai   酱料
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
  	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
  			enemy.passives = {}
  			for _, id in ipairs(enemyCsv.passive:toArray(true, "=")) do
  				table.insert(enemy.passives, {id = id})
  			end
  			block.event.enemy = enemy
46fac6f1   zhouahaihai   酱料
72
  		end
02c4de8d   zhouahaihai   增加 固有技
73
74
75
  		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   酱料
76
77
78
79
80
  	end 
  end
  
  function Battle:getEnemy(roomId, blockId)
  	for _, enemy in ipairs(self.enemys) do
36c30c5c   zhouahaihai   冒险
81
  		if enemy.roomId == roomId and enemy.blockId == blockId then
46fac6f1   zhouahaihai   酱料
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
  			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
  --普通攻击
  function Battle:playerAtk(roomId, blockId)
  	local enemy = self:getEnemy(roomId, blockId)
  	if enemy then
bedca62d   zhouahaihai   冒险
98
99
100
101
102
103
104
105
  		while not enemy.isDead and not self.player.isDead do
  			self.adv:backAtk(nil, enemy.id)
  			enemy:hurt(self.player:getHurtValue(), self.player, {hurtType = 1})
  			--是否无法反击
  			if not enemy.isDead and not enemy:hadBuff(Buff.CANT_BACK_ATK) then
  				self.adv:backAtk(enemy.id, nil)
  				self.player:hurt(enemy:getHurtValue(), enemy, {hurtType = 1})
  			end
46fac6f1   zhouahaihai   酱料
106
107
108
109
110
  		end
  	end
  end
  --触发全员被动技能
  function Battle:triggerPassive(condType, params)
02c4de8d   zhouahaihai   增加 固有技
111
112
113
114
  	self.player:triggerPassive(condType, params)
  	for _, enemy in ipairs(self.enemys) do
  		enemy:triggerPassive(condType, params)
  	end
46fac6f1   zhouahaihai   酱料
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
  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   冒险 完善
137
138
139
140
141
142
143
144
  
  	if self.adv.advInfo.power > 0 then
  		self.adv:changePower(-1)
  	else
  		self.player:hurt(self.player.hpMax / 10, nil, {hurtType = 4})
  	end
  
  
46fac6f1   zhouahaihai   酱料
145
  	if self.player.isDead then
4b7c7c96   zhouahaihai   增加 清空 挂机 冒险gm 角色经验
146
  		self.adv:over(false)
46fac6f1   zhouahaihai   酱料
147
148
149
150
151
152
153
154
155
156
157
158
  	end
  end
  
  --写入数据
  function Battle:getDB()
  	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
  end
  
36c30c5c   zhouahaihai   冒险
159
  return Battle