Commit 51255a0f authored by xiaoye's avatar xiaoye

更改运算符间距

parent b0c5ee2a
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -3,886 +3,886 @@ VgID=10000001
CARD_ENERGY=10800730
CARD_ENERGY_EMBLEM=10800851
--min/max value
MIN_ID =1000 --4 digits, by DataManager::GetDesc()
MAX_ID =268435455 --28 bits, by DataManager::GetDesc()
MAX_COUNTER =65535 --max number for adding/removing counters, by card::add_counter(), field::remove_counter()
MAX_PARAMETER =0xffff
MIN_ID = 1000 --4 digits, by DataManager::GetDesc()
MAX_ID = 268435455 --28 bits, by DataManager::GetDesc()
MAX_COUNTER = 65535 --max number for adding/removing counters, by card::add_counter(), field::remove_counter()
MAX_PARAMETER = 0xffff
--Locations 区域
LOCATION_DECK =0x01 --卡组
LOCATION_HAND =0x02 --手牌
LOCATION_MZONE =0x04 --主要怪兽区(0-4)+额外怪兽区(5-6)
LOCATION_SZONE =0x08 --魔陷区(0-4)+场地区(5)
LOCATION_GRAVE =0x10 --弃牌区
LOCATION_REMOVED =0x20 --封锁区
LOCATION_EXTRA =0x40 --额外
LOCATION_OVERLAY =0x80 --灵魂
LOCATION_ONFIELD =0x0c --场上(LOCATION_MZONE+LOCATION_SZONE)
LOCATION_EXILE =0x400 --除外区
LOCATION_DAMAGE =0x800 --伤害区
LOCATION_ORDER =0x1000 --指令区
LOCATION_SPARE =0x2000 --备用格子(用于怪物箱等)
LOCATION_GZONE =0x4000 --G区域
LOCATION_EMBLEM =0x8000 --纹章区
LOCATION_DECK = 0x01 --卡组
LOCATION_HAND = 0x02 --手牌
LOCATION_MZONE = 0x04 --主要怪兽区(0- 4) + 额外怪兽区(5- 6)
LOCATION_SZONE = 0x08 --魔陷区(0- 4) + 场地区(5)
LOCATION_GRAVE = 0x10 --弃牌区
LOCATION_REMOVED = 0x20 --封锁区
LOCATION_EXTRA = 0x40 --额外
LOCATION_OVERLAY = 0x80 --灵魂
LOCATION_ONFIELD = 0x0c --场上(LOCATION_MZONE + LOCATION_SZONE)
LOCATION_EXILE = 0x400 --除外区
LOCATION_DAMAGE = 0x800 --伤害区
LOCATION_ORDER = 0x1000 --指令区
LOCATION_SPARE = 0x2000 --备用格子(用于怪物箱等)
LOCATION_GZONE = 0x4000 --G区域
LOCATION_EMBLEM = 0x8000 --纹章区
LOCATION_RIDE =LOCATION_EXTRA
LOCATION_DROP =LOCATION_GRAVE
LOCATION_LOCK =LOCATION_REMOVED
LOCATION_ALL =0xffff
LOCATION_RZONE =0x10000
LOCATION_VZONE =0x20000
LOCATION_LIST={0x1,0x2,0x4,0x10,0x20,0x40,0x80,0x400,0x800,0x1000,0x2000,0x4000,0x8000}
--LOCATION_LIST={LOCATION_HAND,LOCATION_MZONE,LOCATION_DROP,LOCATION_LOCK,LOCATION_RIDE,LOCATION_OVERLAY,LOCATION_EXILE,LOCATION_DAMAGE,LOCATION_ORDER,LOCATION_SPARE,LOCATION_GZONE,LOCATION_EMBLEM}
LOCATION_LIST_STRING={"LOCATION_DECK","LOCATION_HAND","LOCATION_MZONE","LOCATION_DROP","LOCATION_LOCK","LOCATION_RIDE","LOCATION_OVERLAY","LOCATION_EXILE","LOCATION_DAMAGE","LOCATION_ORDER","LOCATION_SPARE","LOCATION_GZONE","LOCATION_EMBLEM"}
LOCATION_ALL = 0xffff
LOCATION_RZONE = 0x10000
LOCATION_VZONE = 0x20000
LOCATION_LIST={0x1, 0x2, 0x4, 0x10, 0x20, 0x40, 0x80, 0x400, 0x800, 0x1000, 0x2000, 0x4000, 0x8000}
--LOCATION_LIST={LOCATION_HAND, LOCATION_MZONE, LOCATION_DROP, LOCATION_LOCK, LOCATION_RIDE, LOCATION_OVERLAY, LOCATION_EXILE, LOCATION_DAMAGE, LOCATION_ORDER, LOCATION_SPARE, LOCATION_GZONE, LOCATION_EMBLEM}
LOCATION_LIST_STRING={"LOCATION_DECK", "LOCATION_HAND", "LOCATION_MZONE", "LOCATION_DROP", "LOCATION_LOCK", "LOCATION_RIDE", "LOCATION_OVERLAY", "LOCATION_EXILE", "LOCATION_DAMAGE", "LOCATION_ORDER", "LOCATION_SPARE", "LOCATION_GZONE", "LOCATION_EMBLEM"}
--Locations (for redirect) 若在重定向类效果中仅指定LOCATION_DECK则为弹回卡组顶部
LOCATION_DECKBOT =0x10001 --弹回卡组底部
LOCATION_DECKSHF =0x20001 --弹回卡组并洗牌
LOCATION_DECKBOT = 0x10001 --弹回卡组底部
LOCATION_DECKSHF = 0x20001 --弹回卡组并洗牌
--Sequences (for Duel.SendtoDeck)
SEQ_DECKTOP =0 --弹回卡组顶端
SEQ_DECKBOTTOM =1 --弹回卡组底端
SEQ_DECKSHUFFLE =2 --弹回卡组并洗牌(洗牌前暂时放在底端)
SEQ_DECKTOP = 0 --弹回卡组顶端
SEQ_DECKBOTTOM = 1 --弹回卡组底端
SEQ_DECKSHUFFLE = 2 --弹回卡组并洗牌(洗牌前暂时放在底端)
--Locations of spell cards
LOCATION_FZONE =0x100 --判定区
LOCATION_FZONE = 0x100 --判定区
LOCATION_TRIGGER =LOCATION_FZONE
LOCATION_PZONE =0x200 --灵摆区
LOCATION_PZONE = 0x200 --灵摆区
--Positions 表示形式
POS_FACEUP_ATTACK =0x1 --表侧攻击
POS_FACEDOWN_ATTACK =0x2 --(reserved)
POS_FACEUP_DEFENSE =0x4 --表侧守备
POS_FACEDOWN_DEFENSE =0x8 --里侧守备
POS_FACEUP =0x5 --正面表示
POS_FACEDOWN =0xa --背面表示
POS_ATTACK =0x3 --攻击表示
POS_DEFENSE =0xc --守备表示
NO_FLIP_EFFECT =0x10000--不发动反转效果
POS_FACEUP_ATTACK = 0x1 --表侧攻击
POS_FACEDOWN_ATTACK = 0x2 --(reserved)
POS_FACEUP_DEFENSE = 0x4 --表侧守备
POS_FACEDOWN_DEFENSE = 0x8 --里侧守备
POS_FACEUP = 0x5 --正面表示
POS_FACEDOWN = 0xa --背面表示
POS_ATTACK = 0x3 --攻击表示
POS_DEFENSE = 0xc --守备表示
NO_FLIP_EFFECT = 0x10000--不发动反转效果
--Types 卡片类型
TYPE_MONSTER =0x1 --怪兽卡
TYPE_SPELL =0x2 --魔法卡
TYPE_TRAP =0x4 --陷阱卡
TYPE_NORMAL =0x10 --通常怪兽
TYPE_EFFECT =0x20 --效果
TYPE_FUSION =0x40 --融合
TYPE_RITUAL =0x80 --仪式
TYPE_TRAPMONSTER =0x100 --陷阱怪兽
TYPE_SPIRIT =0x200 --灵魂
TYPE_UNION =0x400 --同盟
TYPE_DUAL =0x800 --二重
TYPE_TUNER =0x1000 --调整
TYPE_SYNCHRO =0x2000 --同调
TYPE_TOKEN =0x4000 --衍生物
TYPE_QUICKPLAY =0x10000 --速攻
TYPE_CONTINUOUS =0x20000 --永续
TYPE_EQUIP =0x40000 --装备
TYPE_FIELD =0x80000 --场地
TYPE_COUNTER =0x100000 --反击
TYPE_FLIP =0x200000 --翻转
TYPE_TOON =0x400000 --卡通
TYPE_XYZ =0x800000 --超量
TYPE_PENDULUM =0x1000000 --灵摆
TYPE_SPSUMMON =0x2000000 --特殊召唤
TYPE_LINK =0x4000000 --连接
TYPE_MONSTER = 0x1 --怪兽卡
TYPE_SPELL = 0x2 --魔法卡
TYPE_TRAP = 0x4 --陷阱卡
TYPE_NORMAL = 0x10 --通常怪兽
TYPE_EFFECT = 0x20 --效果
TYPE_FUSION = 0x40 --融合
TYPE_RITUAL = 0x80 --仪式
TYPE_TRAPMONSTER = 0x100 --陷阱怪兽
TYPE_SPIRIT = 0x200 --灵魂
TYPE_UNION = 0x400 --同盟
TYPE_DUAL = 0x800 --二重
TYPE_TUNER = 0x1000 --调整
TYPE_SYNCHRO = 0x2000 --同调
TYPE_TOKEN = 0x4000 --衍生物
TYPE_QUICKPLAY = 0x10000 --速攻
TYPE_CONTINUOUS = 0x20000 --永续
TYPE_EQUIP = 0x40000 --装备
TYPE_FIELD = 0x80000 --场地
TYPE_COUNTER = 0x100000 --反击
TYPE_FLIP = 0x200000 --翻转
TYPE_TOON = 0x400000 --卡通
TYPE_XYZ = 0x800000 --超量
TYPE_PENDULUM = 0x1000000 --灵摆
TYPE_SPSUMMON = 0x2000000 --特殊召唤
TYPE_LINK = 0x4000000 --连接
--组合类型
TYPES_TOKEN_MONSTER =0x4011
TYPES_NORMAL_TRAP_MONSTER =0x111
TYPES_EFFECT_TRAP_MONSTER =0x121
TYPE_EMBLEM =TYPE_TRAP+TYPE_COUNTER+TYPE_FUSION
TYPES_TOKEN_MONSTER = 0x4011
TYPES_NORMAL_TRAP_MONSTER = 0x111
TYPES_EFFECT_TRAP_MONSTER = 0x121
TYPE_EMBLEM = TYPE_TRAP + TYPE_COUNTER + TYPE_FUSION
--技能 --属性
SKILL_ALL =0x7f --All
SKILL_NONE =0x01 --无
SKILL_SUPPORT =0x02 --支援
SKILL_BLOCK =0x04 --截击
SKILL_THRICE_TRIGGER=0x08 --三判
SKILL_TWICE_TRIGGER =0x10 --双判
SKILL_SELF_RIDE =0x20 --人格骑升
SKILL_DEBRIS =0x40 --结晶碎片
SKILL_ALL = 0x7f --All
SKILL_NONE = 0x01 --无
SKILL_SUPPORT = 0x02 --支援
SKILL_BLOCK = 0x04 --截击
SKILL_THRICE_TRIGGER= 0x08 --三判
SKILL_TWICE_TRIGGER = 0x10 --双判
SKILL_SELF_RIDE = 0x20 --人格骑升
SKILL_DEBRIS = 0x40 --结晶碎片
--触发类型 --种族
TRIGGER_ALL =0x3ffffff --All
TRIGGER_NONE =0x1 --无
TRIGGER_CRITICAL_STRIKE =0x2 --暴击触发
TRIGGER_DRAW =0x4 --抽牌触发
TRIGGER_HEAL =0x8 --治愈触发
TRIGGER_ADVANCE =0x10 --前列触发
TRIGGER_SUPER =0x20 --超限触发
TRIGGER_ALL = 0x3ffffff --All
TRIGGER_NONE = 0x1 --无
TRIGGER_CRITICAL_STRIKE = 0x2 --暴击触发
TRIGGER_DRAW = 0x4 --抽牌触发
TRIGGER_HEAL = 0x8 --治愈触发
TRIGGER_ADVANCE = 0x10 --前列触发
TRIGGER_SUPER = 0x20 --超限触发
--组合类型
TRIGGER_CARDS =0x3e --触发单位卡
TRIGGER_CARDS = 0x3e --触发单位卡
--Category 效果分类
CATEGORY_DEFENDER =0x1 --守护者
CATEGORY_DEFENDER = 0x1 --守护者
--Reason 卡片到当前位置的原因
REASON_DESTROY =0x1 --破坏
REASON_RELEASE =0x2 --解放
REASON_TEMPORARY =0x4 --暂时
REASON_MATERIAL =0x8 --作为融合/同调/超量素材或用於儀式/升級召喚
REASON_SUMMON =0x10 --召唤
REASON_BATTLE =0x20 --战斗破坏
REASON_EFFECT =0x40 --效果
REASON_COST =0x80 --用於代價或無法支付代價而破壞
REASON_ADJUST =0x100 --调整(御前试合)
REASON_LOST_TARGET =0x200 --失去装备对象
REASON_RULE =0x400 --规则
REASON_SPSUMMON =0x800 --特殊召唤
REASON_DISSUMMON =0x1000 --召唤失败
REASON_FLIP =0x2000 --翻转
REASON_DISCARD =0x4000 --丢弃
REASON_RDAMAGE =0x8000 --回復轉換後的傷害
REASON_RRECOVER =0x10000 --傷害轉換後的回復
REASON_RETURN =0x20000 --回到墓地
REASON_FUSION =0x40000 --用於融合召喚
REASON_SYNCHRO =0x80000 --用於同调召喚
REASON_RITUAL =0x100000 --用於仪式召喚
REASON_XYZ =0x200000 --用於超量召喚
REASON_REPLACE =0x1000000 --代替
REASON_DRAW =0x2000000 --抽卡
REASON_REDIRECT =0x4000000 --改变去向(大宇宙,带菌等)
REASON_REVEAL =0x8000000 --翻开卡组(森罗)
REASON_LINK =0x10000000 --用于连接召唤
REASON_LOST_OVERLAY =0x20000000 --超量素材随着超量怪兽离场
REASON_MAINTENANCE =0x40000000 --维持代价
REASON_ACTION =0x80000000 --攻击宣言之际等
REASON_RIDEUP =REASON_XYZ --用於骑升
REASON_DESTROY = 0x1 --破坏
REASON_RELEASE = 0x2 --解放
REASON_TEMPORARY = 0x4 --暂时
REASON_MATERIAL = 0x8 --作为融合/同调/超量素材或用於儀式/升級召喚
REASON_SUMMON = 0x10 --召唤
REASON_BATTLE = 0x20 --战斗破坏
REASON_EFFECT = 0x40 --效果
REASON_COST = 0x80 --用於代價或無法支付代價而破壞
REASON_ADJUST = 0x100 --调整(御前试合)
REASON_LOST_TARGET = 0x200 --失去装备对象
REASON_RULE = 0x400 --规则
REASON_SPSUMMON = 0x800 --特殊召唤
REASON_DISSUMMON = 0x1000 --召唤失败
REASON_FLIP = 0x2000 --翻转
REASON_DISCARD = 0x4000 --丢弃
REASON_RDAMAGE = 0x8000 --回復轉換後的傷害
REASON_RRECOVER = 0x10000 --傷害轉換後的回復
REASON_RETURN = 0x20000 --回到墓地
REASON_FUSION = 0x40000 --用於融合召喚
REASON_SYNCHRO = 0x80000 --用於同调召喚
REASON_RITUAL = 0x100000 --用於仪式召喚
REASON_XYZ = 0x200000 --用於超量召喚
REASON_REPLACE = 0x1000000 --代替
REASON_DRAW = 0x2000000 --抽卡
REASON_REDIRECT = 0x4000000 --改变去向(大宇宙,带菌等)
REASON_REVEAL = 0x8000000 --翻开卡组(森罗)
REASON_LINK = 0x10000000 --用于连接召唤
REASON_LOST_OVERLAY = 0x20000000 --超量素材随着超量怪兽离场
REASON_MAINTENANCE = 0x40000000 --维持代价
REASON_ACTION = 0x80000000 --攻击宣言之际等
REASON_RIDEUP = REASON_XYZ --用於骑升
REASON_PHASEDRAW =REASON_RULE --抽卡
REASON_TRIGGER =REASON_EFFECT --判定
--Location Reason
LOCATION_REASON_TOFIELD =0x1 --Duel.GetLocationCount()預設值,凱薩競技場
LOCATION_REASON_CONTROL =0x2 --Card.IsControlerCanBeChanged()使用
LOCATION_REASON_TOFIELD = 0x1 --Duel.GetLocationCount()預設值, 凱薩競技場
LOCATION_REASON_CONTROL = 0x2 --Card.IsControlerCanBeChanged()使用
--Summon Type --召唤类型
SUMMON_TYPE_NORMAL =0x10000000 --通常召唤(EFFECT_SUMMON_PROC,EFFECT_SET_PROC 可用Value修改數值)
SUMMON_TYPE_ADVANCE =0x11000000 --上级召唤
SUMMON_TYPE_DUAL =0x12000000 --再度召唤(二重)
SUMMON_TYPE_FLIP =0x20000000 --翻转召唤
SUMMON_TYPE_SPECIAL =0x40000000 --特殊召唤(EFFECT_SPSUMMON_PROC,EFFECT_SPSUMMON_PROC_G 可用Value修改數值)
SUMMON_TYPE_FUSION =0x43000000 --融合召唤
SUMMON_TYPE_RITUAL =0x45000000 --仪式召唤
SUMMON_TYPE_SELFRIDE =0x46000000 --人格骑升
SUMMON_TYPE_RIDE =0x49000000 --骑升
--SUMMON_TYPE_CALL =0x4a000000 --Call到R位
SUMMON_TYPE_LINK =0x4c000000 --连接召唤
SUMMON_TYPE_NORMAL = 0x10000000 --通常召唤(EFFECT_SUMMON_PROC, EFFECT_SET_PROC 可用Value修改數值)
SUMMON_TYPE_ADVANCE = 0x11000000 --上级召唤
SUMMON_TYPE_DUAL = 0x12000000 --再度召唤(二重)
SUMMON_TYPE_FLIP = 0x20000000 --翻转召唤
SUMMON_TYPE_SPECIAL = 0x40000000 --特殊召唤(EFFECT_SPSUMMON_PROC, EFFECT_SPSUMMON_PROC_G 可用Value修改數值)
SUMMON_TYPE_FUSION = 0x43000000 --融合召唤
SUMMON_TYPE_RITUAL = 0x45000000 --仪式召唤
SUMMON_TYPE_SELFRIDE = 0x46000000 --人格骑升
SUMMON_TYPE_RIDE = 0x49000000 --骑升
--SUMMON_TYPE_CALL = 0x4a000000 --Call到R位
SUMMON_TYPE_LINK = 0x4c000000 --连接召唤
--Summon Value --特定的召唤方式
SUMMON_VALUE_CALL =0x1 --通常CALL出场
SUMMON_VALUE_REVOLT =0x2 --反抗舞装
SUMMON_VALUE_OverDress =0x4 --超限舞装
SUMMON_VALUE_DARK_SANCTUARY =0x12 --暗黑圣域
SUMMON_VALUE_MONSTER_REBORN =0x13 --死者苏生(千年的启示)
SUMMON_VALUE_MASK_CHANGE =0x14 --
SUMMON_VALUE_ASSAULT_MODE =0x15 --
SUMMON_VALUE_LV =0x1000 --对应LV怪兽的效果
SUMMON_VALUE_GLADIATOR =0x2000 --剑斗兽
SUMMON_VALUE_EVOLTILE =0x4000 --进化虫
SUMMON_VALUE_DARK_FUSION =SUMMON_TYPE_FUSION|0x16 --
SUMMON_VALUE_FOSSIL_FUSION =SUMMON_TYPE_FUSION|0x17 --
SUMMON_VALUE_CALL = 0x1 --通常CALL出场
SUMMON_VALUE_REVOLT = 0x2 --反抗舞装
SUMMON_VALUE_OverDress = 0x4 --超限舞装
SUMMON_VALUE_DARK_SANCTUARY = 0x12 --暗黑圣域
SUMMON_VALUE_MONSTER_REBORN = 0x13 --死者苏生(千年的启示)
SUMMON_VALUE_MASK_CHANGE = 0x14 --
SUMMON_VALUE_ASSAULT_MODE = 0x15 --
SUMMON_VALUE_LV = 0x1000 --对应LV怪兽的效果
SUMMON_VALUE_GLADIATOR = 0x2000 --剑斗兽
SUMMON_VALUE_EVOLTILE = 0x4000 --进化虫
SUMMON_VALUE_DARK_FUSION = SUMMON_TYPE_FUSION|0x16 --
SUMMON_VALUE_FOSSIL_FUSION = SUMMON_TYPE_FUSION|0x17 --
--Status --卡片当前状态
STATUS_DISABLED =0x0001 --效果被无效
STATUS_TO_ENABLE =0x0002 --将变成有效
STATUS_TO_DISABLE =0x0004 --将变成无效
STATUS_PROC_COMPLETE =0x0008 --完成正规召唤(解除苏生限制)
STATUS_SET_TURN =0x0010 --在本回合覆盖
STATUS_NO_LEVEL =0x0020 --无等级
STATUS_BATTLE_RESULT =0x0040 --傷害計算結果預計要破壞的怪獸
STATUS_SPSUMMON_STEP =0x0080 --效果特召處理中
STATUS_FORM_CHANGED =0x0100 --改变过表示形式
STATUS_SUMMONING =0x0200 --召唤中
STATUS_EFFECT_ENABLED =0x0400 --卡片準備就緒(不在移動、召喚、魔法陷阱發動中)
STATUS_SUMMON_TURN =0x0800 --在本回合召喚/SET
STATUS_DESTROY_CONFIRMED =0x1000 --预定被破坏
STATUS_LEAVE_CONFIRMED =0x2000 --連鎖處理完後送去墓地的魔法陷阱
STATUS_BATTLE_DESTROYED =0x4000 --战斗破坏确定後尚未移動
STATUS_COPYING_EFFECT =0x8000 --正在复制效果
STATUS_CHAINING =0x10000 --正在連鎖串中
STATUS_SUMMON_DISABLED =0x20000 --召唤无效後尚未移動
STATUS_ACTIVATE_DISABLED =0x40000 --发动无效後尚未移動
STATUS_EFFECT_REPLACED =0x80000 --效果被替代(红莲霸权)
STATUS_FUTURE_FUSION =0x100000 --未来融合特殊召唤(不触发融合素材效果)
STATUS_ATTACK_CANCELED =0x200000 --若其為攻擊者,則攻擊中止
STATUS_INITIALIZING =0x400000 --正在初始化
STATUS_TO_HAND_WITHOUT_CONFIRM =0x800000 --非公开的卡被效果加入手卡但未给对方确认
STATUS_JUST_POS =0x1000000 --已改變表示形式(用於STATUS_CONTINUOUS_POS判定)
STATUS_CONTINUOUS_POS =0x2000000 --改變後再次設定成其他表示形式
STATUS_FORBIDDEN =0x4000000 --不能play
STATUS_ACT_FROM_HAND =0x8000000 --從手牌发动
STATUS_OPPO_BATTLE =0x10000000 --和對手的怪兽戰鬥
STATUS_FLIP_SUMMON_TURN =0x20000000 --在本回合反转召唤
STATUS_SPSUMMON_TURN =0x40000000 --在本回合特殊召唤
STATUS_DISABLED = 0x0001 --效果被无效
STATUS_TO_ENABLE = 0x0002 --将变成有效
STATUS_TO_DISABLE = 0x0004 --将变成无效
STATUS_PROC_COMPLETE = 0x0008 --完成正规召唤(解除苏生限制)
STATUS_SET_TURN = 0x0010 --在本回合覆盖
STATUS_NO_LEVEL = 0x0020 --无等级
STATUS_BATTLE_RESULT = 0x0040 --傷害計算結果預計要破壞的怪獸
STATUS_SPSUMMON_STEP = 0x0080 --效果特召處理中
STATUS_FORM_CHANGED = 0x0100 --改变过表示形式
STATUS_SUMMONING = 0x0200 --召唤中
STATUS_EFFECT_ENABLED = 0x0400 --卡片準備就緒(不在移動、召喚、魔法陷阱發動中)
STATUS_SUMMON_TURN = 0x0800 --在本回合召喚/SET
STATUS_DESTROY_CONFIRMED = 0x1000 --预定被破坏
STATUS_LEAVE_CONFIRMED = 0x2000 --連鎖處理完後送去墓地的魔法陷阱
STATUS_BATTLE_DESTROYED = 0x4000 --战斗破坏确定後尚未移動
STATUS_COPYING_EFFECT = 0x8000 --正在复制效果
STATUS_CHAINING = 0x10000 --正在連鎖串中
STATUS_SUMMON_DISABLED = 0x20000 --召唤无效後尚未移動
STATUS_ACTIVATE_DISABLED = 0x40000 --发动无效後尚未移動
STATUS_EFFECT_REPLACED = 0x80000 --效果被替代(红莲霸权)
STATUS_FUTURE_FUSION = 0x100000 --未来融合特殊召唤(不触发融合素材效果)
STATUS_ATTACK_CANCELED = 0x200000 --若其為攻擊者,則攻擊中止
STATUS_INITIALIZING = 0x400000 --正在初始化
STATUS_TO_HAND_WITHOUT_CONFIRM = 0x800000 --非公开的卡被效果加入手卡但未给对方确认
STATUS_JUST_POS = 0x1000000 --已改變表示形式(用於STATUS_CONTINUOUS_POS判定)
STATUS_CONTINUOUS_POS = 0x2000000 --改變後再次設定成其他表示形式
STATUS_FORBIDDEN = 0x4000000 --不能play
STATUS_ACT_FROM_HAND = 0x8000000 --從手牌发动
STATUS_OPPO_BATTLE = 0x10000000 --和對手的怪兽戰鬥
STATUS_FLIP_SUMMON_TURN = 0x20000000 --在本回合反转召唤
STATUS_SPSUMMON_TURN = 0x40000000 --在本回合特殊召唤
--Assume
ASSUME_CODE =1
ASSUME_TYPE =2
ASSUME_LEVEL =3
ASSUME_RANK =4
ASSUME_ATTRIBUTE =5
ASSUME_RACE =6
ASSUME_ATTACK =7
ASSUME_DEFENSE =8
ASSUME_CODE = 1
ASSUME_TYPE = 2
ASSUME_LEVEL = 3
ASSUME_RANK = 4
ASSUME_ATTRIBUTE = 5
ASSUME_RACE = 6
ASSUME_ATTACK = 7
ASSUME_DEFENSE = 8
--Counter --指示物
COUNTER_WITHOUT_PERMIT =0x1000 --可以放置在非特定對象的指示物
COUNTER_NEED_ENABLE =0x2000 --N/A
COUNTER_WITHOUT_PERMIT = 0x1000 --可以放置在非特定對象的指示物
COUNTER_NEED_ENABLE = 0x2000 --N/A
--Phase --阶段
PHASE_DRAW =0x01 --抽卡阶段
PHASE_STANDBY =0x02 --准备阶段
PHASE_MAIN1 =0x04 --主要阶段1
PHASE_BATTLE_START =0x08 --战斗阶段开始
PHASE_BATTLE_STEP =0x10 --战斗步驟
PHASE_DAMAGE =0x20 --伤害步驟
PHASE_DAMAGE_CAL =0x40 --伤害计算时
PHASE_BATTLE =0x80 --战斗阶段結束
PHASE_MAIN2 =0x100 --主要阶段2
PHASE_END =0x200 --结束阶段
PHASE_DRAW = 0x01 --抽卡阶段
PHASE_STANDBY = 0x02 --准备阶段
PHASE_MAIN1 = 0x04 --主要阶段1
PHASE_BATTLE_START = 0x08 --战斗阶段开始
PHASE_BATTLE_STEP = 0x10 --战斗步驟
PHASE_DAMAGE = 0x20 --伤害步驟
PHASE_DAMAGE_CAL = 0x40 --伤害计算时
PHASE_BATTLE = 0x80 --战斗阶段結束
PHASE_MAIN2 = 0x100 --主要阶段2
PHASE_END = 0x200 --结束阶段
--Player --玩家
PLAYER_NONE =2 --2个玩家都不是
PLAYER_ALL =3 --2个玩家都是
PLAYER_NONE = 2 --2个玩家都不是
PLAYER_ALL = 3 --2个玩家都是
--Chain info --连锁信息
CHAININFO_CHAIN_COUNT =0x01 --连锁数
CHAININFO_TRIGGERING_EFFECT =0x02 --连锁的效果
CHAININFO_TRIGGERING_PLAYER =0x04 --连锁的玩家
CHAININFO_TRIGGERING_CONTROLER =0x08 --连锁的卡的控制者
CHAININFO_TRIGGERING_LOCATION =0x10 --连锁的位置
CHAININFO_TRIGGERING_SEQUENCE =0x20 --连锁的位置的编号(指怪兽和魔陷区的格子)
CHAININFO_TARGET_CARDS =0x40 --连锁的效果的对象(以下3个需要在target函数里设置)
CHAININFO_TARGET_PLAYER =0x80 --连锁的效果的对象(玩家)
CHAININFO_TARGET_PARAM =0x100 --连锁的效果的参数值
CHAININFO_DISABLE_REASON =0x200 --无效的原因
CHAININFO_DISABLE_PLAYER =0x400 --无效的玩家
CHAININFO_CHAIN_ID =0x800 --连锁ID
CHAININFO_TYPE =0x1000 --连锁类型
CHAININFO_EXTTYPE =0x2000 --连锁额外类型
CHAININFO_TRIGGERING_POSITION =0x4000 --连锁发生时的表示形式
CHAININFO_TRIGGERING_CODE =0x8000 --连锁发生时的密码
CHAININFO_TRIGGERING_CODE2 =0x10000 --连锁发生时的其他密码
CHAININFO_TRIGGERING_LEVEL =0x40000 --连锁发生时的等级
CHAININFO_TRIGGERING_RANK =0x80000 --连锁发生时的阶级
CHAININFO_TRIGGERING_ATTRIBUTE =0x100000 --连锁发生时的属性
CHAININFO_TRIGGERING_RACE =0x200000 --连锁发生时的种族
CHAININFO_TRIGGERING_ATTACK =0x400000 --连锁发生时的攻击力
CHAININFO_TRIGGERING_DEFENSE =0x800000 --连锁发生时的守备力
CHAININFO_CHAIN_COUNT = 0x01 --连锁数
CHAININFO_TRIGGERING_EFFECT = 0x02 --连锁的效果
CHAININFO_TRIGGERING_PLAYER = 0x04 --连锁的玩家
CHAININFO_TRIGGERING_CONTROLER = 0x08 --连锁的卡的控制者
CHAININFO_TRIGGERING_LOCATION = 0x10 --连锁的位置
CHAININFO_TRIGGERING_SEQUENCE = 0x20 --连锁的位置的编号(指怪兽和魔陷区的格子)
CHAININFO_TARGET_CARDS = 0x40 --连锁的效果的对象(以下3个需要在target函数里设置)
CHAININFO_TARGET_PLAYER = 0x80 --连锁的效果的对象(玩家)
CHAININFO_TARGET_PARAM = 0x100 --连锁的效果的参数值
CHAININFO_DISABLE_REASON = 0x200 --无效的原因
CHAININFO_DISABLE_PLAYER = 0x400 --无效的玩家
CHAININFO_CHAIN_ID = 0x800 --连锁ID
CHAININFO_TYPE = 0x1000 --连锁类型
CHAININFO_EXTTYPE = 0x2000 --连锁额外类型
CHAININFO_TRIGGERING_POSITION = 0x4000 --连锁发生时的表示形式
CHAININFO_TRIGGERING_CODE = 0x8000 --连锁发生时的密码
CHAININFO_TRIGGERING_CODE2 = 0x10000 --连锁发生时的其他密码
CHAININFO_TRIGGERING_LEVEL = 0x40000 --连锁发生时的等级
CHAININFO_TRIGGERING_RANK = 0x80000 --连锁发生时的阶级
CHAININFO_TRIGGERING_ATTRIBUTE = 0x100000 --连锁发生时的属性
CHAININFO_TRIGGERING_RACE = 0x200000 --连锁发生时的种族
CHAININFO_TRIGGERING_ATTACK = 0x400000 --连锁发生时的攻击力
CHAININFO_TRIGGERING_DEFENSE = 0x800000 --连锁发生时的守备力
--Summon info
SUMMON_INFO_CODE =0x01
SUMMON_INFO_CODE2 =0x02
SUMMON_INFO_TYPE =0x04
SUMMON_INFO_LEVEL =0x08
SUMMON_INFO_RANK =0x10
SUMMON_INFO_ATTRIBUTE =0x20
SUMMON_INFO_RACE =0x40
SUMMON_INFO_ATTACK =0x80
SUMMON_INFO_DEFENSE =0x100
SUMMON_INFO_REASON_EFFECT =0x200
SUMMON_INFO_REASON_PLAYER =0x400
SUMMON_INFO_CODE = 0x01
SUMMON_INFO_CODE2 = 0x02
SUMMON_INFO_TYPE = 0x04
SUMMON_INFO_LEVEL = 0x08
SUMMON_INFO_RANK = 0x10
SUMMON_INFO_ATTRIBUTE = 0x20
SUMMON_INFO_RACE = 0x40
SUMMON_INFO_ATTACK = 0x80
SUMMON_INFO_DEFENSE = 0x100
SUMMON_INFO_REASON_EFFECT = 0x200
SUMMON_INFO_REASON_PLAYER = 0x400
--========== Reset ========== --重置条件(注意:重置条件可以多个相加)
RESET_SELF_TURN =0x10000000 --自己回合的階段重置
RESET_OPPO_TURN =0x20000000 --对方回合的階段重置
RESET_PHASE =0x40000000 --阶段结束重置(一般和上面那些阶段配合使用)
RESET_CHAIN =0x80000000 --连锁结束重置
RESET_EVENT =0x1000 --指定的條件下重置(一般和下面这些事件配合使用)
RESET_CARD =0x2000 --重置Owner為指定卡片的效果
RESET_CODE =0x4000 --重置指定Code的single效果(不含EFFECT_FLAG_SINGLE_RANGE)
RESET_COPY =0x8000 --重置以复制取得的效果
RESET_DISABLE =0x00010000 --效果无效重置(只適用於owner==handler的效果)
RESET_TURN_SET =0x00020000 --变里侧重置(皆為事件觸發前重置)
RESET_TOGRAVE =0x00040000 --去墓地重置
RESET_REMOVE =0x00080000 --除外重置
RESET_TEMP_REMOVE =0x00100000 --暂时除外重置
RESET_TOHAND =0x00200000 --回手牌或加入手牌重置
RESET_TODECK =0x00400000 --回卡组重置
RESET_LEAVE =0x00800000 --从怪兽区或魔法区到不同区域
RESET_TOFIELD =0x01000000 --除了返回场上以外,从不同区域移动到怪兽区或魔法区
RESET_CONTROL =0x02000000 --控制者变更重置
RESET_OVERLAY =0x04000000 --超量叠放重置
RESET_MSCHANGE =0x08000000 --从怪兽区到魔法区,或者从魔法区到怪兽区(move_to_field()、寶玉獸)
RESET_SELF_TURN = 0x10000000 --自己回合的階段重置
RESET_OPPO_TURN = 0x20000000 --对方回合的階段重置
RESET_PHASE = 0x40000000 --阶段结束重置(一般和上面那些阶段配合使用)
RESET_CHAIN = 0x80000000 --连锁结束重置
RESET_EVENT = 0x1000 --指定的條件下重置(一般和下面这些事件配合使用)
RESET_CARD = 0x2000 --重置Owner為指定卡片的效果
RESET_CODE = 0x4000 --重置指定Code的single效果(不含EFFECT_FLAG_SINGLE_RANGE)
RESET_COPY = 0x8000 --重置以复制取得的效果
RESET_DISABLE = 0x00010000 --效果无效重置(只適用於owner==handler的效果)
RESET_TURN_SET = 0x00020000 --变里侧重置(皆為事件觸發前重置)
RESET_TOGRAVE = 0x00040000 --去墓地重置
RESET_REMOVE = 0x00080000 --除外重置
RESET_TEMP_REMOVE = 0x00100000 --暂时除外重置
RESET_TOHAND = 0x00200000 --回手牌或加入手牌重置
RESET_TODECK = 0x00400000 --回卡组重置
RESET_LEAVE = 0x00800000 --从怪兽区或魔法区到不同区域
RESET_TOFIELD = 0x01000000 --除了返回场上以外,从不同区域移动到怪兽区或魔法区
RESET_CONTROL = 0x02000000 --控制者变更重置
RESET_OVERLAY = 0x04000000 --超量叠放重置
RESET_MSCHANGE = 0x08000000 --从怪兽区到魔法区,或者从魔法区到怪兽区(move_to_field()、寶玉獸)
----组合时点
RESETS_STANDARD =0x1fe0000 --RESET_TOFIELD+RESET_LEAVE+RESET_TODECK+RESET_TOHAND+RESET_TEMP_REMOVE+RESET_REMOVE+RESET_TOGRAVE+RESET_TURN_SET
RESETS_REDIRECT =0xc7e0000 --RESETS_STANDARD+RESET_OVERLAY+RESET_MSCHANGE-RESET_TOFIELD-RESET_LEAVE (EFFECT_LEAVE_FIELD_REDIRECT)
RESETS_WITHOUT_TEMP_REMOVE =0x56e0000 --RESETS_STANDARD-RESET_TEMP_REMOVE-RESET_LEAVE+RESET_OVERLAY
RESETS_STANDARD = 0x1fe0000 --RESET_TOFIELD + RESET_LEAVE + RESET_TODECK + RESET_TOHAND + RESET_TEMP_REMOVE + RESET_REMOVE + RESET_TOGRAVE + RESET_TURN_SET
RESETS_REDIRECT = 0xc7e0000 --RESETS_STANDARD + RESET_OVERLAY + RESET_MSCHANGE- RESET_TOFIELD- RESET_LEAVE (EFFECT_LEAVE_FIELD_REDIRECT)
RESETS_WITHOUT_TEMP_REMOVE = 0x56e0000 --RESETS_STANDARD- RESET_TEMP_REMOVE- RESET_LEAVE + RESET_OVERLAY
--========== Types ========== --效果类型(定义效果触发类型,和codes一起使用)
EFFECT_TYPE_SINGLE =0x0001 --自己状态变化时触发
EFFECT_TYPE_FIELD =0x0002 --场上所有卡状态变化时触发
EFFECT_TYPE_EQUIP =0x0004 --装备效果
EFFECT_TYPE_ACTIONS =0x0008 --触发型,以下類型會自動添加此屬性(对峙的G)
EFFECT_TYPE_ACTIVATE =0x0010 --魔陷发动
EFFECT_TYPE_FLIP =0x0020 --翻转效果
EFFECT_TYPE_IGNITION =0x0040 --起动效果
EFFECT_TYPE_TRIGGER_O =0x0080 --诱发选发效果
EFFECT_TYPE_QUICK_O =0x0100 --诱发即时效果
EFFECT_TYPE_TRIGGER_F =0x0200 --诱发必发效果
EFFECT_TYPE_QUICK_F =0x0400 --诱发即时必发效果(熊猫龙等)
EFFECT_TYPE_CONTINUOUS =0x0800 --由事件觸發的輔助用效果/永續效果
EFFECT_TYPE_XMATERIAL =0x1000 --作为超量素材时超量怪兽获得的效果(十二兽)
EFFECT_TYPE_GRANT =0x2000 --使其他卡片获得效果(天气模样)
EFFECT_TYPE_TARGET =0x4000 --影响持续取的对象的效果(基本只用于魔陷)
EFFECT_TYPE_SINGLE = 0x0001 --自己状态变化时触发
EFFECT_TYPE_FIELD = 0x0002 --场上所有卡状态变化时触发
EFFECT_TYPE_EQUIP = 0x0004 --装备效果
EFFECT_TYPE_ACTIONS = 0x0008 --触发型,以下類型會自動添加此屬性(对峙的G)
EFFECT_TYPE_ACTIVATE = 0x0010 --魔陷发动
EFFECT_TYPE_FLIP = 0x0020 --翻转效果
EFFECT_TYPE_IGNITION = 0x0040 --起动效果
EFFECT_TYPE_TRIGGER_O = 0x0080 --诱发选发效果
EFFECT_TYPE_QUICK_O = 0x0100 --诱发即时效果
EFFECT_TYPE_TRIGGER_F = 0x0200 --诱发必发效果
EFFECT_TYPE_QUICK_F = 0x0400 --诱发即时必发效果(熊猫龙等)
EFFECT_TYPE_CONTINUOUS = 0x0800 --由事件觸發的輔助用效果/永續效果
EFFECT_TYPE_XMATERIAL = 0x1000 --作为超量素材时超量怪兽获得的效果(十二兽)
EFFECT_TYPE_GRANT = 0x2000 --使其他卡片获得效果(天气模样)
EFFECT_TYPE_TARGET = 0x4000 --影响持续取的对象的效果(基本只用于魔陷)
--========== Flags ========== --效果的特殊性质
EFFECT_FLAG_INITIAL =0x0001 --可以发动的
EFFECT_FLAG_FUNC_VALUE =0x0002 --此效果的Value属性是函数
EFFECT_FLAG_COUNT_LIMIT =0x0004 --发动次数限制
EFFECT_FLAG_FIELD_ONLY =0x0008 --此效果是注册给全局环境的
EFFECT_FLAG_CARD_TARGET =0x0010 --取对象效果
EFFECT_FLAG_IGNORE_RANGE =0x0020 --影响所有区域的卡(大宇宙)
EFFECT_FLAG_ABSOLUTE_TARGET =0x0040 --Target Range固定為某個玩家的視角所見的自己/對方(SetAbsoluteRange()專用)
EFFECT_FLAG_IGNORE_IMMUNE =0x0080 --无视效果免疫
EFFECT_FLAG_SET_AVAILABLE =0x0100 --裡側狀態可發動的效果、影响场上里侧的卡的永續型效果
EFFECT_FLAG_CANNOT_NEGATE =0x0200 --含有"此效果不會被無效"的敘述
EFFECT_FLAG_CANNOT_DISABLE =0x0400 --效果不会被无效
EFFECT_FLAG_PLAYER_TARGET =0x0800 --含有"以玩家为对象"的特性(精靈之鏡)、影響玩家的永續型效果(SetTargetRange()改成指定玩家)
EFFECT_FLAG_BOTH_SIDE =0x1000 --双方都能使用(部分场地,弹压)
EFFECT_FLAG_COPY_INHERIT =0x2000 --若由复制的效果產生則继承其Reset属性
EFFECT_FLAG_DAMAGE_STEP =0x4000 --可以在伤害步骤发动
EFFECT_FLAG_DAMAGE_CAL =0x8000 --可以在伤害计算时发动
EFFECT_FLAG_DELAY =0x10000 --場合型誘發效果、用於永續效果的EFFECT_TYPE_CONTINUOUS
EFFECT_FLAG_SINGLE_RANGE =0x20000 --只对自己有效
EFFECT_FLAG_UNCOPYABLE =0x40000 --不能复制的原始效果(效果外文本)
EFFECT_FLAG_OATH =0x80000 --誓约效果
EFFECT_FLAG_SPSUM_PARAM =0x100000 --指定召喚/规则特殊召唤的位置和表示形式(熔岩魔神)
EFFECT_FLAG_REPEAT =0x200000 --N/A
EFFECT_FLAG_NO_TURN_RESET =0x400000 --发条等“这张卡在场上只能发动一次”的效果
EFFECT_FLAG_EVENT_PLAYER =0x800000 --发动/处理效果的玩家为触发事件的玩家而不是卡片的持有者,如仪式魔人,万魔殿
EFFECT_FLAG_OWNER_RELATE =0x1000000 --与效果owner关联的效果
EFFECT_FLAG_CANNOT_INACTIVATE =0x2000000 --發動不會被無效
EFFECT_FLAG_CLIENT_HINT =0x4000000 --客户端提示
EFFECT_FLAG_CONTINUOUS_TARGET =0x8000000 --建立持續對象的永續魔法/永續陷阱/早埋系以外的裝備魔法卡
EFFECT_FLAG_LIMIT_ZONE =0x10000000 --限制魔法·陷阱卡发动时可以放置的区域
EFFECT_FLAG_COF =0x20000000 --N/A
EFFECT_FLAG_CVAL_CHECK =0x40000000 --N/A
EFFECT_FLAG_IMMEDIATELY_APPLY =0x80000000 --卡在发动时效果就立即适用
EFFECT_FLAG_INITIAL = 0x0001 --可以发动的
EFFECT_FLAG_FUNC_VALUE = 0x0002 --此效果的Value属性是函数
EFFECT_FLAG_COUNT_LIMIT = 0x0004 --发动次数限制
EFFECT_FLAG_FIELD_ONLY = 0x0008 --此效果是注册给全局环境的
EFFECT_FLAG_CARD_TARGET = 0x0010 --取对象效果
EFFECT_FLAG_IGNORE_RANGE = 0x0020 --影响所有区域的卡(大宇宙)
EFFECT_FLAG_ABSOLUTE_TARGET = 0x0040 --Target Range固定為某個玩家的視角所見的自己/對方(SetAbsoluteRange()專用)
EFFECT_FLAG_IGNORE_IMMUNE = 0x0080 --无视效果免疫
EFFECT_FLAG_SET_AVAILABLE = 0x0100 --裡側狀態可發動的效果、影响场上里侧的卡的永續型效果
EFFECT_FLAG_CANNOT_NEGATE = 0x0200 --含有"此效果不會被無效"的敘述
EFFECT_FLAG_CANNOT_DISABLE = 0x0400 --效果不会被无效
EFFECT_FLAG_PLAYER_TARGET = 0x0800 --含有"以玩家为对象"的特性(精靈之鏡)、影響玩家的永續型效果(SetTargetRange()改成指定玩家)
EFFECT_FLAG_BOTH_SIDE = 0x1000 --双方都能使用(部分场地,弹压)
EFFECT_FLAG_COPY_INHERIT = 0x2000 --若由复制的效果產生則继承其Reset属性
EFFECT_FLAG_DAMAGE_STEP = 0x4000 --可以在伤害步骤发动
EFFECT_FLAG_DAMAGE_CAL = 0x8000 --可以在伤害计算时发动
EFFECT_FLAG_DELAY = 0x10000 --場合型誘發效果、用於永續效果的EFFECT_TYPE_CONTINUOUS
EFFECT_FLAG_SINGLE_RANGE = 0x20000 --只对自己有效
EFFECT_FLAG_UNCOPYABLE = 0x40000 --不能复制的原始效果(效果外文本)
EFFECT_FLAG_OATH = 0x80000 --誓约效果
EFFECT_FLAG_SPSUM_PARAM = 0x100000 --指定召喚/规则特殊召唤的位置和表示形式(熔岩魔神)
EFFECT_FLAG_REPEAT = 0x200000 --N/A
EFFECT_FLAG_NO_TURN_RESET = 0x400000 --发条等“这张卡在场上只能发动一次”的效果
EFFECT_FLAG_EVENT_PLAYER = 0x800000 --发动/处理效果的玩家为触发事件的玩家而不是卡片的持有者,如仪式魔人,万魔殿
EFFECT_FLAG_OWNER_RELATE = 0x1000000 --与效果owner关联的效果
EFFECT_FLAG_CANNOT_INACTIVATE = 0x2000000 --發動不會被無效
EFFECT_FLAG_CLIENT_HINT = 0x4000000 --客户端提示
EFFECT_FLAG_CONTINUOUS_TARGET = 0x8000000 --建立持續對象的永續魔法/永續陷阱/早埋系以外的裝備魔法卡
EFFECT_FLAG_LIMIT_ZONE = 0x10000000 --限制魔法·陷阱卡发动时可以放置的区域
EFFECT_FLAG_COF = 0x20000000 --N/A
EFFECT_FLAG_CVAL_CHECK = 0x40000000 --N/A
EFFECT_FLAG_IMMEDIATELY_APPLY = 0x80000000 --卡在发动时效果就立即适用
EFFECT_FLAG2_REPEAT_UPDATE =0x0001 --最后计算的攻击力上升
EFFECT_FLAG2_COF =0x0002 --通常魔法卡在MP1以外发动(邪恶的仪式的特殊处理)
EFFECT_FLAG2_WICKED =0x0004 --神之化身/恐惧之源的攻击力变化最后计算
EFFECT_FLAG2_OPTION =0x0008 --子機
EFFECT_FLAG2_REPEAT_UPDATE = 0x0001 --最后计算的攻击力上升
EFFECT_FLAG2_COF = 0x0002 --通常魔法卡在MP1以外发动(邪恶的仪式的特殊处理)
EFFECT_FLAG2_WICKED = 0x0004 --神之化身/恐惧之源的攻击力变化最后计算
EFFECT_FLAG2_OPTION = 0x0008 --子機
--========== Codes ========== --对永续性效果表示效果类型(EFFECT开头),对诱发型效果表示触发效果的事件/时点(EVENT开头)
EFFECT_IMMUNE_EFFECT =1 --效果免疫
EFFECT_DISABLE =2 --效果无效(技能抽取)
EFFECT_CANNOT_DISABLE =3 --卡的效果不能被无效
EFFECT_SET_CONTROL =4 --设置控制权
EFFECT_CANNOT_CHANGE_CONTROL =5 --不能改变控制权
EFFECT_CANNOT_ACTIVATE =6 --玩家不能发动效果
EFFECT_CANNOT_TRIGGER =7 --卡不能发动效果
EFFECT_DISABLE_EFFECT =8 --效果无效(聖杯)
EFFECT_DISABLE_CHAIN =9 --在連鎖串中無效(processor.cpp)
EFFECT_DISABLE_TRAPMONSTER =10 --陷阱怪兽无效
EFFECT_CANNOT_INACTIVATE =12 --发动不能被无效
EFFECT_CANNOT_DISEFFECT =13 --发动的效果不能被无效
EFFECT_CANNOT_CHANGE_POSITION =14 --不能改变表示形式
EFFECT_TRAP_ACT_IN_HAND =15 --陷阱可以从手牌发动
EFFECT_TRAP_ACT_IN_SET_TURN =16 --陷阱可以在盖放的回合发动
EFFECT_REMAIN_FIELD =17 --X回合内留在场上(光之护封剑等)
EFFECT_MONSTER_SSET =18 --怪兽可以在魔陷区放置
EFFECT_CANNOT_SUMMON =20 --不能召唤怪兽
EFFECT_CANNOT_FLIP_SUMMON =21 --不能翻转召唤怪兽
EFFECT_CANNOT_SPECIAL_SUMMON =22 --不能特殊召唤怪兽
EFFECT_CANNOT_MSET =23 --不能覆盖怪兽
EFFECT_CANNOT_SSET =24 --不能覆盖魔陷
EFFECT_CANNOT_DRAW =25 --不能抽卡
EFFECT_CANNOT_DISABLE_SUMMON =26 --召唤不会无效
EFFECT_CANNOT_DISABLE_SPSUMMON =27 --特殊召唤不会无效
EFFECT_SET_SUMMON_COUNT_LIMIT =28 --设置每回合召唤次数
EFFECT_EXTRA_SUMMON_COUNT =29 --增加召唤(通常召唤)次数
EFFECT_SPSUMMON_CONDITION =30 --特殊召唤条件
EFFECT_REVIVE_LIMIT =31 --有苏生限制的怪獸(Card.EnableReviveLimit())
EFFECT_SUMMON_PROC =32 --召唤规则效果
EFFECT_LIMIT_SUMMON_PROC =33 --召唤规则限制
EFFECT_SPSUMMON_PROC =34 --特殊召唤规则
EFFECT_EXTRA_SET_COUNT =35 --增加盖放(通常召唤)次数
EFFECT_SET_PROC =36 --放置(通常召唤)规则
EFFECT_LIMIT_SET_PROC =37 --放置(通常召唤)规则限制
EFFECT_DIVINE_LIGHT =38 --神圣光辉
EFFECT_CANNOT_DISABLE_FLIP_SUMMON =39 --翻转召唤不会无效
EFFECT_INDESTRUCTABLE =40 --不会被破坏
EFFECT_INDESTRUCTABLE_EFFECT =41 --不会被效果破坏
EFFECT_INDESTRUCTABLE_BATTLE =42 --不会被战斗破坏
EFFECT_UNRELEASABLE_SUM =43 --不能做上级召唤的祭品
EFFECT_UNRELEASABLE_NONSUM =44 --不能做上级召唤以外的祭品
EFFECT_DESTROY_SUBSTITUTE =45 --必選的代替破壞(此卡被破壞時用其他卡代替)
EFFECT_CANNOT_RELEASE =46 --不能进行解放行为
EFFECT_INDESTRUCTABLE_COUNT =47 --一回合几次不会被破坏
EFFECT_UNRELEASABLE_EFFECT =48 --不能被解放
EFFECT_DESTROY_REPLACE =50 --可選的代替破壞(將破壞改成其他動作)
EFFECT_RELEASE_REPLACE =51 --代替解放
EFFECT_SEND_REPLACE =52 --可以不送去XX而送去OO(甜点城堡等)
EFFECT_CANNOT_DISCARD_HAND =55 --不能丢弃手牌
EFFECT_CANNOT_DISCARD_DECK =56 --不能把卡组的卡送去墓地
EFFECT_CANNOT_USE_AS_COST =57 --不能作为COST使用
EFFECT_CANNOT_PLACE_COUNTER =58 --不能放置counter
EFFECT_CANNOT_TO_GRAVE_AS_COST =59 --不能作为COST送去墓地
EFFECT_LEAVE_FIELD_REDIRECT =60 --离场时重新指定去向
EFFECT_TO_HAND_REDIRECT =61 --回手牌时重新指定去向
EFFECT_TO_DECK_REDIRECT =62 --回卡组时重新指定去向
EFFECT_TO_GRAVE_REDIRECT =63 --去墓地时重新指定去向
EFFECT_REMOVE_REDIRECT =64 --除外时重新指定去向
EFFECT_CANNOT_TO_HAND =65 --不能加入手牌
EFFECT_CANNOT_TO_DECK =66 --不能回卡组
EFFECT_CANNOT_REMOVE =67 --不能封锁
EFFECT_CANNOT_TO_GRAVE =68 --不能去墓地
EFFECT_CANNOT_TURN_SET =69 --不能变里侧
EFFECT_CANNOT_BE_BATTLE_TARGET =70 --不能成为攻击对象
EFFECT_CANNOT_BE_EFFECT_TARGET =71 --不能成为效果对象
EFFECT_IGNORE_BATTLE_TARGET =72 --不能成为攻击对象-鶸型(传说的渔人)
EFFECT_CANNOT_DIRECT_ATTACK =73 --不能直接攻击
EFFECT_DIRECT_ATTACK =74 --可以直接攻击
EFFECT_DUAL_STATUS =75 --二重状态
EFFECT_EQUIP_LIMIT =76 --装备对象限制
EFFECT_DUAL_SUMMONABLE =77 --可以再度召唤
EFFECT_UNION_LIMIT =78 --
EFFECT_REVERSE_DAMAGE =80 --伤害变回复
EFFECT_REVERSE_RECOVER =81 --回复变伤害
EFFECT_CHANGE_DAMAGE =82 --改变伤害数值
EFFECT_REFLECT_DAMAGE =83 --反射伤害
EFFECT_CANNOT_ATTACK =85 --不能攻击
EFFECT_CANNOT_ATTACK_ANNOUNCE =86 --不能攻击宣言
EFFECT_CANNOT_CHANGE_POS_E =87 --不会被卡的效果变成守备表示(攻击性云魔物)
EFFECT_ACTIVATE_COST =90 --发动代价(魔力之枷)
EFFECT_SUMMON_COST =91 --召唤代价
EFFECT_SPSUMMON_COST =92 --特殊召唤代价(暴君龙)
EFFECT_FLIPSUMMON_COST =93 --翻转召唤代价
EFFECT_MSET_COST =94 --怪兽放置代价
EFFECT_SSET_COST =95 --魔陷放置代价
EFFECT_ATTACK_COST =96 --攻击代价(霞之谷猎鹰)
EFFECT_IMMUNE_EFFECT = 1 --效果免疫
EFFECT_DISABLE = 2 --效果无效(技能抽取)
EFFECT_CANNOT_DISABLE = 3 --卡的效果不能被无效
EFFECT_SET_CONTROL = 4 --设置控制权
EFFECT_CANNOT_CHANGE_CONTROL = 5 --不能改变控制权
EFFECT_CANNOT_ACTIVATE = 6 --玩家不能发动效果
EFFECT_CANNOT_TRIGGER = 7 --卡不能发动效果
EFFECT_DISABLE_EFFECT = 8 --效果无效(聖杯)
EFFECT_DISABLE_CHAIN = 9 --在連鎖串中無效(processor.cpp)
EFFECT_DISABLE_TRAPMONSTER = 10 --陷阱怪兽无效
EFFECT_CANNOT_INACTIVATE = 12 --发动不能被无效
EFFECT_CANNOT_DISEFFECT = 13 --发动的效果不能被无效
EFFECT_CANNOT_CHANGE_POSITION = 14 --不能改变表示形式
EFFECT_TRAP_ACT_IN_HAND = 15 --陷阱可以从手牌发动
EFFECT_TRAP_ACT_IN_SET_TURN = 16 --陷阱可以在盖放的回合发动
EFFECT_REMAIN_FIELD = 17 --X回合内留在场上(光之护封剑等)
EFFECT_MONSTER_SSET = 18 --怪兽可以在魔陷区放置
EFFECT_CANNOT_SUMMON = 20 --不能召唤怪兽
EFFECT_CANNOT_FLIP_SUMMON = 21 --不能翻转召唤怪兽
EFFECT_CANNOT_SPECIAL_SUMMON = 22 --不能特殊召唤怪兽
EFFECT_CANNOT_MSET = 23 --不能覆盖怪兽
EFFECT_CANNOT_SSET = 24 --不能覆盖魔陷
EFFECT_CANNOT_DRAW = 25 --不能抽卡
EFFECT_CANNOT_DISABLE_SUMMON = 26 --召唤不会无效
EFFECT_CANNOT_DISABLE_SPSUMMON = 27 --特殊召唤不会无效
EFFECT_SET_SUMMON_COUNT_LIMIT = 28 --设置每回合召唤次数
EFFECT_EXTRA_SUMMON_COUNT = 29 --增加召唤(通常召唤)次数
EFFECT_SPSUMMON_CONDITION = 30 --特殊召唤条件
EFFECT_REVIVE_LIMIT = 31 --有苏生限制的怪獸(Card.EnableReviveLimit())
EFFECT_SUMMON_PROC = 32 --召唤规则效果
EFFECT_LIMIT_SUMMON_PROC = 33 --召唤规则限制
EFFECT_SPSUMMON_PROC = 34 --特殊召唤规则
EFFECT_EXTRA_SET_COUNT = 35 --增加盖放(通常召唤)次数
EFFECT_SET_PROC = 36 --放置(通常召唤)规则
EFFECT_LIMIT_SET_PROC = 37 --放置(通常召唤)规则限制
EFFECT_DIVINE_LIGHT = 38 --神圣光辉
EFFECT_CANNOT_DISABLE_FLIP_SUMMON = 39 --翻转召唤不会无效
EFFECT_INDESTRUCTABLE = 40 --不会被破坏
EFFECT_INDESTRUCTABLE_EFFECT = 41 --不会被效果破坏
EFFECT_INDESTRUCTABLE_BATTLE = 42 --不会被战斗破坏
EFFECT_UNRELEASABLE_SUM = 43 --不能做上级召唤的祭品
EFFECT_UNRELEASABLE_NONSUM = 44 --不能做上级召唤以外的祭品
EFFECT_DESTROY_SUBSTITUTE = 45 --必選的代替破壞(此卡被破壞時用其他卡代替)
EFFECT_CANNOT_RELEASE = 46 --不能进行解放行为
EFFECT_INDESTRUCTABLE_COUNT = 47 --一回合几次不会被破坏
EFFECT_UNRELEASABLE_EFFECT = 48 --不能被解放
EFFECT_DESTROY_REPLACE = 50 --可選的代替破壞(將破壞改成其他動作)
EFFECT_RELEASE_REPLACE = 51 --代替解放
EFFECT_SEND_REPLACE = 52 --可以不送去XX而送去OO(甜点城堡等)
EFFECT_CANNOT_DISCARD_HAND = 55 --不能丢弃手牌
EFFECT_CANNOT_DISCARD_DECK = 56 --不能把卡组的卡送去墓地
EFFECT_CANNOT_USE_AS_COST = 57 --不能作为COST使用
EFFECT_CANNOT_PLACE_COUNTER = 58 --不能放置counter
EFFECT_CANNOT_TO_GRAVE_AS_COST = 59 --不能作为COST送去墓地
EFFECT_LEAVE_FIELD_REDIRECT = 60 --离场时重新指定去向
EFFECT_TO_HAND_REDIRECT = 61 --回手牌时重新指定去向
EFFECT_TO_DECK_REDIRECT = 62 --回卡组时重新指定去向
EFFECT_TO_GRAVE_REDIRECT = 63 --去墓地时重新指定去向
EFFECT_REMOVE_REDIRECT = 64 --除外时重新指定去向
EFFECT_CANNOT_TO_HAND = 65 --不能加入手牌
EFFECT_CANNOT_TO_DECK = 66 --不能回卡组
EFFECT_CANNOT_REMOVE = 67 --不能封锁
EFFECT_CANNOT_TO_GRAVE = 68 --不能去墓地
EFFECT_CANNOT_TURN_SET = 69 --不能变里侧
EFFECT_CANNOT_BE_BATTLE_TARGET = 70 --不能成为攻击对象
EFFECT_CANNOT_BE_EFFECT_TARGET = 71 --不能成为效果对象
EFFECT_IGNORE_BATTLE_TARGET = 72 --不能成为攻击对象- 鶸型(传说的渔人)
EFFECT_CANNOT_DIRECT_ATTACK = 73 --不能直接攻击
EFFECT_DIRECT_ATTACK = 74 --可以直接攻击
EFFECT_DUAL_STATUS = 75 --二重状态
EFFECT_EQUIP_LIMIT = 76 --装备对象限制
EFFECT_DUAL_SUMMONABLE = 77 --可以再度召唤
EFFECT_UNION_LIMIT = 78 --
EFFECT_REVERSE_DAMAGE = 80 --伤害变回复
EFFECT_REVERSE_RECOVER = 81 --回复变伤害
EFFECT_CHANGE_DAMAGE = 82 --改变伤害数值
EFFECT_REFLECT_DAMAGE = 83 --反射伤害
EFFECT_CANNOT_ATTACK = 85 --不能攻击
EFFECT_CANNOT_ATTACK_ANNOUNCE = 86 --不能攻击宣言
EFFECT_CANNOT_CHANGE_POS_E = 87 --不会被卡的效果变成守备表示(攻击性云魔物)
EFFECT_ACTIVATE_COST = 90 --发动代价(魔力之枷)
EFFECT_SUMMON_COST = 91 --召唤代价
EFFECT_SPSUMMON_COST = 92 --特殊召唤代价(暴君龙)
EFFECT_FLIPSUMMON_COST = 93 --翻转召唤代价
EFFECT_MSET_COST = 94 --怪兽放置代价
EFFECT_SSET_COST = 95 --魔陷放置代价
EFFECT_ATTACK_COST = 96 --攻击代价(霞之谷猎鹰)
EFFECT_UPDATE_ATTACK =100 --增减攻击力
EFFECT_SET_ATTACK =101 --设置自身攻击力、攻击力变成X特殊召唤、持续改变攻击力
EFFECT_SET_ATTACK_FINAL =102 --暂时改变攻击力(所有置入连锁的效果)
EFFECT_SET_BASE_ATTACK =103 --设置自身原本攻击力、持续改变原本攻击力
EFFECT_UPDATE_DEFENSE =104 --增减守备力
EFFECT_SET_DEFENSE =105 --设置自身守备力、守备力变成X特殊召唤、持续改变守备力
EFFECT_SET_DEFENSE_FINAL =106 --暂时改变守备力(所有置入连锁的效果)
EFFECT_SET_BASE_DEFENSE =107 --设置自身原本守备力、持续改变原本守备力
EFFECT_REVERSE_UPDATE =108 --倒置增减攻击力、防御力(天邪鬼)
EFFECT_SWAP_AD =109 --交换攻守(超級漏洞人)
EFFECT_SWAP_BASE_AD =110 --交换原本攻守
EFFECT_SET_BASE_ATTACK_FINAL =111 --暂时改变原本攻击力
EFFECT_SET_BASE_DEFENSE_FINAL =112 --暂时改变原本防御力
EFFECT_ADD_CODE =113 --增加卡名
EFFECT_CHANGE_CODE =114 --改变卡名
EFFECT_ADD_TYPE =115 --增加卡片种类(types)
EFFECT_REMOVE_TYPE =116 --删除卡片种类
EFFECT_CHANGE_TYPE =117 --改变卡片种类
EFFECT_ADD_RACE =120 --增加种族
EFFECT_REMOVE_RACE =121 --删除种族
EFFECT_CHANGE_RACE =122 --改变种族
EFFECT_UPDATE_ATTACK = 100 --增减攻击力
EFFECT_SET_ATTACK = 101 --设置自身攻击力、攻击力变成X特殊召唤、持续改变攻击力
EFFECT_SET_ATTACK_FINAL = 102 --暂时改变攻击力(所有置入连锁的效果)
EFFECT_SET_BASE_ATTACK = 103 --设置自身原本攻击力、持续改变原本攻击力
EFFECT_UPDATE_DEFENSE = 104 --增减守备力
EFFECT_SET_DEFENSE = 105 --设置自身守备力、守备力变成X特殊召唤、持续改变守备力
EFFECT_SET_DEFENSE_FINAL = 106 --暂时改变守备力(所有置入连锁的效果)
EFFECT_SET_BASE_DEFENSE = 107 --设置自身原本守备力、持续改变原本守备力
EFFECT_REVERSE_UPDATE = 108 --倒置增减攻击力、防御力(天邪鬼)
EFFECT_SWAP_AD = 109 --交换攻守(超級漏洞人)
EFFECT_SWAP_BASE_AD = 110 --交换原本攻守
EFFECT_SET_BASE_ATTACK_FINAL = 111 --暂时改变原本攻击力
EFFECT_SET_BASE_DEFENSE_FINAL = 112 --暂时改变原本防御力
EFFECT_ADD_CODE = 113 --增加卡名
EFFECT_CHANGE_CODE = 114 --改变卡名
EFFECT_ADD_TYPE = 115 --增加卡片种类(types)
EFFECT_REMOVE_TYPE = 116 --删除卡片种类
EFFECT_CHANGE_TYPE = 117 --改变卡片种类
EFFECT_ADD_RACE = 120 --增加种族
EFFECT_REMOVE_RACE = 121 --删除种族
EFFECT_CHANGE_RACE = 122 --改变种族
EFFECT_ADD_SKILL =125 --增加技能
EFFECT_REMOVE_SKILL =126 --删除技能
EFFECT_CHANGE_SKILL =127 --改变技能
EFFECT_UPDATE_LEVEL =130 --改变等级
EFFECT_CHANGE_LEVEL =131 --设置等级
EFFECT_UPDATE_RANK =132 --改变阶级
EFFECT_CHANGE_RANK =133 --设置阶级
EFFECT_UPDATE_LSCALE =134 --改变左刻度
EFFECT_CHANGE_LSCALE =135 --设置左刻度
EFFECT_UPDATE_RSCALE =136 --改变右刻度
EFFECT_CHANGE_RSCALE =137 --设置右刻度
EFFECT_SET_POSITION =140 --設定表示形式
EFFECT_SELF_DESTROY =141 --不入連鎖的破壞(罪系列等)
EFFECT_SELF_TOGRAVE =142 --不入連鎖的送墓
EFFECT_DOUBLE_TRIBUTE =150 --可以作为2个祭品
EFFECT_DECREASE_TRIBUTE =151 --减少祭品
EFFECT_DECREASE_TRIBUTE_SET =152 --减少放置怪兽的祭品
EFFECT_EXTRA_RELEASE =153 --必須使用的代替解放(灵魂交错)
EFFECT_TRIBUTE_LIMIT =154 --祭品限制
EFFECT_EXTRA_RELEASE_SUM =155 --代替召唤解放(帝王的烈旋)
EFFECT_TRIPLE_TRIBUTE =156 --N/A
EFFECT_ADD_EXTRA_TRIBUTE =157 --增加可使用的祭品(真龙)
EFFECT_EXTRA_RELEASE_NONSUM =158 --代替效果COST的解放(闇黒世界)
EFFECT_PUBLIC =160 --公开手牌
EFFECT_COUNTER_PERMIT =0x10000--允许放置指示物类型
EFFECT_COUNTER_LIMIT =0x20000--允许放置指示物数量
EFFECT_RCOUNTER_REPLACE =0x30000--代替取除指示物
EFFECT_LPCOST_CHANGE =170 --改变生命值代价數值
EFFECT_LPCOST_REPLACE =171 --以其他動作代替生命值代价
EFFECT_SKIP_DP =180 --跳过抽卡阶段
EFFECT_SKIP_SP =181 --跳过准备阶段
EFFECT_SKIP_M1 =182 --跳过主要阶段1
EFFECT_SKIP_BP =183 --跳过战斗阶段
EFFECT_SKIP_M2 =184 --跳过主要阶段2
EFFECT_CANNOT_BP =185 --不能进入战斗阶段
EFFECT_CANNOT_M2 =186 --不能进入主要阶段2
EFFECT_CANNOT_EP =187 --不能进入结束阶段
EFFECT_SKIP_TURN =188 --跳过整个回合
EFFECT_DEFENSE_ATTACK =190 --可以守备表示攻击
EFFECT_MUST_ATTACK =191 --必须攻击
EFFECT_FIRST_ATTACK =192 --必须第一个攻击
EFFECT_ATTACK_ALL =193 --可以攻击所有怪兽
EFFECT_EXTRA_ATTACK =194 --增加攻击次数
EFFECT_MUST_BE_ATTACKED =195 --N/A
EFFECT_ONLY_BE_ATTACKED =196 --只能攻击此卡
EFFECT_ATTACK_DISABLED =197 --攻击已被無效(Duel.NegateAttack()成功的標記)
EFFECT_NO_BATTLE_DAMAGE =200 --不会给对方造成战斗伤害
EFFECT_AVOID_BATTLE_DAMAGE =201 --不会对自己造成战斗伤害
EFFECT_REFLECT_BATTLE_DAMAGE =202 --战斗伤害由对方代为承受
EFFECT_PIERCE =203 --贯穿伤害
EFFECT_BATTLE_DESTROY_REDIRECT =204 --战斗破坏时重新指定去向
EFFECT_BATTLE_DAMAGE_TO_EFFECT =205 --战斗伤害视为效果伤害
EFFECT_BOTH_BATTLE_DAMAGE =206 --战斗伤害由双方承受
EFFECT_ALSO_BATTLE_DAMAGE =207 --对自己的战斗伤害让对方也承受
EFFECT_CHANGE_BATTLE_DAMAGE =208 --改变此卡给予的战斗伤害、改变玩家受到的战斗伤害
EFFECT_TOSS_COIN_REPLACE =220 --重新抛硬币
EFFECT_TOSS_DICE_REPLACE =221 --重新掷骰子
EFFECT_FUSION_MATERIAL =230 --指定融合素材的條件
EFFECT_CHAIN_MATERIAL =231 --改变融合素材选取方法(连锁素材、电子融合支援)
EFFECT_EXTRA_SYNCHRO_MATERIAL =232 --在手卡或对方场上也可以当作自己的同调素材
EFFECT_XYZ_MATERIAL =233 --在对方场上也可以当作自己的超量素材
EFFECT_FUSION_SUBSTITUTE =234 --代替融合素材
EFFECT_CANNOT_BE_FUSION_MATERIAL =235--不能做融合素材
EFFECT_CANNOT_BE_SYNCHRO_MATERIAL =236--不能做同调素材
EFFECT_SYNCHRO_MATERIAL_CUSTOM =237--自定义Tuner的同调过程
EFFECT_CANNOT_BE_XYZ_MATERIAL =238--不能做超量素材
EFFECT_CANNOT_BE_LINK_MATERIAL =239--不能做连接素材
EFFECT_SYNCHRO_LEVEL =240--做同调素材时的等级
EFFECT_RITUAL_LEVEL =241--做仪式祭品时的等级
EFFECT_XYZ_LEVEL =242--做超量素材时的等级
EFFECT_EXTRA_RITUAL_MATERIAL =243--在墓地当做仪式祭品
EFFECT_NONTUNER =244--同调召唤时可以当作调整以外的怪兽(幻影王 幽骑)
EFFECT_OVERLAY_REMOVE_REPLACE =245--代替去除超量素材
EFFECT_SCRAP_CHIMERA =246--废铁奇美拉
EFFECT_TUNE_MAGICIAN_X =247--调弦之魔术师超量素材限制
EFFECT_TUNE_MAGICIAN_F =248--调弦之魔术师融合素材限制
EFFECT_PRE_MONSTER =250 --可存取怪獸的各項數值(Card.AddMonsterAttribute()專用)
EFFECT_MATERIAL_CHECK =251 --检查素材
EFFECT_DISABLE_FIELD =260 --无效区域(扰乱王等)
EFFECT_USE_EXTRA_MZONE =261 --怪兽区域封锁
EFFECT_USE_EXTRA_SZONE =262 --魔法区域封锁
EFFECT_MAX_MZONE =263 --怪獸区格數上限
EFFECT_MAX_SZONE =264 --魔陷区格數上限
EFFECT_MUST_USE_MZONE =265 --必须使用怪兽区的格子
EFFECT_HAND_LIMIT =270 --手牌数量限制
EFFECT_DRAW_COUNT =271 --抽卡阶段的抽卡数
EFFECT_SPIRIT_DONOT_RETURN =280 --灵魂怪兽不返回手牌
EFFECT_SPIRIT_MAYNOT_RETURN =281 --灵魂怪兽可以不返回手牌
EFFECT_CHANGE_ENVIRONMENT =290 --改变场地
EFFECT_NECRO_VALLEY =291 --王家长眠之谷
EFFECT_FORBIDDEN =292 --不能Play(禁止令)
EFFECT_NECRO_VALLEY_IM =293 --不受「王家长眠之谷」的影响
EFFECT_REVERSE_DECK =294 --翻转卡组
EFFECT_REMOVE_BRAINWASHING =295 --洗脑解除
EFFECT_BP_TWICE =296 --2次战斗阶段
EFFECT_UNIQUE_CHECK =297 --場上只能存在1張(Card.SetUniqueOnField()專用)
EFFECT_MATCH_KILL =300 --Match胜利(胜利龙)
EFFECT_SYNCHRO_CHECK =310 --基因组斗士
EFFECT_QP_ACT_IN_NTPHAND =311 --对方回合从自己手卡发动(失乐的圣女)
EFFECT_MUST_BE_SMATERIAL =312 --必须作为同调素材(波动龙 声子龙)
EFFECT_TO_GRAVE_REDIRECT_CB =313 --重新指定去向(寶玉獸)
EFFECT_CHANGE_INVOLVING_BATTLE_DAMAGE =314 --改变此卡的战斗产生的战斗伤害
EFFECT_CHANGE_RANK_FINAL =315 --N/A
EFFECT_MUST_BE_FMATERIAL =316 --必须作为融合素材
EFFECT_MUST_BE_XMATERIAL =317 --必须作为超量素材
EFFECT_MUST_BE_LMATERIAL =318 --必须作为连接素材
EFFECT_SPSUMMON_PROC_G =320 --P召唤规则
EFFECT_SPSUMMON_COUNT_LIMIT =330 --特殊召唤次数限制
EFFECT_LEFT_SPSUMMON_COUNT =331 --剩餘召喚次數(召喚限制網)
EFFECT_CANNOT_SELECT_BATTLE_TARGET =332 --對手不能選擇為攻擊對象
EFFECT_CANNOT_SELECT_EFFECT_TARGET =333 --對手不能選擇為效果對象
EFFECT_ADD_SETCODE =334 --视为「XX」字段的效果
EFFECT_NO_EFFECT_DAMAGE =335 --玩家已受到"效果傷害變成0"的效果影響(只用于检查,实际免伤仍需要EFFECT_CHANGE_DAMAGE等)
EFFECT_UNSUMMONABLE_CARD =336 --N/A
EFFECT_DISABLE_CHAIN_FIELD =337 --N/A
EFFECT_DISCARD_COST_CHANGE =338 --反制陷阱捨棄手牌的代價改變(解放之阿里阿德涅)
EFFECT_HAND_SYNCHRO =339 --用手牌的怪獸當作同步素材
EFFECT_ADD_FUSION_CODE =340 --作为融合素材时可以当作某一卡名(融合识别)
EFFECT_ADD_FUSION_SETCODE =341 --作为融合素材时可以当作某一字段(魔玩具改造)
EFFECT_RISE_TO_FULL_HEIGHT =342 --N/A
EFFECT_ONLY_ATTACK_MONSTER =343 --只能攻擊X
EFFECT_MUST_ATTACK_MONSTER =344 --若攻擊則必須攻擊X
EFFECT_PATRICIAN_OF_DARKNESS =345 --由對手選擇攻擊對象(黑暗貴族)
EFFECT_EXTRA_ATTACK_MONSTER =346 --對怪獸攻擊X次
EFFECT_UNION_STATUS =347 --同盟状态
EFFECT_OLDUNION_STATUS =348 --旧同盟状态
EFFECT_ADD_FUSION_ATTRIBUTE =349 --reserve
EFFECT_REMOVE_FUSION_ATTRIBUTE =350 --reserve
EFFECT_CHANGE_FUSION_ATTRIBUTE =351 --用作融合素材时的属性
EFFECT_EXTRA_FUSION_MATERIAL =352 --增加融合素材(万溶炼金师)
EFFECT_TUNER_MATERIAL_LIMIT =353 --同调素材限制
EFFECT_ADD_LINK_CODE =354 --用作连接素材时的卡名
EFFECT_ADD_LINK_SETCODE =355 --reserve
EFFECT_ADD_LINK_ATTRIBUTE =356 --用作连接素材时的属性
EFFECT_ADD_LINK_RACE =357 --用作连接素材时的种族
EFFECT_EXTRA_LINK_MATERIAL =358 --手卡的连接素材
EFFECT_QP_ACT_IN_SET_TURN =359 --速攻魔法可以在盖放的回合发动
EFFECT_EXTRA_PENDULUM_SUMMON =360 --extra pendulum summon
EFFECT_MATERIAL_LIMIT =361 --
EFFECT_SET_BATTLE_ATTACK =362 --战斗的伤害计算用设置的攻击力进行
EFFECT_SET_BATTLE_DEFENSE =363 --战斗的伤害计算用设置的守备力进行
EFFECT_CHANGE_SKILL = 127 --改变技能
EFFECT_UPDATE_LEVEL = 130 --改变等级
EFFECT_CHANGE_LEVEL = 131 --设置等级
EFFECT_UPDATE_RANK = 132 --改变阶级
EFFECT_CHANGE_RANK = 133 --设置阶级
EFFECT_UPDATE_LSCALE = 134 --改变左刻度
EFFECT_CHANGE_LSCALE = 135 --设置左刻度
EFFECT_UPDATE_RSCALE = 136 --改变右刻度
EFFECT_CHANGE_RSCALE = 137 --设置右刻度
EFFECT_SET_POSITION = 140 --設定表示形式
EFFECT_SELF_DESTROY = 141 --不入連鎖的破壞(罪系列等)
EFFECT_SELF_TOGRAVE = 142 --不入連鎖的送墓
EFFECT_DOUBLE_TRIBUTE = 150 --可以作为2个祭品
EFFECT_DECREASE_TRIBUTE = 151 --减少祭品
EFFECT_DECREASE_TRIBUTE_SET = 152 --减少放置怪兽的祭品
EFFECT_EXTRA_RELEASE = 153 --必須使用的代替解放(灵魂交错)
EFFECT_TRIBUTE_LIMIT = 154 --祭品限制
EFFECT_EXTRA_RELEASE_SUM = 155 --代替召唤解放(帝王的烈旋)
EFFECT_TRIPLE_TRIBUTE = 156 --N/A
EFFECT_ADD_EXTRA_TRIBUTE = 157 --增加可使用的祭品(真龙)
EFFECT_EXTRA_RELEASE_NONSUM = 158 --代替效果COST的解放(闇黒世界)
EFFECT_PUBLIC = 160 --公开手牌
EFFECT_COUNTER_PERMIT = 0x10000--允许放置指示物类型
EFFECT_COUNTER_LIMIT = 0x20000--允许放置指示物数量
EFFECT_RCOUNTER_REPLACE = 0x30000--代替取除指示物
EFFECT_LPCOST_CHANGE = 170 --改变生命值代价數值
EFFECT_LPCOST_REPLACE = 171 --以其他動作代替生命值代价
EFFECT_SKIP_DP = 180 --跳过抽卡阶段
EFFECT_SKIP_SP = 181 --跳过准备阶段
EFFECT_SKIP_M1 = 182 --跳过主要阶段1
EFFECT_SKIP_BP = 183 --跳过战斗阶段
EFFECT_SKIP_M2 = 184 --跳过主要阶段2
EFFECT_CANNOT_BP = 185 --不能进入战斗阶段
EFFECT_CANNOT_M2 = 186 --不能进入主要阶段2
EFFECT_CANNOT_EP = 187 --不能进入结束阶段
EFFECT_SKIP_TURN = 188 --跳过整个回合
EFFECT_DEFENSE_ATTACK = 190 --可以守备表示攻击
EFFECT_MUST_ATTACK = 191 --必须攻击
EFFECT_FIRST_ATTACK = 192 --必须第一个攻击
EFFECT_ATTACK_ALL = 193 --可以攻击所有怪兽
EFFECT_EXTRA_ATTACK = 194 --增加攻击次数
EFFECT_MUST_BE_ATTACKED = 195 --N/A
EFFECT_ONLY_BE_ATTACKED = 196 --只能攻击此卡
EFFECT_ATTACK_DISABLED = 197 --攻击已被無效(Duel.NegateAttack()成功的標記)
EFFECT_NO_BATTLE_DAMAGE = 200 --不会给对方造成战斗伤害
EFFECT_AVOID_BATTLE_DAMAGE = 201 --不会对自己造成战斗伤害
EFFECT_REFLECT_BATTLE_DAMAGE = 202 --战斗伤害由对方代为承受
EFFECT_PIERCE = 203 --贯穿伤害
EFFECT_BATTLE_DESTROY_REDIRECT = 204 --战斗破坏时重新指定去向
EFFECT_BATTLE_DAMAGE_TO_EFFECT = 205 --战斗伤害视为效果伤害
EFFECT_BOTH_BATTLE_DAMAGE = 206 --战斗伤害由双方承受
EFFECT_ALSO_BATTLE_DAMAGE = 207 --对自己的战斗伤害让对方也承受
EFFECT_CHANGE_BATTLE_DAMAGE = 208 --改变此卡给予的战斗伤害、改变玩家受到的战斗伤害
EFFECT_TOSS_COIN_REPLACE = 220 --重新抛硬币
EFFECT_TOSS_DICE_REPLACE = 221 --重新掷骰子
EFFECT_FUSION_MATERIAL = 230 --指定融合素材的條件
EFFECT_CHAIN_MATERIAL = 231 --改变融合素材选取方法(连锁素材、电子融合支援)
EFFECT_EXTRA_SYNCHRO_MATERIAL = 232 --在手卡或对方场上也可以当作自己的同调素材
EFFECT_XYZ_MATERIAL = 233 --在对方场上也可以当作自己的超量素材
EFFECT_FUSION_SUBSTITUTE = 234 --代替融合素材
EFFECT_CANNOT_BE_FUSION_MATERIAL = 235--不能做融合素材
EFFECT_CANNOT_BE_SYNCHRO_MATERIAL = 236--不能做同调素材
EFFECT_SYNCHRO_MATERIAL_CUSTOM = 237--自定义Tuner的同调过程
EFFECT_CANNOT_BE_XYZ_MATERIAL = 238--不能做超量素材
EFFECT_CANNOT_BE_LINK_MATERIAL = 239--不能做连接素材
EFFECT_SYNCHRO_LEVEL = 240--做同调素材时的等级
EFFECT_RITUAL_LEVEL = 241--做仪式祭品时的等级
EFFECT_XYZ_LEVEL = 242--做超量素材时的等级
EFFECT_EXTRA_RITUAL_MATERIAL = 243--在墓地当做仪式祭品
EFFECT_NONTUNER = 244--同调召唤时可以当作调整以外的怪兽(幻影王 幽骑)
EFFECT_OVERLAY_REMOVE_REPLACE = 245--代替去除超量素材
EFFECT_SCRAP_CHIMERA = 246--废铁奇美拉
EFFECT_TUNE_MAGICIAN_X = 247--调弦之魔术师超量素材限制
EFFECT_TUNE_MAGICIAN_F = 248--调弦之魔术师融合素材限制
EFFECT_PRE_MONSTER = 250 --可存取怪獸的各項數值(Card.AddMonsterAttribute()專用)
EFFECT_MATERIAL_CHECK = 251 --检查素材
EFFECT_DISABLE_FIELD = 260 --无效区域(扰乱王等)
EFFECT_USE_EXTRA_MZONE = 261 --怪兽区域封锁
EFFECT_USE_EXTRA_SZONE = 262 --魔法区域封锁
EFFECT_MAX_MZONE = 263 --怪獸区格數上限
EFFECT_MAX_SZONE = 264 --魔陷区格數上限
EFFECT_MUST_USE_MZONE = 265 --必须使用怪兽区的格子
EFFECT_HAND_LIMIT = 270 --手牌数量限制
EFFECT_DRAW_COUNT = 271 --抽卡阶段的抽卡数
EFFECT_SPIRIT_DONOT_RETURN = 280 --灵魂怪兽不返回手牌
EFFECT_SPIRIT_MAYNOT_RETURN = 281 --灵魂怪兽可以不返回手牌
EFFECT_CHANGE_ENVIRONMENT = 290 --改变场地
EFFECT_NECRO_VALLEY = 291 --王家长眠之谷
EFFECT_FORBIDDEN = 292 --不能Play(禁止令)
EFFECT_NECRO_VALLEY_IM = 293 --不受「王家长眠之谷」的影响
EFFECT_REVERSE_DECK = 294 --翻转卡组
EFFECT_REMOVE_BRAINWASHING = 295 --洗脑解除
EFFECT_BP_TWICE = 296 --2次战斗阶段
EFFECT_UNIQUE_CHECK = 297 --場上只能存在1張(Card.SetUniqueOnField()專用)
EFFECT_MATCH_KILL = 300 --Match胜利(胜利龙)
EFFECT_SYNCHRO_CHECK = 310 --基因组斗士
EFFECT_QP_ACT_IN_NTPHAND = 311 --对方回合从自己手卡发动(失乐的圣女)
EFFECT_MUST_BE_SMATERIAL = 312 --必须作为同调素材(波动龙 声子龙)
EFFECT_TO_GRAVE_REDIRECT_CB = 313 --重新指定去向(寶玉獸)
EFFECT_CHANGE_INVOLVING_BATTLE_DAMAGE = 314 --改变此卡的战斗产生的战斗伤害
EFFECT_CHANGE_RANK_FINAL = 315 --N/A
EFFECT_MUST_BE_FMATERIAL = 316 --必须作为融合素材
EFFECT_MUST_BE_XMATERIAL = 317 --必须作为超量素材
EFFECT_MUST_BE_LMATERIAL = 318 --必须作为连接素材
EFFECT_SPSUMMON_PROC_G = 320 --P召唤规则
EFFECT_SPSUMMON_COUNT_LIMIT = 330 --特殊召唤次数限制
EFFECT_LEFT_SPSUMMON_COUNT = 331 --剩餘召喚次數(召喚限制網)
EFFECT_CANNOT_SELECT_BATTLE_TARGET = 332 --對手不能選擇為攻擊對象
EFFECT_CANNOT_SELECT_EFFECT_TARGET = 333 --對手不能選擇為效果對象
EFFECT_ADD_SETCODE = 334 --视为「XX」字段的效果
EFFECT_NO_EFFECT_DAMAGE = 335 --玩家已受到"效果傷害變成0"的效果影響(只用于检查,实际免伤仍需要EFFECT_CHANGE_DAMAGE等)
EFFECT_UNSUMMONABLE_CARD = 336 --N/A
EFFECT_DISABLE_CHAIN_FIELD = 337 --N/A
EFFECT_DISCARD_COST_CHANGE = 338 --反制陷阱捨棄手牌的代價改變(解放之阿里阿德涅)
EFFECT_HAND_SYNCHRO = 339 --用手牌的怪獸當作同步素材
EFFECT_ADD_FUSION_CODE = 340 --作为融合素材时可以当作某一卡名(融合识别)
EFFECT_ADD_FUSION_SETCODE = 341 --作为融合素材时可以当作某一字段(魔玩具改造)
EFFECT_RISE_TO_FULL_HEIGHT = 342 --N/A
EFFECT_ONLY_ATTACK_MONSTER = 343 --只能攻擊X
EFFECT_MUST_ATTACK_MONSTER = 344 --若攻擊則必須攻擊X
EFFECT_PATRICIAN_OF_DARKNESS = 345 --由對手選擇攻擊對象(黑暗貴族)
EFFECT_EXTRA_ATTACK_MONSTER = 346 --對怪獸攻擊X次
EFFECT_UNION_STATUS = 347 --同盟状态
EFFECT_OLDUNION_STATUS = 348 --旧同盟状态
EFFECT_ADD_FUSION_ATTRIBUTE = 349 --reserve
EFFECT_REMOVE_FUSION_ATTRIBUTE = 350 --reserve
EFFECT_CHANGE_FUSION_ATTRIBUTE = 351 --用作融合素材时的属性
EFFECT_EXTRA_FUSION_MATERIAL = 352 --增加融合素材(万溶炼金师)
EFFECT_TUNER_MATERIAL_LIMIT = 353 --同调素材限制
EFFECT_ADD_LINK_CODE = 354 --用作连接素材时的卡名
EFFECT_ADD_LINK_SETCODE = 355 --reserve
EFFECT_ADD_LINK_ATTRIBUTE = 356 --用作连接素材时的属性
EFFECT_ADD_LINK_RACE = 357 --用作连接素材时的种族
EFFECT_EXTRA_LINK_MATERIAL = 358 --手卡的连接素材
EFFECT_QP_ACT_IN_SET_TURN = 359 --速攻魔法可以在盖放的回合发动
EFFECT_EXTRA_PENDULUM_SUMMON = 360 --extra pendulum summon
EFFECT_MATERIAL_LIMIT = 361 --
EFFECT_SET_BATTLE_ATTACK = 362 --战斗的伤害计算用设置的攻击力进行
EFFECT_SET_BATTLE_DEFENSE = 363 --战斗的伤害计算用设置的守备力进行
EFFECT_OVERLAY_RITUAL_MATERIAL =364 --此卡的超量素材也能用于仪式召唤
EFFECT_CHANGE_GRAVE_ATTRIBUTE =365 --墓地的卡将会改变属性(升级转变)
EFFECT_CHANGE_GRAVE_RACE =366 --墓地的卡将会改变种族(升级转变)
EFFECT_ACTIVATION_COUNT_LIMIT =367 --reserve
EFFECT_LIMIT_SPECIAL_SUMMON_POSITION =368 --不能以特定表示形式特殊召唤
EFFECT_TUNER =369 --同调召唤时可以当作调整(百檎龙-苹果鳞虫)
EFFECT_KAISER_COLOSSEUM =370 --皇帝斗技场
EFFECT_REPLACE_DAMAGE =371 --伤害由特定行动代替
EFFECT_FLAG_EFFECT =0x20000000 --标记类效果,即RegisterFlagEffect()创建的效果
EFFECT_CANNOT_TO_EXILE =0x688 ----不能除外
EFFECT_CHANGE_GRAVE_ATTRIBUTE = 365 --墓地的卡将会改变属性(升级转变)
EFFECT_CHANGE_GRAVE_RACE = 366 --墓地的卡将会改变种族(升级转变)
EFFECT_ACTIVATION_COUNT_LIMIT = 367 --reserve
EFFECT_LIMIT_SPECIAL_SUMMON_POSITION = 368 --不能以特定表示形式特殊召唤
EFFECT_TUNER = 369 --同调召唤时可以当作调整(百檎龙- 苹果鳞虫)
EFFECT_KAISER_COLOSSEUM = 370 --皇帝斗技场
EFFECT_REPLACE_DAMAGE = 371 --伤害由特定行动代替
EFFECT_FLAG_EFFECT = 0x20000000 --标记类效果,即RegisterFlagEffect()创建的效果
EFFECT_CANNOT_TO_EXILE = 0x688 ----不能除外
--下面是诱发效果的诱发事件、时点 (如果是TYPE_SINGLE则自己发生以下事件后触发,如果TYPE_FIELD则场上任何卡发生以下事件都触发)
EVENT_STARTUP =1000 --N/A
EVENT_FLIP =1001 --翻转时
EVENT_FREE_CHAIN =1002 --自由时点(强脱等,还有昴星团等诱发即时效果)
EVENT_DESTROY =1010 --確定被破壞的卡片移動前
EVENT_REMOVE =1011 --除外时
EVENT_TO_HAND =1012 --加入手牌时
EVENT_TO_DECK =1013 --回卡组时
EVENT_TO_GRAVE =1014 --送去墓地时(不含REASON_RETURN)
EVENT_LEAVE_FIELD =1015 --离场时
EVENT_CHANGE_POS =1016 --表示形式变更时
EVENT_RELEASE =1017 --解放时
EVENT_DISCARD =1018 --丢弃手牌时
EVENT_LEAVE_FIELD_P =1019 --離場的卡片移動前
EVENT_CHAIN_SOLVING =1020 --连锁处理开始时(EVENT_CHAIN_ACTIVATING之後)
EVENT_CHAIN_ACTIVATING =1021 --连锁处理准备中
EVENT_CHAIN_SOLVED =1022 --连锁处理结束时
EVENT_CHAIN_ACTIVATED =1023 --N/A
EVENT_CHAIN_NEGATED =1024 --连锁发动无效时(EVENT_CHAIN_ACTIVATING之後)
EVENT_CHAIN_DISABLED =1025 --连锁效果无效时
EVENT_CHAIN_END =1026 --连锁串结束时
EVENT_CHAINING =1027 --效果发动时
EVENT_BECOME_TARGET =1028 --成为效果对象时
EVENT_DESTROYED =1029 --被破坏时
EVENT_MOVE =1030 --移動卡片(急兔馬)
EVENT_LEAVE_GRAVE =1031 --离开墓地时
EVENT_LEAVE_DECK =1032 --离开卡组或额外卡组时
EVENT_ADJUST =1040 --adjust_all()调整後(御前试合)
EVENT_BREAK_EFFECT =1050 --Duel.BreakEffect()被调用时
EVENT_SUMMON_SUCCESS =1100 --通常召唤成功时
EVENT_FLIP_SUMMON_SUCCESS =1101 --翻转召唤成功时
EVENT_SPSUMMON_SUCCESS =1102 --特殊召唤成功时
EVENT_SUMMON =1103 --召唤之际(怪兽还没上场、神宣等时点)
EVENT_FLIP_SUMMON =1104 --翻转召唤之际
EVENT_SPSUMMON =1105 --特殊召唤之际
EVENT_MSET =1106 --放置怪兽时
EVENT_SSET =1107 --放置魔陷时
EVENT_BE_MATERIAL =1108 --作为同调/超量/连结素材、用于升级召唤的解放、作为仪式/融合召唤的素材
EVENT_BE_PRE_MATERIAL =1109 --将要作为同调/超量/连结素材、用于升级召唤的解放
EVENT_DRAW =1110 --抽卡时
EVENT_DAMAGE =1111 --造成战斗/效果伤害时
EVENT_RECOVER =1112 --回复生命值时
EVENT_PREDRAW =1113 --抽卡阶段通常抽卡前
EVENT_SUMMON_NEGATED =1114 --召唤被无效时
EVENT_FLIP_SUMMON_NEGATED =1115 --反转召唤被无效时
EVENT_SPSUMMON_NEGATED =1116 --特殊召唤被无效时
EVENT_SPSUMMON_SUCCESS_G_P =1117 --EFFECT_SPSUMMON_PROC_G特殊召唤成功前(只能使用EFFECT_TYPE_CONTINUOUS)
EVENT_CONTROL_CHANGED =1120 --控制权变更
EVENT_EQUIP =1121 --装备卡装备时
EVENT_ATTACK_ANNOUNCE =1130 --攻击宣言时
EVENT_BE_BATTLE_TARGET =1131 --被选为攻击对象时
EVENT_BATTLE_START =1132 --伤害步骤开始时(反转前)
EVENT_BATTLE_CONFIRM =1133 --伤害计算前(反转後)
EVENT_PRE_DAMAGE_CALCULATE =1134 --伤害计算时(羽斬)
EVENT_DAMAGE_CALCULATING =1135 --N/A
EVENT_PRE_BATTLE_DAMAGE =1136 --即将产生战斗伤害(只能使用EFFECT_TYPE_CONTINUOUS)
EVENT_BATTLE_END =1137 --N/A
EVENT_BATTLED =1138 --伤害计算后(异女、同反转效果时点)
EVENT_BATTLE_DESTROYING =1139 --以战斗破坏怪兽送去墓地时(BF-苍炎之修罗)
EVENT_BATTLE_DESTROYED =1140 --被战斗破坏送去墓地时(杀人番茄等)
EVENT_DAMAGE_STEP_END =1141 --伤害步骤结束时
EVENT_ATTACK_DISABLED =1142 --攻击无效时(翻倍机会)
EVENT_BATTLE_DAMAGE =1143 --造成战斗伤害时
EVENT_TOSS_DICE =1150 --掷骰子的结果产生后
EVENT_TOSS_COIN =1151 --抛硬币的结果产生后
EVENT_TOSS_COIN_NEGATE =1152 --重新抛硬币
EVENT_TOSS_DICE_NEGATE =1153 --重新掷骰子
EVENT_LEVEL_UP =1200 --等级上升时
EVENT_PAY_LPCOST =1201 --支付生命值时
EVENT_DETACH_MATERIAL =1202 --去除超量素材时
EVENT_RETURN_TO_GRAVE =1203 --回到墓地时
EVENT_TURN_END =1210 --回合结束时
EVENT_PHASE =0x1000 --阶段结束时
EVENT_PHASE_START =0x2000 --阶段开始时
EVENT_ADD_COUNTER =0x10000 --增加指示物时
EVENT_REMOVE_COUNTER =0x20000 --去除指示物时(A指示物),Card.RemoveCounter()必須手動觸發此事件
EVENT_CUSTOM =0x10000000 --自訂事件
EVENT_STARTUP = 1000 --N/A
EVENT_FLIP = 1001 --翻转时
EVENT_FREE_CHAIN = 1002 --自由时点(强脱等,还有昴星团等诱发即时效果)
EVENT_DESTROY = 1010 --確定被破壞的卡片移動前
EVENT_REMOVE = 1011 --除外时
EVENT_TO_HAND = 1012 --加入手牌时
EVENT_TO_DECK = 1013 --回卡组时
EVENT_TO_GRAVE = 1014 --送去墓地时(不含REASON_RETURN)
EVENT_LEAVE_FIELD = 1015 --离场时
EVENT_CHANGE_POS = 1016 --表示形式变更时
EVENT_RELEASE = 1017 --解放时
EVENT_DISCARD = 1018 --丢弃手牌时
EVENT_LEAVE_FIELD_P = 1019 --離場的卡片移動前
EVENT_CHAIN_SOLVING = 1020 --连锁处理开始时(EVENT_CHAIN_ACTIVATING之後)
EVENT_CHAIN_ACTIVATING = 1021 --连锁处理准备中
EVENT_CHAIN_SOLVED = 1022 --连锁处理结束时
EVENT_CHAIN_ACTIVATED = 1023 --N/A
EVENT_CHAIN_NEGATED = 1024 --连锁发动无效时(EVENT_CHAIN_ACTIVATING之後)
EVENT_CHAIN_DISABLED = 1025 --连锁效果无效时
EVENT_CHAIN_END = 1026 --连锁串结束时
EVENT_CHAINING = 1027 --效果发动时
EVENT_BECOME_TARGET = 1028 --成为效果对象时
EVENT_DESTROYED = 1029 --被破坏时
EVENT_MOVE = 1030 --移動卡片(急兔馬)
EVENT_LEAVE_GRAVE = 1031 --离开墓地时
EVENT_LEAVE_DECK = 1032 --离开卡组或额外卡组时
EVENT_ADJUST = 1040 --adjust_all()调整後(御前试合)
EVENT_BREAK_EFFECT = 1050 --Duel.BreakEffect()被调用时
EVENT_SUMMON_SUCCESS = 1100 --通常召唤成功时
EVENT_FLIP_SUMMON_SUCCESS = 1101 --翻转召唤成功时
EVENT_SPSUMMON_SUCCESS = 1102 --特殊召唤成功时
EVENT_SUMMON = 1103 --召唤之际(怪兽还没上场、神宣等时点)
EVENT_FLIP_SUMMON = 1104 --翻转召唤之际
EVENT_SPSUMMON = 1105 --特殊召唤之际
EVENT_MSET = 1106 --放置怪兽时
EVENT_SSET = 1107 --放置魔陷时
EVENT_BE_MATERIAL = 1108 --作为同调/超量/连结素材、用于升级召唤的解放、作为仪式/融合召唤的素材
EVENT_BE_PRE_MATERIAL = 1109 --将要作为同调/超量/连结素材、用于升级召唤的解放
EVENT_DRAW = 1110 --抽卡时
EVENT_DAMAGE = 1111 --造成战斗/效果伤害时
EVENT_RECOVER = 1112 --回复生命值时
EVENT_PREDRAW = 1113 --抽卡阶段通常抽卡前
EVENT_SUMMON_NEGATED = 1114 --召唤被无效时
EVENT_FLIP_SUMMON_NEGATED = 1115 --反转召唤被无效时
EVENT_SPSUMMON_NEGATED = 1116 --特殊召唤被无效时
EVENT_SPSUMMON_SUCCESS_G_P = 1117 --EFFECT_SPSUMMON_PROC_G特殊召唤成功前(只能使用EFFECT_TYPE_CONTINUOUS)
EVENT_CONTROL_CHANGED = 1120 --控制权变更
EVENT_EQUIP = 1121 --装备卡装备时
EVENT_ATTACK_ANNOUNCE = 1130 --攻击宣言时
EVENT_BE_BATTLE_TARGET = 1131 --被选为攻击对象时
EVENT_BATTLE_START = 1132 --伤害步骤开始时(反转前)
EVENT_BATTLE_CONFIRM = 1133 --伤害计算前(反转後)
EVENT_PRE_DAMAGE_CALCULATE = 1134 --伤害计算时(羽斬)
EVENT_DAMAGE_CALCULATING = 1135 --N/A
EVENT_PRE_BATTLE_DAMAGE = 1136 --即将产生战斗伤害(只能使用EFFECT_TYPE_CONTINUOUS)
EVENT_BATTLE_END = 1137 --N/A
EVENT_BATTLED = 1138 --伤害计算后(异女、同反转效果时点)
EVENT_BATTLE_DESTROYING = 1139 --以战斗破坏怪兽送去墓地时(BF- 苍炎之修罗)
EVENT_BATTLE_DESTROYED = 1140 --被战斗破坏送去墓地时(杀人番茄等)
EVENT_DAMAGE_STEP_END = 1141 --伤害步骤结束时
EVENT_ATTACK_DISABLED = 1142 --攻击无效时(翻倍机会)
EVENT_BATTLE_DAMAGE = 1143 --造成战斗伤害时
EVENT_TOSS_DICE = 1150 --掷骰子的结果产生后
EVENT_TOSS_COIN = 1151 --抛硬币的结果产生后
EVENT_TOSS_COIN_NEGATE = 1152 --重新抛硬币
EVENT_TOSS_DICE_NEGATE = 1153 --重新掷骰子
EVENT_LEVEL_UP = 1200 --等级上升时
EVENT_PAY_LPCOST = 1201 --支付生命值时
EVENT_DETACH_MATERIAL = 1202 --去除超量素材时
EVENT_RETURN_TO_GRAVE = 1203 --回到墓地时
EVENT_TURN_END = 1210 --回合结束时
EVENT_PHASE = 0x1000 --阶段结束时
EVENT_PHASE_START = 0x2000 --阶段开始时
EVENT_ADD_COUNTER = 0x10000 --增加指示物时
EVENT_REMOVE_COUNTER = 0x20000 --去除指示物时(A指示物),Card.RemoveCounter()必須手動觸發此事件
EVENT_CUSTOM = 0x10000000 --自訂事件
--自定时点
EVENT_TRIGGER =VgID --判定时点
EVENT_CRITICAL_STRIKE =VgID+1 --暴击值结算时点
EVENT_DAMAGE_TRIGGER =VgID+2 --受伤判定完毕时点
EVENT_RIDE_START =VgID+3 --骑升时点
EVENT_SUPPORT =VgID+4 --支援时点
EVENT_TRIGGERCOUNTUP =VgID+5 --驱动追加
EVENT_SING =VgID+6 --演唱时
EVENT_OVERLAY_FILL =VgID+7 --灵魂填充时
EVENT_TRIGGER = VgID --判定时点
EVENT_CRITICAL_STRIKE = VgID + 1 --暴击值结算时点
EVENT_DAMAGE_TRIGGER = VgID + 2 --受伤判定完毕时点
EVENT_RIDE_START = VgID + 3 --骑升时点
EVENT_SUPPORT = VgID + 4 --支援时点
EVENT_TRIGGERCOUNTUP = VgID + 5 --驱动追加
EVENT_SING = VgID + 6 --演唱时
EVENT_OVERLAY_FILL = VgID + 7 --灵魂填充时
--攻击时(EVENT_ATTACK_ANNOUNCE)
--支援时(EVENT_CUSTOM+EVENT_SUPPORT)
--支援时(EVENT_CUSTOM + EVENT_SUPPORT)
--截击|放置到G(EVENT_MOVE)
--攻击击中时(EVENT_CUSTOM+EVENT_DAMAGE_TRIGGER|EVENT_BATTLE_DESTROYING)
--攻击击中时(EVENT_CUSTOM + EVENT_DAMAGE_TRIGGER|EVENT_BATTLE_DESTROYING)
--战斗结束时(EVENT_BATTLED)
--Hint
HINT_EVENT =1
HINT_MESSAGE =2
HINT_SELECTMSG =3
HINT_OPSELECTED =4
HINT_EFFECT =5
HINT_RACE =6
HINT_ATTRIB =7
HINT_CODE =8
HINT_NUMBER =9
HINT_CARD =10
HINT_ZONE =11
HINT_LINES =24
HINT_EVENT = 1
HINT_MESSAGE = 2
HINT_SELECTMSG = 3
HINT_OPSELECTED = 4
HINT_EFFECT = 5
HINT_RACE = 6
HINT_ATTRIB = 7
HINT_CODE = 8
HINT_NUMBER = 9
HINT_CARD = 10
HINT_ZONE = 11
HINT_LINES = 24
--Card Hint
CHINT_TURN =1
CHINT_CARD =2
CHINT_RACE =3
CHINT_ATTRIBUTE =4
CHINT_NUMBER =5
CHINT_DESC =6
CHINT_TURN = 1
CHINT_CARD = 2
CHINT_RACE = 3
CHINT_ATTRIBUTE = 4
CHINT_NUMBER = 5
CHINT_DESC = 6
--Opcode
OPCODE_ADD =0x40000000
OPCODE_SUB =0x40000001
OPCODE_MUL =0x40000002
OPCODE_DIV =0x40000003
OPCODE_AND =0x40000004
OPCODE_OR =0x40000005
OPCODE_NEG =0x40000006
OPCODE_NOT =0x40000007
OPCODE_ISCODE =0x40000100
OPCODE_ISSETCARD =0x40000101
OPCODE_ISTYPE =0x40000102
OPCODE_ISRACE =0x40000103
OPCODE_ISATTRIBUTE =0x40000104
OPCODE_ADD = 0x40000000
OPCODE_SUB = 0x40000001
OPCODE_MUL = 0x40000002
OPCODE_DIV = 0x40000003
OPCODE_AND = 0x40000004
OPCODE_OR = 0x40000005
OPCODE_NEG = 0x40000006
OPCODE_NOT = 0x40000007
OPCODE_ISCODE = 0x40000100
OPCODE_ISSETCARD = 0x40000101
OPCODE_ISTYPE = 0x40000102
OPCODE_ISRACE = 0x40000103
OPCODE_ISATTRIBUTE = 0x40000104
--
DOUBLE_DAMAGE =-2147483648
HALF_DAMAGE =-2147483647
DOUBLE_DAMAGE = -2147483648
HALF_DAMAGE = -2147483647
--Hint Message --提示消息,显示在窗口的上面
HINTMSG_LEAVEFIELD =500 --请选择要退场的卡
HINTMSG_DISCARD =501 --请选择要丢弃的手牌
HINTMSG_IMPRISON =502 --请选择要收容的卡
HINTMSG_REMOVE =503 --请选择要除外的卡
HINTMSG_TODROP =504 --请选择要置入弃牌区的卡
HINTMSG_LOCK =505 --请选择要封锁的卡
HINTMSG_ATOHAND =506 --请选择要加入手牌的卡
HINTMSG_TODECK =507 --请选择要返回卡组的卡
HINTMSG_CALL =508 --请选择要Call到圆阵的卡
HINTMSG_SPSUMMON =509 --请选择要特殊召唤的卡
HINTMSG_DAMAGE =510 --请选择要消耗的费用
HINTMSG_ATKUP =511 --请选择力量上升的卡
HINTMSG_CRITICAL_STRIKE =512 --请选择☆值上升的卡
HINTMSG_FACEUP =514 --请选择表侧表示的卡
HINTMSG_FACEDOWN =515 --请选择里侧表示的卡
HINTMSG_ATTACK =516 --请选择攻击表示的怪兽
HINTMSG_DEFENSE =517 --请选择守备表示的怪兽
HINTMSG_EQUIP =518 --请选择要装备的卡
HINTMSG_TO_GZONE =519 --请选择要CALL到防卫者圆阵的卡
HINTMSG_VMONSTER =522 --请选择先导者
HINTMSG_RMONSTER =523 --请选择后防者
HINTMSG_MONSTER =524 --请选择单位
HINTMSG_FACEDOWNDEFENSE =525 --请选择里侧守备表示的怪兽
HINTMSG_CONFIRM =526 --请选择给对方确认的卡
HINTMSG_TOFIELD =527 --请选择要放置到场上的卡
HINTMSG_POSCHANGE =528 --请选择要改变表示形式的怪兽
HINTMSG_SELF =529 --请选择自己的卡
HINTMSG_OPPO =530 --请选择对方的卡
HINTMSG_TRIBUTE =531 --请选择上级召唤用需要解放的怪兽
HINTMSG_REMOVEXYZ =532 --请选择要拔除的卡
HINTMSG_OVERLAY =533 --请选择要重叠的卡
HINTMSG_ATTACKTARGET =549 --请选择攻击的对象
HINTMSG_EFFECT =550 --请选择要发动的效果
HINTMSG_TARGET =551 --请选择效果的对象
HINTMSG_COIN =552 --请选择硬币的正反面
HINTMSG_DICE =553 --请选择骰子的结果
HINTMSG_CARDTYPE =554 --请选择一个种类
HINTMSG_OPTION =555 --请选择一个选项
HINTMSG_RESOLVEEFFECT =556 --请选择要发动/处理的效果
HINTMSG_SELECT =560 --请选择
HINTMSG_POSITION =561 --请选择表示形式
HINTMSG_ATTRIBUTE =562 --请选择要宣言的属性
HINTMSG_RACE =563 --请选择要宣言的种族
HINTMSG_CODE =564 --请宣言一个卡名
HINGMSG_NUMBER =565 --请选择一个数字
HINGMSG_LVRANK =567 --请宣言一个等级
HINTMSG_RESOLVECARD =568 --请选择要处理效果的卡
HINTMSG_ZONE =569 --请选择[%ls]的位置
HINTMSG_CallZONE =570 --请选择圆阵
HINTMSG_TOZONE =571 --请选择要移动到的位置
HINTMSG_TOTOP =572 --请选择要放置到牌堆顶的卡
HINTMSG_DISABLE =573 --请选择要无效的卡
HINTMSG_OPERATECARD =574 --请选择要操作的卡
HINTMSG_XMATERIAL =513 --请选择要充入魂中的卡
HINTMSG_LEAVEFIELD = 500 --请选择要退场的卡
HINTMSG_DISCARD = 501 --请选择要丢弃的手牌
HINTMSG_IMPRISON = 502 --请选择要收容的卡
HINTMSG_REMOVE = 503 --请选择要除外的卡
HINTMSG_TODROP = 504 --请选择要置入弃牌区的卡
HINTMSG_LOCK = 505 --请选择要封锁的卡
HINTMSG_ATOHAND = 506 --请选择要加入手牌的卡
HINTMSG_TODECK = 507 --请选择要返回卡组的卡
HINTMSG_CALL = 508 --请选择要Call到圆阵的卡
HINTMSG_SPSUMMON = 509 --请选择要特殊召唤的卡
HINTMSG_DAMAGE = 510 --请选择要消耗的费用
HINTMSG_ATKUP = 511 --请选择力量上升的卡
HINTMSG_CRITICAL_STRIKE = 512 --请选择☆值上升的卡
HINTMSG_FACEUP = 514 --请选择表侧表示的卡
HINTMSG_FACEDOWN = 515 --请选择里侧表示的卡
HINTMSG_ATTACK = 516 --请选择攻击表示的怪兽
HINTMSG_DEFENSE = 517 --请选择守备表示的怪兽
HINTMSG_EQUIP = 518 --请选择要装备的卡
HINTMSG_TO_GZONE = 519 --请选择要CALL到防卫者圆阵的卡
HINTMSG_VMONSTER = 522 --请选择先导者
HINTMSG_RMONSTER = 523 --请选择后防者
HINTMSG_MONSTER = 524 --请选择单位
HINTMSG_FACEDOWNDEFENSE = 525 --请选择里侧守备表示的怪兽
HINTMSG_CONFIRM = 526 --请选择给对方确认的卡
HINTMSG_TOFIELD = 527 --请选择要放置到场上的卡
HINTMSG_POSCHANGE = 528 --请选择要改变表示形式的怪兽
HINTMSG_SELF = 529 --请选择自己的卡
HINTMSG_OPPO = 530 --请选择对方的卡
HINTMSG_TRIBUTE = 531 --请选择上级召唤用需要解放的怪兽
HINTMSG_REMOVEXYZ = 532 --请选择要拔除的卡
HINTMSG_OVERLAY = 533 --请选择要重叠的卡
HINTMSG_ATTACKTARGET = 549 --请选择攻击的对象
HINTMSG_EFFECT = 550 --请选择要发动的效果
HINTMSG_TARGET = 551 --请选择效果的对象
HINTMSG_COIN = 552 --请选择硬币的正反面
HINTMSG_DICE = 553 --请选择骰子的结果
HINTMSG_CARDTYPE = 554 --请选择一个种类
HINTMSG_OPTION = 555 --请选择一个选项
HINTMSG_RESOLVEEFFECT = 556 --请选择要发动/处理的效果
HINTMSG_SELECT = 560 --请选择
HINTMSG_POSITION = 561 --请选择表示形式
HINTMSG_ATTRIBUTE = 562 --请选择要宣言的属性
HINTMSG_RACE = 563 --请选择要宣言的种族
HINTMSG_CODE = 564 --请宣言一个卡名
HINGMSG_NUMBER = 565 --请选择一个数字
HINGMSG_LVRANK = 567 --请宣言一个等级
HINTMSG_RESOLVECARD = 568 --请选择要处理效果的卡
HINTMSG_ZONE = 569 --请选择[%ls]的位置
HINTMSG_CallZONE = 570 --请选择圆阵
HINTMSG_TOZONE = 571 --请选择要移动到的位置
HINTMSG_TOTOP = 572 --请选择要放置到牌堆顶的卡
HINTMSG_DISABLE = 573 --请选择要无效的卡
HINTMSG_OPERATECARD = 574 --请选择要操作的卡
HINTMSG_XMATERIAL = 513 --请选择要充入魂中的卡
--Select --请选择
SELECT_HEADS =60 --正面
SELECT_TAILS =61 --反面
SELECT_HEADS = 60 --正面
SELECT_TAILS = 61 --反面
--Timing --提示时点,可以给freechain卡片增加自动提示时点
TIMING_DRAW_PHASE =0x1 --抽卡阶段时点
TIMING_STANDBY_PHASE =0x2 --准备阶段时点
TIMING_MAIN_END =0x4 --主要阶段结束时点
TIMING_BATTLE_START =0x8 --战斗阶段开始时点
TIMING_BATTLE_END =0x10 --战斗阶段结束时点
TIMING_END_PHASE =0x20 --结束阶段时点
TIMING_SUMMON =0x40 --召唤时点
TIMING_SPSUMMON =0x80 --特殊召唤时点
TIMING_FLIPSUMMON =0x100 --翻转召唤时点
TIMING_MSET =0x200 --放置怪兽时点
TIMING_SSET =0x400 --放置魔陷时点
TIMING_POS_CHANGE =0x800 --表示形式变更时点
TIMING_ATTACK =0x1000 --攻击宣言时点
TIMING_DAMAGE_STEP =0x2000 --伤害步骤时点
TIMING_DAMAGE_CAL =0x4000 --伤害计算时点
TIMING_CHAIN_END =0x8000 --连锁结束时点
TIMING_DRAW =0x10000 --抽卡时点(不是抽卡阶段
TIMING_DAMAGE =0x20000 --造成伤害时点
TIMING_RECOVER =0x40000 --回复时点
TIMING_DESTROY =0x80000 --破坏时点
TIMING_REMOVE =0x100000 --除外时点
TIMING_TOHAND =0x200000 --加入手牌时点(检索、回收等)
TIMING_TODECK =0x400000 --回卡组时点
TIMING_TOGRAVE =0x800000 --进墓地时点
TIMING_BATTLE_PHASE =0x1000000 --战斗阶段时点
TIMING_EQUIP =0x2000000 --装备时点
TIMING_BATTLE_STEP_END =0x4000000 --戰鬥步驟結束時
TIMING_BATTLED =0x8000000 --伤害计算后时点
TIMING_DRAW_PHASE = 0x1 --抽卡阶段时点
TIMING_STANDBY_PHASE = 0x2 --准备阶段时点
TIMING_MAIN_END = 0x4 --主要阶段结束时点
TIMING_BATTLE_START = 0x8 --战斗阶段开始时点
TIMING_BATTLE_END = 0x10 --战斗阶段结束时点
TIMING_END_PHASE = 0x20 --结束阶段时点
TIMING_SUMMON = 0x40 --召唤时点
TIMING_SPSUMMON = 0x80 --特殊召唤时点
TIMING_FLIPSUMMON = 0x100 --翻转召唤时点
TIMING_MSET = 0x200 --放置怪兽时点
TIMING_SSET = 0x400 --放置魔陷时点
TIMING_POS_CHANGE = 0x800 --表示形式变更时点
TIMING_ATTACK = 0x1000 --攻击宣言时点
TIMING_DAMAGE_STEP = 0x2000 --伤害步骤时点
TIMING_DAMAGE_CAL = 0x4000 --伤害计算时点
TIMING_CHAIN_END = 0x8000 --连锁结束时点
TIMING_DRAW = 0x10000 --抽卡时点(不是抽卡阶段
TIMING_DAMAGE = 0x20000 --造成伤害时点
TIMING_RECOVER = 0x40000 --回复时点
TIMING_DESTROY = 0x80000 --破坏时点
TIMING_REMOVE = 0x100000 --除外时点
TIMING_TOHAND = 0x200000 --加入手牌时点(检索、回收等)
TIMING_TODECK = 0x400000 --回卡组时点
TIMING_TOGRAVE = 0x800000 --进墓地时点
TIMING_BATTLE_PHASE = 0x1000000 --战斗阶段时点
TIMING_EQUIP = 0x2000000 --装备时点
TIMING_BATTLE_STEP_END = 0x4000000 --戰鬥步驟結束時
TIMING_BATTLED = 0x8000000 --伤害计算后时点
----组合时点
TIMINGS_CHECK_MONSTER =0x1c0 -- 怪兽正面上场
TIMINGS_CHECK_MONSTER = 0x1c0 -- 怪兽正面上场
--Global flag --特殊标记
GLOBALFLAG_DECK_REVERSE_CHECK =0x1 --卡组翻转标记
GLOBALFLAG_BRAINWASHING_CHECK =0x2 --洗脑解除标记
GLOBALFLAG_SCRAP_CHIMERA =0x4 --废铁奇美拉标记
GLOBALFLAG_DELAYED_QUICKEFFECT =0x8 --N/A
GLOBALFLAG_DETACH_EVENT =0x10 --EVENT_DETACH_MATERIAL
GLOBALFLAG_MUST_BE_SMATERIAL =0x20 --N/A
GLOBALFLAG_SPSUMMON_COUNT =0x40 --玩家的特殊召唤次数限制
GLOBALFLAG_XMAT_COUNT_LIMIT =0x80 --超量素材数量限制标记(光天使 天座)
GLOBALFLAG_SELF_TOGRAVE =0x100 --不入連鎖的送墓檢查(EFFECT_SELF_TOGRAVE)
GLOBALFLAG_SPSUMMON_ONCE =0x200 --1回合只能特殊召喚1次(Card.SetSPSummonOnce())
GLOBALFLAG_TUNE_MAGICIAN =0x400 --超量素材检查标记(调弦之魔术师)
GLOBALFLAG_DECK_REVERSE_CHECK = 0x1 --卡组翻转标记
GLOBALFLAG_BRAINWASHING_CHECK = 0x2 --洗脑解除标记
GLOBALFLAG_SCRAP_CHIMERA = 0x4 --废铁奇美拉标记
GLOBALFLAG_DELAYED_QUICKEFFECT = 0x8 --N/A
GLOBALFLAG_DETACH_EVENT = 0x10 --EVENT_DETACH_MATERIAL
GLOBALFLAG_MUST_BE_SMATERIAL = 0x20 --N/A
GLOBALFLAG_SPSUMMON_COUNT = 0x40 --玩家的特殊召唤次数限制
GLOBALFLAG_XMAT_COUNT_LIMIT = 0x80 --超量素材数量限制标记(光天使 天座)
GLOBALFLAG_SELF_TOGRAVE = 0x100 --不入連鎖的送墓檢查(EFFECT_SELF_TOGRAVE)
GLOBALFLAG_SPSUMMON_ONCE = 0x200 --1回合只能特殊召喚1次(Card.SetSPSummonOnce())
GLOBALFLAG_TUNE_MAGICIAN = 0x400 --超量素材检查标记(调弦之魔术师)
--count_code
EFFECT_COUNT_CODE_OATH =0x10000000 --发动次数限制(誓约次数, 发动被无效不计数)
EFFECT_COUNT_CODE_DUEL =0x20000000 --决斗中使用次数
EFFECT_COUNT_CODE_CHAIN =0x40000000 --同一连锁中使用次数
EFFECT_COUNT_CODE_SINGLE =0x1 --同一张卡的多个效果公共使用次数
EFFECT_COUNT_CODE_OATH = 0x10000000 --发动次数限制(誓约次数, 发动被无效不计数)
EFFECT_COUNT_CODE_DUEL = 0x20000000 --决斗中使用次数
EFFECT_COUNT_CODE_CHAIN = 0x40000000 --同一连锁中使用次数
EFFECT_COUNT_CODE_SINGLE = 0x1 --同一张卡的多个效果公共使用次数
--特殊选项
DUEL_TEST_MODE =0x01 --测试模式(目前暫無)
DUEL_ATTACK_FIRST_TURN =0x02 --第一回合可以攻击(用于残局)
DUEL_OLD_REPLAY =0x04 --旧录像
DUEL_OBSOLETE_RULING =0x08 --使用舊規則
DUEL_PSEUDO_SHUFFLE =0x10 --不洗牌
DUEL_TAG_MODE =0x20 --双打PP
DUEL_SIMPLE_AI =0x40 --AI(用于残局)
DUEL_RETURN_DECK_TOP =0x80 --回卡组洗切的卡放到卡组最上方(不洗牌模式下曾经的默认行为)
DUEL_TEST_MODE = 0x01 --测试模式(目前暫無)
DUEL_ATTACK_FIRST_TURN = 0x02 --第一回合可以攻击(用于残局)
DUEL_OLD_REPLAY = 0x04 --旧录像
DUEL_OBSOLETE_RULING = 0x08 --使用舊規則
DUEL_PSEUDO_SHUFFLE = 0x10 --不洗牌
DUEL_TAG_MODE = 0x20 --双打PP
DUEL_SIMPLE_AI = 0x40 --AI(用于残局)
DUEL_RETURN_DECK_TOP = 0x80 --回卡组洗切的卡放到卡组最上方(不洗牌模式下曾经的默认行为)
--Activity counter
--global: 1-6 (binary: 5,6)
--custom: 1-5,7 (binary: 1-5)
ACTIVITY_SUMMON =1 --
ACTIVITY_NORMALSUMMON =2 --
ACTIVITY_SPSUMMON =3 --
ACTIVITY_FLIPSUMMON =4 --
ACTIVITY_ATTACK =5 --
ACTIVITY_BATTLE_PHASE =6 -- not available in custom counter
ACTIVITY_CHAIN =7 -- only available in custom counter
--global: 1- 6 (binary: 5, 6)
--custom: 1- 5, 7 (binary: 1- 5)
ACTIVITY_SUMMON = 1 --
ACTIVITY_NORMALSUMMON = 2 --
ACTIVITY_SPSUMMON = 3 --
ACTIVITY_FLIPSUMMON = 4 --
ACTIVITY_ATTACK = 5 --
ACTIVITY_BATTLE_PHASE = 6 -- not available in custom counter
ACTIVITY_CHAIN = 7 -- only available in custom counter
--Special flag effect id
FLAG_ID_CHAINING =1
FLAG_ID_UNION =2
FLAG_ID_NO_NORMAL_DRAW =3
FLAG_ID_CHAINING = 1
FLAG_ID_UNION = 2
FLAG_ID_NO_NORMAL_DRAW = 3
--Flag
FLAG_COUNT_TRIGGER =VgID --计数标识
FLAG_ATTACK_TRIGGER =VgID+1 --多次攻击判定标识
FLAG_DAMAGE_TRIGGER =VgID+2 --多次伤害判定标识
FLAG_DEFENSE_ENTIRELY =VgID+3 --完全防御标识
FLAG_CONDITION =VgID+4 --处于XX状态标识
FLAG_SUPPORT =VgID+5 --支援状态标识
FLAG_SUPPORTED =VgID+6 --被支援
FLAG_ATTACK_AT_REAR =VgID+7 --后列攻击
FLAG_IMPRISON =VgID+8 --被收容
FLAG_SPELL_COUNT_LIMIT =VgID+9 --指令卡次数
FLAG_SPELL_USED_COUNT =VgID+10--指令卡已使用次数
FLAG_ALSO_CAN_TRIGGER =VgID+11--后防着也能驱动判定
FLAG_COUNT_TRIGGER = VgID --计数标识
FLAG_ATTACK_TRIGGER = VgID + 1 --多次攻击判定标识
FLAG_DAMAGE_TRIGGER = VgID + 2 --多次伤害判定标识
FLAG_DEFENSE_ENTIRELY = VgID + 3 --完全防御标识
FLAG_CONDITION = VgID + 4 --处于XX状态标识
FLAG_SUPPORT = VgID + 5 --支援状态标识
FLAG_SUPPORTED = VgID + 6 --被支援
FLAG_ATTACK_AT_REAR = VgID + 7 --后列攻击
FLAG_IMPRISON = VgID + 8 --被收容
FLAG_SPELL_COUNT_LIMIT = VgID + 9 --指令卡次数
FLAG_SPELL_USED_COUNT = VgID + 10--指令卡已使用次数
FLAG_ALSO_CAN_TRIGGER = VgID + 11--后防着也能驱动判定
--AffectedByEffect
AFFECT_CODE_MIX =VgID --魔合成
AFFECT_CODE_MIX_DIFFERENT_NAME =VgID+1 --魔合成(卡名不同)
AFFECT_CODE_BOTH_WING =VgID+2 --你的卡片的白翼能力和黑翼能力两方均有效
AFFECT_CODE_NIGHT =VgID+3 --黑夜
AFFECT_CODE_DEEP_NIGHT =VgID+4 --深渊黑夜
AFFECT_CODE_OVERLAY_COST_FREE_WHEN_MIX =VgID+5 --魔合成可以不支付灵魂爆发
AFFECT_CODE_MIX = VgID --魔合成
AFFECT_CODE_MIX_DIFFERENT_NAME = VgID + 1 --魔合成(卡名不同)
AFFECT_CODE_BOTH_WING = VgID + 2 --你的卡片的白翼能力和黑翼能力两方均有效
AFFECT_CODE_NIGHT = VgID + 3 --黑夜
AFFECT_CODE_DEEP_NIGHT = VgID + 4 --深渊黑夜
AFFECT_CODE_OVERLAY_COST_FREE_WHEN_MIX = VgID + 5 --魔合成可以不支付灵魂爆发
AFFECT_CODE_OVERLAY_INSTEAD_WHEN_RIDE =10501082 --不执行『选择手牌中的1张卡,舍弃』而是执行『灵魂爆发1』来将卡RIDE
......
VgF={}
vgf=VgF
bit={}
--VgF库
VgF = {}
vgf = VgF
bit = {}
---@class Card
---@class Group
......@@ -20,49 +21,49 @@ function VgF.VgCard(c)
end
---获取脚本基本信息
function GetID()
local offset=self_code<100000000 and 1 or 100
return self_table,self_code,offset
local offset = self_code < 100000000 and 1 or 100
return self_table, self_code, offset
end
---根据卡号和索引获取描述编号
---@param code integer 卡片密码
---@param id integer 索引
---@return integer 描述的编号
function VgF.Stringid(code,id)
return code*16+id
function VgF.Stringid(code, id)
return code * 16 + id
end
function VgF.DefineArguments()
if not code then code=nil end
if not loc then loc=nil end
if not typ then typ=nil end
if not typ2 then typ2=nil end
if not count then count=nil end
if not property then property=nil end
if not reset then reset=nil end
if not op then op=nil end
if not cost then cost=nil end
if not con then con=nil end
if not tg then tg=nil end
if not f then f=nil end
if not zone then zone=nil end
if not code then code = nil end
if not loc then loc = nil end
if not typ then typ = nil end
if not typ2 then typ2 = nil end
if not count then count = nil end
if not property then property = nil end
if not reset then reset = nil end
if not op then op = nil end
if not cost then cost = nil end
if not con then con = nil end
if not tg then tg = nil end
if not f then f = nil end
if not zone then zone = nil end
end
---根据控制者,区域和编号获取zone;不合法的数据会返回0
---@param p integer 控制者
---@param loc integer 所在区域,若不是LOCATION_MZONE或LOCATION_SZONE则返回0
---@param seq integer 编号
---@return integer 卡片所在的zone
function VgF.SequenceToGlobal(p,loc,seq)
if p~=0 and p~=1 then
function VgF.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<<(seq)
if loc == LOCATION_MZONE then
if seq <= 6 then
return 0x0001 << (seq)
else
return 0
end
elseif loc == LOCATION_SZONE then
if seq<=4 then
return 0x0100<<(16*p+seq)
if seq <= 4 then
return 0x0100 << (16 * p + seq)
else
return 0
end
......@@ -84,9 +85,9 @@ end
---@param g Group 要遍历的卡片组
---@return function 指示返回的卡的函数
function VgF.Next(g)
local first=true
local first = true
return function()
if first then first=false return g:GetFirst()
if first then first = false return g:GetFirst()
else return g:GetNext() end
end
end
......@@ -94,11 +95,11 @@ end
---@param v any 要获取类型的变量(或常量)
---@return string 以字符串形式呈现的类型
function VgF.GetValueType(v)
local t=type(v)
if t=="userdata" then
local mt=getmetatable(v)
if mt==Group then return "Group"
elseif mt==Effect then return "Effect"
local t = type(v)
if t == "userdata" then
local mt = getmetatable(v)
if mt == Group then return "Group"
elseif mt == Effect then return "Effect"
else return "Card" end
else return t end
end
......@@ -106,20 +107,20 @@ end
---@param g any 要操作的变量
---@return Card
function VgF.ReturnCard(g)
local tc=nil
if VgF.GetValueType(g)=="Group" then
tc=g:GetFirst()
elseif VgF.GetValueType(g)=="Card" then
tc=g
local tc = nil
if VgF.GetValueType(g) == "Group" then
tc = g:GetFirst()
elseif VgF.GetValueType(g) == "Card" then
tc = g
end
return tc
end
function VgF.ReturnGroup(tc)
local g=Group.CreateGroup()
if VgF.GetValueType(tc)=="Group" then
local g = Group.CreateGroup()
if VgF.GetValueType(tc) == "Group" then
return tc
elseif VgF.GetValueType(g)=="Card" then
elseif VgF.GetValueType(g) == "Card" then
g.AddCard(tc)
end
return g
......@@ -128,26 +129,26 @@ end
---返回g的前val张卡。
---@param g Group 要操作的卡片组
---@param val integer 要获取的卡片数量
function VgF.GetCardsFromGroup(g,val)
if VgF.GetValueType(g)=="Group" then
local sg=Group.CreateGroup()
function VgF.GetCardsFromGroup(g, val)
if VgF.GetValueType(g) == "Group" then
local sg = Group.CreateGroup()
for tc in VgF.Next(g) do
if sg:GetCount()>=val then break end
if sg:GetCount() >= val then break end
sg:AddCard(tc)
end
return sg
end
end
function bit.ReturnCount(n)
if n==0 then
if n == 0 then
return 0
end
return 1+bit.ReturnCount(n&(n-1))
return 1 + bit.ReturnCount(n & (n - 1))
end
function table.copy(copy,original)
copy={}
if VgF.GetValueType(original)~="table" then return end
function table.copy(copy, original)
copy = {}
if VgF.GetValueType(original) ~= "table" then return end
for i = 1, #original do
table.insert(copy, original[i])
end
......@@ -157,36 +158,36 @@ end
---@param a integer 操作数1
---@param b integer 操作数2
---@return integer 运算结果
function bit.band(a,b)
return a&b
function bit.band(a, b)
return a & b
end
---返回对a和b进行按位或运算的结果。
---@param a integer 操作数1
---@param b integer 操作数2
---@return integer 运算结果
function bit.bor(a,b)
return a|b
function bit.bor(a, b)
return a | b
end
---返回对a和b进行按位异或运算的结果。
---@param a integer 操作数1
---@param b integer 操作数2
---@return integer 运算结果
function bit.bxor(a,b)
return a~b
function bit.bxor(a, b)
return a ~ b
end
---返回a按位左移b位后的结果。
---@param a integer 操作数1
---@param b integer 操作数2
---@return integer 运算结果
function bit.lshift(a,b)
return a<<b
function bit.lshift(a, b)
return a << b
end
---返回a按位右移b位后的结果。
---@param a integer 操作数1
---@param b integer 操作数2
---@return integer 运算结果
function bit.rshift(a,b)
return a>>b
function bit.rshift(a, b)
return a >> b
end
---返回a按位非后的结果。
---@param a integer 操作数
......@@ -198,13 +199,13 @@ end
---@param c Card 要判断的卡
---@return boolean 指示是否是先导者
function VgF.VMonsterFilter(c)
return VgF.IsSequence(c,5)
return VgF.IsSequence(c, 5)
end
---返回c是不是后防者。
---@param c Card 要判断的卡
---@return boolean 指示是否是后防者
function VgF.RMonsterFilter(c)
return c:GetSequence()<5
return c:GetSequence() < 5
end
---用于效果的Condition,判断e是否以后防者发动。
---@param e Effect
......@@ -220,7 +221,7 @@ function VgF.VMonsterCondition(e)
end
function VgF.VSummonCondition(e)
local c=e:GetHandler()
local c = e:GetHandler()
return VgF.IsSummonTypeV(c)
end
......@@ -239,24 +240,24 @@ end
---@param c Card 要判断的卡
---@param ... integer 编号
---@return boolean 指示是否在给定编号上
function VgF.IsSequence(c,...)
for i,v in ipairs{...} do
if c:GetSequence()==v then
function VgF.IsSequence(c, ...)
for i, v in ipairs{...} do
if c:GetSequence() == v then
return true
end
end
return false
end
function VgF.RuleCardCondtion(e)
local tp=e:GetHandlerPlayer()
local g=Duel.GetMatchingGroup(nil,tp,LOCATION_ALL,0,nil)
return e:GetHandler()==g:GetFirst()
local tp = e:GetHandlerPlayer()
local g = Duel.GetMatchingGroup(nil, tp, LOCATION_ALL, 0, nil)
return e:GetHandler() == g:GetFirst()
end
function VgF.RuleTurnCondtion(e)
local tp=e:GetHandlerPlayer()
local a=Duel.GetTurnCount(tp)
local b=Duel.GetTurnCount(1-tp)
return a+b==1
local tp = e:GetHandlerPlayer()
local a = Duel.GetTurnCount(tp)
local b = Duel.GetTurnCount(1 - tp)
return a + b == 1
end
---返回函数,该函数与f的结果总是相反的。
---@param f 要操作的函数
......@@ -270,54 +271,54 @@ end
---@param c Card 指示某一列的卡
---@return Group 这一列的所有单位
function VgF.GetColumnGroup(c)
local tp=c:GetControler()
local g=Group.CreateGroup()
if c:GetSequence()==0 then
local sg1=VgF.GetMatchingGroup(VgF.IsSequence,tp,LOCATION_MZONE,0,nil,1)
local sg2=VgF.GetMatchingGroup(VgF.IsSequence,tp,0,LOCATION_MZONE,nil,3,4)
if sg1:GetCount()>0 then g:Merge(sg1) end
if sg2:GetCount()>0 then g:Merge(sg2) end
end
if c:GetSequence()==1 then
local sg1=VgF.GetMatchingGroup(VgF.IsSequence,tp,LOCATION_MZONE,0,nil,0)
local sg2=VgF.GetMatchingGroup(VgF.IsSequence,tp,0,LOCATION_MZONE,nil,3,4)
if sg1:GetCount()>0 then g:Merge(sg1) end
if sg2:GetCount()>0 then g:Merge(sg2) end
end
if c:GetSequence()==2 then
local sg1=VgF.GetMatchingGroup(VgF.IsSequence,tp,LOCATION_MZONE,0,nil,5)
local sg2=VgF.GetMatchingGroup(VgF.IsSequence,tp,0,LOCATION_MZONE,nil,2,5)
if sg1:GetCount()>0 then g:Merge(sg1) end
if sg2:GetCount()>0 then g:Merge(sg2) end
end
if c:GetSequence()==3 then
local sg1=VgF.GetMatchingGroup(VgF.IsSequence,tp,LOCATION_MZONE,0,nil,4)
local sg2=VgF.GetMatchingGroup(VgF.IsSequence,tp,0,LOCATION_MZONE,nil,0,1)
if sg1:GetCount()>0 then g:Merge(sg1) end
if sg2:GetCount()>0 then g:Merge(sg2) end
end
if c:GetSequence()==4 then
local sg1=VgF.GetMatchingGroup(VgF.IsSequence,tp,LOCATION_MZONE,0,nil,3)
local sg2=VgF.GetMatchingGroup(VgF.IsSequence,tp,0,LOCATION_MZONE,nil,0,1)
if sg1:GetCount()>0 then g:Merge(sg1) end
if sg2:GetCount()>0 then g:Merge(sg2) end
end
if c:GetSequence()==5 then
local sg1=VgF.GetMatchingGroup(VgF.IsSequence,tp,LOCATION_MZONE,0,nil,2)
local sg2=VgF.GetMatchingGroup(VgF.IsSequence,tp,0,LOCATION_MZONE,nil,2,5)
if sg1:GetCount()>0 then g:Merge(sg1) end
if sg2:GetCount()>0 then g:Merge(sg2) end
local tp = c:GetControler()
local g = Group.CreateGroup()
if c:GetSequence() == 0 then
local sg1 = VgF.GetMatchingGroup(VgF.IsSequence, tp, LOCATION_MZONE, 0, nil, 1)
local sg2 = VgF.GetMatchingGroup(VgF.IsSequence, tp, 0, LOCATION_MZONE, nil, 3, 4)
if sg1:GetCount() > 0 then g:Merge(sg1) end
if sg2:GetCount() > 0 then g:Merge(sg2) end
end
if c:GetSequence() == 1 then
local sg1 = VgF.GetMatchingGroup(VgF.IsSequence, tp, LOCATION_MZONE, 0, nil, 0)
local sg2 = VgF.GetMatchingGroup(VgF.IsSequence, tp, 0, LOCATION_MZONE, nil, 3, 4)
if sg1:GetCount() > 0 then g:Merge(sg1) end
if sg2:GetCount() > 0 then g:Merge(sg2) end
end
if c:GetSequence() == 2 then
local sg1 = VgF.GetMatchingGroup(VgF.IsSequence, tp, LOCATION_MZONE, 0, nil, 5)
local sg2 = VgF.GetMatchingGroup(VgF.IsSequence, tp, 0, LOCATION_MZONE, nil, 2, 5)
if sg1:GetCount() > 0 then g:Merge(sg1) end
if sg2:GetCount() > 0 then g:Merge(sg2) end
end
if c:GetSequence() == 3 then
local sg1 = VgF.GetMatchingGroup(VgF.IsSequence, tp, LOCATION_MZONE, 0, nil, 4)
local sg2 = VgF.GetMatchingGroup(VgF.IsSequence, tp, 0, LOCATION_MZONE, nil, 0, 1)
if sg1:GetCount() > 0 then g:Merge(sg1) end
if sg2:GetCount() > 0 then g:Merge(sg2) end
end
if c:GetSequence() == 4 then
local sg1 = VgF.GetMatchingGroup(VgF.IsSequence, tp, LOCATION_MZONE, 0, nil, 3)
local sg2 = VgF.GetMatchingGroup(VgF.IsSequence, tp, 0, LOCATION_MZONE, nil, 0, 1)
if sg1:GetCount() > 0 then g:Merge(sg1) end
if sg2:GetCount() > 0 then g:Merge(sg2) end
end
if c:GetSequence() == 5 then
local sg1 = VgF.GetMatchingGroup(VgF.IsSequence, tp, LOCATION_MZONE, 0, nil, 2)
local sg2 = VgF.GetMatchingGroup(VgF.IsSequence, tp, 0, LOCATION_MZONE, nil, 2, 5)
if sg1:GetCount() > 0 then g:Merge(sg1) end
if sg2:GetCount() > 0 then g:Merge(sg2) end
end
return g
end
function VgF.GetAvailableLocation(tp,zone)
function VgF.GetAvailableLocation(tp, zone)
local z
if zone then z=zone else z=0x1f end
local rg=Duel.GetMatchingGroup(Card.IsPosition,tp,LOCATION_MZONE,0,nil,POS_FACEDOWN_ATTACK)
if zone then z = zone else z = 0x1f end
local rg = Duel.GetMatchingGroup(Card.IsPosition, tp, LOCATION_MZONE, 0, nil, POS_FACEDOWN_ATTACK)
for tc in VgF.Next(rg) do
local szone=VgF.SequenceToGlobal(tp,tc:GetLocation(),tc:GetSequence())
z=bit.bxor(z,szone)
local szone = VgF.SequenceToGlobal(tp, tc:GetLocation(), tc:GetSequence())
z = bit.bxor(z, szone)
end
return z
end
......@@ -328,83 +329,83 @@ end
---@param zone integer|nil 指示要Call到的格子。<br>前列的R:17; 后列的R:14; 全部的R:31; V:32
---@param pos integer|nil 表示形式
---@return integer Call成功的数量
function VgF.Call(g,sumtype,tp,zone,pos)
if (VgF.GetValueType(g)~="Card" and VgF.GetValueType(g)~="Group") or (VgF.GetValueType(g)=="Group" and g:GetCount()==0) then return 0 end
if VgF.GetValueType(pos)~="number" then pos=POS_FACEUP_ATTACK end
if VgF.GetValueType(zone)=="string" and zone=="NoMonster" then
return Duel.SpecialSummon(g,sumtype,tp,tp,false,false,pos)
elseif VgF.GetValueType(zone)=="string" and zone=="FromOverlayToV" then
local tc=VgF.ReturnCard(g)
if not VgF.IsCanBeCalled(tc,nil,tp,sumtype,pos,"FromOverlayToV") then return 0 end
VgF.Sendto(0,tc,tp,POS_FACEUP,REASON_EFFECT)
local _,code=tc:GetOriginalCode()
local c=Duel.CreateToken(tp,code)
return VgF.Call(c,sumtype,tp,0x20,pos)
elseif VgF.GetValueType(zone)=="number" and zone>0 then
local sc=VgF.ReturnCard(g)
local z=VgF.GetAvailableLocation(tp,zone)
local ct=bit.ReturnCount(z)
function VgF.Call(g, sumtype, tp, zone, pos)
if (VgF.GetValueType(g) ~= "Card" and VgF.GetValueType(g) ~= "Group") or (VgF.GetValueType(g) == "Group" and g:GetCount() == 0) then return 0 end
if VgF.GetValueType(pos) ~= "number" then pos = POS_FACEUP_ATTACK end
if VgF.GetValueType(zone) == "string" and zone == "NoMonster" then
return Duel.SpecialSummon(g, sumtype, tp, tp, false, false, pos)
elseif VgF.GetValueType(zone) == "string" and zone == "FromOverlayToV" then
local tc = VgF.ReturnCard(g)
if not VgF.IsCanBeCalled(tc, nil, tp, sumtype, pos, "FromOverlayToV") then return 0 end
VgF.Sendto(0, tc, tp, POS_FACEUP, REASON_EFFECT)
local _, code = tc:GetOriginalCode()
local c = Duel.CreateToken(tp, code)
return VgF.Call(c, sumtype, tp, 0x20, pos)
elseif VgF.GetValueType(zone) == "number" and zone > 0 then
local sc = VgF.ReturnCard(g)
local z = VgF.GetAvailableLocation(tp, zone)
local ct = bit.ReturnCount(z)
local szone
if ct>1 then
z=bit.bnot(z)
z=bit.bor(z,0xffffff00)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_CallZONE)
szone=Duel.SelectField(tp,1,LOCATION_MZONE,0,z)
if ct > 1 then
z = bit.bnot(z)
z = bit.bor(z, 0xffffff00)
Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_CallZONE)
szone = Duel.SelectField(tp, 1, LOCATION_MZONE, 0, z)
else
szone=z
szone = z
end
if szone==0x20 then
if szone == 0x20 then
if VgF.GetVMonster(tp) then
local tc=VgF.GetVMonster(tp)
local mg=tc:GetOverlayGroup()
if mg:GetCount()~=0 then
VgF.Sendto(LOCATION_OVERLAY,mg,sc)
local tc = VgF.GetVMonster(tp)
local mg = tc:GetOverlayGroup()
if mg:GetCount() ~= 0 then
VgF.Sendto(LOCATION_OVERLAY, mg, sc)
end
sc:SetMaterial(Group.FromCards(tc))
VgF.Sendto(LOCATION_OVERLAY,Group.FromCards(tc),sc)
VgF.Sendto(LOCATION_OVERLAY, Group.FromCards(tc), sc)
end
elseif VgF.IsExistingMatchingCard(VgD.CallFilter,tp,LOCATION_MZONE,0,1,nil,tp,szone) then
local tc=Duel.GetMatchingGroup(VgD.CallFilter,tp,LOCATION_MZONE,0,nil,tp,szone):GetFirst()
if bit.band(sumtype,SUMMON_VALUE_OverDress)>0 then VgF.Sendto(LOCATION_OVERLAY,Group.FromCards(tc),sc)
else VgF.Sendto(LOCATION_DROP,tc,REASON_COST)
elseif VgF.IsExistingMatchingCard(VgD.CallFilter, tp, LOCATION_MZONE, 0, 1, nil, tp, szone) then
local tc = Duel.GetMatchingGroup(VgD.CallFilter, tp, LOCATION_MZONE, 0, nil, tp, szone):GetFirst()
if bit.band(sumtype, SUMMON_VALUE_OverDress) > 0 then VgF.Sendto(LOCATION_OVERLAY, Group.FromCards(tc), sc)
else VgF.Sendto(LOCATION_DROP, tc, REASON_COST)
end
end
return Duel.SpecialSummon(sc,sumtype,tp,tp,false,false,pos,szone)
return Duel.SpecialSummon(sc, sumtype, tp, tp, false, false, pos, szone)
else
local sg
local z=bit.bnot(VgF.GetAvailableLocation(tp))
z=bit.bor(z,0xffffff00)
if VgF.GetValueType(g)=="Card" then sg=Group.FromCards(g) else sg=Group.Clone(g) end
local z = bit.bnot(VgF.GetAvailableLocation(tp))
z = bit.bor(z, 0xffffff00)
if VgF.GetValueType(g) == "Card" then sg = Group.FromCards(g) else sg = Group.Clone(g) end
for sc in VgF.Next(sg) do
if sc:IsLocation(LOCATION_EXTRA) then
local rc=Duel.GetMatchingGroup(VgF.VMonsterFilter,tp,LOCATION_MZONE,0,nil):GetFirst()
local mg=rc:GetOverlayGroup()
if mg:GetCount()~=0 then
VgF.Sendto(LOCATION_OVERLAY,mg,sc)
local rc = Duel.GetMatchingGroup(VgF.VMonsterFilter, tp, LOCATION_MZONE, 0, nil):GetFirst()
local mg = rc:GetOverlayGroup()
if mg:GetCount() ~= 0 then
VgF.Sendto(LOCATION_OVERLAY, mg, sc)
end
sc:SetMaterial(Group.FromCards(rc))
VgF.Sendto(LOCATION_OVERLAY,Group.FromCards(rc),sc)
Duel.SpecialSummonStep(sc,sumtype,tp,tp,false,false,pos,0x20)
VgF.Sendto(LOCATION_OVERLAY, Group.FromCards(rc), sc)
Duel.SpecialSummonStep(sc, sumtype, tp, tp, false, false, pos, 0x20)
else
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_CallZONE)
local szone=Duel.SelectField(tp,1,LOCATION_MZONE,0,z)
if VgF.IsExistingMatchingCard(VgD.CallFilter,tp,LOCATION_MZONE,0,1,nil,tp,szone) then
local tc=Duel.GetMatchingGroup(VgD.CallFilter,tp,LOCATION_MZONE,0,nil,tp,szone):GetFirst()
VgF.Sendto(LOCATION_DROP,tc,REASON_COST)
Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_CallZONE)
local szone = Duel.SelectField(tp, 1, LOCATION_MZONE, 0, z)
if VgF.IsExistingMatchingCard(VgD.CallFilter, tp, LOCATION_MZONE, 0, 1, nil, tp, szone) then
local tc = Duel.GetMatchingGroup(VgD.CallFilter, tp, LOCATION_MZONE, 0, nil, tp, szone):GetFirst()
VgF.Sendto(LOCATION_DROP, tc, REASON_COST)
end
Duel.SpecialSummonStep(sc,sumtype,tp,tp,false,false,pos,szone)
z=bit.bor(z,szone)
Duel.SpecialSummonStep(sc, sumtype, tp, tp, false, false, pos, szone)
z = bit.bor(z, szone)
end
end
return Duel.SpecialSummonComplete()
end
end
function VgF.LvCondition(e_or_c)
local c=VgF.GetValueType(e_or_c)=="Effect" and e_or_c:GetHandler() or e_or_c
local tp,lv=c:GetControler(),c:GetLevel()
return VgF.IsExistingMatchingCard(VgF.LvConditionFilter,tp,LOCATION_MZONE,0,1,nil,lv)
local c = VgF.GetValueType(e_or_c) == "Effect" and e_or_c:GetHandler() or e_or_c
local tp, lv = c:GetControler(), c:GetLevel()
return VgF.IsExistingMatchingCard(VgF.LvConditionFilter, tp, LOCATION_MZONE, 0, 1, nil, lv)
end
function VgF.LvConditionFilter(c,lv)
function VgF.LvConditionFilter(c, lv)
return VgF.VMonsterFilter(c) and c:IsLevelAbove(lv)
end
---以c的名义,使g(中的每一张卡)的攻击力上升val,并在reset时重置。
......@@ -412,40 +413,40 @@ end
---@param g Card|Group 要被上升攻击力的卡
---@param val integer|string 要上升的攻击力(可以为负)
---@param reset integer|nil 指示重置的时点,默认为“回合结束时”。无论如何,都会在离场时重置。
function VgF.AtkUp(c,g,val,reset,resetcount)
function VgF.AtkUp(c, g, val, reset, resetcount)
if not c or not g then return end
if not resetcount then resetcount=1 end
if not reset then reset=RESET_PHASE+PHASE_END end
if not val or (VgF.GetValueType(val)=="number" and val==0) then return end
if VgF.GetValueType(g)=="Group" and g:GetCount()>0 then
local e={}
if not resetcount then resetcount = 1 end
if not reset then reset = RESET_PHASE + PHASE_END end
if not val or (VgF.GetValueType(val) == "number" and val == 0) then return end
if VgF.GetValueType(g) == "Group" and g:GetCount() > 0 then
local e = {}
for tc in VgF.Next(g) do
if tc:IsLocation(LOCATION_MZONE) then
if VgF.GetValueType(val)=="string" and val=="DOUBLE" then
val=tc:GetLeftScale()
if VgF.GetValueType(val) == "string" and val == "DOUBLE" then
val = tc:GetLeftScale()
end
local e1=Effect.CreateEffect(c)
local e1 = Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetCode(EFFECT_UPDATE_ATTACK)
e1:SetValue(val)
e1:SetReset(RESET_EVENT+RESETS_STANDARD+reset,resetcount)
e1:SetReset(RESET_EVENT + RESETS_STANDARD + reset, resetcount)
tc:RegisterEffect(e1)
table.insert(e,e1)
table.insert(e, e1)
end
end
return e
elseif VgF.GetValueType(g)=="Card" then
local tc=g
elseif VgF.GetValueType(g) == "Card" then
local tc = g
if tc:IsLocation(LOCATION_MZONE) then
local tc=VgF.ReturnCard(g)
if VgF.GetValueType(val)=="string" and val=="DOUBLE" then
val=tc:GetLeftScale()
local tc = VgF.ReturnCard(g)
if VgF.GetValueType(val) == "string" and val == "DOUBLE" then
val = tc:GetLeftScale()
end
local e1=Effect.CreateEffect(c)
local e1 = Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetCode(EFFECT_UPDATE_ATTACK)
e1:SetValue(val)
e1:SetReset(RESET_EVENT+RESETS_STANDARD+reset,resetcount)
e1:SetReset(RESET_EVENT + RESETS_STANDARD + reset, resetcount)
tc:RegisterEffect(e1)
return e1
end
......@@ -456,39 +457,39 @@ end
---@param g Card|Group 要被上升盾值的卡
---@param val integer|string 要上升的盾值(可以为负)
---@param reset integer|nil 指示重置的时点,默认为“回合结束时”。无论如何,都会在离场时重置。
function VgF.DefUp(c,g,val,reset,resetcount)
function VgF.DefUp(c, g, val, reset, resetcount)
if not c or not g then return end
if not reset then reset=RESET_PHASE+PHASE_END end
if not resetcount then resetcount=1 end
if not val or (VgF.GetValueType(val)=="number" and val==0) then return end
if VgF.GetValueType(g)=="Group" and g:GetCount()>0 then
local e={}
if not reset then reset = RESET_PHASE + PHASE_END end
if not resetcount then resetcount = 1 end
if not val or (VgF.GetValueType(val) == "number" and val == 0) then return end
if VgF.GetValueType(g) == "Group" and g:GetCount() > 0 then
local e = {}
for tc in VgF.Next(g) do
if tc:IsLocation(LOCATION_MZONE) then
if VgF.GetValueType(val)=="string" and val=="DOUBLE" then
val=tc:GetLeftScale()
if VgF.GetValueType(val) == "string" and val == "DOUBLE" then
val = tc:GetLeftScale()
end
local e1=Effect.CreateEffect(c)
local e1 = Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetCode(EFFECT_UPDATE_DEFENSE)
e1:SetValue(val)
e1:SetReset(RESET_EVENT+RESETS_STANDARD+reset,resetcount)
e1:SetReset(RESET_EVENT + RESETS_STANDARD + reset, resetcount)
tc:RegisterEffect(e1)
table.insert(e,e1)
table.insert(e, e1)
end
end
return e
elseif VgF.GetValueType(g)=="Card" then
local tc=g
elseif VgF.GetValueType(g) == "Card" then
local tc = g
if tc:IsLocation(LOCATION_MZONE) then
if VgF.GetValueType(val)=="string" and val=="DOUBLE" then
val=tc:GetLeftScale()
if VgF.GetValueType(val) == "string" and val == "DOUBLE" then
val = tc:GetLeftScale()
end
local e1=Effect.CreateEffect(c)
local e1 = Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetCode(EFFECT_UPDATE_DEFENSE)
e1:SetValue(val)
e1:SetReset(RESET_EVENT+RESETS_STANDARD+reset,resetcount)
e1:SetReset(RESET_EVENT + RESETS_STANDARD + reset, resetcount)
tc:RegisterEffect(e1)
return e1
end
......@@ -499,64 +500,64 @@ end
---@param g Card|Group 要被上升☆的卡
---@param val integer|string 要上升的☆(可以为负)
---@param reset integer|nil 指示重置的时点,默认为“回合结束时”。无论如何,都会在离场时重置。
function VgF.StarUp(c,g,val,reset,resetcount)
function VgF.StarUp(c, g, val, reset, resetcount)
if not c or not g then return end
if not reset then reset=RESET_PHASE+PHASE_END end
if not resetcount then resetcount=1 end
if not val or (VgF.GetValueType(val)=="number" and val==0) then return end
if VgF.GetValueType(g)=="Group" and g:GetCount()>0 then
local t1={}
local t2={}
if not reset then reset = RESET_PHASE + PHASE_END end
if not resetcount then resetcount = 1 end
if not val or (VgF.GetValueType(val) == "number" and val == 0) then return end
if VgF.GetValueType(g) == "Group" and g:GetCount() > 0 then
local t1 = {}
local t2 = {}
for tc in VgF.Next(g) do
if tc:IsLocation(LOCATION_MZONE) then
if VgF.GetValueType(val)=="string" and val=="DOUBLE" then
val=tc:GetLeftScale()
if VgF.GetValueType(val) == "string" and val == "DOUBLE" then
val = tc:GetLeftScale()
end
local e1=Effect.CreateEffect(c)
local e1 = Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetCode(EFFECT_UPDATE_LSCALE)
e1:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e1:SetRange(LOCATION_MZONE)
e1:SetValue(val)
e1:SetReset(RESET_EVENT+RESETS_STANDARD+reset,resetcount)
e1:SetReset(RESET_EVENT + RESETS_STANDARD + reset, resetcount)
tc:RegisterEffect(e1)
local e2=e1:Clone()
local e2 = e1:Clone()
e2:SetCode(EFFECT_UPDATE_RSCALE)
tc:RegisterEffect(e2)
table.insert(t1,e1)
table.insert(t2,e2)
table.insert(t1, e1)
table.insert(t2, e2)
end
end
return t1,t2
elseif VgF.GetValueType(g)=="Card" then
local tc=VgF.ReturnCard(g)
return t1, t2
elseif VgF.GetValueType(g) == "Card" then
local tc = VgF.ReturnCard(g)
if tc:IsLocation(LOCATION_MZONE) then
if VgF.GetValueType(val)=="string" and val=="DOUBLE" then
val=tc:GetLeftScale()
if VgF.GetValueType(val) == "string" and val == "DOUBLE" then
val = tc:GetLeftScale()
end
local e1=Effect.CreateEffect(c)
local e1 = Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetCode(EFFECT_UPDATE_LSCALE)
e1:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e1:SetRange(LOCATION_MZONE)
e1:SetValue(val)
e1:SetReset(RESET_EVENT+RESETS_STANDARD+reset,resetcount)
e1:SetReset(RESET_EVENT + RESETS_STANDARD + reset, resetcount)
tc:RegisterEffect(e1)
local e2=e1:Clone()
local e2 = e1:Clone()
e2:SetCode(EFFECT_UPDATE_RSCALE)
tc:RegisterEffect(e2)
return e1,e2
return e1, e2
end
end
end
---判断c是否可以以规则的手段到G区域。
---@param c Card 要判断的卡
---@return boolean 指示c能否去到G区域。
function VgF.IsAbleToGZone(c,loc)
if loc==LOCATION_HAND then
function VgF.IsAbleToGZone(c, loc)
if loc == LOCATION_HAND then
return c:IsType(TYPE_MONSTER)
elseif loc==LOCATION_MZONE then
return c:IsAttribute(SKILL_BLOCK) and VgF.IsSequence(c,0,4) and c:IsLocation(LOCATION_MZONE) and c:IsFaceup()
elseif loc == LOCATION_MZONE then
return c:IsAttribute(SKILL_BLOCK) and VgF.IsSequence(c, 0, 4) and c:IsLocation(LOCATION_MZONE) and c:IsFaceup()
end
return false
end
......@@ -564,11 +565,11 @@ end
---@param val integer 计数回充的数量
---@return function 效果的Operation函数
function VgF.DamageFill(val)
return function (e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler()
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_POSCHANGE)
local g=Duel.SelectMatchingCard(tp,Card.IsFaceup,tp,LOCATION_DAMAGE,0,val,val,nil)
Duel.ChangePosition(g,POS_FACEUP_ATTACK)
return function (e, tp, eg, ep, ev, re, r, rp)
local c = e:GetHandler()
Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_POSCHANGE)
local g = Duel.SelectMatchingCard(tp, Card.IsFaceup, tp, LOCATION_DAMAGE, 0, val, val, nil)
Duel.ChangePosition(g, POS_FACEUP_ATTACK)
return Duel.GetOperatedGroup():GetCount()
end
end
......@@ -576,12 +577,12 @@ end
---用于多Cost。例如 VgF.CostAnd(vgf.DamageCost(1), vgf.DisCardCost(1))。
function VgF.CostAnd(...)
local funcs = {...}
return function (e,tp,eg,ep,ev,re,r,rp,chk)
for _,func in ipairs(funcs) do
if chk==0 then
chk = chk and func(e,tp,eg,ep,ev,re,r,rp,chk)
return function (e, tp, eg, ep, ev, re, r, rp, chk)
for _, func in ipairs(funcs) do
if chk == 0 then
chk = chk and func(e, tp, eg, ep, ev, re, r, rp, chk)
else
func(e,tp,eg,ep,ev,re,r,rp,chk)
func(e, tp, eg, ep, ev, re, r, rp, chk)
end
end
return chk
......@@ -589,18 +590,18 @@ function VgF.CostAnd(...)
end
function VgF.ChangePosAttack(c)
return function (e,tp,eg,ep,ev,re,r,rp,chk)
if VgF.GetValueType(c)~="Card" then c=e:GetHandler() end
if chk==0 then return c:IsCanChangePosition() and c:IsPosition(POS_FACEUP_DEFENCE) end
Duel.ChangePosition(c,POS_FACEUP_ATTACK)
return function (e, tp, eg, ep, ev, re, r, rp, chk)
if VgF.GetValueType(c) ~= "Card" then c = e:GetHandler() end
if chk == 0 then return c:IsCanChangePosition() and c:IsPosition(POS_FACEUP_DEFENCE) end
Duel.ChangePosition(c, POS_FACEUP_ATTACK)
end
end
function VgF.ChangePosDefence(c)
return function (e,tp,eg,ep,ev,re,r,rp,chk)
if VgF.GetValueType(c)~="Card" then c=e:GetHandler() end
if chk==0 then return c:IsCanChangePosition() and c:IsPosition(POS_FACEUP_ATTACK) end
Duel.ChangePosition(c,POS_FACEUP_DEFENCE)
return function (e, tp, eg, ep, ev, re, r, rp, chk)
if VgF.GetValueType(c) ~= "Card" then c = e:GetHandler() end
if chk == 0 then return c:IsCanChangePosition() and c:IsPosition(POS_FACEUP_ATTACK) end
Duel.ChangePosition(c, POS_FACEUP_DEFENCE)
end
end
......@@ -608,117 +609,117 @@ end
---@param val integer 要舍弃的卡的数量
---@return function 效果的Cost函数
function VgF.DisCardCost(val)
return function (e,tp,eg,ep,ev,re,r,rp,chk)
if VgF.GetValueType(val)~="number" then return 0 end
local c=e:GetHandler()
local m=c:GetOriginalCode()
if chk==0 then
return function (e, tp, eg, ep, ev, re, r, rp, chk)
if VgF.GetValueType(val) ~= "number" then return 0 end
local c = e:GetHandler()
local m = c:GetOriginalCode()
if chk == 0 then
if e:IsHasType(EFFECT_TYPE_ACTIVATE) then
VgF.AddMixCostGroupFrom(c,m,"LOCATION_HAND")
VgF.AddMixCostGroupTo(c,m,"LOCATION_DROP")
VgF.AddMixCostGroupFilter(c,m,nil)
VgF.AddMixCostGroupCountMin(c,m,val)
VgF.AddMixCostGroupCountMax(c,m,val)
VgF.AddMixCostGroupFrom(c, m, "LOCATION_HAND")
VgF.AddMixCostGroupTo(c, m, "LOCATION_DROP")
VgF.AddMixCostGroupFilter(c, m, nil)
VgF.AddMixCostGroupCountMin(c, m, val)
VgF.AddMixCostGroupCountMax(c, m, val)
end
return VgF.IsExistingMatchingCard(nil,tp,LOCATION_HAND,0,val,nil)
return VgF.IsExistingMatchingCard(nil, tp, LOCATION_HAND, 0, val, nil)
end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_DISCARD)
local g=Duel.SelectMatchingCard(tp,nil,tp,LOCATION_HAND,0,val,val,nil)
return VgF.Sendto(LOCATION_DROP,g,REASON_COST)
Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_DISCARD)
local g = Duel.SelectMatchingCard(tp, nil, tp, LOCATION_HAND, 0, val, val, nil)
return VgF.Sendto(LOCATION_DROP, g, REASON_COST)
end
end
---用于效果的Cost。它返回一个执行“【费用】[能量爆发val]”的函数。
---@param val integer 能量爆发的数量
---@return function 效果的Cost函数
function VgF.EnergyCost(val)
return function (e,tp,eg,ep,ev,re,r,rp,chk)
if VgF.GetValueType(val)~="number" then return 0 end
local c=e:GetHandler()
local m=c:GetOriginalCode()
if chk==0 then
return function (e, tp, eg, ep, ev, re, r, rp, chk)
if VgF.GetValueType(val) ~= "number" then return 0 end
local c = e:GetHandler()
local m = c:GetOriginalCode()
if chk == 0 then
if e:IsHasType(EFFECT_TYPE_ACTIVATE) then
VgF.AddMixCostGroupFrom(c,m,"LOCATION_EMBLEM")
VgF.AddMixCostGroupTo(c,m,"0")
VgF.AddMixCostGroupFilter(c,m,function(tc) tc:IsCode(CARD_ENERGY) end)
VgF.AddMixCostGroupCountMin(c,m,val)
VgF.AddMixCostGroupCountMax(c,m,val)
VgF.AddMixCostGroupFrom(c, m, "LOCATION_EMBLEM")
VgF.AddMixCostGroupTo(c, m, "0")
VgF.AddMixCostGroupFilter(c, m, function(tc) tc:IsCode(CARD_ENERGY) end)
VgF.AddMixCostGroupCountMin(c, m, val)
VgF.AddMixCostGroupCountMax(c, m, val)
end
return VgF.IsExistingMatchingCard(Card.IsCode,tp,LOCATION_EMBLEM,0,val,nil,CARD_ENERGY)
return VgF.IsExistingMatchingCard(Card.IsCode, tp, LOCATION_EMBLEM, 0, val, nil, CARD_ENERGY)
end
local sg=Duel.GetMatchingGroup(Card.IsCode,tp,LOCATION_EMBLEM,0,nil,CARD_ENERGY)
local g=VgF.GetCardsFromGroup(sg,val)
return VgF.Sendto(0,g,tp,POS_FACEUP,REASON_COST)
local sg = Duel.GetMatchingGroup(Card.IsCode, tp, LOCATION_EMBLEM, 0, nil, CARD_ENERGY)
local g = VgF.GetCardsFromGroup(sg, val)
return VgF.Sendto(0, g, tp, POS_FACEUP, REASON_COST)
end
end
---用于效果的Cost。它返回一个执行“【费用】[灵魂爆发val]”的函数。
---@param val integer 灵魂爆发的数量
---@return function 效果的Cost函数
function VgF.OverlayCost(val)
return function (e,tp,eg,ep,ev,re,r,rp,chk)
if VgF.GetValueType(val)~="number" then return 0 end
local c=e:GetHandler()
local m=c:GetOriginalCode()
if chk==0 then
return function (e, tp, eg, ep, ev, re, r, rp, chk)
if VgF.GetValueType(val) ~= "number" then return 0 end
local c = e:GetHandler()
local m = c:GetOriginalCode()
if chk == 0 then
if e:IsHasType(EFFECT_TYPE_ACTIVATE) then
VgF.AddMixCostGroupFrom(c,m,"LOCATION_OVERLAY")
VgF.AddMixCostGroupTo(c,m,"LOCATION_DROP")
VgF.AddMixCostGroupFilter(c,m,nil)
VgF.AddMixCostGroupCountMin(c,m,val)
VgF.AddMixCostGroupCountMax(c,m,val)
VgF.AddMixCostGroupFrom(c, m, "LOCATION_OVERLAY")
VgF.AddMixCostGroupTo(c, m, "LOCATION_DROP")
VgF.AddMixCostGroupFilter(c, m, nil)
VgF.AddMixCostGroupCountMin(c, m, val)
VgF.AddMixCostGroupCountMax(c, m, val)
end
return Duel.GetMatchingGroup(VgF.VMonsterFilter,tp,LOCATION_MZONE,0,nil,nil):GetFirst():GetOverlayCount()>=val
return Duel.GetMatchingGroup(VgF.VMonsterFilter, tp, LOCATION_MZONE, 0, nil, nil):GetFirst():GetOverlayCount() >= val
end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_REMOVEXYZ)
local g=Duel.GetMatchingGroup(VgF.VMonsterFilter,tp,LOCATION_MZONE,0,nil):GetFirst():GetOverlayGroup():Select(tp,nil,val,val,nil)
return VgF.Sendto(LOCATION_DROP,g,REASON_COST)
Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_REMOVEXYZ)
local g = Duel.GetMatchingGroup(VgF.VMonsterFilter, tp, LOCATION_MZONE, 0, nil):GetFirst():GetOverlayGroup():Select(tp, nil, val, val, nil)
return VgF.Sendto(LOCATION_DROP, g, REASON_COST)
end
end
---用于效果的Cost或Operation。它返回一个执行“【费用】[灵魂填充val]”的函数。
---@param val integer 灵魂填充的数量
---@return function 效果的Cost或Operation函数
function VgF.OverlayFill(val)
return function (e,tp,eg,ep,ev,re,r,rp,chk)
if VgF.GetValueType(val)~="number" then return 0 end
local c=e:GetHandler()
local m=c:GetOriginalCode()
if chk==0 then
return function (e, tp, eg, ep, ev, re, r, rp, chk)
if VgF.GetValueType(val) ~= "number" then return 0 end
local c = e:GetHandler()
local m = c:GetOriginalCode()
if chk == 0 then
if e:IsHasType(EFFECT_TYPE_ACTIVATE) then
VgF.AddMixCostGroupFrom(c,m,"LOCATION_DECK")
VgF.AddMixCostGroupTo(c,m,"LOCATION_OVERLAY")
VgF.AddMixCostGroupFilter(c,m,nil)
VgF.AddMixCostGroupCountMin(c,m,val)
VgF.AddMixCostGroupCountMax(c,m,val)
VgF.AddMixCostGroupFrom(c, m, "LOCATION_DECK")
VgF.AddMixCostGroupTo(c, m, "LOCATION_OVERLAY")
VgF.AddMixCostGroupFilter(c, m, nil)
VgF.AddMixCostGroupCountMin(c, m, val)
VgF.AddMixCostGroupCountMax(c, m, val)
end
return Duel.GetFieldGroupCount(tp,LOCATION_DECK,0)>=val
return Duel.GetFieldGroupCount(tp, LOCATION_DECK, 0) >= val
end
local rc=Duel.GetMatchingGroup(VgF.VMonsterFilter,tp,LOCATION_MZONE,0,nil):GetFirst()
local g=Duel.GetDecktopGroup(tp,val)
local rc = Duel.GetMatchingGroup(VgF.VMonsterFilter, tp, LOCATION_MZONE, 0, nil):GetFirst()
local g = Duel.GetDecktopGroup(tp, val)
Duel.DisableShuffleCheck()
Duel.RaiseEvent(g,EVENT_CUSTOM+EVENT_OVERLAY_FILL,e,0,tp,tp,val)
return VgF.Sendto(LOCATION_OVERLAY,g,rc)
Duel.RaiseEvent(g, EVENT_CUSTOM + EVENT_OVERLAY_FILL, e, 0, tp, tp, val)
return VgF.Sendto(LOCATION_OVERLAY, g, rc)
end
end
---用于效果的Cost。它返回一个执行“【费用】[计数爆发val]”的函数。
---@param val integer 计数爆发的数量
---@return function 效果的Cost函数
function VgF.DamageCost(val)
return function (e,tp,eg,ep,ev,re,r,rp,chk)
if VgF.GetValueType(val)~="number" then return 0 end
local c=e:GetHandler()
local m=c:GetOriginalCode()
if chk==0 then
return function (e, tp, eg, ep, ev, re, r, rp, chk)
if VgF.GetValueType(val) ~= "number" then return 0 end
local c = e:GetHandler()
local m = c:GetOriginalCode()
if chk == 0 then
if e:IsHasType(EFFECT_TYPE_ACTIVATE) then
VgF.AddMixCostGroupFrom(c,m,"LOCATION_DAMAGE")
VgF.AddMixCostGroupTo(c,m,"POSCHANGE")
VgF.AddMixCostGroupFilter(c,m,Card.IsFaceup)
VgF.AddMixCostGroupCountMin(c,m,val)
VgF.AddMixCostGroupCountMax(c,m,val)
VgF.AddMixCostGroupFrom(c, m, "LOCATION_DAMAGE")
VgF.AddMixCostGroupTo(c, m, "POSCHANGE")
VgF.AddMixCostGroupFilter(c, m, Card.IsFaceup)
VgF.AddMixCostGroupCountMin(c, m, val)
VgF.AddMixCostGroupCountMax(c, m, val)
end
return VgF.IsExistingMatchingCard(Card.IsFaceup,tp,LOCATION_DAMAGE,0,val,nil)
return VgF.IsExistingMatchingCard(Card.IsFaceup, tp, LOCATION_DAMAGE, 0, val, nil)
end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_DAMAGE)
local g=Duel.SelectMatchingCard(tp,Card.IsFaceup,tp,LOCATION_DAMAGE,0,val,val,nil)
Duel.ChangePosition(g,POS_FACEDOWN_ATTACK)
Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_DAMAGE)
local g = Duel.SelectMatchingCard(tp, Card.IsFaceup, tp, LOCATION_DAMAGE, 0, val, val, nil)
Duel.ChangePosition(g, POS_FACEDOWN_ATTACK)
return Duel.GetOperatedGroup():GetCount()
end
end
......@@ -734,7 +735,7 @@ function VgF.LeaveFieldCost(card_code_func, val_max, val_min, except, ...)
return VgF.LeaveFieldCostGroup()
elseif VgF.GetValueType(card_code_func) == "Card" then
return VgF.LeaveFieldCostGroup(Group.FromCards(card_code_func))
elseif VgF.GetValueType(card_code_func)=="Group" then
elseif VgF.GetValueType(card_code_func) == "Group" then
return VgF.LeaveFieldCostGroup(card_code_func)
end
local ex_params = {...}
......@@ -743,148 +744,148 @@ function VgF.LeaveFieldCost(card_code_func, val_max, val_min, except, ...)
local leave_filter = VgF.True
if type(card_code_func) == "function" then
leave_filter = card_code_func
elseif type(card_code_func)=="number" then
elseif type(card_code_func) == "number" then
leave_filter = function(c) return c:IsCode(card_code_func) end
end
return function(e,tp,eg,ep,ev,re,r,rp,chk)
return function(e, tp, eg, ep, ev, re, r, rp, chk)
leave_filter = function(c) return leave_filter(c, table.unpack(ex_params)) and c:IsAbleToGraveAsCost() end
if chk==0 then return VgF.IsExistingMatchingCard(leave_filter,tp,LOCATION_MZONE,0,val_min,except) end
local g = vgf.SelectMatchingCard(HINTMSG_LEAVEFIELD,e,tp,leave_filter,tp,LOCATION_MZONE,0,val_min,val_max,except)
VgF.Sendto(LOCATION_DROP,g,REASON_COST)
if chk == 0 then return VgF.IsExistingMatchingCard(leave_filter, tp, LOCATION_MZONE, 0, val_min, except) end
local g = vgf.SelectMatchingCard(HINTMSG_LEAVEFIELD, e, tp, leave_filter, tp, LOCATION_MZONE, 0, val_min, val_max, except)
VgF.Sendto(LOCATION_DROP, g, REASON_COST)
end
end
function VgF.LeaveFieldCostGroup(g)
return function (e,tp,eg,ep,ev,re,r,rp,chk)
return function (e, tp, eg, ep, ev, re, r, rp, chk)
g = g or Group.FromCards(e:GetHandler())
if chk==0 then return not g:IsExists(VgF.NOT(Card.IsAbleToGraveAsCost),1,nil) end
VgF.Sendto(LOCATION_DROP,g,REASON_COST)
if chk == 0 then return not g:IsExists(VgF.NOT(Card.IsAbleToGraveAsCost), 1, nil) end
VgF.Sendto(LOCATION_DROP, g, REASON_COST)
end
end
function VgF.IsCanBeCalled(c,e,tp,sumtype,pos,zone)
local z=0
if VgF.GetValueType(zone)=="number" then z=VgF.GetAvailableLocation(tp,zone)
elseif VgF.GetValueType(zone)=="string" and zone=="NoMonster" then z=Duel.GetLocationCount(tp,LOCATION_MZONE) zone=0xff
else z=VgF.GetAvailableLocation(tp) zone=0xff end
if VgF.GetValueType(sumtype)~="number" then sumtype=0 end
if VgF.GetValueType(pos)~="number" then pos=POS_FACEUP_ATTACK end
if VgF.GetValueType(zone)=="string" and zone=="FromOverlayToV" then
local _,code=c:GetOriginalCode()
return Duel.IsPlayerCanSpecialSummonMonster(tp,code,nil,TYPE_MONSTER+TYPE_EFFECT,c:GetBaseAttack(),c:GetBaseDefense(),c:GetOriginalLevel(),c:GetOriginalRace(),c:GetOriginalAttribute())
function VgF.IsCanBeCalled(c, e, tp, sumtype, pos, zone)
local z = 0
if VgF.GetValueType(zone) == "number" then z = VgF.GetAvailableLocation(tp, zone)
elseif VgF.GetValueType(zone) == "string" and zone == "NoMonster" then z = Duel.GetLocationCount(tp, LOCATION_MZONE) zone = 0xff
else z = VgF.GetAvailableLocation(tp) zone = 0xff end
if VgF.GetValueType(sumtype) ~= "number" then sumtype = 0 end
if VgF.GetValueType(pos) ~= "number" then pos = POS_FACEUP_ATTACK end
if VgF.GetValueType(zone) == "string" and zone == "FromOverlayToV" then
local _, code = c:GetOriginalCode()
return Duel.IsPlayerCanSpecialSummonMonster(tp, code, nil, TYPE_MONSTER + TYPE_EFFECT, c:GetBaseAttack(), c:GetBaseDefense(), c:GetOriginalLevel(), c:GetOriginalRace(), c:GetOriginalAttribute())
end
return z>0 and c:IsCanBeSpecialSummoned(e,sumtype,tp,false,false,pos,tp,zone)
return z > 0 and c:IsCanBeSpecialSummoned(e, sumtype, tp, false, false, pos, tp, zone)
end
---用于效果的Operation。执行“从loc_from中选取最少int_min,最多int_max张满足f的卡,送去loc_to。”。
---@param loc_to integer 要送去的区域。不填则返回0。
---@param loc_from integer 要选取的区域。不填则返回0。
---@param f function|nil 卡片过滤的条件
function VgF.SearchCard(loc_to,loc_from,f,int_max,int_min,...)
local ext_params={...}
return function (e,tp,eg,ep,ev,re,r,rp)
function VgF.SearchCard(loc_to, loc_from, f, int_max, int_min, ...)
local ext_params = {...}
return function (e, tp, eg, ep, ev, re, r, rp)
if not loc_to or not loc_from then return 0 end
if VgF.GetValueType(int_max)~="number" then int_max=1 end
if VgF.GetValueType(int_min)~="number" then int_min=int_max end
if loc_to==LOCATION_HAND then
local g=VgF.SelectMatchingCard(HINTMSG_ATOHAND,e,tp,function (c)
return VgF.GetValueType(f)~="function" or f(c,table.unpack(ext_params))
end,tp,loc_from,0,int_min,int_max,nil)
if g:GetCount()>0 then
return VgF.Sendto(loc_to,g,nil,REASON_EFFECT)
if VgF.GetValueType(int_max) ~= "number" then int_max = 1 end
if VgF.GetValueType(int_min) ~= "number" then int_min = int_max end
if loc_to == LOCATION_HAND then
local g = VgF.SelectMatchingCard(HINTMSG_ATOHAND, e, tp, function (c)
return VgF.GetValueType(f) ~= "function" or f(c, table.unpack(ext_params))
end, tp, loc_from, 0, int_min, int_max, nil)
if g:GetCount() > 0 then
return VgF.Sendto(loc_to, g, nil, REASON_EFFECT)
end
elseif loc_to==LOCATION_MZONE then
local g=VgF.SelectMatchingCard(HINTMSG_CALL,e,tp,function (c)
if not VgF.IsCanBeCalled(c,e,tp) then return false end
return VgF.GetValueType(f)~="function" or f(c,table.unpack(ext_params))
end,tp,loc_from,0,int_min,int_max,nil)
if g:GetCount()>0 then
return VgF.Sendto(loc_to,g,0,tp)
elseif loc_to == LOCATION_MZONE then
local g = VgF.SelectMatchingCard(HINTMSG_CALL, e, tp, function (c)
if not VgF.IsCanBeCalled(c, e, tp) then return false end
return VgF.GetValueType(f) ~= "function" or f(c, table.unpack(ext_params))
end, tp, loc_from, 0, int_min, int_max, nil)
if g:GetCount() > 0 then
return VgF.Sendto(loc_to, g, 0, tp)
end
elseif loc_to==LOCATION_DROP then
local g=VgF.SelectMatchingCard(HINTMSG_CALL,e,tp,function (c)
return VgF.GetValueType(f)~="function" or f(c,table.unpack(ext_params))
end,tp,loc_from,0,int_min,int_max,nil)
if g:GetCount()>0 then
return VgF.Sendto(loc_to,g,REASON_EFFECT)
elseif loc_to == LOCATION_DROP then
local g = VgF.SelectMatchingCard(HINTMSG_CALL, e, tp, function (c)
return VgF.GetValueType(f) ~= "function" or f(c, table.unpack(ext_params))
end, tp, loc_from, 0, int_min, int_max, nil)
if g:GetCount() > 0 then
return VgF.Sendto(loc_to, g, REASON_EFFECT)
end
elseif loc_to==LOCATION_REMOVED then
local g=VgF.SelectMatchingCard(HINTMSG_CALL,e,tp,function (c)
return VgF.GetValueType(f)~="function" or f(c,table.unpack(ext_params))
end,tp,loc_from,0,int_min,int_max,nil)
if g:GetCount()>0 then
return VgF.Sendto(loc_to,g,POS_FACEUP,REASON_EFFECT)
elseif loc_to == LOCATION_REMOVED then
local g = VgF.SelectMatchingCard(HINTMSG_CALL, e, tp, function (c)
return VgF.GetValueType(f) ~= "function" or f(c, table.unpack(ext_params))
end, tp, loc_from, 0, int_min, int_max, nil)
if g:GetCount() > 0 then
return VgF.Sendto(loc_to, g, POS_FACEUP, REASON_EFFECT)
end
elseif loc_to==LOCATION_EXILE then
local g=VgF.SelectMatchingCard(HINTMSG_CALL,e,tp,function (c)
return VgF.GetValueType(f)~="function" or f(c,table.unpack(ext_params))
end,tp,loc_from,0,int_min,int_max,nil)
if g:GetCount()>0 then
return VgF.Sendto(loc_to,g,REASON_EFFECT)
elseif loc_to == LOCATION_EXILE then
local g = VgF.SelectMatchingCard(HINTMSG_CALL, e, tp, function (c)
return VgF.GetValueType(f) ~= "function" or f(c, table.unpack(ext_params))
end, tp, loc_from, 0, int_min, int_max, nil)
if g:GetCount() > 0 then
return VgF.Sendto(loc_to, g, REASON_EFFECT)
end
elseif loc_to==LOCATION_OVERLAY then
local g=VgF.SelectMatchingCard(HINTMSG_CALL,e,tp,function (c)
return VgF.GetValueType(f)~="function" or f(c,table.unpack(ext_params))
end,tp,loc_from,0,int_min,int_max,nil)
if g:GetCount()>0 then
local rc=VgF.GetVMonster(tp)
return VgF.Sendto(loc_to,g,rc)
elseif loc_to == LOCATION_OVERLAY then
local g = VgF.SelectMatchingCard(HINTMSG_CALL, e, tp, function (c)
return VgF.GetValueType(f) ~= "function" or f(c, table.unpack(ext_params))
end, tp, loc_from, 0, int_min, int_max, nil)
if g:GetCount() > 0 then
local rc = VgF.GetVMonster(tp)
return VgF.Sendto(loc_to, g, rc)
end
elseif bit.band(loc_to,0xf800)>0 then
local g=VgF.SelectMatchingCard(HINTMSG_CALL,e,tp,function (c)
return VgF.GetValueType(f)~="function" or f(c,table.unpack(ext_params))
end,tp,loc_from,0,int_min,int_max,nil)
if g:GetCount()>0 then
return VgF.Sendto(loc_to,g,tp,POS_FACEUP_ATTACK,REASON_EFFECT)
elseif bit.band(loc_to, 0xf800) > 0 then
local g = VgF.SelectMatchingCard(HINTMSG_CALL, e, tp, function (c)
return VgF.GetValueType(f) ~= "function" or f(c, table.unpack(ext_params))
end, tp, loc_from, 0, int_min, int_max, nil)
if g:GetCount() > 0 then
return VgF.Sendto(loc_to, g, tp, POS_FACEUP_ATTACK, REASON_EFFECT)
end
end
return 0
end
end
function Group.CheckSubGroup(g,f,min,max,...)
min=min or 1
max=max or #g
function Group.CheckSubGroup(g, f, min, max, ...)
min = min or 1
max = max or #g
if min > max then return false end
local ext_params={...}
local ext_params = {...}
-- selected group
local sg=Group.CreateGroup()
local sg = Group.CreateGroup()
-- be select group
local bg=g:Clone()
local bg = g:Clone()
for c in VgF.Next(g) do
if VgF.CheckGroupRecursiveCapture(c,sg,bg,f,min,max,ext_params) then return true end
if VgF.CheckGroupRecursiveCapture(c, sg, bg, f, min, max, ext_params) then return true end
bg:RemoveCard(c)
end
return false
end
function VgF.CheckGroupRecursiveCapture(c,sg,bg,f,min,max,ext_params)
sg=sg+c
if VgF.G_Add_Check and not VgF.G_Add_Check(sg,c,bg) then
sg=sg-c
function VgF.CheckGroupRecursiveCapture(c, sg, bg, f, min, max, ext_params)
sg = sg + c
if VgF.G_Add_Check and not VgF.G_Add_Check(sg, c, bg) then
sg = sg - c
return false
end
local res=#sg >= min and #sg<=max and (not f or f(sg,table.unpack(ext_params)))
if not res and #sg<max then
res=bg:IsExists(VgF.CheckGroupRecursiveCapture,1,sg,sg,bg,f,min,max,ext_params)
local res = #sg >= min and #sg <= max and (not f or f(sg, table.unpack(ext_params)))
if not res and #sg < max then
res = bg:IsExists(VgF.CheckGroupRecursiveCapture, 1, sg, sg, bg, f, min, max, ext_params)
end
sg=sg-c
sg = sg - c
return res
end
function Group.SelectSubGroup(g,tp,f,cancelable,min,max,...)
VgF.SubGroupCaptured=Group.CreateGroup()
min=min or 1
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 then return nil end
function Group.SelectSubGroup(g, tp, f, cancelable, min, max, ...)
VgF.SubGroupCaptured = Group.CreateGroup()
min = min or 1
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 then return nil end
for tc in VgF.Next(fg) do
fg:SelectUnselect(sg,tp,false,false,min,max)
fg:SelectUnselect(sg, tp, false, false, min, max)
end
sg:Merge(fg)
local finish=(#sg>=min and #sg<=max and f(sg,...))
while #sg<max do
local cg=Group.CreateGroup()
local eg=g:Clone()
for c in VgF.Next(g-sg) do
local finish = (#sg >= min and #sg <= max and f(sg, ...))
while #sg < max do
local cg = Group.CreateGroup()
local eg = g:Clone()
for c in VgF.Next(g - sg) do
if not cg:IsContains(c) then
if VgF.CheckGroupRecursiveCapture(c,sg,eg,f,min,max,ext_params) then
if VgF.CheckGroupRecursiveCapture(c, sg, eg, f, min, max, ext_params) then
cg:Merge(VgF.SubGroupCaptured)
else
eg:RemoveCard(c)
......@@ -892,15 +893,15 @@ function Group.SelectSubGroup(g,tp,f,cancelable,min,max,...)
end
end
cg:Sub(sg)
finish=(#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)
finish = (#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
if #sg == max then finish = true end
else
sg:RemoveCard(tc)
end
......@@ -914,109 +915,109 @@ function Group.SelectSubGroup(g,tp,f,cancelable,min,max,...)
return nil
end
end
function Group.SelectDoubleSubGroup(g,p,f1,int_min1,int_max1,f2,int_min2,int_max2,except_g,...)
if VgF.GetValueType(f1)~="function" then f1=VgF.True end
if VgF.GetValueType(f2)~="function" then f2=VgF.True end
local result=Group.CreateGroup()
local g1=g:Filter(f1,except_g,...)
local g2=g:Filter(f2,except_g,...)
local g3=Group.__band(g1,g2)
if g:GetCount()<int_min1+int_min2 or g1:GetCount()<int_min1 or g2:GetCount()<int_min2 then return result end
if g1:GetCount()<int_max1 then int_max1=g1:GetCount() end
if g2:GetCount()<int_max2 then int_max2=g2:GetCount() end
if g3:GetCount()==g2:GetCount() and g3:GetCount()==g1:GetCount() then
local min=int_min1+int_min2
local max=int_max1+int_max2
return g3:SelectSubGroup(p,vgf.True,false,min,max)
end
local result1=Group.CreateGroup()
local result2=Group.CreateGroup()
while result1:GetCount()<int_max1 do
local sg=Group.__sub(g1,result1)
local check_group=Group.__sub(g2,result1)
for tc in VgF.Next(Group.__sub(g1,result1)) do
if g3:IsContains(tc) and not check_group:IsExists(VgF.True,int_min2,tc) then sg:RemoveCard(tc) end
function Group.SelectDoubleSubGroup(g, p, f1, int_min1, int_max1, f2, int_min2, int_max2, except_g, ...)
if VgF.GetValueType(f1) ~= "function" then f1 = VgF.True end
if VgF.GetValueType(f2) ~= "function" then f2 = VgF.True end
local result = Group.CreateGroup()
local g1 = g:Filter(f1, except_g, ...)
local g2 = g:Filter(f2, except_g, ...)
local g3 = Group.__band(g1, g2)
if g:GetCount() < int_min1 + int_min2 or g1:GetCount() < int_min1 or g2:GetCount() < int_min2 then return result end
if g1:GetCount() < int_max1 then int_max1 = g1:GetCount() end
if g2:GetCount() < int_max2 then int_max2 = g2:GetCount() end
if g3:GetCount() == g2:GetCount() and g3:GetCount() == g1:GetCount() then
local min = int_min1 + int_min2
local max = int_max1 + int_max2
return g3:SelectSubGroup(p, vgf.True, false, min, max)
end
local result1 = Group.CreateGroup()
local result2 = Group.CreateGroup()
while result1:GetCount() < int_max1 do
local sg = Group.__sub(g1, result1)
local check_group = Group.__sub(g2, result1)
for tc in VgF.Next(Group.__sub(g1, result1)) do
if g3:IsContains(tc) and not check_group:IsExists(VgF.True, int_min2, tc) then sg:RemoveCard(tc) end
end
local btok=false
if result1:GetCount()>=int_min1 then btok=true end
local tc=sg:SelectUnselect(result1,p,btok,false,int_min1,int_max1)
local btok = false
if result1:GetCount() >= int_min1 then btok = true end
local tc = sg:SelectUnselect(result1, p, btok, false, int_min1, int_max1)
if not tc then break
elseif result1:IsContains(tc) then result1:RemoveCard(tc)
else result1:AddCard(tc) end
end
g2:Sub(result1)
while result2:GetCount()<int_max2 do
local sg=Group.__sub(g2,result2)
local btok=false
if result2:GetCount()>=int_min2 then btok=true end
local tc=sg:SelectUnselect(result2,p,btok,false,int_min2,int_max2)
while result2:GetCount() < int_max2 do
local sg = Group.__sub(g2, result2)
local btok = false
if result2:GetCount() >= int_min2 then btok = true end
local tc = sg:SelectUnselect(result2, p, btok, false, int_min2, int_max2)
if not tc then break
elseif result2:IsContains(tc) and not result1:IsContains(tc) then result2:RemoveCard(tc)
else result2:AddCard(tc) end
end
result=Group.__add(result1,result2)
result = Group.__add(result1, result2)
return result
end
---返回p场上的先导者。
---@param p integer 要获取先导者的玩家。不合法则返回nil。
---@return Card|nil p场上的先导者
function VgF.GetVMonster(p)
if p~=0 and p~=1 then return end
return Duel.GetMatchingGroup(VgF.VMonsterFilter,p,LOCATION_MZONE,0,nil):GetFirst()
if p ~= 0 and p ~= 1 then return end
return Duel.GetMatchingGroup(VgF.VMonsterFilter, p, LOCATION_MZONE, 0, nil):GetFirst()
end
---判断c是否在前列。
---@param c Card 要判断的卡
---@return boolean 指示c是否是前列的单位
function VgF.FrontFilter(c)
return vgf.IsSequence(c,0,4,5) and c:IsLocation(LOCATION_MZONE)
return vgf.IsSequence(c, 0, 4, 5) and c:IsLocation(LOCATION_MZONE)
end
---判断c是否在后列。
---@param c Card 要判断的卡
---@return boolean 指示c是否是后列的单位
function VgF.BackFilter(c)
return vgf.IsSequence(c,1,2,3) and c:IsLocation(LOCATION_MZONE)
return vgf.IsSequence(c, 1, 2, 3) and c:IsLocation(LOCATION_MZONE)
end
function VgF.PrisonFilter(c,ct)
return c:GetSequence() == ct-1
function VgF.PrisonFilter(c, ct)
return c:GetSequence() == ct - 1
end
---收容g(中的每一张卡)到p的监狱。没有监狱时,不操作。
---@param g Card|Group
---@param p integer
function VgF.SendtoPrison(g,p)
function VgF.SendtoPrison(g, p)
if not VgF.CheckPrison(p) or not g then return end
local og=Duel.GetFieldGroup(p,LOCATION_ORDER,0)
local oc=og:Filter(VgF.PrisonFilter,nil,og:GetCount()):GetFirst()
if VgF.GetValueType(g)=="Card" then
VgF.Sendto(LOCATION_ORDER,g,p,POS_FACEUP_ATTACK,REASON_EFFECT)
g:RegisterFlagEffect(FLAG_IMPRISON,RESET_EVENT+RESETS_STANDARD,EFFECT_FLAG_CLIENT_HINT,1,0,VgF.Stringid(10105015,0))
elseif VgF.GetValueType(g)=="Group" then
local og = Duel.GetFieldGroup(p, LOCATION_ORDER, 0)
local oc = og:Filter(VgF.PrisonFilter, nil, og:GetCount()):GetFirst()
if VgF.GetValueType(g) == "Card" then
VgF.Sendto(LOCATION_ORDER, g, p, POS_FACEUP_ATTACK, REASON_EFFECT)
g:RegisterFlagEffect(FLAG_IMPRISON, RESET_EVENT + RESETS_STANDARD, EFFECT_FLAG_CLIENT_HINT, 1, 0, VgF.Stringid(10105015, 0))
elseif VgF.GetValueType(g) == "Group" then
for tc in VgF.Next(g) do
VgF.Sendto(LOCATION_ORDER,tc,p,POS_FACEUP_ATTACK,REASON_EFFECT)
tc:RegisterFlagEffect(FLAG_IMPRISON,RESET_EVENT+RESETS_STANDARD,EFFECT_FLAG_CLIENT_HINT,1,0,VgF.Stringid(10105015,0))
VgF.Sendto(LOCATION_ORDER, tc, p, POS_FACEUP_ATTACK, REASON_EFFECT)
tc:RegisterFlagEffect(FLAG_IMPRISON, RESET_EVENT + RESETS_STANDARD, EFFECT_FLAG_CLIENT_HINT, 1, 0, VgF.Stringid(10105015, 0))
end
end
Duel.MoveSequence(oc,og:GetCount()-1)
Duel.MoveSequence(oc, og:GetCount() - 1)
end
--[[
function VgF.PrisonFilter(c,tp)
function VgF.PrisonFilter(c, tp)
return c:IsSetCard(0x3040) and not VgF.IsExistingMatchingCard(function (tc)
return tc:GetSequence()<c:GetSequence()
end,tp,LOCATION_ORDER,0,1,c)
return tc:GetSequence() < c:GetSequence()
end, tp, LOCATION_ORDER, 0, 1, c)
end
---收容g(中的每一张卡)到p的监狱。没有监狱时,不操作。
---@param g Card|Group
---@param p integer
function VgF.SendtoPrison(g,p)
function VgF.SendtoPrison(g, p)
if not VgF.CheckPrison(p) or not g then return end
local og=Duel.GetFieldGroup(p,LOCATION_ORDER,0)
local oc=og:Filter(VgF.PrisonFilter,nil,p):GetFirst()
if VgF.GetValueType(g)=="Card" then
Duel.Sendto(g,p,LOCATION_ORDER,POS_FACEUP_ATTACK,REASON_EFFECT,1)
g:RegisterFlagEffect(FLAG_IMPRISON,RESET_EVENT+RESETS_STANDARD,EFFECT_FLAG_CLIENT_HINT,1,0,VgF.Stringid(10105015,0))
elseif VgF.GetValueType(g)=="Group" then
local og = Duel.GetFieldGroup(p, LOCATION_ORDER, 0)
local oc = og:Filter(VgF.PrisonFilter, nil, p):GetFirst()
if VgF.GetValueType(g) == "Card" then
Duel.Sendto(g, p, LOCATION_ORDER, POS_FACEUP_ATTACK, REASON_EFFECT, 1)
g:RegisterFlagEffect(FLAG_IMPRISON, RESET_EVENT + RESETS_STANDARD, EFFECT_FLAG_CLIENT_HINT, 1, 0, VgF.Stringid(10105015, 0))
elseif VgF.GetValueType(g) == "Group" then
for tc in VgF.Next(g) do
Duel.Sendto(tc,p,LOCATION_ORDER,POS_FACEUP_ATTACK,REASON_EFFECT,1)
tc:RegisterFlagEffect(FLAG_IMPRISON,RESET_EVENT+RESETS_STANDARD,EFFECT_FLAG_CLIENT_HINT,1,0,VgF.Stringid(10105015,0))
Duel.Sendto(tc, p, LOCATION_ORDER, POS_FACEUP_ATTACK, REASON_EFFECT, 1)
tc:RegisterFlagEffect(FLAG_IMPRISON, RESET_EVENT + RESETS_STANDARD, EFFECT_FLAG_CLIENT_HINT, 1, 0, VgF.Stringid(10105015, 0))
end
end
end]]
......@@ -1024,209 +1025,209 @@ end]]
---@param p integer
---@return boolean 指示p场上有没有监狱。
function VgF.CheckPrison(p)
local og=Duel.GetFieldGroup(p,LOCATION_ORDER,0)
return og:IsExists(Card.IsSetCard,1,nil,0x3040)
local og = Duel.GetFieldGroup(p, LOCATION_ORDER, 0)
return og:IsExists(Card.IsSetCard, 1, nil, 0x3040)
end
--重置Effect
function VgF.EffectReset(c,e,code,con)
if VgF.GetValueType(e)=="Effect" then
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
function VgF.EffectReset(c, e, code, con)
if VgF.GetValueType(e) == "Effect" then
local e1 = Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
e1:SetCode(code)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
e1:SetRange(LOCATION_ALL)
e1:SetLabelObject(e)
if VgF.GetValueType(con)=="function" then e1:SetCondition(con) end
if VgF.GetValueType(con) == "function" then e1:SetCondition(con) end
e1:SetOperation(VgF.EffectResetOperation)
c:RegisterEffect(e1)
elseif VgF.GetValueType(e)=="table" then
for i,v in ipairs(e) do
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
elseif VgF.GetValueType(e) == "table" then
for i, v in ipairs(e) do
local e1 = Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
e1:SetCode(code)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
e1:SetRange(LOCATION_ALL)
e1:SetLabelObject(v)
if VgF.GetValueType(con)=="function" then e1:SetCondition(con) end
if VgF.GetValueType(con) == "function" then e1:SetCondition(con) end
e1:SetOperation(VgF.EffectResetOperation)
c:RegisterEffect(e1)
end
end
end
function VgF.EffectResetOperation(e,tp,eg,ep,ev,re,r,rp)
local e1=e:GetLabelObject()
if VgF.GetValueType(e1)=="Effect" then e1:Reset() end
function VgF.EffectResetOperation(e, tp, eg, ep, ev, re, r, rp)
local e1 = e:GetLabelObject()
if VgF.GetValueType(e1) == "Effect" then e1:Reset() end
e:Reset()
end
function VgF.IsExistingMatchingCard(f,tp,loc_self,loc_op,int,except_g,...)
return VgF.GetMatchingGroupCount(f,tp,loc_self,loc_op,except_g,...)>=int
function VgF.IsExistingMatchingCard(f, tp, loc_self, loc_op, int, except_g, ...)
return VgF.GetMatchingGroupCount(f, tp, loc_self, loc_op, except_g, ...) >= int
end
function VgF.SelectMatchingCard(hintmsg,e,select_tp,f,tp,loc_self,loc_op,int_min,int_max,except_g,...)
local a=false
if ((select_tp==tp and bit.band(loc_self,LOCATION_DECK)>0) or (select_tp~=tp and bit.band(loc_op,LOCATION_DECK)>0)) and Duel.SelectYesNo(select_tp,VgF.Stringid(VgID,13)) then
local g=Duel.GetFieldGroup(select_tp,LOCATION_DECK,0)
function VgF.SelectMatchingCard(hintmsg, e, select_tp, f, tp, loc_self, loc_op, int_min, int_max, except_g, ...)
local a = false
if ((select_tp == tp and bit.band(loc_self, LOCATION_DECK) > 0) or (select_tp ~= tp and bit.band(loc_op, LOCATION_DECK) > 0)) and Duel.SelectYesNo(select_tp, VgF.Stringid(VgID, 13)) then
local g = Duel.GetFieldGroup(select_tp, LOCATION_DECK, 0)
Duel.DisableShuffleCheck()
Duel.ConfirmCards(select_tp,g)
a=true
end
local g=Group.CreateGroup()
local loc_self_f=VgF.True
local loc_op_f=VgF.True
if bit.band(loc_self,LOCATION_VZONE)>0 and bit.band(loc_self,LOCATION_RZONE)>0 then
loc_self=loc_self-LOCATION_VZONE-LOCATION_RZONE
if bit.band(loc_self,LOCATION_MZONE)==0 then
loc_self=loc_self+LOCATION_MZONE
Duel.ConfirmCards(select_tp, g)
a = true
end
local g = Group.CreateGroup()
local loc_self_f = VgF.True
local loc_op_f = VgF.True
if bit.band(loc_self, LOCATION_VZONE) > 0 and bit.band(loc_self, LOCATION_RZONE) > 0 then
loc_self = loc_self - LOCATION_VZONE - LOCATION_RZONE
if bit.band(loc_self, LOCATION_MZONE) == 0 then
loc_self = loc_self + LOCATION_MZONE
end
elseif bit.band(loc_self,LOCATION_VZONE)>0 then
loc_self=loc_self-LOCATION_VZONE
loc_self_f=VgF.VMonsterFilter
if bit.band(loc_self,LOCATION_MZONE)==0 then
loc_self=loc_self+LOCATION_MZONE
elseif bit.band(loc_self, LOCATION_VZONE) > 0 then
loc_self = loc_self - LOCATION_VZONE
loc_self_f = VgF.VMonsterFilter
if bit.band(loc_self, LOCATION_MZONE) == 0 then
loc_self = loc_self + LOCATION_MZONE
end
elseif bit.band(loc_self,LOCATION_RZONE)>0 then
loc_self=loc_self-LOCATION_RZONE
loc_self_f=VgF.RMonsterFilter
if bit.band(loc_self,LOCATION_MZONE)==0 then
loc_self=loc_self+LOCATION_MZONE
elseif bit.band(loc_self, LOCATION_RZONE) > 0 then
loc_self = loc_self - LOCATION_RZONE
loc_self_f = VgF.RMonsterFilter
if bit.band(loc_self, LOCATION_MZONE) == 0 then
loc_self = loc_self + LOCATION_MZONE
end
end
if bit.band(loc_op,LOCATION_VZONE)>0 and bit.band(loc_op,LOCATION_RZONE)>0 then
loc_op=loc_op-LOCATION_VZONE-LOCATION_RZONE
if bit.band(loc_op,LOCATION_MZONE)==0 then
loc_op=loc_op+LOCATION_MZONE
if bit.band(loc_op, LOCATION_VZONE) > 0 and bit.band(loc_op, LOCATION_RZONE) > 0 then
loc_op = loc_op - LOCATION_VZONE - LOCATION_RZONE
if bit.band(loc_op, LOCATION_MZONE) == 0 then
loc_op = loc_op + LOCATION_MZONE
end
elseif bit.band(loc_op,LOCATION_VZONE)>0 then
loc_op=loc_op-LOCATION_VZONE
loc_op_f=VgF.VMonsterFilter
if bit.band(loc_op,LOCATION_MZONE)==0 then
loc_op=loc_op+LOCATION_MZONE
elseif bit.band(loc_op, LOCATION_VZONE) > 0 then
loc_op = loc_op - LOCATION_VZONE
loc_op_f = VgF.VMonsterFilter
if bit.band(loc_op, LOCATION_MZONE) == 0 then
loc_op = loc_op + LOCATION_MZONE
end
elseif bit.band(loc_op,LOCATION_RZONE)>0 then
loc_op=loc_op-LOCATION_RZONE
loc_op_f=VgF.RMonsterFilter
if bit.band(loc_op,LOCATION_MZONE)==0 then
loc_op=loc_op+LOCATION_MZONE
elseif bit.band(loc_op, LOCATION_RZONE) > 0 then
loc_op = loc_op - LOCATION_RZONE
loc_op_f = VgF.RMonsterFilter
if bit.band(loc_op, LOCATION_MZONE) == 0 then
loc_op = loc_op + LOCATION_MZONE
end
end
if bit.band(loc_self,LOCATION_MZONE)>0 then
local g1=Duel.GetMatchingGroup(function (c)
if bit.band(loc_self, LOCATION_MZONE) > 0 then
local g1 = Duel.GetMatchingGroup(function (c)
return c:IsCanBeEffectTarget(e) and c:IsFaceup() and loc_self_f(c)
end,tp,LOCATION_MZONE,0,nil)
loc_self=loc_self-LOCATION_MZONE
if g1:GetCount()>0 then g:Merge(g1) end
end, tp, LOCATION_MZONE, 0, nil)
loc_self = loc_self - LOCATION_MZONE
if g1:GetCount() > 0 then g:Merge(g1) end
end
if bit.band(loc_op,LOCATION_MZONE)>0 then
local g1=Duel.GetMatchingGroup(function (c)
if bit.band(loc_op, LOCATION_MZONE) > 0 then
local g1 = Duel.GetMatchingGroup(function (c)
return c:IsCanBeEffectTarget(e) and c:IsFaceup() and loc_op_f(c)
end,tp,0,LOCATION_MZONE,nil)
loc_op=loc_op-LOCATION_MZONE
if g1:GetCount()>0 then g:Merge(g1) end
end
if bit.band(loc_self,LOCATION_OVERLAY)>0 then
local g1=VgF.GetVMonster(tp):GetOverlayGroup()
loc_self=loc_self-LOCATION_OVERLAY
if g1:GetCount()>0 then g:Merge(g1) end
end
if bit.band(loc_op,LOCATION_OVERLAY)>0 then
local g1=VgF.GetVMonster(1-tp):GetOverlayGroup()
loc_op=loc_op-LOCATION_OVERLAY
if g1:GetCount()>0 then g:Merge(g1) end
end
if loc_self>0 or loc_op>0 then
local g1=Duel.GetMatchingGroup(nil,tp,loc_self,loc_op,nil)
if g1:GetCount()>0 then g:Merge(g1) end
end
if g:GetCount()>0 then
Duel.Hint(HINT_SELECTMSG,select_tp,hintmsg)
if VgF.GetValueType(f)=="function" then
g=g:FilterSelect(select_tp,f,int_min,int_max,except_g,...)
end, tp, 0, LOCATION_MZONE, nil)
loc_op = loc_op - LOCATION_MZONE
if g1:GetCount() > 0 then g:Merge(g1) end
end
if bit.band(loc_self, LOCATION_OVERLAY) > 0 then
local g1 = VgF.GetVMonster(tp):GetOverlayGroup()
loc_self = loc_self - LOCATION_OVERLAY
if g1:GetCount() > 0 then g:Merge(g1) end
end
if bit.band(loc_op, LOCATION_OVERLAY) > 0 then
local g1 = VgF.GetVMonster(1 - tp):GetOverlayGroup()
loc_op = loc_op - LOCATION_OVERLAY
if g1:GetCount() > 0 then g:Merge(g1) end
end
if loc_self > 0 or loc_op > 0 then
local g1 = Duel.GetMatchingGroup(nil, tp, loc_self, loc_op, nil)
if g1:GetCount() > 0 then g:Merge(g1) end
end
if g:GetCount() > 0 then
Duel.Hint(HINT_SELECTMSG, select_tp, hintmsg)
if VgF.GetValueType(f) == "function" then
g = g:FilterSelect(select_tp, f, int_min, int_max, except_g, ...)
else
g=g:Select(select_tp,int_min,int_max,except_g)
g = g:Select(select_tp, int_min, int_max, except_g)
end
end
local cg=g:Filter(function (tc)
return not tc:IsLocation(LOCATION_DECK+LOCATION_HAND+LOCATION_EXTRA)
end,nil)
if cg:GetCount()>0 then
local cg = g:Filter(function (tc)
return not tc:IsLocation(LOCATION_DECK + LOCATION_HAND + LOCATION_EXTRA)
end, nil)
if cg:GetCount() > 0 then
Duel.HintSelection(cg)
Duel.SetTargetCard(cg)
end
if a then Duel.ShuffleDeck(select_tp) end
return g
end
function VgF.GetMatchingGroupCount(f,tp,loc_self,loc_op,except_g,...)
return VgF.GetMatchingGroup(f,tp,loc_self,loc_op,except_g,...):GetCount()
function VgF.GetMatchingGroupCount(f, tp, loc_self, loc_op, except_g, ...)
return VgF.GetMatchingGroup(f, tp, loc_self, loc_op, except_g, ...):GetCount()
end
function VgF.GetMatchingGroup(f,tp,loc_self,loc_op,except_g,...)
local loc_self_f=VgF.True
local loc_op_f=VgF.True
if bit.band(loc_self,LOCATION_VZONE)>0 and bit.band(loc_self,LOCATION_RZONE)>0 then
loc_self=loc_self-LOCATION_VZONE-LOCATION_RZONE
if bit.band(loc_self,LOCATION_MZONE)==0 then
loc_self=loc_self+LOCATION_MZONE
function VgF.GetMatchingGroup(f, tp, loc_self, loc_op, except_g, ...)
local loc_self_f = VgF.True
local loc_op_f = VgF.True
if bit.band(loc_self, LOCATION_VZONE) > 0 and bit.band(loc_self, LOCATION_RZONE) > 0 then
loc_self = loc_self - LOCATION_VZONE - LOCATION_RZONE
if bit.band(loc_self, LOCATION_MZONE) == 0 then
loc_self = loc_self + LOCATION_MZONE
end
elseif bit.band(loc_self,LOCATION_VZONE)>0 then
loc_self=loc_self-LOCATION_VZONE
loc_self_f=VgF.VMonsterFilter
if bit.band(loc_self,LOCATION_MZONE)==0 then
loc_self=loc_self+LOCATION_MZONE
elseif bit.band(loc_self, LOCATION_VZONE) > 0 then
loc_self = loc_self - LOCATION_VZONE
loc_self_f = VgF.VMonsterFilter
if bit.band(loc_self, LOCATION_MZONE) == 0 then
loc_self = loc_self + LOCATION_MZONE
end
elseif bit.band(loc_self,LOCATION_RZONE)>0 then
loc_self=loc_self-LOCATION_RZONE
loc_self_f=VgF.RMonsterFilter
if bit.band(loc_self,LOCATION_MZONE)==0 then
loc_self=loc_self+LOCATION_MZONE
elseif bit.band(loc_self, LOCATION_RZONE) > 0 then
loc_self = loc_self - LOCATION_RZONE
loc_self_f = VgF.RMonsterFilter
if bit.band(loc_self, LOCATION_MZONE) == 0 then
loc_self = loc_self + LOCATION_MZONE
end
end
if bit.band(loc_op,LOCATION_VZONE)>0 and bit.band(loc_op,LOCATION_RZONE)>0 then
loc_op=loc_op-LOCATION_VZONE-LOCATION_RZONE
if bit.band(loc_op,LOCATION_MZONE)==0 then
loc_op=loc_op+LOCATION_MZONE
if bit.band(loc_op, LOCATION_VZONE) > 0 and bit.band(loc_op, LOCATION_RZONE) > 0 then
loc_op = loc_op - LOCATION_VZONE - LOCATION_RZONE
if bit.band(loc_op, LOCATION_MZONE) == 0 then
loc_op = loc_op + LOCATION_MZONE
end
elseif bit.band(loc_op,LOCATION_VZONE)>0 then
loc_op=loc_op-LOCATION_VZONE
loc_op_f=VgF.VMonsterFilter
if bit.band(loc_op,LOCATION_MZONE)==0 then
loc_op=loc_op+LOCATION_MZONE
elseif bit.band(loc_op, LOCATION_VZONE) > 0 then
loc_op = loc_op - LOCATION_VZONE
loc_op_f = VgF.VMonsterFilter
if bit.band(loc_op, LOCATION_MZONE) == 0 then
loc_op = loc_op + LOCATION_MZONE
end
elseif bit.band(loc_op,LOCATION_RZONE)>0 then
loc_op=loc_op-LOCATION_RZONE
loc_op_f=VgF.RMonsterFilter
if bit.band(loc_op,LOCATION_MZONE)==0 then
loc_op=loc_op+LOCATION_MZONE
elseif bit.band(loc_op, LOCATION_RZONE) > 0 then
loc_op = loc_op - LOCATION_RZONE
loc_op_f = VgF.RMonsterFilter
if bit.band(loc_op, LOCATION_MZONE) == 0 then
loc_op = loc_op + LOCATION_MZONE
end
end
local g=Group.CreateGroup()
if bit.band(loc_self,LOCATION_MZONE)>0 then
local g1=Duel.GetMatchingGroup(function (c)
local g = Group.CreateGroup()
if bit.band(loc_self, LOCATION_MZONE) > 0 then
local g1 = Duel.GetMatchingGroup(function (c)
return c:IsFaceup() and loc_self_f(c)
end,tp,LOCATION_MZONE,0,nil)
loc_self=loc_self-LOCATION_MZONE
if g1:GetCount()>0 then g:Merge(g1) end
end, tp, LOCATION_MZONE, 0, nil)
loc_self = loc_self - LOCATION_MZONE
if g1:GetCount() > 0 then g:Merge(g1) end
end
if bit.band(loc_op,LOCATION_MZONE)>0 then
local g1=Duel.GetMatchingGroup(function (c)
if bit.band(loc_op, LOCATION_MZONE) > 0 then
local g1 = Duel.GetMatchingGroup(function (c)
return c:IsFaceup() and loc_op_f(c)
end,tp,0,LOCATION_MZONE,nil)
loc_op=loc_op-LOCATION_MZONE
if g1:GetCount()>0 then g:Merge(g1) end
end, tp, 0, LOCATION_MZONE, nil)
loc_op = loc_op - LOCATION_MZONE
if g1:GetCount() > 0 then g:Merge(g1) end
end
if bit.band(loc_self,LOCATION_OVERLAY)>0 then
local g1=VgF.GetVMonster(tp):GetOverlayGroup()
loc_self=loc_self-LOCATION_OVERLAY
if g1:GetCount()>0 then g:Merge(g1) end
if bit.band(loc_self, LOCATION_OVERLAY) > 0 then
local g1 = VgF.GetVMonster(tp):GetOverlayGroup()
loc_self = loc_self - LOCATION_OVERLAY
if g1:GetCount() > 0 then g:Merge(g1) end
end
if bit.band(loc_op,LOCATION_OVERLAY)>0 then
local g1=VgF.GetVMonster(1-tp):GetOverlayGroup()
loc_op=loc_op-LOCATION_OVERLAY
if g1:GetCount()>0 then g:Merge(g1) end
if bit.band(loc_op, LOCATION_OVERLAY) > 0 then
local g1 = VgF.GetVMonster(1 - tp):GetOverlayGroup()
loc_op = loc_op - LOCATION_OVERLAY
if g1:GetCount() > 0 then g:Merge(g1) end
end
if loc_self>0 or loc_op>0 then
local g1=Duel.GetMatchingGroup(nil,tp,loc_self,loc_op,nil)
if g1:GetCount()>0 then g:Merge(g1) end
if loc_self > 0 or loc_op > 0 then
local g1 = Duel.GetMatchingGroup(nil, tp, loc_self, loc_op, nil)
if g1:GetCount() > 0 then g:Merge(g1) end
end
if g:GetCount()>0 and VgF.GetValueType(f)=="function" then
g=g:Filter(f,except_g,...)
if g:GetCount() > 0 and VgF.GetValueType(f) == "function" then
g = g:Filter(f, except_g, ...)
end
return g
end
......@@ -1234,86 +1235,86 @@ end
---@param loc integer 要送去的区域。不填则返回0。
---@param sg Card|Group 要操作的卡|卡片组。
---@return number 具体操作的卡的数量
function VgF.Sendto(loc,sg,...)
local ext_params={...}
local function AddOverlayGroup(g,o_loc)
function VgF.Sendto(loc, sg, ...)
local ext_params = {...}
local function AddOverlayGroup(g, o_loc)
for tc in VgF.Next(g) do
if tc:GetOverlayCount()>0 then
local mg=tc:GetOverlayGroup()
VgF.Sendto(o_loc,mg,table.unpack(ext_params))
if tc:GetOverlayCount() > 0 then
local mg = tc:GetOverlayGroup()
VgF.Sendto(o_loc, mg, table.unpack(ext_params))
end
end
end
local g=nil
if VgF.GetValueType(sg)=="Group" and sg:GetCount()>0 then
g=Group.Clone(sg)
elseif VgF.GetValueType(sg)=="Card" then
g=Group.FromCards(sg)
local g = nil
if VgF.GetValueType(sg) == "Group" and sg:GetCount() > 0 then
g = Group.Clone(sg)
elseif VgF.GetValueType(sg) == "Card" then
g = Group.FromCards(sg)
else return 0
end
if loc==LOCATION_DROP then
AddOverlayGroup(g,LOCATION_DROP)
local return_val=0
if g:IsExists(Card.IsLocation,1,nil,LOCATION_HAND) then
local g2=g:Filter(Card.IsLocation,nil,LOCATION_HAND)
local reason=ext_params[1]
if VgF.GetValueType(reason)~="number" then reason=0 end
if bit.band(reason,REASON_DISCARD)==0 then reason=reason+REASON_DISCARD end
return_val=return_val+Duel.SendtoGrave(g2,reason)
if loc == LOCATION_DROP then
AddOverlayGroup(g, LOCATION_DROP)
local return_val = 0
if g:IsExists(Card.IsLocation, 1, nil, LOCATION_HAND) then
local g2 = g:Filter(Card.IsLocation, nil, LOCATION_HAND)
local reason = ext_params[1]
if VgF.GetValueType(reason) ~= "number" then reason = 0 end
if bit.band(reason, REASON_DISCARD) == 0 then reason = reason + REASON_DISCARD end
return_val = return_val + Duel.SendtoGrave(g2, reason)
g:Sub(g2)
end
return_val=return_val+Duel.SendtoGrave(g,...)
return_val = return_val + Duel.SendtoGrave(g, ...)
return return_val
elseif loc==LOCATION_DECK then
return Duel.SendtoDeck(g,...)
elseif loc==LOCATION_HAND then
local ct=Duel.SendtoHand(g,...)
local cg=Duel.GetOperatedGroup()
for tp=0,1 do
local confirm_group=cg:Filter(Card.IsControler,nil,tp)
if confirm_group:GetCount()>0 then
Duel.ConfirmCards(1-tp,confirm_group)
elseif loc == LOCATION_DECK then
return Duel.SendtoDeck(g, ...)
elseif loc == LOCATION_HAND then
local ct = Duel.SendtoHand(g, ...)
local cg = Duel.GetOperatedGroup()
for tp = 0, 1 do
local confirm_group = cg:Filter(Card.IsControler, nil, tp)
if confirm_group:GetCount() > 0 then
Duel.ConfirmCards(1 - tp, confirm_group)
Duel.ShuffleHand(tp)
end
end
return ct
elseif loc==LOCATION_REMOVED then
AddOverlayGroup(g,LOCATION_REMOVED)
return Duel.Remove(g,...)
elseif loc==LOCATION_EXILE then
AddOverlayGroup(g,LOCATION_EXILE)
return Duel.Exile(g,...)
elseif loc==LOCATION_OVERLAY then
AddOverlayGroup(g,LOCATION_OVERLAY)
local ct=0
if #ext_params>0 then
local c=ext_params[1]
Duel.Overlay(c,g)
ct=Duel.GetOperatedGroup():GetCount()
elseif loc == LOCATION_REMOVED then
AddOverlayGroup(g, LOCATION_REMOVED)
return Duel.Remove(g, ...)
elseif loc == LOCATION_EXILE then
AddOverlayGroup(g, LOCATION_EXILE)
return Duel.Exile(g, ...)
elseif loc == LOCATION_OVERLAY then
AddOverlayGroup(g, LOCATION_OVERLAY)
local ct = 0
if #ext_params > 0 then
local c = ext_params[1]
Duel.Overlay(c, g)
ct = Duel.GetOperatedGroup():GetCount()
else
for tp=0,1 do
local c=VgF.GetVMonster(tp)
local og=g:Filter(Card.IsControler,nil,tp)
if og:GetCount()>0 then
Duel.Overlay(c,og)
ct=ct+Duel.GetOperatedGroup():GetCount()
for tp = 0, 1 do
local c = VgF.GetVMonster(tp)
local og = g:Filter(Card.IsControler, nil, tp)
if og:GetCount() > 0 then
Duel.Overlay(c, og)
ct = ct + Duel.GetOperatedGroup():GetCount()
end
end
end
return ct
elseif loc==LOCATION_TRIGGER then
local ct=0
elseif loc == LOCATION_TRIGGER then
local ct = 0
for tc in VgF.Next(g) do
local tp=tc:GetControler()
if Duel.MoveToField(tc,tp,tp,loc,POS_FACEUP,true) then ct=ct+1 end
local tp = tc:GetControler()
if Duel.MoveToField(tc, tp, tp, loc, POS_FACEUP, true) then ct = ct + 1 end
end
return ct
elseif loc==LOCATION_MZONE then
return VgF.Call(g,table.unpack(ext_params))
elseif bit.band(loc,0xf800)>0 or loc==0 then
AddOverlayGroup(g,loc)
Duel.Sendto(g,ext_params[1],loc,ext_params[2],ext_params[3],ext_params[4])
local return_group=Duel.GetOperatedGroup()
elseif loc == LOCATION_MZONE then
return VgF.Call(g, table.unpack(ext_params))
elseif bit.band(loc, 0xf800) > 0 or loc == 0 then
AddOverlayGroup(g, loc)
Duel.Sendto(g, ext_params[1], loc, ext_params[2], ext_params[3], ext_params[4])
local return_group = Duel.GetOperatedGroup()
return return_group:GetCount()
end
return 0
......@@ -1321,95 +1322,95 @@ end
-- 白翼能力在你的封锁区中的卡只有奇数的等级的场合有效
function VgF.WhiteWing(e)
local tp=e:GetHandlerPlayer()
local a=vgf.IsExistingMatchingCard(function (c)
return c:GetLevel()%2==1
end,tp,LOCATION_REMOVED,0,1,nil)
local b=vgf.IsExistingMatchingCard(function (c)
return c:GetLevel()%2==0
end,tp,LOCATION_REMOVED,0,1,nil)
return (a and not b) or Duel.IsPlayerAffectedByEffect(tp,AFFECT_CODE_BOTH_WING)
local tp = e:GetHandlerPlayer()
local a = vgf.IsExistingMatchingCard(function (c)
return c:GetLevel()%2 == 1
end, tp, LOCATION_REMOVED, 0, 1, nil)
local b = vgf.IsExistingMatchingCard(function (c)
return c:GetLevel()%2 == 0
end, tp, LOCATION_REMOVED, 0, 1, nil)
return (a and not b) or Duel.IsPlayerAffectedByEffect(tp, AFFECT_CODE_BOTH_WING)
end
-- 黑翼能力在你的封锁区中的卡只有偶数的等级的场合有效
function VgF.DarkWing(e)
local tp=e:GetHandlerPlayer()
local a=vgf.IsExistingMatchingCard(function (c)
return c:GetLevel()%2==1
end,tp,LOCATION_REMOVED,0,1,nil)
local b=vgf.IsExistingMatchingCard(function (c)
return c:GetLevel()%2==0
end,tp,LOCATION_REMOVED,0,1,nil)
return (not a and b) or Duel.IsPlayerAffectedByEffect(tp,AFFECT_CODE_BOTH_WING)
local tp = e:GetHandlerPlayer()
local a = vgf.IsExistingMatchingCard(function (c)
return c:GetLevel()%2 == 1
end, tp, LOCATION_REMOVED, 0, 1, nil)
local b = vgf.IsExistingMatchingCard(function (c)
return c:GetLevel()%2 == 0
end, tp, LOCATION_REMOVED, 0, 1, nil)
return (not a and b) or Duel.IsPlayerAffectedByEffect(tp, AFFECT_CODE_BOTH_WING)
end
function VgF.AddRideMaterialSetCardCheck(c,m,...)
local cm=_G["c"..m]
cm.ride_material_setcard_chk={...}
function VgF.AddRideMaterialSetCardCheck(c, m, ...)
local cm = _G["c"..m]
cm.ride_material_setcard_chk = {...}
end
function VgF.AddRideMaterialCodeCheck(c,m,...)
local cm=_G["c"..m]
cm.ride_material_code_chk={...}
function VgF.AddRideMaterialCodeCheck(c, m, ...)
local cm = _G["c"..m]
cm.ride_material_code_chk = {...}
end
function VgF.AddRideMaterialSetCard(c,m,...)
local cm=_G["c"..m]
cm.ride_setcard={...}
function VgF.AddRideMaterialSetCard(c, m, ...)
local cm = _G["c"..m]
cm.ride_setcard = {...}
end
function VgF.AddRideMaterialCode(c,m,...)
local cm=_G["c"..m]
cm.ride_code={...}
function VgF.AddRideMaterialCode(c, m, ...)
local cm = _G["c"..m]
cm.ride_code = {...}
end
function VgF.AddMixCostGroupFrom(c,m,...)
local cm=_G["c"..m]
cm.cos_from={...}
function VgF.AddMixCostGroupFrom(c, m, ...)
local cm = _G["c"..m]
cm.cos_from = {...}
end
function VgF.AddMixCostGroupTo(c,m,...)
local cm=_G["c"..m]
cm.cos_to={...}
function VgF.AddMixCostGroupTo(c, m, ...)
local cm = _G["c"..m]
cm.cos_to = {...}
end
function VgF.AddMixCostGroupCountMin(c,m,...)
local cm=_G["c"..m]
cm.cos_val={...}
function VgF.AddMixCostGroupCountMin(c, m, ...)
local cm = _G["c"..m]
cm.cos_val = {...}
end
function VgF.AddMixCostGroupCountMax(c,m,...)
local cm=_G["c"..m]
cm.cos_val_max={...}
function VgF.AddMixCostGroupCountMax(c, m, ...)
local cm = _G["c"..m]
cm.cos_val_max = {...}
end
function VgF.AddMixCostGroupFilter(c,m,...)
local cm=_G["c"..m]
cm.cos_filter={...}
function VgF.AddMixCostGroupFilter(c, m, ...)
local cm = _G["c"..m]
cm.cos_filter = {...}
end
function VgF.AddEffectWhenTrigger(c,m,op,cost,con,tg,chk)
local cm=_G["c"..m]
cm.effect_when_trigger={op,cost,con,tg,chk}
function VgF.AddEffectWhenTrigger(c, m, op, cost, con, tg, chk)
local cm = _G["c"..m]
cm.effect_when_trigger = {op, cost, con, tg, chk}
end
function VgF.ShiftLocationFromString(str)
local loc=0
if str=="POSCHANGE" then return str end
for i=1,13 do
if str==LOCATION_LIST_STRING[i] then
loc=LOCATION_LIST[i]
local loc = 0
if str == "POSCHANGE" then return str end
for i = 1, 13 do
if str == LOCATION_LIST_STRING[i] then
loc = LOCATION_LIST[i]
break
end
end
return loc
end
function VgF.PlayerEffect(e,tp,eg,ep,ev,re,r,rp)
function VgF.PlayerEffect(e, tp, eg, ep, ev, re, r, rp)
return true
end
---检查func是否为nil或函数
function VgF.FunctionLegal(func,from,name)
if VgF.GetValueType(func)=="nil" or VgF.GetValueType(func)=="function" then return true end
if VgF.GetValueType(name)=="string" and (VgF.GetValueType(from)=="string" or VgF.GetValueType(from)=="number") then
Debug.Message("c"..from..".lua : VgD.EffectTypeTrigger param"..name.." is not function|nil")
function VgF.FunctionLegal(func, from, name)
if VgF.GetValueType(func) == "nil" or VgF.GetValueType(func) == "function" then return true end
if VgF.GetValueType(name) == "string" and (VgF.GetValueType(from) == "string" or VgF.GetValueType(from) == "number") then
Debug.Message("c"..from..".lua : VgD.EffectTypeTrigger param"..name.." is not function | nil")
end
return false
end
---检查card是否为卡片
function VgF.CardLegal(card,from,name)
if VgF.GetValueType(card)=="Card" then return true end
if VgF.GetValueType(name)=="string" and (VgF.GetValueType(from)=="string" or VgF.GetValueType(from)=="number") then
function VgF.CardLegal(card, from, name)
if VgF.GetValueType(card) == "Card" then return true end
if VgF.GetValueType(name) == "string" and (VgF.GetValueType(from) == "string" or VgF.GetValueType(from) == "number") then
Debug.Message("c"..from..".lua : VgD.EffectTypeTrigger param"..name.." is not card")
end
return false
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment