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,6 +122,9 @@ function Passive:ctor(owner, data)
122 self.isDel = false 122 self.isDel = false
123 self.round = data.round or 0 --触发剩余回合数 123 self.round = data.round or 0 --触发剩余回合数
124 self.count = data.count or 0 --触发剩余次数 124 self.count = data.count or 0 --触发剩余次数
  125 +
  126 + self.effects = self.passiveData.effect:toTableArray(true)
  127 +
125 if PassiveCondFactory[self.passiveData.condition] then 128 if PassiveCondFactory[self.passiveData.condition] then
126 PassiveCondFactory[self.passiveData.condition](self) 129 PassiveCondFactory[self.passiveData.condition](self)
127 end 130 end
@@ -134,9 +137,28 @@ function Passive:getCondType() @@ -134,9 +137,28 @@ function Passive:getCondType()
134 return self.passiveData.condition, self.passiveData.value 137 return self.passiveData.condition, self.passiveData.value
135 end 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 end 162 end
141 --次数为 -1 一局只能触发一次,触发过后删掉就可以 163 --次数为 -1 一局只能触发一次,触发过后删掉就可以
142 if self.count == -1 then 164 if self.count == -1 then
@@ -170,7 +192,6 @@ function Passive:trigger(condType, params) --触发检查 @@ -170,7 +192,6 @@ function Passive:trigger(condType, params) --触发检查
170 params = params or {} 192 params = params or {}
171 if self.isDel or self.owner.isDead then return end 193 if self.isDel or self.owner.isDead then return end
172 if self:getCondType() ~= condType then return end 194 if self:getCondType() ~= condType then return end
173 - if self.owner.lock and self.passiveData.effect ~= 3 then return end -- 锁定的只能触发翻开自己格子的固有技  
174 if self:isActive() then return end 195 if self:isActive() then return end
175 if self._trigger then 196 if self._trigger then
176 if not self:_trigger(params) then return end --检查 197 if not self:_trigger(params) then return end --检查
@@ -196,17 +217,17 @@ function Passive:getDB() @@ -196,17 +217,17 @@ function Passive:getDB()
196 end 217 end
197 218
198 --默认=0=使用技能, 219 --默认=0=使用技能,
199 -function Passive:effect0()  
200 - self.owner:releaseSkill(self.passiveData.effectValue) 220 +function Passive:effect0(value)
  221 + self.owner:releaseSkill(value)
201 end 222 end
202 --1=自身获得buff 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 end 226 end
206 --2=触发目标获得buff 227 --2=触发目标获得buff
207 -function Passive:effect2(trigger) 228 +function Passive:effect2(value, trigger)
208 if trigger then 229 if trigger then
209 - trigger:addBuff(self.passiveData.effectValue) 230 + trigger:addBuff(value)
210 end 231 end
211 end 232 end
212 --3=翻开自己所在格子 233 --3=翻开自己所在格子
@@ -219,14 +240,14 @@ function Passive:effect4() @@ -219,14 +240,14 @@ function Passive:effect4()
219 self.owner.battle.adv:enemyDead(self.owner.roomId,self.owner.blockId, true) 240 self.owner.battle.adv:enemyDead(self.owner.roomId,self.owner.blockId, true)
220 end 241 end
221 --5=给随机一个敌方增加一个buff 242 --5=给随机一个敌方增加一个buff
222 -function Passive:effect5() 243 +function Passive:effect5(value)
223 local monsters = self.owner.battle.player:getTeam(2) 244 local monsters = self.owner.battle.player:getTeam(2)
224 local randomId = math.random( 1, #monsters ) 245 local randomId = math.random( 1, #monsters )
225 - monsters[randomId]:addBuff(self.passiveData.effectValue) 246 + monsters[randomId]:addBuff(value)
226 end 247 end
227 --6=给自己加一個被動技能 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 end 251 end
231 252
232 return Passive 253 return Passive
233 \ No newline at end of file 254 \ No newline at end of file