Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro-2pick
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
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-2pick
Commits
62ce34a1
Commit
62ce34a1
authored
Jun 13, 2015
by
VanillaSalt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix
parent
bc98ce92
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
66 additions
and
59 deletions
+66
-59
ocgcore/card.cpp
ocgcore/card.cpp
+23
-17
ocgcore/operations.cpp
ocgcore/operations.cpp
+43
-42
No files found.
ocgcore/card.cpp
View file @
62ce34a1
...
...
@@ -242,10 +242,11 @@ uint32 card::get_code() {
return
code
;
}
uint32
card
::
get_another_code
()
{
effect_set
eset
,
eset2
;
if
(
is_affected_by_effect
(
EFFECT_CHANGE_CODE
))
return
0
;
effect_set
eset
;
filter_effect
(
EFFECT_ADD_CODE
,
&
eset
);
filter_effect
(
EFFECT_CHANGE_CODE
,
&
eset2
);
if
(
!
eset
.
size
()
||
eset2
.
size
())
if
(
!
eset
.
size
())
return
0
;
uint32
otcode
=
eset
.
get_last
()
->
get_value
(
this
);
if
(
get_code
()
!=
otcode
)
...
...
@@ -1521,21 +1522,23 @@ void card::filter_disable_related_cards() {
int32
card
::
filter_summon_procedure
(
uint8
playerid
,
effect_set
*
peset
,
uint8
ignore_count
,
uint8
min_tribute
)
{
effect_set
eset
;
filter_effect
(
EFFECT_LIMIT_SUMMON_PROC
,
&
eset
);
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
if
(
eset
[
i
]
->
check_count_limit
(
playerid
)
&&
is_summonable
(
eset
[
i
],
min_tribute
)
&&
pduel
->
game_field
->
is_player_can_summon
(
eset
[
i
]
->
get_value
(
this
),
playerid
,
this
))
peset
->
add_item
(
eset
[
i
]);
if
(
eset
.
size
())
{
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
if
(
eset
[
i
]
->
check_count_limit
(
playerid
)
&&
is_summonable
(
eset
[
i
],
min_tribute
)
&&
pduel
->
game_field
->
is_player_can_summon
(
eset
[
i
]
->
get_value
(
this
),
playerid
,
this
))
peset
->
add_item
(
eset
[
i
]);
}
if
(
peset
->
size
())
return
-
1
;
return
-
2
;
}
eset
.
clear
();
filter_effect
(
EFFECT_SUMMON_PROC
,
&
eset
);
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
if
(
eset
[
i
]
->
check_count_limit
(
playerid
)
&&
is_summonable
(
eset
[
i
],
min_tribute
)
&&
pduel
->
game_field
->
is_player_can_summon
(
eset
[
i
]
->
get_value
(
this
),
playerid
,
this
))
peset
->
add_item
(
eset
[
i
]);
}
if
(
!
pduel
->
game_field
->
is_player_can_summon
(
SUMMON_TYPE_NORMAL
,
playerid
,
this
))
return
FALSE
;
int32
rcount
=
get_summon_tribute_count
();
...
...
@@ -1561,21 +1564,23 @@ int32 card::filter_summon_procedure(uint8 playerid, effect_set* peset, uint8 ign
int32
card
::
filter_set_procedure
(
uint8
playerid
,
effect_set
*
peset
,
uint8
ignore_count
,
uint8
min_tribute
)
{
effect_set
eset
;
filter_effect
(
EFFECT_LIMIT_SET_PROC
,
&
eset
);
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
if
(
eset
[
i
]
->
check_count_limit
(
playerid
)
&&
is_summonable
(
eset
[
i
],
min_tribute
)
&&
pduel
->
game_field
->
is_player_can_mset
(
eset
[
i
]
->
get_value
(
this
),
playerid
,
this
))
peset
->
add_item
(
eset
[
i
]);
if
(
eset
.
size
())
{
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
if
(
eset
[
i
]
->
check_count_limit
(
playerid
)
&&
is_summonable
(
eset
[
i
],
min_tribute
)
&&
pduel
->
game_field
->
is_player_can_mset
(
eset
[
i
]
->
get_value
(
this
),
playerid
,
this
))
peset
->
add_item
(
eset
[
i
]);
}
if
(
peset
->
size
())
return
-
1
;
return
-
2
;
}
eset
.
clear
();
filter_effect
(
EFFECT_SET_PROC
,
&
eset
);
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
if
(
eset
[
i
]
->
check_count_limit
(
playerid
)
&&
is_summonable
(
eset
[
i
],
min_tribute
)
&&
pduel
->
game_field
->
is_player_can_mset
(
eset
[
i
]
->
get_value
(
this
),
playerid
,
this
))
peset
->
add_item
(
eset
[
i
]);
}
if
(
!
pduel
->
game_field
->
is_player_can_mset
(
SUMMON_TYPE_NORMAL
,
playerid
,
this
))
return
FALSE
;
int32
rcount
=
get_set_tribute_count
();
...
...
@@ -2402,17 +2407,18 @@ int32 card::is_capable_be_battle_target(card* pcard) {
int32
card
::
is_capable_be_effect_target
(
effect
*
peffect
,
uint8
playerid
)
{
if
(
is_status
(
STATUS_SUMMONING
)
||
is_status
(
STATUS_BATTLE_DESTROYED
))
return
FALSE
;
effect_set
eset
,
eset2
;
effect_set
eset
;
filter_effect
(
EFFECT_CANNOT_BE_EFFECT_TARGET
,
&
eset
);
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
pduel
->
lua
->
add_param
(
playerid
,
PARAM_TYPE_INT
);
if
(
eset
[
i
]
->
get_value
(
peffect
,
1
))
return
FALSE
;
}
peffect
->
handler
->
filter_effect
(
EFFECT_CANNOT_SELECT_EFFECT_TARGET
,
&
eset2
);
for
(
int32
i
=
0
;
i
<
eset2
.
size
();
++
i
)
{
eset
.
clear
();
peffect
->
handler
->
filter_effect
(
EFFECT_CANNOT_SELECT_EFFECT_TARGET
,
&
eset
);
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
pduel
->
lua
->
add_param
(
this
,
PARAM_TYPE_CARD
);
if
(
eset
2
[
i
]
->
get_value
(
peffect
,
1
))
if
(
eset
[
i
]
->
get_value
(
peffect
,
1
))
return
FALSE
;
}
return
TRUE
;
...
...
ocgcore/operations.cpp
View file @
62ce34a1
...
...
@@ -1163,6 +1163,21 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc,
return
TRUE
;
if
(
!
is_player_can_summon
(
SUMMON_TYPE_DUAL
,
sumplayer
,
target
))
return
TRUE
;
}
else
{
if
(
!
ignore_count
&&
!
core
.
extra_summon
[
sumplayer
]
&&
core
.
summon_count
[
sumplayer
]
>=
get_summon_count_limit
(
sumplayer
))
{
effect
*
pextra
=
target
->
is_affected_by_effect
(
EFFECT_EXTRA_SUMMON_COUNT
);
if
(
pextra
&&
!
(
pextra
->
flag
&
EFFECT_FLAG_FUNC_VALUE
))
{
int32
count
=
pextra
->
get_value
();
if
(
min_tribute
<
count
)
{
min_tribute
=
count
;
core
.
units
.
begin
()
->
arg2
=
ignore_count
+
(
min_tribute
<<
8
);
}
}
}
effect_set
eset
;
int32
res
=
target
->
filter_summon_procedure
(
sumplayer
,
&
eset
,
ignore_count
,
min_tribute
);
if
((
proc
&&
res
<
0
)
||
res
==
-
2
)
return
TRUE
;
}
if
(
check_unique_onfield
(
target
,
sumplayer
))
return
TRUE
;
...
...
@@ -1183,32 +1198,18 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc,
return
FALSE
;
}
case
1
:
{
if(!ignore_count && !core.extra_summon[sumplayer] && core.summon_count[sumplayer] >= get_summon_count_limit(sumplayer)) {
effect* pextra = target->is_affected_by_effect(EFFECT_EXTRA_SUMMON_COUNT);
if(pextra && !(pextra->flag & EFFECT_FLAG_FUNC_VALUE)) {
int32 count = pextra->get_value();
if(min_tribute < count) {
min_tribute = count;
core.units.begin()->arg2 = ignore_count + (min_tribute << 8);
}
}
}
effect_set eset;
int32 res = target->filter_summon_procedure(sumplayer, &eset, ignore_count, min_tribute);
if(proc && res < 0)
return TRUE;
if
(
proc
)
{
core
.
units
.
begin
()
->
step
=
3
;
return
FALSE
;
}
effect_set
eset
;
int32
res
=
target
->
filter_summon_procedure
(
sumplayer
,
&
eset
,
ignore_count
,
min_tribute
);
core
.
select_effects
.
clear
();
core
.
select_options
.
clear
();
if
(
res
>
0
)
{
core
.
select_effects
.
push_back
(
0
);
core
.
select_options
.
push_back
(
1
);
}
else if(res == -2)
return TRUE;
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
core
.
select_effects
.
push_back
(
eset
[
i
]);
core
.
select_options
.
push_back
(
eset
[
i
]
->
description
);
...
...
@@ -1659,19 +1660,9 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui
return
TRUE
;
if
(
target
->
is_affected_by_effect
(
EFFECT_CANNOT_MSET
))
return
TRUE
;
if(!ignore_count && core.summon_count[setplayer] >= get_summon_count_limit(setplayer))
if
(
!
ignore_count
&&
(
core
.
extra_summon
[
setplayer
]
||
!
target
->
is_affected_by_effect
(
EFFECT_EXTRA_SET_COUNT
))
&&
core
.
summon_count
[
setplayer
]
>=
get_summon_count_limit
(
setplayer
))
return
TRUE
;
effect_set eset;
target->filter_effect(EFFECT_MSET_COST, &eset);
for(int32 i = 0; i < eset.size(); ++i) {
if(eset[i]->operation) {
core.sub_solving_event.push_back(nil_event);
add_process(PROCESSOR_EXECUTE_OPERATION, 0, eset[i], 0, setplayer, 0);
}
}
return FALSE;
}
case 1: {
if
(
!
ignore_count
&&
!
core
.
extra_summon
[
setplayer
]
&&
core
.
summon_count
[
setplayer
]
>=
get_summon_count_limit
(
setplayer
))
{
effect
*
pextra
=
target
->
is_affected_by_effect
(
EFFECT_EXTRA_SET_COUNT
);
if
(
pextra
&&
!
(
pextra
->
flag
&
EFFECT_FLAG_FUNC_VALUE
))
{
...
...
@@ -1682,15 +1673,28 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui
}
}
}
effect_set eset;
target
->
material_cards
.
clear
();
effect_set
eset
;
int32
res
=
target
->
filter_set_procedure
(
setplayer
,
&
eset
,
ignore_count
,
min_tribute
);
if(
proc && res < 0
)
if
(
(
proc
&&
res
<
0
)
||
res
==
-
2
)
return
TRUE
;
eset
.
clear
();
target
->
filter_effect
(
EFFECT_MSET_COST
,
&
eset
);
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
if
(
eset
[
i
]
->
operation
)
{
core
.
sub_solving_event
.
push_back
(
nil_event
);
add_process
(
PROCESSOR_EXECUTE_OPERATION
,
0
,
eset
[
i
],
0
,
setplayer
,
0
);
}
}
return
FALSE
;
}
case
1
:
{
if
(
proc
)
{
core
.
units
.
begin
()
->
step
=
3
;
return
FALSE
;
}
effect_set
eset
;
int32
res
=
target
->
filter_set_procedure
(
setplayer
,
&
eset
,
ignore_count
,
min_tribute
);
core
.
select_effects
.
clear
();
core
.
select_options
.
clear
();
if
(
res
>
0
)
{
...
...
@@ -2013,24 +2017,23 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target, ui
return
FALSE
;
if
(
target
->
current
.
location
&
(
LOCATION_GRAVE
+
LOCATION_REMOVED
)
&&
!
target
->
is_status
(
STATUS_REVIVE_LIMIT
))
return
FALSE
;
effect_set eset1;
target->material_cards.clear();
effect_set
eset
;
card
*
tuner
=
core
.
limit_tuner
;
group
*
materials
=
core
.
limit_xyz
;
group
*
syn
=
core
.
limit_syn
;
target->filter_spsummon_procedure(sumplayer, &eset
1
, summon_type);
target->filter_spsummon_procedure_g(sumplayer, &eset
1
);
target
->
filter_spsummon_procedure
(
sumplayer
,
&
eset
,
summon_type
);
target
->
filter_spsummon_procedure_g
(
sumplayer
,
&
eset
);
core
.
limit_tuner
=
tuner
;
core
.
limit_xyz
=
materials
;
core
.
limit_syn
=
syn
;
if(!eset
1
.size())
if
(
!
eset
.
size
())
return
TRUE
;
e
ffect_set eset2
;
target->filter_effect(EFFECT_SPSUMMON_COST, &eset
2
);
for(int32 i = 0; i < eset
2
.size(); ++i) {
if(eset
2
[i]->operation) {
e
set
.
clear
()
;
target
->
filter_effect
(
EFFECT_SPSUMMON_COST
,
&
eset
);
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
if
(
eset
[
i
]
->
operation
)
{
core
.
sub_solving_event
.
push_back
(
nil_event
);
add_process(PROCESSOR_EXECUTE_OPERATION, 0, eset
2
[i], 0, sumplayer, 0);
add_process
(
PROCESSOR_EXECUTE_OPERATION
,
0
,
eset
[
i
],
0
,
sumplayer
,
0
);
}
}
return
FALSE
;
...
...
@@ -2046,8 +2049,6 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target, ui
core
.
limit_tuner
=
tuner
;
core
.
limit_xyz
=
materials
;
core
.
limit_syn
=
syn
;
if(!eset.size())
return TRUE;
core
.
select_effects
.
clear
();
core
.
select_options
.
clear
();
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
...
...
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