Blame view

src/adv/AdvPassive.lua 3.1 KB
46fac6f1   zhouahaihai   酱料
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
41
42
43
44
45
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
  local Passive = class("Passive")
  
  -- 每回合触发的使用 afterRound
  -- 其他触发的使用 triggerPassive 
  
  Passive.BORN_ONCE = 1 -- 自身出生(翻开所在格子)后M回合触发(1次)
  Passive.BORN_PRE = 2 --自身出生(翻开所在格子)后每N回合触发1次
  Passive.HURT_PERCENT_SELF = 3 --自身,每损失N%生命值,触发1次
  Passive.HURT_PERCENT_TEAM = 4 --队友,每损失N%生命值,触发1次
  Passive.HP_LOW_SELF = 5 --自身生命值<N%时,每回合触发
  Passive.HP_LOW_TEAM = 6 --敌人生命值<N%时,每回合触发
  Passive.HP_UP_SELF = 7 --自身生命值>N%时,每回合触发
  Passive.HP_UP_TEAM = 8 --敌人生命值>N%时,每回合触发
  Passive.SELF_ATK = 9 --自身攻击N次后,触发1次
  Passive.SELF_HURT = 10 --自身受击N次后,触发1次
  Passive.TEAM_ATK = 11 --队友攻击N次后,触发1次
  Passive.TEAM_HURT = 12 --队友受击N次后,触发1次
  Passive.MONSTER_COUNT_UP = 13  --场上存在N个以上怪物,每回合触发
  Passive.MONSTER_COUNT_LOW = 14  --场上存在N个以下怪物,每回合触发
  Passive.SELF_DEAD = 15 --自身死亡后,触发1次
  Passive.TEAM_DEAD = 16 --队友死亡后,触发1次
  Passive.TARGET_SKILL = 17 --目标每使用N次技能,触发1次
  Passive.TEAM_SKILL = 18 --队友每使用N次技能,触发1次
  Passive.ROOM_SHOW = 19 --自身所在房间被展示时,触发1次
  
  -- 不同的开启条件
  local PassiveFactory = {
  	[]
  }
  
  function Passive:ctor(owner, data)
  	self.owner = owner
  	self.id = data.id
  	self.level = data.level or 1
  	self.passiveData = csvdb["adv_skill_passiveCsv"][self.id][self.level]
  	self.isDel = false
  	self.round = data.round or 0	--触发剩余回合数
  	self.count = data.count or 0	--触发剩余次数
  	if PassiveFactory[self.passiveData.condition] then
  		PassiveFactory[self.passiveData.condition](self)
  	end
  end
  
  function Passive:getCondType()
  	return self.passiveData.condition, self.passiveData.value
  end
  
  function Passive:effect()
  	if self._effect then
  		self:_effect()
  	end
  	--次数为 -1 一局只能触发一次,触发过后删掉就可以
  	if self.count == -1 then
  		self.isDel = true
  	end
  	if self.count > 0 then
  		self.count = self.count - 1
  		self.round = self.passiveData.space
  	end
  end
  
  function Passive:afterRound()
  	if self.isDel or self.owner.isDead then return end
  	if self._afterRound then
  		self:_afterRound()  --有的触发自己检测在这里检查
  	end
  	if self.round > 0 then  --回合触发的
  		self.round = self.round - 1
  		if self.round == 0 then
  			self:effect()
  		end
  	end
  end
  
  -- 正在触发中
  function  Passive:isActive( )
  	return self.count > 0 or self.round > 0
  end
  
  function Passive:trigger(condType, params) --触发检查
  	if self:getCondType() ~= condType then return end
  	if self:isActive() then return end
  
  	self.round = self.passiveData.delay --首次
  	self.count = self.passiveData.count --次数
  	-- 没有延迟就直接触发
  	if self.round == 0 then
  		self:effect()
  	end
  end
  
  function Passive:getDB()
  	local db = {}
  	if self._getDB then
  		db = self:_getDB()
  	end
  	db.id = self.id
  	db.level = self.level
  	db.round = self.round
  	db.count = self.count
  end
  return Passive