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
4c1accec
Commit
4c1accec
authored
Jun 18, 2022
by
fallenstardust
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://gitee.com/bdnh_admin/YGOMobile-cn-ko-en
parents
6ad6c231
b707cc9f
Changes
14
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
500 additions
and
74 deletions
+500
-74
Classes/ocgcore/field.h
Classes/ocgcore/field.h
+1
-1
Classes/ocgcore/libduel.cpp
Classes/ocgcore/libduel.cpp
+16
-1
Classes/ocgcore/libgroup.cpp
Classes/ocgcore/libgroup.cpp
+18
-13
Classes/ocgcore/operations.cpp
Classes/ocgcore/operations.cpp
+15
-10
Classes/ocgcore/playerop.cpp
Classes/ocgcore/playerop.cpp
+16
-16
Classes/ocgcore/processor.cpp
Classes/ocgcore/processor.cpp
+2
-0
Classes/ocgcore/scriptlib.h
Classes/ocgcore/scriptlib.h
+1
-0
mobile/assets/changelog.html
mobile/assets/changelog.html
+12
-3
mobile/assets/data/conf/lflist.conf
mobile/assets/data/conf/lflist.conf
+392
-20
mobile/assets/data/conf/strings.conf
mobile/assets/data/conf/strings.conf
+8
-0
mobile/assets_en/data/conf/strings.conf
mobile/assets_en/data/conf/strings.conf
+12
-4
mobile/assets_ko/data/conf/strings.conf
mobile/assets_ko/data/conf/strings.conf
+5
-4
mobile/build.gradle
mobile/build.gradle
+2
-2
mobile/src/main/res/drawable-xhdpi/ic_launcher3.png
mobile/src/main/res/drawable-xhdpi/ic_launcher3.png
+0
-0
No files found.
Classes/ocgcore/field.h
View file @
4c1accec
...
@@ -558,7 +558,7 @@ public:
...
@@ -558,7 +558,7 @@ public:
//operations
//operations
int32
negate_chain
(
uint8
chaincount
);
int32
negate_chain
(
uint8
chaincount
);
int32
disable_chain
(
uint8
chaincount
);
int32
disable_chain
(
uint8
chaincount
,
uint8
forced
);
void
change_chain_effect
(
uint8
chaincount
,
int32
replace_op
);
void
change_chain_effect
(
uint8
chaincount
,
int32
replace_op
);
void
change_target
(
uint8
chaincount
,
group
*
targets
);
void
change_target
(
uint8
chaincount
,
group
*
targets
);
void
change_target_player
(
uint8
chaincount
,
uint8
playerid
);
void
change_target_player
(
uint8
chaincount
,
uint8
playerid
);
...
...
Classes/ocgcore/libduel.cpp
View file @
4c1accec
...
@@ -1764,8 +1764,11 @@ int32 scriptlib::duel_negate_activate(lua_State *L) {
...
@@ -1764,8 +1764,11 @@ int32 scriptlib::duel_negate_activate(lua_State *L) {
int32
scriptlib
::
duel_negate_effect
(
lua_State
*
L
)
{
int32
scriptlib
::
duel_negate_effect
(
lua_State
*
L
)
{
check_param_count
(
L
,
1
);
check_param_count
(
L
,
1
);
uint32
c
=
(
uint32
)
lua_tointeger
(
L
,
1
);
uint32
c
=
(
uint32
)
lua_tointeger
(
L
,
1
);
uint8
forced
=
FALSE
;
if
(
lua_gettop
(
L
)
>
1
)
forced
=
lua_toboolean
(
L
,
2
);
duel
*
pduel
=
interpreter
::
get_duel_info
(
L
);
duel
*
pduel
=
interpreter
::
get_duel_info
(
L
);
lua_pushboolean
(
L
,
pduel
->
game_field
->
disable_chain
(
c
));
lua_pushboolean
(
L
,
pduel
->
game_field
->
disable_chain
(
c
,
forced
));
return
1
;
return
1
;
}
}
int32
scriptlib
::
duel_negate_related_chain
(
lua_State
*
L
)
{
int32
scriptlib
::
duel_negate_related_chain
(
lua_State
*
L
)
{
...
@@ -4311,6 +4314,17 @@ int32 scriptlib::duel_is_chain_disablable(lua_State * L) {
...
@@ -4311,6 +4314,17 @@ int32 scriptlib::duel_is_chain_disablable(lua_State * L) {
lua_pushboolean
(
L
,
1
);
lua_pushboolean
(
L
,
1
);
return
1
;
return
1
;
}
}
int32
scriptlib
::
duel_is_chain_disabled
(
lua_State
*
L
)
{
check_param_count
(
L
,
1
);
int32
chaincount
=
(
int32
)
lua_tointeger
(
L
,
1
);
duel
*
pduel
=
interpreter
::
get_duel_info
(
L
);
if
(
pduel
->
game_field
->
core
.
chain_solving
)
{
lua_pushboolean
(
L
,
pduel
->
game_field
->
is_chain_disabled
(
chaincount
));
return
1
;
}
lua_pushboolean
(
L
,
0
);
return
1
;
}
int32
scriptlib
::
duel_check_chain_target
(
lua_State
*
L
)
{
int32
scriptlib
::
duel_check_chain_target
(
lua_State
*
L
)
{
check_param_count
(
L
,
2
);
check_param_count
(
L
,
2
);
check_param
(
L
,
PARAM_TYPE_CARD
,
2
);
check_param
(
L
,
PARAM_TYPE_CARD
,
2
);
...
@@ -4753,6 +4767,7 @@ static const struct luaL_Reg duellib[] = {
...
@@ -4753,6 +4767,7 @@ static const struct luaL_Reg duellib[] = {
{
"IsPlayerCanAdditionalSummon"
,
scriptlib
::
duel_is_player_can_additional_summon
},
{
"IsPlayerCanAdditionalSummon"
,
scriptlib
::
duel_is_player_can_additional_summon
},
{
"IsChainNegatable"
,
scriptlib
::
duel_is_chain_negatable
},
{
"IsChainNegatable"
,
scriptlib
::
duel_is_chain_negatable
},
{
"IsChainDisablable"
,
scriptlib
::
duel_is_chain_disablable
},
{
"IsChainDisablable"
,
scriptlib
::
duel_is_chain_disablable
},
{
"IsChainDisabled"
,
scriptlib
::
duel_is_chain_disabled
},
{
"CheckChainTarget"
,
scriptlib
::
duel_check_chain_target
},
{
"CheckChainTarget"
,
scriptlib
::
duel_check_chain_target
},
{
"CheckChainUniqueness"
,
scriptlib
::
duel_check_chain_uniqueness
},
{
"CheckChainUniqueness"
,
scriptlib
::
duel_check_chain_uniqueness
},
{
"GetActivityCount"
,
scriptlib
::
duel_get_activity_count
},
{
"GetActivityCount"
,
scriptlib
::
duel_get_activity_count
},
...
...
Classes/ocgcore/libgroup.cpp
View file @
4c1accec
...
@@ -269,20 +269,23 @@ int32 scriptlib::group_select_unselect(lua_State *L) {
...
@@ -269,20 +269,23 @@ int32 scriptlib::group_select_unselect(lua_State *L) {
check_action_permission
(
L
);
check_action_permission
(
L
);
check_param_count
(
L
,
3
);
check_param_count
(
L
,
3
);
check_param
(
L
,
PARAM_TYPE_GROUP
,
1
);
check_param
(
L
,
PARAM_TYPE_GROUP
,
1
);
check_param
(
L
,
PARAM_TYPE_GROUP
,
2
);
group
*
select_group
=
*
(
group
**
)
lua_touserdata
(
L
,
1
);
group
*
pgroup1
=
*
(
group
**
)
lua_touserdata
(
L
,
1
);
group
*
unselect_group
=
0
;
group
*
pgroup2
=
*
(
group
**
)
lua_touserdata
(
L
,
2
);
if
(
check_param
(
L
,
PARAM_TYPE_GROUP
,
2
,
TRUE
))
duel
*
pduel
=
pgroup1
->
pduel
;
unselect_group
=
*
(
group
**
)
lua_touserdata
(
L
,
2
);
duel
*
pduel
=
select_group
->
pduel
;
uint32
playerid
=
(
uint32
)
lua_tointeger
(
L
,
3
);
uint32
playerid
=
(
uint32
)
lua_tointeger
(
L
,
3
);
if
(
playerid
!=
0
&&
playerid
!=
1
)
if
(
playerid
!=
0
&&
playerid
!=
1
)
return
0
;
return
0
;
if
(
pgroup1
->
container
.
size
()
+
pgroup2
->
container
.
size
()
==
0
)
if
(
select_group
->
container
.
size
()
==
0
&&
(
!
unselect_group
||
unselect_group
->
container
.
size
()
==
0
)
)
return
0
;
return
0
;
for
(
auto
it
=
pgroup2
->
container
.
begin
();
it
!=
pgroup2
->
container
.
end
();
++
it
)
{
if
(
unselect_group
)
{
card
*
pcard
=
*
it
;
for
(
auto
it
=
unselect_group
->
container
.
begin
();
it
!=
unselect_group
->
container
.
end
();
++
it
)
{
for
(
auto
it2
=
pgroup1
->
container
.
begin
();
it2
!=
pgroup1
->
container
.
end
();
++
it2
)
{
card
*
pcard
=
*
it
;
if
((
*
it2
)
==
pcard
)
{
for
(
auto
it2
=
select_group
->
container
.
begin
();
it2
!=
select_group
->
container
.
end
();
++
it2
)
{
return
0
;
if
((
*
it2
)
==
pcard
)
{
return
0
;
}
}
}
}
}
}
}
...
@@ -306,11 +309,13 @@ int32 scriptlib::group_select_unselect(lua_State *L) {
...
@@ -306,11 +309,13 @@ int32 scriptlib::group_select_unselect(lua_State *L) {
min
=
max
;
min
=
max
;
pduel
->
game_field
->
core
.
select_cards
.
clear
();
pduel
->
game_field
->
core
.
select_cards
.
clear
();
pduel
->
game_field
->
core
.
unselect_cards
.
clear
();
pduel
->
game_field
->
core
.
unselect_cards
.
clear
();
for
(
auto
it
=
pgroup1
->
container
.
begin
();
it
!=
pgroup1
->
container
.
end
();
++
it
)
{
for
(
auto
it
=
select_group
->
container
.
begin
();
it
!=
select_group
->
container
.
end
();
++
it
)
{
pduel
->
game_field
->
core
.
select_cards
.
push_back
(
*
it
);
pduel
->
game_field
->
core
.
select_cards
.
push_back
(
*
it
);
}
}
for
(
auto
it
=
pgroup2
->
container
.
begin
();
it
!=
pgroup2
->
container
.
end
();
++
it
)
{
if
(
unselect_group
)
{
pduel
->
game_field
->
core
.
unselect_cards
.
push_back
(
*
it
);
for
(
auto
it
=
unselect_group
->
container
.
begin
();
it
!=
unselect_group
->
container
.
end
();
++
it
)
{
pduel
->
game_field
->
core
.
unselect_cards
.
push_back
(
*
it
);
}
}
}
pduel
->
game_field
->
add_process
(
PROCESSOR_SELECT_UNSELECT_CARD
,
0
,
0
,
0
,
playerid
+
(
cancelable
<<
16
),
min
+
(
max
<<
16
),
finishable
);
pduel
->
game_field
->
add_process
(
PROCESSOR_SELECT_UNSELECT_CARD
,
0
,
0
,
0
,
playerid
+
(
cancelable
<<
16
),
min
+
(
max
<<
16
),
finishable
);
return
lua_yieldk
(
L
,
0
,
(
lua_KContext
)
pduel
,
[](
lua_State
*
L
,
int32
status
,
lua_KContext
ctx
)
{
return
lua_yieldk
(
L
,
0
,
(
lua_KContext
)
pduel
,
[](
lua_State
*
L
,
int32
status
,
lua_KContext
ctx
)
{
...
...
Classes/ocgcore/operations.cpp
View file @
4c1accec
...
@@ -18,32 +18,35 @@ int32 field::negate_chain(uint8 chaincount) {
...
@@ -18,32 +18,35 @@ int32 field::negate_chain(uint8 chaincount) {
if
(
chaincount
>
core
.
current_chain
.
size
()
||
chaincount
<
1
)
if
(
chaincount
>
core
.
current_chain
.
size
()
||
chaincount
<
1
)
chaincount
=
(
uint8
)
core
.
current_chain
.
size
();
chaincount
=
(
uint8
)
core
.
current_chain
.
size
();
chain
&
pchain
=
core
.
current_chain
[
chaincount
-
1
];
chain
&
pchain
=
core
.
current_chain
[
chaincount
-
1
];
card
*
phandler
=
pchain
.
triggering_effect
->
handler
;
if
(
!
(
pchain
.
flag
&
CHAIN_DISABLE_ACTIVATE
)
&&
is_chain_negatable
(
pchain
.
chain_count
)
if
(
!
(
pchain
.
flag
&
CHAIN_DISABLE_ACTIVATE
)
&&
is_chain_negatable
(
pchain
.
chain_count
)
&&
pchain
.
triggering_effect
->
handler
->
is_affect_by_effect
(
core
.
reason_effect
)
)
{
&&
(
!
phandler
->
is_has_relation
(
pchain
)
||
phandler
->
is_affect_by_effect
(
core
.
reason_effect
))
)
{
pchain
.
flag
|=
CHAIN_DISABLE_ACTIVATE
;
pchain
.
flag
|=
CHAIN_DISABLE_ACTIVATE
;
pchain
.
disable_reason
=
core
.
reason_effect
;
pchain
.
disable_reason
=
core
.
reason_effect
;
pchain
.
disable_player
=
core
.
reason_player
;
pchain
.
disable_player
=
core
.
reason_player
;
if
((
pchain
.
triggering_effect
->
type
&
EFFECT_TYPE_ACTIVATE
)
&&
(
p
chain
.
triggering_effect
->
handler
->
current
.
location
==
LOCATION_SZONE
))
{
if
((
pchain
.
triggering_effect
->
type
&
EFFECT_TYPE_ACTIVATE
)
&&
(
phandler
->
current
.
location
==
LOCATION_SZONE
))
{
p
chain
.
triggering_effect
->
handler
->
set_status
(
STATUS_LEAVE_CONFIRMED
,
TRUE
);
phandler
->
set_status
(
STATUS_LEAVE_CONFIRMED
,
TRUE
);
p
chain
.
triggering_effect
->
handler
->
set_status
(
STATUS_ACTIVATE_DISABLED
,
TRUE
);
phandler
->
set_status
(
STATUS_ACTIVATE_DISABLED
,
TRUE
);
}
}
pduel
->
write_buffer8
(
MSG_CHAIN_NEGATED
);
pduel
->
write_buffer8
(
MSG_CHAIN_NEGATED
);
pduel
->
write_buffer8
(
chaincount
);
pduel
->
write_buffer8
(
chaincount
);
if
(
pchain
.
triggering_location
==
LOCATION_DECK
if
(
pchain
.
triggering_location
==
LOCATION_DECK
||
core
.
duel_rule
>=
5
&&
pchain
.
triggering_location
==
LOCATION_EXTRA
&&
(
pchain
.
triggering_position
&
POS_FACEDOWN
))
||
core
.
duel_rule
>=
5
&&
pchain
.
triggering_location
==
LOCATION_EXTRA
&&
(
pchain
.
triggering_position
&
POS_FACEDOWN
))
p
chain
.
triggering_effect
->
handler
->
release_relation
(
pchain
);
phandler
->
release_relation
(
pchain
);
return
TRUE
;
return
TRUE
;
}
}
return
FALSE
;
return
FALSE
;
}
}
int32
field
::
disable_chain
(
uint8
chaincount
)
{
int32
field
::
disable_chain
(
uint8
chaincount
,
uint8
forced
)
{
if
(
core
.
current_chain
.
size
()
==
0
)
if
(
core
.
current_chain
.
size
()
==
0
)
return
FALSE
;
return
FALSE
;
if
(
chaincount
>
core
.
current_chain
.
size
()
||
chaincount
<
1
)
if
(
chaincount
>
core
.
current_chain
.
size
()
||
chaincount
<
1
)
chaincount
=
(
uint8
)
core
.
current_chain
.
size
();
chaincount
=
(
uint8
)
core
.
current_chain
.
size
();
chain
&
pchain
=
core
.
current_chain
[
chaincount
-
1
];
chain
&
pchain
=
core
.
current_chain
[
chaincount
-
1
];
card
*
phandler
=
pchain
.
triggering_effect
->
handler
;
if
(
!
(
pchain
.
flag
&
CHAIN_DISABLE_EFFECT
)
&&
is_chain_disablable
(
pchain
.
chain_count
)
if
(
!
(
pchain
.
flag
&
CHAIN_DISABLE_EFFECT
)
&&
is_chain_disablable
(
pchain
.
chain_count
)
&&
pchain
.
triggering_effect
->
handler
->
is_affect_by_effect
(
core
.
reason_effect
))
{
&&
(
!
phandler
->
is_has_relation
(
pchain
)
||
phandler
->
is_affect_by_effect
(
core
.
reason_effect
))
&&
!
(
phandler
->
is_has_relation
(
pchain
)
&&
phandler
->
is_status
(
STATUS_DISABLED
)
&&
!
forced
))
{
core
.
current_chain
[
chaincount
-
1
].
flag
|=
CHAIN_DISABLE_EFFECT
;
core
.
current_chain
[
chaincount
-
1
].
flag
|=
CHAIN_DISABLE_EFFECT
;
core
.
current_chain
[
chaincount
-
1
].
disable_reason
=
core
.
reason_effect
;
core
.
current_chain
[
chaincount
-
1
].
disable_reason
=
core
.
reason_effect
;
core
.
current_chain
[
chaincount
-
1
].
disable_player
=
core
.
reason_player
;
core
.
current_chain
[
chaincount
-
1
].
disable_player
=
core
.
reason_player
;
...
@@ -51,7 +54,7 @@ int32 field::disable_chain(uint8 chaincount) {
...
@@ -51,7 +54,7 @@ int32 field::disable_chain(uint8 chaincount) {
pduel
->
write_buffer8
(
chaincount
);
pduel
->
write_buffer8
(
chaincount
);
if
(
pchain
.
triggering_location
==
LOCATION_DECK
if
(
pchain
.
triggering_location
==
LOCATION_DECK
||
core
.
duel_rule
>=
5
&&
pchain
.
triggering_location
==
LOCATION_EXTRA
&&
(
pchain
.
triggering_position
&
POS_FACEDOWN
))
||
core
.
duel_rule
>=
5
&&
pchain
.
triggering_location
==
LOCATION_EXTRA
&&
(
pchain
.
triggering_position
&
POS_FACEDOWN
))
p
chain
.
triggering_effect
->
handler
->
release_relation
(
pchain
);
phandler
->
release_relation
(
pchain
);
return
TRUE
;
return
TRUE
;
}
}
return
FALSE
;
return
FALSE
;
...
@@ -4444,9 +4447,10 @@ int32 field::move_to_field(uint16 step, card* target, uint32 enable, uint32 ret,
...
@@ -4444,9 +4447,10 @@ int32 field::move_to_field(uint16 step, card* target, uint32 enable, uint32 ret,
if
(
is_location_useable
(
playerid
,
LOCATION_PZONE
,
1
))
if
(
is_location_useable
(
playerid
,
LOCATION_PZONE
,
1
))
flag
|=
0x1u
<<
(
core
.
duel_rule
>=
4
?
12
:
15
);
flag
|=
0x1u
<<
(
core
.
duel_rule
>=
4
?
12
:
15
);
if
(
!
flag
)
{
if
(
!
flag
)
{
core
.
units
.
begin
()
->
step
=
3
;
if
(
target
->
current
.
location
!=
LOCATION_GRAVE
)
if
(
target
->
current
.
location
!=
LOCATION_GRAVE
)
send_to
(
target
,
0
,
REASON_RULE
,
PLAYER_NONE
,
PLAYER_NONE
,
LOCATION_GRAVE
,
0
,
POS_FACEUP
);
send_to
(
target
,
0
,
REASON_RULE
,
PLAYER_NONE
,
PLAYER_NONE
,
LOCATION_GRAVE
,
0
,
POS_FACEUP
);
return
TRU
E
;
return
FALS
E
;
}
}
if
(
move_player
!=
playerid
)
if
(
move_player
!=
playerid
)
flag
=
flag
<<
16
;
flag
=
flag
<<
16
;
...
@@ -4466,9 +4470,10 @@ int32 field::move_to_field(uint16 step, card* target, uint32 enable, uint32 ret,
...
@@ -4466,9 +4470,10 @@ int32 field::move_to_field(uint16 step, card* target, uint32 enable, uint32 ret,
return
FALSE
;
return
FALSE
;
}
}
if
(
ct
<=
0
)
{
if
(
ct
<=
0
)
{
core
.
units
.
begin
()
->
step
=
3
;
if
(
target
->
current
.
location
!=
LOCATION_GRAVE
)
if
(
target
->
current
.
location
!=
LOCATION_GRAVE
)
send_to
(
target
,
0
,
REASON_RULE
,
PLAYER_NONE
,
PLAYER_NONE
,
LOCATION_GRAVE
,
0
,
POS_FACEUP
);
send_to
(
target
,
0
,
REASON_RULE
,
PLAYER_NONE
,
PLAYER_NONE
,
LOCATION_GRAVE
,
0
,
POS_FACEUP
);
return
TRU
E
;
return
FALS
E
;
}
}
if
((
zone
&
zone
-
1
)
==
0
)
{
if
((
zone
&
zone
-
1
)
==
0
)
{
for
(
uint8
seq
=
0
;
seq
<
8
;
seq
++
)
{
for
(
uint8
seq
=
0
;
seq
<
8
;
seq
++
)
{
...
...
Classes/ocgcore/playerop.cpp
View file @
4c1accec
...
@@ -226,8 +226,8 @@ int32 field::select_card(uint16 step, uint8 playerid, uint8 cancelable, uint8 mi
...
@@ -226,8 +226,8 @@ int32 field::select_card(uint16 step, uint8 playerid, uint8 cancelable, uint8 mi
returns
.
bvalue
[
0
]
=
0
;
returns
.
bvalue
[
0
]
=
0
;
if
(
max
==
0
||
core
.
select_cards
.
empty
())
if
(
max
==
0
||
core
.
select_cards
.
empty
())
return
TRUE
;
return
TRUE
;
if
(
max
>
63
)
if
(
max
>
127
)
max
=
63
;
max
=
127
;
if
(
max
>
core
.
select_cards
.
size
())
if
(
max
>
core
.
select_cards
.
size
())
max
=
(
uint8
)
core
.
select_cards
.
size
();
max
=
(
uint8
)
core
.
select_cards
.
size
();
if
(
min
>
max
)
if
(
min
>
max
)
...
@@ -258,15 +258,15 @@ int32 field::select_card(uint16 step, uint8 playerid, uint8 cancelable, uint8 mi
...
@@ -258,15 +258,15 @@ int32 field::select_card(uint16 step, uint8 playerid, uint8 cancelable, uint8 mi
pduel
->
write_buffer8
(
MSG_RETRY
);
pduel
->
write_buffer8
(
MSG_RETRY
);
return
FALSE
;
return
FALSE
;
}
}
byte
c
[
64
]
=
{}
;
std
::
set
<
int8
>
c
;
uint8
m
=
(
uint8
)
core
.
select_cards
.
size
();
uint8
m
=
(
uint8
)
core
.
select_cards
.
size
();
for
(
int32
i
=
0
;
i
<
returns
.
bvalue
[
0
];
++
i
)
{
for
(
int32
i
=
0
;
i
<
returns
.
bvalue
[
0
];
++
i
)
{
int8
v
=
returns
.
bvalue
[
i
+
1
];
int8
v
=
returns
.
bvalue
[
i
+
1
];
if
(
v
<
0
||
v
>=
m
||
v
>=
63
||
c
[
v
]
)
{
if
(
v
<
0
||
v
>=
m
||
c
.
count
(
v
)
)
{
pduel
->
write_buffer8
(
MSG_RETRY
);
pduel
->
write_buffer8
(
MSG_RETRY
);
return
FALSE
;
return
FALSE
;
}
}
c
[
v
]
=
1
;
c
.
insert
(
v
)
;
}
}
return
TRUE
;
return
TRUE
;
}
}
...
@@ -528,15 +528,15 @@ int32 field::select_tribute(uint16 step, uint8 playerid, uint8 cancelable, uint8
...
@@ -528,15 +528,15 @@ int32 field::select_tribute(uint16 step, uint8 playerid, uint8 cancelable, uint8
pduel
->
write_buffer8
(
MSG_RETRY
);
pduel
->
write_buffer8
(
MSG_RETRY
);
return
FALSE
;
return
FALSE
;
}
}
byte
c
[
64
]
=
{}
;
std
::
set
<
int8
>
c
;
uint8
m
=
(
uint8
)
core
.
select_cards
.
size
(),
tt
=
0
;
uint8
m
=
(
uint8
)
core
.
select_cards
.
size
(),
tt
=
0
;
for
(
int32
i
=
0
;
i
<
returns
.
bvalue
[
0
];
++
i
)
{
for
(
int32
i
=
0
;
i
<
returns
.
bvalue
[
0
];
++
i
)
{
int8
v
=
returns
.
bvalue
[
i
+
1
];
int8
v
=
returns
.
bvalue
[
i
+
1
];
if
(
v
<
0
||
v
>=
m
||
c
[
v
]
)
{
if
(
v
<
0
||
v
>=
m
||
c
.
count
(
v
)
)
{
pduel
->
write_buffer8
(
MSG_RETRY
);
pduel
->
write_buffer8
(
MSG_RETRY
);
return
FALSE
;
return
FALSE
;
}
}
c
[
v
]
=
1
;
c
.
insert
(
v
)
;
tt
+=
core
.
select_cards
[
v
]
->
release_param
;
tt
+=
core
.
select_cards
[
v
]
->
release_param
;
}
}
if
(
tt
<
min
)
{
if
(
tt
<
min
)
{
...
@@ -651,7 +651,7 @@ int32 field::select_with_sum_limit(int16 step, uint8 playerid, int32 acc, int32
...
@@ -651,7 +651,7 @@ int32 field::select_with_sum_limit(int16 step, uint8 playerid, int32 acc, int32
}
}
return
FALSE
;
return
FALSE
;
}
else
{
}
else
{
byte
c
[
64
]
=
{}
;
std
::
set
<
int32
>
c
;
if
(
max
)
{
if
(
max
)
{
int32
oparam
[
16
];
int32
oparam
[
16
];
int32
mcount
=
(
int32
)
core
.
must_select_cards
.
size
();
int32
mcount
=
(
int32
)
core
.
must_select_cards
.
size
();
...
@@ -664,11 +664,11 @@ int32 field::select_with_sum_limit(int16 step, uint8 playerid, int32 acc, int32
...
@@ -664,11 +664,11 @@ int32 field::select_with_sum_limit(int16 step, uint8 playerid, int32 acc, int32
int32
m
=
(
int32
)
core
.
select_cards
.
size
();
int32
m
=
(
int32
)
core
.
select_cards
.
size
();
for
(
int32
i
=
mcount
;
i
<
returns
.
bvalue
[
0
];
++
i
)
{
for
(
int32
i
=
mcount
;
i
<
returns
.
bvalue
[
0
];
++
i
)
{
int32
v
=
returns
.
bvalue
[
i
+
1
];
int32
v
=
returns
.
bvalue
[
i
+
1
];
if
(
v
<
0
||
v
>=
m
||
c
[
v
]
)
{
if
(
v
<
0
||
v
>=
m
||
c
.
count
(
v
)
)
{
pduel
->
write_buffer8
(
MSG_RETRY
);
pduel
->
write_buffer8
(
MSG_RETRY
);
return
FALSE
;
return
FALSE
;
}
}
c
[
v
]
=
1
;
c
.
insert
(
v
)
;
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
,
0xffff
))
{
if
(
!
select_sum_check1
(
oparam
,
returns
.
bvalue
[
0
],
0
,
acc
,
0xffff
))
{
...
@@ -692,11 +692,11 @@ int32 field::select_with_sum_limit(int16 step, uint8 playerid, int32 acc, int32
...
@@ -692,11 +692,11 @@ int32 field::select_with_sum_limit(int16 step, uint8 playerid, int32 acc, int32
int32
m
=
(
int32
)
core
.
select_cards
.
size
();
int32
m
=
(
int32
)
core
.
select_cards
.
size
();
for
(
int32
i
=
mcount
;
i
<
returns
.
bvalue
[
0
];
++
i
)
{
for
(
int32
i
=
mcount
;
i
<
returns
.
bvalue
[
0
];
++
i
)
{
int32
v
=
returns
.
bvalue
[
i
+
1
];
int32
v
=
returns
.
bvalue
[
i
+
1
];
if
(
v
<
0
||
v
>=
m
||
c
[
v
]
)
{
if
(
v
<
0
||
v
>=
m
||
c
.
count
(
v
)
)
{
pduel
->
write_buffer8
(
MSG_RETRY
);
pduel
->
write_buffer8
(
MSG_RETRY
);
return
FALSE
;
return
FALSE
;
}
}
c
[
v
]
=
1
;
c
.
insert
(
v
)
;
int32
op
=
core
.
select_cards
[
v
]
->
sum_param
;
int32
op
=
core
.
select_cards
[
v
]
->
sum_param
;
int32
o1
=
op
&
0xffff
;
int32
o1
=
op
&
0xffff
;
int32
o2
=
op
>>
16
;
int32
o2
=
op
>>
16
;
...
@@ -737,15 +737,15 @@ int32 field::sort_card(int16 step, uint8 playerid) {
...
@@ -737,15 +737,15 @@ int32 field::sort_card(int16 step, uint8 playerid) {
}
else
{
}
else
{
if
(
returns
.
bvalue
[
0
]
==
-
1
)
if
(
returns
.
bvalue
[
0
]
==
-
1
)
return
TRUE
;
return
TRUE
;
byte
c
[
64
]
=
{}
;
std
::
set
<
int8
>
c
;
uint8
m
=
(
uint8
)
core
.
select_cards
.
size
();
uint8
m
=
(
uint8
)
core
.
select_cards
.
size
();
for
(
uint8
i
=
0
;
i
<
m
;
++
i
)
{
for
(
uint8
i
=
0
;
i
<
m
;
++
i
)
{
int8
v
=
returns
.
bvalue
[
i
];
int8
v
=
returns
.
bvalue
[
i
];
if
(
v
<
0
||
v
>=
m
||
c
[
v
]
)
{
if
(
v
<
0
||
v
>=
m
||
c
.
count
(
v
)
)
{
pduel
->
write_buffer8
(
MSG_RETRY
);
pduel
->
write_buffer8
(
MSG_RETRY
);
return
FALSE
;
return
FALSE
;
}
}
c
[
v
]
=
1
;
c
.
insert
(
v
)
;
}
}
return
TRUE
;
return
TRUE
;
}
}
...
...
Classes/ocgcore/processor.cpp
View file @
4c1accec
...
@@ -3839,6 +3839,8 @@ int32 field::process_turn(uint16 step, uint8 turn_player) {
...
@@ -3839,6 +3839,8 @@ int32 field::process_turn(uint16 step, uint8 turn_player) {
return
FALSE
;
return
FALSE
;
}
}
case
10
:
{
case
10
:
{
if
(
core
.
new_fchain
.
size
()
||
core
.
new_ochain
.
size
())
add_process
(
PROCESSOR_POINT_EVENT
,
0
,
0
,
0
,
0
,
0
);
add_process
(
PROCESSOR_PHASE_EVENT
,
0
,
0
,
0
,
PHASE_BATTLE_START
,
0
);
add_process
(
PROCESSOR_PHASE_EVENT
,
0
,
0
,
0
,
PHASE_BATTLE_START
,
0
);
return
FALSE
;
return
FALSE
;
}
}
...
...
Classes/ocgcore/scriptlib.h
View file @
4c1accec
...
@@ -582,6 +582,7 @@ public:
...
@@ -582,6 +582,7 @@ public:
static
int32
duel_is_player_can_additional_summon
(
lua_State
*
L
);
static
int32
duel_is_player_can_additional_summon
(
lua_State
*
L
);
static
int32
duel_is_chain_negatable
(
lua_State
*
L
);
static
int32
duel_is_chain_negatable
(
lua_State
*
L
);
static
int32
duel_is_chain_disablable
(
lua_State
*
L
);
static
int32
duel_is_chain_disablable
(
lua_State
*
L
);
static
int32
duel_is_chain_disabled
(
lua_State
*
L
);
static
int32
duel_check_chain_target
(
lua_State
*
L
);
static
int32
duel_check_chain_target
(
lua_State
*
L
);
static
int32
duel_check_chain_uniqueness
(
lua_State
*
L
);
static
int32
duel_check_chain_uniqueness
(
lua_State
*
L
);
static
int32
duel_get_activity_count
(
lua_State
*
L
);
static
int32
duel_get_activity_count
(
lua_State
*
L
);
...
...
mobile/assets/changelog.html
View file @
4c1accec
...
@@ -16,15 +16,24 @@
...
@@ -16,15 +16,24 @@
特别感谢: 尸体233,废话多,大毛,幻兽L 的支持与努力.
特别感谢: 尸体233,废话多,大毛,幻兽L 的支持与努力.
</pre>
</pre>
<ul>
<ul>
<li
style=
"color:#ffff00"
>
3.9.
7
</li>
<li
style=
"color:#ffff00"
>
3.9.
8
</li>
</ul>
</ul>
<pre>
<pre>
更新:
更新:
1.更新ygo内核;
1.更新ygo内核;
2.新卡1109+KC01+VJ;
2.新卡DP27+VP22+T1108+AC02+VJ;
3.2022-7-1OCG禁卡表;
4.2022-5-17TCG禁卡表;
变更:
变更:
1.修
正搜索关键词和卡名一致的卡不会置顶的
问题;
1.修
复bot一些出牌
问题;
2.先行卡覆盖时删除旧的卡组展示文件;
2.先行卡覆盖时删除旧的卡组展示文件;
3.修复卡组码保存卡组后无法刷新的问题;
4.竖屏卡组管理
·增加显示主卡组第一张卡预览;
·增加是否符合最新禁卡表标识;
·增加是否含有先行卡标识;
·增加主卡额外副卡统计数量;
·增加主卡数量不够的高亮显示;
</pre>
</pre>
<h3
style=
"color:#ff0000"
>
注意
</h3>
<h3
style=
"color:#ff0000"
>
注意
</h3>
<pre>
<pre>
...
...
mobile/assets/data/conf/lflist.conf
View file @
4c1accec
This diff is collapsed.
Click to expand it.
mobile/assets/data/conf/strings.conf
View file @
4c1accec
...
@@ -268,6 +268,7 @@
...
@@ -268,6 +268,7 @@
!
system
1190
加入手卡
!
system
1190
加入手卡
!
system
1191
送去墓地
!
system
1191
送去墓地
!
system
1192
除外
!
system
1192
除外
!
system
1193
回到卡组
#menu
#menu
!
system
1200
本地联机
!
system
1200
本地联机
!
system
1201
单人游戏
!
system
1201
单人游戏
...
@@ -642,6 +643,8 @@
...
@@ -642,6 +643,8 @@
!
counter
0
x60
指示物(北极天熊辐射)
!
counter
0
x60
指示物(北极天熊辐射)
!
counter
0
x61
指示物(命运的囚人)
!
counter
0
x61
指示物(命运的囚人)
!
counter
0
x62
指示物(逐渐削减的生命)
!
counter
0
x62
指示物(逐渐削减的生命)
!
counter
0
x1063
幻觉指示物
!
counter
0
x64
G
石人指示物
#setnames, using tab for comment
#setnames, using tab for comment
!
setname
0
x1
正义盟军
A
・
O
・
J
!
setname
0
x1
正义盟军
A
・
O
・
J
!
setname
0
x2
次世代 ジェネクス
!
setname
0
x2
次世代 ジェネクス
...
@@ -717,6 +720,7 @@
...
@@ -717,6 +720,7 @@
!
setname
0
x34
宝玉 宝玉
!
setname
0
x34
宝玉 宝玉
!
setname
0
x1034
宝玉兽 宝玉獣
!
setname
0
x1034
宝玉兽 宝玉獣
!
setname
0
x2034
究极宝玉神 究極宝玉神
!
setname
0
x2034
究极宝玉神 究極宝玉神
!
setname
0
x5034
高等宝玉兽
A
宝玉獣
!
setname
0
x35
魔轰神 魔轟神
!
setname
0
x35
魔轰神 魔轟神
!
setname
0
x36
机甲 マシンナーズ
!
setname
0
x36
机甲 マシンナーズ
!
setname
0
x37
霞之谷 霞の谷
!
setname
0
x37
霞之谷 霞の谷
...
@@ -1142,3 +1146,7 @@
...
@@ -1142,3 +1146,7 @@
!
setname
0
x182
春化精
!
setname
0
x182
春化精
!
setname
0
x183
悠悠 もけもけ
!
setname
0
x183
悠悠 もけもけ
!
setname
0
x184
翼侠 ウィングマン
!
setname
0
x184
翼侠 ウィングマン
#setname 0x185 涂鸦 らくがき
!
setname
0
x1185
涂鸦兽 らくがきじゅう
!
setname
0
x2185
涂鸦本 らくがきちょう
!
setname
0
x186
G
石人
G
ゴーレム
mobile/assets_en/data/conf/strings.conf
View file @
4c1accec
...
@@ -333,7 +333,8 @@
...
@@ -333,7 +333,8 @@
!
system
1280
BGM
!
system
1280
BGM
!
system
1281
Automatically
switch
BGM
!
system
1281
Automatically
switch
BGM
!
system
1283
Drawing
field
spell
!
system
1283
Drawing
field
spell
!
system
1287
Always
showing
single
chain
!
system
1287
Show
Chain
1
!
system
1288
Ban
List
!
system
1290
Disable
Chatting
!
system
1290
Disable
Chatting
!
system
1291
Mute
spectators
!
system
1291
Mute
spectators
!
system
1292
Ignore
chain
!
system
1292
Ignore
chain
...
@@ -547,7 +548,7 @@
...
@@ -547,7 +548,7 @@
!
victory
0
x1f
Victory
by
the
effect
of
Exodia
,
Master
of
The
Guard
!
victory
0
x1f
Victory
by
the
effect
of
Exodia
,
Master
of
The
Guard
!
victory
0
x20
Victory
by
the
effect
of
True
Exodia
!
victory
0
x20
Victory
by
the
effect
of
True
Exodia
!
victory
0
x21
Victory
by
the
effect
of
Number
iC1000
:
Numerounius
Numerounia
!
victory
0
x21
Victory
by
the
effect
of
Number
iC1000
:
Numerounius
Numerounia
!
victory
0
x22
Victory
by
the
effect
of
Sekitori
-
Musomaru
!
victory
0
x22
Victory
by
the
effect
of
Musical
Sumo
Dice
Games
!
victory
0
xffff
Match
victory
by
the
effect
of
「%
ls
」
!
victory
0
xffff
Match
victory
by
the
effect
of
「%
ls
」
#counters
#counters
!
counter
0
x1
Spell
Counter
!
counter
0
x1
Spell
Counter
...
@@ -642,6 +643,8 @@
...
@@ -642,6 +643,8 @@
!
counter
0
x60
Counter
(
Ursarctic
Radiation
)
!
counter
0
x60
Counter
(
Ursarctic
Radiation
)
!
counter
0
x61
Counter
(
Prisoner
of
Destiny
)
!
counter
0
x61
Counter
(
Prisoner
of
Destiny
)
!
counter
0
x62
Counter
(
Life
Shaver
)
!
counter
0
x62
Counter
(
Life
Shaver
)
!
counter
0
x1063
Hallucination
Counter
!
counter
0
x64
G
Golem
Counter
#setnames, using tab for comment
#setnames, using tab for comment
!
setname
0
x1
Ally
of
Justice
!
setname
0
x1
Ally
of
Justice
!
setname
0
x2
Genex
!
setname
0
x2
Genex
...
@@ -714,6 +717,7 @@
...
@@ -714,6 +717,7 @@
!
setname
0
x34
Crystal
!
setname
0
x34
Crystal
!
setname
0
x1034
Crystal
Beast
!
setname
0
x1034
Crystal
Beast
!
setname
0
x2034
Ultimate
Crystal
!
setname
0
x2034
Ultimate
Crystal
!
setname
0
x5034
Advanced
Crystal
Beast
!
setname
0
x35
Fabled
!
setname
0
x35
Fabled
!
setname
0
x1035
The
Fabled
!
setname
0
x1035
The
Fabled
!
setname
0
x36
Machina
!
setname
0
x36
Machina
...
@@ -1122,7 +1126,7 @@
...
@@ -1122,7 +1126,7 @@
!
setname
0
x176
Barian
'
s
!
setname
0
x176
Barian
'
s
!
setname
0
x177
Kairyu
-
Shin
!
setname
0
x177
Kairyu
-
Shin
!
setname
0
x178
Sea
Stealth
!
setname
0
x178
Sea
Stealth
!
setname
0
x179
Therion
s
!
setname
0
x179
Therion
!
setname
0
x17a
Scareclaw
!
setname
0
x17a
Scareclaw
!
setname
0
x17b
Battleguard
!
setname
0
x17b
Battleguard
!
setname
0
x17c
Libromancer
!
setname
0
x17c
Libromancer
...
@@ -1134,4 +1138,8 @@
...
@@ -1134,4 +1138,8 @@
!
setname
0
x181
Tearalaments
!
setname
0
x181
Tearalaments
!
setname
0
x182
Vernalizer
Fairy
!
setname
0
x182
Vernalizer
Fairy
!
setname
0
x183
Mokey
Mokey
!
setname
0
x183
Mokey
Mokey
!
setname
0
x184
Wingman
!
setname
0
x184
Wingman
\ No newline at end of file
#setname 0x185 Doodle
!
setname
0
x1185
Doodle
Beast
!
setname
0
x2185
Doodlebook
!
setname
0
x186
G
Golem
\ No newline at end of file
mobile/assets_ko/data/conf/strings.conf
View file @
4c1accec
...
@@ -373,7 +373,7 @@
...
@@ -373,7 +373,7 @@
!
system
1326
효과
!
system
1326
효과
!
system
1327
모든 검색
!
system
1327
모든 검색
!
system
1328
관리
!
system
1328
관리
!
system
1329
카드군:
!
system
1329
카드군:
!
system
1330
메인:
!
system
1330
메인:
!
system
1331
엑스트라:
!
system
1331
엑스트라:
!
system
1332
사이드:
!
system
1332
사이드:
...
@@ -642,6 +642,7 @@
...
@@ -642,6 +642,7 @@
!
counter
0
x5f
피스 카운터
!
counter
0
x5f
피스 카운터
!
counter
0
x60
카운터(베어루크티 라디에이션)
!
counter
0
x60
카운터(베어루크티 라디에이션)
!
counter
0
x61
카운터(운명의 수인(囚人))
!
counter
0
x61
카운터(운명의 수인(囚人))
!
counter
0
x62
카운터(꺼져가는 생명)
#setnames, using tab for comment
#setnames, using tab for comment
!
setname
0
x1
얼리 오브 저스티스(정발명:
A
·
O
·
J
)
!
setname
0
x1
얼리 오브 저스티스(정발명:
A
·
O
·
J
)
!
setname
0
x2
제넥스
!
setname
0
x2
제넥스
...
@@ -1130,13 +1131,13 @@
...
@@ -1130,13 +1131,13 @@
!
setname
0
x177
리바이어던
!
setname
0
x177
리바이어던
!
setname
0
x178
씨 스텔스
!
setname
0
x178
씨 스텔스
!
setname
0
x179
세리온즈
!
setname
0
x179
세리온즈
!
setname
0
x17a
스케어클로
우
!
setname
0
x17a
스케어클로
!
setname
0
x17b
바바리안
!
setname
0
x17b
바바리안
!
setname
0
x17c
리브로맨서(
Libromancer
)
!
setname
0
x17c
리브로맨서(
Libromancer
)
!
setname
0
x17d
발리안
츠
!
setname
0
x17d
밸리언
츠
!
setname
0
x17e
라뷰린스
!
setname
0
x17e
라뷰린스
!
setname
0
x117e
웰컴 라뷰린스
!
setname
0
x117e
웰컴 라뷰린스
!
setname
0
x17f
룬(미스터룬)
!
setname
0
x17f
루닉
!
setname
0
x180
스프라이트
!
setname
0
x180
스프라이트
!
setname
0
x181
티아라멘츠
!
setname
0
x181
티아라멘츠
!
setname
0
x182
춘화정
!
setname
0
x182
춘화정
...
...
mobile/build.gradle
View file @
4c1accec
...
@@ -9,8 +9,8 @@ android {
...
@@ -9,8 +9,8 @@ android {
minSdkVersion
21
minSdkVersion
21
//noinspection ExpiredTargetSdkVersion
//noinspection ExpiredTargetSdkVersion
targetSdkVersion
29
targetSdkVersion
29
versionCode
390
700430
versionCode
390
800618
versionName
"3.9.
7
"
versionName
"3.9.
8
"
flavorDimensions
"versionCode"
flavorDimensions
"versionCode"
vectorDrawables
.
useSupportLibrary
=
true
vectorDrawables
.
useSupportLibrary
=
true
ndk
{
ndk
{
...
...
mobile/src/main/res/drawable-xhdpi/ic_launcher3.png
View replaced file @
6ad6c231
View file @
4c1accec
152 KB
|
W:
|
H:
137 KB
|
W:
|
H:
2-up
Swipe
Onion skin
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