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
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-core
Commits
91e9cb9e
Commit
91e9cb9e
authored
Mar 12, 2018
by
VanillaSalt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix
parent
ed356a14
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
28 additions
and
47 deletions
+28
-47
field.cpp
field.cpp
+16
-40
field.h
field.h
+1
-0
libduel.cpp
libduel.cpp
+7
-3
operations.cpp
operations.cpp
+4
-4
No files found.
field.cpp
View file @
91e9cb9e
...
@@ -1614,48 +1614,24 @@ int32 field::get_release_list(uint8 playerid, card_set* release_list, card_set*
...
@@ -1614,48 +1614,24 @@ int32 field::get_release_list(uint8 playerid, card_set* release_list, card_set*
return
rcount
+
ex_oneof_max
;
return
rcount
+
ex_oneof_max
;
}
}
int32
field
::
check_release_list
(
uint8
playerid
,
int32
count
,
int32
use_con
,
int32
use_hand
,
int32
fun
,
int32
exarg
,
card
*
exc
,
group
*
exg
)
{
int32
field
::
check_release_list
(
uint8
playerid
,
int32
count
,
int32
use_con
,
int32
use_hand
,
int32
fun
,
int32
exarg
,
card
*
exc
,
group
*
exg
)
{
for
(
auto
cit
=
player
[
playerid
].
list_mzone
.
begin
();
cit
!=
player
[
playerid
].
list_mzone
.
end
();
++
cit
)
{
card_set
relcard
;
card
*
pcard
=
*
cit
;
card_set
relcard_oneof
;
if
(
pcard
&&
pcard
!=
exc
&&
!
(
exg
&&
exg
->
has_card
(
pcard
))
&&
pcard
->
is_releasable_by_nonsummon
(
playerid
)
get_release_list
(
playerid
,
&
relcard
,
&
relcard
,
&
relcard_oneof
,
use_con
,
use_hand
,
fun
,
exarg
,
exc
,
exg
);
&&
(
!
use_con
||
pduel
->
lua
->
check_matching
(
pcard
,
fun
,
exarg
)))
{
bool
has_oneof
=
false
;
count
--
;
for
(
auto
cit
=
core
.
must_select_cards
.
begin
();
cit
!=
core
.
must_select_cards
.
end
();
++
cit
)
{
if
(
count
==
0
)
return
TRUE
;
}
}
if
(
use_hand
)
{
for
(
auto
cit
=
player
[
playerid
].
list_hand
.
begin
();
cit
!=
player
[
playerid
].
list_hand
.
end
();
++
cit
)
{
card
*
pcard
=
*
cit
;
if
(
pcard
&&
pcard
!=
exc
&&
!
(
exg
&&
exg
->
has_card
(
pcard
))
&&
pcard
->
is_releasable_by_nonsummon
(
playerid
)
&&
(
!
use_con
||
pduel
->
lua
->
check_matching
(
pcard
,
fun
,
exarg
)))
{
count
--
;
if
(
count
==
0
)
return
TRUE
;
}
}
}
bool
ex_oneof
=
false
;
for
(
auto
cit
=
player
[
1
-
playerid
].
list_mzone
.
begin
();
cit
!=
player
[
1
-
playerid
].
list_mzone
.
end
();
++
cit
)
{
card
*
pcard
=
*
cit
;
card
*
pcard
=
*
cit
;
if
(
pcard
&&
pcard
!=
exc
&&
!
(
exg
&&
exg
->
has_card
(
pcard
))
&&
(
!
use_con
||
pcard
->
is_position
(
POS_FACEUP
))
auto
it
=
relcard
.
find
(
pcard
);
&&
pcard
->
is_releasable_by_nonsummon
(
playerid
)
&&
(
!
use_con
||
pduel
->
lua
->
check_matching
(
pcard
,
fun
,
exarg
)))
{
if
(
it
!=
relcard
.
end
())
pcard
->
release_param
=
1
;
relcard
.
erase
(
it
);
if
(
pcard
->
is_affected_by_effect
(
EFFECT_EXTRA_RELEASE
))
{
else
if
(
!
has_oneof
&&
relcard_oneof
.
find
(
pcard
)
!=
relcard_oneof
.
end
())
count
--
;
has_oneof
=
true
;
if
(
count
==
0
)
else
return
TRUE
;
return
FALSE
;
}
else
if
(
!
ex_oneof
)
{
effect
*
peffect
=
pcard
->
is_affected_by_effect
(
EFFECT_EXTRA_RELEASE_NONSUM
);
if
(
!
peffect
||
(
peffect
->
is_flag
(
EFFECT_FLAG_COUNT_LIMIT
)
&&
peffect
->
count_limit
==
0
))
continue
;
ex_oneof
=
true
;
count
--
;
if
(
count
==
0
)
return
TRUE
;
}
}
}
}
return
FALSE
;
int32
rcount
=
(
int32
)
relcard
.
size
();
if
(
!
has_oneof
&&
!
relcard_oneof
.
empty
())
rcount
++
;
return
(
rcount
>=
count
)
?
TRUE
:
FALSE
;
}
}
// return: the max release count of mg or all monsters on field
// return: the max release count of mg or all monsters on field
int32
field
::
get_summon_release_list
(
card
*
target
,
card_set
*
release_list
,
card_set
*
ex_list
,
card_set
*
ex_list_oneof
,
group
*
mg
,
uint32
ex
,
uint32
releasable
,
uint32
pos
)
{
int32
field
::
get_summon_release_list
(
card
*
target
,
card_set
*
release_list
,
card_set
*
ex_list
,
card_set
*
ex_list_oneof
,
group
*
mg
,
uint32
ex
,
uint32
releasable
,
uint32
pos
)
{
...
...
field.h
View file @
91e9cb9e
...
@@ -317,6 +317,7 @@ struct processor {
...
@@ -317,6 +317,7 @@ struct processor {
std
::
unordered_map
<
uint32
,
std
::
pair
<
uint32
,
uint32
>
>
attack_counter
;
std
::
unordered_map
<
uint32
,
std
::
pair
<
uint32
,
uint32
>
>
attack_counter
;
std
::
unordered_map
<
uint32
,
std
::
pair
<
uint32
,
uint32
>
>
chain_counter
;
std
::
unordered_map
<
uint32
,
std
::
pair
<
uint32
,
uint32
>
>
chain_counter
;
processor_list
recover_damage_reserve
;
processor_list
recover_damage_reserve
;
effect_vector
dec_count_reserve
;
};
};
class
field
{
class
field
{
public:
public:
...
...
libduel.cpp
View file @
91e9cb9e
...
@@ -2253,7 +2253,7 @@ int32 scriptlib::duel_get_release_group(lua_State *L) {
...
@@ -2253,7 +2253,7 @@ int32 scriptlib::duel_get_release_group(lua_State *L) {
hand
=
lua_toboolean
(
L
,
2
);
hand
=
lua_toboolean
(
L
,
2
);
duel
*
pduel
=
interpreter
::
get_duel_info
(
L
);
duel
*
pduel
=
interpreter
::
get_duel_info
(
L
);
group
*
pgroup
=
pduel
->
new_group
();
group
*
pgroup
=
pduel
->
new_group
();
pduel
->
game_field
->
get_release_list
(
playerid
,
&
(
pgroup
->
container
),
&
(
pgroup
->
container
),
0
,
FALSE
,
hand
,
0
,
0
,
0
,
0
);
pduel
->
game_field
->
get_release_list
(
playerid
,
&
pgroup
->
container
,
&
pgroup
->
container
,
&
pgroup
->
container
,
FALSE
,
hand
,
0
,
0
,
0
,
0
);
interpreter
::
group2value
(
L
,
pgroup
);
interpreter
::
group2value
(
L
,
pgroup
);
return
1
;
return
1
;
}
}
...
@@ -2293,7 +2293,9 @@ int32 scriptlib::duel_check_release_group(lua_State *L) {
...
@@ -2293,7 +2293,9 @@ int32 scriptlib::duel_check_release_group(lua_State *L) {
uint32
extraargs
=
lua_gettop
(
L
)
-
4
;
uint32
extraargs
=
lua_gettop
(
L
)
-
4
;
duel
*
pduel
=
interpreter
::
get_duel_info
(
L
);
duel
*
pduel
=
interpreter
::
get_duel_info
(
L
);
uint32
fcount
=
lua_tointeger
(
L
,
3
);
uint32
fcount
=
lua_tointeger
(
L
,
3
);
lua_pushboolean
(
L
,
pduel
->
game_field
->
check_release_list
(
playerid
,
fcount
,
use_con
,
FALSE
,
2
,
extraargs
,
pexception
,
pexgroup
));
int32
result
=
pduel
->
game_field
->
check_release_list
(
playerid
,
fcount
,
use_con
,
FALSE
,
2
,
extraargs
,
pexception
,
pexgroup
);
pduel
->
game_field
->
core
.
must_select_cards
.
clear
();
lua_pushboolean
(
L
,
result
);
return
1
;
return
1
;
}
}
int32
scriptlib
::
duel_select_release_group
(
lua_State
*
L
)
{
int32
scriptlib
::
duel_select_release_group
(
lua_State
*
L
)
{
...
@@ -2343,7 +2345,9 @@ int32 scriptlib::duel_check_release_group_ex(lua_State *L) {
...
@@ -2343,7 +2345,9 @@ int32 scriptlib::duel_check_release_group_ex(lua_State *L) {
uint32
extraargs
=
lua_gettop
(
L
)
-
4
;
uint32
extraargs
=
lua_gettop
(
L
)
-
4
;
duel
*
pduel
=
interpreter
::
get_duel_info
(
L
);
duel
*
pduel
=
interpreter
::
get_duel_info
(
L
);
uint32
fcount
=
lua_tointeger
(
L
,
3
);
uint32
fcount
=
lua_tointeger
(
L
,
3
);
lua_pushboolean
(
L
,
pduel
->
game_field
->
check_release_list
(
playerid
,
fcount
,
use_con
,
TRUE
,
2
,
extraargs
,
pexception
,
pexgroup
));
int32
result
=
pduel
->
game_field
->
check_release_list
(
playerid
,
fcount
,
use_con
,
TRUE
,
2
,
extraargs
,
pexception
,
pexgroup
);
pduel
->
game_field
->
core
.
must_select_cards
.
clear
();
lua_pushboolean
(
L
,
result
);
return
1
;
return
1
;
}
}
int32
scriptlib
::
duel_select_release_group_ex
(
lua_State
*
L
)
{
int32
scriptlib
::
duel_select_release_group_ex
(
lua_State
*
L
)
{
...
...
operations.cpp
View file @
91e9cb9e
...
@@ -3495,6 +3495,8 @@ int32 field::release(uint16 step, group * targets, effect * reason_effect, uint3
...
@@ -3495,6 +3495,8 @@ int32 field::release(uint16 step, group * targets, effect * reason_effect, uint3
return
FALSE
;
return
FALSE
;
}
}
case
4
:
{
case
4
:
{
for
(
auto
eit
=
core
.
dec_count_reserve
.
begin
();
eit
!=
core
.
dec_count_reserve
.
end
();
++
eit
)
(
*
eit
)
->
dec_count
();
core
.
operated_set
.
clear
();
core
.
operated_set
.
clear
();
core
.
operated_set
=
targets
->
container
;
core
.
operated_set
=
targets
->
container
;
returns
.
ivalue
[
0
]
=
targets
->
container
.
size
();
returns
.
ivalue
[
0
]
=
targets
->
container
.
size
();
...
@@ -5586,7 +5588,8 @@ int32 field::select_release_cards(int16 step, uint8 playerid, uint8 cancelable,
...
@@ -5586,7 +5588,8 @@ int32 field::select_release_cards(int16 step, uint8 playerid, uint8 cancelable,
case
4
:
{
case
4
:
{
card
*
pcard
=
core
.
select_cards
[
returns
.
bvalue
[
1
]];
card
*
pcard
=
core
.
select_cards
[
returns
.
bvalue
[
1
]];
core
.
operated_set
.
insert
(
pcard
);
core
.
operated_set
.
insert
(
pcard
);
core
.
units
.
begin
()
->
peffect
=
pcard
->
is_affected_by_effect
(
EFFECT_EXTRA_RELEASE_NONSUM
);
effect
*
peffect
=
pcard
->
is_affected_by_effect
(
EFFECT_EXTRA_RELEASE_NONSUM
);
core
.
dec_count_reserve
.
push_back
(
peffect
);
max
--
;
max
--
;
if
(
max
==
0
||
core
.
release_cards
.
empty
())
{
if
(
max
==
0
||
core
.
release_cards
.
empty
())
{
core
.
units
.
begin
()
->
step
=
6
;
core
.
units
.
begin
()
->
step
=
6
;
...
@@ -5622,9 +5625,6 @@ int32 field::select_release_cards(int16 step, uint8 playerid, uint8 cancelable,
...
@@ -5622,9 +5625,6 @@ int32 field::select_release_cards(int16 step, uint8 playerid, uint8 cancelable,
core
.
select_cards
.
push_back
(
*
cit
);
core
.
select_cards
.
push_back
(
*
cit
);
returns
.
bvalue
[
i
+
1
]
=
i
;
returns
.
bvalue
[
i
+
1
]
=
i
;
}
}
effect
*
peffect
=
core
.
units
.
begin
()
->
peffect
;
if
(
peffect
)
peffect
->
dec_count
();
return
TRUE
;
return
TRUE
;
}
}
}
}
...
...
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