Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
V
Vgdpro Scripts
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xiaoye
Vgdpro Scripts
Commits
51255a0f
Commit
51255a0f
authored
Nov 11, 2024
by
xiaoye
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更改运算符间距
parent
b0c5ee2a
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
2464 additions
and
2462 deletions
+2464
-2462
VgD.Lua
VgD.Lua
+899
-898
VgDefinition.Lua
VgDefinition.Lua
+817
-817
VgFuncLib.lua
VgFuncLib.lua
+748
-747
No files found.
VgD.Lua
View file @
51255a0f
This source diff could not be displayed because it is too large. You can
view the blob
instead.
VgDefinition.Lua
View file @
51255a0f
...
...
@@ -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
...
...
VgFuncLib.lua
View file @
51255a0f
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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment