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
2b5bc979
Commit
2b5bc979
authored
Nov 27, 2021
by
HidarimeYume
Committed by
GitHub
Nov 27, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix limit counter(step 1) (#403)
grammar Update effect.cpp
parent
2e6ad0eb
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
22 additions
and
15 deletions
+22
-15
effect.cpp
effect.cpp
+12
-8
effect.h
effect.h
+3
-1
field.cpp
field.cpp
+5
-5
field.h
field.h
+2
-1
No files found.
effect.cpp
View file @
2b5bc979
...
...
@@ -84,7 +84,7 @@ int32 effect::is_can_be_forbidden() {
// check if a single/field/equip effect is available
// check properties: range, EFFECT_FLAG_OWNER_RELATE, STATUS_BATTLE_DESTROYED, STATUS_EFFECT_ENABLED, disabled/forbidden
// check fucntions: condition
int32
effect
::
is_available
()
{
int32
effect
::
is_available
(
int32
neglect_disabled
)
{
if
(
type
&
EFFECT_TYPE_ACTIONS
)
return
FALSE
;
if
((
type
&
(
EFFECT_TYPE_SINGLE
|
EFFECT_TYPE_XMATERIAL
))
&&
!
(
type
&
EFFECT_TYPE_FIELD
))
{
...
...
@@ -102,9 +102,9 @@ int32 effect::is_available() {
return
FALSE
;
if
(
powner
==
phandler
&&
is_can_be_forbidden
()
&&
phandler
->
get_status
(
STATUS_FORBIDDEN
))
return
FALSE
;
if
(
is_flag
(
EFFECT_FLAG_OWNER_RELATE
)
&&
!
is_flag
(
EFFECT_FLAG_CANNOT_DISABLE
)
&&
powner
->
is_status
(
STATUS_DISABLED
))
if
(
is_flag
(
EFFECT_FLAG_OWNER_RELATE
)
&&
!
(
is_flag
(
EFFECT_FLAG_CANNOT_DISABLE
)
||
neglect_disabled
)
&&
powner
->
is_status
(
STATUS_DISABLED
))
return
FALSE
;
if
(
powner
==
phandler
&&
!
is_flag
(
EFFECT_FLAG_CANNOT_DISABLE
)
&&
phandler
->
get_status
(
STATUS_DISABLED
))
if
(
powner
==
phandler
&&
!
(
is_flag
(
EFFECT_FLAG_CANNOT_DISABLE
)
||
neglect_disabled
)
&&
phandler
->
get_status
(
STATUS_DISABLED
))
return
FALSE
;
}
if
(
type
&
EFFECT_TYPE_EQUIP
)
{
...
...
@@ -114,9 +114,9 @@ int32 effect::is_available() {
return
FALSE
;
if
(
owner
==
handler
&&
is_can_be_forbidden
()
&&
handler
->
get_status
(
STATUS_FORBIDDEN
))
return
FALSE
;
if
(
is_flag
(
EFFECT_FLAG_OWNER_RELATE
)
&&
!
is_flag
(
EFFECT_FLAG_CANNOT_DISABLE
)
&&
owner
->
is_status
(
STATUS_DISABLED
))
if
(
is_flag
(
EFFECT_FLAG_OWNER_RELATE
)
&&
!
(
is_flag
(
EFFECT_FLAG_CANNOT_DISABLE
)
||
neglect_disabled
)
&&
owner
->
is_status
(
STATUS_DISABLED
))
return
FALSE
;
if
(
owner
==
handler
&&
!
is_flag
(
EFFECT_FLAG_CANNOT_DISABLE
)
&&
handler
->
get_status
(
STATUS_DISABLED
))
if
(
owner
==
handler
&&
!
(
is_flag
(
EFFECT_FLAG_CANNOT_DISABLE
)
||
neglect_disabled
)
&&
handler
->
get_status
(
STATUS_DISABLED
))
return
FALSE
;
if
(
!
is_flag
(
EFFECT_FLAG_SET_AVAILABLE
))
{
if
(
!
(
handler
->
get_status
(
STATUS_EFFECT_ENABLED
)))
...
...
@@ -141,9 +141,9 @@ int32 effect::is_available() {
return
FALSE
;
if
(
powner
==
phandler
&&
is_can_be_forbidden
()
&&
phandler
->
get_status
(
STATUS_FORBIDDEN
))
return
FALSE
;
if
(
is_flag
(
EFFECT_FLAG_OWNER_RELATE
)
&&
!
is_flag
(
EFFECT_FLAG_CANNOT_DISABLE
)
&&
powner
->
is_status
(
STATUS_DISABLED
))
if
(
is_flag
(
EFFECT_FLAG_OWNER_RELATE
)
&&
!
(
is_flag
(
EFFECT_FLAG_CANNOT_DISABLE
)
||
neglect_disabled
)
&&
powner
->
is_status
(
STATUS_DISABLED
))
return
FALSE
;
if
(
powner
==
phandler
&&
!
is_flag
(
EFFECT_FLAG_CANNOT_DISABLE
)
&&
phandler
->
get_status
(
STATUS_DISABLED
))
if
(
powner
==
phandler
&&
!
(
is_flag
(
EFFECT_FLAG_CANNOT_DISABLE
)
||
neglect_disabled
)
&&
phandler
->
get_status
(
STATUS_DISABLED
))
return
FALSE
;
if
(
phandler
->
is_status
(
STATUS_BATTLE_DESTROYED
))
return
FALSE
;
...
...
@@ -161,6 +161,10 @@ int32 effect::is_available() {
status
&=
~
EFFECT_STATUS_AVAILABLE
;
return
res
;
}
// check if a count limit effect counter is available, which should be available even if the effect is disabled
int32
effect
::
limit_counter_is_available
()
{
return
is_available
(
TRUE
);
}
// check if a effect is EFFECT_TYPE_SINGLE and is ready
// check: range, enabled, condition
int32
effect
::
is_single_ready
()
{
...
...
@@ -623,7 +627,7 @@ int32 effect::reset(uint32 reset_level, uint32 reset_type) {
return
FALSE
;
uint8
pid
=
get_owner_player
();
uint8
tp
=
handler
->
pduel
->
game_field
->
infos
.
turn_player
;
if
((((
reset_flag
&
RESET_SELF_TURN
)
&&
pid
==
tp
)
||
((
reset_flag
&
RESET_OPPO_TURN
)
&&
pid
!=
tp
))
if
((((
reset_flag
&
RESET_SELF_TURN
)
&&
pid
==
tp
)
||
((
reset_flag
&
RESET_OPPO_TURN
)
&&
pid
!=
tp
))
&&
(
reset_level
&
0x3ff
&
reset_flag
))
reset_count
--
;
if
(
reset_count
==
0
)
...
...
effect.h
View file @
2b5bc979
...
...
@@ -68,7 +68,8 @@ public:
int32
is_disable_related
();
int32
is_self_destroy_related
();
int32
is_can_be_forbidden
();
int32
is_available
();
int32
is_available
(
int32
neglect_disabled
=
FALSE
);
int32
limit_counter_is_available
();
int32
is_single_ready
();
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
);
...
...
@@ -459,6 +460,7 @@ inline effect_flag operator|(effect_flag flag1, effect_flag flag2)
#define EFFECT_OVERLAY_RITUAL_MATERIAL 364
#define EFFECT_CHANGE_GRAVE_ATTRIBUTE 365
#define EFFECT_CHANGE_GRAVE_RACE 366
#define EFFECT_ACTIVATION_COUNT_LIMIT 367
#define EVENT_STARTUP 1000
#define EVENT_FLIP 1001
...
...
field.cpp
View file @
2b5bc979
...
...
@@ -608,7 +608,7 @@ int32 field::is_location_useable(uint32 playerid, uint32 location, uint32 sequen
* Return usable count in zone of playerid's MZONE or SZONE(0~4) when uplayer moves pcard to playerid's field (can be negative).
* for LOCATION_MZONE, "usable" means not used, not disabled, satisfying EFFECT_MUST_USE_MZONE, satisfying EFFECT_MAX_MZONE
* for LOCATION_SZONE, "usable" means not used, not disabled, satisfying EFFECT_MAX_SZONE
*
*
* @param pcard the card about to move
* @param playerid the target player
* @param location LOCATION_MZONE or LOCATION_SZONE
...
...
@@ -616,8 +616,8 @@ int32 field::is_location_useable(uint32 playerid, uint32 location, uint32 sequen
* @param reason location reason
* @param zone specified zones, 0xff by default
* @param list storing unavailable or unspecified zones
*
* @return usable count in zone of playerid's MZONE or SZONE(0~4) (can be negative)
*
* @return usable count in zone of playerid's MZONE or SZONE(0~4) (can be negative)
*/
int32
field
::
get_useable_count
(
card
*
pcard
,
uint8
playerid
,
uint8
location
,
uint8
uplayer
,
uint32
reason
,
uint32
zone
,
uint32
*
list
)
{
if
(
location
==
LOCATION_MZONE
&&
pcard
&&
pcard
->
current
.
location
==
LOCATION_EXTRA
)
...
...
@@ -689,7 +689,7 @@ int32 field::get_useable_count_other(card* pcard, uint8 playerid, uint8 location
count
=
limit
;
return
count
;
}
/**
/**
* @return the number of available grids in zone of Main MZONE or SZONE(0~4)
* for LOCATION_MZONE, "available" means not used, not disabled, satisfying EFFECT_MUST_USE_MZONE
* for LOCATION_SZONE, "available" means not used, not disabled
...
...
@@ -2250,7 +2250,7 @@ void field::set_spsummon_counter(uint8 playerid) {
if
(
core
.
global_flag
&
GLOBALFLAG_SPSUMMON_COUNT
)
{
for
(
auto
&
peffect
:
effects
.
spsummon_count_eff
)
{
card
*
pcard
=
peffect
->
get_handler
();
if
(
peffect
->
is_available
())
{
if
(
peffect
->
limit_counter_
is_available
())
{
if
(((
playerid
==
pcard
->
current
.
controler
)
&&
peffect
->
s_range
)
||
((
playerid
!=
pcard
->
current
.
controler
)
&&
peffect
->
o_range
))
{
pcard
->
spsummon_counter
[
playerid
]
++
;
}
...
...
field.h
View file @
2b5bc979
...
...
@@ -71,7 +71,7 @@ struct chain {
uint32
flag
;
chain
()
:
chain_id
(
0
),
chain_count
(
0
),
triggering_player
(
PLAYER_NONE
),
triggering_controler
(
PLAYER_NONE
),
triggering_location
(
0
),
triggering_sequence
(
0
),
triggering_position
(
0
),
:
chain_id
(
0
),
chain_count
(
0
),
triggering_player
(
PLAYER_NONE
),
triggering_controler
(
PLAYER_NONE
),
triggering_location
(
0
),
triggering_sequence
(
0
),
triggering_position
(
0
),
triggering_state
(),
triggering_effect
(
nullptr
),
target_cards
(
nullptr
),
replace_op
(
0
),
target_player
(
PLAYER_NONE
),
target_param
(
0
),
disable_reason
(
nullptr
),
disable_player
(
PLAYER_NONE
),
evt
(),
flag
(
0
)
{}
static
bool
chain_operation_sort
(
const
chain
&
c1
,
const
chain
&
c2
);
...
...
@@ -724,6 +724,7 @@ public:
#define GLOBALFLAG_SELF_TOGRAVE 0x100
#define GLOBALFLAG_SPSUMMON_ONCE 0x200
#define GLOBALFLAG_TUNE_MAGICIAN 0x400
#define GLOBALFLAG_ACTIVATION_COUNT 0x800
//
#define PROCESSOR_NONE 0
#define PROCESSOR_WAITING 0x10000
...
...
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