Commit cb071e8d9088275ab8f35e10aac47aa4d862a967
1 parent
6ba840cb
多条件选项
Showing
2 changed files
with
52 additions
and
4 deletions
Show diff stats
src/adv/Adv.lua
... | ... | @@ -1031,7 +1031,7 @@ local function chooseCommon(self, room, block, chooseData, choose, tag) |
1031 | 1031 | if not choose then return end |
1032 | 1032 | if not chooseData or not chooseData["button".. choose .."cond"] then return end |
1033 | 1033 | |
1034 | - local cond = chooseData["button".. choose .."cond"]:toArray(true, "=") | |
1034 | + local conds = chooseData["button".. choose .."cond"]:toTableArray(true) | |
1035 | 1035 | local checkCond = { |
1036 | 1036 | -- 没有条件 |
1037 | 1037 | [0] = function() |
... | ... | @@ -1106,10 +1106,54 @@ local function chooseCommon(self, room, block, chooseData, choose, tag) |
1106 | 1106 | [10] = function(_, artifactId) |
1107 | 1107 | return not self:isHaveArtifact(artifactId) |
1108 | 1108 | end, |
1109 | + -- 11 = 地图上没有指定id 的怪 | |
1110 | + [11] = function(_, monsterId) | |
1111 | + for _, room in pairs(self:getCurMap().rooms) do | |
1112 | + for _, block in pairs(room.blocks) do | |
1113 | + if block:isMonster() then | |
1114 | + if not monsterId then return false end | |
1115 | + if block.event.id == monsterId then | |
1116 | + return false | |
1117 | + end | |
1118 | + end | |
1119 | + end | |
1120 | + end | |
1121 | + return true | |
1122 | + end, | |
1123 | + -- 12 = 地图上没有指定id 的建筑 | |
1124 | + [12] = function(_, buildId) | |
1125 | + for _, room in pairs(self:getCurMap().rooms) do | |
1126 | + for _, block in pairs(room.blocks) do | |
1127 | + if block:isBuild() then | |
1128 | + if not buildId then return false end | |
1129 | + if block.event.id == buildId then | |
1130 | + return false | |
1131 | + end | |
1132 | + end | |
1133 | + end | |
1134 | + end | |
1135 | + return true | |
1136 | + end, | |
1137 | + -- 13 = 地图上没有指定的 选择点 | |
1138 | + [13] = function(_, chooseId) | |
1139 | + for _, room in pairs(self:getCurMap().rooms) do | |
1140 | + for _, block in pairs(room.blocks) do | |
1141 | + if block:isChoose() then | |
1142 | + if not chooseId then return false end | |
1143 | + if block.event.id == chooseId then | |
1144 | + return false | |
1145 | + end | |
1146 | + end | |
1147 | + end | |
1148 | + end | |
1149 | + return true | |
1150 | + end, | |
1109 | 1151 | } |
1110 | - assert(not cond[1] or checkCond[cond[1]], "error cond, event_" .. (tag or "choose") .. "Csv id :" .. block.event.id) | |
1111 | - | |
1112 | - if cond[1] and not checkCond[cond[1]](table.unpack(cond)) then return end | |
1152 | + for _, cond in ipairs(conds) do | |
1153 | + assert(not cond[1] or checkCond[cond[1]], "error cond, event_" .. (tag or "choose") .. "Csv id :" .. block.event.id) | |
1154 | + if cond[1] and not checkCond[cond[1]](table.unpack(cond)) then return end | |
1155 | + end | |
1156 | + | |
1113 | 1157 | local clearBlock = chooseData.keep ~= 1 |
1114 | 1158 | local effects = chooseData["button".. choose .."effect"]:toTableArray(true) |
1115 | 1159 | for _, effect in ipairs(effects) do | ... | ... |
src/adv/AdvBlock.lua
... | ... | @@ -25,6 +25,10 @@ function Block:isBuild() |
25 | 25 | return self:getEventType() == AdvEventType.Build |
26 | 26 | end |
27 | 27 | |
28 | +function Block:isChoose() | |
29 | + return self:getEventType() == AdvEventType.Choose | |
30 | +end | |
31 | + | |
28 | 32 | function Block:getEventType() |
29 | 33 | return self.event and self.event.etype |
30 | 34 | end | ... | ... |