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
f3a310a8
Commit
f3a310a8
authored
Apr 14, 2024
by
jwyxym
Committed by
GitHub
Apr 14, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add files via upload
parent
a0d448d4
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
75 additions
and
123 deletions
+75
-123
VgD.Lua
VgD.Lua
+44
-121
VgDefinition.Lua
VgDefinition.Lua
+2
-1
VgFuncLib.lua
VgFuncLib.lua
+29
-1
No files found.
VgD.Lua
View file @
f3a310a8
...
...
@@ -427,7 +427,9 @@ function VgD.SupportValue(e)
elseif
Duel
.
GetAttackTarget
()
==
e
:
GetHandler
()
then
local
g
=
Duel
.
GetMatchingGroup
(
nil
,
tp
,
LOCATION_GZONE
,
0
,
nil
)
for
tc
in
vgf
.
Next
(
g
)
do
atk
=
atk
+
tc
:
GetDefense
()
local
def
=
tc
:
GetDefense
()
if
def
<
0
then
def
=
0
end
atk
=
atk
+
def
end
return
atk
else
...
...
@@ -719,135 +721,56 @@ function VgD.RuelDrawOperation(e,tp,eg,ep,ev,re,r,rp)
end
--指令卡
function
VgD
.
SpellActivate
(
c
,
m
,
op
,
con
,
specialchk
,
num1
,
num2
,
num3
,
num4
,
num5
)
if
not
specialchk
then
specialchk
=
0
end
if
not
num1
then
num1
=
0
end
if
not
num2
then
num2
=
0
end
if
not
num3
then
num3
=
0
end
if
not
num4
then
num4
=
0
end
if
not
num5
then
num5
=
0
end
VgD
.
SpellCostCategory
(
m
,
specialchk
,
num1
,
num2
,
num3
,
num4
,
num5
)
function
VgD
.
SpellActivate
(
c
,
m
,
op
,
con
,
cost
)
local
e1
=
Effect
.
CreateEffect
(
c
)
e1
:
SetType
(
EFFECT_TYPE_ACTIVATE
)
e1
:
SetCode
(
EVENT_FREE_CHAIN
)
e1
:
SetCountLimit
(
1
,
VgID
+
EFFECT_COUNT_CODE_OATH
)
e1
:
SetCost
(
VgD
.
SpellCost
(
num1
,
num2
,
num3
,
num4
,
num5
))
e1
:
SetCost
(
VgD
.
MixCost
(
cost
))
e1
:
SetCondition
(
VgD
.
SpellCondtion
(
con
))
e1
:
SetOperation
(
VgD
.
SpellOperation
(
op
))
c
:
RegisterEffect
(
e1
)
end
function
VgD
.
SpellCost
(
num1
,
num2
,
num3
,
num4
,
num5
)
return
function
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
chk
)
local
c
=
e
:
GetHandler
()
local
mg
=
Group
.
FromCards
(
c
)
local
g
if
chk
==
0
then
local
b1
,
b2
,
b3
,
b4
,
b5
=
true
,
true
,
true
,
true
,
true
local
b6
=
false
if
c
.
Vg_SpecialCost
>
0
then
g
=
VgD
.
SpellSpecialChk
(
c
,
mg
)
else
g
=
mg
end
if
g
:
GetCount
()
>
0
or
c
.
Vg_SpecialCost
==
0
then
if
g
then
mg
:
Merge
(
g
)
end
b6
=
true
function
VgF
.
MixFilter
(
mg
,
cf
,
cval
,
bf
,
bmin
,
bmax
,
bval
)
return
function
(
g
)
if
cf
and
not
cf
(
g
,
table.unpack
(
cval
))
then
return
false
end
return
not
bf
or
(
mg
-
g
):
CheckSubGroup
(
bf
,
bmin
,
bmax
,
table.unpack
(
bval
))
end
end
function
VgD
.
MixCostFilter
(
c
,
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
mc
)
if
Duel
.
IsPlayerAffectedByEffect
(
tp
,
AFFECT_CODE_MIX_DIFFERENT_NAME
)
and
c
:
IsCode
(
mc
:
GetCode
())
then
return
false
end
local
ce
=
c
:
GetActivateEffect
()
if
not
ce
or
(
ce
:
GetCost
()
and
not
ce
:
GetCost
()(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
0
))
then
return
false
end
local
cg
,
cval
=
mc
.
cos_g
,
mc
.
cos_val
local
bg
,
bval
=
c
.
cos_g
,
c
.
cos_val
if
not
(
cg
and
bg
and
cval
and
bval
)
then
return
1
end
local
mg
=
cg
+
bg
local
cf
=
table.remove
(
cval
,
1
)
local
min
=
table.remove
(
cval
,
1
)
local
max
=
table.remove
(
cval
,
1
)
local
bf
=
table.remove
(
bval
,
1
)
local
bmin
=
table.remove
(
bval
,
1
)
local
bmax
=
table.remove
(
bval
,
1
)
local
mix_f
=
VgF
.
MixFilter
(
mg
,
cf
,
cval
,
bf
,
bmin
,
bmax
,
bval
)
return
mg
:
CheckSubGroup
(
mix_f
,
min
,
max
)
and
c
:
IsAbleToRemoveAsCost
()
and
VgF
.
LvCondition
(
c
)
end
function
VgD
.
MixCost
(
cost
)
return
function
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
chk
,
bool
)
local
c
=
e
:
GetHandler
()
if
chk
==
0
then
return
VgF
.
GetValueType
(
cost
)
~=
"function"
or
cost
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
0
)
end
if
not
bool
and
(
Duel
.
IsPlayerAffectedByEffect
(
tp
,
AFFECT_CODE_MIX
)
and
Duel
.
IsExistingMatchingCard
(
VgD
.
MixCostFilter
,
tp
,
LOCATION_GRAVE
,
0
,
1
,
nil
,
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
c
)
and
Duel
.
SelectYesNo
(
tp
,
VgF
.
Stringid
(
VgID
,
6
)))
then
local
bc
=
Duel
.
SelectMatchingCard
(
tp
,
VgD
.
MixCostFilter
,
tp
,
LOCATION_GRAVE
,
0
,
1
,
1
,
nil
,
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
c
):
GetFirst
()
if
cost
then
cost
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
)
end
if
bc
then
Duel
.
Remove
(
bc
,
POS_FACEUP
,
REASON_COST
)
e
:
SetLabelObject
(
bc
)
local
bce
=
bc
:
GetActivateEffect
()
if
bce
and
bce
:
GetCost
()
then
bce
:
GetCost
()(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
1
,
true
)
end
end
if
num1
>
0
then
b1
=
Duel
.
IsExistingMatchingCard
(
Card
.
IsDiscardable
,
tp
,
LOCATION_HAND
,
0
,
num1
,
mg
)
end
if
num2
>
0
then
b2
=
Duel
.
IsExistingMatchingCard
(
Card
.
IsCode
,
tp
,
LOCATION_EMBLEM
,
0
,
num2
,
nil
,
20401001
)
end
if
num3
>
0
then
b3
=
Duel
.
GetMatchingGroup
(
VgF
.
VMonsterFilter
,
tp
,
LOCATION_MZONE
,
0
,
nil
,
mg
):
GetFirst
():
GetOverlayGroup
():
FilterCount
(
VgF
.
True
,
mg
)
>=
num3
end
if
num4
>
0
then
b4
=
Duel
.
GetFieldGroupCount
(
tp
,
LOCATION_DECK
,
0
)
>=
num4
end
if
num5
>
0
then
b5
=
Duel
.
IsExistingMatchingCard
(
Card
.
IsFaceup
,
tp
,
LOCATION_DAMAGE
,
0
,
num5
,
mg
)
end
return
b1
and
b2
and
b3
and
b4
and
b5
and
b6
end
local
rc
=
nil
if
Duel
.
IsPlayerAffectedByEffect
(
tp
,
AFFECT_CODE_MIX
)
and
Duel
.
IsExistingMatchingCard
(
VgD
.
SpellMixFilter
,
tp
,
LOCATION_DROP
,
0
,
1
,
nil
,
c
,
num1
,
num2
,
num3
,
num4
,
num5
)
and
Duel
.
SelectYesNo
(
tp
,
VgF
.
Stringid
(
VgID
,
6
))
then
rc
=
Duel
.
SelectMatchingCard
(
tp
,
VgD
.
SpellMixFilter
,
tp
,
LOCATION_DROP
,
0
,
1
,
1
,
nil
,
c
,
num1
,
num2
,
num3
,
num4
,
num5
):
GetFirst
()
end
VgD
.
SpellCostOp
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
chk
,
c
,
rc
,
num1
,
num2
,
num3
,
num4
,
num5
)
end
end
function
VgD
.
SpellCostCategory
(
m
,
specialchk
,
num1
,
num2
,
num3
,
num4
,
num5
)
local
cm
=
_G
[
"c"
..
m
]
cm
.
Vg_SpecialCost
=
specialchk
cm
.
Vg_DisCard
=
num1
cm
.
Vg_Energe
=
num2
cm
.
Vg_OverLay
=
num3
cm
.
Vg_OverLayFill
=
num4
cm
.
Vg_Damage
=
num5
end
function
VgD
.
SpellMixFilter
(
c
,
mc
,
num1
,
num2
,
num3
,
num4
,
num5
)
local
mg
=
Group
.
FromCards
(
c
,
mc
)
local
tp
=
c
:
GetControler
()
local
b1
,
b2
,
b3
,
b4
,
b5
=
true
,
true
,
true
,
true
,
true
local
b6
,
b7
=
false
,
false
local
g1
=
Group
.
CreateGroup
()
local
g2
=
Group
.
CreateGroup
()
if
c
.
Vg_DisCard
>
0
then
num1
=
num1
+
c
.
Vg_DisCard
end
if
c
.
Vg_Energe
>
0
then
num2
=
num2
+
c
.
Vg_Energe
end
if
c
.
Vg_OverLay
>
0
then
num3
=
num3
+
c
.
Vg_OverLay
end
if
c
.
Vg_OverLayFill
>
0
then
num4
=
num4
+
c
.
Vg_OverLayFill
end
if
c
.
Vg_Damage
>
0
then
num5
=
num5
+
c
.
Vg_Damage
end
if
c
.
Vg_SpecialCost
>
0
then
g1
=
VgD
.
SpellSpecialChk
(
c
,
mg
)
end
if
g1
:
GetCount
()
>
0
or
c
.
Vg_SpecialCost
==
0
then
if
g1
then
mg
:
Merge
(
g1
)
end
b6
=
true
end
if
mc
.
Vg_SpecialCost
>
0
then
g2
=
VgD
.
SpellSpecialChk
(
c
,
mg
)
end
if
g2
:
GetCount
()
>
0
or
mc
.
Vg_SpecialCost
==
0
then
if
g2
then
mg
:
Merge
(
g2
)
end
b7
=
true
end
if
num1
>
0
then
b1
=
Duel
.
IsExistingMatchingCard
(
Card
.
IsDiscardable
,
tp
,
LOCATION_HAND
,
0
,
num1
,
mg
)
end
if
num2
>
0
then
b2
=
Duel
.
IsExistingMatchingCard
(
Card
.
IsCode
,
tp
,
LOCATION_EMBLEM
,
0
,
num2
,
nil
,
20401001
)
end
if
num3
>
0
then
b3
=
Duel
.
GetMatchingGroup
(
VgF
.
VMonsterFilter
,
tp
,
LOCATION_MZONE
,
0
,
nil
,
mg
):
GetFirst
():
GetOverlayGroup
():
FilterCount
(
Card
.
IsAbleToGraveAsCost
,
mg
)
>=
num3
end
if
num4
>
0
then
b4
=
Duel
.
GetFieldGroupCount
(
tp
,
LOCATION_DECK
,
0
)
>=
num4
end
if
num5
>
0
then
b5
=
Duel
.
IsExistingMatchingCard
(
Card
.
IsFaceup
,
tp
,
LOCATION_DAMAGE
,
0
,
num5
,
mg
)
end
return
b1
and
b2
and
b3
and
b4
and
b5
and
b6
and
b7
end
function
VgD
.
SpellSpecialChk
(
c
,
mg
)
local
t
=
{}
local
g
for
i
,
v
in
ipairs
(
t
)
do
if
c
.
Vg_SpecialCost
==
v
then
local
a
end
end
return
mg
end
function
VgD
.
SpellCostOp
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
chk
,
c
,
mc
,
num1
,
num2
,
num3
,
num4
,
num5
)
local
mg
=
Group
.
FromCards
(
c
)
if
mc
then
Duel
.
Remove
(
mc
,
POS_FACEUP
,
REASON_COST
)
e
:
SetLabelObject
(
mc
)
mg
:
AddCard
(
mc
)
if
mc
.
Vg_DisCard
>
0
then
num1
=
num1
+
mc
.
Vg_DisCard
end
if
mc
.
Vg_Energe
>
0
then
num2
=
num2
+
mc
.
Vg_Energe
end
if
mc
.
Vg_OverLay
>
0
then
num3
=
num3
+
mc
.
Vg_OverLay
end
if
mc
.
Vg_OverLayFill
>
0
then
num4
=
num4
+
mc
.
Vg_OverLayFill
end
if
mc
.
Vg_Damage
>
0
then
num5
=
num5
+
mc
.
Vg_Damage
end
end
if
num1
>
0
then
Duel
.
Hint
(
HINT_SELECTMSG
,
tp
,
HINTMSG_DISCARD
)
local
g
=
Duel
.
SelectMatchingCard
(
tp
,
Card
.
IsDiscardable
,
tp
,
LOCATION_HAND
,
0
,
num1
,
num1
,
mg
)
Duel
.
SendtoGrave
(
g
,
REASON_COST
+
REASON_DISCARD
)
end
if
num2
>
0
then
local
g
=
Duel
.
SelectMatchingCard
(
tp
,
Card
.
IsCode
,
tp
,
LOCATION_EMBLEM
,
0
,
num2
,
num2
,
nil
,
10800730
)
Duel
.
Sendto
(
g
,
tp
,
LOCATION_EMBLEM
,
POS_FACEUP
,
REASON_COST
)
end
if
num3
>
0
then
local
g
=
Duel
.
GetMatchingGroup
(
VgF
.
VMonsterFilter
,
tp
,
LOCATION_MZONE
,
0
,
nil
):
GetFirst
():
GetOverlayGroup
():
FilterSelect
(
tp
,
Card
.
IsAbleToGraveAsCost
,
num3
,
num3
,
mg
)
Duel
.
SendtoGrave
(
g
,
REASON_COST
)
end
if
num4
>
0
then
local
rc
=
Duel
.
GetMatchingGroup
(
VgF
.
VMonsterFilter
,
tp
,
LOCATION_MZONE
,
0
,
nil
):
GetFirst
()
local
g
=
Duel
.
GetDecktopGroup
(
tp
,
num4
)
Duel
.
DisableShuffleCheck
()
Duel
.
Overlay
(
rc
,
g
)
end
if
num5
>
0
then
Duel
.
Hint
(
HINT_SELECTMSG
,
tp
,
HINTMSG_DAMAGE
)
local
g
=
Duel
.
SelectMatchingCard
(
tp
,
Card
.
IsFaceup
,
tp
,
LOCATION_DAMAGE
,
0
,
num5
,
num5
,
mg
)
Duel
.
ChangePosition
(
g
,
POS_FACEDOWN
)
end
else
if
cost
then
cost
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
)
end
end
end
end
function
VgD
.
SpellCondtion
(
con
)
return
function
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
)
...
...
VgDefinition.Lua
View file @
f3a310a8
...
...
@@ -886,7 +886,8 @@ SupportFlag =VgID+5 --支援状态标识
AttackAtRearFlag
=
VgID
+
6
--后列攻击
--AffectedByEffect
AFFECT_CODE_MIX
=
VgID
--魔合成
AFFECT_CODE_SENDTOG
=
VgID
+
1
--
AFFECT_CODE_MIX_DIFFERENT_NAME
=
VgID
+
1
--魔合成(卡名不同)
AFFECT_CODE_SENDTOG
=
VgID
+
2
--需要两张卡才能防御
--自定时点
EVENT_TRIGGER
=
VgID
--判定时点
EVENT_CRITICAL_STRIKE
=
VgID
+
1
--暴击值结算时点
...
...
VgFuncLib.lua
View file @
f3a310a8
...
...
@@ -208,7 +208,7 @@ function VgF.Call(g,sumtype,sp,zone)
end
local
sg
local
z
=
0xe0
if
vgf
.
GetValueType
(
g
)
==
"Card"
then
sg
=
Group
.
FromCards
(
g
)
else
sg
=
Group
.
Clone
(
g
)
end
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
()
...
...
@@ -383,3 +383,31 @@ function VgF.SearchCardSpecialSummon(loc,f)
end
end
end
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
=
{
...
}
-- selected group
local
sg
=
Group
.
CreateGroup
()
-- be select group
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
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
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
)
end
sg
=
sg
-
c
return
res
end
\ No newline at end of file
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