Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
N
Neos
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
love_飞影
Neos
Commits
6811be94
Commit
6811be94
authored
Jan 02, 2023
by
Chunchi Che
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feat/service/select_card' into 'main'
Feat/service/select card See merge request
!60
parents
ae0cafb9
8ddec62c
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
661 additions
and
39 deletions
+661
-39
neos-protobuf
neos-protobuf
+1
-1
src/api/ocgcore/idl/ocgcore.ts
src/api/ocgcore/idl/ocgcore.ts
+543
-6
src/api/ocgcore/ocgAdapter/bufferIO.ts
src/api/ocgcore/ocgAdapter/bufferIO.ts
+25
-0
src/api/ocgcore/ocgAdapter/ctos/ctosGameMsgResponse/mod.ts
src/api/ocgcore/ocgAdapter/ctos/ctosGameMsgResponse/mod.ts
+6
-0
src/api/ocgcore/ocgAdapter/ctos/ctosGameMsgResponse/selectCard.ts
...ocgcore/ocgAdapter/ctos/ctosGameMsgResponse/selectCard.ts
+14
-0
src/api/ocgcore/ocgAdapter/protoDecl.ts
src/api/ocgcore/ocgAdapter/protoDecl.ts
+1
-0
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/mod.ts
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/mod.ts
+6
-0
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/move.ts
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/move.ts
+2
-31
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/selectCard.ts
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/selectCard.ts
+33
-0
src/api/ocgcore/ocgAdapter/util.ts
src/api/ocgcore/ocgAdapter/util.ts
+1
-0
src/api/ocgcore/ocgHelper.ts
src/api/ocgcore/ocgHelper.ts
+13
-0
src/service/duel/gameMsg.ts
src/service/duel/gameMsg.ts
+8
-0
src/service/duel/selectCard.ts
src/service/duel/selectCard.ts
+8
-0
src/ui/Duel/cardListModal.tsx
src/ui/Duel/cardListModal.tsx
+0
-1
No files found.
neos-protobuf
@
07651117
Subproject commit
621489ace4b9d2ecb653fe0da25279b68154d206
Subproject commit
07651117cd5f99d81740c2419383a88904ba6557
src/api/ocgcore/idl/ocgcore.ts
View file @
6811be94
...
...
@@ -2412,7 +2412,7 @@ export namespace ygopro {
}
}
export
class
CtosGameMsgResponse
extends
pb_1
.
Message
{
#
one_of_decls
:
number
[][]
=
[[
1
,
2
]];
#
one_of_decls
:
number
[][]
=
[[
1
,
2
,
3
]];
constructor
(
data
?:
|
any
[]
...
...
@@ -2420,10 +2420,17 @@ export namespace ygopro {
|
{
select_idle_cmd
?:
CtosGameMsgResponse
.
SelectIdleCmdResponse
;
select_place
?:
never
;
select_card
?:
never
;
}
|
{
select_idle_cmd
?:
never
;
select_place
?:
CtosGameMsgResponse
.
SelectPlaceResponse
;
select_card
?:
never
;
}
|
{
select_idle_cmd
?:
never
;
select_place
?:
never
;
select_card
?:
CtosGameMsgResponse
.
SelectCardResponse
;
}
))
)
{
...
...
@@ -2443,6 +2450,9 @@ export namespace ygopro {
if
(
"
select_place
"
in
data
&&
data
.
select_place
!=
undefined
)
{
this
.
select_place
=
data
.
select_place
;
}
if
(
"
select_card
"
in
data
&&
data
.
select_card
!=
undefined
)
{
this
.
select_card
=
data
.
select_card
;
}
}
}
get
select_idle_cmd
()
{
...
...
@@ -2471,15 +2481,33 @@ export namespace ygopro {
get
has_select_place
()
{
return
pb_1
.
Message
.
getField
(
this
,
2
)
!=
null
;
}
get
select_card
()
{
return
pb_1
.
Message
.
getWrapperField
(
this
,
CtosGameMsgResponse
.
SelectCardResponse
,
3
)
as
CtosGameMsgResponse
.
SelectCardResponse
;
}
set
select_card
(
value
:
CtosGameMsgResponse
.
SelectCardResponse
)
{
pb_1
.
Message
.
setOneofWrapperField
(
this
,
3
,
this
.
#
one_of_decls
[
0
],
value
);
}
get
has_select_card
()
{
return
pb_1
.
Message
.
getField
(
this
,
3
)
!=
null
;
}
get
gameMsgResponse
()
{
const
cases
:
{
[
index
:
number
]:
"
none
"
|
"
select_idle_cmd
"
|
"
select_place
"
;
[
index
:
number
]:
|
"
none
"
|
"
select_idle_cmd
"
|
"
select_place
"
|
"
select_card
"
;
}
=
{
0
:
"
none
"
,
1
:
"
select_idle_cmd
"
,
2
:
"
select_place
"
,
3
:
"
select_card
"
,
};
return
cases
[
pb_1
.
Message
.
computeOneofCase
(
this
,
[
1
,
2
])];
return
cases
[
pb_1
.
Message
.
computeOneofCase
(
this
,
[
1
,
2
,
3
])];
}
static
fromObject
(
data
:
{
select_idle_cmd
?:
ReturnType
<
...
...
@@ -2488,6 +2516,9 @@ export namespace ygopro {
select_place
?:
ReturnType
<
typeof
CtosGameMsgResponse
.
SelectPlaceResponse
.
prototype
.
toObject
>
;
select_card
?:
ReturnType
<
typeof
CtosGameMsgResponse
.
SelectCardResponse
.
prototype
.
toObject
>
;
}):
CtosGameMsgResponse
{
const
message
=
new
CtosGameMsgResponse
({});
if
(
data
.
select_idle_cmd
!=
null
)
{
...
...
@@ -2500,6 +2531,11 @@ export namespace ygopro {
message
.
select_place
=
CtosGameMsgResponse
.
SelectPlaceResponse
.
fromObject
(
data
.
select_place
);
}
if
(
data
.
select_card
!=
null
)
{
message
.
select_card
=
CtosGameMsgResponse
.
SelectCardResponse
.
fromObject
(
data
.
select_card
);
}
return
message
;
}
toObject
()
{
...
...
@@ -2510,6 +2546,9 @@ export namespace ygopro {
select_place
?:
ReturnType
<
typeof
CtosGameMsgResponse
.
SelectPlaceResponse
.
prototype
.
toObject
>
;
select_card
?:
ReturnType
<
typeof
CtosGameMsgResponse
.
SelectCardResponse
.
prototype
.
toObject
>
;
}
=
{};
if
(
this
.
select_idle_cmd
!=
null
)
{
data
.
select_idle_cmd
=
this
.
select_idle_cmd
.
toObject
();
...
...
@@ -2517,6 +2556,9 @@ export namespace ygopro {
if
(
this
.
select_place
!=
null
)
{
data
.
select_place
=
this
.
select_place
.
toObject
();
}
if
(
this
.
select_card
!=
null
)
{
data
.
select_card
=
this
.
select_card
.
toObject
();
}
return
data
;
}
serialize
():
Uint8Array
;
...
...
@@ -2531,6 +2573,10 @@ export namespace ygopro {
writer
.
writeMessage
(
2
,
this
.
select_place
,
()
=>
this
.
select_place
.
serialize
(
writer
)
);
if
(
this
.
has_select_card
)
writer
.
writeMessage
(
3
,
this
.
select_card
,
()
=>
this
.
select_card
.
serialize
(
writer
)
);
if
(
!
w
)
return
writer
.
getResultBuffer
();
}
static
deserialize
(
...
...
@@ -2560,6 +2606,14 @@ export namespace ygopro {
CtosGameMsgResponse
.
SelectPlaceResponse
.
deserialize
(
reader
))
);
break
;
case
3
:
reader
.
readMessage
(
message
.
select_card
,
()
=>
(
message
.
select_card
=
CtosGameMsgResponse
.
SelectCardResponse
.
deserialize
(
reader
))
);
break
;
default
:
reader
.
skipField
();
}
...
...
@@ -2784,6 +2838,89 @@ export namespace ygopro {
return
SelectPlaceResponse
.
deserialize
(
bytes
);
}
}
export
class
SelectCardResponse
extends
pb_1
.
Message
{
#
one_of_decls
:
number
[][]
=
[];
constructor
(
data
?:
|
any
[]
|
{
selected_ptrs
?:
number
[];
}
)
{
super
();
pb_1
.
Message
.
initialize
(
this
,
Array
.
isArray
(
data
)
?
data
:
[],
0
,
-
1
,
[
1
],
this
.
#
one_of_decls
);
if
(
!
Array
.
isArray
(
data
)
&&
typeof
data
==
"
object
"
)
{
if
(
"
selected_ptrs
"
in
data
&&
data
.
selected_ptrs
!=
undefined
)
{
this
.
selected_ptrs
=
data
.
selected_ptrs
;
}
}
}
get
selected_ptrs
()
{
return
pb_1
.
Message
.
getFieldWithDefault
(
this
,
1
,
[])
as
number
[];
}
set
selected_ptrs
(
value
:
number
[])
{
pb_1
.
Message
.
setField
(
this
,
1
,
value
);
}
static
fromObject
(
data
:
{
selected_ptrs
?:
number
[];
}):
SelectCardResponse
{
const
message
=
new
SelectCardResponse
({});
if
(
data
.
selected_ptrs
!=
null
)
{
message
.
selected_ptrs
=
data
.
selected_ptrs
;
}
return
message
;
}
toObject
()
{
const
data
:
{
selected_ptrs
?:
number
[];
}
=
{};
if
(
this
.
selected_ptrs
!=
null
)
{
data
.
selected_ptrs
=
this
.
selected_ptrs
;
}
return
data
;
}
serialize
():
Uint8Array
;
serialize
(
w
:
pb_1
.
BinaryWriter
):
void
;
serialize
(
w
?:
pb_1
.
BinaryWriter
):
Uint8Array
|
void
{
const
writer
=
w
||
new
pb_1
.
BinaryWriter
();
if
(
this
.
selected_ptrs
.
length
)
writer
.
writePackedInt32
(
1
,
this
.
selected_ptrs
);
if
(
!
w
)
return
writer
.
getResultBuffer
();
}
static
deserialize
(
bytes
:
Uint8Array
|
pb_1
.
BinaryReader
):
SelectCardResponse
{
const
reader
=
bytes
instanceof
pb_1
.
BinaryReader
?
bytes
:
new
pb_1
.
BinaryReader
(
bytes
),
message
=
new
SelectCardResponse
();
while
(
reader
.
nextField
())
{
if
(
reader
.
isEndGroup
())
break
;
switch
(
reader
.
getFieldNumber
())
{
case
1
:
message
.
selected_ptrs
=
reader
.
readPackedInt32
();
break
;
default
:
reader
.
skipField
();
}
}
return
message
;
}
serializeBinary
():
Uint8Array
{
return
this
.
serialize
();
}
static
deserializeBinary
(
bytes
:
Uint8Array
):
SelectCardResponse
{
return
SelectCardResponse
.
deserialize
(
bytes
);
}
}
}
export
class
StocJoinGame
extends
pb_1
.
Message
{
#
one_of_decls
:
number
[][]
=
[];
...
...
@@ -4163,7 +4300,7 @@ export namespace ygopro {
}
}
export
class
StocGameMessage
extends
pb_1
.
Message
{
#
one_of_decls
:
number
[][]
=
[[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
]];
#
one_of_decls
:
number
[][]
=
[[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
]];
constructor
(
data
?:
|
any
[]
...
...
@@ -4177,6 +4314,7 @@ export namespace ygopro {
select_idle_cmd
?:
never
;
select_place
?:
never
;
move
?:
never
;
select_card
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -4187,6 +4325,7 @@ export namespace ygopro {
select_idle_cmd
?:
never
;
select_place
?:
never
;
move
?:
never
;
select_card
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -4197,6 +4336,7 @@ export namespace ygopro {
select_idle_cmd
?:
never
;
select_place
?:
never
;
move
?:
never
;
select_card
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -4207,6 +4347,7 @@ export namespace ygopro {
select_idle_cmd
?:
never
;
select_place
?:
never
;
move
?:
never
;
select_card
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -4217,6 +4358,7 @@ export namespace ygopro {
select_idle_cmd
?:
never
;
select_place
?:
never
;
move
?:
never
;
select_card
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -4227,6 +4369,7 @@ export namespace ygopro {
select_idle_cmd
?:
StocGameMessage
.
MsgSelectIdleCmd
;
select_place
?:
never
;
move
?:
never
;
select_card
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -4237,6 +4380,7 @@ export namespace ygopro {
select_idle_cmd
?:
never
;
select_place
?:
StocGameMessage
.
MsgSelectPlace
;
move
?:
never
;
select_card
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -4247,6 +4391,18 @@ export namespace ygopro {
select_idle_cmd
?:
never
;
select_place
?:
never
;
move
?:
StocGameMessage
.
MsgMove
;
select_card
?:
never
;
}
|
{
start
?:
never
;
draw
?:
never
;
new_turn
?:
never
;
new_phase
?:
never
;
hint
?:
never
;
select_idle_cmd
?:
never
;
select_place
?:
never
;
move
?:
never
;
select_card
?:
StocGameMessage
.
MsgSelectCard
;
}
))
)
{
...
...
@@ -4284,6 +4440,9 @@ export namespace ygopro {
if
(
"
move
"
in
data
&&
data
.
move
!=
undefined
)
{
this
.
move
=
data
.
move
;
}
if
(
"
select_card
"
in
data
&&
data
.
select_card
!=
undefined
)
{
this
.
select_card
=
data
.
select_card
;
}
}
}
get
start
()
{
...
...
@@ -4390,6 +4549,19 @@ export namespace ygopro {
get
has_move
()
{
return
pb_1
.
Message
.
getField
(
this
,
8
)
!=
null
;
}
get
select_card
()
{
return
pb_1
.
Message
.
getWrapperField
(
this
,
StocGameMessage
.
MsgSelectCard
,
9
)
as
StocGameMessage
.
MsgSelectCard
;
}
set
select_card
(
value
:
StocGameMessage
.
MsgSelectCard
)
{
pb_1
.
Message
.
setOneofWrapperField
(
this
,
9
,
this
.
#
one_of_decls
[
0
],
value
);
}
get
has_select_card
()
{
return
pb_1
.
Message
.
getField
(
this
,
9
)
!=
null
;
}
get
gameMsg
()
{
const
cases
:
{
[
index
:
number
]:
...
...
@@ -4401,7 +4573,8 @@ export namespace ygopro {
|
"
hint
"
|
"
select_idle_cmd
"
|
"
select_place
"
|
"
move
"
;
|
"
move
"
|
"
select_card
"
;
}
=
{
0
:
"
none
"
,
1
:
"
start
"
,
...
...
@@ -4412,9 +4585,10 @@ export namespace ygopro {
6
:
"
select_idle_cmd
"
,
7
:
"
select_place
"
,
8
:
"
move
"
,
9
:
"
select_card
"
,
};
return
cases
[
pb_1
.
Message
.
computeOneofCase
(
this
,
[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
])
pb_1
.
Message
.
computeOneofCase
(
this
,
[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
])
];
}
static
fromObject
(
data
:
{
...
...
@@ -4434,6 +4608,9 @@ export namespace ygopro {
typeof
StocGameMessage
.
MsgSelectPlace
.
prototype
.
toObject
>
;
move
?:
ReturnType
<
typeof
StocGameMessage
.
MsgMove
.
prototype
.
toObject
>
;
select_card
?:
ReturnType
<
typeof
StocGameMessage
.
MsgSelectCard
.
prototype
.
toObject
>
;
}):
StocGameMessage
{
const
message
=
new
StocGameMessage
({});
if
(
data
.
start
!=
null
)
{
...
...
@@ -4466,6 +4643,11 @@ export namespace ygopro {
if
(
data
.
move
!=
null
)
{
message
.
move
=
StocGameMessage
.
MsgMove
.
fromObject
(
data
.
move
);
}
if
(
data
.
select_card
!=
null
)
{
message
.
select_card
=
StocGameMessage
.
MsgSelectCard
.
fromObject
(
data
.
select_card
);
}
return
message
;
}
toObject
()
{
...
...
@@ -4486,6 +4668,9 @@ export namespace ygopro {
typeof
StocGameMessage
.
MsgSelectPlace
.
prototype
.
toObject
>
;
move
?:
ReturnType
<
typeof
StocGameMessage
.
MsgMove
.
prototype
.
toObject
>
;
select_card
?:
ReturnType
<
typeof
StocGameMessage
.
MsgSelectCard
.
prototype
.
toObject
>
;
}
=
{};
if
(
this
.
start
!=
null
)
{
data
.
start
=
this
.
start
.
toObject
();
...
...
@@ -4511,6 +4696,9 @@ export namespace ygopro {
if
(
this
.
move
!=
null
)
{
data
.
move
=
this
.
move
.
toObject
();
}
if
(
this
.
select_card
!=
null
)
{
data
.
select_card
=
this
.
select_card
.
toObject
();
}
return
data
;
}
serialize
():
Uint8Array
;
...
...
@@ -4541,6 +4729,10 @@ export namespace ygopro {
);
if
(
this
.
has_move
)
writer
.
writeMessage
(
8
,
this
.
move
,
()
=>
this
.
move
.
serialize
(
writer
));
if
(
this
.
has_select_card
)
writer
.
writeMessage
(
9
,
this
.
select_card
,
()
=>
this
.
select_card
.
serialize
(
writer
)
);
if
(
!
w
)
return
writer
.
getResultBuffer
();
}
static
deserialize
(
bytes
:
Uint8Array
|
pb_1
.
BinaryReader
):
StocGameMessage
{
...
...
@@ -4609,6 +4801,14 @@ export namespace ygopro {
()
=>
(
message
.
move
=
StocGameMessage
.
MsgMove
.
deserialize
(
reader
))
);
break
;
case
9
:
reader
.
readMessage
(
message
.
select_card
,
()
=>
(
message
.
select_card
=
StocGameMessage
.
MsgSelectCard
.
deserialize
(
reader
))
);
break
;
default
:
reader
.
skipField
();
}
...
...
@@ -6240,5 +6440,342 @@ export namespace ygopro {
return
MsgMove
.
deserialize
(
bytes
);
}
}
export
class
MsgSelectCard
extends
pb_1
.
Message
{
#
one_of_decls
:
number
[][]
=
[];
constructor
(
data
?:
|
any
[]
|
{
player
?:
number
;
cancelable
?:
boolean
;
min
?:
number
;
max
?:
number
;
cards
?:
StocGameMessage
.
MsgSelectCard
.
SelectAbleCard
[];
}
)
{
super
();
pb_1
.
Message
.
initialize
(
this
,
Array
.
isArray
(
data
)
?
data
:
[],
0
,
-
1
,
[
5
],
this
.
#
one_of_decls
);
if
(
!
Array
.
isArray
(
data
)
&&
typeof
data
==
"
object
"
)
{
if
(
"
player
"
in
data
&&
data
.
player
!=
undefined
)
{
this
.
player
=
data
.
player
;
}
if
(
"
cancelable
"
in
data
&&
data
.
cancelable
!=
undefined
)
{
this
.
cancelable
=
data
.
cancelable
;
}
if
(
"
min
"
in
data
&&
data
.
min
!=
undefined
)
{
this
.
min
=
data
.
min
;
}
if
(
"
max
"
in
data
&&
data
.
max
!=
undefined
)
{
this
.
max
=
data
.
max
;
}
if
(
"
cards
"
in
data
&&
data
.
cards
!=
undefined
)
{
this
.
cards
=
data
.
cards
;
}
}
}
get
player
()
{
return
pb_1
.
Message
.
getFieldWithDefault
(
this
,
1
,
0
)
as
number
;
}
set
player
(
value
:
number
)
{
pb_1
.
Message
.
setField
(
this
,
1
,
value
);
}
get
cancelable
()
{
return
pb_1
.
Message
.
getFieldWithDefault
(
this
,
2
,
false
)
as
boolean
;
}
set
cancelable
(
value
:
boolean
)
{
pb_1
.
Message
.
setField
(
this
,
2
,
value
);
}
get
min
()
{
return
pb_1
.
Message
.
getFieldWithDefault
(
this
,
3
,
0
)
as
number
;
}
set
min
(
value
:
number
)
{
pb_1
.
Message
.
setField
(
this
,
3
,
value
);
}
get
max
()
{
return
pb_1
.
Message
.
getFieldWithDefault
(
this
,
4
,
0
)
as
number
;
}
set
max
(
value
:
number
)
{
pb_1
.
Message
.
setField
(
this
,
4
,
value
);
}
get
cards
()
{
return
pb_1
.
Message
.
getRepeatedWrapperField
(
this
,
StocGameMessage
.
MsgSelectCard
.
SelectAbleCard
,
5
)
as
StocGameMessage
.
MsgSelectCard
.
SelectAbleCard
[];
}
set
cards
(
value
:
StocGameMessage
.
MsgSelectCard
.
SelectAbleCard
[])
{
pb_1
.
Message
.
setRepeatedWrapperField
(
this
,
5
,
value
);
}
static
fromObject
(
data
:
{
player
?:
number
;
cancelable
?:
boolean
;
min
?:
number
;
max
?:
number
;
cards
?:
ReturnType
<
typeof
StocGameMessage
.
MsgSelectCard
.
SelectAbleCard
.
prototype
.
toObject
>
[];
}):
MsgSelectCard
{
const
message
=
new
MsgSelectCard
({});
if
(
data
.
player
!=
null
)
{
message
.
player
=
data
.
player
;
}
if
(
data
.
cancelable
!=
null
)
{
message
.
cancelable
=
data
.
cancelable
;
}
if
(
data
.
min
!=
null
)
{
message
.
min
=
data
.
min
;
}
if
(
data
.
max
!=
null
)
{
message
.
max
=
data
.
max
;
}
if
(
data
.
cards
!=
null
)
{
message
.
cards
=
data
.
cards
.
map
((
item
)
=>
StocGameMessage
.
MsgSelectCard
.
SelectAbleCard
.
fromObject
(
item
)
);
}
return
message
;
}
toObject
()
{
const
data
:
{
player
?:
number
;
cancelable
?:
boolean
;
min
?:
number
;
max
?:
number
;
cards
?:
ReturnType
<
typeof
StocGameMessage
.
MsgSelectCard
.
SelectAbleCard
.
prototype
.
toObject
>
[];
}
=
{};
if
(
this
.
player
!=
null
)
{
data
.
player
=
this
.
player
;
}
if
(
this
.
cancelable
!=
null
)
{
data
.
cancelable
=
this
.
cancelable
;
}
if
(
this
.
min
!=
null
)
{
data
.
min
=
this
.
min
;
}
if
(
this
.
max
!=
null
)
{
data
.
max
=
this
.
max
;
}
if
(
this
.
cards
!=
null
)
{
data
.
cards
=
this
.
cards
.
map
(
(
item
:
StocGameMessage
.
MsgSelectCard
.
SelectAbleCard
)
=>
item
.
toObject
()
);
}
return
data
;
}
serialize
():
Uint8Array
;
serialize
(
w
:
pb_1
.
BinaryWriter
):
void
;
serialize
(
w
?:
pb_1
.
BinaryWriter
):
Uint8Array
|
void
{
const
writer
=
w
||
new
pb_1
.
BinaryWriter
();
if
(
this
.
player
!=
0
)
writer
.
writeInt32
(
1
,
this
.
player
);
if
(
this
.
cancelable
!=
false
)
writer
.
writeBool
(
2
,
this
.
cancelable
);
if
(
this
.
min
!=
0
)
writer
.
writeInt32
(
3
,
this
.
min
);
if
(
this
.
max
!=
0
)
writer
.
writeInt32
(
4
,
this
.
max
);
if
(
this
.
cards
.
length
)
writer
.
writeRepeatedMessage
(
5
,
this
.
cards
,
(
item
:
StocGameMessage
.
MsgSelectCard
.
SelectAbleCard
)
=>
item
.
serialize
(
writer
)
);
if
(
!
w
)
return
writer
.
getResultBuffer
();
}
static
deserialize
(
bytes
:
Uint8Array
|
pb_1
.
BinaryReader
):
MsgSelectCard
{
const
reader
=
bytes
instanceof
pb_1
.
BinaryReader
?
bytes
:
new
pb_1
.
BinaryReader
(
bytes
),
message
=
new
MsgSelectCard
();
while
(
reader
.
nextField
())
{
if
(
reader
.
isEndGroup
())
break
;
switch
(
reader
.
getFieldNumber
())
{
case
1
:
message
.
player
=
reader
.
readInt32
();
break
;
case
2
:
message
.
cancelable
=
reader
.
readBool
();
break
;
case
3
:
message
.
min
=
reader
.
readInt32
();
break
;
case
4
:
message
.
max
=
reader
.
readInt32
();
break
;
case
5
:
reader
.
readMessage
(
message
.
cards
,
()
=>
pb_1
.
Message
.
addToRepeatedWrapperField
(
message
,
5
,
StocGameMessage
.
MsgSelectCard
.
SelectAbleCard
.
deserialize
(
reader
),
StocGameMessage
.
MsgSelectCard
.
SelectAbleCard
)
);
break
;
default
:
reader
.
skipField
();
}
}
return
message
;
}
serializeBinary
():
Uint8Array
{
return
this
.
serialize
();
}
static
deserializeBinary
(
bytes
:
Uint8Array
):
MsgSelectCard
{
return
MsgSelectCard
.
deserialize
(
bytes
);
}
}
export
namespace
MsgSelectCard
{
export
class
SelectAbleCard
extends
pb_1
.
Message
{
#
one_of_decls
:
number
[][]
=
[];
constructor
(
data
?:
|
any
[]
|
{
code
?:
number
;
location
?:
CardLocation
;
response
?:
number
;
}
)
{
super
();
pb_1
.
Message
.
initialize
(
this
,
Array
.
isArray
(
data
)
?
data
:
[],
0
,
-
1
,
[],
this
.
#
one_of_decls
);
if
(
!
Array
.
isArray
(
data
)
&&
typeof
data
==
"
object
"
)
{
if
(
"
code
"
in
data
&&
data
.
code
!=
undefined
)
{
this
.
code
=
data
.
code
;
}
if
(
"
location
"
in
data
&&
data
.
location
!=
undefined
)
{
this
.
location
=
data
.
location
;
}
if
(
"
response
"
in
data
&&
data
.
response
!=
undefined
)
{
this
.
response
=
data
.
response
;
}
}
}
get
code
()
{
return
pb_1
.
Message
.
getFieldWithDefault
(
this
,
1
,
0
)
as
number
;
}
set
code
(
value
:
number
)
{
pb_1
.
Message
.
setField
(
this
,
1
,
value
);
}
get
location
()
{
return
pb_1
.
Message
.
getWrapperField
(
this
,
CardLocation
,
2
)
as
CardLocation
;
}
set
location
(
value
:
CardLocation
)
{
pb_1
.
Message
.
setWrapperField
(
this
,
2
,
value
);
}
get
has_location
()
{
return
pb_1
.
Message
.
getField
(
this
,
2
)
!=
null
;
}
get
response
()
{
return
pb_1
.
Message
.
getFieldWithDefault
(
this
,
3
,
0
)
as
number
;
}
set
response
(
value
:
number
)
{
pb_1
.
Message
.
setField
(
this
,
3
,
value
);
}
static
fromObject
(
data
:
{
code
?:
number
;
location
?:
ReturnType
<
typeof
CardLocation
.
prototype
.
toObject
>
;
response
?:
number
;
}):
SelectAbleCard
{
const
message
=
new
SelectAbleCard
({});
if
(
data
.
code
!=
null
)
{
message
.
code
=
data
.
code
;
}
if
(
data
.
location
!=
null
)
{
message
.
location
=
CardLocation
.
fromObject
(
data
.
location
);
}
if
(
data
.
response
!=
null
)
{
message
.
response
=
data
.
response
;
}
return
message
;
}
toObject
()
{
const
data
:
{
code
?:
number
;
location
?:
ReturnType
<
typeof
CardLocation
.
prototype
.
toObject
>
;
response
?:
number
;
}
=
{};
if
(
this
.
code
!=
null
)
{
data
.
code
=
this
.
code
;
}
if
(
this
.
location
!=
null
)
{
data
.
location
=
this
.
location
.
toObject
();
}
if
(
this
.
response
!=
null
)
{
data
.
response
=
this
.
response
;
}
return
data
;
}
serialize
():
Uint8Array
;
serialize
(
w
:
pb_1
.
BinaryWriter
):
void
;
serialize
(
w
?:
pb_1
.
BinaryWriter
):
Uint8Array
|
void
{
const
writer
=
w
||
new
pb_1
.
BinaryWriter
();
if
(
this
.
code
!=
0
)
writer
.
writeInt32
(
1
,
this
.
code
);
if
(
this
.
has_location
)
writer
.
writeMessage
(
2
,
this
.
location
,
()
=>
this
.
location
.
serialize
(
writer
)
);
if
(
this
.
response
!=
0
)
writer
.
writeInt32
(
3
,
this
.
response
);
if
(
!
w
)
return
writer
.
getResultBuffer
();
}
static
deserialize
(
bytes
:
Uint8Array
|
pb_1
.
BinaryReader
):
SelectAbleCard
{
const
reader
=
bytes
instanceof
pb_1
.
BinaryReader
?
bytes
:
new
pb_1
.
BinaryReader
(
bytes
),
message
=
new
SelectAbleCard
();
while
(
reader
.
nextField
())
{
if
(
reader
.
isEndGroup
())
break
;
switch
(
reader
.
getFieldNumber
())
{
case
1
:
message
.
code
=
reader
.
readInt32
();
break
;
case
2
:
reader
.
readMessage
(
message
.
location
,
()
=>
(
message
.
location
=
CardLocation
.
deserialize
(
reader
))
);
break
;
case
3
:
message
.
response
=
reader
.
readInt32
();
break
;
default
:
reader
.
skipField
();
}
}
return
message
;
}
serializeBinary
():
Uint8Array
{
return
this
.
serialize
();
}
static
deserializeBinary
(
bytes
:
Uint8Array
):
SelectAbleCard
{
return
SelectAbleCard
.
deserialize
(
bytes
);
}
}
}
}
}
src/api/ocgcore/ocgAdapter/bufferIO.ts
View file @
6811be94
import
{
ygopro
}
from
"
../idl/ocgcore
"
;
import
{
numberToCardPosition
,
numberToCardZone
}
from
"
./util
"
;
const
OFFSET_UINT8
=
1
;
const
OFFSET_INT8
=
1
;
...
...
@@ -62,6 +63,30 @@ export class BufferReader {
return
cardInfo
;
}
readCardLocation
(
overlay
?:
boolean
):
ygopro
.
CardLocation
{
const
controler
=
this
.
readUint8
();
const
location
=
this
.
readUint8
();
const
sequence
=
this
.
readUint8
();
const
ss
=
this
.
readUint8
();
const
cardLocation
=
new
ygopro
.
CardLocation
({
controler
,
location
:
numberToCardZone
(
location
),
sequence
,
});
if
(
overlay
&&
overlay
)
{
cardLocation
.
overlay_sequence
=
ss
;
}
else
{
const
position
=
numberToCardPosition
(
ss
);
if
(
position
)
{
cardLocation
.
position
=
position
;
}
}
return
cardLocation
;
}
}
export
class
BufferWriter
{
...
...
src/api/ocgcore/ocgAdapter/ctos/ctosGameMsgResponse/mod.ts
View file @
6811be94
...
...
@@ -3,6 +3,7 @@ import { YgoProPacket } from "../../packet";
import
{
CTOS_RESPONSE
}
from
"
../../protoDecl
"
;
import
adaptSelectIdleCmdResponse
from
"
./selectIdleCmd
"
;
import
adaptSelectPlaceResponse
from
"
./selectPlace
"
;
import
adaptSelectCardResponse
from
"
./selectCard
"
;
/*
* CTOS CTOS_RESPONSE
...
...
@@ -28,6 +29,11 @@ export default class CtosResponsePacket extends YgoProPacket {
break
;
}
case
"
select_card
"
:
{
extraData
=
adaptSelectCardResponse
(
response
.
select_card
);
break
;
}
default
:
{
break
;
}
...
...
src/api/ocgcore/ocgAdapter/ctos/ctosGameMsgResponse/selectCard.ts
0 → 100644
View file @
6811be94
import
{
ygopro
}
from
"
../../../idl/ocgcore
"
;
import
{
BufferWriter
}
from
"
../../bufferIO
"
;
export
default
(
response
:
ygopro
.
CtosGameMsgResponse
.
SelectCardResponse
)
=>
{
const
array
=
new
Uint8Array
(
1
+
response
.
selected_ptrs
.
length
);
const
writer
=
new
BufferWriter
(
array
,
true
);
writer
.
writeUint8
(
response
.
selected_ptrs
.
length
);
for
(
const
ptr
of
response
.
selected_ptrs
)
{
writer
.
writeUint8
(
ptr
);
}
return
array
;
};
src/api/ocgcore/ocgAdapter/protoDecl.ts
View file @
6811be94
...
...
@@ -34,3 +34,4 @@ export const MSG_HINT = 2;
export
const
MSG_SELECT_IDLE_CMD
=
11
;
export
const
MSG_SELECT_PLACE
=
18
;
export
const
MSG_MOVE
=
50
;
export
const
MSG_SELECT_CARD
=
15
;
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/mod.ts
View file @
6811be94
...
...
@@ -14,6 +14,7 @@ import MsgHintAdapter from "./hint";
import
MsgSelectIdleCmdAdapter
from
"
./selectIdleCmd
"
;
import
MsgSelectPlaceAdapter
from
"
./selectPlace
"
;
import
MsgMoveAdapter
from
"
./move
"
;
import
MsgSelectCardAdapter
from
"
./selectCard
"
;
/*
* STOC GameMsg
...
...
@@ -79,6 +80,11 @@ export default class GameMsgAdapter implements StocAdapter {
break
;
}
case
GAME_MSG
.
MSG_SELECT_CARD
:
{
gameMsg
.
select_card
=
MsgSelectCardAdapter
(
gameData
);
break
;
}
default
:
{
console
.
log
(
"
Unhandled GameMessage function=
"
,
func
);
...
...
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/move.ts
View file @
6811be94
import
{
ygopro
}
from
"
../../../idl/ocgcore
"
;
import
{
BufferReader
}
from
"
../../bufferIO
"
;
import
{
cardZoneToNumber
,
numberToCardPosition
,
numberToCardZone
,
}
from
"
../../util
"
;
import
MsgMove
=
ygopro
.
StocGameMessage
.
MsgMove
;
/*
...
...
@@ -19,32 +14,8 @@ export default (data: Uint8Array) => {
const
code
=
reader
.
readUint32
();
const
readCardLocation
=
()
=>
{
const
controler
=
reader
.
readUint8
();
const
location
=
reader
.
readUint8
();
const
sequence
=
reader
.
readUint8
();
const
ss
=
reader
.
readUint8
();
const
cardLocation
=
new
ygopro
.
CardLocation
({
controler
,
location
:
numberToCardZone
(
location
),
sequence
,
});
if
(
location
!=
cardZoneToNumber
(
ygopro
.
CardZone
.
OVERLAY
))
{
const
position
=
numberToCardPosition
(
ss
);
if
(
position
)
{
cardLocation
.
position
=
position
;
}
}
else
{
cardLocation
.
overlay_sequence
=
ss
;
}
return
cardLocation
;
};
const
fromLocation
=
readCardLocation
();
const
toLocation
=
readCardLocation
();
const
fromLocation
=
reader
.
readCardLocation
();
const
toLocation
=
reader
.
readCardLocation
();
return
new
MsgMove
({
code
,
...
...
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/selectCard.ts
0 → 100644
View file @
6811be94
import
{
ygopro
}
from
"
../../../idl/ocgcore
"
;
import
{
BufferReader
}
from
"
../../bufferIO
"
;
import
MsgSelectCard
=
ygopro
.
StocGameMessage
.
MsgSelectCard
;
/*
* Msg Select Card
*
* @param - see: https://code.mycard.moe/mycard/neos-protobuf/-/blob/main/idl/ocgcore.neos-protobuf
* @usage - 玩家可选择的卡牌
* */
export
default
(
data
:
Uint8Array
)
=>
{
const
reader
=
new
BufferReader
(
data
,
true
);
const
player
=
reader
.
readUint8
();
const
cancelable
=
reader
.
readUint8
()
!=
0
;
const
min
=
reader
.
readUint8
();
const
max
=
reader
.
readUint8
();
const
count
=
reader
.
readUint8
();
const
msg
=
new
MsgSelectCard
({
player
,
cancelable
,
min
,
max
});
for
(
let
i
=
0
;
i
<
count
;
i
++
)
{
const
code
=
reader
.
readUint32
();
const
location
=
reader
.
readCardLocation
();
msg
.
cards
.
push
(
new
MsgSelectCard
.
SelectAbleCard
({
code
,
location
,
response
:
i
})
);
}
return
msg
;
};
src/api/ocgcore/ocgAdapter/util.ts
View file @
6811be94
...
...
@@ -157,6 +157,7 @@ export function numberToCardZone(
}
}
// TODO: 需要考虑超量叠加情况下的位运算
export
function
numberToCardPosition
(
position
:
number
):
ygopro
.
CardPosition
|
undefined
{
...
...
src/api/ocgcore/ocgHelper.ts
View file @
6811be94
...
...
@@ -150,3 +150,16 @@ export function sendSelectPlaceResponse(value: {
socketMiddleWare
({
cmd
:
socketCmd
.
SEND
,
payload
});
}
export
function
sendSelectCardResponse
(
value
:
number
[])
{
const
response
=
new
ygopro
.
YgoCtosMsg
({
ctos_response
:
new
ygopro
.
CtosGameMsgResponse
({
select_card
:
new
ygopro
.
CtosGameMsgResponse
.
SelectCardResponse
({
selected_ptrs
:
value
,
}),
}),
});
const
payload
=
new
GameMsgResponse
(
response
).
serialize
();
socketMiddleWare
({
cmd
:
socketCmd
.
SEND
,
payload
});
}
src/service/duel/gameMsg.ts
View file @
6811be94
...
...
@@ -8,6 +8,7 @@ import onMsgHint from "./hint";
import
onMsgSelectIdleCmd
from
"
./selectIdleCmd
"
;
import
onMsgSelectPlace
from
"
./selectPlace
"
;
import
onMsgMove
from
"
./move
"
;
import
onMsgSelectCard
from
"
./selectCard
"
;
export
default
function
handleGameMsg
(
pb
:
ygopro
.
YgoStocMsg
)
{
const
dispatch
=
store
.
dispatch
;
...
...
@@ -70,6 +71,13 @@ export default function handleGameMsg(pb: ygopro.YgoStocMsg) {
break
;
}
case
"
select_card
"
:
{
const
selectCard
=
msg
.
select_card
;
onMsgSelectCard
(
selectCard
,
dispatch
);
break
;
}
default
:
{
break
;
}
...
...
src/service/duel/selectCard.ts
0 → 100644
View file @
6811be94
import
{
ygopro
}
from
"
../../api/ocgcore/idl/ocgcore
"
;
import
{
AppDispatch
}
from
"
../../store
"
;
import
MsgSelectCard
=
ygopro
.
StocGameMessage
.
MsgSelectCard
;
export
default
(
selectCard
:
MsgSelectCard
,
dispatch
:
AppDispatch
)
=>
{
console
.
log
(
selectCard
);
// TODO
};
src/ui/Duel/cardListModal.tsx
View file @
6811be94
...
...
@@ -34,7 +34,6 @@ const CardListModal = () => {
cover=
{
<
img
alt=
{
item
.
name
}
src=
{
item
.
imgUrl
}
/>
}
>
<
Meta
title=
{
item
.
name
}
/>
<
p
>
{
item
.
desc
}
</
p
>
</
Card
>
}
>
...
...
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