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
cd844fd3
Commit
cd844fd3
authored
Dec 18, 2022
by
Chunchi Che
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feat/service/response' into 'main'
Feat/service/response See merge request
!39
parents
09e86476
b92bb5f2
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
382 additions
and
5 deletions
+382
-5
neos-protobuf
neos-protobuf
+1
-1
src/api/ocgcore/idl/ocgcore.ts
src/api/ocgcore/idl/ocgcore.ts
+283
-3
src/api/ocgcore/ocgAdapter/bufferIO.ts
src/api/ocgcore/ocgAdapter/bufferIO.ts
+27
-0
src/api/ocgcore/ocgAdapter/ctos/ctosGameMsgResponse/mod.ts
src/api/ocgcore/ocgAdapter/ctos/ctosGameMsgResponse/mod.ts
+32
-0
src/api/ocgcore/ocgAdapter/ctos/ctosGameMsgResponse/selectIdleCmd.ts
...core/ocgAdapter/ctos/ctosGameMsgResponse/selectIdleCmd.ts
+11
-0
src/api/ocgcore/ocgAdapter/protoDecl.ts
src/api/ocgcore/ocgAdapter/protoDecl.ts
+1
-0
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/selectIdleCmd.ts
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/selectIdleCmd.ts
+6
-0
src/api/ocgcore/ocgHelper.ts
src/api/ocgcore/ocgHelper.ts
+14
-0
src/reducers/duel/util.ts
src/reducers/duel/util.ts
+2
-0
src/service/duel/selectIdleCmd.ts
src/service/duel/selectIdleCmd.ts
+2
-1
src/ui/Duel/simpleDuel/hands.ts
src/ui/Duel/simpleDuel/hands.ts
+3
-0
No files found.
neos-protobuf
@
1ba7de35
Subproject commit
cd2ef52b2642e59cc021b44e9816fd8622b2a8c
b
Subproject commit
1ba7de35c6c717fe9f361dcdada8ffd6c43f9a8
b
src/api/ocgcore/idl/ocgcore.ts
View file @
cd844fd3
...
...
@@ -12,7 +12,7 @@ export namespace ygopro {
PAPER
=
3
,
}
export
class
YgoCtosMsg
extends
pb_1
.
Message
{
#
one_of_decls
:
number
[][]
=
[[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
]];
#
one_of_decls
:
number
[][]
=
[[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
]];
constructor
(
data
?:
|
any
[]
...
...
@@ -27,6 +27,7 @@ export namespace ygopro {
ctos_hand_result
?:
never
;
ctos_tp_result
?:
never
;
ctos_time_confirm
?:
never
;
ctos_response
?:
never
;
}
|
{
ctos_player_info
?:
never
;
...
...
@@ -38,6 +39,7 @@ export namespace ygopro {
ctos_hand_result
?:
never
;
ctos_tp_result
?:
never
;
ctos_time_confirm
?:
never
;
ctos_response
?:
never
;
}
|
{
ctos_player_info
?:
never
;
...
...
@@ -49,6 +51,7 @@ export namespace ygopro {
ctos_hand_result
?:
never
;
ctos_tp_result
?:
never
;
ctos_time_confirm
?:
never
;
ctos_response
?:
never
;
}
|
{
ctos_player_info
?:
never
;
...
...
@@ -60,6 +63,7 @@ export namespace ygopro {
ctos_hand_result
?:
never
;
ctos_tp_result
?:
never
;
ctos_time_confirm
?:
never
;
ctos_response
?:
never
;
}
|
{
ctos_player_info
?:
never
;
...
...
@@ -71,6 +75,7 @@ export namespace ygopro {
ctos_hand_result
?:
never
;
ctos_tp_result
?:
never
;
ctos_time_confirm
?:
never
;
ctos_response
?:
never
;
}
|
{
ctos_player_info
?:
never
;
...
...
@@ -82,6 +87,7 @@ export namespace ygopro {
ctos_hand_result
?:
never
;
ctos_tp_result
?:
never
;
ctos_time_confirm
?:
never
;
ctos_response
?:
never
;
}
|
{
ctos_player_info
?:
never
;
...
...
@@ -93,6 +99,7 @@ export namespace ygopro {
ctos_hand_result
?:
CtosHandResult
;
ctos_tp_result
?:
never
;
ctos_time_confirm
?:
never
;
ctos_response
?:
never
;
}
|
{
ctos_player_info
?:
never
;
...
...
@@ -104,6 +111,7 @@ export namespace ygopro {
ctos_hand_result
?:
never
;
ctos_tp_result
?:
CtosTpResult
;
ctos_time_confirm
?:
never
;
ctos_response
?:
never
;
}
|
{
ctos_player_info
?:
never
;
...
...
@@ -115,6 +123,19 @@ export namespace ygopro {
ctos_hand_result
?:
never
;
ctos_tp_result
?:
never
;
ctos_time_confirm
?:
CtosTimeConfirm
;
ctos_response
?:
never
;
}
|
{
ctos_player_info
?:
never
;
ctos_join_game
?:
never
;
ctos_update_deck
?:
never
;
ctos_hs_ready
?:
never
;
ctos_hs_start
?:
never
;
ctos_hs_not_ready
?:
never
;
ctos_hand_result
?:
never
;
ctos_tp_result
?:
never
;
ctos_time_confirm
?:
never
;
ctos_response
?:
CtosGameMsgResponse
;
}
))
)
{
...
...
@@ -161,6 +182,9 @@ export namespace ygopro {
)
{
this
.
ctos_time_confirm
=
data
.
ctos_time_confirm
;
}
if
(
"
ctos_response
"
in
data
&&
data
.
ctos_response
!=
undefined
)
{
this
.
ctos_response
=
data
.
ctos_response
;
}
}
}
get
ctos_player_info
()
{
...
...
@@ -272,6 +296,19 @@ export namespace ygopro {
get
has_ctos_time_confirm
()
{
return
pb_1
.
Message
.
getField
(
this
,
9
)
!=
null
;
}
get
ctos_response
()
{
return
pb_1
.
Message
.
getWrapperField
(
this
,
CtosGameMsgResponse
,
10
)
as
CtosGameMsgResponse
;
}
set
ctos_response
(
value
:
CtosGameMsgResponse
)
{
pb_1
.
Message
.
setOneofWrapperField
(
this
,
10
,
this
.
#
one_of_decls
[
0
],
value
);
}
get
has_ctos_response
()
{
return
pb_1
.
Message
.
getField
(
this
,
10
)
!=
null
;
}
get
msg
()
{
const
cases
:
{
[
index
:
number
]:
...
...
@@ -284,7 +321,8 @@ export namespace ygopro {
|
"
ctos_hs_not_ready
"
|
"
ctos_hand_result
"
|
"
ctos_tp_result
"
|
"
ctos_time_confirm
"
;
|
"
ctos_time_confirm
"
|
"
ctos_response
"
;
}
=
{
0
:
"
none
"
,
1
:
"
ctos_player_info
"
,
...
...
@@ -296,9 +334,10 @@ export namespace ygopro {
7
:
"
ctos_hand_result
"
,
8
:
"
ctos_tp_result
"
,
9
:
"
ctos_time_confirm
"
,
10
:
"
ctos_response
"
,
};
return
cases
[
pb_1
.
Message
.
computeOneofCase
(
this
,
[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
])
pb_1
.
Message
.
computeOneofCase
(
this
,
[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
])
];
}
static
fromObject
(
data
:
{
...
...
@@ -311,6 +350,7 @@ export namespace ygopro {
ctos_hand_result
?:
ReturnType
<
typeof
CtosHandResult
.
prototype
.
toObject
>
;
ctos_tp_result
?:
ReturnType
<
typeof
CtosTpResult
.
prototype
.
toObject
>
;
ctos_time_confirm
?:
ReturnType
<
typeof
CtosTimeConfirm
.
prototype
.
toObject
>
;
ctos_response
?:
ReturnType
<
typeof
CtosGameMsgResponse
.
prototype
.
toObject
>
;
}):
YgoCtosMsg
{
const
message
=
new
YgoCtosMsg
({});
if
(
data
.
ctos_player_info
!=
null
)
{
...
...
@@ -350,6 +390,11 @@ export namespace ygopro {
data
.
ctos_time_confirm
);
}
if
(
data
.
ctos_response
!=
null
)
{
message
.
ctos_response
=
CtosGameMsgResponse
.
fromObject
(
data
.
ctos_response
);
}
return
message
;
}
toObject
()
{
...
...
@@ -367,6 +412,9 @@ export namespace ygopro {
ctos_time_confirm
?:
ReturnType
<
typeof
CtosTimeConfirm
.
prototype
.
toObject
>
;
ctos_response
?:
ReturnType
<
typeof
CtosGameMsgResponse
.
prototype
.
toObject
>
;
}
=
{};
if
(
this
.
ctos_player_info
!=
null
)
{
data
.
ctos_player_info
=
this
.
ctos_player_info
.
toObject
();
...
...
@@ -395,6 +443,9 @@ export namespace ygopro {
if
(
this
.
ctos_time_confirm
!=
null
)
{
data
.
ctos_time_confirm
=
this
.
ctos_time_confirm
.
toObject
();
}
if
(
this
.
ctos_response
!=
null
)
{
data
.
ctos_response
=
this
.
ctos_response
.
toObject
();
}
return
data
;
}
serialize
():
Uint8Array
;
...
...
@@ -437,6 +488,10 @@ export namespace ygopro {
writer
.
writeMessage
(
9
,
this
.
ctos_time_confirm
,
()
=>
this
.
ctos_time_confirm
.
serialize
(
writer
)
);
if
(
this
.
has_ctos_response
)
writer
.
writeMessage
(
10
,
this
.
ctos_response
,
()
=>
this
.
ctos_response
.
serialize
(
writer
)
);
if
(
!
w
)
return
writer
.
getResultBuffer
();
}
static
deserialize
(
bytes
:
Uint8Array
|
pb_1
.
BinaryReader
):
YgoCtosMsg
{
...
...
@@ -508,6 +563,14 @@ export namespace ygopro {
CtosTimeConfirm
.
deserialize
(
reader
))
);
break
;
case
10
:
reader
.
readMessage
(
message
.
ctos_response
,
()
=>
(
message
.
ctos_response
=
CtosGameMsgResponse
.
deserialize
(
reader
))
);
break
;
default
:
reader
.
skipField
();
}
...
...
@@ -2005,6 +2068,201 @@ export namespace ygopro {
return
CtosTimeConfirm
.
deserialize
(
bytes
);
}
}
export
class
CtosGameMsgResponse
extends
pb_1
.
Message
{
#
one_of_decls
:
number
[][]
=
[[
1
]];
constructor
(
data
?:
|
any
[]
|
({}
&
{
select_idle_cmd
?:
CtosGameMsgResponse
.
SelectIdleCmdResponse
;
})
)
{
super
();
pb_1
.
Message
.
initialize
(
this
,
Array
.
isArray
(
data
)
?
data
:
[],
0
,
-
1
,
[],
this
.
#
one_of_decls
);
if
(
!
Array
.
isArray
(
data
)
&&
typeof
data
==
"
object
"
)
{
if
(
"
select_idle_cmd
"
in
data
&&
data
.
select_idle_cmd
!=
undefined
)
{
this
.
select_idle_cmd
=
data
.
select_idle_cmd
;
}
}
}
get
select_idle_cmd
()
{
return
pb_1
.
Message
.
getWrapperField
(
this
,
CtosGameMsgResponse
.
SelectIdleCmdResponse
,
1
)
as
CtosGameMsgResponse
.
SelectIdleCmdResponse
;
}
set
select_idle_cmd
(
value
:
CtosGameMsgResponse
.
SelectIdleCmdResponse
)
{
pb_1
.
Message
.
setOneofWrapperField
(
this
,
1
,
this
.
#
one_of_decls
[
0
],
value
);
}
get
has_select_idle_cmd
()
{
return
pb_1
.
Message
.
getField
(
this
,
1
)
!=
null
;
}
get
gameMsgResponse
()
{
const
cases
:
{
[
index
:
number
]:
"
none
"
|
"
select_idle_cmd
"
;
}
=
{
0
:
"
none
"
,
1
:
"
select_idle_cmd
"
,
};
return
cases
[
pb_1
.
Message
.
computeOneofCase
(
this
,
[
1
])];
}
static
fromObject
(
data
:
{
select_idle_cmd
?:
ReturnType
<
typeof
CtosGameMsgResponse
.
SelectIdleCmdResponse
.
prototype
.
toObject
>
;
}):
CtosGameMsgResponse
{
const
message
=
new
CtosGameMsgResponse
({});
if
(
data
.
select_idle_cmd
!=
null
)
{
message
.
select_idle_cmd
=
CtosGameMsgResponse
.
SelectIdleCmdResponse
.
fromObject
(
data
.
select_idle_cmd
);
}
return
message
;
}
toObject
()
{
const
data
:
{
select_idle_cmd
?:
ReturnType
<
typeof
CtosGameMsgResponse
.
SelectIdleCmdResponse
.
prototype
.
toObject
>
;
}
=
{};
if
(
this
.
select_idle_cmd
!=
null
)
{
data
.
select_idle_cmd
=
this
.
select_idle_cmd
.
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
.
has_select_idle_cmd
)
writer
.
writeMessage
(
1
,
this
.
select_idle_cmd
,
()
=>
this
.
select_idle_cmd
.
serialize
(
writer
)
);
if
(
!
w
)
return
writer
.
getResultBuffer
();
}
static
deserialize
(
bytes
:
Uint8Array
|
pb_1
.
BinaryReader
):
CtosGameMsgResponse
{
const
reader
=
bytes
instanceof
pb_1
.
BinaryReader
?
bytes
:
new
pb_1
.
BinaryReader
(
bytes
),
message
=
new
CtosGameMsgResponse
();
while
(
reader
.
nextField
())
{
if
(
reader
.
isEndGroup
())
break
;
switch
(
reader
.
getFieldNumber
())
{
case
1
:
reader
.
readMessage
(
message
.
select_idle_cmd
,
()
=>
(
message
.
select_idle_cmd
=
CtosGameMsgResponse
.
SelectIdleCmdResponse
.
deserialize
(
reader
))
);
break
;
default
:
reader
.
skipField
();
}
}
return
message
;
}
serializeBinary
():
Uint8Array
{
return
this
.
serialize
();
}
static
deserializeBinary
(
bytes
:
Uint8Array
):
CtosGameMsgResponse
{
return
CtosGameMsgResponse
.
deserialize
(
bytes
);
}
}
export
namespace
CtosGameMsgResponse
{
export
class
SelectIdleCmdResponse
extends
pb_1
.
Message
{
#
one_of_decls
:
number
[][]
=
[];
constructor
(
data
?:
|
any
[]
|
{
code
?:
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
;
}
}
}
get
code
()
{
return
pb_1
.
Message
.
getFieldWithDefault
(
this
,
1
,
0
)
as
number
;
}
set
code
(
value
:
number
)
{
pb_1
.
Message
.
setField
(
this
,
1
,
value
);
}
static
fromObject
(
data
:
{
code
?:
number
}):
SelectIdleCmdResponse
{
const
message
=
new
SelectIdleCmdResponse
({});
if
(
data
.
code
!=
null
)
{
message
.
code
=
data
.
code
;
}
return
message
;
}
toObject
()
{
const
data
:
{
code
?:
number
;
}
=
{};
if
(
this
.
code
!=
null
)
{
data
.
code
=
this
.
code
;
}
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
(
!
w
)
return
writer
.
getResultBuffer
();
}
static
deserialize
(
bytes
:
Uint8Array
|
pb_1
.
BinaryReader
):
SelectIdleCmdResponse
{
const
reader
=
bytes
instanceof
pb_1
.
BinaryReader
?
bytes
:
new
pb_1
.
BinaryReader
(
bytes
),
message
=
new
SelectIdleCmdResponse
();
while
(
reader
.
nextField
())
{
if
(
reader
.
isEndGroup
())
break
;
switch
(
reader
.
getFieldNumber
())
{
case
1
:
message
.
code
=
reader
.
readInt32
();
break
;
default
:
reader
.
skipField
();
}
}
return
message
;
}
serializeBinary
():
Uint8Array
{
return
this
.
serialize
();
}
static
deserializeBinary
(
bytes
:
Uint8Array
):
SelectIdleCmdResponse
{
return
SelectIdleCmdResponse
.
deserialize
(
bytes
);
}
}
}
export
class
StocJoinGame
extends
pb_1
.
Message
{
#
one_of_decls
:
number
[][]
=
[];
constructor
(
...
...
@@ -4909,6 +5167,7 @@ export namespace ygopro {
|
{
card_info
?:
StocGameMessage
.
CardInfo
;
effect_description
?:
number
;
response
?:
number
;
}
)
{
super
();
...
...
@@ -4930,6 +5189,9 @@ export namespace ygopro {
)
{
this
.
effect_description
=
data
.
effect_description
;
}
if
(
"
response
"
in
data
&&
data
.
response
!=
undefined
)
{
this
.
response
=
data
.
response
;
}
}
}
get
card_info
()
{
...
...
@@ -4951,11 +5213,18 @@ export namespace ygopro {
set
effect_description
(
value
:
number
)
{
pb_1
.
Message
.
setField
(
this
,
2
,
value
);
}
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
:
{
card_info
?:
ReturnType
<
typeof
StocGameMessage
.
CardInfo
.
prototype
.
toObject
>
;
effect_description
?:
number
;
response
?:
number
;
}):
IdleData
{
const
message
=
new
IdleData
({});
if
(
data
.
card_info
!=
null
)
{
...
...
@@ -4966,6 +5235,9 @@ export namespace ygopro {
if
(
data
.
effect_description
!=
null
)
{
message
.
effect_description
=
data
.
effect_description
;
}
if
(
data
.
response
!=
null
)
{
message
.
response
=
data
.
response
;
}
return
message
;
}
toObject
()
{
...
...
@@ -4974,6 +5246,7 @@ export namespace ygopro {
typeof
StocGameMessage
.
CardInfo
.
prototype
.
toObject
>
;
effect_description
?:
number
;
response
?:
number
;
}
=
{};
if
(
this
.
card_info
!=
null
)
{
data
.
card_info
=
this
.
card_info
.
toObject
();
...
...
@@ -4981,6 +5254,9 @@ export namespace ygopro {
if
(
this
.
effect_description
!=
null
)
{
data
.
effect_description
=
this
.
effect_description
;
}
if
(
this
.
response
!=
null
)
{
data
.
response
=
this
.
response
;
}
return
data
;
}
serialize
():
Uint8Array
;
...
...
@@ -4993,6 +5269,7 @@ export namespace ygopro {
);
if
(
this
.
effect_description
!=
0
)
writer
.
writeInt32
(
2
,
this
.
effect_description
);
if
(
this
.
response
!=
0
)
writer
.
writeInt32
(
3
,
this
.
response
);
if
(
!
w
)
return
writer
.
getResultBuffer
();
}
static
deserialize
(
bytes
:
Uint8Array
|
pb_1
.
BinaryReader
):
IdleData
{
...
...
@@ -5015,6 +5292,9 @@ export namespace ygopro {
case
2
:
message
.
effect_description
=
reader
.
readInt32
();
break
;
case
3
:
message
.
response
=
reader
.
readInt32
();
break
;
default
:
reader
.
skipField
();
}
...
...
src/api/ocgcore/ocgAdapter/bufferIO.ts
View file @
cd844fd3
...
...
@@ -63,3 +63,30 @@ export class BufferReader {
return
cardInfo
;
}
}
export
class
BufferWriter
{
dataView
:
DataView
;
littleEndian
:
boolean
;
offset
:
number
;
constructor
(
data
:
Uint8Array
,
littleEndian
:
boolean
)
{
this
.
dataView
=
new
DataView
(
data
.
buffer
);
this
.
littleEndian
=
littleEndian
;
this
.
offset
=
0
;
}
writeUint8
(
value
:
number
)
{
this
.
dataView
.
setUint8
(
this
.
offset
,
value
);
this
.
offset
+=
OFFSET_UINT8
;
}
writeInt8
(
value
:
number
)
{
this
.
dataView
.
setInt8
(
this
.
offset
,
value
);
this
.
offset
+=
OFFSET_INT8
;
}
writeUint32
(
value
:
number
)
{
this
.
dataView
.
setUint32
(
this
.
offset
,
value
);
this
.
offset
+=
OFFSET_UINT32
;
}
}
src/api/ocgcore/ocgAdapter/ctos/ctosGameMsgResponse/mod.ts
0 → 100644
View file @
cd844fd3
import
{
ygopro
}
from
"
../../../idl/ocgcore
"
;
import
{
YgoProPacket
}
from
"
../../packet
"
;
import
{
CTOS_RESPONSE
}
from
"
../../protoDecl
"
;
import
adaptSelectIdleCmdResponse
from
"
./selectIdleCmd
"
;
/*
* CTOS CTOS_RESPONSE
*
* @param response: any - 对于服务端传给端上的`GameMsg`,回传一个`Response`
*
* @usage - 告知服务端玩家对局内的操作选择
*
* */
export
default
class
CtosResponsePacket
extends
YgoProPacket
{
constructor
(
pb
:
ygopro
.
YgoCtosMsg
)
{
const
response
=
pb
.
ctos_response
;
let
extraData
=
new
Uint8Array
(
0
);
switch
(
response
.
gameMsgResponse
)
{
case
"
select_idle_cmd
"
:
{
extraData
=
adaptSelectIdleCmdResponse
(
response
.
select_idle_cmd
);
break
;
}
default
:
{
break
;
}
}
super
(
extraData
.
length
+
1
,
CTOS_RESPONSE
,
extraData
);
}
}
src/api/ocgcore/ocgAdapter/ctos/ctosGameMsgResponse/selectIdleCmd.ts
0 → 100644
View file @
cd844fd3
import
{
ygopro
}
from
"
../../../idl/ocgcore
"
;
import
{
BufferWriter
}
from
"
../../bufferIO
"
;
export
default
(
response
:
ygopro
.
CtosGameMsgResponse
.
SelectIdleCmdResponse
)
=>
{
const
array
=
new
Uint8Array
(
4
);
const
writer
=
new
BufferWriter
(
array
,
true
);
writer
.
writeUint32
(
response
.
code
);
return
array
;
};
src/api/ocgcore/ocgAdapter/protoDecl.ts
View file @
cd844fd3
...
...
@@ -10,6 +10,7 @@ export const CTOS_HS_START = 37;
export
const
CTOS_HAND_RESULT
=
3
;
export
const
CTOS_TP_RESULT
=
4
;
export
const
CTOS_TIME_CONFIRM
=
21
;
export
const
CTOS_RESPONSE
=
1
;
export
const
STOC_JOIN_GAME
=
18
;
export
const
STOC_CHAT
=
25
;
...
...
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/selectIdleCmd.ts
View file @
cd844fd3
...
...
@@ -27,6 +27,7 @@ export default (data: Uint8Array) => {
for
(
let
i
=
0
;
i
<
summonCount
;
i
++
)
{
const
idleData
=
new
MsgSelectIdleCmd
.
IdleCmd
.
IdleData
({
card_info
:
reader
.
readCardInfo
(),
response
:
(
i
<<
16
)
+
0
,
});
summonCmd
.
idle_datas
.
push
(
idleData
);
}
...
...
@@ -40,6 +41,7 @@ export default (data: Uint8Array) => {
for
(
let
i
=
0
;
i
<
spSummonCount
;
i
++
)
{
const
idleData
=
new
MsgSelectIdleCmd
.
IdleCmd
.
IdleData
({
card_info
:
reader
.
readCardInfo
(),
response
:
(
i
<<
16
)
+
1
,
});
spSummonCmd
.
idle_datas
.
push
(
idleData
);
}
...
...
@@ -53,6 +55,7 @@ export default (data: Uint8Array) => {
for
(
let
i
=
0
;
i
<
posChangeCount
;
i
++
)
{
const
idleData
=
new
MsgSelectIdleCmd
.
IdleCmd
.
IdleData
({
card_info
:
reader
.
readCardInfo
(),
response
:
(
i
<<
16
)
+
2
,
});
posChangeCmd
.
idle_datas
.
push
(
idleData
);
}
...
...
@@ -66,6 +69,7 @@ export default (data: Uint8Array) => {
for
(
let
i
=
0
;
i
<
mSetCount
;
i
++
)
{
const
idleData
=
new
MsgSelectIdleCmd
.
IdleCmd
.
IdleData
({
card_info
:
reader
.
readCardInfo
(),
response
:
(
i
<<
16
)
+
3
,
});
mSetCmd
.
idle_datas
.
push
(
idleData
);
}
...
...
@@ -79,6 +83,7 @@ export default (data: Uint8Array) => {
for
(
let
i
=
0
;
i
<
sSetCount
;
i
++
)
{
const
idleData
=
new
MsgSelectIdleCmd
.
IdleCmd
.
IdleData
({
card_info
:
reader
.
readCardInfo
(),
response
:
(
i
<<
16
)
+
4
,
});
sSetCmd
.
idle_datas
.
push
(
idleData
);
}
...
...
@@ -93,6 +98,7 @@ export default (data: Uint8Array) => {
const
idleData
=
new
MsgSelectIdleCmd
.
IdleCmd
.
IdleData
({
card_info
:
reader
.
readCardInfo
(),
effect_description
:
reader
.
readUint32
(),
response
:
(
i
<<
16
)
+
5
,
});
activateCmd
.
idle_datas
.
push
(
idleData
);
}
...
...
src/api/ocgcore/ocgHelper.ts
View file @
cd844fd3
...
...
@@ -13,6 +13,7 @@ import HsStartAdapter from "./ocgAdapter/ctos/ctosHsStart";
import
HandResult
from
"
./ocgAdapter/ctos/ctosHandResult
"
;
import
TpResult
from
"
./ocgAdapter/ctos/ctosTpResult
"
;
import
TimeConfirm
from
"
./ocgAdapter/ctos/ctosTimeConfirm
"
;
import
GameMsgResponse
from
"
./ocgAdapter/ctos/ctosGameMsgResponse/mod
"
;
export
function
sendUpdateDeck
(
deck
:
IDeck
)
{
const
updateDeck
=
new
ygopro
.
YgoCtosMsg
({
...
...
@@ -117,3 +118,16 @@ export function sendTimeConfirm() {
socketMiddleWare
({
cmd
:
socketCmd
.
SEND
,
payload
});
}
export
function
sendSelectIdleCmdResponse
(
value
:
number
)
{
const
response
=
new
ygopro
.
YgoCtosMsg
({
ctos_response
:
new
ygopro
.
CtosGameMsgResponse
({
select_idle_cmd
:
new
ygopro
.
CtosGameMsgResponse
.
SelectIdleCmdResponse
({
code
:
value
,
}),
}),
});
const
payload
=
new
GameMsgResponse
(
response
).
serialize
();
socketMiddleWare
({
cmd
:
socketCmd
.
SEND
,
payload
});
}
src/reducers/duel/util.ts
View file @
cd844fd3
...
...
@@ -65,4 +65,6 @@ export interface Interactivity {
interactType
:
InteractType
;
// 如果`interactType`是`ACTIVATE`,这个字段是对应的效果编号
activateIndex
?:
number
;
// 用户点击后,需要回传给服务端的`response`
response
:
number
;
}
src/service/duel/selectIdleCmd.ts
View file @
cd844fd3
...
...
@@ -56,6 +56,7 @@ export default (selectIdleCmd: MsgSelectIdleCmd, dispatch: AppDispatch) => {
interactivity
:
{
interactType
,
activateIndex
:
data
.
effect_description
,
response
:
data
.
response
,
},
})
);
...
...
@@ -64,7 +65,7 @@ export default (selectIdleCmd: MsgSelectIdleCmd, dispatch: AppDispatch) => {
addHandsInteractivity
({
player
,
index
:
card_info
.
sequence
,
interactivity
:
{
interactType
},
interactivity
:
{
interactType
,
response
:
data
.
response
},
})
);
}
...
...
src/ui/Duel/simpleDuel/hands.ts
View file @
cd844fd3
...
...
@@ -2,6 +2,7 @@ import * as BABYLON from "@babylonjs/core";
import
*
as
BABYLON_GUI
from
"
@babylonjs/gui
"
;
import
*
as
CONFIG
from
"
../../../config/ui
"
;
import
{
Card
,
InteractType
}
from
"
../../../reducers/duel/util
"
;
import
{
sendSelectIdleCmdResponse
}
from
"
../../../api/ocgcore/ocgHelper
"
;
export
default
(
hands
:
Card
[],
scene
:
BABYLON
.
Scene
)
=>
{
const
handShape
=
CONFIG
.
HandShape
();
...
...
@@ -87,6 +88,8 @@ function setupHandInteractivity(
button
.
color
=
"
white
"
;
button
.
onPointerClickObservable
.
add
(()
=>
{
console
.
log
(
`<Interact>hand
${
handIdx
}
`
);
sendSelectIdleCmdResponse
(
interactivities
[
i
].
response
);
});
advancedTexture
.
addControl
(
button
);
...
...
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