Commit 1b0d767fc13361574c6157262d709ece91686180

Authored by suhongyang
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
... ...