Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro-scripts-888
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
3
Merge Requests
3
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
MyCard
ygopro-scripts-888
Commits
849699be
Commit
849699be
authored
Jul 13, 2025
by
Vury Leo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add 接触するG
parent
7f4361f2
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
63 additions
and
16 deletions
+63
-16
procedure.lua
procedure.lua
+63
-16
No files found.
procedure.lua
View file @
849699be
...
...
@@ -3468,9 +3468,8 @@ function Fusion.AddFusionProcedure(c, opts)
e
:
SetType
(
EFFECT_TYPE_SINGLE
)
e
:
SetProperty
(
EFFECT_FLAG_CANNOT_DISABLE
+
EFFECT_FLAG_UNCOPYABLE
)
e
:
SetCode
(
EFFECT_FUSION_MATERIAL
)
e
:
SetCondition
(
Fusion
.
MultiCondition
(
c
,
patterns
,
true
))
e
:
SetOperation
(
Fusion
.
MultiOperation
(
c
,
patterns
))
e
:
SetCondition
(
Fusion
.
SeededCondition
(
c
,
patterns
))
e
:
SetOperation
(
Fusion
.
SeededOperation
(
c
,
patterns
))
e
:
SetDescription
(
1379
)
c
:
RegisterEffect
(
e
)
end
...
...
@@ -3727,7 +3726,7 @@ function Fusion.FusionCondition(tc,slots,mat_filter,fgoalcheck,allow_extras,sele
end
-- ensure there's at least one free Monster Zone if chkf requests a field-checked summon
if
chkf
~=
PLAYER_NONE
then
if
chkf
&
0xf
~=
PLAYER_NONE
then
local
tp
=
chkf
&
0xf
if
Duel
.
GetLocationCountFromEx
(
tp
,
tp
,
mg
,
tc
)
<=
0
then
return
false
...
...
@@ -3856,6 +3855,10 @@ end
--- @param tc Card the fusion monster (for substitutes)
--- @return table[] an array of mapping tables (or empty if none)
function
Fusion
.
FindAllMappings
(
cards_sel
,
slots
,
tc
)
--- empty selection, just return
if
#
cards_sel
==
0
then
return
{{}}
end
-- Trackers
local
filled
=
{}
-- for single slots
local
group_assigned
=
{}
-- how many cards assigned so far to each group slot
...
...
@@ -4140,12 +4143,12 @@ function Fusion.CanCompleteFromMappings(e,sel,eg,slots,mat_filter,fgoalcheck,tc,
local
prev
=
new_filter
new_filter
=
function
(
mc
,
p_tc
)
-- original criteria
if
prev
and
not
prev
(
mc
,
p_
tc
)
then
if
prev
and
not
prev
(
mc
,
tc
)
then
return
false
end
-- for each fn in has_same, check against the precomputed overlap
for
fn
,
overlap
in
pairs
(
used_overlap
)
do
local
v
=
fn
(
mc
,
p_
tc
)
local
v
=
fn
(
mc
,
tc
)
if
type
(
overlap
)
==
"number"
then
-- bitmask path
if
(
overlap
&
v
)
==
0
then
...
...
@@ -4214,7 +4217,7 @@ end
--- Fusion.UniqueByMatching(key_func, min_needed)
--- Returns a predicate that succeeds iff you can choose `min_needed`
--- distinct keys (from `key_func(
t
c)` lists) for some subset of cards in `g`.
--- distinct keys (from `key_func(
m
c)` lists) for some subset of cards in `g`.
--- Uses bipartite matching to test existence of a distinct‐key assignment.
--- @param key_func fun(Card): any[] returns all keys a card can take
--- @param min_needed number how many cards must get distinct keys
...
...
@@ -4227,9 +4230,9 @@ function Fusion.UniqueByMatching(key_func,min_needed)
local
key_index
=
{}
-- key_index[key] = unique integer ID
local
next_key_id
=
0
for
idx
,
t
c
in
ipairs
(
cards
)
do
for
idx
,
m
c
in
ipairs
(
cards
)
do
card_keys
[
idx
]
=
{}
for
_
,
key
in
ipairs
(
key_func
(
t
c
))
do
for
_
,
key
in
ipairs
(
key_func
(
m
c
))
do
local
id
=
key_index
[
key
]
if
not
id
then
next_key_id
=
next_key_id
+
1
...
...
@@ -4285,9 +4288,9 @@ end
--- @return table used_keys
function
Fusion
.
ExtractUsedKeys
(
cards_sel
,
mapping
,
slot_idx
,
key_func
)
local
used
=
{}
for
idx
,
t
c
in
ipairs
(
cards_sel
)
do
for
idx
,
m
c
in
ipairs
(
cards_sel
)
do
if
mapping
[
idx
]
==
slot_idx
then
for
_
,
k
in
ipairs
(
key_func
(
t
c
))
do
for
_
,
k
in
ipairs
(
key_func
(
m
c
))
do
used
[
k
]
=
true
end
end
...
...
@@ -4340,7 +4343,7 @@ end
-- Helper: combine multiple patterns into one condition function (no goto)
function
Fusion
.
MultiCondition
(
tc
,
patterns
,
allow_extras
)
return
function
(
e
,
g
,
gc
,
chkf
)
return
function
(
e
,
g
,
gc
,
chkf
,
selected
)
if
not
g
then
return
false
end
local
locked
=
Fusion
.
LockedCodes
for
_
,
pat
in
ipairs
(
patterns
)
do
...
...
@@ -4355,7 +4358,7 @@ function Fusion.MultiCondition(tc,patterns,allow_extras)
end
end
if
ok
then
local
cond
=
Fusion
.
FusionCondition
(
tc
,
pat
.
slots
,
pat
.
mat_filter
,
pat
.
fgoalcheck
,
allow_extras
)
local
cond
=
Fusion
.
FusionCondition
(
tc
,
pat
.
slots
,
pat
.
mat_filter
,
pat
.
fgoalcheck
,
allow_extras
,
selected
)
if
cond
(
e
,
g
,
gc
,
chkf
)
then
return
true
end
...
...
@@ -4388,7 +4391,7 @@ end
-- Helper: combine patterns into one operation function
function
Fusion
.
MultiOperation
(
tc
,
patterns
)
return
function
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
gc
,
chkf
)
return
function
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
gc
,
chkf
,
selected
)
-- filter patterns by any locked codes, once per operation
local
locked
=
Fusion
.
LockedCodes
local
active_patterns
=
{}
...
...
@@ -4416,7 +4419,7 @@ function Fusion.MultiOperation(tc,patterns)
local
strict_cond
=
Fusion
.
MultiCondition
(
tc
,
active_patterns
,
false
)
Duel
.
Hint
(
HINT_SELECTMSG
,
tp
,
HINTMSG_FMATERIAL
)
local
sg
=
Group
.
CreateGroup
()
local
sg
=
selected
and
selected
:
Clone
()
or
Group
.
CreateGroup
()
--- arraify eg
local
eg_arr
=
{}
...
...
@@ -4459,7 +4462,11 @@ function Fusion.MultiOperation(tc,patterns)
end
if
sg
:
IsContains
(
picked
)
then
sg
:
RemoveCard
(
picked
)
-- If EFFECT_MUST_BE_FMATERIAL is on your field, ensure it's in selected
local
must_materials
=
Duel
.
GetMustMaterial
(
tp
,
EFFECT_MUST_BE_FMATERIAL
)
if
picked
~=
gc
and
not
must_materials
:
IsContains
(
picked
)
then
sg
:
RemoveCard
(
picked
)
end
else
sg
:
AddCard
(
picked
)
end
...
...
@@ -4481,3 +4488,43 @@ function Fusion.PatternIncludesCode(pat,code)
end
return
false
end
--- A “seeded” condition that first tries CanCompleteFromMappings on each pattern,
--- then, if none complete, falls back to the strict DFS.
--- @param tc Card
--- @param patterns table[]
function
Fusion
.
SeededCondition
(
tc
,
patterns
)
return
function
(
e
,
g
,
gc
,
chkf
)
if
not
g
then
return
false
end
-- build your seed group
local
selected
=
Group
.
CreateGroup
()
if
gc
then
selected
:
AddCard
(
gc
)
end
-- merge in any EFFECT_MUST_BE_FMATERIAL on your field
local
must_materials
=
Duel
.
GetMustMaterial
(
e
:
GetHandler
():
GetOwner
(),
EFFECT_MUST_BE_FMATERIAL
)
selected
:
Merge
(
must_materials
)
-- attempt “search mode” on each pattern
for
_
,
pat
in
ipairs
(
patterns
)
do
if
Fusion
.
CanCompleteFromMappings
(
e
,
selected
,
g
,
pat
.
slots
,
pat
.
mat_filter
,
pat
.
fgoalcheck
or
aux
.
TRUE
,
tc
,
gc
,
chkf
)
then
return
true
end
end
end
end
function
Fusion
.
SeededOperation
(
c
,
patterns
)
return
function
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
gc
,
chkf
)
-- build selected = {gc}
local
selected
=
Group
.
CreateGroup
()
if
gc
then
selected
:
AddCard
(
gc
)
end
-- If EFFECT_MUST_BE_FMATERIAL is on your field, ensure it's in selected
local
must_materials
=
Duel
.
GetMustMaterial
(
tp
,
EFFECT_MUST_BE_FMATERIAL
)
selected
:
Merge
(
must_materials
)
-- call the original op, swapping in selected for gc
return
Fusion
.
MultiOperation
(
c
,
patterns
)(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
gc
,
chkf
,
selected
)
end
end
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