Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro-core
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
nanahira
ygopro-core
Commits
1db16596
Commit
1db16596
authored
Apr 10, 2017
by
VanillaSalt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add EFFECT_TUNER_MATERIAL_LIMIT
parent
ff62da1f
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
222 additions
and
144 deletions
+222
-144
effect.h
effect.h
+1
-0
field.cpp
field.cpp
+170
-124
operations.cpp
operations.cpp
+51
-20
No files found.
effect.h
View file @
1db16596
...
...
@@ -415,6 +415,7 @@ inline effect_flag operator|(effect_flag flag1, effect_flag flag2)
//#define EFFECT_REMOVE_FUSION_ATTRIBUTE 350
#define EFFECT_CHANGE_FUSION_ATTRIBUTE 351
#define EFFECT_EXTRA_FUSION_MATERIAL 352
#define EFFECT_TUNER_MATERIAL_LIMIT 353
#define EVENT_STARTUP 1000
#define EVENT_FLIP 1001
...
...
field.cpp
View file @
1db16596
...
...
@@ -2341,7 +2341,8 @@ int32 field::check_synchro_material(card* pcard, int32 findex1, int32 findex2, i
return
FALSE
;
}
int32
field
::
check_tuner_material
(
card
*
pcard
,
card
*
tuner
,
int32
findex1
,
int32
findex2
,
int32
min
,
int32
max
,
card
*
smat
,
group
*
mg
)
{
if
(
tuner
&&
tuner
->
is_position
(
POS_FACEUP
)
&&
(
tuner
->
get_type
()
&
TYPE_TUNER
)
&&
tuner
->
is_can_be_synchro_material
(
pcard
))
{
if
(
!
tuner
||
!
tuner
->
is_position
(
POS_FACEUP
)
||
!
(
tuner
->
get_type
()
&
TYPE_TUNER
)
||
!
tuner
->
is_can_be_synchro_material
(
pcard
))
return
FALSE
;
effect
*
pcheck
=
tuner
->
is_affected_by_effect
(
EFFECT_SYNCHRO_CHECK
);
if
(
pcheck
)
pcheck
->
get_value
(
tuner
);
...
...
@@ -2364,7 +2365,25 @@ int32 field::check_tuner_material(card* pcard, card* tuner, int32 findex1, int32
pduel
->
restore_assumes
();
return
TRUE
;
}
}
else
{
pduel
->
restore_assumes
();
return
FALSE
;
}
int32
playerid
=
pcard
->
current
.
controler
;
//int32 ct = get_useable_count(pcard, playerid, LOCATION_MZONE, playerid, LOCATION_REASON_TOFIELD);
int32
location
=
LOCATION_MZONE
;
effect
*
ptuner
=
tuner
->
is_affected_by_effect
(
EFFECT_TUNER_MATERIAL_LIMIT
);
if
(
ptuner
)
{
if
(
ptuner
->
value
)
location
=
ptuner
->
value
;
if
(
ptuner
->
s_range
&&
ptuner
->
s_range
>
min
)
min
=
ptuner
->
s_range
;
if
(
ptuner
->
o_range
&&
ptuner
->
o_range
<
max
)
max
=
ptuner
->
o_range
;
if
(
min
>
max
)
{
pduel
->
restore_assumes
();
return
FALSE
;
}
}
int32
lv
=
pcard
->
get_level
();
card_vector
nsyn
;
int32
mcount
=
1
;
...
...
@@ -2377,6 +2396,14 @@ int32 field::check_tuner_material(card* pcard, card* tuner, int32 findex1, int32
pduel
->
restore_assumes
();
return
FALSE
;
}
if
(
ptuner
&&
ptuner
->
target
)
{
pduel
->
lua
->
add_param
(
ptuner
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
smat
,
PARAM_TYPE_CARD
);
if
(
!
pduel
->
lua
->
get_function_value
(
ptuner
->
target
,
2
))
{
pduel
->
restore_assumes
();
return
FALSE
;
}
}
min
--
;
max
--
;
nsyn
.
push_back
(
smat
);
...
...
@@ -2396,7 +2423,14 @@ int32 field::check_tuner_material(card* pcard, card* tuner, int32 findex1, int32
if
(
mg
)
{
for
(
auto
cit
=
mg
->
container
.
begin
();
cit
!=
mg
->
container
.
end
();
++
cit
)
{
card
*
pm
=
*
cit
;
if
(
pm
!=
tuner
&&
pm
!=
smat
&&
pm
->
is_can_be_synchro_material
(
pcard
,
tuner
))
{
if
(
pm
==
tuner
||
pm
==
smat
||
!
pm
->
is_can_be_synchro_material
(
pcard
,
tuner
))
continue
;
if
(
ptuner
&&
ptuner
->
target
)
{
pduel
->
lua
->
add_param
(
ptuner
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
pm
,
PARAM_TYPE_CARD
);
if
(
!
pduel
->
lua
->
get_function_value
(
ptuner
->
target
,
2
))
continue
;
}
if
(
pcheck
)
pcheck
->
get_value
(
pm
);
if
(
pm
->
current
.
location
==
LOCATION_MZONE
&&
!
pm
->
is_position
(
POS_FACEUP
))
...
...
@@ -2406,35 +2440,56 @@ int32 field::check_tuner_material(card* pcard, card* tuner, int32 findex1, int32
nsyn
.
push_back
(
pm
);
pm
->
sum_param
=
pm
->
get_synchro_level
(
pcard
);
}
}
}
else
{
for
(
uint8
p
=
0
;
p
<
2
;
++
p
)
{
for
(
auto
cit
=
player
[
p
].
list_mzone
.
begin
();
cit
!=
player
[
p
].
list_mzone
.
end
();
++
cit
)
{
card_vector
cv
;
if
(
location
&
LOCATION_MZONE
)
{
cv
.
insert
(
cv
.
end
(),
player
[
0
].
list_mzone
.
begin
(),
player
[
0
].
list_mzone
.
end
());
cv
.
insert
(
cv
.
end
(),
player
[
1
].
list_mzone
.
begin
(),
player
[
1
].
list_mzone
.
end
());
}
if
(
location
&
LOCATION_HAND
)
cv
.
insert
(
cv
.
end
(),
player
[
playerid
].
list_hand
.
begin
(),
player
[
playerid
].
list_hand
.
end
());
for
(
auto
cit
=
cv
.
begin
();
cit
!=
cv
.
end
();
++
cit
)
{
card
*
pm
=
*
cit
;
if
(
pm
&&
pm
!=
tuner
&&
pm
!=
smat
&&
pm
->
is_position
(
POS_FACEUP
)
&&
pm
->
is_can_be_synchro_material
(
pcard
,
tuner
))
{
if
(
!
pm
||
pm
==
tuner
||
pm
==
smat
||
!
pm
->
is_can_be_synchro_material
(
pcard
,
tuner
))
continue
;
if
(
ptuner
&&
ptuner
->
target
)
{
pduel
->
lua
->
add_param
(
ptuner
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
pm
,
PARAM_TYPE_CARD
);
if
(
!
pduel
->
lua
->
get_function_value
(
ptuner
->
target
,
2
))
continue
;
}
if
(
pcheck
)
pcheck
->
get_value
(
pm
);
if
(
pm
->
current
.
location
==
LOCATION_MZONE
&&
!
pm
->
is_position
(
POS_FACEUP
))
continue
;
if
(
!
pduel
->
lua
->
check_matching
(
pm
,
findex2
,
0
))
continue
;
nsyn
.
push_back
(
pm
);
pm
->
sum_param
=
pm
->
get_synchro_level
(
pcard
);
}
}
}
}
if
(
!
(
core
.
global_flag
&
GLOBALFLAG_SCRAP_CHIMERA
))
{
if
(
check_with_sum_limit_m
(
nsyn
,
lv
,
0
,
min
,
max
,
mcount
))
{
pduel
->
restore_assumes
();
return
TRUE
;
}
}
else
{
pduel
->
restore_assumes
();
return
FALSE
;
}
effect
*
pscrap
=
0
;
for
(
auto
cit
=
nsyn
.
begin
();
cit
!=
nsyn
.
end
();
++
cit
)
{
pscrap
=
(
*
cit
)
->
is_affected_by_effect
(
EFFECT_SCRAP_CHIMERA
);
if
(
pscrap
)
break
;
}
if
(
pscrap
)
{
if
(
!
pscrap
)
{
if
(
check_with_sum_limit_m
(
nsyn
,
lv
,
0
,
min
,
max
,
mcount
))
{
pduel
->
restore_assumes
();
return
TRUE
;
}
pduel
->
restore_assumes
();
return
FALSE
;
}
card_vector
nsyn_filtered
;
for
(
auto
cit
=
nsyn
.
begin
();
cit
!=
nsyn
.
end
();
++
cit
)
{
if
(
!
pscrap
->
get_value
(
*
cit
))
...
...
@@ -2471,15 +2526,6 @@ int32 field::check_tuner_material(card* pcard, card* tuner, int32 findex1, int32
return
TRUE
;
}
}
}
else
{
if
(
check_with_sum_limit_m
(
nsyn
,
lv
,
0
,
min
,
max
,
mcount
))
{
pduel
->
restore_assumes
();
return
TRUE
;
}
}
}
}
}
pduel
->
restore_assumes
();
return
FALSE
;
}
...
...
operations.cpp
View file @
1db16596
...
...
@@ -4602,9 +4602,21 @@ int32 field::select_synchro_material(int16 step, uint8 playerid, card* pcard, in
return
FALSE
;
}
case
4
:
{
card
*
tuner
=
core
.
limit_tuner
;
int32
playerid
=
pcard
->
current
.
controler
;
//int32 ct = get_useable_count(pcard, playerid, LOCATION_MZONE, playerid, LOCATION_REASON_TOFIELD);
int32
location
=
LOCATION_MZONE
;
effect
*
ptuner
=
tuner
->
is_affected_by_effect
(
EFFECT_TUNER_MATERIAL_LIMIT
);
if
(
ptuner
)
{
if
(
ptuner
->
value
)
location
=
ptuner
->
value
;
if
(
ptuner
->
s_range
&&
ptuner
->
s_range
>
min
)
min
=
ptuner
->
s_range
;
if
(
ptuner
->
o_range
&&
ptuner
->
o_range
<
max
)
max
=
ptuner
->
o_range
;
}
int32
lv
=
pcard
->
get_level
();
int32
mcount
=
1
;
card
*
tuner
=
core
.
limit_tuner
;
effect
*
pcheck
=
tuner
->
is_affected_by_effect
(
EFFECT_SYNCHRO_CHECK
);
core
.
must_select_cards
.
clear
();
core
.
must_select_cards
.
push_back
(
tuner
);
...
...
@@ -4620,7 +4632,14 @@ int32 field::select_synchro_material(int16 step, uint8 playerid, card* pcard, in
if
(
mg
)
{
for
(
auto
cit
=
mg
->
container
.
begin
();
cit
!=
mg
->
container
.
end
();
++
cit
)
{
card
*
pm
=
*
cit
;
if
(
pm
!=
tuner
&&
pm
!=
smat
&&
pm
->
is_can_be_synchro_material
(
pcard
,
tuner
))
{
if
(
pm
==
tuner
||
pm
==
smat
||
!
pm
->
is_can_be_synchro_material
(
pcard
,
tuner
))
continue
;
if
(
ptuner
&&
ptuner
->
target
)
{
pduel
->
lua
->
add_param
(
ptuner
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
pm
,
PARAM_TYPE_CARD
);
if
(
!
pduel
->
lua
->
get_function_value
(
ptuner
->
target
,
2
))
continue
;
}
if
(
pcheck
)
pcheck
->
get_value
(
pm
);
if
(
pm
->
current
.
location
==
LOCATION_MZONE
&&
!
pm
->
is_position
(
POS_FACEUP
))
...
...
@@ -4630,22 +4649,34 @@ int32 field::select_synchro_material(int16 step, uint8 playerid, card* pcard, in
core
.
select_cards
.
push_back
(
pm
);
pm
->
sum_param
=
pm
->
get_synchro_level
(
pcard
);
}
}
}
else
{
for
(
uint8
np
=
0
;
np
<
2
;
++
np
)
{
for
(
auto
cit
=
player
[
np
].
list_mzone
.
begin
();
cit
!=
player
[
np
].
list_mzone
.
end
();
++
cit
)
{
card_vector
cv
;
if
(
location
&
LOCATION_MZONE
)
{
cv
.
insert
(
cv
.
end
(),
player
[
0
].
list_mzone
.
begin
(),
player
[
0
].
list_mzone
.
end
());
cv
.
insert
(
cv
.
end
(),
player
[
1
].
list_mzone
.
begin
(),
player
[
1
].
list_mzone
.
end
());
}
if
(
location
&
LOCATION_HAND
)
cv
.
insert
(
cv
.
end
(),
player
[
playerid
].
list_hand
.
begin
(),
player
[
playerid
].
list_hand
.
end
());
for
(
auto
cit
=
cv
.
begin
();
cit
!=
cv
.
end
();
++
cit
)
{
card
*
pm
=
*
cit
;
if
(
pm
&&
pm
!=
tuner
&&
pm
!=
smat
&&
pm
->
is_position
(
POS_FACEUP
)
&&
pm
->
is_can_be_synchro_material
(
pcard
,
tuner
))
{
if
(
!
pm
||
pm
==
tuner
||
pm
==
smat
||
!
pm
->
is_can_be_synchro_material
(
pcard
,
tuner
))
continue
;
if
(
ptuner
&&
ptuner
->
target
)
{
pduel
->
lua
->
add_param
(
ptuner
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
pm
,
PARAM_TYPE_CARD
);
if
(
!
pduel
->
lua
->
get_function_value
(
ptuner
->
target
,
2
))
continue
;
}
if
(
pcheck
)
pcheck
->
get_value
(
pm
);
if
(
pm
->
current
.
location
==
LOCATION_MZONE
&&
!
pm
->
is_position
(
POS_FACEUP
))
continue
;
if
(
!
pduel
->
lua
->
check_matching
(
pm
,
-
1
,
0
))
continue
;
core
.
select_cards
.
push_back
(
pm
);
pm
->
sum_param
=
pm
->
get_synchro_level
(
pcard
);
}
}
}
}
if
(
core
.
global_flag
&
GLOBALFLAG_SCRAP_CHIMERA
)
{
effect
*
peffect
=
0
;
for
(
auto
cit
=
core
.
select_cards
.
begin
();
cit
!=
core
.
select_cards
.
end
();
++
cit
)
{
...
...
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