Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
YGOMobile
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
YGOMobile
Commits
4c987b4c
Commit
4c987b4c
authored
Nov 30, 2021
by
fallenstardust
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sync ocgcore
parent
80ec03f0
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
52 additions
and
19 deletions
+52
-19
Classes/ocgcore/effect.cpp
Classes/ocgcore/effect.cpp
+14
-8
Classes/ocgcore/effect.h
Classes/ocgcore/effect.h
+3
-1
Classes/ocgcore/field.cpp
Classes/ocgcore/field.cpp
+5
-5
Classes/ocgcore/field.h
Classes/ocgcore/field.h
+2
-1
Classes/ocgcore/interpreter.cpp
Classes/ocgcore/interpreter.cpp
+14
-1
Classes/ocgcore/libeffect.cpp
Classes/ocgcore/libeffect.cpp
+1
-1
Classes/ocgcore/processor.cpp
Classes/ocgcore/processor.cpp
+13
-2
No files found.
Classes/ocgcore/effect.cpp
View file @
4c987b4c
...
...
@@ -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
;
...
...
Classes/ocgcore/effect.h
View file @
4c987b4c
...
...
@@ -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
...
...
Classes/ocgcore/field.cpp
View file @
4c987b4c
...
...
@@ -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
]
++
;
}
...
...
Classes/ocgcore/field.h
View file @
4c987b4c
...
...
@@ -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
...
...
Classes/ocgcore/interpreter.cpp
View file @
4c987b4c
...
...
@@ -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
);
...
...
@@ -157,9 +161,18 @@ int32 interpreter::load_card_script(uint32 code) {
lua_pushstring
(
current_state
,
"__index"
);
lua_pushvalue
(
current_state
,
-
2
);
lua_rawset
(
current_state
,
-
3
);
lua_getglobal
(
current_state
,
class_name
);
lua_setglobal
(
current_state
,
"self_table"
);
lua_pushinteger
(
current_state
,
code
);
lua_setglobal
(
current_state
,
"self_code"
);
char
script_name
[
64
];
sprintf
(
script_name
,
"./script/c%d.lua"
,
code
);
if
(
!
load_script
(
script_name
))
{
int32
res
=
load_script
(
script_name
);
lua_pushnil
(
current_state
);
lua_setglobal
(
current_state
,
"self_table"
);
lua_pushnil
(
current_state
);
lua_setglobal
(
current_state
,
"self_code"
);
if
(
!
res
)
{
return
OPERATION_FAIL
;
}
}
...
...
Classes/ocgcore/libeffect.cpp
View file @
4c987b4c
...
...
@@ -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
)
{
...
...
Classes/ocgcore/processor.cpp
View file @
4c987b4c
...
...
@@ -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
();)
{
...
...
@@ -3420,6 +3427,7 @@ void field::calculate_battle_damage(effect** pdamchange, card** preason_card, ui
}
effect_set
eset
;
core
.
attacker
->
filter_effect
(
EFFECT_CHANGE_BATTLE_DAMAGE
,
&
eset
,
FALSE
);
core
.
attacker
->
filter_effect
(
EFFECT_CHANGE_INVOLVING_BATTLE_DAMAGE
,
&
eset
,
FALSE
);
core
.
attack_target
->
filter_effect
(
EFFECT_CHANGE_INVOLVING_BATTLE_DAMAGE
,
&
eset
,
FALSE
);
filter_player_effect
(
pa
,
EFFECT_CHANGE_BATTLE_DAMAGE
,
&
eset
,
FALSE
);
filter_player_effect
(
1
-
pa
,
EFFECT_CHANGE_BATTLE_DAMAGE
,
&
eset
,
FALSE
);
...
...
@@ -3539,6 +3547,7 @@ void field::calculate_battle_damage(effect** pdamchange, card** preason_card, ui
}
effect_set
eset
;
reason_card
->
filter_effect
(
EFFECT_CHANGE_BATTLE_DAMAGE
,
&
eset
,
FALSE
);
reason_card
->
filter_effect
(
EFFECT_CHANGE_INVOLVING_BATTLE_DAMAGE
,
&
eset
,
FALSE
);
if
(
dam_card
)
dam_card
->
filter_effect
(
EFFECT_CHANGE_INVOLVING_BATTLE_DAMAGE
,
&
eset
,
FALSE
);
filter_player_effect
(
damp
,
EFFECT_CHANGE_BATTLE_DAMAGE
,
&
eset
,
FALSE
);
...
...
@@ -5010,8 +5019,10 @@ int32 field::adjust_step(uint16 step) {
return
FALSE
;
}
case
15
:
{
if
(
!
check_event
(
EVENT_ADJUST
))
{
raise_event
((
card
*
)
0
,
EVENT_ADJUST
,
0
,
0
,
PLAYER_NONE
,
PLAYER_NONE
,
0
);
process_instant_event
();
}
return
FALSE
;
}
case
16
:
{
...
...
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