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
53e59d45
Commit
53e59d45
authored
Jul 12, 2019
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge brancht push 'master' of
https://github.com/Fluorohydride/ygopro-core
parents
f79332d7
f9004164
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
61 additions
and
25 deletions
+61
-25
card.cpp
card.cpp
+5
-3
field.cpp
field.cpp
+1
-0
field.h
field.h
+1
-0
libcard.cpp
libcard.cpp
+13
-5
libduel.cpp
libduel.cpp
+13
-5
operations.cpp
operations.cpp
+28
-12
No files found.
card.cpp
View file @
53e59d45
...
@@ -2949,13 +2949,14 @@ int32 card::is_spsummonable(effect* peffect) {
...
@@ -2949,13 +2949,14 @@ int32 card::is_spsummonable(effect* peffect) {
}
}
if
(
pduel
->
lua
->
check_condition
(
peffect
->
condition
,
param_count
))
if
(
pduel
->
lua
->
check_condition
(
peffect
->
condition
,
param_count
))
result
=
TRUE
;
result
=
TRUE
;
}
else
if
(
pduel
->
game_field
->
core
.
limit_link
)
{
}
else
if
(
pduel
->
game_field
->
core
.
limit_link
||
pduel
->
game_field
->
core
.
limit_link_card
)
{
pduel
->
lua
->
add_param
(
pduel
->
game_field
->
core
.
limit_link
,
PARAM_TYPE_GROUP
);
pduel
->
lua
->
add_param
(
pduel
->
game_field
->
core
.
limit_link
,
PARAM_TYPE_GROUP
);
uint32
param_count
=
3
;
pduel
->
lua
->
add_param
(
pduel
->
game_field
->
core
.
limit_link_card
,
PARAM_TYPE_CARD
);
uint32
param_count
=
4
;
if
(
pduel
->
game_field
->
core
.
limit_link_minc
)
{
if
(
pduel
->
game_field
->
core
.
limit_link_minc
)
{
pduel
->
lua
->
add_param
(
pduel
->
game_field
->
core
.
limit_link_minc
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
pduel
->
game_field
->
core
.
limit_link_minc
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
pduel
->
game_field
->
core
.
limit_link_maxc
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
pduel
->
game_field
->
core
.
limit_link_maxc
,
PARAM_TYPE_INT
);
param_count
=
5
;
param_count
=
6
;
}
}
if
(
pduel
->
lua
->
check_condition
(
peffect
->
condition
,
param_count
))
if
(
pduel
->
lua
->
check_condition
(
peffect
->
condition
,
param_count
))
result
=
TRUE
;
result
=
TRUE
;
...
@@ -3137,6 +3138,7 @@ int32 card::is_special_summonable(uint8 playerid, uint32 summon_type) {
...
@@ -3137,6 +3138,7 @@ int32 card::is_special_summonable(uint8 playerid, uint32 summon_type) {
pduel
->
game_field
->
core
.
limit_xyz_minc
=
0
;
pduel
->
game_field
->
core
.
limit_xyz_minc
=
0
;
pduel
->
game_field
->
core
.
limit_xyz_maxc
=
0
;
pduel
->
game_field
->
core
.
limit_xyz_maxc
=
0
;
pduel
->
game_field
->
core
.
limit_link
=
0
;
pduel
->
game_field
->
core
.
limit_link
=
0
;
pduel
->
game_field
->
core
.
limit_link_card
=
0
;
pduel
->
game_field
->
core
.
limit_link_minc
=
0
;
pduel
->
game_field
->
core
.
limit_link_minc
=
0
;
pduel
->
game_field
->
core
.
limit_link_maxc
=
0
;
pduel
->
game_field
->
core
.
limit_link_maxc
=
0
;
pduel
->
game_field
->
restore_lp_cost
();
pduel
->
game_field
->
restore_lp_cost
();
...
...
field.cpp
View file @
53e59d45
...
@@ -99,6 +99,7 @@ field::field(duel* pduel) {
...
@@ -99,6 +99,7 @@ field::field(duel* pduel) {
core
.
limit_xyz_minc
=
0
;
core
.
limit_xyz_minc
=
0
;
core
.
limit_xyz_maxc
=
0
;
core
.
limit_xyz_maxc
=
0
;
core
.
limit_link
=
0
;
core
.
limit_link
=
0
;
core
.
limit_link_card
=
0
;
core
.
limit_link_minc
=
0
;
core
.
limit_link_minc
=
0
;
core
.
limit_link_maxc
=
0
;
core
.
limit_link_maxc
=
0
;
core
.
last_control_changed_id
=
0
;
core
.
last_control_changed_id
=
0
;
...
...
field.h
View file @
53e59d45
...
@@ -270,6 +270,7 @@ struct processor {
...
@@ -270,6 +270,7 @@ struct processor {
int32
limit_xyz_minc
;
int32
limit_xyz_minc
;
int32
limit_xyz_maxc
;
int32
limit_xyz_maxc
;
group
*
limit_link
;
group
*
limit_link
;
card
*
limit_link_card
;
int32
limit_link_minc
;
int32
limit_link_minc
;
int32
limit_link_maxc
;
int32
limit_link_maxc
;
uint8
attack_cancelable
;
uint8
attack_cancelable
;
...
...
libcard.cpp
View file @
53e59d45
...
@@ -1347,7 +1347,7 @@ int32 scriptlib::card_remove_overlay_card(lua_State *L) {
...
@@ -1347,7 +1347,7 @@ int32 scriptlib::card_remove_overlay_card(lua_State *L) {
pduel
->
game_field
->
remove_overlay_card
(
reason
,
pcard
,
playerid
,
0
,
0
,
min
,
max
);
pduel
->
game_field
->
remove_overlay_card
(
reason
,
pcard
,
playerid
,
0
,
0
,
min
,
max
);
return
lua_yieldk
(
L
,
0
,
(
lua_KContext
)
pduel
,
[](
lua_State
*
L
,
int32
status
,
lua_KContext
ctx
)
{
return
lua_yieldk
(
L
,
0
,
(
lua_KContext
)
pduel
,
[](
lua_State
*
L
,
int32
status
,
lua_KContext
ctx
)
{
duel
*
pduel
=
(
duel
*
)
ctx
;
duel
*
pduel
=
(
duel
*
)
ctx
;
lua_push
boolean
(
L
,
pduel
->
game_field
->
returns
.
ivalue
[
0
]);
lua_push
integer
(
L
,
pduel
->
game_field
->
returns
.
ivalue
[
0
]);
return
1
;
return
1
;
});
});
}
}
...
@@ -2032,18 +2032,26 @@ int32 scriptlib::card_is_link_summonable(lua_State *L) {
...
@@ -2032,18 +2032,26 @@ int32 scriptlib::card_is_link_summonable(lua_State *L) {
if
(
!
(
pcard
->
data
.
type
&
TYPE_LINK
))
if
(
!
(
pcard
->
data
.
type
&
TYPE_LINK
))
return
0
;
return
0
;
group
*
materials
=
0
;
group
*
materials
=
0
;
card
*
lcard
=
0
;
if
(
!
lua_isnil
(
L
,
2
))
{
if
(
!
lua_isnil
(
L
,
2
))
{
check_param
(
L
,
PARAM_TYPE_GROUP
,
2
);
check_param
(
L
,
PARAM_TYPE_GROUP
,
2
);
materials
=
*
(
group
**
)
lua_touserdata
(
L
,
2
);
materials
=
*
(
group
**
)
lua_touserdata
(
L
,
2
);
}
}
if
(
lua_gettop
(
L
)
>=
3
)
{
if
(
!
lua_isnil
(
L
,
3
))
{
check_param
(
L
,
PARAM_TYPE_CARD
,
3
);
lcard
=
*
(
card
**
)
lua_touserdata
(
L
,
3
);
}
}
int32
minc
=
0
;
int32
minc
=
0
;
if
(
lua_gettop
(
L
)
>=
3
)
minc
=
lua_tointeger
(
L
,
3
);
int32
maxc
=
0
;
if
(
lua_gettop
(
L
)
>=
4
)
if
(
lua_gettop
(
L
)
>=
4
)
maxc
=
lua_tointeger
(
L
,
4
);
minc
=
lua_tointeger
(
L
,
4
);
int32
maxc
=
0
;
if
(
lua_gettop
(
L
)
>=
5
)
maxc
=
lua_tointeger
(
L
,
5
);
uint32
p
=
pcard
->
pduel
->
game_field
->
core
.
reason_player
;
uint32
p
=
pcard
->
pduel
->
game_field
->
core
.
reason_player
;
pcard
->
pduel
->
game_field
->
core
.
limit_link
=
materials
;
pcard
->
pduel
->
game_field
->
core
.
limit_link
=
materials
;
pcard
->
pduel
->
game_field
->
core
.
limit_link_card
=
lcard
;
pcard
->
pduel
->
game_field
->
core
.
limit_link_minc
=
minc
;
pcard
->
pduel
->
game_field
->
core
.
limit_link_minc
=
minc
;
pcard
->
pduel
->
game_field
->
core
.
limit_link_maxc
=
maxc
;
pcard
->
pduel
->
game_field
->
core
.
limit_link_maxc
=
maxc
;
lua_pushboolean
(
L
,
pcard
->
is_special_summonable
(
p
,
SUMMON_TYPE_LINK
));
lua_pushboolean
(
L
,
pcard
->
is_special_summonable
(
p
,
SUMMON_TYPE_LINK
));
...
...
libduel.cpp
View file @
53e59d45
...
@@ -368,18 +368,26 @@ int32 scriptlib::duel_link_summon(lua_State *L) {
...
@@ -368,18 +368,26 @@ int32 scriptlib::duel_link_summon(lua_State *L) {
return
0
;
return
0
;
card
*
pcard
=
*
(
card
**
)
lua_touserdata
(
L
,
2
);
card
*
pcard
=
*
(
card
**
)
lua_touserdata
(
L
,
2
);
group
*
materials
=
0
;
group
*
materials
=
0
;
card
*
lcard
=
0
;
if
(
!
lua_isnil
(
L
,
3
))
{
if
(
!
lua_isnil
(
L
,
3
))
{
check_param
(
L
,
PARAM_TYPE_GROUP
,
3
);
check_param
(
L
,
PARAM_TYPE_GROUP
,
3
);
materials
=
*
(
group
**
)
lua_touserdata
(
L
,
3
);
materials
=
*
(
group
**
)
lua_touserdata
(
L
,
3
);
}
}
if
(
lua_gettop
(
L
)
>=
4
)
{
if
(
!
lua_isnil
(
L
,
4
))
{
check_param
(
L
,
PARAM_TYPE_CARD
,
4
);
lcard
=
*
(
card
**
)
lua_touserdata
(
L
,
4
);
}
}
int32
minc
=
0
;
int32
minc
=
0
;
if
(
lua_gettop
(
L
)
>=
4
)
minc
=
lua_tointeger
(
L
,
4
);
int32
maxc
=
0
;
if
(
lua_gettop
(
L
)
>=
5
)
if
(
lua_gettop
(
L
)
>=
5
)
maxc
=
lua_tointeger
(
L
,
5
);
minc
=
lua_tointeger
(
L
,
5
);
int32
maxc
=
0
;
if
(
lua_gettop
(
L
)
>=
6
)
maxc
=
lua_tointeger
(
L
,
6
);
duel
*
pduel
=
pcard
->
pduel
;
duel
*
pduel
=
pcard
->
pduel
;
pduel
->
game_field
->
core
.
limit_link
=
materials
;
pduel
->
game_field
->
core
.
limit_link
=
materials
;
pduel
->
game_field
->
core
.
limit_link_card
=
lcard
;
pduel
->
game_field
->
core
.
limit_link_minc
=
minc
;
pduel
->
game_field
->
core
.
limit_link_minc
=
minc
;
pduel
->
game_field
->
core
.
limit_link_maxc
=
maxc
;
pduel
->
game_field
->
core
.
limit_link_maxc
=
maxc
;
pduel
->
game_field
->
core
.
summon_cancelable
=
FALSE
;
pduel
->
game_field
->
core
.
summon_cancelable
=
FALSE
;
...
@@ -3314,7 +3322,7 @@ int32 scriptlib::duel_remove_overlay_card(lua_State *L) {
...
@@ -3314,7 +3322,7 @@ int32 scriptlib::duel_remove_overlay_card(lua_State *L) {
pduel
->
game_field
->
remove_overlay_card
(
reason
,
0
,
playerid
,
s
,
o
,
min
,
max
);
pduel
->
game_field
->
remove_overlay_card
(
reason
,
0
,
playerid
,
s
,
o
,
min
,
max
);
return
lua_yieldk
(
L
,
0
,
(
lua_KContext
)
pduel
,
[](
lua_State
*
L
,
int32
status
,
lua_KContext
ctx
)
{
return
lua_yieldk
(
L
,
0
,
(
lua_KContext
)
pduel
,
[](
lua_State
*
L
,
int32
status
,
lua_KContext
ctx
)
{
duel
*
pduel
=
(
duel
*
)
ctx
;
duel
*
pduel
=
(
duel
*
)
ctx
;
lua_push
boolean
(
L
,
pduel
->
game_field
->
returns
.
ivalue
[
0
]);
lua_push
integer
(
L
,
pduel
->
game_field
->
returns
.
ivalue
[
0
]);
return
1
;
return
1
;
});
});
}
}
...
...
operations.cpp
View file @
53e59d45
...
@@ -765,8 +765,7 @@ int32 field::remove_overlay_card(uint16 step, uint32 reason, card* pcard, uint8
...
@@ -765,8 +765,7 @@ int32 field::remove_overlay_card(uint16 step, uint32 reason, card* pcard, uint8
return
FALSE
;
return
FALSE
;
}
}
case
1
:
{
case
1
:
{
effect
*
peffect
=
core
.
select_effects
[
returns
.
ivalue
[
0
]];
if
(
effect
*
peffect
=
core
.
select_effects
[
returns
.
ivalue
[
0
]])
{
if
(
peffect
)
{
tevent
e
;
tevent
e
;
e
.
event_cards
=
0
;
e
.
event_cards
=
0
;
e
.
event_player
=
rplayer
;
e
.
event_player
=
rplayer
;
...
@@ -775,8 +774,23 @@ int32 field::remove_overlay_card(uint16 step, uint32 reason, card* pcard, uint8
...
@@ -775,8 +774,23 @@ int32 field::remove_overlay_card(uint16 step, uint32 reason, card* pcard, uint8
e
.
reason_effect
=
core
.
reason_effect
;
e
.
reason_effect
=
core
.
reason_effect
;
e
.
reason_player
=
rplayer
;
e
.
reason_player
=
rplayer
;
solve_continuous
(
rplayer
,
peffect
,
e
);
solve_continuous
(
rplayer
,
peffect
,
e
);
core
.
units
.
begin
()
->
step
=
3
;
core
.
units
.
begin
()
->
peffect
=
peffect
;
return
FALSE
;
}
return
FALSE
;
}
case
2
:
{
uint16
cancelable
=
FALSE
;
if
(
core
.
units
.
begin
()
->
peffect
)
{
int32
replace_count
=
returns
.
ivalue
[
0
];
if
(
replace_count
>=
max
)
return
TRUE
;
min
-=
replace_count
;
max
-=
replace_count
;
if
(
min
<=
0
)
{
cancelable
=
TRUE
;
min
=
0
;
}
core
.
units
.
begin
()
->
arg4
=
replace_count
;
}
}
core
.
select_cards
.
clear
();
core
.
select_cards
.
clear
();
if
(
pcard
)
{
if
(
pcard
)
{
...
@@ -792,21 +806,18 @@ int32 field::remove_overlay_card(uint16 step, uint32 reason, card* pcard, uint8
...
@@ -792,21 +806,18 @@ int32 field::remove_overlay_card(uint16 step, uint32 reason, card* pcard, uint8
pduel
->
write_buffer8
(
HINT_SELECTMSG
);
pduel
->
write_buffer8
(
HINT_SELECTMSG
);
pduel
->
write_buffer8
(
rplayer
);
pduel
->
write_buffer8
(
rplayer
);
pduel
->
write_buffer32
(
519
);
pduel
->
write_buffer32
(
519
);
add_process
(
PROCESSOR_SELECT_CARD
,
0
,
0
,
0
,
rplayer
,
min
+
(
max
<<
16
));
add_process
(
PROCESSOR_SELECT_CARD
,
0
,
0
,
0
,
rplayer
+
(
cancelable
<<
16
)
,
min
+
(
max
<<
16
));
return
FALSE
;
return
FALSE
;
}
}
case
2
:
{
case
3
:
{
card_set
cset
;
card_set
cset
;
for
(
int32
i
=
0
;
i
<
returns
.
bvalue
[
0
];
++
i
)
for
(
int32
i
=
0
;
i
<
returns
.
bvalue
[
0
];
++
i
)
cset
.
insert
(
core
.
select_cards
[
returns
.
bvalue
[
i
+
1
]]);
cset
.
insert
(
core
.
select_cards
[
returns
.
bvalue
[
i
+
1
]]);
send_to
(
&
cset
,
core
.
reason_effect
,
reason
,
rplayer
,
PLAYER_NONE
,
LOCATION_GRAVE
,
0
,
POS_FACEUP
);
send_to
(
&
cset
,
core
.
reason_effect
,
reason
,
rplayer
,
PLAYER_NONE
,
LOCATION_GRAVE
,
0
,
POS_FACEUP
);
return
FALSE
;
return
FALSE
;
}
}
case
3
:
{
return
FALSE
;
}
case
4
:
{
case
4
:
{
returns
.
ivalue
[
0
]
=
1
;
returns
.
ivalue
[
0
]
+=
core
.
units
.
begin
()
->
arg4
;
return
TRUE
;
return
TRUE
;
}
}
}
}
...
@@ -2522,6 +2533,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
...
@@ -2522,6 +2533,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
int32
xminc
=
core
.
limit_xyz_minc
;
int32
xminc
=
core
.
limit_xyz_minc
;
int32
xmaxc
=
core
.
limit_xyz_maxc
;
int32
xmaxc
=
core
.
limit_xyz_maxc
;
group
*
lmaterials
=
core
.
limit_link
;
group
*
lmaterials
=
core
.
limit_link
;
card
*
lcard
=
core
.
limit_link_card
;
int32
lminc
=
core
.
limit_link_minc
;
int32
lminc
=
core
.
limit_link_minc
;
int32
lmaxc
=
core
.
limit_link_maxc
;
int32
lmaxc
=
core
.
limit_link_maxc
;
target
->
filter_spsummon_procedure
(
sumplayer
,
&
eset
,
summon_type
);
target
->
filter_spsummon_procedure
(
sumplayer
,
&
eset
,
summon_type
);
...
@@ -2534,6 +2546,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
...
@@ -2534,6 +2546,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
core
.
limit_xyz_minc
=
xminc
;
core
.
limit_xyz_minc
=
xminc
;
core
.
limit_xyz_maxc
=
xmaxc
;
core
.
limit_xyz_maxc
=
xmaxc
;
core
.
limit_link
=
lmaterials
;
core
.
limit_link
=
lmaterials
;
core
.
limit_link_card
=
lcard
;
core
.
limit_link_minc
=
lminc
;
core
.
limit_link_minc
=
lminc
;
core
.
limit_link_maxc
=
lmaxc
;
core
.
limit_link_maxc
=
lmaxc
;
if
(
!
eset
.
size
())
if
(
!
eset
.
size
())
...
@@ -2573,8 +2586,9 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
...
@@ -2573,8 +2586,9 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
pduel
->
lua
->
add_param
(
core
.
limit_xyz_minc
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
core
.
limit_xyz_minc
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
core
.
limit_xyz_maxc
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
core
.
limit_xyz_maxc
,
PARAM_TYPE_INT
);
}
}
}
else
if
(
core
.
limit_link
)
{
}
else
if
(
core
.
limit_link
||
core
.
limit_link_card
)
{
pduel
->
lua
->
add_param
(
core
.
limit_link
,
PARAM_TYPE_GROUP
);
pduel
->
lua
->
add_param
(
core
.
limit_link
,
PARAM_TYPE_GROUP
);
pduel
->
lua
->
add_param
(
core
.
limit_link_card
,
PARAM_TYPE_CARD
);
if
(
core
.
limit_link_minc
)
{
if
(
core
.
limit_link_minc
)
{
pduel
->
lua
->
add_param
(
core
.
limit_link_minc
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
core
.
limit_link_minc
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
core
.
limit_link_maxc
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
core
.
limit_link_maxc
,
PARAM_TYPE_INT
);
...
@@ -2625,9 +2639,11 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
...
@@ -2625,9 +2639,11 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
core
.
limit_xyz_maxc
=
0
;
core
.
limit_xyz_maxc
=
0
;
}
}
}
}
if
(
core
.
limit_link
)
{
if
(
core
.
limit_link
||
core
.
limit_link_card
)
{
pduel
->
lua
->
add_param
(
core
.
limit_link
,
PARAM_TYPE_GROUP
);
pduel
->
lua
->
add_param
(
core
.
limit_link
,
PARAM_TYPE_GROUP
);
pduel
->
lua
->
add_param
(
core
.
limit_link_card
,
PARAM_TYPE_CARD
);
core
.
limit_link
=
0
;
core
.
limit_link
=
0
;
core
.
limit_link_card
=
0
;
if
(
core
.
limit_link_minc
)
{
if
(
core
.
limit_link_minc
)
{
pduel
->
lua
->
add_param
(
core
.
limit_link_minc
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
core
.
limit_link_minc
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
core
.
limit_link_maxc
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
core
.
limit_link_maxc
,
PARAM_TYPE_INT
);
...
...
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