Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
YGOProUnity_V2
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
fallenstardust
YGOProUnity_V2
Commits
facfa14d
Commit
facfa14d
authored
Sep 30, 2020
by
mercury233
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update ocgcore
parent
21f22a05
Changes
16
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
340 additions
and
256 deletions
+340
-256
AI_core_vs2017solution/ocgcore/card.cpp
AI_core_vs2017solution/ocgcore/card.cpp
+42
-51
AI_core_vs2017solution/ocgcore/common.h
AI_core_vs2017solution/ocgcore/common.h
+3
-0
AI_core_vs2017solution/ocgcore/effect.cpp
AI_core_vs2017solution/ocgcore/effect.cpp
+22
-17
AI_core_vs2017solution/ocgcore/effect.h
AI_core_vs2017solution/ocgcore/effect.h
+4
-1
AI_core_vs2017solution/ocgcore/effectset.h
AI_core_vs2017solution/ocgcore/effectset.h
+9
-0
AI_core_vs2017solution/ocgcore/field.cpp
AI_core_vs2017solution/ocgcore/field.cpp
+60
-45
AI_core_vs2017solution/ocgcore/field.h
AI_core_vs2017solution/ocgcore/field.h
+2
-2
AI_core_vs2017solution/ocgcore/libcard.cpp
AI_core_vs2017solution/ocgcore/libcard.cpp
+79
-39
AI_core_vs2017solution/ocgcore/libduel.cpp
AI_core_vs2017solution/ocgcore/libduel.cpp
+32
-18
AI_core_vs2017solution/ocgcore/libgroup.cpp
AI_core_vs2017solution/ocgcore/libgroup.cpp
+2
-2
AI_core_vs2017solution/ocgcore/operations.cpp
AI_core_vs2017solution/ocgcore/operations.cpp
+66
-69
AI_core_vs2017solution/ocgcore/playerop.cpp
AI_core_vs2017solution/ocgcore/playerop.cpp
+5
-5
AI_core_vs2017solution/ocgcore/processor.cpp
AI_core_vs2017solution/ocgcore/processor.cpp
+13
-7
AI_core_vs2017solution/ocgcore/scriptlib.h
AI_core_vs2017solution/ocgcore/scriptlib.h
+1
-0
Assets/Plugins/x64/ocgcore.dll
Assets/Plugins/x64/ocgcore.dll
+0
-0
Assets/Plugins/x86/ocgcore.dll
Assets/Plugins/x86/ocgcore.dll
+0
-0
No files found.
AI_core_vs2017solution/ocgcore/card.cpp
View file @
facfa14d
...
@@ -1580,7 +1580,6 @@ void card::enable_field_effect(bool enabled) {
...
@@ -1580,7 +1580,6 @@ void card::enable_field_effect(bool enabled) {
reset
(
RESET_DISABLE
,
RESET_EVENT
);
reset
(
RESET_DISABLE
,
RESET_EVENT
);
}
else
}
else
set_status
(
STATUS_EFFECT_ENABLED
,
FALSE
);
set_status
(
STATUS_EFFECT_ENABLED
,
FALSE
);
filter_immune_effect
();
if
(
get_status
(
STATUS_DISABLED
|
STATUS_FORBIDDEN
))
if
(
get_status
(
STATUS_DISABLED
|
STATUS_FORBIDDEN
))
return
;
return
;
filter_disable_related_cards
();
filter_disable_related_cards
();
...
@@ -1966,26 +1965,17 @@ void card::reset_effect_count() {
...
@@ -1966,26 +1965,17 @@ void card::reset_effect_count() {
// refresh STATUS_DISABLED based on EFFECT_DISABLE and EFFECT_CANNOT_DISABLE
// refresh STATUS_DISABLED based on EFFECT_DISABLE and EFFECT_CANNOT_DISABLE
// refresh STATUS_FORBIDDEN based on EFFECT_FORBIDDEN
// refresh STATUS_FORBIDDEN based on EFFECT_FORBIDDEN
void
card
::
refresh_disable_status
()
{
void
card
::
refresh_disable_status
()
{
// forbidden
int32
pre_fb
=
is_status
(
STATUS_FORBIDDEN
);
filter_immune_effect
();
filter_immune_effect
();
// forbidden
if
(
is_affected_by_effect
(
EFFECT_FORBIDDEN
))
if
(
is_affected_by_effect
(
EFFECT_FORBIDDEN
))
set_status
(
STATUS_FORBIDDEN
,
TRUE
);
set_status
(
STATUS_FORBIDDEN
,
TRUE
);
else
else
set_status
(
STATUS_FORBIDDEN
,
FALSE
);
set_status
(
STATUS_FORBIDDEN
,
FALSE
);
int32
cur_fb
=
is_status
(
STATUS_FORBIDDEN
);
if
(
pre_fb
!=
cur_fb
)
filter_immune_effect
();
// disabled
// disabled
int32
pre_dis
=
is_status
(
STATUS_DISABLED
);
filter_immune_effect
();
if
(
!
is_affected_by_effect
(
EFFECT_CANNOT_DISABLE
)
&&
is_affected_by_effect
(
EFFECT_DISABLE
))
if
(
!
is_affected_by_effect
(
EFFECT_CANNOT_DISABLE
)
&&
is_affected_by_effect
(
EFFECT_DISABLE
))
set_status
(
STATUS_DISABLED
,
TRUE
);
set_status
(
STATUS_DISABLED
,
TRUE
);
else
else
set_status
(
STATUS_DISABLED
,
FALSE
);
set_status
(
STATUS_DISABLED
,
FALSE
);
int32
cur_dis
=
is_status
(
STATUS_DISABLED
);
if
(
pre_dis
!=
cur_dis
)
filter_immune_effect
();
}
}
std
::
tuple
<
uint8
,
effect
*>
card
::
refresh_control_status
()
{
std
::
tuple
<
uint8
,
effect
*>
card
::
refresh_control_status
()
{
uint8
final
=
owner
;
uint8
final
=
owner
;
...
@@ -2068,18 +2058,31 @@ void card::release_relation(effect* peffect) {
...
@@ -2068,18 +2058,31 @@ void card::release_relation(effect* peffect) {
int32
card
::
leave_field_redirect
(
uint32
reason
)
{
int32
card
::
leave_field_redirect
(
uint32
reason
)
{
effect_set
es
;
effect_set
es
;
uint32
redirect
;
uint32
redirect
;
uint32
redirects
=
0
;
if
(
data
.
type
&
TYPE_TOKEN
)
if
(
data
.
type
&
TYPE_TOKEN
)
return
0
;
return
0
;
filter_effect
(
EFFECT_LEAVE_FIELD_REDIRECT
,
&
es
);
filter_effect
(
EFFECT_LEAVE_FIELD_REDIRECT
,
&
es
);
for
(
int32
i
=
0
;
i
<
es
.
size
();
++
i
)
{
for
(
int32
i
=
0
;
i
<
es
.
size
();
++
i
)
{
redirect
=
es
[
i
]
->
get_value
(
this
,
0
);
redirect
=
es
[
i
]
->
get_value
(
this
,
0
);
if
((
redirect
&
LOCATION_HAND
)
&&
!
is_affected_by_effect
(
EFFECT_CANNOT_TO_HAND
)
&&
pduel
->
game_field
->
is_player_can_send_to_hand
(
es
[
i
]
->
get_handler_player
(),
this
))
if
((
redirect
&
LOCATION_HAND
)
&&
!
is_affected_by_effect
(
EFFECT_CANNOT_TO_HAND
)
&&
pduel
->
game_field
->
is_player_can_send_to_hand
(
es
[
i
]
->
get_handler_player
(),
this
))
re
turn
redirect
;
re
directs
|=
redirect
;
else
if
((
redirect
&
LOCATION_DECK
)
&&
!
is_affected_by_effect
(
EFFECT_CANNOT_TO_DECK
)
&&
pduel
->
game_field
->
is_player_can_send_to_deck
(
es
[
i
]
->
get_handler_player
(),
this
))
else
if
((
redirect
&
LOCATION_DECK
)
&&
!
is_affected_by_effect
(
EFFECT_CANNOT_TO_DECK
)
&&
pduel
->
game_field
->
is_player_can_send_to_deck
(
es
[
i
]
->
get_handler_player
(),
this
))
re
turn
redirect
;
re
directs
|=
redirect
;
else
if
((
redirect
&
LOCATION_REMOVED
)
&&
!
is_affected_by_effect
(
EFFECT_CANNOT_REMOVE
)
&&
pduel
->
game_field
->
is_player_can_remove
(
es
[
i
]
->
get_handler_player
(),
this
,
REASON_EFFECT
))
else
if
((
redirect
&
LOCATION_REMOVED
)
&&
!
is_affected_by_effect
(
EFFECT_CANNOT_REMOVE
)
&&
pduel
->
game_field
->
is_player_can_remove
(
es
[
i
]
->
get_handler_player
(),
this
,
REASON_EFFECT
))
return
redirect
;
redirects
|=
redirect
;
}
}
if
(
redirects
&
LOCATION_REMOVED
)
return
LOCATION_REMOVED
;
// the ruling for the priority of the following redirects can't be confirmed for now
if
(
redirects
&
LOCATION_DECK
)
{
if
(
redirects
&
LOCATION_DECKBOT
)
return
LOCATION_DECKBOT
;
if
(
redirects
&
LOCATION_DECKSHF
)
return
LOCATION_DECKSHF
;
return
LOCATION_DECK
;
}
if
(
redirects
&
LOCATION_HAND
)
return
LOCATION_HAND
;
return
0
;
return
0
;
}
}
int32
card
::
destination_redirect
(
uint8
destination
,
uint32
reason
)
{
int32
card
::
destination_redirect
(
uint8
destination
,
uint32
reason
)
{
...
@@ -2227,9 +2230,8 @@ int32 card::get_counter(uint16 countertype) {
...
@@ -2227,9 +2230,8 @@ int32 card::get_counter(uint16 countertype) {
void
card
::
set_material
(
card_set
*
materials
)
{
void
card
::
set_material
(
card_set
*
materials
)
{
if
(
!
materials
)
{
if
(
!
materials
)
{
material_cards
.
clear
();
material_cards
.
clear
();
return
;
}
else
}
material_cards
=
*
materials
;
material_cards
=
*
materials
;
for
(
auto
&
pcard
:
material_cards
)
for
(
auto
&
pcard
:
material_cards
)
pcard
->
current
.
reason_card
=
this
;
pcard
->
current
.
reason_card
=
this
;
effect_set
eset
;
effect_set
eset
;
...
@@ -2373,44 +2375,40 @@ void card::filter_single_continuous_effect(int32 code, effect_set* eset, uint8 s
...
@@ -2373,44 +2375,40 @@ void card::filter_single_continuous_effect(int32 code, effect_set* eset, uint8 s
}
}
// refresh this->immune_effect
// refresh this->immune_effect
void
card
::
filter_immune_effect
()
{
void
card
::
filter_immune_effect
()
{
effect
*
peffect
;
immune_effect
.
clear
();
immune_effect
.
clear
();
auto
rg
=
single_effect
.
equal_range
(
EFFECT_IMMUNE_EFFECT
);
auto
rg
=
single_effect
.
equal_range
(
EFFECT_IMMUNE_EFFECT
);
for
(;
rg
.
first
!=
rg
.
second
;
++
rg
.
first
)
{
for
(;
rg
.
first
!=
rg
.
second
;
++
rg
.
first
)
{
peffect
=
rg
.
first
->
second
;
effect
*
peffect
=
rg
.
first
->
second
;
if
(
peffect
->
is_available
())
immune_effect
.
add_item
(
peffect
);
immune_effect
.
add_item
(
peffect
);
}
}
for
(
auto
&
pcard
:
equiping_cards
)
{
for
(
auto
&
pcard
:
equiping_cards
)
{
rg
=
pcard
->
equip_effect
.
equal_range
(
EFFECT_IMMUNE_EFFECT
);
rg
=
pcard
->
equip_effect
.
equal_range
(
EFFECT_IMMUNE_EFFECT
);
for
(;
rg
.
first
!=
rg
.
second
;
++
rg
.
first
)
{
for
(;
rg
.
first
!=
rg
.
second
;
++
rg
.
first
)
{
peffect
=
rg
.
first
->
second
;
effect
*
peffect
=
rg
.
first
->
second
;
if
(
peffect
->
is_available
())
immune_effect
.
add_item
(
peffect
);
immune_effect
.
add_item
(
peffect
);
}
}
}
}
for
(
auto
&
pcard
:
effect_target_owner
)
{
for
(
auto
&
pcard
:
effect_target_owner
)
{
rg
=
pcard
->
target_effect
.
equal_range
(
EFFECT_IMMUNE_EFFECT
);
rg
=
pcard
->
target_effect
.
equal_range
(
EFFECT_IMMUNE_EFFECT
);
for
(;
rg
.
first
!=
rg
.
second
;
++
rg
.
first
)
{
for
(;
rg
.
first
!=
rg
.
second
;
++
rg
.
first
)
{
peffect
=
rg
.
first
->
second
;
effect
*
peffect
=
rg
.
first
->
second
;
if
(
peffect
->
is_target
(
this
)
&&
peffect
->
is_available
()
)
if
(
peffect
->
is_target
(
this
))
immune_effect
.
add_item
(
peffect
);
immune_effect
.
add_item
(
peffect
);
}
}
}
}
for
(
auto
&
pcard
:
xyz_materials
)
{
for
(
auto
&
pcard
:
xyz_materials
)
{
rg
=
pcard
->
xmaterial_effect
.
equal_range
(
EFFECT_IMMUNE_EFFECT
);
rg
=
pcard
->
xmaterial_effect
.
equal_range
(
EFFECT_IMMUNE_EFFECT
);
for
(;
rg
.
first
!=
rg
.
second
;
++
rg
.
first
)
{
for
(;
rg
.
first
!=
rg
.
second
;
++
rg
.
first
)
{
peffect
=
rg
.
first
->
second
;
effect
*
peffect
=
rg
.
first
->
second
;
if
(
peffect
->
type
&
EFFECT_TYPE_FIELD
)
if
(
peffect
->
type
&
EFFECT_TYPE_FIELD
)
continue
;
continue
;
if
(
peffect
->
is_available
())
immune_effect
.
add_item
(
peffect
);
immune_effect
.
add_item
(
peffect
);
}
}
}
}
rg
=
pduel
->
game_field
->
effects
.
aura_effect
.
equal_range
(
EFFECT_IMMUNE_EFFECT
);
rg
=
pduel
->
game_field
->
effects
.
aura_effect
.
equal_range
(
EFFECT_IMMUNE_EFFECT
);
for
(;
rg
.
first
!=
rg
.
second
;
++
rg
.
first
)
{
for
(;
rg
.
first
!=
rg
.
second
;
++
rg
.
first
)
{
peffect
=
rg
.
first
->
second
;
effect
*
peffect
=
rg
.
first
->
second
;
if
(
peffect
->
is_target
(
this
)
&&
peffect
->
is_available
()
)
if
(
peffect
->
is_target
(
this
))
immune_effect
.
add_item
(
peffect
);
immune_effect
.
add_item
(
peffect
);
}
}
immune_effect
.
sort
();
immune_effect
.
sort
();
...
@@ -2625,7 +2623,7 @@ void card::filter_spsummon_procedure(uint8 playerid, effect_set* peset, uint32 s
...
@@ -2625,7 +2623,7 @@ void card::filter_spsummon_procedure(uint8 playerid, effect_set* peset, uint32 s
toplayer
=
playerid
;
toplayer
=
playerid
;
}
}
if
(
peffect
->
is_available
()
&&
peffect
->
check_count_limit
(
playerid
)
&&
is_spsummonable
(
peffect
)
if
(
peffect
->
is_available
()
&&
peffect
->
check_count_limit
(
playerid
)
&&
is_spsummonable
(
peffect
)
&&
!
pduel
->
game_field
->
check_unique_onfield
(
this
,
toplayer
,
LOCATION_MZONE
))
{
&&
((
topos
&
POS_FACEDOWN
)
||
!
pduel
->
game_field
->
check_unique_onfield
(
this
,
toplayer
,
LOCATION_MZONE
)
))
{
effect
*
sumeffect
=
pduel
->
game_field
->
core
.
reason_effect
;
effect
*
sumeffect
=
pduel
->
game_field
->
core
.
reason_effect
;
if
(
!
sumeffect
)
if
(
!
sumeffect
)
sumeffect
=
peffect
;
sumeffect
=
peffect
;
...
@@ -2859,7 +2857,7 @@ void card::get_unique_target(card_set* cset, int32 controler, card* icard) {
...
@@ -2859,7 +2857,7 @@ void card::get_unique_target(card_set* cset, int32 controler, card* icard) {
const
auto
&
player
=
pduel
->
game_field
->
player
[
controler
^
p
];
const
auto
&
player
=
pduel
->
game_field
->
player
[
controler
^
p
];
if
(
unique_location
&
LOCATION_MZONE
)
{
if
(
unique_location
&
LOCATION_MZONE
)
{
for
(
auto
&
pcard
:
player
.
list_mzone
)
{
for
(
auto
&
pcard
:
player
.
list_mzone
)
{
if
(
pcard
&&
(
pcard
!=
icard
)
&&
pcard
->
is_position
(
POS_FACEUP
)
&&
!
pcard
->
get_status
(
STATUS_
BATTLE_DESTROYED
|
STATUS_
SPSUMMON_STEP
)
if
(
pcard
&&
(
pcard
!=
icard
)
&&
pcard
->
is_position
(
POS_FACEUP
)
&&
!
pcard
->
get_status
(
STATUS_SPSUMMON_STEP
)
&&
check_unique_code
(
pcard
))
&&
check_unique_code
(
pcard
))
cset
->
insert
(
pcard
);
cset
->
insert
(
pcard
);
}
}
...
@@ -2913,8 +2911,8 @@ int32 card::is_fusion_summonable_card(uint32 summon_type) {
...
@@ -2913,8 +2911,8 @@ int32 card::is_fusion_summonable_card(uint32 summon_type) {
effect_set
eset
;
effect_set
eset
;
filter_effect
(
EFFECT_SPSUMMON_CONDITION
,
&
eset
);
filter_effect
(
EFFECT_SPSUMMON_CONDITION
,
&
eset
);
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
pduel
->
lua
->
add_param
(
(
void
*
)
0
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
pduel
->
game_field
->
core
.
reason_effect
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
(
void
*
)
0
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
pduel
->
game_field
->
core
.
reason_player
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
summon_type
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
summon_type
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
((
void
*
)
0
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
((
void
*
)
0
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
((
void
*
)
0
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
((
void
*
)
0
,
PARAM_TYPE_INT
);
...
@@ -3026,7 +3024,7 @@ int32 card::is_can_be_summoned(uint8 playerid, uint8 ignore_count, effect* peffe
...
@@ -3026,7 +3024,7 @@ int32 card::is_can_be_summoned(uint8 playerid, uint8 ignore_count, effect* peffe
effect_set
proc
;
effect_set
proc
;
int32
res
=
filter_summon_procedure
(
playerid
,
&
proc
,
ignore_count
,
min_tribute
,
zone
);
int32
res
=
filter_summon_procedure
(
playerid
,
&
proc
,
ignore_count
,
min_tribute
,
zone
);
if
(
peffect
)
{
if
(
peffect
)
{
if
(
res
<
0
||
!
pduel
->
game_field
->
is_player_can_summon
(
peffect
->
get_value
(),
playerid
,
this
,
playerid
))
{
if
(
res
<
0
||
!
check_summon_procedure
(
peffect
,
playerid
,
ignore_count
,
min_tribute
,
zone
))
{
pduel
->
game_field
->
restore_lp_cost
();
pduel
->
game_field
->
restore_lp_cost
();
return
FALSE
;
return
FALSE
;
}
}
...
@@ -3133,17 +3131,6 @@ int32 card::is_special_summonable(uint8 playerid, uint32 summon_type) {
...
@@ -3133,17 +3131,6 @@ int32 card::is_special_summonable(uint8 playerid, uint32 summon_type) {
}
}
effect_set
eset
;
effect_set
eset
;
filter_spsummon_procedure
(
playerid
,
&
eset
,
summon_type
);
filter_spsummon_procedure
(
playerid
,
&
eset
,
summon_type
);
pduel
->
game_field
->
core
.
limit_tuner
=
0
;
pduel
->
game_field
->
core
.
limit_syn
=
0
;
pduel
->
game_field
->
core
.
limit_syn_minc
=
0
;
pduel
->
game_field
->
core
.
limit_syn_maxc
=
0
;
pduel
->
game_field
->
core
.
limit_xyz
=
0
;
pduel
->
game_field
->
core
.
limit_xyz_minc
=
0
;
pduel
->
game_field
->
core
.
limit_xyz_maxc
=
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_maxc
=
0
;
pduel
->
game_field
->
restore_lp_cost
();
pduel
->
game_field
->
restore_lp_cost
();
return
eset
.
size
();
return
eset
.
size
();
}
}
...
@@ -3164,7 +3151,9 @@ int32 card::is_can_be_special_summoned(effect* reason_effect, uint32 sumtype, ui
...
@@ -3164,7 +3151,9 @@ int32 card::is_can_be_special_summoned(effect* reason_effect, uint32 sumtype, ui
if
((
data
.
type
&
TYPE_PENDULUM
)
&&
current
.
location
==
LOCATION_EXTRA
&&
(
current
.
position
&
POS_FACEUP
)
if
((
data
.
type
&
TYPE_PENDULUM
)
&&
current
.
location
==
LOCATION_EXTRA
&&
(
current
.
position
&
POS_FACEUP
)
&&
(
sumtype
==
SUMMON_TYPE_FUSION
||
sumtype
==
SUMMON_TYPE_SYNCHRO
||
sumtype
==
SUMMON_TYPE_XYZ
))
&&
(
sumtype
==
SUMMON_TYPE_FUSION
||
sumtype
==
SUMMON_TYPE_SYNCHRO
||
sumtype
==
SUMMON_TYPE_XYZ
))
return
FALSE
;
return
FALSE
;
if
(((
sumpos
&
POS_FACEDOWN
)
==
0
)
&&
pduel
->
game_field
->
check_unique_onfield
(
this
,
toplayer
,
LOCATION_MZONE
))
if
((
sumpos
&
POS_FACEDOWN
)
&&
pduel
->
game_field
->
is_player_affected_by_effect
(
sumplayer
,
EFFECT_DEVINE_LIGHT
))
sumpos
=
(
sumpos
&
POS_FACEUP
)
|
((
sumpos
&
POS_FACEDOWN
)
>>
1
);
if
(
!
(
sumpos
&
POS_FACEDOWN
)
&&
pduel
->
game_field
->
check_unique_onfield
(
this
,
toplayer
,
LOCATION_MZONE
))
return
FALSE
;
return
FALSE
;
sumtype
|=
SUMMON_TYPE_SPECIAL
;
sumtype
|=
SUMMON_TYPE_SPECIAL
;
if
((
sumplayer
==
0
||
sumplayer
==
1
)
&&
!
pduel
->
game_field
->
is_player_can_spsummon
(
reason_effect
,
sumtype
,
sumpos
,
sumplayer
,
toplayer
,
this
))
if
((
sumplayer
==
0
||
sumplayer
==
1
)
&&
!
pduel
->
game_field
->
is_player_can_spsummon
(
reason_effect
,
sumtype
,
sumpos
,
sumplayer
,
toplayer
,
this
))
...
@@ -3224,7 +3213,7 @@ int32 card::is_setable_mzone(uint8 playerid, uint8 ignore_count, effect* peffect
...
@@ -3224,7 +3213,7 @@ int32 card::is_setable_mzone(uint8 playerid, uint8 ignore_count, effect* peffect
effect_set
eset
;
effect_set
eset
;
int32
res
=
filter_set_procedure
(
playerid
,
&
eset
,
ignore_count
,
min_tribute
,
zone
);
int32
res
=
filter_set_procedure
(
playerid
,
&
eset
,
ignore_count
,
min_tribute
,
zone
);
if
(
peffect
)
{
if
(
peffect
)
{
if
(
res
<
0
||
!
pduel
->
game_field
->
is_player_can_mset
(
peffect
->
get_value
(),
playerid
,
this
,
playerid
))
{
if
(
res
<
0
||
!
check_set_procedure
(
peffect
,
playerid
,
ignore_count
,
min_tribute
,
zone
))
{
pduel
->
game_field
->
restore_lp_cost
();
pduel
->
game_field
->
restore_lp_cost
();
return
FALSE
;
return
FALSE
;
}
}
...
@@ -3635,13 +3624,15 @@ int32 card::is_capable_be_battle_target(card* pcard) {
...
@@ -3635,13 +3624,15 @@ int32 card::is_capable_be_battle_target(card* pcard) {
return
FALSE
;
return
FALSE
;
if
(
pcard
->
is_affected_by_effect
(
EFFECT_CANNOT_SELECT_BATTLE_TARGET
,
this
))
if
(
pcard
->
is_affected_by_effect
(
EFFECT_CANNOT_SELECT_BATTLE_TARGET
,
this
))
return
FALSE
;
return
FALSE
;
if
(
is_affected_by_effect
(
EFFECT_IGNORE_BATTLE_TARGET
))
if
(
is_affected_by_effect
(
EFFECT_IGNORE_BATTLE_TARGET
,
pcard
))
return
FALSE
;
return
FALSE
;
return
TRUE
;
return
TRUE
;
}
}
int32
card
::
is_capable_be_effect_target
(
effect
*
reason_effect
,
uint8
playerid
)
{
int32
card
::
is_capable_be_effect_target
(
effect
*
reason_effect
,
uint8
playerid
)
{
if
(
is_status
(
STATUS_SUMMONING
)
||
is_status
(
STATUS_BATTLE_DESTROYED
))
if
(
is_status
(
STATUS_SUMMONING
)
||
is_status
(
STATUS_BATTLE_DESTROYED
))
return
FALSE
;
return
FALSE
;
if
(
current
.
location
&
(
LOCATION_DECK
|
LOCATION_EXTRA
|
LOCATION_HAND
))
return
FALSE
;
effect_set
eset
;
effect_set
eset
;
filter_effect
(
EFFECT_CANNOT_BE_EFFECT_TARGET
,
&
eset
);
filter_effect
(
EFFECT_CANNOT_BE_EFFECT_TARGET
,
&
eset
);
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
...
...
AI_core_vs2017solution/ocgcore/common.h
View file @
facfa14d
...
@@ -50,6 +50,9 @@ struct card_sort {
...
@@ -50,6 +50,9 @@ struct card_sort {
#define LOCATION_ONFIELD 0x0c //
#define LOCATION_ONFIELD 0x0c //
#define LOCATION_FZONE 0x100 //
#define LOCATION_FZONE 0x100 //
#define LOCATION_PZONE 0x200 //
#define LOCATION_PZONE 0x200 //
//For redirect
#define LOCATION_DECKBOT 0x10001 //Return to deck bottom
#define LOCATION_DECKSHF 0x20001 //Return to deck and shuffle
//Positions
//Positions
#define POS_FACEUP_ATTACK 0x1
#define POS_FACEUP_ATTACK 0x1
...
...
AI_core_vs2017solution/ocgcore/effect.cpp
View file @
facfa14d
...
@@ -352,50 +352,53 @@ int32 effect::is_action_check(uint8 playerid) {
...
@@ -352,50 +352,53 @@ int32 effect::is_action_check(uint8 playerid) {
return
TRUE
;
return
TRUE
;
}
}
// check functions: condition, cost(chk=0), target(chk=0)
// check functions: condition, cost(chk=0), target(chk=0)
int32
effect
::
is_activate_ready
(
uint8
playerid
,
const
tevent
&
e
,
int32
neglect_cond
,
int32
neglect_cost
,
int32
neglect_target
)
{
int32
effect
::
is_activate_ready
(
effect
*
reason_effect
,
uint8
playerid
,
const
tevent
&
e
,
int32
neglect_cond
,
int32
neglect_cost
,
int32
neglect_target
)
{
if
(
!
neglect_cond
&&
condition
)
{
if
(
!
neglect_cond
&&
condition
)
{
pduel
->
lua
->
add_param
(
this
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
reason_effect
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
playerid
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
playerid
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
event_cards
,
PARAM_TYPE_GROUP
);
pduel
->
lua
->
add_param
(
e
.
event_cards
,
PARAM_TYPE_GROUP
);
pduel
->
lua
->
add_param
(
e
.
event_player
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
event_player
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
event_value
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
event_value
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
reason_effect
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
e
.
reason_effect
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
e
.
reason
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
reason
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
reason_player
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
reason_player
,
PARAM_TYPE_INT
);
if
(
!
pduel
->
lua
->
check_condition
(
condition
,
8
))
{
if
(
!
pduel
->
lua
->
check_condition
(
condition
,
8
))
{
return
FALSE
;
return
FALSE
;
}
}
}
}
if
(
!
neglect_cost
&&
cost
&&
!
(
type
&
EFFECT_TYPE_CONTINUOUS
))
{
if
(
!
neglect_cost
&&
cost
&&
!
(
type
&
EFFECT_TYPE_CONTINUOUS
))
{
pduel
->
lua
->
add_param
(
this
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
reason_effect
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
playerid
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
playerid
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
event_cards
,
PARAM_TYPE_GROUP
);
pduel
->
lua
->
add_param
(
e
.
event_cards
,
PARAM_TYPE_GROUP
);
pduel
->
lua
->
add_param
(
e
.
event_player
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
event_player
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
event_value
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
event_value
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
reason_effect
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
e
.
reason_effect
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
e
.
reason
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
reason
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
reason_player
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
reason_player
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
((
ptr
)
0
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
((
ptr
)
0
,
PARAM_TYPE_INT
);
if
(
!
pduel
->
lua
->
check_condition
(
cost
,
9
))
{
if
(
!
pduel
->
lua
->
check_condition
(
cost
,
9
))
{
return
FALSE
;
return
FALSE
;
}
}
}
}
if
(
!
neglect_target
&&
target
)
{
if
(
!
neglect_target
&&
target
)
{
pduel
->
lua
->
add_param
(
this
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
reason_effect
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
playerid
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
playerid
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
event_cards
,
PARAM_TYPE_GROUP
);
pduel
->
lua
->
add_param
(
e
.
event_cards
,
PARAM_TYPE_GROUP
);
pduel
->
lua
->
add_param
(
e
.
event_player
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
event_player
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
event_value
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
event_value
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
reason_effect
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
e
.
reason_effect
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
e
.
reason
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
reason
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
reason_player
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
e
.
reason_player
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
((
ptr
)
0
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
((
ptr
)
0
,
PARAM_TYPE_INT
);
if
(
!
pduel
->
lua
->
check_condition
(
target
,
9
))
{
if
(
!
pduel
->
lua
->
check_condition
(
target
,
9
))
{
return
FALSE
;
return
FALSE
;
}
}
}
}
return
TRUE
;
return
TRUE
;
}
}
int32
effect
::
is_activate_ready
(
uint8
playerid
,
const
tevent
&
e
,
int32
neglect_cond
,
int32
neglect_cost
,
int32
neglect_target
)
{
return
is_activate_ready
(
this
,
playerid
,
e
,
neglect_cond
,
neglect_cost
,
neglect_target
);
}
// check functions: condition
// check functions: condition
int32
effect
::
is_condition_check
(
uint8
playerid
,
const
tevent
&
e
)
{
int32
effect
::
is_condition_check
(
uint8
playerid
,
const
tevent
&
e
)
{
card
*
phandler
=
get_handler
();
card
*
phandler
=
get_handler
();
...
@@ -453,6 +456,8 @@ int32 effect::is_target(card* pcard) {
...
@@ -453,6 +456,8 @@ int32 effect::is_target(card* pcard) {
if
(
!
is_flag
(
EFFECT_FLAG_IGNORE_RANGE
))
{
if
(
!
is_flag
(
EFFECT_FLAG_IGNORE_RANGE
))
{
if
(
pcard
->
get_status
(
STATUS_SUMMONING
|
STATUS_SUMMON_DISABLED
|
STATUS_ACTIVATE_DISABLED
|
STATUS_SPSUMMON_STEP
))
if
(
pcard
->
get_status
(
STATUS_SUMMONING
|
STATUS_SUMMON_DISABLED
|
STATUS_ACTIVATE_DISABLED
|
STATUS_SPSUMMON_STEP
))
return
FALSE
;
return
FALSE
;
if
(
is_flag
(
EFFECT_FLAG_SPSUM_PARAM
))
return
FALSE
;
if
(
is_flag
(
EFFECT_FLAG_ABSOLUTE_TARGET
))
{
if
(
is_flag
(
EFFECT_FLAG_ABSOLUTE_TARGET
))
{
if
(
pcard
->
current
.
controler
==
0
)
{
if
(
pcard
->
current
.
controler
==
0
)
{
if
(
!
pcard
->
current
.
is_location
(
s_range
))
if
(
!
pcard
->
current
.
is_location
(
s_range
))
...
@@ -511,10 +516,10 @@ int32 effect::is_player_effect_target(card* pcard) {
...
@@ -511,10 +516,10 @@ int32 effect::is_player_effect_target(card* pcard) {
return
TRUE
;
return
TRUE
;
}
}
int32
effect
::
is_immuned
(
card
*
pcard
)
{
int32
effect
::
is_immuned
(
card
*
pcard
)
{
effect_set_v
effects
=
pcard
->
immune_effect
;
const
effect_set_v
&
effects
=
pcard
->
immune_effect
;
for
(
int32
i
=
0
;
i
<
effects
.
size
();
++
i
)
{
for
(
int32
i
=
0
;
i
<
effects
.
size
();
++
i
)
{
effect
*
peffect
=
effects
.
at
(
i
)
;
effect
*
peffect
=
effects
[
i
]
;
if
(
peffect
->
value
)
{
if
(
peffect
->
is_available
()
&&
peffect
->
value
)
{
pduel
->
lua
->
add_param
(
this
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
this
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
pcard
,
PARAM_TYPE_CARD
);
pduel
->
lua
->
add_param
(
pcard
,
PARAM_TYPE_CARD
);
if
(
peffect
->
check_value_condition
(
2
))
if
(
peffect
->
check_value_condition
(
2
))
...
...
AI_core_vs2017solution/ocgcore/effect.h
View file @
facfa14d
...
@@ -72,6 +72,7 @@ public:
...
@@ -72,6 +72,7 @@ public:
int32
check_count_limit
(
uint8
playerid
);
int32
check_count_limit
(
uint8
playerid
);
int32
is_activateable
(
uint8
playerid
,
const
tevent
&
e
,
int32
neglect_cond
=
FALSE
,
int32
neglect_cost
=
FALSE
,
int32
neglect_target
=
FALSE
,
int32
neglect_loc
=
FALSE
,
int32
neglect_faceup
=
FALSE
);
int32
is_activateable
(
uint8
playerid
,
const
tevent
&
e
,
int32
neglect_cond
=
FALSE
,
int32
neglect_cost
=
FALSE
,
int32
neglect_target
=
FALSE
,
int32
neglect_loc
=
FALSE
,
int32
neglect_faceup
=
FALSE
);
int32
is_action_check
(
uint8
playerid
);
int32
is_action_check
(
uint8
playerid
);
int32
is_activate_ready
(
effect
*
reason_effect
,
uint8
playerid
,
const
tevent
&
e
,
int32
neglect_cond
=
FALSE
,
int32
neglect_cost
=
FALSE
,
int32
neglect_target
=
FALSE
);
int32
is_activate_ready
(
uint8
playerid
,
const
tevent
&
e
,
int32
neglect_cond
=
FALSE
,
int32
neglect_cost
=
FALSE
,
int32
neglect_target
=
FALSE
);
int32
is_activate_ready
(
uint8
playerid
,
const
tevent
&
e
,
int32
neglect_cond
=
FALSE
,
int32
neglect_cost
=
FALSE
,
int32
neglect_target
=
FALSE
);
int32
is_condition_check
(
uint8
playerid
,
const
tevent
&
e
);
int32
is_condition_check
(
uint8
playerid
,
const
tevent
&
e
);
int32
is_activate_check
(
uint8
playerid
,
const
tevent
&
e
,
int32
neglect_cond
=
FALSE
,
int32
neglect_cost
=
FALSE
,
int32
neglect_target
=
FALSE
);
int32
is_activate_check
(
uint8
playerid
,
const
tevent
&
e
,
int32
neglect_cond
=
FALSE
,
int32
neglect_cost
=
FALSE
,
int32
neglect_target
=
FALSE
);
...
@@ -275,6 +276,7 @@ inline effect_flag operator|(effect_flag flag1, effect_flag flag2)
...
@@ -275,6 +276,7 @@ inline effect_flag operator|(effect_flag flag1, effect_flag flag2)
#define EFFECT_DUAL_STATUS 75 //
#define EFFECT_DUAL_STATUS 75 //
#define EFFECT_EQUIP_LIMIT 76 //
#define EFFECT_EQUIP_LIMIT 76 //
#define EFFECT_DUAL_SUMMONABLE 77 //
#define EFFECT_DUAL_SUMMONABLE 77 //
#define EFFECT_UNION_LIMIT 78 //
#define EFFECT_REVERSE_DAMAGE 80 //
#define EFFECT_REVERSE_DAMAGE 80 //
#define EFFECT_REVERSE_RECOVER 81 //
#define EFFECT_REVERSE_RECOVER 81 //
#define EFFECT_CHANGE_DAMAGE 82 //
#define EFFECT_CHANGE_DAMAGE 82 //
...
@@ -474,8 +476,9 @@ inline effect_flag operator|(effect_flag flag1, effect_flag flag2)
...
@@ -474,8 +476,9 @@ inline effect_flag operator|(effect_flag flag1, effect_flag flag2)
#define EVENT_CHAINING 1027
#define EVENT_CHAINING 1027
#define EVENT_BECOME_TARGET 1028
#define EVENT_BECOME_TARGET 1028
#define EVENT_DESTROYED 1029
#define EVENT_DESTROYED 1029
#define EVENT_MOVE 1030
#define EVENT_MOVE
1030
#define EVENT_ADJUST 1040
#define EVENT_ADJUST 1040
#define EVENT_BREAK_EFFECT 1050
#define EVENT_SUMMON_SUCCESS 1100
#define EVENT_SUMMON_SUCCESS 1100
#define EVENT_FLIP_SUMMON_SUCCESS 1101
#define EVENT_FLIP_SUMMON_SUCCESS 1101
#define EVENT_SPSUMMON_SUCCESS 1102
#define EVENT_SPSUMMON_SUCCESS 1102
...
...
AI_core_vs2017solution/ocgcore/effectset.h
View file @
facfa14d
...
@@ -92,12 +92,21 @@ struct effect_set_v {
...
@@ -92,12 +92,21 @@ struct effect_set_v {
return
;
return
;
std
::
sort
(
container
.
begin
(),
container
.
begin
()
+
count
,
effect_sort_id
);
std
::
sort
(
container
.
begin
(),
container
.
begin
()
+
count
,
effect_sort_id
);
}
}
effect
*
const
&
get_last
()
const
{
return
container
[
count
-
1
];
}
effect
*&
get_last
()
{
effect
*&
get_last
()
{
return
container
[
count
-
1
];
return
container
[
count
-
1
];
}
}
effect
*
const
&
operator
[]
(
int
index
)
const
{
return
container
[
index
];
}
effect
*&
operator
[]
(
int
index
)
{
effect
*&
operator
[]
(
int
index
)
{
return
container
[
index
];
return
container
[
index
];
}
}
effect
*
const
&
at
(
int
index
)
const
{
return
container
[
index
];
}
effect
*&
at
(
int
index
)
{
effect
*&
at
(
int
index
)
{
return
container
[
index
];
return
container
[
index
];
}
}
...
...
AI_core_vs2017solution/ocgcore/field.cpp
View file @
facfa14d
This diff is collapsed.
Click to expand it.
AI_core_vs2017solution/ocgcore/field.h
View file @
facfa14d
...
@@ -447,8 +447,8 @@ public:
...
@@ -447,8 +447,8 @@ public:
int32
check_tuner_material
(
card
*
pcard
,
card
*
tuner
,
int32
findex1
,
int32
findex2
,
int32
min
,
int32
max
,
card
*
smat
,
group
*
mg
);
int32
check_tuner_material
(
card
*
pcard
,
card
*
tuner
,
int32
findex1
,
int32
findex2
,
int32
min
,
int32
max
,
card
*
smat
,
group
*
mg
);
int32
check_other_synchro_material
(
const
card_vector
&
nsyn
,
int32
lv
,
int32
min
,
int32
max
,
int32
mcount
);
int32
check_other_synchro_material
(
const
card_vector
&
nsyn
,
int32
lv
,
int32
min
,
int32
max
,
int32
mcount
);
int32
check_tribute
(
card
*
pcard
,
int32
min
,
int32
max
,
group
*
mg
,
uint8
toplayer
,
uint32
zone
=
0x1f
,
uint32
releasable
=
0xff00ff
,
uint32
pos
=
0x1
);
int32
check_tribute
(
card
*
pcard
,
int32
min
,
int32
max
,
group
*
mg
,
uint8
toplayer
,
uint32
zone
=
0x1f
,
uint32
releasable
=
0xff00ff
,
uint32
pos
=
0x1
);
static
int32
check_with_sum_limit
(
const
card_vector
&
mats
,
int32
acc
,
int32
index
,
int32
count
,
int32
min
,
int32
max
);
static
int32
check_with_sum_limit
(
const
card_vector
&
mats
,
int32
acc
,
int32
index
,
int32
count
,
int32
min
,
int32
max
,
int32
opmin
);
static
int32
check_with_sum_limit_m
(
const
card_vector
&
mats
,
int32
acc
,
int32
index
,
int32
min
,
int32
max
,
int32
must_count
);
static
int32
check_with_sum_limit_m
(
const
card_vector
&
mats
,
int32
acc
,
int32
index
,
int32
min
,
int32
max
,
int32
opmin
,
int32
must_count
);
static
int32
check_with_sum_greater_limit
(
const
card_vector
&
mats
,
int32
acc
,
int32
index
,
int32
opmin
);
static
int32
check_with_sum_greater_limit
(
const
card_vector
&
mats
,
int32
acc
,
int32
index
,
int32
opmin
);
static
int32
check_with_sum_greater_limit_m
(
const
card_vector
&
mats
,
int32
acc
,
int32
index
,
int32
opmin
,
int32
must_count
);
static
int32
check_with_sum_greater_limit_m
(
const
card_vector
&
mats
,
int32
acc
,
int32
index
,
int32
opmin
,
int32
must_count
);
int32
check_xyz_material
(
card
*
pcard
,
int32
findex
,
int32
lv
,
int32
min
,
int32
max
,
group
*
mg
);
int32
check_xyz_material
(
card
*
pcard
,
int32
findex
,
int32
lv
,
int32
min
,
int32
max
,
group
*
mg
);
...
...
AI_core_vs2017solution/ocgcore/libcard.cpp
View file @
facfa14d
This diff is collapsed.
Click to expand it.
AI_core_vs2017solution/ocgcore/libduel.cpp
View file @
facfa14d
...
@@ -281,9 +281,11 @@ int32 scriptlib::duel_summon(lua_State *L) {
...
@@ -281,9 +281,11 @@ int32 scriptlib::duel_summon(lua_State *L) {
zone
=
(
uint32
)
lua_tointeger
(
L
,
6
);
zone
=
(
uint32
)
lua_tointeger
(
L
,
6
);
pduel
->
game_field
->
core
.
summon_cancelable
=
FALSE
;
pduel
->
game_field
->
core
.
summon_cancelable
=
FALSE
;
pduel
->
game_field
->
summon
(
playerid
,
pcard
,
peffect
,
ignore_count
,
min_tribute
,
zone
);
pduel
->
game_field
->
summon
(
playerid
,
pcard
,
peffect
,
ignore_count
,
min_tribute
,
zone
);
pduel
->
game_field
->
core
.
reserved
=
pduel
->
game_field
->
core
.
subunits
.
back
();
if
(
pduel
->
game_field
->
core
.
current_chain
.
size
())
{
pduel
->
game_field
->
core
.
subunits
.
pop_back
();
pduel
->
game_field
->
core
.
reserved
=
pduel
->
game_field
->
core
.
subunits
.
back
();
pduel
->
game_field
->
core
.
summoning_card
=
pcard
;
pduel
->
game_field
->
core
.
subunits
.
pop_back
();
pduel
->
game_field
->
core
.
summoning_card
=
pcard
;
}
return
lua_yield
(
L
,
0
);
return
lua_yield
(
L
,
0
);
}
}
int32
scriptlib
::
duel_special_summon_rule
(
lua_State
*
L
)
{
int32
scriptlib
::
duel_special_summon_rule
(
lua_State
*
L
)
{
...
@@ -302,9 +304,11 @@ int32 scriptlib::duel_special_summon_rule(lua_State *L) {
...
@@ -302,9 +304,11 @@ int32 scriptlib::duel_special_summon_rule(lua_State *L) {
sumtype
=
(
uint32
)
lua_tointeger
(
L
,
3
);
sumtype
=
(
uint32
)
lua_tointeger
(
L
,
3
);
pduel
->
game_field
->
core
.
summon_cancelable
=
FALSE
;
pduel
->
game_field
->
core
.
summon_cancelable
=
FALSE
;
pduel
->
game_field
->
special_summon_rule
(
playerid
,
pcard
,
sumtype
);
pduel
->
game_field
->
special_summon_rule
(
playerid
,
pcard
,
sumtype
);
pduel
->
game_field
->
core
.
reserved
=
pduel
->
game_field
->
core
.
subunits
.
back
();
if
(
pduel
->
game_field
->
core
.
current_chain
.
size
())
{
pduel
->
game_field
->
core
.
subunits
.
pop_back
();
pduel
->
game_field
->
core
.
reserved
=
pduel
->
game_field
->
core
.
subunits
.
back
();
pduel
->
game_field
->
core
.
summoning_card
=
pcard
;
pduel
->
game_field
->
core
.
subunits
.
pop_back
();
pduel
->
game_field
->
core
.
summoning_card
=
pcard
;
}
return
lua_yield
(
L
,
0
);
return
lua_yield
(
L
,
0
);
}
}
int32
scriptlib
::
duel_synchro_summon
(
lua_State
*
L
)
{
int32
scriptlib
::
duel_synchro_summon
(
lua_State
*
L
)
{
...
@@ -344,9 +348,11 @@ int32 scriptlib::duel_synchro_summon(lua_State *L) {
...
@@ -344,9 +348,11 @@ int32 scriptlib::duel_synchro_summon(lua_State *L) {
pduel
->
game_field
->
core
.
limit_syn_maxc
=
maxc
;
pduel
->
game_field
->
core
.
limit_syn_maxc
=
maxc
;
pduel
->
game_field
->
core
.
summon_cancelable
=
FALSE
;
pduel
->
game_field
->
core
.
summon_cancelable
=
FALSE
;
pduel
->
game_field
->
special_summon_rule
(
playerid
,
pcard
,
SUMMON_TYPE_SYNCHRO
);
pduel
->
game_field
->
special_summon_rule
(
playerid
,
pcard
,
SUMMON_TYPE_SYNCHRO
);
pduel
->
game_field
->
core
.
reserved
=
pduel
->
game_field
->
core
.
subunits
.
back
();
if
(
pduel
->
game_field
->
core
.
current_chain
.
size
())
{
pduel
->
game_field
->
core
.
subunits
.
pop_back
();
pduel
->
game_field
->
core
.
reserved
=
pduel
->
game_field
->
core
.
subunits
.
back
();
pduel
->
game_field
->
core
.
summoning_card
=
pcard
;
pduel
->
game_field
->
core
.
subunits
.
pop_back
();
pduel
->
game_field
->
core
.
summoning_card
=
pcard
;
}
return
lua_yield
(
L
,
0
);
return
lua_yield
(
L
,
0
);
}
}
int32
scriptlib
::
duel_xyz_summon
(
lua_State
*
L
)
{
int32
scriptlib
::
duel_xyz_summon
(
lua_State
*
L
)
{
...
@@ -378,9 +384,11 @@ int32 scriptlib::duel_xyz_summon(lua_State *L) {
...
@@ -378,9 +384,11 @@ int32 scriptlib::duel_xyz_summon(lua_State *L) {
pduel
->
game_field
->
core
.
limit_xyz_maxc
=
maxc
;
pduel
->
game_field
->
core
.
limit_xyz_maxc
=
maxc
;
pduel
->
game_field
->
core
.
summon_cancelable
=
FALSE
;
pduel
->
game_field
->
core
.
summon_cancelable
=
FALSE
;
pduel
->
game_field
->
special_summon_rule
(
playerid
,
pcard
,
SUMMON_TYPE_XYZ
);
pduel
->
game_field
->
special_summon_rule
(
playerid
,
pcard
,
SUMMON_TYPE_XYZ
);
pduel
->
game_field
->
core
.
reserved
=
pduel
->
game_field
->
core
.
subunits
.
back
();
if
(
pduel
->
game_field
->
core
.
current_chain
.
size
())
{
pduel
->
game_field
->
core
.
subunits
.
pop_back
();
pduel
->
game_field
->
core
.
reserved
=
pduel
->
game_field
->
core
.
subunits
.
back
();
pduel
->
game_field
->
core
.
summoning_card
=
pcard
;
pduel
->
game_field
->
core
.
subunits
.
pop_back
();
pduel
->
game_field
->
core
.
summoning_card
=
pcard
;
}
return
lua_yield
(
L
,
0
);
return
lua_yield
(
L
,
0
);
}
}
int32
scriptlib
::
duel_link_summon
(
lua_State
*
L
)
{
int32
scriptlib
::
duel_link_summon
(
lua_State
*
L
)
{
...
@@ -420,9 +428,11 @@ int32 scriptlib::duel_link_summon(lua_State *L) {
...
@@ -420,9 +428,11 @@ int32 scriptlib::duel_link_summon(lua_State *L) {
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
;
pduel
->
game_field
->
special_summon_rule
(
playerid
,
pcard
,
SUMMON_TYPE_LINK
);
pduel
->
game_field
->
special_summon_rule
(
playerid
,
pcard
,
SUMMON_TYPE_LINK
);
pduel
->
game_field
->
core
.
reserved
=
pduel
->
game_field
->
core
.
subunits
.
back
();
if
(
pduel
->
game_field
->
core
.
current_chain
.
size
())
{
pduel
->
game_field
->
core
.
subunits
.
pop_back
();
pduel
->
game_field
->
core
.
reserved
=
pduel
->
game_field
->
core
.
subunits
.
back
();
pduel
->
game_field
->
core
.
summoning_card
=
pcard
;
pduel
->
game_field
->
core
.
subunits
.
pop_back
();
pduel
->
game_field
->
core
.
summoning_card
=
pcard
;
}
return
lua_yield
(
L
,
0
);
return
lua_yield
(
L
,
0
);
}
}
int32
scriptlib
::
duel_setm
(
lua_State
*
L
)
{
int32
scriptlib
::
duel_setm
(
lua_State
*
L
)
{
...
@@ -450,9 +460,11 @@ int32 scriptlib::duel_setm(lua_State *L) {
...
@@ -450,9 +460,11 @@ int32 scriptlib::duel_setm(lua_State *L) {
zone
=
(
uint32
)
lua_tointeger
(
L
,
6
);
zone
=
(
uint32
)
lua_tointeger
(
L
,
6
);
pduel
->
game_field
->
core
.
summon_cancelable
=
FALSE
;
pduel
->
game_field
->
core
.
summon_cancelable
=
FALSE
;
pduel
->
game_field
->
mset
(
playerid
,
pcard
,
peffect
,
ignore_count
,
min_tribute
,
zone
);
pduel
->
game_field
->
mset
(
playerid
,
pcard
,
peffect
,
ignore_count
,
min_tribute
,
zone
);
pduel
->
game_field
->
core
.
reserved
=
pduel
->
game_field
->
core
.
subunits
.
back
();
if
(
pduel
->
game_field
->
core
.
current_chain
.
size
())
{
pduel
->
game_field
->
core
.
subunits
.
pop_back
();
pduel
->
game_field
->
core
.
reserved
=
pduel
->
game_field
->
core
.
subunits
.
back
();
pduel
->
game_field
->
core
.
summoning_card
=
pcard
;
pduel
->
game_field
->
core
.
subunits
.
pop_back
();
pduel
->
game_field
->
core
.
summoning_card
=
pcard
;
}
return
lua_yield
(
L
,
0
);
return
lua_yield
(
L
,
0
);
}
}
int32
scriptlib
::
duel_sets
(
lua_State
*
L
)
{
int32
scriptlib
::
duel_sets
(
lua_State
*
L
)
{
...
@@ -1699,6 +1711,8 @@ int32 scriptlib::duel_break_effect(lua_State *L) {
...
@@ -1699,6 +1711,8 @@ int32 scriptlib::duel_break_effect(lua_State *L) {
check_action_permission
(
L
);
check_action_permission
(
L
);
duel
*
pduel
=
interpreter
::
get_duel_info
(
L
);
duel
*
pduel
=
interpreter
::
get_duel_info
(
L
);
pduel
->
game_field
->
break_effect
();
pduel
->
game_field
->
break_effect
();
pduel
->
game_field
->
raise_event
((
card
*
)
0
,
EVENT_BREAK_EFFECT
,
0
,
0
,
PLAYER_NONE
,
PLAYER_NONE
,
0
);
pduel
->
game_field
->
process_instant_event
();
return
lua_yield
(
L
,
0
);
return
lua_yield
(
L
,
0
);
}
}
int32
scriptlib
::
duel_change_effect
(
lua_State
*
L
)
{
int32
scriptlib
::
duel_change_effect
(
lua_State
*
L
)
{
...
...
AI_core_vs2017solution/ocgcore/libgroup.cpp
View file @
facfa14d
...
@@ -416,7 +416,7 @@ int32 scriptlib::group_check_with_sum_equal(lua_State *L) {
...
@@ -416,7 +416,7 @@ int32 scriptlib::group_check_with_sum_equal(lua_State *L) {
pduel
->
game_field
->
core
.
must_select_cards
.
clear
();
pduel
->
game_field
->
core
.
must_select_cards
.
clear
();
for
(
auto
&
pcard
:
cv
)
for
(
auto
&
pcard
:
cv
)
pcard
->
sum_param
=
pduel
->
lua
->
get_operation_value
(
pcard
,
2
,
extraargs
);
pcard
->
sum_param
=
pduel
->
lua
->
get_operation_value
(
pcard
,
2
,
extraargs
);
lua_pushboolean
(
L
,
field
::
check_with_sum_limit_m
(
cv
,
acc
,
0
,
min
,
max
,
mcount
));
lua_pushboolean
(
L
,
field
::
check_with_sum_limit_m
(
cv
,
acc
,
0
,
min
,
max
,
0xffff
,
mcount
));
return
1
;
return
1
;
}
}
int32
scriptlib
::
group_select_with_sum_equal
(
lua_State
*
L
)
{
int32
scriptlib
::
group_select_with_sum_equal
(
lua_State
*
L
)
{
...
@@ -447,7 +447,7 @@ int32 scriptlib::group_select_with_sum_equal(lua_State *L) {
...
@@ -447,7 +447,7 @@ int32 scriptlib::group_select_with_sum_equal(lua_State *L) {
cv
.
insert
(
cv
.
end
(),
pduel
->
game_field
->
core
.
select_cards
.
begin
(),
pduel
->
game_field
->
core
.
select_cards
.
end
());
cv
.
insert
(
cv
.
end
(),
pduel
->
game_field
->
core
.
select_cards
.
begin
(),
pduel
->
game_field
->
core
.
select_cards
.
end
());
for
(
auto
&
pcard
:
cv
)
for
(
auto
&
pcard
:
cv
)
pcard
->
sum_param
=
pduel
->
lua
->
get_operation_value
(
pcard
,
3
,
extraargs
);
pcard
->
sum_param
=
pduel
->
lua
->
get_operation_value
(
pcard
,
3
,
extraargs
);
if
(
!
field
::
check_with_sum_limit_m
(
cv
,
acc
,
0
,
min
,
max
,
mcount
))
{
if
(
!
field
::
check_with_sum_limit_m
(
cv
,
acc
,
0
,
min
,
max
,
0xffff
,
mcount
))
{
pduel
->
game_field
->
core
.
must_select_cards
.
clear
();
pduel
->
game_field
->
core
.
must_select_cards
.
clear
();
group
*
empty_group
=
pduel
->
new_group
();
group
*
empty_group
=
pduel
->
new_group
();
interpreter
::
group2value
(
L
,
empty_group
);
interpreter
::
group2value
(
L
,
empty_group
);
...
...
AI_core_vs2017solution/ocgcore/operations.cpp
View file @
facfa14d
This diff is collapsed.
Click to expand it.
AI_core_vs2017solution/ocgcore/playerop.cpp
View file @
facfa14d
...
@@ -599,15 +599,15 @@ int32 field::select_counter(uint16 step, uint8 playerid, uint16 countertype, uin
...
@@ -599,15 +599,15 @@ int32 field::select_counter(uint16 step, uint8 playerid, uint16 countertype, uin
}
}
return
TRUE
;
return
TRUE
;
}
}
static
int32
select_sum_check1
(
const
int32
*
oparam
,
int32
size
,
int32
index
,
int32
acc
)
{
static
int32
select_sum_check1
(
const
int32
*
oparam
,
int32
size
,
int32
index
,
int32
acc
,
int32
opmin
)
{
if
(
acc
==
0
||
index
==
size
)
if
(
acc
==
0
||
index
==
size
)
return
FALSE
;
return
FALSE
;
int32
o1
=
oparam
[
index
]
&
0xffff
;
int32
o1
=
oparam
[
index
]
&
0xffff
;
int32
o2
=
oparam
[
index
]
>>
16
;
int32
o2
=
oparam
[
index
]
>>
16
;
if
(
index
==
size
-
1
)
if
(
index
==
size
-
1
)
return
acc
==
o1
||
acc
==
o2
;
return
(
acc
==
o1
&&
acc
+
opmin
>
o1
)
||
(
o2
&&
acc
==
o2
&&
acc
+
opmin
>
o2
)
;
return
(
acc
>
o1
&&
select_sum_check1
(
oparam
,
size
,
index
+
1
,
acc
-
o1
))
return
(
acc
>
o1
&&
select_sum_check1
(
oparam
,
size
,
index
+
1
,
acc
-
o1
,
std
::
min
(
o1
,
opmin
)
))
||
(
o2
>
0
&&
acc
>
o2
&&
select_sum_check1
(
oparam
,
size
,
index
+
1
,
acc
-
o2
));
||
(
o2
>
0
&&
acc
>
o2
&&
select_sum_check1
(
oparam
,
size
,
index
+
1
,
acc
-
o2
,
std
::
min
(
o2
,
opmin
)
));
}
}
int32
field
::
select_with_sum_limit
(
int16
step
,
uint8
playerid
,
int32
acc
,
int32
min
,
int32
max
)
{
int32
field
::
select_with_sum_limit
(
int16
step
,
uint8
playerid
,
int32
acc
,
int32
min
,
int32
max
)
{
if
(
step
==
0
)
{
if
(
step
==
0
)
{
...
@@ -664,7 +664,7 @@ int32 field::select_with_sum_limit(int16 step, uint8 playerid, int32 acc, int32
...
@@ -664,7 +664,7 @@ int32 field::select_with_sum_limit(int16 step, uint8 playerid, int32 acc, int32
c
[
v
]
=
1
;
c
[
v
]
=
1
;
oparam
[
i
]
=
core
.
select_cards
[
v
]
->
sum_param
;
oparam
[
i
]
=
core
.
select_cards
[
v
]
->
sum_param
;
}
}
if
(
!
select_sum_check1
(
oparam
,
returns
.
bvalue
[
0
],
0
,
acc
))
{
if
(
!
select_sum_check1
(
oparam
,
returns
.
bvalue
[
0
],
0
,
acc
,
0xffff
))
{
pduel
->
write_buffer8
(
MSG_RETRY
);
pduel
->
write_buffer8
(
MSG_RETRY
);
return
FALSE
;
return
FALSE
;
}
}
...
...
AI_core_vs2017solution/ocgcore/processor.cpp
View file @
facfa14d
...
@@ -957,11 +957,11 @@ int32 field::check_event(uint32 code, tevent * pe) {
...
@@ -957,11 +957,11 @@ int32 field::check_event(uint32 code, tevent * pe) {
}
}
int32
field
::
check_event_c
(
effect
*
peffect
,
uint8
playerid
,
int32
neglect_con
,
int32
neglect_cost
,
int32
copy_info
,
tevent
*
pe
)
{
int32
field
::
check_event_c
(
effect
*
peffect
,
uint8
playerid
,
int32
neglect_con
,
int32
neglect_cost
,
int32
copy_info
,
tevent
*
pe
)
{
if
(
peffect
->
code
==
EVENT_FREE_CHAIN
)
{
if
(
peffect
->
code
==
EVENT_FREE_CHAIN
)
{
return
peffect
->
is_activate_ready
(
playerid
,
nil_event
,
neglect_con
,
neglect_cost
,
FALSE
);
return
peffect
->
is_activate_ready
(
core
.
reason_effect
,
playerid
,
nil_event
,
neglect_con
,
neglect_cost
,
FALSE
);
}
}
for
(
const
auto
&
ev
:
core
.
point_event
)
{
for
(
const
auto
&
ev
:
core
.
point_event
)
{
if
(
ev
.
event_code
==
peffect
->
code
&&
if
(
ev
.
event_code
==
peffect
->
code
&&
peffect
->
is_activate_ready
(
playerid
,
ev
,
neglect_con
,
neglect_cost
,
FALSE
))
{
peffect
->
is_activate_ready
(
core
.
reason_effect
,
playerid
,
ev
,
neglect_con
,
neglect_cost
,
FALSE
))
{
if
(
pe
)
if
(
pe
)
*
pe
=
ev
;
*
pe
=
ev
;
if
(
copy_info
&&
!
pduel
->
lua
->
no_action
&&
core
.
current_chain
.
size
())
{
if
(
copy_info
&&
!
pduel
->
lua
->
no_action
&&
core
.
current_chain
.
size
())
{
...
@@ -972,7 +972,7 @@ int32 field::check_event_c(effect* peffect, uint8 playerid, int32 neglect_con, i
...
@@ -972,7 +972,7 @@ int32 field::check_event_c(effect* peffect, uint8 playerid, int32 neglect_con, i
}
}
for
(
const
auto
&
ev
:
core
.
instant_event
)
{
for
(
const
auto
&
ev
:
core
.
instant_event
)
{
if
(
ev
.
event_code
==
peffect
->
code
&&
if
(
ev
.
event_code
==
peffect
->
code
&&
peffect
->
is_activate_ready
(
playerid
,
ev
,
neglect_con
,
neglect_cost
,
FALSE
))
{
peffect
->
is_activate_ready
(
core
.
reason_effect
,
playerid
,
ev
,
neglect_con
,
neglect_cost
,
FALSE
))
{
if
(
pe
)
if
(
pe
)
*
pe
=
ev
;
*
pe
=
ev
;
if
(
copy_info
&&
!
pduel
->
lua
->
no_action
&&
core
.
current_chain
.
size
())
{
if
(
copy_info
&&
!
pduel
->
lua
->
no_action
&&
core
.
current_chain
.
size
())
{
...
@@ -1820,7 +1820,7 @@ int32 field::process_instant_event() {
...
@@ -1820,7 +1820,7 @@ int32 field::process_instant_event() {
}
}
}
}
}
}
if
(
ev
.
event_code
==
EVENT_ADJUST
||
((
ev
.
event_code
&
0xf000
)
==
EVENT_PHASE_START
))
if
(
ev
.
event_code
==
EVENT_ADJUST
||
ev
.
event_code
==
EVENT_BREAK_EFFECT
||
((
ev
.
event_code
&
0xf000
)
==
EVENT_PHASE_START
))
continue
;
continue
;
//triggers
//triggers
pr
=
effects
.
trigger_f_effect
.
equal_range
(
ev
.
event_code
);
pr
=
effects
.
trigger_f_effect
.
equal_range
(
ev
.
event_code
);
...
@@ -2549,7 +2549,12 @@ int32 field::process_battle_command(uint16 step) {
...
@@ -2549,7 +2549,12 @@ int32 field::process_battle_command(uint16 step) {
core
.
units
.
begin
()
->
step
=
5
;
core
.
units
.
begin
()
->
step
=
5
;
return
FALSE
;
return
FALSE
;
}
}
add_process
(
PROCESSOR_SELECT_YESNO
,
0
,
0
,
0
,
infos
.
turn_player
,
31
);
if
(
is_player_affected_by_effect
(
infos
.
turn_player
,
EFFECT_PATRICIAN_OF_DARKNESS
))
{
add_process
(
PROCESSOR_SELECT_EFFECTYN
,
0
,
0
,
(
group
*
)
core
.
attacker
,
1
-
infos
.
turn_player
,
31
);
}
else
{
add_process
(
PROCESSOR_SELECT_YESNO
,
0
,
0
,
0
,
infos
.
turn_player
,
31
);
}
return
FALSE
;
return
FALSE
;
}
}
// no target and not direct attackable
// no target and not direct attackable
...
@@ -2588,11 +2593,12 @@ int32 field::process_battle_command(uint16 step) {
...
@@ -2588,11 +2593,12 @@ int32 field::process_battle_command(uint16 step) {
returns
.
ivalue
[
0
]
=
-
2
;
returns
.
ivalue
[
0
]
=
-
2
;
}
else
{
}
else
{
if
(
core
.
select_cards
.
size
())
{
if
(
core
.
select_cards
.
size
())
{
auto
opposel
=
is_player_affected_by_effect
(
infos
.
turn_player
,
EFFECT_PATRICIAN_OF_DARKNESS
);
pduel
->
write_buffer8
(
MSG_HINT
);
pduel
->
write_buffer8
(
MSG_HINT
);
pduel
->
write_buffer8
(
HINT_SELECTMSG
);
pduel
->
write_buffer8
(
HINT_SELECTMSG
);
pduel
->
write_buffer8
(
infos
.
turn_player
);
pduel
->
write_buffer8
(
opposel
?
1
-
infos
.
turn_player
:
infos
.
turn_player
);
pduel
->
write_buffer32
(
549
);
pduel
->
write_buffer32
(
549
);
add_process
(
PROCESSOR_SELECT_CARD
,
0
,
0
,
0
,
infos
.
turn_player
+
(
core
.
attack_cancelable
?
0x20000
:
0
),
0x10001
);
add_process
(
PROCESSOR_SELECT_CARD
,
0
,
0
,
0
,
opposel
?
1
-
infos
.
turn_player
:
infos
.
turn_player
+
(
core
.
attack_cancelable
?
0x20000
:
0
),
0x10001
);
}
else
{
}
else
{
core
.
units
.
begin
()
->
arg3
=
TRUE
;
core
.
units
.
begin
()
->
arg3
=
TRUE
;
core
.
units
.
begin
()
->
step
=
6
;
core
.
units
.
begin
()
->
step
=
6
;
...
...
AI_core_vs2017solution/ocgcore/scriptlib.h
View file @
facfa14d
...
@@ -138,6 +138,7 @@ public:
...
@@ -138,6 +138,7 @@ public:
static
int32
card_get_equip_target
(
lua_State
*
L
);
static
int32
card_get_equip_target
(
lua_State
*
L
);
static
int32
card_get_pre_equip_target
(
lua_State
*
L
);
static
int32
card_get_pre_equip_target
(
lua_State
*
L
);
static
int32
card_check_equip_target
(
lua_State
*
L
);
static
int32
card_check_equip_target
(
lua_State
*
L
);
static
int32
card_check_union_target
(
lua_State
*
L
);
static
int32
card_get_union_count
(
lua_State
*
L
);
static
int32
card_get_union_count
(
lua_State
*
L
);
static
int32
card_get_overlay_group
(
lua_State
*
L
);
static
int32
card_get_overlay_group
(
lua_State
*
L
);
static
int32
card_get_overlay_count
(
lua_State
*
L
);
static
int32
card_get_overlay_count
(
lua_State
*
L
);
...
...
Assets/Plugins/x64/ocgcore.dll
View file @
facfa14d
No preview for this file type
Assets/Plugins/x86/ocgcore.dll
View file @
facfa14d
No preview for this file type
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