Commit 1b0d767fc13361574c6157262d709ece91686180
1 parent
23a38f47
一個被動支持多種effect
Showing
1 changed file
with
35 additions
and
14 deletions
Show diff stats
src/adv/AdvPassive.lua
... | ... | @@ -122,6 +122,9 @@ function Passive:ctor(owner, data) |
122 | 122 | self.isDel = false |
123 | 123 | self.round = data.round or 0 --触发剩余回合数 |
124 | 124 | self.count = data.count or 0 --触发剩余次数 |
125 | + | |
126 | + self.effects = self.passiveData.effect:toTableArray(true) | |
127 | + | |
125 | 128 | if PassiveCondFactory[self.passiveData.condition] then |
126 | 129 | PassiveCondFactory[self.passiveData.condition](self) |
127 | 130 | end |
... | ... | @@ -134,9 +137,28 @@ function Passive:getCondType() |
134 | 137 | return self.passiveData.condition, self.passiveData.value |
135 | 138 | end |
136 | 139 | |
137 | -function Passive:effect() | |
138 | - if math.randomInt(1, 100) <= self.passiveData.chance and self["effect" .. self.passiveData.effect] then | |
139 | - self["effect" .. self.passiveData.effect](self) | |
140 | +function Passive:canEffect(effType, effValue) | |
141 | + if self.owner.lock and effType ~= 3 then -- 锁定的只能触发翻开自己格子的固有技 | |
142 | + return | |
143 | + end | |
144 | + return true | |
145 | +end | |
146 | + | |
147 | +function Passive:effect(trigger) | |
148 | + if math.randomInt(1, 100) > self.passiveData.chance then | |
149 | + return | |
150 | + end | |
151 | + local effNum = 0 | |
152 | + for _, effect in pairs(self.effects) do | |
153 | + local effType = effect[1] | |
154 | + local effValue = effect[2] | |
155 | + if self:canEffect(effType, effValue) then | |
156 | + self["effect" .. effType](self, effValue, trigger) | |
157 | + effNum = effNum + 1 | |
158 | + end | |
159 | + end | |
160 | + if effNum < 1 then | |
161 | + return | |
140 | 162 | end |
141 | 163 | --次数为 -1 一局只能触发一次,触发过后删掉就可以 |
142 | 164 | if self.count == -1 then |
... | ... | @@ -170,7 +192,6 @@ function Passive:trigger(condType, params) --触发检查 |
170 | 192 | params = params or {} |
171 | 193 | if self.isDel or self.owner.isDead then return end |
172 | 194 | if self:getCondType() ~= condType then return end |
173 | - if self.owner.lock and self.passiveData.effect ~= 3 then return end -- 锁定的只能触发翻开自己格子的固有技 | |
174 | 195 | if self:isActive() then return end |
175 | 196 | if self._trigger then |
176 | 197 | if not self:_trigger(params) then return end --检查 |
... | ... | @@ -196,17 +217,17 @@ function Passive:getDB() |
196 | 217 | end |
197 | 218 | |
198 | 219 | --默认=0=使用技能, |
199 | -function Passive:effect0() | |
200 | - self.owner:releaseSkill(self.passiveData.effectValue) | |
220 | +function Passive:effect0(value) | |
221 | + self.owner:releaseSkill(value) | |
201 | 222 | end |
202 | 223 | --1=自身获得buff |
203 | -function Passive:effect1() | |
204 | - self.owner:addBuff(self.passiveData.effectValue) | |
224 | +function Passive:effect1(value) | |
225 | + self.owner:addBuff(value) | |
205 | 226 | end |
206 | 227 | --2=触发目标获得buff |
207 | -function Passive:effect2(trigger) | |
228 | +function Passive:effect2(value, trigger) | |
208 | 229 | if trigger then |
209 | - trigger:addBuff(self.passiveData.effectValue) | |
230 | + trigger:addBuff(value) | |
210 | 231 | end |
211 | 232 | end |
212 | 233 | --3=翻开自己所在格子 |
... | ... | @@ -219,14 +240,14 @@ function Passive:effect4() |
219 | 240 | self.owner.battle.adv:enemyDead(self.owner.roomId,self.owner.blockId, true) |
220 | 241 | end |
221 | 242 | --5=给随机一个敌方增加一个buff |
222 | -function Passive:effect5() | |
243 | +function Passive:effect5(value) | |
223 | 244 | local monsters = self.owner.battle.player:getTeam(2) |
224 | 245 | local randomId = math.random( 1, #monsters ) |
225 | - monsters[randomId]:addBuff(self.passiveData.effectValue) | |
246 | + monsters[randomId]:addBuff(value) | |
226 | 247 | end |
227 | 248 | --6=给自己加一個被動技能 |
228 | -function Passive:effect6() | |
229 | - self.owner:addPassive({id = self.passiveData.effectValue}) | |
249 | +function Passive:effect6(value) | |
250 | + self.owner:addPassive({id = value}) | |
230 | 251 | end |
231 | 252 | |
232 | 253 | return Passive |
233 | 254 | \ No newline at end of file | ... | ... |