Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro
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
YGOPRO-520DIY
ygopro
Commits
4abefff8
Commit
4abefff8
authored
Jun 20, 2025
by
nanahira
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'patch-sum-param' of
https://github.com/mercury233/ygopro
into pre-20250620
parents
be62a36e
fefc9d5b
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
26 additions
and
24 deletions
+26
-24
gframe/client_field.cpp
gframe/client_field.cpp
+26
-24
No files found.
gframe/client_field.cpp
View file @
4abefff8
...
...
@@ -1148,6 +1148,14 @@ bool ClientField::ShowSelectSum(bool panelmode) {
}
return
false
;
}
static
void
get_sum_params
(
irr
::
u32
opParam
,
int
&
op1
,
int
&
op2
)
{
op1
=
opParam
&
0xffff
;
op2
=
(
opParam
>>
16
)
&
0xffff
;
if
(
op2
&
0x8000
)
{
op1
=
opParam
&
0x7fffffff
;
op2
=
0
;
}
}
bool
ClientField
::
CheckSelectSum
()
{
std
::
set
<
ClientCard
*>
selable
;
for
(
auto
sc
:
selectsum_all
)
{
...
...
@@ -1188,8 +1196,8 @@ bool ClientField::CheckSelectSum() {
int
mm
=
-
1
,
mx
=
-
1
,
max
=
0
,
sumc
=
0
;
bool
ret
=
false
;
for
(
auto
sc
:
selected_cards
)
{
int op1
= sc->opParam & 0xffff
;
int op2 = sc->opParam >> 16
;
int
op1
,
op2
;
get_sum_params
(
sc
->
opParam
,
op1
,
op2
)
;
int
opmin
=
(
op2
>
0
&&
op1
>
op2
)
?
op2
:
op1
;
int
opmax
=
op2
>
op1
?
op2
:
op1
;
if
(
mm
==
-
1
||
opmin
<
mm
)
...
...
@@ -1204,8 +1212,8 @@ bool ClientField::CheckSelectSum() {
if
(
select_sumval
<=
max
&&
select_sumval
>
max
-
mx
)
ret
=
true
;
for
(
auto
sc
:
selable
)
{
int op1
= sc->opParam & 0xffff
;
int op2 = sc->opParam >> 16
;
int
op1
,
op2
;
get_sum_params
(
sc
->
opParam
,
op1
,
op2
)
;
int
m
=
op1
;
int
sums
=
sumc
;
sums
+=
m
;
...
...
@@ -1274,8 +1282,8 @@ bool ClientField::CheckSelectTribute() {
bool
ClientField
::
check_min
(
const
std
::
set
<
ClientCard
*>&
left
,
std
::
set
<
ClientCard
*>::
const_iterator
index
,
int
min
,
int
max
)
{
if
(
index
==
left
.
end
())
return
false
;
int op1
= (*index)->opParam & 0xffff
;
int op2 = (*index)->opParam >> 16
;
int
op1
,
op2
;
get_sum_params
((
*
index
)
->
opParam
,
op1
,
op2
)
;
int
m
=
(
op2
>
0
&&
op1
>
op2
)
?
op2
:
op1
;
if
(
m
>=
min
&&
m
<=
max
)
return
true
;
...
...
@@ -1294,9 +1302,8 @@ bool ClientField::check_sel_sum_s(const std::set<ClientCard*>& left, int index,
check_sel_sum_t
(
left
,
acc
);
return
false
;
}
int l = selected_cards[index]->opParam;
int l1 = l & 0xffff;
int l2 = l >> 16;
int
l1
,
l2
;
get_sum_params
(
selected_cards
[
index
]
->
opParam
,
l1
,
l2
);
bool
res1
=
false
,
res2
=
false
;
res1
=
check_sel_sum_s
(
left
,
index
+
1
,
acc
-
l1
);
if
(
l2
>
0
)
...
...
@@ -1310,9 +1317,8 @@ void ClientField::check_sel_sum_t(const std::set<ClientCard*>& left, int acc) {
continue
;
std
::
set
<
ClientCard
*>
testlist
(
left
);
testlist
.
erase
(
*
sit
);
int l = (*sit)->opParam;
int l1 = l & 0xffff;
int l2 = l >> 16;
int
l1
,
l2
;
get_sum_params
((
*
sit
)
->
opParam
,
l1
,
l2
);
if
(
check_sum
(
testlist
.
begin
(),
testlist
.
end
(),
acc
-
l1
,
count
)
||
(
l2
>
0
&&
check_sum
(
testlist
.
begin
(),
testlist
.
end
(),
acc
-
l2
,
count
)))
{
selectsum_cards
.
insert
(
*
sit
);
...
...
@@ -1324,9 +1330,8 @@ bool ClientField::check_sum(std::set<ClientCard*>::const_iterator index, std::se
return
count
>=
select_min
&&
count
<=
select_max
;
if
(
acc
<
0
||
index
==
end
)
return
false
;
int l = (*index)->opParam;
int l1 = l & 0xffff;
int l2 = l >> 16;
int
l1
,
l2
;
get_sum_params
((
*
index
)
->
opParam
,
l1
,
l2
);
if
((
l1
==
acc
||
(
l2
>
0
&&
l2
==
acc
))
&&
(
count
+
1
>=
select_min
)
&&
(
count
+
1
<=
select_max
))
return
true
;
++
index
;
...
...
@@ -1341,9 +1346,8 @@ bool ClientField::check_sel_sum_trib_s(const std::set<ClientCard*>& left, int in
check_sel_sum_trib_t
(
left
,
acc
);
return
acc
>=
select_min
&&
acc
<=
select_max
;
}
int l = selected_cards[index]->opParam;
int l1 = l & 0xffff;
int l2 = l >> 16;
int
l1
,
l2
;
get_sum_params
(
selected_cards
[
index
]
->
opParam
,
l1
,
l2
);
bool
res1
=
false
,
res2
=
false
;
res1
=
check_sel_sum_trib_s
(
left
,
index
+
1
,
acc
+
l1
);
if
(
l2
>
0
)
...
...
@@ -1356,9 +1360,8 @@ void ClientField::check_sel_sum_trib_t(const std::set<ClientCard*>& left, int ac
continue
;
std
::
set
<
ClientCard
*>
testlist
(
left
);
testlist
.
erase
(
*
sit
);
int l = (*sit)->opParam;
int l1 = l & 0xffff;
int l2 = l >> 16;
int
l1
,
l2
;
get_sum_params
((
*
sit
)
->
opParam
,
l1
,
l2
);
if
(
check_sum_trib
(
testlist
.
begin
(),
testlist
.
end
(),
acc
+
l1
)
||
(
l2
>
0
&&
check_sum_trib
(
testlist
.
begin
(),
testlist
.
end
(),
acc
+
l2
)))
{
selectsum_cards
.
insert
(
*
sit
);
...
...
@@ -1370,9 +1373,8 @@ bool ClientField::check_sum_trib(std::set<ClientCard*>::const_iterator index, st
return
true
;
if
(
acc
>
select_max
||
index
==
end
)
return
false
;
int l = (*index)->opParam;
int l1 = l & 0xffff;
int l2 = l >> 16;
int
l1
,
l2
;
get_sum_params
((
*
index
)
->
opParam
,
l1
,
l2
);
if
((
acc
+
l1
>=
select_min
&&
acc
+
l1
<=
select_max
)
||
(
acc
+
l2
>=
select_min
&&
acc
+
l2
<=
select_max
))
return
true
;
++
index
;
...
...
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