diff --git a/lua/server/room.lua b/lua/server/room.lua index 57a1f103..bb649f9c 100644 --- a/lua/server/room.lua +++ b/lua/server/room.lua @@ -1475,12 +1475,13 @@ function Room:damage(damageStruct) assert(type(damageStruct.to) == "number") local stages = { - [fk.PreDamage] = damageStruct.from, - [fk.DamageCaused] = damageStruct.from, - [fk.DamageInflicted] = damageStruct.to, + {fk.PreDamage, damageStruct.from}, + {fk.DamageCaused, damageStruct.from}, + {fk.DamageInflicted, damageStruct.to}, } - for event, playerId in ipairs(stages) do + for _, struct in ipairs(stages) do + local event, playerId = table.unpack(struct) local player = playerId and self:getPlayerById(playerId) or nil if self.logic:trigger(event, player, damageStruct) or damageStruct.damage < 1 then return false @@ -1500,12 +1501,13 @@ function Room:damage(damageStruct) end stages = { - [fk.Damage] = damageStruct.from, - [fk.Damaged] = damageStruct.to, - [fk.DamageFinished] = damageStruct.from, + {fk.Damage, damageStruct.from}, + {fk.Damaged, damageStruct.to}, + {fk.DamageFinished, damageStruct.from}, } - for event, playerId in ipairs(stages) do + for _, struct in ipairs(stages) do + local event, playerId = table.unpack(struct) local player = playerId and self:getPlayerById(playerId) or nil self.logic:trigger(event, player, damageStruct) end diff --git a/packages/standard/init.lua b/packages/standard/init.lua index 96f7fa90..11a30afb 100644 --- a/packages/standard/init.lua +++ b/packages/standard/init.lua @@ -21,22 +21,22 @@ local fankui = fk.CreateTriggerSkill{ events = {fk.Damaged}, frequency = Skill.NotFrequent, can_trigger = function(self, event, target, player, data) - return target:hasSkill(self.name) + local room = target.room + local from = room:getPlayerById(data.from) + return from ~= nil and + target == player and + target:hasSkill(self.name) end, on_trigger = function(self, event, target, player, data) - local damage = data.damage local room = player.room - local from = room:getPlayerById(damage.from) - if event == fk.Damaged then - if from:isNude() then return false end - if room:askForSkillInvoke(target, self.name) then - local card = room:askForCardChosen(target, from, "he", self.name) - room:obtainCard(target.id, card, false, fk.ReasonPrey) - end + local from = room:getPlayerById(data.from) + if (not from) or from:isNude() then return false end + if room:askForSkillInvoke(player, self.name) then + local card = room:askForCardChosen(player, from, "he", self.name) + room:obtainCard(player.id, card, false, fk.ReasonPrey) end end } - local simayi = General:new(extension, "simayi", "wei", 3) simayi:addSkill(fankui) Fk:loadTranslationTable{