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
56a07d91
Commit
56a07d91
authored
Jan 29, 2017
by
VanillaSalt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update SetUniqueOnField
parent
7861b594
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
58 additions
and
20 deletions
+58
-20
card.cpp
card.cpp
+14
-9
card.h
card.h
+4
-3
field.cpp
field.cpp
+33
-7
libcard.cpp
libcard.cpp
+5
-1
operations.cpp
operations.cpp
+2
-0
No files found.
card.cpp
View file @
56a07d91
...
@@ -1311,6 +1311,8 @@ int32 card::add_effect(effect* peffect) {
...
@@ -1311,6 +1311,8 @@ int32 card::add_effect(effect* peffect) {
remove_effect
(
rm
->
second
);
remove_effect
(
rm
->
second
);
}
}
}
}
if
(
peffect
->
code
==
EFFECT_CHANGE_CODE
)
unique_uid
=
pduel
->
game_field
->
infos
.
field_id
++
;
eit
=
single_effect
.
insert
(
std
::
make_pair
(
peffect
->
code
,
peffect
));
eit
=
single_effect
.
insert
(
std
::
make_pair
(
peffect
->
code
,
peffect
));
}
else
if
(
peffect
->
type
&
EFFECT_TYPE_EQUIP
)
{
}
else
if
(
peffect
->
type
&
EFFECT_TYPE_EQUIP
)
{
eit
=
equip_effect
.
insert
(
std
::
make_pair
(
peffect
->
code
,
peffect
));
eit
=
equip_effect
.
insert
(
std
::
make_pair
(
peffect
->
code
,
peffect
));
...
@@ -1388,6 +1390,8 @@ void card::remove_effect(effect* peffect) {
...
@@ -1388,6 +1390,8 @@ void card::remove_effect(effect* peffect) {
void
card
::
remove_effect
(
effect
*
peffect
,
effect_container
::
iterator
it
)
{
void
card
::
remove_effect
(
effect
*
peffect
,
effect_container
::
iterator
it
)
{
card
*
check_target
=
this
;
card
*
check_target
=
this
;
if
(
peffect
->
type
&
EFFECT_TYPE_SINGLE
)
{
if
(
peffect
->
type
&
EFFECT_TYPE_SINGLE
)
{
if
(
peffect
->
code
==
EFFECT_CHANGE_CODE
)
unique_uid
=
pduel
->
game_field
->
infos
.
field_id
++
;
single_effect
.
erase
(
it
);
single_effect
.
erase
(
it
);
}
else
if
(
peffect
->
type
&
EFFECT_TYPE_EQUIP
)
{
}
else
if
(
peffect
->
type
&
EFFECT_TYPE_EQUIP
)
{
equip_effect
.
erase
(
it
);
equip_effect
.
erase
(
it
);
...
@@ -2289,15 +2293,16 @@ int32 card::check_fusion_substitute(card* fcard) {
...
@@ -2289,15 +2293,16 @@ int32 card::check_fusion_substitute(card* fcard) {
return
TRUE
;
return
TRUE
;
return
FALSE
;
return
FALSE
;
}
}
int32
card
::
is_equipable
(
card
*
pcard
)
{
int32
card
::
check_unique_code
(
card
*
pcard
)
{
effect_set
eset
;
if
(
!
unique_code
)
if
(
this
==
pcard
||
pcard
->
current
.
location
!=
LOCATION_MZONE
)
return
FALSE
;
filter_effect
(
EFFECT_EQUIP_LIMIT
,
&
eset
);
if
(
eset
.
size
()
==
0
)
return
FALSE
;
return
FALSE
;
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
if
(
unique_code
==
1
)
{
if
(
eset
[
i
]
->
get_value
(
pcard
))
pduel
->
lua
->
add_param
(
pcard
,
PARAM_TYPE_CARD
);
return
pduel
->
lua
->
get_function_value
(
unique_function
,
1
);
}
uint32
code1
=
pcard
->
get_code
();
uint32
code2
=
pcard
->
get_another_code
();
if
(
code1
==
unique_code
||
(
code2
&&
code2
==
unique_code
))
return
TRUE
;
return
TRUE
;
return
FALSE
;
return
FALSE
;
}
}
...
...
card.h
View file @
56a07d91
...
@@ -126,15 +126,16 @@ public:
...
@@ -126,15 +126,16 @@ public:
uint16
turnid
;
uint16
turnid
;
uint16
turn_counter
;
uint16
turn_counter
;
uint8
unique_pos
[
2
];
uint8
unique_pos
[
2
];
uint
16
unique_uid
;
uint
32
unique_uid
;
uint32
unique_code
;
uint32
unique_code
;
uint32
unique_location
;
uint32
unique_location
;
int32
unique_function
;
effect
*
unique_effect
;
uint32
spsummon_code
;
uint32
spsummon_code
;
uint16
spsummon_counter
[
2
];
uint16
spsummon_counter
[
2
];
uint16
spsummon_counter_rst
[
2
];
uint16
spsummon_counter_rst
[
2
];
uint8
assume_type
;
uint8
assume_type
;
uint32
assume_value
;
uint32
assume_value
;
effect
*
unique_effect
;
card
*
equiping_target
;
card
*
equiping_target
;
card
*
pre_equip_target
;
card
*
pre_equip_target
;
card
*
overlay_target
;
card
*
overlay_target
;
...
@@ -247,7 +248,7 @@ public:
...
@@ -247,7 +248,7 @@ public:
void
fusion_select
(
uint8
playerid
,
group
*
fusion_m
,
card
*
cg
,
uint32
chkf
);
void
fusion_select
(
uint8
playerid
,
group
*
fusion_m
,
card
*
cg
,
uint32
chkf
);
int32
check_fusion_substitute
(
card
*
fcard
);
int32
check_fusion_substitute
(
card
*
fcard
);
int32
is_equipabl
e
(
card
*
pcard
);
int32
check_unique_cod
e
(
card
*
pcard
);
int32
is_summonable_card
();
int32
is_summonable_card
();
int32
is_fusion_summonable_card
(
uint32
summon_type
);
int32
is_fusion_summonable_card
(
uint32
summon_type
);
int32
is_spsummonable
(
effect
*
peffect
);
int32
is_spsummonable
(
effect
*
peffect
);
...
...
field.cpp
View file @
56a07d91
...
@@ -218,6 +218,7 @@ void field::add_card(uint8 playerid, card* pcard, uint8 location, uint8 sequence
...
@@ -218,6 +218,7 @@ void field::add_card(uint8 playerid, card* pcard, uint8 location, uint8 sequence
pcard
->
apply_field_effect
();
pcard
->
apply_field_effect
();
pcard
->
fieldid
=
infos
.
field_id
++
;
pcard
->
fieldid
=
infos
.
field_id
++
;
pcard
->
fieldid_r
=
pcard
->
fieldid
;
pcard
->
fieldid_r
=
pcard
->
fieldid
;
pcard
->
unique_uid
=
pcard
->
fieldid
;
pcard
->
turnid
=
infos
.
turn_id
;
pcard
->
turnid
=
infos
.
turn_id
;
if
(
location
==
LOCATION_MZONE
)
if
(
location
==
LOCATION_MZONE
)
player
[
playerid
].
used_location
|=
1
<<
sequence
;
player
[
playerid
].
used_location
|=
1
<<
sequence
;
...
@@ -1529,7 +1530,6 @@ void field::add_unique_card(card* pcard) {
...
@@ -1529,7 +1530,6 @@ void field::add_unique_card(card* pcard) {
core
.
unique_cards
[
con
].
insert
(
pcard
);
core
.
unique_cards
[
con
].
insert
(
pcard
);
if
(
pcard
->
unique_pos
[
1
])
if
(
pcard
->
unique_pos
[
1
])
core
.
unique_cards
[
1
-
con
].
insert
(
pcard
);
core
.
unique_cards
[
1
-
con
].
insert
(
pcard
);
pcard
->
unique_uid
=
infos
.
copy_id
++
;
}
}
void
field
::
remove_unique_card
(
card
*
pcard
)
{
void
field
::
remove_unique_card
(
card
*
pcard
)
{
...
@@ -1543,16 +1543,42 @@ void field::remove_unique_card(card* pcard) {
...
@@ -1543,16 +1543,42 @@ void field::remove_unique_card(card* pcard) {
}
}
// return: pcard->unique_effect or 0
// return: pcard->unique_effect or 0
effect
*
field
::
check_unique_onfield
(
card
*
pcard
,
uint8
controler
,
uint8
location
)
{
effect
*
field
::
check_unique_onfield
(
card
*
pcard
,
uint8
controler
,
uint8
location
)
{
if
(
!
pcard
->
unique_code
)
return
0
;
for
(
auto
iter
=
core
.
unique_cards
[
controler
].
begin
();
iter
!=
core
.
unique_cards
[
controler
].
end
();
++
iter
)
{
for
(
auto
iter
=
core
.
unique_cards
[
controler
].
begin
();
iter
!=
core
.
unique_cards
[
controler
].
end
();
++
iter
)
{
card
*
ucard
=
*
iter
;
card
*
ucard
=
*
iter
;
if
((
ucard
!=
pcard
)
&&
ucard
->
is_position
(
POS_FACEUP
)
&&
ucard
->
get_status
(
STATUS_EFFECT_ENABLED
)
if
(
ucard
==
pcard
)
&&
(
ucard
->
unique_code
==
pcard
->
unique_code
)
&&
(
ucard
->
unique_location
&
location
)
continue
;
if
(
ucard
->
is_position
(
POS_FACEUP
)
&&
ucard
->
get_status
(
STATUS_EFFECT_ENABLED
)
&&
!
ucard
->
get_status
(
STATUS_DISABLED
|
STATUS_FORBIDDEN
)
&&
ucard
->
check_unique_code
(
ucard
)
&&
ucard
->
check_unique_code
(
pcard
)
&&
(
ucard
->
unique_location
&
location
)
&&
(
!
(
pcard
->
current
.
location
&
ucard
->
unique_location
)
||
pcard
->
is_position
(
POS_FACEDOWN
)
&&
(
!
(
pcard
->
current
.
location
&
ucard
->
unique_location
)
||
pcard
->
is_position
(
POS_FACEDOWN
)
||
((
!
pcard
->
get_status
(
STATUS_DISABLED
|
STATUS_FORBIDDEN
)
||
!
ucard
->
get_status
(
STATUS_DISABLED
|
STATUS_FORBIDDEN
))
&&
ucard
->
unique_uid
<
pcard
->
unique_uid
)))
||
(
ucard
->
unique_uid
<
pcard
->
unique_uid
)))
return
ucard
->
unique_effect
;
}
if
(
!
pcard
->
unique_code
||
!
pcard
->
check_unique_code
(
pcard
))
return
0
;
int32
is_tofield
=
!
(
pcard
->
current
.
location
&
location
);
int32
is_flipping
=
pcard
->
is_position
(
POS_FACEDOWN
);
int32
is_enabled
=
pcard
->
get_status
(
STATUS_EFFECT_ENABLED
)
&&
!
pcard
->
get_status
(
STATUS_DISABLED
|
STATUS_FORBIDDEN
);
for
(
int32
p
=
0
;
p
<
2
;
++
p
)
{
if
(
pcard
->
unique_pos
[
p
])
{
if
(
pcard
->
unique_location
&
LOCATION_MZONE
)
{
for
(
int32
i
=
0
;
i
<
5
;
++
i
)
{
card
*
ucard
=
player
[
controler
^
p
].
list_mzone
[
i
];
if
(
ucard
&&
(
ucard
!=
pcard
)
&&
ucard
->
is_position
(
POS_FACEUP
)
&&
pcard
->
check_unique_code
(
ucard
)
&&
(
is_tofield
||
is_flipping
||
(
is_enabled
&&
(
ucard
->
unique_uid
<
pcard
->
unique_uid
))))
return
pcard
->
unique_effect
;
return
pcard
->
unique_effect
;
}
}
}
if
(
pcard
->
unique_location
&
LOCATION_SZONE
)
{
for
(
int32
i
=
0
;
i
<
8
;
++
i
)
{
card
*
ucard
=
player
[
controler
^
p
].
list_szone
[
i
];
if
(
ucard
&&
(
ucard
!=
pcard
)
&&
ucard
->
is_position
(
POS_FACEUP
)
&&
pcard
->
check_unique_code
(
ucard
)
&&
(
is_tofield
||
is_flipping
||
(
is_enabled
&&
(
ucard
->
unique_uid
<
pcard
->
unique_uid
))))
return
pcard
->
unique_effect
;
}
}
}
}
return
0
;
return
0
;
}
}
...
...
libcard.cpp
View file @
56a07d91
...
@@ -2346,6 +2346,10 @@ int32 scriptlib::card_set_unique_onfield(lua_State *L) {
...
@@ -2346,6 +2346,10 @@ int32 scriptlib::card_set_unique_onfield(lua_State *L) {
card
*
pcard
=
*
(
card
**
)
lua_touserdata
(
L
,
1
);
card
*
pcard
=
*
(
card
**
)
lua_touserdata
(
L
,
1
);
pcard
->
unique_pos
[
0
]
=
lua_tointeger
(
L
,
2
);
pcard
->
unique_pos
[
0
]
=
lua_tointeger
(
L
,
2
);
pcard
->
unique_pos
[
1
]
=
lua_tointeger
(
L
,
3
);
pcard
->
unique_pos
[
1
]
=
lua_tointeger
(
L
,
3
);
if
(
lua_isfunction
(
L
,
4
))
{
pcard
->
unique_code
=
1
;
pcard
->
unique_function
=
interpreter
::
get_function_handle
(
L
,
4
);
}
else
pcard
->
unique_code
=
lua_tointeger
(
L
,
4
);
pcard
->
unique_code
=
lua_tointeger
(
L
,
4
);
uint32
location
=
LOCATION_ONFIELD
;
uint32
location
=
LOCATION_ONFIELD
;
if
(
lua_gettop
(
L
)
>
4
)
if
(
lua_gettop
(
L
)
>
4
)
...
...
operations.cpp
View file @
56a07d91
...
@@ -1759,6 +1759,7 @@ int32 field::flip_summon(uint16 step, uint8 sumplayer, card * target) {
...
@@ -1759,6 +1759,7 @@ int32 field::flip_summon(uint16 step, uint8 sumplayer, card * target) {
target
->
previous
.
position
=
target
->
current
.
position
;
target
->
previous
.
position
=
target
->
current
.
position
;
target
->
current
.
position
=
POS_FACEUP_ATTACK
;
target
->
current
.
position
=
POS_FACEUP_ATTACK
;
target
->
fieldid
=
infos
.
field_id
++
;
target
->
fieldid
=
infos
.
field_id
++
;
target
->
unique_uid
=
target
->
fieldid
;
core
.
phase_action
=
TRUE
;
core
.
phase_action
=
TRUE
;
core
.
flipsummon_state_count
[
sumplayer
]
++
;
core
.
flipsummon_state_count
[
sumplayer
]
++
;
check_card_counter
(
target
,
4
,
sumplayer
);
check_card_counter
(
target
,
4
,
sumplayer
);
...
@@ -4009,6 +4010,7 @@ int32 field::change_position(uint16 step, group * targets, effect * reason_effec
...
@@ -4009,6 +4010,7 @@ int32 field::change_position(uint16 step, group * targets, effect * reason_effec
core
.
hint_timing
[
pcard
->
current
.
controler
]
|=
TIMING_POS_CHANGE
;
core
.
hint_timing
[
pcard
->
current
.
controler
]
|=
TIMING_POS_CHANGE
;
if
((
opos
&
POS_FACEDOWN
)
&&
(
npos
&
POS_FACEUP
))
{
if
((
opos
&
POS_FACEDOWN
)
&&
(
npos
&
POS_FACEUP
))
{
pcard
->
fieldid
=
infos
.
field_id
++
;
pcard
->
fieldid
=
infos
.
field_id
++
;
pcard
->
unique_uid
=
pcard
->
fieldid
;
if
(
pcard
->
current
.
location
==
LOCATION_MZONE
)
{
if
(
pcard
->
current
.
location
==
LOCATION_MZONE
)
{
raise_single_event
(
pcard
,
0
,
EVENT_FLIP
,
reason_effect
,
0
,
reason_player
,
0
,
flag
);
raise_single_event
(
pcard
,
0
,
EVENT_FLIP
,
reason_effect
,
0
,
reason_player
,
0
,
flag
);
flips
.
insert
(
pcard
);
flips
.
insert
(
pcard
);
...
...
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