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 | ... | ... |