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
xiaoye
ygopro-core
Commits
7cb7069f
Commit
7cb7069f
authored
Dec 01, 2021
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://github.com/Fluorohydride/ygopro-core
parents
73765181
c397018c
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
36 additions
and
16 deletions
+36
-16
effect.cpp
effect.cpp
+14
-8
effect.h
effect.h
+3
-1
field.cpp
field.cpp
+5
-5
field.h
field.h
+2
-1
interpreter.cpp
interpreter.cpp
+4
-0
libeffect.cpp
libeffect.cpp
+1
-1
processor.cpp
processor.cpp
+7
-0
No files found.
effect.cpp
View file @
7cb7069f
...
...
@@ -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
()
{
...
...
@@ -299,6 +303,8 @@ int32 effect::is_activateable(uint8 playerid, const tevent& e, int32 neglect_con
return
FALSE
;
if
((
phandler
->
get_type
()
&
TYPE_CONTINUOUS
)
&&
(
phandler
->
get_type
()
&
TYPE_EQUIP
))
return
FALSE
;
if
((
type
&
EFFECT_TYPE_QUICK_O
)
&&
is_flag
(
EFFECT_FLAG_DELAY
)
&&
!
in_range
(
phandler
))
return
FALSE
;
if
(
!
neglect_faceup
&&
(
phandler
->
current
.
location
&
(
LOCATION_ONFIELD
|
LOCATION_REMOVED
)))
{
if
(
!
phandler
->
is_position
(
POS_FACEUP
)
&&
!
is_flag
(
EFFECT_FLAG_SET_AVAILABLE
))
return
FALSE
;
...
...
effect.h
View file @
7cb7069f
...
...
@@ -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 @
7cb7069f
...
...
@@ -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 @
7cb7069f
...
...
@@ -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
...
...
interpreter.cpp
View file @
7cb7069f
...
...
@@ -26,11 +26,15 @@ interpreter::interpreter(duel* pd): coroutines(256) {
lua_setglobal
(
lua_state
,
"io"
);
lua_pushnil
(
lua_state
);
lua_setglobal
(
lua_state
,
"os"
);
lua_pushnil
(
lua_state
);
lua_setglobal
(
lua_state
,
"package"
);
luaL_getsubtable
(
lua_state
,
LUA_REGISTRYINDEX
,
"_LOADED"
);
lua_pushnil
(
lua_state
);
lua_setfield
(
lua_state
,
-
2
,
"io"
);
lua_pushnil
(
lua_state
);
lua_setfield
(
lua_state
,
-
2
,
"os"
);
lua_pushnil
(
lua_state
);
lua_setfield
(
lua_state
,
-
2
,
"package"
);
lua_pop
(
lua_state
,
1
);
//open all libs
scriptlib
::
open_cardlib
(
lua_state
);
...
...
libeffect.cpp
View file @
7cb7069f
...
...
@@ -383,7 +383,7 @@ int32 scriptlib::effect_get_owner(lua_State *L) {
check_param_count
(
L
,
1
);
check_param
(
L
,
PARAM_TYPE_EFFECT
,
1
);
effect
*
peffect
=
*
(
effect
**
)
lua_touserdata
(
L
,
1
);
interpreter
::
card2value
(
L
,
peffect
->
owner
);
interpreter
::
card2value
(
L
,
peffect
->
get_owner
()
);
return
1
;
}
int32
scriptlib
::
effect_get_handler
(
lua_State
*
L
)
{
...
...
processor.cpp
View file @
7cb7069f
...
...
@@ -1683,6 +1683,13 @@ int32 field::process_quick_effect(int16 step, int32 skip_freechain, uint8 priori
core
.
select_chains
.
push_back
(
newchain
);
}
}
pr
=
effects
.
quick_o_effect
.
equal_range
(
ev
.
event_code
);
for
(
auto
eit
=
pr
.
first
;
eit
!=
pr
.
second
;)
{
effect
*
peffect
=
eit
->
second
;
++
eit
;
if
(
peffect
->
is_flag
(
EFFECT_FLAG_DELAY
)
&&
peffect
->
is_condition_check
(
peffect
->
get_handler
()
->
current
.
controler
,
ev
))
core
.
delayed_quick
.
emplace
(
peffect
,
ev
);
}
}
// delayed quick
for
(
auto
eit
=
core
.
delayed_quick
.
begin
();
eit
!=
core
.
delayed_quick
.
end
();)
{
...
...
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