ADDED script/strings.conf Index: script/strings.conf ================================================================== --- /dev/null +++ script/strings.conf @@ -0,0 +1,1186 @@ +#The first line is used for comment +#line doesn't start with '!' is also neglected +#called by DataManager::GetSysString(), DataManager::GetDesc() +#system +!system 1 通常召唤 +!system 2 特殊召唤 +!system 3 反转召唤 +!system 4 通常召唤成功 +!system 5 特殊召唤成功 +!system 6 反转召唤成功 +!system 7 发动 +!system 10 取除指示物 +!system 11 支付基本分 +!system 12 取除本身的素材 +!system 20 抽卡阶段中 +!system 21 准备阶段中 +!system 22 主要阶段中 +!system 23 即将结束主要阶段 +!system 24 战斗阶段中 +!system 25 战斗阶段结束时 +!system 26 结束阶段中 +!system 27 抽卡前 +!system 28 战斗阶段开始 +!system 29 即将结束战斗步骤 +!system 30 战斗回卷,是否继续攻击? +!system 31 是否直接攻击? +!system 40 伤害步骤开始时 +!system 41 伤害计算前 +!system 42 伤害计算时 +!system 43 伤害计算后 +!system 44 伤害步骤结束时 +!system 60 正面 +!system 61 反面 +!system 62 表效果适用中 +!system 63 里效果适用中 +!system 64 二重状态 +!system 65 使用效果 +!system 66 持续公开 +!system 67 原本持有者为对方 +!system 70 怪兽卡 +!system 71 魔法卡 +!system 72 陷阱卡 +!system 80 进入战斗阶段 +!system 81 进入结束阶段 +!system 90 是否不解放怪兽通常召唤? +!system 91 是否使用额外的召唤机会? +!system 92 是否要解放对方怪兽进行上级召唤? +!system 93 是否要继续选择素材? +!system 94 是否现在使用这张卡的效果? +!system 95 是否使用[%ls]的效果? +!system 96 是否使用[%ls]的效果代替破坏? +!system 97 是否把[%ls]在魔法与陷阱区域放置? +!system 98 是否要解放对方怪兽? +!system 100 先攻 +!system 101 后攻 +!system 102 我方 +!system 103 对方 +!system 200 是否在[%ls]发动[%ls]的效果? +!system 201 此时没有可以发动的效果 +!system 202 是否要确认场上的情况? +!system 203 是否要进行连锁? +!system 204 请取除%d个[%ls] +!system 205 请选择排列顺序 +!system 206 请选择连锁顺序 +!system 207 翻开卡组上方%d张卡: +!system 208 确认%d张卡: +!system 209 当前所选的卡已满足选择条件 +!system 210 是否要继续选择? +!system 211 回合计数: +!system 212 已选择卡: +!system 213 已选择种族: +!system 214 已选择属性: +!system 215 已选择数字: +!system 216 在连锁%d发动 +!system 217 被连锁%d的[%ls]选择为对象 +!system 218 是否使用[%ls]的效果代替支付基本分? +!system 219 是否使用[%ls]的效果代替取除超量素材? +!system 220 是否使用[%ls]的效果代替取除指示物? +!system 221 是否在[%ls]发动[%ls]的诱发类效果? +!system 222 是否要发动诱发类效果? +!system 223 稍后将询问其他可以发动的效果。 +!system 224 已用正规方法特殊召唤 +!system 225 叠放于[%ls](%d)下 +!system 500 请选择要解放的卡 +!system 501 请选择要丢弃的手卡 +!system 502 请选择要破坏的卡 +!system 503 请选择要除外的卡 +!system 504 请选择要送去墓地的卡 +!system 505 请选择要返回手卡的卡 +!system 506 请选择要加入手卡的卡 +!system 507 请选择要返回卡组的卡 +!system 508 请选择要召唤的卡 +!system 509 请选择要特殊召唤的卡 +!system 510 请选择要盖放的卡 +!system 511 请选择要作为融合素材的卡 +!system 512 请选择要作为同调素材的卡 +!system 513 请选择要作为超量素材的卡 +!system 514 请选择表侧表示的卡 +!system 515 请选择里侧表示的卡 +!system 516 请选择攻击表示的怪兽 +!system 517 请选择守备表示的怪兽 +!system 518 请选择要装备的卡 +!system 519 请选择要取除的超量素材 +!system 520 请选择要改变控制权的怪兽 +!system 521 请选择要代替破坏的卡 +!system 522 请选择表侧攻击表示的怪兽 +!system 523 请选择表侧守备表示的怪兽 +!system 524 请选择里侧攻击表示的怪兽 +!system 525 请选择里侧守备表示的怪兽 +!system 526 请选择给对方确认的卡 +!system 527 请选择要放置到场上的卡 +!system 528 请选择要改变表示形式的怪兽 +!system 529 请选择自己的卡 +!system 530 请选择对方的卡 +!system 531 请选择上级召唤用需要解放的怪兽 +!system 532 请选择要取除超量素材的怪兽 +!system 533 请选择要作为连接素材的卡 +!system 534 请选择要保留在场上的卡 +!system 549 请选择攻击的对象 +!system 550 请选择要发动的效果 +!system 551 请选择效果的对象 +!system 552 请选择硬币的正反面 +!system 553 请选择骰子的结果 +!system 554 请选择一个种类 +!system 555 请选择一个选项 +!system 556 请选择要发动/处理的效果 +!system 560 请选择 +!system 561 请选择表示形式 +!system 562 请选择要宣言的属性 +!system 563 请选择要宣言的种族 +!system 564 请宣言一个卡名 +!system 565 请选择一个数字 +!system 566 请选择要发动效果的卡 +!system 567 请宣言一个等级 +!system 568 请选择要处理效果的卡 +!system 569 请选择[%ls]的位置 +!system 570 请选择要变成不能使用的卡片区域 +!system 571 请选择要移动到的位置 +!system 572 请选择要放置指示物的卡 +!system 573 请选择要无效的卡 +!system 574 请选择要操作的卡 +!system 1000 卡组 +!system 1001 手卡 +!system 1002 怪兽区 +!system 1003 魔法陷阱区 +!system 1004 墓地 +!system 1005 除外 +!system 1006 额外 +!system 1007 叠放 +!system 1008 场地区 +!system 1009 灵摆区 +!system 1010 地 +!system 1011 水 +!system 1012 炎 +!system 1013 风 +!system 1014 光 +!system 1015 暗 +!system 1016 神 +!system 1020 战士 +!system 1021 魔法师 +!system 1022 天使 +!system 1023 恶魔 +!system 1024 不死 +!system 1025 机械 +!system 1026 水 +!system 1027 炎 +!system 1028 岩石 +!system 1029 鸟兽 +!system 1030 植物 +!system 1031 昆虫 +!system 1032 雷 +!system 1033 龙 +!system 1034 兽 +!system 1035 兽战士 +!system 1036 恐龙 +!system 1037 鱼 +!system 1038 海龙 +!system 1039 爬虫类 +!system 1040 念动力 +!system 1041 幻神兽 +!system 1042 创造神 +!system 1043 幻龙 +!system 1044 电子界 +!system 1045 幻想魔 +!system 1050 怪兽 +!system 1051 魔法 +!system 1052 陷阱 +!system 1053 ??? +!system 1054 通常 +!system 1055 效果 +!system 1056 融合 +!system 1057 仪式 +!system 1058 陷阱怪兽 +!system 1059 灵魂 +!system 1060 同盟 +!system 1061 二重 +!system 1062 调整 +!system 1063 同调 +!system 1064 衍生物 +!system 1065 ??? +!system 1066 速攻 +!system 1067 永续 +!system 1068 装备 +!system 1069 场地 +!system 1070 反击 +!system 1071 反转 +!system 1072 卡通 +!system 1073 超量 +!system 1074 灵摆 +!system 1075 特殊召唤 +!system 1076 连接 +!system 1080 (N/A) +!system 1081 额外怪兽区 +#GUI +!system 1100 魔陷破坏 +!system 1101 怪兽破坏 +!system 1102 卡片除外 +!system 1103 送去墓地 +!system 1104 返回手卡 +!system 1105 返回卡组 +!system 1106 手卡破坏 +!system 1107 卡组破坏 +!system 1108 抽卡辅助 +!system 1109 卡组检索 +!system 1110 卡片回收 +!system 1111 表示形式 +!system 1112 控制权 +!system 1113 攻守变化 +!system 1114 穿刺伤害 +!system 1115 多次攻击 +!system 1116 攻击限制 +!system 1117 直接攻击 +!system 1118 特殊召唤 +!system 1119 衍生物 +!system 1120 种族相关 +!system 1121 属性相关 +!system 1122 LP伤害 +!system 1123 LP回复 +!system 1124 破坏耐性 +!system 1125 效果耐性 +!system 1126 指示物 +!system 1127 幸运 +!system 1128 融合相关 +!system 1129 同调相关 +!system 1130 超量相关 +!system 1131 效果无效 +#actions +!system 1150 发动 +!system 1151 召唤 +!system 1152 特殊召唤 +!system 1153 盖放 +!system 1154 反转召唤 +!system 1155 守备表示 +!system 1156 攻击表示 +!system 1157 攻击 +!system 1158 查看列表 +!system 1159 当魔法卡盖放 +!system 1160 在灵摆区域发动 +!system 1161 效果处理 +!system 1162 效果重置 +!system 1163 灵摆召唤 +!system 1164 同调召唤 +!system 1165 超量召唤 +!system 1166 连接召唤 +!system 1167 上级召唤 +!system 1168 仪式召唤 +!system 1169 融合召唤 +!system 1190 加入手卡 +!system 1191 送去墓地 +!system 1192 除外 +!system 1193 回到卡组 +#menu +!system 1200 联机模式 +!system 1201 单人模式 +!system 1202 观看录像 +!system 1203 N/A +!system 1204 编辑卡组 +!system 1210 退出 +!system 1211 确定 +!system 1212 取消 +!system 1213 是 +!system 1214 否 +!system 1215 开始 +!system 1216 消息 +!system 1217 刷新主机 +!system 1218 准备 +!system 1219 取消准备 +!system 1220 昵称: +!system 1221 主机信息: +!system 1222 主机密码: +!system 1223 加入游戏 +!system 1224 建立主机 +!system 1225 卡片允许: +!system 1226 禁限卡表: +!system 1227 决斗模式: +!system 1228 ↓额外选项(无特殊要求请勿修改) +!system 1229 不检查卡组 +!system 1230 不洗切卡组 +!system 1231 初始基本分: +!system 1232 初始手卡数: +!system 1233 每回合抽卡: +!system 1234 主机名称: +!system 1235 主机密码: +!system 1236 规则: +!system 1237 每回合时间: +!system 1238 不洗切时回卡组改为回顶端 +!system 1244 单局模式 +!system 1245 比赛模式 +!system 1246 TAG +!system 1247 标准对战 +!system 1248 自定义 +!system 1250 决斗准备 +!system 1251 →决斗者 +!system 1252 →观战 +!system 1253 当前观战人数: +!system 1254 卡组选择: +!system 1255 准备完毕! +!system 1260 大师规则 +!system 1261 大师规则2 +!system 1262 大师规则3 +!system 1263 新大师规则 +!system 1264 大师规则2020 +!system 1270 卡片信息 +!system 1271 消息记录 +!system 1272 清除记录 +!system 1273 系统设定 +!system 1274 自动选择怪兽卡片位置 +!system 1275 ↑随机选择位置 +!system 1276 自动发动并排序必发效果 +!system 1277 没有可连锁的卡时延迟回应 +!system 1278 自动选择魔陷卡片位置 +!system 1279 开启音效 +!system 1280 开启音乐 +!system 1281 按场景切换音乐 +!system 1282 窗口大小 +!system 1283 小 +!system 1284 中 +!system 1285 大 +!system 1286 特大 +!system 1287 只有连锁1也显示连锁动画 +!system 1288 禁限卡表 +!system 1289 隐藏玩家昵称 +!system 1290 禁用聊天功能 +!system 1291 忽略观战者发言 +!system 1292 忽略时点 +!system 1293 显示时点 +!system 1294 可用时点 +!system 1295 取消操作 +!system 1296 完成选择 +!system 1297 洗切手卡 +!system 1298 辅助功能 +!system 1299 加快动画效果 +!system 1300 卡组分类: +!system 1301 卡组列表: +!system 1302 保存 +!system 1303 另存 +!system 1304 清空 +!system 1305 排序 +!system 1306 退出编辑 +!system 1307 打乱 +!system 1308 删除 +!system 1309 重置 +!system 1310 (无) +!system 1311 种类: +!system 1312 怪兽 +!system 1313 魔法 +!system 1314 陷阱 +!system 1315 禁限: +!system 1316 禁止 +!system 1317 限制 +!system 1318 准限制 +!system 1319 属性: +!system 1321 种族: +!system 1322 攻击: +!system 1323 守备: +!system 1324 星数: +!system 1325 关键字: +!system 1326 效果 +!system 1327 搜索 +!system 1328 管理 +!system 1329 系列: +!system 1330 主卡组: +!system 1331 额外卡组: +!system 1332 副卡组: +!system 1333 搜索结果: +!system 1334 副卡组更换完成 +!system 1335 保存成功 +!system 1336 刻度: +!system 1337 是否删除这个卡组? +!system 1338 删除成功 +!system 1339 是否清空正在编辑的卡组? +!system 1340 是否保存录像? +!system 1341 保存 +!system 1342 录像文件: +!system 1343 播放 +!system 1344 暂停 +!system 1345 下一步 +!system 1346 切换视角 +!system 1347 退出 +!system 1348 载入录像 +!system 1349 录像信息: +!system 1350 离开 +!system 1351 投降 +!system 1352 主要信息: +!system 1353 播放起始于回合: +!system 1354 开局默认显示所有时点 +!system 1356 此操作将放弃对当前卡组的修改,是否继续? +!system 1357 不提示保留对卡组的修改 +!system 1358 键入关键字后自动进行搜索 +!system 1359 是否确定投降? +!system 1360 上一步 +!system 1361 删除录像 +!system 1362 重命名 +!system 1363 是否删除这个录像? +!system 1364 重命名录像 +!system 1365 重命名失败,可能存在同名文件 +!system 1366 自动保存录像 +!system 1367 录像已自动保存为%ls.yrp +!system 1369 提取卡组 +!system 1370 星数↑ +!system 1371 攻击↑ +!system 1372 守备↑ +!system 1373 名称↓ +!system 1374 连接标记 +!system 1378 使用多个关键词搜索卡片 +!system 1379 启用扩展卡包调试模式 +!system 1380 人机模式 +!system 1381 残局模式 +!system 1382 人机信息: +!system 1384 电脑锁定出剪刀 +!system 1385 列表为空,可能未安装合适的人机 +!system 1390 等待行动中... +!system 1391 等待行动中.... +!system 1392 等待行动中..... +!system 1400 无法连接到主机。 +!system 1401 连接已断开。 +!system 1402 网络传输发生错误。 +!system 1403 无法加入主机。 +!system 1404 密码错误。 +!system 1405 主机拒绝了连接。 +!system 1406 无效卡组。 +!system 1407 「%ls」的数量不符合当前禁限卡表设定。 +!system 1408 更换副卡组失败。 +!system 1409 等待更换副卡组中... +!system 1410 卡组数量与先前不符合。 +!system 1411 版本不匹配(%X.0%X.%X)。 +!system 1412 无法解析主机地址。 +!system 1413 「%ls」为OCG独有卡,不允许在当前设定下使用。 +!system 1414 「%ls」为TCG独有卡,不允许在当前设定下使用。 +!system 1415 卡组中「%ls(%d)」无法被主机识别。 +!system 1416 卡组中「%ls」的总数量超过3张。 +!system 1417 主卡组数量应为40-60张,当前卡组数量为%d张。 +!system 1418 额外卡组数量应不超过15张,当前卡组数量为%d张。 +!system 1419 副卡组数量应不超过15张,当前卡组数量为%d张。 +!system 1420 有额外卡组卡片存在于主卡组,可能是额外卡组数量超过15张。 +!system 1421 操作无效,请重试。 +!system 1422 宣言的卡不符合条件,或无法被主机识别。 +!system 1423 宣言的属性不符合条件。 +!system 1424 宣言的种族不符合条件 +!system 1425 宣言的数字不符合条件。 +!system 1426 选择的选项不符合条件 +!system 1427 选择的卡片不符合条件。 +!system 1428 选择的连锁不符合条件。 +!system 1429 选择的位置不符合条件。 +!system 1430 选择的表示形式不符合条件。 +!system 1431 选择的指示物不符合条件。 +!system 1432 「%ls」不允许在当前设定下使用。 +!system 1440 关闭大图 +!system 1441 放大 +!system 1442 缩小 +!system 1443 原始尺寸 +!system 1450 卡包展示 +!system 1451 人机卡组 +!system 1452 未分类卡组 +!system 1453 -------- +!system 1460 卡组管理 +!system 1461 新建分类 +!system 1462 重命名分类 +!system 1463 删除分类 +!system 1464 新建卡组 +!system 1465 重命名卡组 +!system 1466 删除卡组 +!system 1467 移动到分类 +!system 1468 复制到分类 +!system 1469 请输入分类名: +!system 1470 确实要删除此分类和分类下全部卡组吗? +!system 1471 请输入卡组名: +!system 1472 请选择要移动到的分类: +!system 1473 请选择要复制到的分类: +!system 1474 已存在同名分类 +!system 1475 已存在同名卡组 +!system 1476 删除失败 +!system 1477 卡片数: +!system 1481 OCG +!system 1482 TCG +!system 1483 简体中文 +!system 1484 自定义卡片 +!system 1485 无独有卡 +!system 1486 所有卡片 +!system 1500 决斗结束。 +!system 1501 录像结束。 +!system 1502 连接已断开。 +!system 1510 玩家选择了:[%ls] +!system 1511 玩家宣言了:[%ls] +!system 1512 玩家选择了:[%d] +!system 1600 卡片改变了表示形式 +!system 1601 盖放了卡片 +!system 1602 卡的控制权改变了 +!system 1603 [%ls]召唤中 +!system 1604 怪兽召唤成功 +!system 1605 [%ls]特殊召唤中 +!system 1606 怪兽特殊召唤成功 +!system 1607 [%ls]反转召唤中 +!system 1608 怪兽反转召唤成功 +!system 1609 [%ls]的效果发动 +!system 1610 [%ls](%ls,%d)成为对象或目标 +!system 1611 我方抽了%d张卡 +!system 1612 对方抽了%d张卡 +!system 1613 我方受到%d伤害 +!system 1614 对方受到%d伤害 +!system 1615 我方回复%d基本分 +!system 1616 对方回复%d基本分 +!system 1617 [%ls]放置了%d个[%ls] +!system 1618 [%ls]取除了%d个[%ls] +!system 1619 [%ls]攻击[%ls] +!system 1620 [%ls]直接攻击 +!system 1621 攻击被无效 +!system 1622 [%ls]错过时点 +!system 1623 投掷硬币结果: +!system 1624 投掷骰子结果: +#tips +!system 1700 可以用鼠标右键%ls +#victory reason +!victory 0x0 投降 +!victory 0x1 基本分变成0 +!victory 0x2 没有卡可抽 +!victory 0x3 超时 +!victory 0x4 失去连接 +!victory 0x10 「被封印的艾克佐迪亚」特殊胜利 +!victory 0x11 「终焉的倒计时」特殊胜利 +!victory 0x12 「毒蛇神 维诺米纳迦」特殊胜利 +!victory 0x13 「光之创造神 哈拉克提」特殊胜利 +!victory 0x14 「究极封印神 艾克佐迪奥斯」特殊胜利 +!victory 0x15 「通灵盘」特殊胜利 +!victory 0x16 「最终一战!」特殊胜利 +!victory 0x17 「No.88 机关傀儡-命运狮子」特殊胜利 +!victory 0x18 「混沌No.88 机关傀儡-灾厄狮子」特殊胜利 +!victory 0x19 「头奖壶7」特殊胜利 +!victory 0x1a 「魂之接力」特殊胜利 +!victory 0x1b 「鬼计惰天使」特殊胜利 +!victory 0x1c 「幻煌龙的天涡」特殊胜利 +!victory 0x1d 「方程式运动员胜利团队」特殊胜利 +!victory 0x1e 「飞行象」特殊胜利 +!victory 0x1f 「守护神 艾克佐迪亚」特殊胜利 +!victory 0x20 「真艾克佐迪亚」特殊胜利 +!victory 0x21 「混沌虚数No.1000 梦幻虚光神 原数天灵·原数天地」特殊胜利 +!victory 0x22 「席取-六双丸」特殊胜利 +!victory 0xffff 由于「%ls」获得比赛胜利 +#counters +!counter 0x1 魔力指示物 +!counter 0x1002 楔指示物 +!counter 0x3 武士道指示物 +!counter 0x4 念力指示物 +!counter 0x5 光指示物 +!counter 0x6 宝玉指示物 +!counter 0x7 指示物(剑斗兽之槛) +!counter 0x8 变形斗士指示物 +!counter 0x1009 毒指示物 +!counter 0xa 次世代指示物 +!counter 0xb 指示物(古代的机械城) +!counter 0xc 雷指示物 +!counter 0xd 强欲指示物 +!counter 0x100e A指示物 +!counter 0xf 虫指示物 +!counter 0x10 黑羽指示物 +!counter 0x11 超毒指示物 +!counter 0x12 机巧指示物 +!counter 0x13 混沌指示物 +!counter 0x14 指示物(奇迹之侏罗纪蛋) +!counter 0x1015 冰指示物 +!counter 0x16 魔石指示物 +!counter 0x17 橡子指示物 +!counter 0x18 花指示物 +!counter 0x1019 雾指示物 +!counter 0x1a 倍倍指示物 +!counter 0x1b 时计指示物 +!counter 0x1c D指示物 +!counter 0x1d 废品指示物 +!counter 0x1e 门指示物 +!counter 0x1f 指示物(巨大战舰) +!counter 0x20 植物指示物 +!counter 0x1021 守卫指示物 +!counter 0x22 龙神指示物 +!counter 0x23 海洋指示物 +!counter 0x1024 线指示物 +!counter 0x25 年代记指示物 +!counter 0x26 指示物(金属射手) +!counter 0x27 指示物(死亡蚊) +!counter 0x28 指示物(暗黑弹射手) +!counter 0x29 指示物(气球蜥蜴) +!counter 0x102a 指示物(魔法防护器) +!counter 0x2b 命运指示物 +!counter 0x2c 遵命指示物 +!counter 0x2d 指示物(踢火) +!counter 0x2e 鲨指示物 +!counter 0x2f 南瓜指示物 +!counter 0x30 毅飞冲天指示物 +!counter 0x31 希望剑指示物 +!counter 0x32 气球指示物 +!counter 0x33 妖仙指示物 +!counter 0x34 指示物(纸箱拳击手) +!counter 0x35 音响指示物 +!counter 0x36 娱乐法师指示物 +!counter 0x37 坏兽指示物 +!counter 0x1038 方界指示物 +!counter 0x1039 咕咚指示物 +!counter 0x40 指示物(No.51 怪腕之必杀摔角手) +!counter 0x1041 捕食指示物 +!counter 0x42 指示物(爆竹鬼) +!counter 0x43 缺陷指示物 +!counter 0x44 指示物(弹带城壁龙) +!counter 0x1045 鳞粉指示物 +!counter 0x46 指示物(刚鬼死斗) +!counter 0x47 指示物(限制代码) +!counter 0x48 指示物(连接死亡炮塔) +!counter 0x1049 警逻指示物 +!counter 0x4a 运动员指示物 +!counter 0x4b 枪管指示物 +!counter 0x4c 召唤指示物 +!counter 0x104d 信号指示物 +!counter 0x4e 指示物(魂之灵摆) +!counter 0x104f 蛊指示物 +!counter 0x50 指示物(娱乐伙伴 掉头跑骑兵) +!counter 0x51 指示物(蜂军巢) +!counter 0x52 指示物(防火龙·暗流体) +!counter 0x53 指示物(炽天蝶) +!counter 0x54 指示物(星遗物引导的前路) +!counter 0x55 指示物(隐居者的大釜) +!counter 0x56 炎星指示物 +!counter 0x57 幻魔指示物 +!counter 0x58 指示物(祢须三破鸣比) +!counter 0x59 落魂指示物 +!counter 0x5a 指示物(战吼试炼) +!counter 0x5b 指示物(北极天熊北斗星) +!counter 0x105c 燃烧指示物 +!counter 0x5d 指示物(机巧传-神使记纪图) +!counter 0x5e 皇之键指示物 +!counter 0x5f 拼图指示物 +!counter 0x60 指示物(北极天熊辐射) +!counter 0x61 指示物(命运的囚人) +!counter 0x62 指示物(逐渐削减的生命) +!counter 0x1063 幻觉指示物 +!counter 0x64 G石人指示物 +!counter 0x1065 兔耳指示物 +!counter 0x66 指示物(推荐捏军贯) +#setnames, using tab for comment +!setname 0x1 正义盟军 A・O・J +!setname 0x2 次世代 ジェネクス +!setname 0x1002 真次世代 レアル·ジェネクス +#!setname 0x2002 盟军·次世代 A・ジェネクス +#setname 0x3 N/A +!setname 0x4 亚马逊 アマゾネス +!setname 0x5 秘仪之力 アルカナフォース +!setname 0x6 暗黑界 暗黒界 +!setname 0x7 古代的机械 アンティーク・ギア +!setname 0x8 英雄 HERO +!setname 0x3008 元素英雄 E・HERO +!setname 0x5008 幻影英雄 V・HERO +!setname 0x6008 邪心英雄 E-HERO +!setname 0xa008 假面英雄 M・HERO +!setname 0xc008 命运英雄 D-HERO +!setname 0x9 新宇 ネオス +!setname 0xa 入魔 ヴェルズ +!setname 0x100a 侵入魔鬼 インヴェルズ +!setname 0xb 永火 インフェルニティ +!setname 0xc 外星 エーリアン +!setname 0xd 剑士 セイバー +!setname 0x100d X-剑士 X-セイバー +#setname 0x300d XX-剑士 XX-セイバー +!setname 0x400d 元素灵剑士 エレメントセイバー +!setname 0xe 电气 エレキ +!setname 0xf 扰乱 おジャマ +!setname 0x10 薰风 ガスタ +!setname 0x11 机巧 カラクリ +!setname 0x12 青蛙 ガエル +!setname 0x13 机皇 機皇 +!setname 0x3013 机皇帝 機皇帝 +!setname 0x5013 机皇神 機皇神 +!setname 0x6013 机皇兵 機皇兵 +#setname 0x14 N/A +!setname 0x15 巨大战舰 巨大戦艦 +!setname 0x16 机人 ロイド +!setname 0x1016 交通机人 ビークロイド +!setname 0x2016 疾行机人 スピードロイド +!setname 0x17 同调 シンクロ +!setname 0x1017 同调士 シンクロン +!setname 0x2017 同调龙 シンクロ・ドラゴン +!setname 0x18 云魔物 雲魔物 +!setname 0x19 剑斗兽 剣闘獣 +!setname 0x1a 黑蝎 黒蠍 +!setname 0x1b 幻兽 幻獣 +!setname 0x101b 幻兽机 幻獣機 +!setname 0x1c 死之信息 死のメッセージ +!setname 0x1d 核成 コアキメイル +!setname 0x1e 茧状体 C(コクーン) +!setname 0x1f 新空间侠 N(ネオスペーシアン) +!setname 0x20 紫炎 紫炎 +!setname 0x21 地缚 地縛 +!setname 0x1021 地缚神 地縛神 +!setname 0x22 朱罗纪 ジュラック +!setname 0x23 罪 Sin +!setname 0x24 废铁 スクラップ +!setname 0x25 链 C(チェーン) +!setname 0x26 变形斗士 D(ディフォーマー) +!setname 0x27 科技属 TG(テックジーナス) +!setname 0x28 电池人 電池メン +!setname 0x29 龙骑兵团 ドラグニティ +!setname 0x2a 自然 ナチュル +!setname 0x2b 忍者 +!setname 0x2c 炎狱 フレムベル +#setname 0x2d N/A +!setname 0x2e 守墓 墓守 +!setname 0x2f 冰结界 氷結界 +!setname 0x30 大日 ヴァイロン +!setname 0x31 命运女郎 フォーチュンレディ +!setname 0x32 火山 ヴォルカニック +!setname 0x33 黑羽 BF(ブラックフェザー) +!setname 0x1033 强袭黑羽 A BF(アサルト ブラックフェザー) +!setname 0x34 宝玉 宝玉 +!setname 0x1034 宝玉兽 宝玉獣 +!setname 0x2034 究极宝玉神 究極宝玉神 +!setname 0x5034 高等宝玉兽 A宝玉獣 +!setname 0x35 魔轰神 魔轟神 +!setname 0x36 机甲 マシンナーズ +!setname 0x37 霞之谷 霞の谷 +!setname 0x38 光道 ライトロード +!setname 0x39 熔岩 ラヴァル +!setname 0x3a 遗式 リチュア +!setname 0x3b 真红眼 レッドアイズ +!setname 0x3c 爬虫妖 レプティレス +!setname 0x3d 六武众 六武衆 +!setname 0x103d 影六武众 影六武衆 +!setname 0x3e 异虫 ワーム +!setname 0x3f 救世 セイヴァー +!setname 0x40 被封印 封印されし +!setname 0x41 LV LV(レベル) +!setname 0x42 极星 極星 +!setname 0x3042 极星天 極星天 +!setname 0x5042 极星宝 極星宝 +!setname 0x6042 极星兽 極星獣 +!setname 0xa042 极星灵 極星霊 +!setname 0x43 废品 ジャンク +!setname 0x44 代行者 +!setname 0x45 恶魔 デーモン +!setname 0x1045 红莲魔|恶魔 レッド・デーモン +!setname 0x46 融合 融合/フュージョン +!setname 0x1046 融合龙 フュージョン・ドラゴン +!setname 0x47 宝石 ジェム +!setname 0x1047 宝石骑士 ジェムナイト +!setname 0x48 No. No. +!setname 0x1048 混沌No. CNo. +!setname 0x49 铳士 銃士 +!setname 0x4a 时械神 時械神 +!setname 0x4b 极神 極神 +!setname 0x4c 落穴 落とし穴 +#setname 0x4d N/A +#setname 0x4e 进化 エヴォル +!setname 0x304e 进化虫 エヴォルド +!setname 0x504e 进化帝 エヴォルカイザー +!setname 0x604e 进化龙 エヴォルダー +#setname 0x4f 爆裂 バスター +!setname 0x104f /爆裂体 /バスター +!setname 0x50 蛇毒 ヴェノム +!setname 0x1050 凶饿毒|蛇毒 スターヴ・ヴェノム +!setname 0x51 零件 ガジェット +!setname 0x52 守护者 ガーディアン +!setname 0x1052 门之守护神|守护者 Gate Guardian +!setname 0x53 星圣 セイクリッド +!setname 0x54 我我我 ガガガ +!setname 0x55 光子 フォトン +!setname 0x56 甲虫装机 甲虫装機 +!setname 0x57 共鸣者 リゾネーター +!setname 0x58 发条 ゼンマイ +!setname 0x59 隆隆隆 ゴゴゴ +!setname 0x5a 企鹅 ペンギン +!setname 0x5b 番茄小子 トマボー +!setname 0x5c 斯芬克斯 スフィンクス +#setname 0x5d N/A +#setname 0x5e N/A +#setname 0x5f N/A +!setname 0x60 竹光 +!setname 0x61 忍法 +!setname 0x62 卡通 トゥーン +!setname 0x63 反应机 リアクター +!setname 0x64 鹰身 ハーピィ +!setname 0x65 侵略的 侵略の +!setname 0x66 战士 ウォリアー +!setname 0x1066 音响战士 音響戦士 +!setname 0x2066 磁石战士 マグネット・ウォリアー +#setname 0x67 钢铁 アイアン +#setname 0x68 铁皮 ブリキ +!setname 0x69 圣刻 聖刻 +!setname 0x6a 幻蝶刺客 幻蝶の刺客 +!setname 0x6b 保镖 バウンサー +#setname 0x6c 光芒使者 ライトレイ +!setname 0x6d 魔人 魔人(まじん) +!setname 0x6e 魔导 魔導 +!setname 0x106e 魔导书 魔導書 +!setname 0x6f 英豪 ヒロイック +!setname 0x106f 英豪挑战者 H・C +#setname 0x206f 英豪冠军 H-C +!setname 0x70 先史遗产 先史遺産 +!setname 0x71 魔偶甜点 マドルチェ +!setname 0x72 齿轮齿轮 ギアギア +!setname 0x1072 齿轮齿轮人 ギアギアーノ +!setname 0x73 超量 エクシーズ +!setname 0x1073 混沌超量 CX(カオスエクシーズ) +!setname 0x2073 超量龙 エクシーズ・ドラゴン +!setname 0x74 水精鳞 水精鱗 +!setname 0x75 深渊 アビス +!setname 0x76 纹章兽 紋章獣 +!setname 0x77 海皇 +!setname 0x78 迅捷 素早い +!setname 0x79 炎星 +#setname 0x7a 圣 聖 +!setname 0x107a 圣骑士 聖騎士(せいきし) +!setname 0x207a 圣剑 聖剣(せいけん) +!setname 0x507a 焰圣骑士 焔聖騎士 +!setname 0x607a 焰圣剑 焔聖剣 +!setname 0x7b 银河 ギャラクシー +!setname 0x107b 银河眼 ギャラクシーアイズ +!setname 0x307b 银河眼时空龙 ギャラクシーアイズ・タキオン・ドラゴン +!setname 0x7c 炎舞 +!setname 0x7d 阳炎 ヘイズ +!setname 0x107d 阳炎兽 陽炎獣 +!setname 0x7e 异热同心 ゼアル +!setname 0x107e 异热同心武器 ZW(ゼアル・ウェポン) +!setname 0x207e 异热同心从者 ZS(ゼアル・サーバス) +!setname 0x7f 霍普 ホープ +!setname 0x107f 希望皇 霍普 希望皇ホープ +!setname 0x207f 未来皇 霍普 未来皇ホープ +!setname 0x80 尘妖 ダストン +!setname 0x81 炎王 +!setname 0x1081 炎王兽 炎王獣 +!setname 0x82 怒怒怒 ドドド +!setname 0x83 人偶 パペット +!setname 0x1083 机关傀儡 ギミック・パペット +#setname 0x84 燃烧拳 バーニングナック +!setname 0x1084 燃烧拳击手 BK(バーニングナックラー) +!setname 0x2084 燃烧拳 バーニングナックル +!setname 0x85 超级防卫机器人 SDロボ +!setname 0x86 光天使 +!setname 0x87 阴影 アンブラル +!setname 0x88 武神 +!setname 0x89 洞 ホール +#setname 0x8a 虫惑 蟲惑 +!setname 0x108a 虫惑魔 蟲惑魔 +!setname 0x8b 食恶 マリスボラス +#setname 0x8c 德鲁伊 ドルイド +!setname 0x8d 鬼计 ゴーストリック +!setname 0x8e 吸血鬼 ヴァンパイア +!setname 0x8f 刷拉拉 ズババ +!setname 0x90 森罗 森羅 +!setname 0x91 王家长眠之谷 ネクロバレー +!setname 0x92 纹章 メダリオン +!setname 0x93 电子 サイバー +!setname 0x1093 电子龙 サイバー・ドラゴン +!setname 0x2093 电子化天使 サイバー・エンジェル +!setname 0x4093 电子暗黑 サイバー・ダーク/サイバーダーク +!setname 0x94 电子科技 サイバネティック +!setname 0x95 升阶魔法 RUM +!setname 0x96 电子鱼人|非「电子」 フィッシュボーグ +!setname 0x97 古遗物 アーティファクト +!setname 0x98 魔术师 魔術師 +!setname 0x99 异色眼 オッドアイズ +!setname 0x9a 超重武者 +!setname 0x109a 超重武者装留 +!setname 0x9b 幻奏 +!setname 0x109b 幻奏的音姬 幻奏の音姫 +!setname 0x9c 星骑士 テラナイト +!setname 0x109c 星辉士|星骑士 ステラナイト +!setname 0x9d 影依 シャドール +!setname 0x9e 龙星 竜星 +!setname 0x9f 娱乐伙伴 EM(エンタメイト) +!setname 0xa0 传说的骑士 伝説の騎士 +!setname 0xa1 传说之龙 伝説の竜 +#setname 0xa2 魔术 マジシャン +!setname 0x10a2 黑魔术 ブラック・マジシャン +!setname 0x20a2 魔术少女 マジシャン・ガール +!setname 0x30a2 黑魔术少女 ブラック・マジシャン・ガール +!setname 0xa3 星尘 スターダスト +!setname 0xa4 栗子球 クリボー +!setname 0x10a4 羽翼栗子球 ハネクリボー +!setname 0xa5 变化 チェンジ +!setname 0xa6 幼芽 スプラウト +!setname 0xa7 阿托利斯 アルトリウス +!setname 0xa8 兰斯洛特 ランスロット +!setname 0xa9 毛绒动物 ファーニマル +!setname 0xaa 机壳 クリフォート +!setname 0x10aa 隐藏的机壳 アポクリフォート +!setname 0xab 文具电子人|非「电子」 ブンボーグ +!setname 0xac 哥布林 ゴブリン +!setname 0xad 魔玩具 デストーイ +!setname 0xae 契约书 契約書 +!setname 0xaf DD +!setname 0x10af DDD +!setname 0xb0 加特姆士 ガトムズ +!setname 0xb1 彼岸 +!setname 0xb2 超级运动员 U.A. +!setname 0xb3 妖仙兽 妖仙獣 +!setname 0xb4 影灵衣 影霊衣 +!setname 0xb5 灵兽 霊獣 +!setname 0x10b5 灵兽使 霊獣使い +!setname 0x20b5 精灵兽 精霊獣 +#!setname 0x30b5 精灵兽使 精霊獣使い +!setname 0x40b5 圣灵兽骑 聖霊獣騎 +!setname 0xb6 外神 +!setname 0xb7 旧神 +!setname 0xb8 古神 +!setname 0xb9 烈焰加农炮 ブレイズ・キャノン +!setname 0xba 急袭猛禽 RR(レイド・ラプターズ) +!setname 0xbb 狱火机 インフェルノイド +!setname 0xbc 人造人 人造人間 +!setname 0xbd 暗黑骑士 盖亚 暗黒騎士ガイア +!setname 0xbe 帝王 帝王 +!setname 0xbf 灵使 霊使い +!setname 0xc0 凭依 憑依 +!setname 0x10c0 凭依装着 憑依装着 +!setname 0xc1 PSY骨架 PSYフレーム +!setname 0x10c1 PSY骨架装备 PSYフレームギア +!setname 0xc2 动力工具 パワー・ツール +!setname 0xc3 锋利小鬼 エッジインプ +!setname 0xc4 神数 セフィラ +!setname 0xc5 炼狱 煉獄 +!setname 0xc6 娱乐法师 Em(エンタメイジ) +!setname 0xc7 龙剑士 竜剣士 +!setname 0xc8 点火骑士 イグナイト +!setname 0xc9 芳香 アロマ +!setname 0xca 魔装战士 魔装戦士 +!setname 0xcb 以太神兵龙 イーサルウェポン +!setname 0xcc 占术姬 占術姫 +!setname 0xcd 水伶女 アクアアクトレス +!setname 0xce 水族馆 アクアリウム +!setname 0xcf 混沌 カオス +!setname 0x10cf 混沌战士 カオス・ソルジャー +!setname 0xd0 威风妖怪 マジェスペクター +!setname 0xd1 灰篮 グレイドル +!setname 0xd2 星际仙踪 Kozmo +!setname 0xd3 坏兽 壊獣 +!setname 0xd4 伯吉斯异兽 バージェストマ +!setname 0xd5 但丁 ダンテ +!setname 0xd6 破坏剑 破壊剣 +!setname 0xd7 破坏之剑士 バスター・ブレイダー +!setname 0xd8 雾动机龙 ダイナミスト +!setname 0xd9 不知火 +!setname 0x10d9 妖刀-不知火 妖刀-不知火 +!setname 0xda 龙魔王 竜魔王 +!setname 0xdb 幻影 ファントム +!setname 0x10db 幻影骑士团 幻影騎士団 +!setname 0xdc 超级量子 超量 +!setname 0x10dc 超级量子战士 超量士 +!setname 0x20dc 超级量子机兽 超量機獣 +!setname 0xdd 青眼 ブルーアイズ +!setname 0xde 艾克佐迪亚 エクゾディア +!setname 0xdf 月光 ムーンライト +!setname 0xe0 无形噬体 アモルファージ +!setname 0xe1 炼装 メタルフォーゼ +!setname 0xe2 三形金字塔 トラミッド +!setname 0xe3 方界 +!setname 0xe4 精灵剑士 エルフの剣士 +!setname 0xe5 光波 サイファー +!setname 0x10e5 光波龙 サイファー・ドラゴン +!setname 0xe6 花札卫 花札衛 +!setname 0xe7 沉默剑士 サイレント・ソードマン +!setname 0xe8 沉默魔术师 サイレント・マジシャン +!setname 0xe9 磁石战士 磁石の戦士(じしゃくのせんし) +!setname 0xea 水晶机巧|非「机巧」 クリストロン +!setname 0xeb 化合兽 化合獣 +#!setname 0xec 魔界 魔界 +!setname 0x10ec 魔界剧团 魔界劇団 +!setname 0x20ec 魔界台本 魔界台本 +!setname 0xed 地中族 サブテラー +!setname 0x10ed 地中族邪界 サブテラーマリス +!setname 0xee 秘旋谍 SPYRAL +!setname 0x10ee 秘旋谍装备 SPYRAL GEAR +!setname 0x20ee 秘旋谍任务 SPYRAL MISSION +!setname 0xef 堕天使 +!setname 0xf0 风魔女 WW(ウィンド・ウィッチ) +!setname 0xf1 十二兽 十二獣 +!setname 0xf2 灵摆 ペンデュラム +!setname 0x10f2 灵摆龙 ペンデュラム・ドラゴン +!setname 0x20f2 灵摆读阵 ペンデュラムグラフ +!setname 0xf3 捕食 プレデター +!setname 0x10f3 捕食植物 +!setname 0xf4 召唤兽 召喚獣 +!setname 0xf5 甘多拉 ガンドラ +!setname 0xf6 摩天楼 +!setname 0xf7 抒情歌鸲 LL(リリカル・ルスキニア) +#!setname 0xf8 霸王 覇王 +!setname 0x10f8 霸王门 覇王門 +!setname 0x20f8 霸王眷龙 覇王眷竜 +!setname 0xf9 真龙 真竜 +!setname 0xfa 幻煌龙 幻煌龍 +!setname 0xfb 淘气仙星 トリックスター +!setname 0xfc 刚鬼 剛鬼 +!setname 0xfd 星杯 +!setname 0xfe 星遗物 星遺物 +!setname 0xff 幻透翼 クリアウィング +!setname 0x100 化学结合 ボンディング +!setname 0x101 码语者 コード・トーカー +!setname 0x102 弹丸 ヴァレット +!setname 0x103 幻变骚灵 オルターガイスト +!setname 0x104 机怪虫 クローラー +!setname 0x105 玄化 メタファイズ +!setname 0x106 复仇死者 ヴェンデット +!setname 0x107 方程式运动员 F.A. +!setname 0x108 魔弹 魔弾 +!setname 0x109 天气 天気 +!setname 0x10a 珀耳修斯 パーシアス +!setname 0x10b 廷达魔三角 ティンダングル +!setname 0x10c 机界骑士 ジャックナイツ +!setname 0x10d 魔导兽|非「魔导」 魔導獣 +!setname 0x10e 进化药 進化薬 +!setname 0x10f 枪管 ヴァレル +!setname 0x110 纳祭 サクリファイス +!setname 0x1110 眼纳祭神 アイズ・サクリファイス +!setname 0x111 武装龙 アームド・ドラゴン +!setname 0x112 幻崩 トロイメア +!setname 0x113 灵神 霊神 +!setname 0x114 空牙团 空牙団 +!setname 0x115 闪刀 閃刀 +!setname 0x1115 闪刀姬 閃刀姫 +!setname 0x116 圣像骑士 パラディオン +!setname 0x117 魔神仪 魔神儀 +!setname 0x118 电脑网 サイバネット +!setname 0x119 转生炎兽 サラマングレイト +!setname 0x11a 恐龙摔跤手 ダイナレスラー +!setname 0x11b 自奏圣乐 オルフェゴール +!setname 0x11c 雷龙 サンダー·ドラゴン +!setname 0x11d 禁忌的 禁じられた +!setname 0x11e 未界域 +!setname 0x11f 奈芙提斯 ネフティス +!setname 0x120 调皮宝贝 プランキッズ +!setname 0x121 魔妖 +!setname 0x122 女武神|非「武神」 ワルキューレ +!setname 0x123 蔷薇 ローズ +!setname 0x1123 蔷薇龙 ローズ・ドラゴン +!setname 0x124 机械天使 機械天使 +!setname 0x125 笑容 スマイル +!setname 0x126 时间潜行者 クロノダイバー +!setname 0x127 无限起动 無限起動 +!setname 0x128 魔女术 ウィッチクラフト +!setname 0x129 咒眼 呪眼 +!setname 0x12a 恩底弥翁 エンディミオン +!setname 0x12b 海晶少女 マリンセス +!setname 0x12c 天威 +!setname 0x12d 斯摩夫 シムルグ +!setname 0x12e 占卜魔女 占い魔女 +!setname 0x12f 蜂军 B・F(ビー・フォース) +!setname 0x130 破械 +!setname 0x1130 破械神 +!setname 0x131 梦魔镜 夢魔鏡 +!setname 0x132 斩机 斬機 +!setname 0x133 半龙女仆 ドラゴンメイド +!setname 0x134 王战 ジェネレイド +!setname 0x135 @火灵天星 @イグニスター +!setname 0x136 “艾” Ai(アイ) +!setname 0x137 战华 戦華 +!setname 0x138 巨石遗物 メガリス +!setname 0x139 守护神官 守護神官 +!setname 0x13a 拟声 オノマト +!setname 0x13b 叛逆 リベリオン +!setname 0x13c 代码破坏者 コードブレイカー +!setname 0x13d 星义 ネメシス +!setname 0x13e 巴巴罗斯 バルバロス +!setname 0x13f 海造贼 海造賊 +!setname 0x140 魔救 アダマシア +!setname 0x141 六花 +#setname 0x142 黄金国 エルド +!setname 0x1142 黄金国巫妖 エルドリッチ +!setname 0x2142 黄金国永生药 エルドリクシル +!setname 0x143 黄金乡 黄金郷 +!setname 0x144 幻魔 +!setname 0x145 教导 ドラグマ +!setname 0x146 童话动物 メルフィー +!setname 0x147 波波 ポータン +!setname 0x148 罗兰 ローラン +!setname 0x149 化石 +!setname 0x14a 源数 ヌメロン +!setname 0x114a 源数之门 ゲート・オブ・ヌメロン +!setname 0x14b 机块 機塊 +#setname 0x14c 灵术 霊術 +!setname 0x314c 地灵术 地霊術 +!setname 0x514c 水灵术 水霊術 +!setname 0x614c 火灵术 火霊術 +!setname 0x914c 风灵术 風霊術 +#setname 0xa14c 光灵术 光霊術 +#setname 0xc14c 暗灵术 闇霊術 +!setname 0x14d 铁兽 トライブリゲード +!setname 0x14e 电脑堺 電脳堺 +!setname 0x114e 电脑堺门 電脳堺門 +!setname 0x14f 双天 +!setname 0x150 大贤者 マギストス +#setname 0x151 双子 Twin +!setname 0x1151 直播☆双子 Live☆Twin +!setname 0x2151 邪恶★双子 Evil★Twin +!setname 0x152 姬丝基勒 キスキル +!setname 0x153 璃拉 リィラ +!setname 0x154 龙辉巧 ドライトロン +!setname 0x155 护宝炮妖 スプリガンズ +!setname 0x156 治安战警队 S-Force +!setname 0x157 秘异三变 ミュートリア +#setname 0x158 圣 サン +!setname 0x1158 圣蔓 サンヴァイン +!setname 0x2158 圣天树 サンアバロン +!setname 0x4158 圣种 サンシード +!setname 0x159 圣夜骑士 ホーリーナイツ +!setname 0x15a 人偶怪兽 ドール・モンスター +!setname 0x15b 惊乐 アメイズメント +!setname 0x15c 游乐设施 アトラクション +!setname 0x15d 烙印 +!setname 0x15e 降阶魔法 RDM +!setname 0x15f 战吼 ウォークライ +!setname 0x160 原质炉 マテリアクトル +!setname 0x161 溟界 +!setname 0x162 七音服 ドレミコード +!setname 0x1162 大钢琴之七音服 グランドレミコード +!setname 0x163 北极天熊 ベアルクティ +!setname 0x164 死狱乡 デスピア +!setname 0x165 魔键 魔鍵 +!setname 0x166 军贯 軍貫 +!setname 0x1167 森之圣兽 森の聖獣 +!setname 0x2167 森之圣灵 森の聖霊 +!setname 0x168 隐形水母怪 ステルス・クラーゲン +!setname 0x169 原数天灵 ヌメロニアス +!setname 0x16a 编号系 ナンバーズ +!setname 0x16b 相剑 相剣 +!setname 0x16c 冰水 氷水 +!setname 0x16d 随风旅鸟 ふわんだりぃず +!setname 0x16e 拓扑 トポロジック +!setname 0x16f 许珀里翁 ヒュペリオン +!setname 0x170 骑甲虫 ビートルーパー +!setname 0x171 朋克 P.U.N.K. +!setname 0x172 救祓少女 エクソシスター +!setname 0x173 恐啡肽狂龙 ダイノルフィア +!setname 0x174 恶魔娘 悪魔嬢 +!setname 0x175 七皇 セブンス +!setname 0x176 异晶人的 バリアンズ +!setname 0x177 海龙神 リバイアサン +!setname 0x178 潜海 シー・ステルス +!setname 0x179 兽带斗神 セリオンズ +!setname 0x17a 恐吓爪牙族 スケアクロー +!setname 0x17b 野蛮人 バーバリアン +!setname 0x17c 书灵师 リブロマンサー +!setname 0x17d 群豪 ヴァリアンツ +!setname 0x17e 拉比林斯迷宫 ラビュリンス +!setname 0x117e 拉比林斯迷宫欢迎 ウェルカム・ラビュリンス +!setname 0x17f 神碑 +!setname 0x180 卫星闪灵 スプライト +!setname 0x181 珠泪哀歌族 ティアラメンツ +!setname 0x182 春化精 +!setname 0x183 悠悠 もけもけ +!setname 0x184 翼侠 ウィングマン +#setname 0x185 涂鸦 らくがき +!setname 0x1185 涂鸦兽 らくがきじゅう +!setname 0x2185 涂鸦本 らくがきちょう +!setname 0x186 G石人 Gゴーレム +!setname 0x187 桥梁 架け橋 +!setname 0x188 深渊之兽 ビーステッド +!setname 0x189 俱舍怒威族 クシャトリラ +!setname 0x18a 魊影 Ghoti +!setname 0x18b 救援ACE队 R-ACE +!setname 0x18c 纯爱妖精 ピュアリィ +!setname 0x18d 御巫 +!setname 0x18e 仪水镜 儀水鏡 +!setname 0x18f 防火 ファイアウォール +!setname 0x190 末那愚子族 マナドゥム +!setname 0x191 妮穆蕾莉娅 ネムレリア +!setname 0x192 黄金荣耀 Gold Pride +!setname 0x193 迷宫壁 Labyrinth Wall +!setname 0x194 至爱 フェイバリット +!setname 0x195 征服斗魂 VS(ヴァンキッシュ・ソウル) +!setname 0x196 新式魔厨 ヌーベルズ +!setname 0x197 食谱 レシピ +!setname 0x198 维萨斯 ヴィサス +!setname 0x199 反击 カウンター ADDED script/utility.txt Index: script/utility.txt ================================================================== --- /dev/null +++ script/utility.txt @@ -0,0 +1,3138 @@ +Auxiliary={} +aux=Auxiliary +POS_FACEUP_DEFENCE=POS_FACEUP_DEFENSE +POS_FACEDOWN_DEFENCE=POS_FACEDOWN_DEFENSE +RACE_CYBERS=RACE_CYBERSE + +function GetID() + local offset=self_code<100000000 and 1 or 100 + return self_table,self_code,offset +end + +--the lua version of the bit32 lib, which is deprecated in lua 5.3 +bit={} +function bit.band(a,b) + return a&b +end +function bit.bor(a,b) + return a|b +end +function bit.bxor(a,b) + return a~b +end +function bit.lshift(a,b) + return a<>b +end +function bit.bnot(a) + return ~a +end +local function fieldargs(f,width) + w=width or 1 + assert(f>=0,"field cannot be negative") + assert(w>0,"width must be positive") + assert(f+w<=32,"trying to access non-existent bits") + return f,~(-1<>f)&m +end +function bit.replace(r,v,field,width) + local f,m=fieldargs(field,width) + return (r&~(m<minc then minc=min end + if maxmaxc then return false end + end + if smat and smat:IsTuner(c) and (not f1 or f1(smat)) then + return Duel.CheckTunerMaterial(c,smat,f1,f2,minc,maxc,mg) end + return Duel.CheckSynchroMaterial(c,f1,f2,minc,maxc,smat,mg) + end +end +function Auxiliary.SynTarget(f1,f2,minc,maxc) + return function(e,tp,eg,ep,ev,re,r,rp,chk,c,smat,mg,min,max) + local minc=minc + local maxc=maxc + if min then + if min>minc then minc=min end + if maxmaxc then return false end + end + local g=nil + if smat and smat:IsTuner(c) and (not f1 or f1(smat)) then + g=Duel.SelectTunerMaterial(c:GetControler(),c,smat,f1,f2,minc,maxc,mg) + else + g=Duel.SelectSynchroMaterial(c:GetControler(),c,f1,f2,minc,maxc,smat,mg) + end + if g then + g:KeepAlive() + e:SetLabelObject(g) + return true + else return false end + end +end +function Auxiliary.SynOperation(f1,f2,minct,maxc) + return function(e,tp,eg,ep,ev,re,r,rp,c,smat,mg,min,max) + local g=e:GetLabelObject() + c:SetMaterial(g) + Duel.SendtoGrave(g,REASON_MATERIAL+REASON_SYNCHRO) + g:DeleteGroup() + end +end +--Synchro monster, 1 tuner + 1 monster +--backward compatibility +function Auxiliary.AddSynchroProcedure2(c,f1,f2) + Auxiliary.AddSynchroProcedure(c,f1,f2,1,1) +end +--Synchro monster, f1~f3 each 1 MONSTER + f4 min to max monsters +function Auxiliary.AddSynchroMixProcedure(c,f1,f2,f3,f4,minc,maxc,gc) + local e1=Effect.CreateEffect(c) + e1:SetDescription(1164) + e1:SetType(EFFECT_TYPE_FIELD) + e1:SetCode(EFFECT_SPSUMMON_PROC) + e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE) + e1:SetRange(LOCATION_EXTRA) + e1:SetCondition(Auxiliary.SynMixCondition(f1,f2,f3,f4,minc,maxc,gc)) + e1:SetTarget(Auxiliary.SynMixTarget(f1,f2,f3,f4,minc,maxc,gc)) + e1:SetOperation(Auxiliary.SynMixOperation(f1,f2,f3,f4,minc,maxc,gc)) + e1:SetValue(SUMMON_TYPE_SYNCHRO) + c:RegisterEffect(e1) +end +function Auxiliary.SynMaterialFilter(c,syncard) + return c:IsFaceupEx() and c:IsCanBeSynchroMaterial(syncard) +end +function Auxiliary.SynLimitFilter(c,f,e,syncard) + return f and not f(e,c,syncard) +end +function Auxiliary.GetSynchroLevelFlowerCardian(c) + return 2 +end +function Auxiliary.GetSynMaterials(tp,syncard) + local mg=Duel.GetSynchroMaterial(tp):Filter(Auxiliary.SynMaterialFilter,nil,syncard) + if mg:IsExists(Card.GetHandSynchro,1,nil) then + local mg2=Duel.GetMatchingGroup(Card.IsCanBeSynchroMaterial,tp,LOCATION_HAND,0,nil,syncard) + if mg2:GetCount()>0 then mg:Merge(mg2) end + end + return mg +end +function Auxiliary.SynMixCondition(f1,f2,f3,f4,minc,maxc,gc) + return function(e,c,smat,mg1,min,max) + if c==nil then return true end + if c:IsType(TYPE_PENDULUM) and c:IsFaceup() then return false end + local minc=minc + local maxc=maxc + if min then + if min>minc then minc=min end + if maxmaxc then return false end + end + if smat and not smat:IsCanBeSynchroMaterial(c) then return false end + local tp=c:GetControler() + local mg + local mgchk=false + if mg1 then + mg=mg1 + mgchk=true + else + mg=Auxiliary.GetSynMaterials(tp,c) + end + if smat~=nil then mg:AddCard(smat) end + return mg:IsExists(Auxiliary.SynMixFilter1,1,nil,f1,f2,f3,f4,minc,maxc,c,mg,smat,gc,mgchk) + end +end +function Auxiliary.SynMixTarget(f1,f2,f3,f4,minc,maxc,gc) + return function(e,tp,eg,ep,ev,re,r,rp,chk,c,smat,mg1,min,max) + local minc=minc + local maxc=maxc + if min then + if min>minc then minc=min end + if maxmaxc then return false end + end + ::SynMixTargetSelectStart:: + local g=Group.CreateGroup() + local mg + local mgchk=false + if mg1 then + mg=mg1 + mgchk=true + else + mg=Auxiliary.GetSynMaterials(tp,c) + end + if smat~=nil then mg:AddCard(smat) end + local c1 + local c2 + local c3 + local cancel=Duel.IsSummonCancelable() + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL) + c1=mg:Filter(Auxiliary.SynMixFilter1,nil,f1,f2,f3,f4,minc,maxc,c,mg,smat,gc,mgchk):SelectUnselect(g,tp,false,cancel,1,1) + if not c1 then return false end + g:AddCard(c1) + if f2 then + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL) + c2=mg:Filter(Auxiliary.SynMixFilter2,g,f2,f3,f4,minc,maxc,c,mg,smat,c1,gc,mgchk):SelectUnselect(g,tp,false,cancel,1,1) + if not c2 then return false end + if g:IsContains(c2) then goto SynMixTargetSelectStart end + g:AddCard(c2) + if f3 then + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL) + c3=mg:Filter(Auxiliary.SynMixFilter3,g,f3,f4,minc,maxc,c,mg,smat,c1,c2,gc,mgchk):SelectUnselect(g,tp,false,cancel,1,1) + if not c3 then return false end + if g:IsContains(c3) then goto SynMixTargetSelectStart end + g:AddCard(c3) + end + end + local g4=Group.CreateGroup() + for i=0,maxc-1 do + local mg2=mg:Clone() + if f4 then + mg2=mg2:Filter(f4,g,c,c1,c2,c3) + else + mg2:Sub(g) + end + local cg=mg2:Filter(Auxiliary.SynMixCheckRecursive,g4,tp,g4,mg2,i,minc,maxc,c,g,smat,gc,mgchk) + if cg:GetCount()==0 then break end + local finish=Auxiliary.SynMixCheckGoal(tp,g4,minc,i,c,g,smat,gc,mgchk) + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL) + local c4=cg:SelectUnselect(g+g4,tp,finish,cancel,minc,maxc) + if not c4 then + if finish then break + else return false end + end + if g:IsContains(c4) or g4:IsContains(c4) then goto SynMixTargetSelectStart end + g4:AddCard(c4) + end + g:Merge(g4) + if g:GetCount()>0 then + g:KeepAlive() + e:SetLabelObject(g) + return true + else return false end + end +end +function Auxiliary.SynMixOperation(f1,f2,f3,f4,minct,maxc,gc) + return function(e,tp,eg,ep,ev,re,r,rp,c,smat,mg,min,max) + local g=e:GetLabelObject() + c:SetMaterial(g) + Duel.SendtoGrave(g,REASON_MATERIAL+REASON_SYNCHRO) + g:DeleteGroup() + end +end +function Auxiliary.SynMixFilter1(c,f1,f2,f3,f4,minc,maxc,syncard,mg,smat,gc,mgchk) + return (not f1 or f1(c,syncard)) and mg:IsExists(Auxiliary.SynMixFilter2,1,c,f2,f3,f4,minc,maxc,syncard,mg,smat,c,gc,mgchk) +end +function Auxiliary.SynMixFilter2(c,f2,f3,f4,minc,maxc,syncard,mg,smat,c1,gc,mgchk) + if f2 then + return f2(c,syncard,c1) + and (mg:IsExists(Auxiliary.SynMixFilter3,1,Group.FromCards(c1,c),f3,f4,minc,maxc,syncard,mg,smat,c1,c,gc,mgchk) + or minc==0 and Auxiliary.SynMixFilter4(c,nil,1,1,syncard,mg,smat,c1,nil,nil,gc,mgchk)) + else + return mg:IsExists(Auxiliary.SynMixFilter4,1,c1,f4,minc,maxc,syncard,mg,smat,c1,nil,nil,gc,mgchk) + end +end +function Auxiliary.SynMixFilter3(c,f3,f4,minc,maxc,syncard,mg,smat,c1,c2,gc,mgchk) + if f3 then + return f3(c,syncard,c1,c2) + and (mg:IsExists(Auxiliary.SynMixFilter4,1,Group.FromCards(c1,c2,c),f4,minc,maxc,syncard,mg,smat,c1,c2,c,gc,mgchk) + or minc==0 and Auxiliary.SynMixFilter4(c,nil,1,1,syncard,mg,smat,c1,c2,nil,gc,mgchk)) + else + return mg:IsExists(Auxiliary.SynMixFilter4,1,Group.FromCards(c1,c2),f4,minc,maxc,syncard,mg,smat,c1,c2,nil,gc,mgchk) + end +end +function Auxiliary.SynMixFilter4(c,f4,minc,maxc,syncard,mg1,smat,c1,c2,c3,gc,mgchk) + if f4 and not f4(c,syncard,c1,c2,c3) then return false end + local sg=Group.FromCards(c1,c) + sg:AddCard(c1) + if c2 then sg:AddCard(c2) end + if c3 then sg:AddCard(c3) end + local mg=mg1:Clone() + if f4 then + mg=mg:Filter(f4,sg,syncard,c1,c2,c3) + else + mg:Sub(sg) + end + return Auxiliary.SynMixCheck(mg,sg,minc-1,maxc-1,syncard,smat,gc,mgchk) +end +function Auxiliary.SynMixCheck(mg,sg1,minc,maxc,syncard,smat,gc,mgchk) + local tp=syncard:GetControler() + local sg=Group.CreateGroup() + if minc<=0 and Auxiliary.SynMixCheckGoal(tp,sg1,0,0,syncard,sg,smat,gc,mgchk) then return true end + if maxc==0 then return false end + return mg:IsExists(Auxiliary.SynMixCheckRecursive,1,nil,tp,sg,mg,0,minc,maxc,syncard,sg1,smat,gc,mgchk) +end +function Auxiliary.SynMixCheckRecursive(c,tp,sg,mg,ct,minc,maxc,syncard,sg1,smat,gc,mgchk) + sg:AddCard(c) + ct=ct+1 + local res=Auxiliary.SynMixCheckGoal(tp,sg,minc,ct,syncard,sg1,smat,gc,mgchk) + or (ct0 and not mgchk then + local found=false + for c in aux.Next(g) do + local he,hf,hmin,hmax=c:GetHandSynchro() + if he then + found=true + if hf and hg:IsExists(Auxiliary.SynLimitFilter,1,c,hf,he,syncard) then return false end + if (hmin and hcthmax) then return false end + end + end + if not found then return false end + end + for c in aux.Next(g) do + local le,lf,lloc,lmin,lmax=c:GetTunerLimit() + if le then + local lct=g:GetCount()-1 + if lloc then + local llct=g:FilterCount(Card.IsLocation,c,lloc) + if llct~=lct then return false end + end + if lf and g:IsExists(Auxiliary.SynLimitFilter,1,c,lf,le,syncard) then return false end + if (lmin and lctlmax) then return false end + end + end + return true +end +--Checking Tune Magician +function Auxiliary.TuneMagicianFilter(c,e) + local f=e:GetValue() + return f(e,c) +end +function Auxiliary.TuneMagicianCheckX(c,sg,ecode) + local eset={c:IsHasEffect(ecode)} + for _,te in pairs(eset) do + if sg:IsExists(Auxiliary.TuneMagicianFilter,1,c,te) then return true end + end + return false +end +function Auxiliary.TuneMagicianCheckAdditionalX(ecode) + return function(g) + return not g:IsExists(Auxiliary.TuneMagicianCheckX,1,nil,g,ecode) + end +end +function Auxiliary.XyzAlterFilter(c,alterf,xyzc,e,tp,alterop) + return alterf(c) and c:IsCanBeXyzMaterial(xyzc) and Duel.GetLocationCountFromEx(tp,tp,c,xyzc)>0 + and Auxiliary.MustMaterialCheck(c,tp,EFFECT_MUST_BE_XMATERIAL) and (not alterop or alterop(e,tp,0,c)) +end +--Xyz monster, lv k*n +function Auxiliary.AddXyzProcedure(c,f,lv,ct,alterf,alterdesc,maxct,alterop) + local e1=Effect.CreateEffect(c) + e1:SetDescription(1165) + e1:SetType(EFFECT_TYPE_FIELD) + e1:SetCode(EFFECT_SPSUMMON_PROC) + e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE) + e1:SetRange(LOCATION_EXTRA) + if not maxct then maxct=ct end + if alterf then + e1:SetCondition(Auxiliary.XyzConditionAlter(f,lv,ct,maxct,alterf,alterdesc,alterop)) + e1:SetTarget(Auxiliary.XyzTargetAlter(f,lv,ct,maxct,alterf,alterdesc,alterop)) + e1:SetOperation(Auxiliary.XyzOperationAlter(f,lv,ct,maxct,alterf,alterdesc,alterop)) + else + e1:SetCondition(Auxiliary.XyzCondition(f,lv,ct,maxct)) + e1:SetTarget(Auxiliary.XyzTarget(f,lv,ct,maxct)) + e1:SetOperation(Auxiliary.XyzOperation(f,lv,ct,maxct)) + end + e1:SetValue(SUMMON_TYPE_XYZ) + c:RegisterEffect(e1) +end +--Xyz Summon(normal) +function Auxiliary.XyzCondition(f,lv,minc,maxc) + --og: use special material + return function(e,c,og,min,max) + if c==nil then return true end + if c:IsType(TYPE_PENDULUM) and c:IsFaceup() then return false end + local tp=c:GetControler() + local minc=minc + local maxc=maxc + if min then + if min>minc then minc=min end + if maxmaxc then return false end + end + return Duel.CheckXyzMaterial(c,f,lv,minc,maxc,og) + end +end +function Auxiliary.XyzTarget(f,lv,minc,maxc) + return function(e,tp,eg,ep,ev,re,r,rp,chk,c,og,min,max) + if og and not min then + return true + end + local minc=minc + local maxc=maxc + if min then + if min>minc then minc=min end + if maxminc then minc=min end + if maxmaxc then return false end + end + return Duel.CheckXyzMaterial(c,f,lv,minc,maxc,og) + end +end +function Auxiliary.XyzTargetAlter(f,lv,minc,maxc,alterf,alterdesc,alterop) + return function(e,tp,eg,ep,ev,re,r,rp,chk,c,og,min,max) + if og and not min then + return true + end + local minc=minc + local maxc=maxc + if min then + if min>minc then minc=min end + if max0 + local g=nil + local cancel=Duel.IsSummonCancelable() + if b2 and (not b1 or Duel.SelectYesNo(tp,alterdesc)) then + e:SetLabel(1) + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_XMATERIAL) + local tc=altg:SelectUnselect(nil,tp,false,cancel,1,1) + if tc then + g=Group.FromCards(tc) + if alterop then alterop(e,tp,1,tc) end + end + else + e:SetLabel(0) + g=Duel.SelectXyzMaterial(tp,c,f,lv,minc,maxc,og) + end + if g then + g:KeepAlive() + e:SetLabelObject(g) + return true + else return false end + end +end +function Auxiliary.XyzOperationAlter(f,lv,minc,maxc,alterf,alterdesc,alterop) + return function(e,tp,eg,ep,ev,re,r,rp,c,og,min,max) + if og and not min then + local sg=Group.CreateGroup() + local tc=og:GetFirst() + while tc do + local sg1=tc:GetOverlayGroup() + sg:Merge(sg1) + tc=og:GetNext() + end + Duel.SendtoGrave(sg,REASON_RULE) + c:SetMaterial(og) + Duel.Overlay(c,og) + else + local mg=e:GetLabelObject() + if e:GetLabel()==1 then + local mg2=mg:GetFirst():GetOverlayGroup() + if mg2:GetCount()~=0 then + Duel.Overlay(c,mg2) + end + else + local sg=Group.CreateGroup() + local tc=mg:GetFirst() + while tc do + local sg1=tc:GetOverlayGroup() + sg:Merge(sg1) + tc=mg:GetNext() + end + Duel.SendtoGrave(sg,REASON_RULE) + end + c:SetMaterial(mg) + Duel.Overlay(c,mg) + mg:DeleteGroup() + end + end +end +function Auxiliary.AddXyzProcedureLevelFree(c,f,gf,minc,maxc,alterf,alterdesc,alterop) + local e1=Effect.CreateEffect(c) + e1:SetDescription(1165) + e1:SetType(EFFECT_TYPE_FIELD) + e1:SetCode(EFFECT_SPSUMMON_PROC) + e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE) + e1:SetRange(LOCATION_EXTRA) + if alterf then + e1:SetCondition(Auxiliary.XyzLevelFreeConditionAlter(f,gf,minc,maxc,alterf,alterdesc,alterop)) + e1:SetTarget(Auxiliary.XyzLevelFreeTargetAlter(f,gf,minc,maxc,alterf,alterdesc,alterop)) + e1:SetOperation(Auxiliary.XyzLevelFreeOperationAlter(f,gf,minc,maxc,alterf,alterdesc,alterop)) + else + e1:SetCondition(Auxiliary.XyzLevelFreeCondition(f,gf,minc,maxc)) + e1:SetTarget(Auxiliary.XyzLevelFreeTarget(f,gf,minc,maxc)) + e1:SetOperation(Auxiliary.XyzLevelFreeOperation(f,gf,minc,maxc)) + end + e1:SetValue(SUMMON_TYPE_XYZ) + c:RegisterEffect(e1) +end +--Xyz Summon(level free) +function Auxiliary.XyzLevelFreeFilter(c,xyzc,f) + return (not c:IsOnField() or c:IsFaceup()) and c:IsCanBeXyzMaterial(xyzc) and (not f or f(c,xyzc)) +end +function Auxiliary.XyzLevelFreeGoal(g,tp,xyzc,gf) + return (not gf or gf(g)) and Duel.GetLocationCountFromEx(tp,tp,g,xyzc)>0 +end +function Auxiliary.XyzLevelFreeCondition(f,gf,minct,maxct) + return function(e,c,og,min,max) + if c==nil then return true end + if c:IsType(TYPE_PENDULUM) and c:IsFaceup() then return false end + local tp=c:GetControler() + local minc=minct + local maxc=maxct + if min then + minc=math.max(minc,min) + maxc=math.min(maxc,max) + end + if maxcminc then minc=min end + if max0 then + g:KeepAlive() + e:SetLabelObject(g) + return true + else return false end + end +end +function Auxiliary.XyzLevelFreeOperation(f,gf,minct,maxct) + return function(e,tp,eg,ep,ev,re,r,rp,c,og,min,max) + if og and not min then + local sg=Group.CreateGroup() + local tc=og:GetFirst() + while tc do + local sg1=tc:GetOverlayGroup() + sg:Merge(sg1) + tc=og:GetNext() + end + Duel.SendtoGrave(sg,REASON_RULE) + c:SetMaterial(og) + Duel.Overlay(c,og) + else + local mg=e:GetLabelObject() + if e:GetLabel()==1 then + local mg2=mg:GetFirst():GetOverlayGroup() + if mg2:GetCount()~=0 then + Duel.Overlay(c,mg2) + end + else + local sg=Group.CreateGroup() + local tc=mg:GetFirst() + while tc do + local sg1=tc:GetOverlayGroup() + sg:Merge(sg1) + tc=mg:GetNext() + end + Duel.SendtoGrave(sg,REASON_RULE) + end + c:SetMaterial(mg) + Duel.Overlay(c,mg) + mg:DeleteGroup() + end + end +end +--Xyz summon(level free&alterf) +function Auxiliary.XyzLevelFreeConditionAlter(f,gf,minct,maxct,alterf,alterdesc,alterop) + return function(e,c,og,min,max) + if c==nil then return true end + if c:IsType(TYPE_PENDULUM) and c:IsFaceup() then return false end + local tp=c:GetControler() + local mg=nil + if og then + mg=og + else + mg=Duel.GetFieldGroup(tp,LOCATION_MZONE,0) + end + local altg=mg:Filter(Auxiliary.XyzAlterFilter,nil,alterf,c,e,tp,alterop) + if (not min or min<=1) and altg:GetCount()>0 then + return true + end + local minc=minct + local maxc=maxct + if min then + if min>minc then minc=min end + if maxmaxc then return false end + end + mg=mg:Filter(Auxiliary.XyzLevelFreeFilter,nil,c,f) + local sg=Duel.GetMustMaterial(tp,EFFECT_MUST_BE_XMATERIAL) + if sg:IsExists(Auxiliary.MustMaterialCounterFilter,1,nil,mg) then return false end + Duel.SetSelectedCard(sg) + Auxiliary.GCheckAdditional=Auxiliary.TuneMagicianCheckAdditionalX(EFFECT_TUNE_MAGICIAN_X) + local res=mg:CheckSubGroup(Auxiliary.XyzLevelFreeGoal,minc,maxc,tp,c,gf) + Auxiliary.GCheckAdditional=nil + return res + end +end +function Auxiliary.XyzLevelFreeTargetAlter(f,gf,minct,maxct,alterf,alterdesc,alterop) + return function(e,tp,eg,ep,ev,re,r,rp,chk,c,og,min,max) + if og and not min then + return true + end + local minc=minct + local maxc=maxct + if min then + if min>minc then minc=min end + if max0 + local g=nil + local cancel=Duel.IsSummonCancelable() + if b2 and (not b1 or Duel.SelectYesNo(tp,alterdesc)) then + e:SetLabel(1) + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_XMATERIAL) + local tc=altg:SelectUnselect(nil,tp,false,cancel,1,1) + if tc then + g=Group.FromCards(tc) + if alterop then alterop(e,tp,1,tc) end + end + else + e:SetLabel(0) + Duel.SetSelectedCard(sg) + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_XMATERIAL) + Auxiliary.GCheckAdditional=Auxiliary.TuneMagicianCheckAdditionalX(EFFECT_TUNE_MAGICIAN_X) + g=mg2:SelectSubGroup(tp,Auxiliary.XyzLevelFreeGoal,cancel,minc,maxc,tp,c,gf) + Auxiliary.GCheckAdditional=nil + end + if g and g:GetCount()>0 then + g:KeepAlive() + e:SetLabelObject(g) + return true + else return false end + end +end +function Auxiliary.XyzLevelFreeOperationAlter(f,gf,minct,maxct,alterf,alterdesc,alterop) + return function(e,tp,eg,ep,ev,re,r,rp,c,og,min,max) + if og and not min then + local sg=Group.CreateGroup() + local tc=og:GetFirst() + while tc do + local sg1=tc:GetOverlayGroup() + sg:Merge(sg1) + tc=og:GetNext() + end + Duel.SendtoGrave(sg,REASON_RULE) + c:SetMaterial(og) + Duel.Overlay(c,og) + else + local mg=e:GetLabelObject() + if e:GetLabel()==1 then + local mg2=mg:GetFirst():GetOverlayGroup() + if mg2:GetCount()~=0 then + Duel.Overlay(c,mg2) + end + else + local sg=Group.CreateGroup() + local tc=mg:GetFirst() + while tc do + local sg1=tc:GetOverlayGroup() + sg:Merge(sg1) + tc=mg:GetNext() + end + Duel.SendtoGrave(sg,REASON_RULE) + end + c:SetMaterial(mg) + Duel.Overlay(c,mg) + mg:DeleteGroup() + end + end +end +--material: names in material list +--Fusion monster, mixed materials +function Auxiliary.AddFusionProcMix(c,sub,insf,...) + if c:IsStatus(STATUS_COPYING_EFFECT) then return end + local val={...} + local fun={} + local mat={} + for i=1,#val do + if type(val[i])=='function' then + fun[i]=function(c,fc,sub,mg,sg) return val[i](c,fc,sub,mg,sg) and not c:IsHasEffect(6205579) end + elseif type(val[i])=='table' then + fun[i]=function(c,fc,sub,mg,sg) + for _,fcode in ipairs(val[i]) do + if type(fcode)=='function' then + if fcode(c,fc,sub,mg,sg) and not c:IsHasEffect(6205579) then return true end + else + if c:IsFusionCode(fcode) or (sub and c:CheckFusionSubstitute(fc)) then return true end + end + end + return false + end + for _,fcode in ipairs(val[i]) do + if type(fcode)~='function' then mat[fcode]=true end + end + else + fun[i]=function(c,fc,sub) return c:IsFusionCode(val[i]) or (sub and c:CheckFusionSubstitute(fc)) end + mat[val[i]]=true + end + end + local mt=getmetatable(c) + if mt.material==nil then + mt.material=mat + end + if mt.material_count==nil then + mt.material_count={#fun,#fun} + end + for index,_ in pairs(mat) do + Auxiliary.AddCodeList(c,index) + end + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_SINGLE) + e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE) + e1:SetCode(EFFECT_FUSION_MATERIAL) + e1:SetCondition(Auxiliary.FConditionMix(insf,sub,table.unpack(fun))) + e1:SetOperation(Auxiliary.FOperationMix(insf,sub,table.unpack(fun))) + c:RegisterEffect(e1) +end +function Auxiliary.FConditionMix(insf,sub,...) + --g:Material group(nil for Instant Fusion) + --gc:Material already used + --chkf: check field, default:PLAYER_NONE + --chkf&0x100: Not fusion summon + --chkf&0x200: Concat fusion + local funs={...} + return function(e,g,gc,chkfnf) + if g==nil then return insf and Auxiliary.MustMaterialCheck(nil,e:GetHandlerPlayer(),EFFECT_MUST_BE_FMATERIAL) end + local c=e:GetHandler() + local tp=c:GetControler() + local notfusion=chkfnf&0x100>0 + local concat_fusion=chkfnf&0x200>0 + local sub=(sub or notfusion) and not concat_fusion + local mg=g:Filter(Auxiliary.FConditionFilterMix,c,c,sub,concat_fusion,table.unpack(funs)) + if gc then + if not mg:IsContains(gc) then return false end + Duel.SetSelectedCard(Group.FromCards(gc)) + end + return mg:CheckSubGroup(Auxiliary.FCheckMixGoal,#funs,#funs,tp,c,sub,chkfnf,table.unpack(funs)) + end +end +function Auxiliary.FOperationMix(insf,sub,...) + local funs={...} + return function(e,tp,eg,ep,ev,re,r,rp,gc,chkfnf) + local c=e:GetHandler() + local tp=c:GetControler() + local notfusion=chkfnf&0x100>0 + local concat_fusion=chkfnf&0x200>0 + local sub=(sub or notfusion) and not concat_fusion + local mg=eg:Filter(Auxiliary.FConditionFilterMix,c,c,sub,concat_fusion,table.unpack(funs)) + if gc then Duel.SetSelectedCard(Group.FromCards(gc)) end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL) + local sg=mg:SelectSubGroup(tp,Auxiliary.FCheckMixGoal,false,#funs,#funs,tp,c,sub,chkfnf,table.unpack(funs)) + Duel.SetFusionMaterial(sg) + end +end +function Auxiliary.FConditionFilterMix(c,fc,sub,concat_fusion,...) + local fusion_type=concat_fusion and SUMMON_TYPE_SPECIAL or SUMMON_TYPE_FUSION + if not c:IsCanBeFusionMaterial(fc,fusion_type) then return false end + for i,f in ipairs({...}) do + if f(c,fc,sub) then return true end + end + return false +end +function Auxiliary.FCheckMix(c,mg,sg,fc,sub,fun1,fun2,...) + if fun2 then + sg:AddCard(c) + local res=false + if fun1(c,fc,false,mg,sg) then + res=mg:IsExists(Auxiliary.FCheckMix,1,sg,mg,sg,fc,sub,fun2,...) + elseif sub and fun1(c,fc,true,mg,sg) then + res=mg:IsExists(Auxiliary.FCheckMix,1,sg,mg,sg,fc,false,fun2,...) + end + sg:RemoveCard(c) + return res + else + return fun1(c,fc,sub,mg,sg) + end +end +--if sg1 is subset of sg2 then not Auxiliary.FCheckAdditional(tp,sg1,fc) -> not Auxiliary.FCheckAdditional(tp,sg2,fc) +Auxiliary.FCheckAdditional=nil +Auxiliary.FGoalCheckAdditional=nil +function Auxiliary.FCheckMixGoal(sg,tp,fc,sub,chkfnf,...) + local chkf=chkfnf&0xff + local concat_fusion=chkfnf&0x200>0 + if not concat_fusion and sg:IsExists(Auxiliary.TuneMagicianCheckX,1,nil,sg,EFFECT_TUNE_MAGICIAN_F) then return false end + if not Auxiliary.MustMaterialCheck(sg,tp,EFFECT_MUST_BE_FMATERIAL) then return false end + local g=Group.CreateGroup() + return sg:IsExists(Auxiliary.FCheckMix,1,nil,sg,g,fc,sub,...) and (chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(tp,tp,sg,fc)>0) + and (not Auxiliary.FCheckAdditional or Auxiliary.FCheckAdditional(tp,sg,fc)) + and (not Auxiliary.FGoalCheckAdditional or Auxiliary.FGoalCheckAdditional(tp,sg,fc)) +end +--Fusion monster, mixed material * minc to maxc + material + ... +function Auxiliary.AddFusionProcMixRep(c,sub,insf,fun1,minc,maxc,...) + if c:IsStatus(STATUS_COPYING_EFFECT) then return end + local val={fun1,...} + local fun={} + local mat={} + for i=1,#val do + if type(val[i])=='function' then + fun[i]=function(c,fc,sub,mg,sg) return val[i](c,fc,sub,mg,sg) and not c:IsHasEffect(6205579) end + elseif type(val[i])=='table' then + fun[i]=function(c,fc,sub,mg,sg) + for _,fcode in ipairs(val[i]) do + if type(fcode)=='function' then + if fcode(c,fc,sub,mg,sg) and not c:IsHasEffect(6205579) then return true end + else + if c:IsFusionCode(fcode) or (sub and c:CheckFusionSubstitute(fc)) then return true end + end + end + return false + end + for _,fcode in ipairs(val[i]) do + if type(fcode)~='function' then mat[fcode]=true end + end + else + fun[i]=function(c,fc,sub) return c:IsFusionCode(val[i]) or (sub and c:CheckFusionSubstitute(fc)) end + mat[val[i]]=true + end + end + local mt=getmetatable(c) + if mt.material==nil then + mt.material=mat + end + if mt.material_count==nil then + mt.material_count={#fun+minc-1,#fun+maxc-1} + end + for index,_ in pairs(mat) do + Auxiliary.AddCodeList(c,index) + end + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_SINGLE) + e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE) + e1:SetCode(EFFECT_FUSION_MATERIAL) + e1:SetCondition(Auxiliary.FConditionMixRep(insf,sub,fun[1],minc,maxc,table.unpack(fun,2))) + e1:SetOperation(Auxiliary.FOperationMixRep(insf,sub,fun[1],minc,maxc,table.unpack(fun,2))) + c:RegisterEffect(e1) +end +function Auxiliary.FConditionMixRep(insf,sub,fun1,minc,maxc,...) + local funs={...} + return function(e,g,gc,chkfnf) + if g==nil then return insf and Auxiliary.MustMaterialCheck(nil,e:GetHandlerPlayer(),EFFECT_MUST_BE_FMATERIAL) end + local c=e:GetHandler() + local tp=c:GetControler() + local notfusion=chkfnf&0x100>0 + local concat_fusion=chkfnf&0x200>0 + local sub=(sub or notfusion) and not concat_fusion + local mg=g:Filter(Auxiliary.FConditionFilterMix,c,c,sub,concat_fusion,fun1,table.unpack(funs)) + if gc then + if not mg:IsContains(gc) then return false end + local sg=Group.CreateGroup() + return Auxiliary.FSelectMixRep(gc,tp,mg,sg,c,sub,chkfnf,fun1,minc,maxc,table.unpack(funs)) + end + local sg=Group.CreateGroup() + return mg:IsExists(Auxiliary.FSelectMixRep,1,nil,tp,mg,sg,c,sub,chkfnf,fun1,minc,maxc,table.unpack(funs)) + end +end +function Auxiliary.FOperationMixRep(insf,sub,fun1,minc,maxc,...) + local funs={...} + return function(e,tp,eg,ep,ev,re,r,rp,gc,chkfnf) + local c=e:GetHandler() + local tp=c:GetControler() + local notfusion=chkfnf&0x100>0 + local concat_fusion=chkfnf&0x200>0 + local sub=(sub or notfusion) and not concat_fusion + local mg=eg:Filter(Auxiliary.FConditionFilterMix,c,c,sub,concat_fusion,fun1,table.unpack(funs)) + local sg=Group.CreateGroup() + if gc then sg:AddCard(gc) end + while sg:GetCount()0 + if not concat_fusion and sg:IsExists(Auxiliary.TuneMagicianCheckX,1,nil,sg,EFFECT_TUNE_MAGICIAN_F) then return false end + if not Auxiliary.MustMaterialCheck(sg,tp,EFFECT_MUST_BE_FMATERIAL) then return false end + if Auxiliary.FGoalCheckAdditional and not Auxiliary.FGoalCheckAdditional(tp,sg,fc) then return false end + return true +end +function Auxiliary.FCheckMixRepGoal(tp,sg,fc,sub,chkfnf,fun1,minc,maxc,...) + local chkf=chkfnf&0xff + if sg:GetCount()maxc+#{...} then return false end + if not (chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(tp,tp,sg,fc)>0) then return false end + if Auxiliary.FCheckAdditional and not Auxiliary.FCheckAdditional(tp,sg,fc) then return false end + if not Auxiliary.FCheckMixRepGoalCheck(tp,sg,fc,chkfnf) then return false end + local g=Group.CreateGroup() + return Auxiliary.FCheckMixRep(sg,g,fc,sub,chkf,fun1,minc,maxc,...) +end +function Auxiliary.FCheckMixRepTemplate(c,cond,tp,mg,sg,g,fc,sub,chkfnf,fun1,minc,maxc,...) + for i,f in ipairs({...}) do + if f(c,fc,sub,mg,sg) then + g:AddCard(c) + local sub=sub and f(c,fc,false,mg,sg) + local t={...} + table.remove(t,i) + local res=cond(tp,mg,sg,g,fc,sub,chkfnf,fun1,minc,maxc,table.unpack(t)) + g:RemoveCard(c) + if res then return true end + end + end + if maxc>0 then + if fun1(c,fc,sub,mg,sg) then + g:AddCard(c) + local sub=sub and fun1(c,fc,false,mg,sg) + local res=cond(tp,mg,sg,g,fc,sub,chkfnf,fun1,minc-1,maxc-1,...) + g:RemoveCard(c) + if res then return true end + end + end + return false +end +function Auxiliary.FCheckMixRepSelectedCond(tp,mg,sg,g,...) + if g:GetCount()0 then + if minc<=0 and #{...}==0 and Auxiliary.FCheckMixRepGoalCheck(tp,g,fc,chkfnf) then return true end + return mg:IsExists(Auxiliary.FCheckSelectMixRepAll,1,g,tp,mg,sg,g,fc,sub,chkfnf,fun1,minc,maxc,...) + else + return mg:IsExists(Auxiliary.FCheckSelectMixRepM,1,g,tp,mg,sg,g,fc,sub,chkfnf,fun1,minc,maxc,...) + end +end +function Auxiliary.FCheckSelectMixRepAll(c,tp,mg,sg,g,fc,sub,chkf,fun1,minc,maxc,fun2,...) + if fun2 then + if fun2(c,fc,sub,mg,sg) then + g:AddCard(c) + local sub=sub and fun2(c,fc,false,mg,sg) + local res=Auxiliary.FCheckSelectMixRep(tp,mg,sg,g,fc,sub,chkf,fun1,minc,maxc,...) + g:RemoveCard(c) + return res + end + elseif maxc>0 and fun1(c,fc,sub,mg,sg) then + g:AddCard(c) + local sub=sub and fun1(c,fc,false,mg,sg) + local res=Auxiliary.FCheckSelectMixRep(tp,mg,sg,g,fc,sub,chkf,fun1,minc-1,maxc-1) + g:RemoveCard(c) + return res + end + return false +end +function Auxiliary.FCheckSelectMixRepM(c,tp,...) + return c:IsControler(tp) and c:IsLocation(LOCATION_MZONE) + and Auxiliary.FCheckMixRepTemplate(c,Auxiliary.FCheckSelectMixRep,tp,...) +end +function Auxiliary.FSelectMixRep(c,tp,mg,sg,fc,sub,chkfnf,...) + sg:AddCard(c) + local res=false + if Auxiliary.FCheckAdditional and not Auxiliary.FCheckAdditional(tp,sg,fc) then + res=false + elseif Auxiliary.FCheckMixRepGoal(tp,sg,fc,sub,chkfnf,...) then + res=true + else + local g=Group.CreateGroup() + res=sg:IsExists(Auxiliary.FCheckMixRepSelected,1,nil,tp,mg,sg,g,fc,sub,chkfnf,...) + end + sg:RemoveCard(c) + return res +end +--Fusion monster, name + name +function Auxiliary.AddFusionProcCode2(c,code1,code2,sub,insf) + Auxiliary.AddFusionProcMix(c,sub,insf,code1,code2) +end +--Fusion monster, name + name + name +function Auxiliary.AddFusionProcCode3(c,code1,code2,code3,sub,insf) + Auxiliary.AddFusionProcMix(c,sub,insf,code1,code2,code3) +end +--Fusion monster, name + name + name + name +function Auxiliary.AddFusionProcCode4(c,code1,code2,code3,code4,sub,insf) + Auxiliary.AddFusionProcMix(c,sub,insf,code1,code2,code3,code4) +end +--Fusion monster, name * n +function Auxiliary.AddFusionProcCodeRep(c,code1,cc,sub,insf) + local code={} + for i=1,cc do + code[i]=code1 + end + Auxiliary.AddFusionProcMix(c,sub,insf,table.unpack(code)) +end +--Fusion monster, name * minc to maxc +function Auxiliary.AddFusionProcCodeRep2(c,code1,minc,maxc,sub,insf) + Auxiliary.AddFusionProcMixRep(c,sub,insf,code1,minc,maxc) +end +--Fusion monster, name + condition * n +function Auxiliary.AddFusionProcCodeFun(c,code1,f,cc,sub,insf) + local fun={} + for i=1,cc do + fun[i]=f + end + Auxiliary.AddFusionProcMix(c,sub,insf,code1,table.unpack(fun)) +end +--Fusion monster, condition + condition +function Auxiliary.AddFusionProcFun2(c,f1,f2,insf) + Auxiliary.AddFusionProcMix(c,false,insf,f1,f2) +end +--Fusion monster, condition * n +function Auxiliary.AddFusionProcFunRep(c,f,cc,insf) + local fun={} + for i=1,cc do + fun[i]=f + end + Auxiliary.AddFusionProcMix(c,false,insf,table.unpack(fun)) +end +--Fusion monster, condition * minc to maxc +function Auxiliary.AddFusionProcFunRep2(c,f,minc,maxc,insf) + Auxiliary.AddFusionProcMixRep(c,false,insf,f,minc,maxc) +end +--Fusion monster, condition1 + condition2 * n +function Auxiliary.AddFusionProcFunFun(c,f1,f2,cc,insf) + local fun={} + for i=1,cc do + fun[i]=f2 + end + Auxiliary.AddFusionProcMix(c,false,insf,f1,table.unpack(fun)) +end +--Fusion monster, condition1 + condition2 * minc to maxc +function Auxiliary.AddFusionProcFunFunRep(c,f1,f2,minc,maxc,insf) + Auxiliary.AddFusionProcMixRep(c,false,insf,f2,minc,maxc,f1) +end +--Fusion monster, name + condition * minc to maxc +function Auxiliary.AddFusionProcCodeFunRep(c,code1,f,minc,maxc,sub,insf) + Auxiliary.AddFusionProcMixRep(c,sub,insf,f,minc,maxc,code1) +end +--Fusion monster, name + name + condition * minc to maxc +function Auxiliary.AddFusionProcCode2FunRep(c,code1,code2,f,minc,maxc,sub,insf) + Auxiliary.AddFusionProcMixRep(c,sub,insf,f,minc,maxc,code1,code2) +end +--Fusion monster, Shaddoll materials +function Auxiliary.AddFusionProcShaddoll(c,attr) + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_SINGLE) + e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE) + e1:SetCode(EFFECT_FUSION_MATERIAL) + e1:SetCondition(Auxiliary.FShaddollCondition(attr)) + e1:SetOperation(Auxiliary.FShaddollOperation(attr)) + c:RegisterEffect(e1) +end +function Auxiliary.FShaddollFilter(c,fc,attr) + return (Auxiliary.FShaddollFilter1(c) or Auxiliary.FShaddollFilter2(c,attr)) and c:IsCanBeFusionMaterial(fc) and not c:IsHasEffect(6205579) +end +function Auxiliary.FShaddollExFilter(c,fc,attr,fe) + return c:IsFaceup() and not c:IsImmuneToEffect(fe) and Auxiliary.FShaddollFilter(c,fc,attr) +end +function Auxiliary.FShaddollFilter1(c) + return c:IsFusionSetCard(0x9d) +end +function Auxiliary.FShaddollFilter2(c,attr) + return c:IsFusionAttribute(attr) or c:IsHasEffect(4904633) +end +function Auxiliary.FShaddollSpFilter1(c,fc,tp,mg,exg,attr,chkf) + return mg:IsExists(Auxiliary.FShaddollSpFilter2,1,c,fc,tp,c,attr,chkf) + or (exg and exg:IsExists(Auxiliary.FShaddollSpFilter2,1,c,fc,tp,c,attr,chkf)) +end +function Auxiliary.FShaddollSpFilter2(c,fc,tp,mc,attr,chkf) + local sg=Group.FromCards(c,mc) + if sg:IsExists(Auxiliary.TuneMagicianCheckX,1,nil,sg,EFFECT_TUNE_MAGICIAN_F) then return false end + if not Auxiliary.MustMaterialCheck(sg,tp,EFFECT_MUST_BE_FMATERIAL) then return false end + if Auxiliary.FCheckAdditional and not Auxiliary.FCheckAdditional(tp,sg,fc) + or Auxiliary.FGoalCheckAdditional and not Auxiliary.FGoalCheckAdditional(tp,sg,fc) then return false end + return ((Auxiliary.FShaddollFilter1(c) and Auxiliary.FShaddollFilter2(mc,attr)) + or (Auxiliary.FShaddollFilter2(c,attr) and Auxiliary.FShaddollFilter1(mc))) + and (chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(tp,tp,sg,fc)>0) +end +function Auxiliary.FShaddollCondition(attr) + return function(e,g,gc,chkf) + if g==nil then return Auxiliary.MustMaterialCheck(nil,e:GetHandlerPlayer(),EFFECT_MUST_BE_FMATERIAL) end + local c=e:GetHandler() + local mg=g:Filter(Auxiliary.FShaddollFilter,nil,c,attr) + local tp=e:GetHandlerPlayer() + local fc=Duel.GetFieldCard(tp,LOCATION_FZONE,0) + local exg=nil + if fc and fc:IsHasEffect(81788994) and fc:IsCanRemoveCounter(tp,0x16,3,REASON_EFFECT) then + local fe=fc:IsHasEffect(81788994) + exg=Duel.GetMatchingGroup(Auxiliary.FShaddollExFilter,tp,0,LOCATION_MZONE,mg,c,attr,fe) + end + if gc then + if not mg:IsContains(gc) then return false end + return Auxiliary.FShaddollSpFilter1(gc,c,tp,mg,exg,attr,chkf) + end + return mg:IsExists(Auxiliary.FShaddollSpFilter1,1,nil,c,tp,mg,exg,attr,chkf) + end +end +function Auxiliary.FShaddollOperation(attr) + return function(e,tp,eg,ep,ev,re,r,rp,gc,chkf) + local c=e:GetHandler() + local mg=eg:Filter(Auxiliary.FShaddollFilter,nil,c,attr) + local fc=Duel.GetFieldCard(tp,LOCATION_FZONE,0) + local exg=nil + if fc and fc:IsHasEffect(81788994) and fc:IsCanRemoveCounter(tp,0x16,3,REASON_EFFECT) then + local fe=fc:IsHasEffect(81788994) + exg=Duel.GetMatchingGroup(Auxiliary.FShaddollExFilter,tp,0,LOCATION_MZONE,mg,c,attr,fe) + end + local g=nil + if gc then + g=Group.FromCards(gc) + mg:RemoveCard(gc) + else + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL) + g=mg:FilterSelect(tp,Auxiliary.FShaddollSpFilter1,1,1,nil,c,tp,mg,exg,attr,chkf) + mg:Sub(g) + end + if exg and exg:IsExists(Auxiliary.FShaddollSpFilter2,1,nil,c,tp,g:GetFirst(),attr,chkf) + and (mg:GetCount()==0 or (exg:GetCount()>0 and Duel.SelectYesNo(tp,aux.Stringid(81788994,0)))) then + fc:RemoveCounter(tp,0x16,3,REASON_EFFECT) + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL) + local sg=exg:FilterSelect(tp,Auxiliary.FShaddollSpFilter2,1,1,nil,c,tp,g:GetFirst(),attr,chkf) + g:Merge(sg) + else + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL) + local sg=mg:FilterSelect(tp,Auxiliary.FShaddollSpFilter2,1,1,nil,c,tp,g:GetFirst(),attr,chkf) + g:Merge(sg) + end + Duel.SetFusionMaterial(g) + end +end +function Auxiliary.AddContactFusionProcedure(c,filter,self_location,opponent_location,mat_operation,...) + local self_location=self_location or 0 + local opponent_location=opponent_location or 0 + local operation_params={...} + local e2=Effect.CreateEffect(c) + e2:SetType(EFFECT_TYPE_FIELD) + e2:SetCode(EFFECT_SPSUMMON_PROC) + e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE) + e2:SetRange(LOCATION_EXTRA) + e2:SetCondition(Auxiliary.ContactFusionCondition(filter,self_location,opponent_location)) + e2:SetOperation(Auxiliary.ContactFusionOperation(filter,self_location,opponent_location,mat_operation,operation_params)) + c:RegisterEffect(e2) + return e2 +end +function Auxiliary.ContactFusionMaterialFilter(c,fc,filter) + return c:IsCanBeFusionMaterial(fc,SUMMON_TYPE_SPECIAL) and (not filter or filter(c,fc)) +end +function Auxiliary.ContactFusionCondition(filter,self_location,opponent_location) + return function(e,c) + if c==nil then return true end + if c:IsType(TYPE_PENDULUM) and c:IsFaceup() then return false end + local tp=c:GetControler() + local mg=Duel.GetMatchingGroup(Auxiliary.ContactFusionMaterialFilter,tp,self_location,opponent_location,c,c,filter) + return c:CheckFusionMaterial(mg,nil,tp|0x200) + end +end +function Auxiliary.ContactFusionOperation(filter,self_location,opponent_location,mat_operation,operation_params) + return function(e,tp,eg,ep,ev,re,r,rp,c) + local mg=Duel.GetMatchingGroup(Auxiliary.ContactFusionMaterialFilter,tp,self_location,opponent_location,c,c,filter) + local g=Duel.SelectFusionMaterial(tp,c,mg,nil,tp|0x200) + c:SetMaterial(g) + mat_operation(g,table.unpack(operation_params)) + end +end +function Auxiliary.AddRitualProcUltimate(c,filter,level_function,greater_or_equal,summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) + summon_location=summon_location or LOCATION_HAND + local e1=Effect.CreateEffect(c) + e1:SetCategory(CATEGORY_SPECIAL_SUMMON) + e1:SetType(EFFECT_TYPE_ACTIVATE) + e1:SetCode(EVENT_FREE_CHAIN) + e1:SetTarget(Auxiliary.RitualUltimateTarget(filter,level_function,greater_or_equal,summon_location,grave_filter,mat_filter,extra_target)) + e1:SetOperation(Auxiliary.RitualUltimateOperation(filter,level_function,greater_or_equal,summon_location,grave_filter,mat_filter,extra_operation)) + if not pause then + c:RegisterEffect(e1) + end + return e1 +end +function Auxiliary.RitualCheckGreater(g,c,lv) + Duel.SetSelectedCard(g) + return g:CheckWithSumGreater(Card.GetRitualLevel,lv,c) +end +function Auxiliary.RitualCheckEqual(g,c,lv) + return g:CheckWithSumEqual(Card.GetRitualLevel,lv,#g,#g,c) +end +Auxiliary.RCheckAdditional=nil +function Auxiliary.RitualCheck(g,tp,c,lv,greater_or_equal) + return Auxiliary["RitualCheck"..greater_or_equal](g,c,lv) and Duel.GetMZoneCount(tp,g,tp)>0 and (not c.mat_group_check or c.mat_group_check(g,tp)) + and (not Auxiliary.RCheckAdditional or Auxiliary.RCheckAdditional(tp,g,c)) +end +function Auxiliary.RitualCheckAdditionalLevel(c,rc) + local raw_level=c:GetRitualLevel(rc) + local lv1=raw_level&0xffff + local lv2=raw_level>>16 + if lv2>0 then + return math.min(lv1,lv2) + else + return lv1 + end +end +Auxiliary.RGCheckAdditional=nil +function Auxiliary.RitualCheckAdditional(c,lv,greater_or_equal) + if greater_or_equal=="Equal" then + return function(g) + return (not Auxiliary.RGCheckAdditional or Auxiliary.RGCheckAdditional(g)) and g:GetSum(Auxiliary.RitualCheckAdditionalLevel,c)<=lv + end + else + return function(g,ec) + if ec then + return (not Auxiliary.RGCheckAdditional or Auxiliary.RGCheckAdditional(g,ec)) and g:GetSum(Auxiliary.RitualCheckAdditionalLevel,c)-Auxiliary.RitualCheckAdditionalLevel(ec,c)<=lv + else + return not Auxiliary.RGCheckAdditional or Auxiliary.RGCheckAdditional(g) + end + end + end +end +function Auxiliary.RitualUltimateFilter(c,filter,e,tp,m1,m2,level_function,greater_or_equal,chk) + if bit.band(c:GetType(),0x81)~=0x81 or (filter and not filter(c,e,tp,chk)) or not c:IsCanBeSpecialSummoned(e,SUMMON_TYPE_RITUAL,tp,false,true) then return false end + local mg=m1:Filter(Card.IsCanBeRitualMaterial,c,c) + if m2 then + mg:Merge(m2) + end + if c.mat_filter then + mg=mg:Filter(c.mat_filter,c,tp) + else + mg:RemoveCard(c) + end + local lv=level_function(c) + Auxiliary.GCheckAdditional=Auxiliary.RitualCheckAdditional(c,lv,greater_or_equal) + local res=mg:CheckSubGroup(Auxiliary.RitualCheck,1,lv,tp,c,lv,greater_or_equal) + Auxiliary.GCheckAdditional=nil + return res +end +function Auxiliary.RitualExtraFilter(c,f) + return c:GetLevel()>0 and f(c) and c:IsType(TYPE_MONSTER) and c:IsAbleToRemove() +end +function Auxiliary.RitualUltimateTarget(filter,level_function,greater_or_equal,summon_location,grave_filter,mat_filter,extra_target) + return function(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then + local mg=Duel.GetRitualMaterial(tp) + if mat_filter then mg=mg:Filter(mat_filter,nil,e,tp,true) end + local exg=nil + if grave_filter then + exg=Duel.GetMatchingGroup(Auxiliary.RitualExtraFilter,tp,LOCATION_GRAVE,0,nil,grave_filter) + end + return Duel.IsExistingMatchingCard(Auxiliary.RitualUltimateFilter,tp,summon_location,0,1,nil,filter,e,tp,mg,exg,level_function,greater_or_equal,true) + end + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,summon_location) + if grave_filter then + Duel.SetOperationInfo(0,CATEGORY_REMOVE,nil,0,tp,LOCATION_GRAVE) + end + if extra_target then + extra_target(e,tp,eg,ep,ev,re,r,rp) + end + end +end +function Auxiliary.RitualUltimateOperation(filter,level_function,greater_or_equal,summon_location,grave_filter,mat_filter,extra_operation) + return function(e,tp,eg,ep,ev,re,r,rp) + ::RitualUltimateSelectStart:: + local mg=Duel.GetRitualMaterial(tp) + if mat_filter then mg=mg:Filter(mat_filter,nil,e,tp) end + local exg=nil + if grave_filter then + exg=Duel.GetMatchingGroup(Auxiliary.RitualExtraFilter,tp,LOCATION_GRAVE,0,nil,grave_filter) + end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON) + local tg=Duel.SelectMatchingCard(tp,Auxiliary.NecroValleyFilter(Auxiliary.RitualUltimateFilter),tp,summon_location,0,1,1,nil,filter,e,tp,mg,exg,level_function,greater_or_equal) + local tc=tg:GetFirst() + local mat + if tc then + mg=mg:Filter(Card.IsCanBeRitualMaterial,tc,tc) + if exg then + mg:Merge(exg) + end + if tc.mat_filter then + mg=mg:Filter(tc.mat_filter,tc,tp) + else + mg:RemoveCard(tc) + end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RELEASE) + local lv=level_function(tc) + Auxiliary.GCheckAdditional=Auxiliary.RitualCheckAdditional(tc,lv,greater_or_equal) + mat=mg:SelectSubGroup(tp,Auxiliary.RitualCheck,true,1,lv,tp,tc,lv,greater_or_equal) + Auxiliary.GCheckAdditional=nil + if not mat then goto RitualUltimateSelectStart end + tc:SetMaterial(mat) + Duel.ReleaseRitualMaterial(mat) + Duel.BreakEffect() + Duel.SpecialSummon(tc,SUMMON_TYPE_RITUAL,tp,tp,false,true,POS_FACEUP) + tc:CompleteProcedure() + end + if extra_operation then + extra_operation(e,tp,eg,ep,ev,re,r,rp,tc,mat) + end + end +end +--Ritual Summon, geq fixed lv +function Auxiliary.AddRitualProcGreater(c,filter,summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) + return Auxiliary.AddRitualProcUltimate(c,filter,Card.GetOriginalLevel,"Greater",summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) +end +function Auxiliary.AddRitualProcGreaterCode(c,code1,summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) + Auxiliary.AddCodeList(c,code1) + return Auxiliary.AddRitualProcGreater(c,Auxiliary.FilterBoolFunction(Card.IsCode,code1),summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) +end +--Ritual Summon, equal to fixed lv +function Auxiliary.AddRitualProcEqual(c,filter,summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) + return Auxiliary.AddRitualProcUltimate(c,filter,Card.GetOriginalLevel,"Equal",summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) +end +function Auxiliary.AddRitualProcEqualCode(c,code1,summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) + Auxiliary.AddCodeList(c,code1) + return Auxiliary.AddRitualProcEqual(c,Auxiliary.FilterBoolFunction(Card.IsCode,code1),summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) +end +--Ritual Summon, equal to monster lv +function Auxiliary.AddRitualProcEqual2(c,filter,summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) + return Auxiliary.AddRitualProcUltimate(c,filter,Card.GetLevel,"Equal",summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) +end +function Auxiliary.AddRitualProcEqual2Code(c,code1,summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) + Auxiliary.AddCodeList(c,code1) + return Auxiliary.AddRitualProcEqual2(c,Auxiliary.FilterBoolFunction(Card.IsCode,code1),summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) +end +function Auxiliary.AddRitualProcEqual2Code2(c,code1,code2,summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) + Auxiliary.AddCodeList(c,code1,code2) + return Auxiliary.AddRitualProcEqual2(c,Auxiliary.FilterBoolFunction(Card.IsCode,code1,code2),summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) +end +--Ritual Summon, geq monster lv +function Auxiliary.AddRitualProcGreater2(c,filter,summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) + return Auxiliary.AddRitualProcUltimate(c,filter,Card.GetLevel,"Greater",summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) +end +function Auxiliary.AddRitualProcGreater2Code(c,code1,summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) + Auxiliary.AddCodeList(c,code1) + return Auxiliary.AddRitualProcGreater2(c,Auxiliary.FilterBoolFunction(Card.IsCode,code1),summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) +end +function Auxiliary.AddRitualProcGreater2Code2(c,code1,code2,summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) + Auxiliary.AddCodeList(c,code1,code2) + return Auxiliary.AddRitualProcGreater2(c,Auxiliary.FilterBoolFunction(Card.IsCode,code1,code2),summon_location,grave_filter,mat_filter,pause,extra_operation,extra_target) +end +--add procedure to Pendulum monster, also allows registeration of activation effect +function Auxiliary.EnablePendulumAttribute(c,reg) + if not Auxiliary.PendulumChecklist then + Auxiliary.PendulumChecklist=0 + local ge1=Effect.GlobalEffect() + ge1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) + ge1:SetCode(EVENT_PHASE_START+PHASE_DRAW) + ge1:SetOperation(Auxiliary.PendulumReset) + Duel.RegisterEffect(ge1,0) + end + local e1=Effect.CreateEffect(c) + e1:SetDescription(1163) + e1:SetType(EFFECT_TYPE_FIELD) + e1:SetCode(EFFECT_SPSUMMON_PROC_G) + e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE) + e1:SetRange(LOCATION_PZONE) + e1:SetCondition(Auxiliary.PendCondition()) + e1:SetOperation(Auxiliary.PendOperation()) + e1:SetValue(SUMMON_TYPE_PENDULUM) + c:RegisterEffect(e1) + --register by default + if reg==nil or reg then + local e2=Effect.CreateEffect(c) + e2:SetDescription(1160) + e2:SetType(EFFECT_TYPE_ACTIVATE) + e2:SetCode(EVENT_FREE_CHAIN) + e2:SetRange(LOCATION_HAND) + c:RegisterEffect(e2) + end +end +function Auxiliary.PendulumReset(e,tp,eg,ep,ev,re,r,rp) + Auxiliary.PendulumChecklist=0 +end +function Auxiliary.PConditionExtraFilterSpecific(c,e,tp,lscale,rscale,te) + if not te then return true end + local f=te:GetValue() + return not f or f(te,c,e,tp,lscale,rscale) +end +function Auxiliary.PConditionExtraFilter(c,e,tp,lscale,rscale,eset) + for _,te in ipairs(eset) do + if Auxiliary.PConditionExtraFilterSpecific(c,e,tp,lscale,rscale,te) then return true end + end + return false +end +function Auxiliary.PConditionFilter(c,e,tp,lscale,rscale,eset) + local lv=0 + if c.pendulum_level then + lv=c.pendulum_level + else + lv=c:GetLevel() + end + local bool=Auxiliary.PendulumSummonableBool(c) + return (c:IsLocation(LOCATION_HAND) or (c:IsFaceup() and c:IsType(TYPE_PENDULUM))) + and lv>lscale and lvrscale then lscale,rscale=rscale,lscale end + local loc=0 + if Duel.GetLocationCount(tp,LOCATION_MZONE)>0 then loc=loc+LOCATION_HAND end + if Duel.GetLocationCountFromEx(tp,tp,nil,TYPE_PENDULUM)>0 then loc=loc+LOCATION_EXTRA end + if loc==0 then return false end + local g=nil + if og then + g=og:Filter(Card.IsLocation,nil,loc) + else + g=Duel.GetFieldGroup(tp,loc,0) + end + return g:IsExists(Auxiliary.PConditionFilter,1,nil,e,tp,lscale,rscale,eset) + end +end +function Auxiliary.PendOperationCheck(ft1,ft2,ft) + return function(g) + local exg=g:Filter(Card.IsLocation,nil,LOCATION_EXTRA) + local mg=g-exg + return #g<=ft and #exg<=ft2 and #mg<=ft1 + end +end +function Auxiliary.PendOperation() + return function(e,tp,eg,ep,ev,re,r,rp,c,sg,og) + local rpz=Duel.GetFieldCard(tp,LOCATION_PZONE,1) + local lscale=c:GetLeftScale() + local rscale=rpz:GetRightScale() + if lscale>rscale then lscale,rscale=rscale,lscale end + local eset={Duel.IsPlayerAffectedByEffect(tp,EFFECT_EXTRA_PENDULUM_SUMMON)} + local tg=nil + local loc=0 + local ft1=Duel.GetLocationCount(tp,LOCATION_MZONE) + local ft2=Duel.GetLocationCountFromEx(tp,tp,nil,TYPE_PENDULUM) + local ft=Duel.GetUsableMZoneCount(tp) + local ect=c29724053 and Duel.IsPlayerAffectedByEffect(tp,29724053) and c29724053[tp] + if ect and ect0 then ft1=1 end + if ft2>0 then ft2=1 end + ft=1 + end + if ft1>0 then loc=loc|LOCATION_HAND end + if ft2>0 then loc=loc|LOCATION_EXTRA end + if og then + tg=og:Filter(Card.IsLocation,nil,loc):Filter(Auxiliary.PConditionFilter,nil,e,tp,lscale,rscale,eset) + else + tg=Duel.GetMatchingGroup(Auxiliary.PConditionFilter,tp,loc,0,nil,e,tp,lscale,rscale,eset) + end + local ce=nil + local b1=Auxiliary.PendulumChecklist&(0x1<0 + if b1 and b2 then + local options={1163} + for _,te in ipairs(eset) do + table.insert(options,te:GetDescription()) + end + local op=Duel.SelectOption(tp,table.unpack(options)) + if op>0 then + ce=eset[op] + end + elseif b2 and not b1 then + local options={} + for _,te in ipairs(eset) do + table.insert(options,te:GetDescription()) + end + local op=Duel.SelectOption(tp,table.unpack(options)) + ce=eset[op+1] + end + if ce then + tg=tg:Filter(Auxiliary.PConditionExtraFilterSpecific,nil,e,tp,lscale,rscale,ce) + end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON) + Auxiliary.GCheckAdditional=Auxiliary.PendOperationCheck(ft1,ft2,ft) + local g=tg:SelectSubGroup(tp,aux.TRUE,true,1,math.min(#tg,ft)) + Auxiliary.GCheckAdditional=nil + if not g then return end + if ce then + Duel.Hint(HINT_CARD,0,ce:GetOwner():GetOriginalCode()) + ce:UseCountLimit(tp) + else + Auxiliary.PendulumChecklist=Auxiliary.PendulumChecklist|(0x1<0 +end +function Auxiliary.PSSCompleteProcedure(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + if c:IsSummonType(SUMMON_TYPE_PENDULUM) then + c:CompleteProcedure() + end +end +--Link Summon +function Auxiliary.AddLinkProcedure(c,f,min,max,gf) + local e1=Effect.CreateEffect(c) + e1:SetDescription(1166) + e1:SetType(EFFECT_TYPE_FIELD) + e1:SetCode(EFFECT_SPSUMMON_PROC) + e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE) + e1:SetRange(LOCATION_EXTRA) + if max==nil then max=c:GetLink() end + e1:SetCondition(Auxiliary.LinkCondition(f,min,max,gf)) + e1:SetTarget(Auxiliary.LinkTarget(f,min,max,gf)) + e1:SetOperation(Auxiliary.LinkOperation(f,min,max,gf)) + e1:SetValue(SUMMON_TYPE_LINK) + c:RegisterEffect(e1) + return e1 +end +function Auxiliary.LConditionFilter(c,f,lc,e) + return (c:IsFaceup() or not c:IsOnField() or e:IsHasProperty(EFFECT_FLAG_SET_AVAILABLE)) + and c:IsCanBeLinkMaterial(lc) and (not f or f(c)) +end +function Auxiliary.LExtraFilter(c,f,lc,tp) + if c:IsOnField() and c:IsFacedown() then return false end + if not c:IsCanBeLinkMaterial(lc) or f and not f(c) then return false end + local le={c:IsHasEffect(EFFECT_EXTRA_LINK_MATERIAL,tp)} + for _,te in pairs(le) do + local tf=te:GetValue() + local related,valid=tf(te,lc,nil,c,tp) + if related then return true end + end + return false +end +function Auxiliary.GetLinkCount(c) + if c:IsType(TYPE_LINK) and c:GetLink()>1 then + return 1+0x10000*c:GetLink() + else return 1 end +end +function Auxiliary.GetLinkMaterials(tp,f,lc,e) + local mg=Duel.GetMatchingGroup(Auxiliary.LConditionFilter,tp,LOCATION_MZONE,0,nil,f,lc,e) + local mg2=Duel.GetMatchingGroup(Auxiliary.LExtraFilter,tp,LOCATION_HAND+LOCATION_SZONE,LOCATION_ONFIELD,nil,f,lc,tp) + if mg2:GetCount()>0 then mg:Merge(mg2) end + return mg +end +function Auxiliary.LCheckOtherMaterial(c,mg,lc,tp) + local le={c:IsHasEffect(EFFECT_EXTRA_LINK_MATERIAL,tp)} + local res1=false + local res2=true + for _,te in pairs(le) do + local f=te:GetValue() + local related,valid=f(te,lc,mg,c,tp) + if related then res2=false end + if related and valid then res1=true end + end + return res1 or res2 +end +function Auxiliary.LUncompatibilityFilter(c,sg,lc,tp) + local mg=sg:Filter(aux.TRUE,c) + return not Auxiliary.LCheckOtherMaterial(c,mg,lc,tp) +end +function Auxiliary.LCheckGoal(sg,tp,lc,gf,lmat) + return sg:CheckWithSumEqual(Auxiliary.GetLinkCount,lc:GetLink(),#sg,#sg) + and Duel.GetLocationCountFromEx(tp,tp,sg,lc)>0 and (not gf or gf(sg,lc,tp)) + and not sg:IsExists(Auxiliary.LUncompatibilityFilter,1,nil,sg,lc,tp) + and (not lmat or sg:IsContains(lmat)) +end +function Auxiliary.LExtraMaterialCount(mg,lc,tp) + for tc in aux.Next(mg) do + local le={tc:IsHasEffect(EFFECT_EXTRA_LINK_MATERIAL,tp)} + for _,te in pairs(le) do + local sg=mg:Filter(aux.TRUE,tc) + local f=te:GetValue() + local related,valid=f(te,lc,sg,tc,tp) + if related and valid then + te:UseCountLimit(tp) + end + end + end +end +function Auxiliary.LinkCondition(f,minc,maxc,gf) + return function(e,c,og,lmat,min,max) + if c==nil then return true end + if c:IsType(TYPE_PENDULUM) and c:IsFaceup() then return false end + local minc=minc + local maxc=maxc + if min then + if min>minc then minc=min end + if maxmaxc then return false end + end + local tp=c:GetControler() + local mg=nil + if og then + mg=og:Filter(Auxiliary.LConditionFilter,nil,f,c,e) + else + mg=Auxiliary.GetLinkMaterials(tp,f,c,e) + end + if lmat~=nil then + if not Auxiliary.LConditionFilter(lmat,f,c,e) then return false end + mg:AddCard(lmat) + end + local fg=Duel.GetMustMaterial(tp,EFFECT_MUST_BE_LMATERIAL) + if fg:IsExists(Auxiliary.MustMaterialCounterFilter,1,nil,mg) then return false end + Duel.SetSelectedCard(fg) + return mg:CheckSubGroup(Auxiliary.LCheckGoal,minc,maxc,tp,c,gf,lmat) + end +end +function Auxiliary.LinkTarget(f,minc,maxc,gf) + return function(e,tp,eg,ep,ev,re,r,rp,chk,c,og,lmat,min,max) + local minc=minc + local maxc=maxc + if min then + if min>minc then minc=min end + if maxmaxc then return false end + end + local mg=nil + if og then + mg=og:Filter(Auxiliary.LConditionFilter,nil,f,c,e) + else + mg=Auxiliary.GetLinkMaterials(tp,f,c,e) + end + if lmat~=nil then + if not Auxiliary.LConditionFilter(lmat,f,c,e) then return false end + mg:AddCard(lmat) + end + local fg=Duel.GetMustMaterial(tp,EFFECT_MUST_BE_LMATERIAL) + Duel.SetSelectedCard(fg) + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_LMATERIAL) + local cancel=Duel.IsSummonCancelable() + local sg=mg:SelectSubGroup(tp,Auxiliary.LCheckGoal,cancel,minc,maxc,tp,c,gf,lmat) + if sg then + sg:KeepAlive() + e:SetLabelObject(sg) + return true + else return false end + end +end +function Auxiliary.LinkOperation(f,minc,maxc,gf) + return function(e,tp,eg,ep,ev,re,r,rp,c,og,lmat,min,max) + local g=e:GetLabelObject() + c:SetMaterial(g) + Auxiliary.LExtraMaterialCount(g,c,tp) + Duel.SendtoGrave(g,REASON_MATERIAL+REASON_LINK) + g:DeleteGroup() + end +end +function Auxiliary.EnableExtraDeckSummonCountLimit() + if Auxiliary.ExtraDeckSummonCountLimit~=nil then return end + Auxiliary.ExtraDeckSummonCountLimit={} + Auxiliary.ExtraDeckSummonCountLimit[0]=1 + Auxiliary.ExtraDeckSummonCountLimit[1]=1 + local ge1=Effect.GlobalEffect() + ge1:SetType(EFFECT_TYPE_CONTINUOUS+EFFECT_TYPE_FIELD) + ge1:SetCode(EVENT_PHASE_START+PHASE_DRAW) + ge1:SetOperation(Auxiliary.ExtraDeckSummonCountLimitReset) + Duel.RegisterEffect(ge1,0) +end +function Auxiliary.ExtraDeckSummonCountLimitReset() + Auxiliary.ExtraDeckSummonCountLimit[0]=1 + Auxiliary.ExtraDeckSummonCountLimit[1]=1 +end +--Fusion Monster is unnecessary to use this +function Auxiliary.AddMaterialCodeList(c,...) + if c:IsStatus(STATUS_COPYING_EFFECT) then return end + local mat={} + for _,code in ipairs{...} do + mat[code]=true + end + if c.material==nil then + local mt=getmetatable(c) + mt.material=mat + end + for index,_ in pairs(mat) do + Auxiliary.AddCodeList(c,index) + end +end +function Auxiliary.IsMaterialListCode(c,code) + return c.material and c.material[code] +end +function Auxiliary.IsMaterialListSetCard(c,setcode) + if not c.material_setcode then return false end + if type(c.material_setcode)=='table' then + for i,scode in ipairs(c.material_setcode) do + if setcode&0xfff==scode&0xfff and setcode&scode==setcode then return true end + end + else + return setcode&0xfff==c.material_setcode&0xfff and setcode&c.material_setcode==setcode + end + return false +end +function Auxiliary.IsMaterialListType(c,type) + return c.material_type and type&c.material_type==type +end +function Auxiliary.GetMaterialListCount(c) + if not c.material_count then return 0,0 end + return c.material_count[1],c.material_count[2] +end +function Auxiliary.AddCodeList(c,...) + if c:IsStatus(STATUS_COPYING_EFFECT) then return end + if c.card_code_list==nil then + local mt=getmetatable(c) + mt.card_code_list={} + for _,code in ipairs{...} do + mt.card_code_list[code]=true + end + else + for _,code in ipairs{...} do + c.card_code_list[code]=true + end + end +end +function Auxiliary.IsCodeListed(c,code) + return c.card_code_list and c.card_code_list[code] +end +function Auxiliary.AddSetNameMonsterList(c,...) + if c:IsStatus(STATUS_COPYING_EFFECT) then return end + if c.setcode_monster_list==nil then + local mt=getmetatable(c) + mt.setcode_monster_list={} + for i,scode in ipairs{...} do + mt.setcode_monster_list[i]=scode + end + else + for i,scode in ipairs{...} do + c.setcode_monster_list[i]=scode + end + end +end +function Auxiliary.IsSetNameMonsterListed(c,setcode) + if not c.setcode_monster_list then return false end + for i,scode in ipairs(c.setcode_monster_list) do + if setcode&0xfff==scode&0xfff and setcode&scode==setcode then return true end + end + return false +end +function Auxiliary.IsCounterAdded(c,counter) + if not c.counter_add_list then return false end + for i,ccounter in ipairs(c.counter_add_list) do + if counter==ccounter then return true end + end + return false +end +function Auxiliary.IsTypeInText(c,type) + return c.has_text_type and type&c.has_text_type==type +end +function Auxiliary.GetAttributeCount(g) + if #g==0 then return 0 end + local att=0 + for tc in Auxiliary.Next(g) do + att=att|tc:GetAttribute() + end + local ct=0 + while att~=0 do + if att&0x1~=0 then ct=ct+1 end + att=att>>1 + end + return ct +end +function Auxiliary.IsInGroup(c,g) + return g:IsContains(c) +end +--return the column of card c (from the viewpoint of p) +function Auxiliary.GetColumn(c,p) + local seq=c:GetSequence() + if c:IsLocation(LOCATION_MZONE) then + if seq==5 then + seq=1 + elseif seq==6 then + seq=3 + end + elseif c:IsLocation(LOCATION_SZONE) then + if seq>4 then + return nil + end + else + return nil + end + if c:IsControler(p or 0) then + return seq + else + return 4-seq + end +end +--return the column of monster zone seq (from the viewpoint of controller) +function Auxiliary.MZoneSequence(seq) + if seq==5 then return 1 end + if seq==6 then return 3 end + return seq +end +--return the column of spell/trap zone seq (from the viewpoint of controller) +function Auxiliary.SZoneSequence(seq) + if seq>4 then return nil end + return seq +end +--generate the value function of EFFECT_CHANGE_BATTLE_DAMAGE on monsters +function Auxiliary.ChangeBattleDamage(player,value) + return function(e,damp) + if player==0 then + if e:GetOwnerPlayer()==damp then + return value + else + return -1 + end + elseif player==1 then + if e:GetOwnerPlayer()==1-damp then + return value + else + return -1 + end + end + end +end +--filter for "negate the effects of a face-up monster" (無限泡影/Infinite Impermanence) +function Auxiliary.NegateMonsterFilter(c) + return c:IsFaceup() and not c:IsDisabled() and (c:IsType(TYPE_EFFECT) or c:GetOriginalType()&TYPE_EFFECT~=0) +end +--filter for "negate the effects of an Effect Monster" (エフェクト・ヴェーラー/Effect Veiler) +function Auxiliary.NegateEffectMonsterFilter(c) + return c:IsFaceup() and not c:IsDisabled() and c:IsType(TYPE_EFFECT) +end +--filter for "negate the effects of a face-up card" +function Auxiliary.NegateAnyFilter(c) + if c:IsType(TYPE_TRAPMONSTER) then + return c:IsFaceup() + elseif c:IsType(TYPE_SPELL+TYPE_TRAP) then + return c:IsFaceup() and not c:IsDisabled() + else + return aux.NegateMonsterFilter(c) + end +end +--alias for compatibility +Auxiliary.disfilter1=Auxiliary.NegateAnyFilter +--condition of EVENT_BATTLE_DESTROYING +function Auxiliary.bdcon(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + return c:IsRelateToBattle() +end +--condition of EVENT_BATTLE_DESTROYING + opponent monster +function Auxiliary.bdocon(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + return c:IsRelateToBattle() and c:IsStatus(STATUS_OPPO_BATTLE) +end +--condition of EVENT_BATTLE_DESTROYING + to_grave +function Auxiliary.bdgcon(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + local bc=c:GetBattleTarget() + return c:IsRelateToBattle() and bc:IsLocation(LOCATION_GRAVE) and bc:IsType(TYPE_MONSTER) +end +--condition of EVENT_BATTLE_DESTROYING + opponent monster + to_grave +function Auxiliary.bdogcon(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + local bc=c:GetBattleTarget() + return c:IsRelateToBattle() and c:IsStatus(STATUS_OPPO_BATTLE) and bc:IsLocation(LOCATION_GRAVE) and bc:IsType(TYPE_MONSTER) +end +--condition of EVENT_DAMAGE_STEP_END + this monster is releate to battle +function Auxiliary.dsercon(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + return c:IsRelateToBattle() or c:IsStatus(STATUS_BATTLE_DESTROYED) +end +--condition of EVENT_TO_GRAVE + destroyed by opponent +function Auxiliary.dogcon(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + return c:IsPreviousControler(tp) and c:IsReason(REASON_DESTROY) and rp==1-tp +end +--condition of EVENT_TO_GRAVE + destroyed by opponent + from field +function Auxiliary.dogfcon(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + return c:IsPreviousLocation(LOCATION_ONFIELD) and c:IsPreviousControler(tp) + and c:IsReason(REASON_DESTROY) and rp==1-tp +end +--condition of "except the turn this card was sent to the Graveyard" +function Auxiliary.exccon(e) + return Duel.GetTurnCount()~=e:GetHandler():GetTurnID() or e:GetHandler():IsReason(REASON_RETURN) +end +--condition of checking battle phase availability +function Auxiliary.bpcon(e,tp,eg,ep,ev,re,r,rp) + return Duel.IsAbleToEnterBP() or (Duel.GetCurrentPhase()>=PHASE_BATTLE_START and Duel.GetCurrentPhase()<=PHASE_BATTLE) +end +--condition of free chain effects changing ATK/DEF +function Auxiliary.dscon(e,tp,eg,ep,ev,re,r,rp) + return Duel.GetCurrentPhase()~=PHASE_DAMAGE or not Duel.IsDamageCalculated() +end +--flag effect for spell counter +function Auxiliary.chainreg(e,tp,eg,ep,ev,re,r,rp) + if e:GetHandler():GetFlagEffect(1)==0 then + e:GetHandler():RegisterFlagEffect(1,RESET_EVENT+RESETS_STANDARD-RESET_TURN_SET+RESET_CHAIN,0,1) + end +end +--default filter for EFFECT_CANNOT_BE_BATTLE_TARGET +function Auxiliary.imval1(e,c) + return not c:IsImmuneToEffect(e) +end +--filter for EFFECT_INDESTRUCTABLE_EFFECT + self +function Auxiliary.indsval(e,re,rp) + return rp==e:GetHandlerPlayer() +end +--filter for EFFECT_INDESTRUCTABLE_EFFECT + opponent +function Auxiliary.indoval(e,re,rp) + return rp==1-e:GetHandlerPlayer() +end +--filter for EFFECT_CANNOT_BE_EFFECT_TARGET + self +function Auxiliary.tgsval(e,re,rp) + return rp==e:GetHandlerPlayer() +end +--filter for EFFECT_CANNOT_BE_EFFECT_TARGET + opponent +function Auxiliary.tgoval(e,re,rp) + return rp==1-e:GetHandlerPlayer() +end +--filter for non-zero ATK +function Auxiliary.nzatk(c) + return c:IsFaceup() and c:GetAttack()>0 +end +--filter for non-zero DEF +function Auxiliary.nzdef(c) + return c:IsFaceup() and c:GetDefense()>0 +end +--flag effect for summon/sp_summon turn +function Auxiliary.sumreg(e,tp,eg,ep,ev,re,r,rp) + local tc=eg:GetFirst() + local code=e:GetLabel() + while tc do + if tc:GetOriginalCode()==code then + tc:RegisterFlagEffect(code,RESET_EVENT+0x1ec0000+RESET_PHASE+PHASE_END,0,1) + end + tc=eg:GetNext() + end +end +--for EVENT_BE_MATERIAL effect releated to the summoned monster +function Auxiliary.CreateMaterialReasonCardRelation(c,te) + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS) + e1:SetCode(EVENT_BE_MATERIAL) + e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE) + e1:SetOperation(Auxiliary.MaterialReasonCardReg) + e1:SetLabelObject(te) + c:RegisterEffect(e1) +end +function Auxiliary.MaterialReasonCardReg(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + local te=e:GetLabelObject() + c:GetReasonCard():CreateEffectRelation(te) +end +--sp_summon condition for fusion monster +function Auxiliary.fuslimit(e,se,sp,st) + return st&SUMMON_TYPE_FUSION==SUMMON_TYPE_FUSION +end +--sp_summon condition for ritual monster +function Auxiliary.ritlimit(e,se,sp,st) + return st&SUMMON_TYPE_RITUAL==SUMMON_TYPE_RITUAL +end +--sp_summon condition for synchro monster +function Auxiliary.synlimit(e,se,sp,st) + return st&SUMMON_TYPE_SYNCHRO==SUMMON_TYPE_SYNCHRO +end +--sp_summon condition for xyz monster +function Auxiliary.xyzlimit(e,se,sp,st) + return st&SUMMON_TYPE_XYZ==SUMMON_TYPE_XYZ +end +--sp_summon condition for pendulum monster +function Auxiliary.penlimit(e,se,sp,st) + return st&SUMMON_TYPE_PENDULUM==SUMMON_TYPE_PENDULUM +end +--sp_summon condition for link monster +function Auxiliary.linklimit(e,se,sp,st) + return st&SUMMON_TYPE_LINK==SUMMON_TYPE_LINK +end +--effects inflicting damage to tp +function Auxiliary.damcon1(e,tp,eg,ep,ev,re,r,rp) + local e1=Duel.IsPlayerAffectedByEffect(tp,EFFECT_REVERSE_DAMAGE) + local e2=Duel.IsPlayerAffectedByEffect(tp,EFFECT_REVERSE_RECOVER) + local rd=e1 and not e2 + local rr=not e1 and e2 + local ex,cg,ct,cp,cv=Duel.GetOperationInfo(ev,CATEGORY_DAMAGE) + if ex and (cp==tp or cp==PLAYER_ALL) and not rd and not Duel.IsPlayerAffectedByEffect(tp,EFFECT_NO_EFFECT_DAMAGE) then + return true + end + ex,cg,ct,cp,cv=Duel.GetOperationInfo(ev,CATEGORY_RECOVER) + return ex and (cp==tp or cp==PLAYER_ALL) and rr and not Duel.IsPlayerAffectedByEffect(tp,EFFECT_NO_EFFECT_DAMAGE) +end +--filter for the immune effect of qli monsters +function Auxiliary.qlifilter(e,te) + if te:IsActiveType(TYPE_MONSTER) and te:IsActivated() then + local lv=e:GetHandler():GetLevel() + local ec=te:GetOwner() + if ec:IsType(TYPE_LINK) then + return false + elseif ec:IsType(TYPE_XYZ) then + return ec:GetOriginalRank()0 +end +--sp_summon condition for evolsaur monsters +function Auxiliary.evospcon(e,tp,eg,ep,ev,re,r,rp) + local st=e:GetHandler():GetSummonType() + return st&SUMMON_VALUE_EVOLTILE>0 +end +--filter for necro_valley test +function Auxiliary.NecroValleyFilter(f) + return function(target,...) + return (not f or f(target,...)) and not target:IsHasEffect(EFFECT_NECRO_VALLEY) + end +end +--Necrovalley test for effect with not certain target or not certain action +function Auxiliary.NecroValleyNegateCheck(v) + if not Duel.IsChainDisablable(0) then return false end + local g=Group.CreateGroup() + if Auxiliary.GetValueType(v)=="Card" then g:AddCard(v) end + if Auxiliary.GetValueType(v)=="Group" then g:Merge(v) end + if g:IsExists(Card.IsHasEffect,1,nil,EFFECT_NECRO_VALLEY) then + Duel.NegateEffect(0) + return true + end + return false +end +--Ursarctic common summon from hand effect +function Auxiliary.AddUrsarcticSpSummonEffect(c) + local e1=Effect.CreateEffect(c) + e1:SetCategory(CATEGORY_SPECIAL_SUMMON) + e1:SetType(EFFECT_TYPE_QUICK_O) + e1:SetCode(EVENT_FREE_CHAIN) + e1:SetRange(LOCATION_HAND) + e1:SetHintTiming(0,TIMINGS_CHECK_MONSTER+TIMING_MAIN_END) + e1:SetCondition(Auxiliary.UrsarcticSpSummonCondition) + e1:SetCost(Auxiliary.UrsarcticSpSummonCost) + e1:SetTarget(Auxiliary.UrsarcticSpSummonTarget) + e1:SetOperation(Auxiliary.UrsarcticSpSummonOperation) + c:RegisterEffect(e1) + return e1 +end +function Auxiliary.UrsarcticSpSummonCondition(e,tp,eg,ep,ev,re,r,rp) + return Duel.GetCurrentPhase()==PHASE_MAIN1 or Duel.GetCurrentPhase()==PHASE_MAIN2 +end +function Auxiliary.UrsarcticReleaseFilter(c) + return c:IsLevelAbove(7) and c:IsLocation(LOCATION_HAND) +end +function Auxiliary.UrsarcticExCostFilter(c,tp) + return c:IsAbleToRemoveAsCost() and (c:IsHasEffect(16471775,tp) or c:IsHasEffect(89264428,tp)) +end +function Auxiliary.UrsarcticSpSummonCost(e,tp,eg,ep,ev,re,r,rp,chk) + local g1=Duel.GetReleaseGroup(tp,true):Filter(Auxiliary.UrsarcticReleaseFilter,e:GetHandler()) + local g2=Duel.GetMatchingGroup(Auxiliary.UrsarcticExCostFilter,tp,LOCATION_GRAVE,0,nil,tp) + g1:Merge(g2) + if chk==0 then return g1:GetCount()>0 end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RELEASE) + local tc=g1:Select(tp,1,1,nil):GetFirst() + local te=tc:IsHasEffect(16471775,tp) or tc:IsHasEffect(89264428,tp) + if te then + te:UseCountLimit(tp) + Duel.Remove(tc,POS_FACEUP,REASON_EFFECT+REASON_REPLACE) + else + Duel.Release(tc,REASON_COST) + end +end +function Auxiliary.UrsarcticSpSummonTarget(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return Duel.GetLocationCount(tp,LOCATION_MZONE)>0 + and e:GetHandler():IsCanBeSpecialSummoned(e,0,tp,false,false) end + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,e:GetHandler(),1,0,0) +end +function Auxiliary.UrsarcticSpSummonOperation(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + if c:IsRelateToEffect(e) then + Duel.SpecialSummon(c,0,tp,tp,false,false,POS_FACEUP) + end + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_FIELD) + e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET) + e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON) + e1:SetTargetRange(1,0) + e1:SetTarget(Auxiliary.UrsarcticSpSummonLimit) + e1:SetReset(RESET_PHASE+PHASE_END) + Duel.RegisterEffect(e1,tp) +end +function Auxiliary.UrsarcticSpSummonLimit(e,c) + return c:IsLevel(0) +end +--Drytron common summon effect +function Auxiliary.AddDrytronSpSummonEffect(c,func) + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_IGNITION) + e1:SetRange(LOCATION_HAND+LOCATION_GRAVE) + e1:SetCost(Auxiliary.DrytronSpSummonCost) + e1:SetTarget(Auxiliary.DrytronSpSummonTarget) + e1:SetOperation(Auxiliary.DrytronSpSummonOperation(func)) + c:RegisterEffect(e1) + Duel.AddCustomActivityCounter(97148796,ACTIVITY_SPSUMMON,Auxiliary.DrytronCounterFilter) + return e1 +end +function Auxiliary.DrytronCounterFilter(c) + return not c:IsSummonableCard() +end +function Auxiliary.DrytronCostFilter(c,tp) + return (c:IsSetCard(0x154) or c:IsType(TYPE_RITUAL)) and c:IsType(TYPE_MONSTER) and Duel.GetMZoneCount(tp,c)>0 + and (c:IsControler(tp) or c:IsFaceup()) +end +function Auxiliary.DrytronExtraCostFilter(c,tp) + return c:IsAbleToRemove() and c:IsHasEffect(89771220,tp) +end +function Auxiliary.DrytronSpSummonCost(e,tp,eg,ep,ev,re,r,rp,chk) + e:SetLabel(100) + local g1=Duel.GetReleaseGroup(tp,true):Filter(Auxiliary.DrytronCostFilter,e:GetHandler(),tp) + local g2=Duel.GetMatchingGroup(Auxiliary.DrytronExtraCostFilter,tp,LOCATION_GRAVE,0,nil,tp) + g1:Merge(g2) + if chk==0 then return #g1>0 and Duel.GetCustomActivityCount(97148796,tp,ACTIVITY_SPSUMMON)==0 end + local e1=Effect.CreateEffect(e:GetHandler()) + e1:SetType(EFFECT_TYPE_FIELD) + e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON) + e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_OATH) + e1:SetTargetRange(1,0) + e1:SetTarget(Auxiliary.DrytronSpSummonLimit) + e1:SetReset(RESET_PHASE+PHASE_END) + Duel.RegisterEffect(e1,tp) + --cant special summon summonable card check + local e2=Effect.CreateEffect(e:GetHandler()) + e2:SetType(EFFECT_TYPE_FIELD) + e2:SetCode(97148796) + e2:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_OATH) + e2:SetTargetRange(1,0) + e2:SetReset(RESET_PHASE+PHASE_END) + Duel.RegisterEffect(e2,tp) + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RELEASE) + local rg=g1:Select(tp,1,1,nil) + local tc=rg:GetFirst() + local te=tc:IsHasEffect(89771220,tp) + if te then + te:UseCountLimit(tp) + Duel.Remove(tc,POS_FACEUP,REASON_EFFECT+REASON_REPLACE) + else + Auxiliary.UseExtraReleaseCount(rg,tp) + Duel.Release(tc,REASON_COST) + end +end +function Auxiliary.DrytronSpSummonLimit(e,c,sump,sumtype,sumpos,targetp,se) + return c:IsSummonableCard() +end +function Auxiliary.DrytronSpSummonTarget(e,tp,eg,ep,ev,re,r,rp,chk) + local res=e:GetLabel()==100 or Duel.GetLocationCount(tp,LOCATION_MZONE)>0 + if chk==0 then + e:SetLabel(0) + return res and e:GetHandler():IsCanBeSpecialSummoned(e,0,tp,false,false,POS_FACEUP_DEFENSE) + end + e:SetLabel(0) + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,e:GetHandler(),1,0,0) +end +function Auxiliary.DrytronSpSummonOperation(func) + return function(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + if not c:IsRelateToEffect(e) then return end + if Duel.SpecialSummon(c,0,tp,tp,false,false,POS_FACEUP_DEFENSE)~=0 then func(e,tp) end + end +end +--additional destroy effect for the Labrynth field +function Auxiliary.LabrynthDestroyOp(e,tp,res) + local c=e:GetHandler() + local chk=not c:IsStatus(STATUS_ACT_FROM_HAND) and c:IsSetCard(0x117e) and c:GetType()==TYPE_TRAP and e:IsHasType(EFFECT_TYPE_ACTIVATE) + local exc=nil + if c:IsStatus(STATUS_LEAVE_CONFIRMED) then exc=c end + local te=Duel.IsPlayerAffectedByEffect(tp,33407125) + if chk and te + and Duel.IsExistingMatchingCard(nil,tp,LOCATION_ONFIELD,LOCATION_ONFIELD,1,exc) + and Duel.SelectYesNo(tp,aux.Stringid(33407125,0)) then + if res>0 then Duel.BreakEffect() end + Duel.Hint(HINT_CARD,0,33407125) + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_DESTROY) + local dg=Duel.SelectMatchingCard(tp,nil,tp,LOCATION_ONFIELD,LOCATION_ONFIELD,1,1,exc) + Duel.HintSelection(dg) + Duel.Destroy(dg,REASON_EFFECT) + te:UseCountLimit(tp) + end +end +--shortcut for Gizmek cards +function Auxiliary.AtkEqualsDef(c) + if not c:IsType(TYPE_MONSTER) or c:IsType(TYPE_LINK) then return false end + if c:GetAttack()~=c:GetDefense() then return false end + return c:IsLocation(LOCATION_MZONE) or c:GetTextAttack()>=0 and c:GetTextDefense()>=0 +end +--shortcut for self-banish costs +function Auxiliary.bfgcost(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return e:GetHandler():IsAbleToRemoveAsCost() end + Duel.Remove(e:GetHandler(),POS_FACEUP,REASON_COST) +end +--check for cards with different names +function Auxiliary.dncheck(g) + return g:GetClassCount(Card.GetCode)==#g +end +--check for cards with different levels +function Auxiliary.dlvcheck(g) + return g:GetClassCount(Card.GetLevel)==#g +end +--check for cards with different ranks +function Auxiliary.drkcheck(g) + return g:GetClassCount(Card.GetRank)==#g +end +--check for cards with different links +function Auxiliary.dlkcheck(g) + return g:GetClassCount(Card.GetLink)==#g +end +--check for cards with different attributes +function Auxiliary.dabcheck(g) + return g:GetClassCount(Card.GetAttribute)==#g +end +--check for cards with different races +function Auxiliary.drccheck(g) + return g:GetClassCount(Card.GetRace)==#g +end +--check for group with 2 cards, each card match f with a1/a2 as argument +function Auxiliary.gfcheck(g,f,a1,a2) + if #g~=2 then return false end + local c1=g:GetFirst() + local c2=g:GetNext() + return f(c1,a1) and f(c2,a2) or f(c2,a1) and f(c1,a2) +end +--check for group with 2 cards, each card match f1 with a1, f2 with a2 as argument +function Auxiliary.gffcheck(g,f1,a1,f2,a2) + if #g~=2 then return false end + local c1=g:GetFirst() + local c2=g:GetNext() + return f1(c1,a1) and f2(c2,a2) or f1(c2,a1) and f2(c1,a2) +end +function Auxiliary.mzctcheck(g,tp) + return Duel.GetMZoneCount(tp,g)>0 +end +function Auxiliary.mzctcheckrel(g,tp) + return Duel.GetMZoneCount(tp,g)>0 and Duel.CheckReleaseGroup(tp,Auxiliary.IsInGroup,#g,nil,g) +end +--used for "except this card" +function Auxiliary.ExceptThisCard(e) + local c=e:GetHandler() + if c:IsRelateToChain() then return c else return nil end +end +--used for multi-linked zone(zone linked by two or more link monsters) +function Auxiliary.GetMultiLinkedZone(tp) + local f=function(c) + return c:IsFaceup() and c:IsType(TYPE_LINK) + end + local lg=Duel.GetMatchingGroup(f,tp,LOCATION_MZONE,LOCATION_MZONE,nil) + local multi_linked_zone=0 + local single_linked_zone=0 + for tc in aux.Next(lg) do + local zone=tc:GetLinkedZone(tp)&0x7f + multi_linked_zone=single_linked_zone&zone|multi_linked_zone + single_linked_zone=single_linked_zone~zone + end + return multi_linked_zone +end +Auxiliary.SubGroupCaptured=nil +Auxiliary.GCheckAdditional=nil +function Auxiliary.CheckGroupRecursive(c,sg,g,f,min,max,ext_params) + sg:AddCard(c) + if Auxiliary.GCheckAdditional and not Auxiliary.GCheckAdditional(sg,c,g,f,min,max,ext_params) then + sg:RemoveCard(c) + return false + end + local res=(#sg>=min and #sg<=max and f(sg,table.unpack(ext_params))) + or (#sg=min and #sg<=max and f(sg,table.unpack(ext_params)) + if res then + Auxiliary.SubGroupCaptured:Clear() + Auxiliary.SubGroupCaptured:Merge(sg) + else + res=#sgmax then return false end + local ext_params={...} + local sg=Duel.GrabSelectedCard() + if #sg>max or #(g+sg)=min and #sg<=max and f(sg,...) and (not Auxiliary.GCheckAdditional or Auxiliary.GCheckAdditional(sg,nil,g,f,min,max,ext_params)) then return true end + local eg=g:Clone() + for c in aux.Next(g-sg) do + if Auxiliary.CheckGroupRecursive(c,sg,eg,f,min,max,ext_params) then return true end + eg:RemoveCard(c) + end + return false +end +function Group.SelectSubGroup(g,tp,f,cancelable,min,max,...) + Auxiliary.SubGroupCaptured=Group.CreateGroup() + local min=min or 1 + local max=max or #g + local ext_params={...} + local sg=Group.CreateGroup() + local fg=Duel.GrabSelectedCard() + if #fg>max or min>max or #(g+fg)=min and #sg<=max and f(sg,...)) + while #sg=min and #sg<=max and f(sg,...)) + if #cg==0 then break end + local cancel=not finish and cancelable + local tc=cg:SelectUnselect(sg,tp,finish,cancel,min,max) + if not tc then break end + if not fg:IsContains(tc) then + if not sg:IsContains(tc) then + sg:AddCard(tc) + if #sg==max then finish=true end + else + sg:RemoveCard(tc) + end + elseif cancelable then + return nil + end + end + if finish then + return sg + else + return nil + end +end +function Auxiliary.CreateChecks(f,list) + local checks={} + for i=1,#list do + checks[i]=function(c) return f(c,list[i]) end + end + return checks +end +function Auxiliary.CheckGroupRecursiveEach(c,sg,g,f,checks,ext_params) + if not checks[1+#sg](c) then + return false + end + sg:AddCard(c) + if Auxiliary.GCheckAdditional and not Auxiliary.GCheckAdditional(sg,c,g,f,min,max,ext_params) then + sg:RemoveCard(c) + return false + end + local res + if #sg==#checks then + res=f(sg,table.unpack(ext_params)) + else + res=g:IsExists(Auxiliary.CheckGroupRecursiveEach,1,sg,sg,g,f,checks,ext_params) + end + sg:RemoveCard(c) + return res +end +function Group.CheckSubGroupEach(g,checks,f,...) + if f==nil then f=Auxiliary.TRUE end + if #g<#checks then return false end + local ext_params={...} + local sg=Group.CreateGroup() + return g:IsExists(Auxiliary.CheckGroupRecursiveEach,1,sg,sg,g,f,checks,ext_params) +end +function Group.SelectSubGroupEach(g,tp,checks,cancelable,f,...) + if cancelable==nil then cancelable=false end + if f==nil then f=Auxiliary.TRUE end + local ct=#checks + local ext_params={...} + local sg=Group.CreateGroup() + local finish=false + while #sg0 then + Duel.ConfirmCards(1-c:GetControler(),cg) + end + Duel.SendtoDeck(g,nil,SEQ_DECKSHUFFLE,REASON_COST) + end +end +--return the global index of the zone in (p,loc,seq) +function Auxiliary.SequenceToGlobal(p,loc,seq) + if p~=0 and p~=1 then + return 0 + end + if loc==LOCATION_MZONE then + if seq<=6 then + return 0x0001<<(16*p+seq) + else + return 0 + end + elseif loc == LOCATION_SZONE then + if seq<=4 then + return 0x0100<<(16*p+seq) + else + return 0 + end + else + return 0 + end +end +--use the count limit of Lair of Darkness if the tributes are not selected by Duel.SelectReleaseGroup +function Auxiliary.UseExtraReleaseCount(g,tp) + local eg=g:Filter(Auxiliary.ExtraReleaseFilter,nil,tp) + for ec in Auxiliary.Next(eg) do + local te=ec:IsHasEffect(EFFECT_EXTRA_RELEASE_NONSUM,tp) + if te then te:UseCountLimit(tp) end + end +end +function Auxiliary.ExtraReleaseFilter(c,tp) + return c:IsControler(1-tp) and c:IsHasEffect(EFFECT_EXTRA_RELEASE_NONSUM,tp) +end +function Auxiliary.IsSpecialSummonedByEffect(e) + return not ((e:GetCode()==EFFECT_SPSUMMON_PROC or e:GetCode()==EFFECT_SPSUMMON_PROC_G) and e:GetProperty()&(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)==(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)) +end +-- +function Auxiliary.GetCappedLevel(c) + local lv=c:GetLevel() + if lv>MAX_PARAMETER then + return MAX_PARAMETER + else + return lv + end +end +-- +function Auxiliary.GetCappedAttack(c) + local x=c:GetAttack() + if x>MAX_PARAMETER then + return MAX_PARAMETER + else + return x + end +end +--when this card is sent to grave, record the reason effect +--to check whether the reason effect do something simultaneously +--so the "while this card is in your GY" condition isn't met +function Auxiliary.AddThisCardInGraveAlreadyCheck(c) + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS) + e1:SetCode(EVENT_TO_GRAVE) + e1:SetCondition(Auxiliary.ThisCardInGraveAlreadyCheckReg) + c:RegisterEffect(e1) + return e1 +end +function Auxiliary.ThisCardInGraveAlreadyCheckReg(e,tp,eg,ep,ev,re,r,rp) + --condition of continous effect will be checked before other effects + if re==nil then return false end + if e:GetLabelObject()~=nil then return false end + if (r&REASON_EFFECT)>0 then + e:SetLabelObject(re) + local e1=Effect.CreateEffect(e:GetHandler()) + e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) + e1:SetCode(EVENT_CHAIN_END) + e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE) + e1:SetOperation(Auxiliary.ThisCardInGraveAlreadyReset1) + e1:SetLabelObject(e) + Duel.RegisterEffect(e1,tp) + local e2=e1:Clone() + e2:SetCode(EVENT_BREAK_EFFECT) + e2:SetOperation(Auxiliary.ThisCardInGraveAlreadyReset2) + e2:SetReset(RESET_CHAIN) + e2:SetLabelObject(e1) + Duel.RegisterEffect(e2,tp) + elseif (r&REASON_MATERIAL)>0 or not re:IsActivated() and (r&REASON_COST)>0 then + e:SetLabelObject(re) + local reset_event=EVENT_SPSUMMON + if re:GetCode()~=EFFECT_SPSUMMON_PROC then reset_event=EVENT_SUMMON end + local e1=Effect.CreateEffect(e:GetHandler()) + e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) + e1:SetCode(reset_event) + e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE) + e1:SetOperation(Auxiliary.ThisCardInGraveAlreadyReset1) + e1:SetLabelObject(e) + Duel.RegisterEffect(e1,tp) + end + return false +end +function Auxiliary.ThisCardInGraveAlreadyReset1(e) + --this will run after EVENT_SPSUMMON_SUCCESS + e:GetLabelObject():SetLabelObject(nil) + e:Reset() +end +function Auxiliary.ThisCardInGraveAlreadyReset2(e) + local e1=e:GetLabelObject() + e1:GetLabelObject():SetLabelObject(nil) + e1:Reset() + e:Reset() +end +--Player p place g on the top of Deck in any order +function Auxiliary.PlaceCardsOnDeckTop(p,g,reason) + if reason==nil then reason=REASON_EFFECT end + Duel.SendtoDeck(g,nil,SEQ_DECKTOP,reason) + local rg=Duel.GetOperatedGroup() + local og=rg:Filter(Card.IsLocation,nil,LOCATION_DECK) + local ct1=og:FilterCount(Card.IsControler,nil,p) + local ct2=og:FilterCount(Card.IsControler,nil,1-p) + if ct1>1 then + Duel.SortDecktop(p,p,ct1) + end + if ct2>1 then + Duel.SortDecktop(p,1-p,ct2) + end + return #rg +end +--Player p place g on the bottom of Deck in any order +function Auxiliary.PlaceCardsOnDeckBottom(p,g,reason) + if reason==nil then reason=REASON_EFFECT end + Duel.SendtoDeck(g,nil,SEQ_DECKTOP,reason) + local rg=Duel.GetOperatedGroup() + local og=rg:Filter(Card.IsLocation,nil,LOCATION_DECK) + local ct1=og:FilterCount(Card.IsControler,nil,p) + local ct2=og:FilterCount(Card.IsControler,nil,1-p) + if ct1>0 then + if ct1>1 then + Duel.SortDecktop(p,p,ct1) + end + for i=1,ct1 do + local tc=Duel.GetDecktopGroup(p,1):GetFirst() + Duel.MoveSequence(tc,SEQ_DECKBOTTOM) + end + end + if ct2>0 then + if ct2>1 then + Duel.SortDecktop(p,1-p,ct2) + end + for i=1,ct2 do + local tc=Duel.GetDecktopGroup(1-p,1):GetFirst() + Duel.MoveSequence(tc,SEQ_DECKBOTTOM) + end + end + return #rg +end +--The event is triggered multiple times in a chain +--but only 1 event with EVENT_CUSTOM+code will be triggered at EVENT_CHAIN_END, or immediately if not in chain +--NOTE: re,r,rp,ep,ev of that custom event ARE NOT releated to the real event that trigger this custom event +function Auxiliary.RegisterMergedDelayedEvent(c,code,event,g) + local mt=getmetatable(c) + if mt[event]==true then return end + mt[event]=true + if not g then g=Group.CreateGroup() end + g:KeepAlive() + local ge1=Effect.CreateEffect(c) + ge1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) + ge1:SetCode(event) + ge1:SetLabel(code) + ge1:SetLabelObject(g) + ge1:SetOperation(Auxiliary.MergedDelayEventCheck1) + Duel.RegisterEffect(ge1,0) + local ge2=ge1:Clone() + ge2:SetCode(EVENT_CHAIN_END) + ge2:SetOperation(Auxiliary.MergedDelayEventCheck2) + Duel.RegisterEffect(ge2,0) +end +function Auxiliary.MergedDelayEventCheck1(e,tp,eg,ep,ev,re,r,rp) + local g=e:GetLabelObject() + g:Merge(eg) + if Duel.GetCurrentChain()==0 and not Duel.CheckEvent(EVENT_CHAIN_END) then + local _eg=g:Clone() + Duel.RaiseEvent(_eg,EVENT_CUSTOM+e:GetLabel(),re,r,rp,ep,ev) + g:Clear() + end +end +function Auxiliary.MergedDelayEventCheck2(e,tp,eg,ep,ev,re,r,rp) + local g=e:GetLabelObject() + if #g>0 then + local _eg=g:Clone() + Duel.RaiseEvent(_eg,EVENT_CUSTOM+e:GetLabel(),re,r,rp,ep,ev) + g:Clear() + end +end