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
0896be2d
Commit
0896be2d
authored
Jan 17, 2023
by
Chunchi Che
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feat/pos_change' into 'main'
Feat/pos change See merge request
mycard/Neos!83
parents
57e5a7ba
b2bfeb73
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
342 additions
and
4 deletions
+342
-4
neos-protobuf
neos-protobuf
+1
-1
src/api/ocgcore/idl/ocgcore.ts
src/api/ocgcore/idl/ocgcore.ts
+223
-3
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/penetrate.json
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/penetrate.json
+17
-0
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/penetrate.ts
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/penetrate.ts
+4
-0
src/reducers/duel/generic.ts
src/reducers/duel/generic.ts
+11
-0
src/reducers/duel/magicSlice.ts
src/reducers/duel/magicSlice.ts
+18
-0
src/reducers/duel/mod.ts
src/reducers/duel/mod.ts
+6
-0
src/reducers/duel/monstersSlice.ts
src/reducers/duel/monstersSlice.ts
+20
-0
src/service/duel/gameMsg.ts
src/service/duel/gameMsg.ts
+6
-0
src/service/duel/posChange.ts
src/service/duel/posChange.ts
+36
-0
No files found.
neos-protobuf
@
9df2b696
Subproject commit
a6ff791566b10e716210678371d74e62cd128ad9
Subproject commit
9df2b696eb24e89fd760945ef1b218b9d29a6df3
src/api/ocgcore/idl/ocgcore.ts
View file @
0896be2d
...
...
@@ -5017,7 +5017,7 @@ export namespace ygopro {
}
export
class
StocGameMessage
extends
pb_1
.
Message
{
#
one_of_decls
:
number
[][]
=
[
[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
],
[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
,
16
],
];
constructor
(
data
?:
...
...
@@ -5039,6 +5039,7 @@ export namespace ygopro {
select_option
?:
never
;
shuffle_hand
?:
never
;
select_battle_cmd
?:
never
;
pos_change
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -5056,6 +5057,7 @@ export namespace ygopro {
select_option
?:
never
;
shuffle_hand
?:
never
;
select_battle_cmd
?:
never
;
pos_change
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -5073,6 +5075,7 @@ export namespace ygopro {
select_option
?:
never
;
shuffle_hand
?:
never
;
select_battle_cmd
?:
never
;
pos_change
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -5090,6 +5093,7 @@ export namespace ygopro {
select_option
?:
never
;
shuffle_hand
?:
never
;
select_battle_cmd
?:
never
;
pos_change
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -5107,6 +5111,7 @@ export namespace ygopro {
select_option
?:
never
;
shuffle_hand
?:
never
;
select_battle_cmd
?:
never
;
pos_change
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -5124,6 +5129,7 @@ export namespace ygopro {
select_option
?:
never
;
shuffle_hand
?:
never
;
select_battle_cmd
?:
never
;
pos_change
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -5141,6 +5147,7 @@ export namespace ygopro {
select_option
?:
never
;
shuffle_hand
?:
never
;
select_battle_cmd
?:
never
;
pos_change
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -5158,6 +5165,7 @@ export namespace ygopro {
select_option
?:
never
;
shuffle_hand
?:
never
;
select_battle_cmd
?:
never
;
pos_change
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -5175,6 +5183,7 @@ export namespace ygopro {
select_option
?:
never
;
shuffle_hand
?:
never
;
select_battle_cmd
?:
never
;
pos_change
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -5192,6 +5201,7 @@ export namespace ygopro {
select_option
?:
never
;
shuffle_hand
?:
never
;
select_battle_cmd
?:
never
;
pos_change
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -5209,6 +5219,7 @@ export namespace ygopro {
select_option
?:
never
;
shuffle_hand
?:
never
;
select_battle_cmd
?:
never
;
pos_change
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -5226,6 +5237,7 @@ export namespace ygopro {
select_option
?:
never
;
shuffle_hand
?:
never
;
select_battle_cmd
?:
never
;
pos_change
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -5243,6 +5255,7 @@ export namespace ygopro {
select_option
?:
StocGameMessage
.
MsgSelectOption
;
shuffle_hand
?:
never
;
select_battle_cmd
?:
never
;
pos_change
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -5260,6 +5273,7 @@ export namespace ygopro {
select_option
?:
never
;
shuffle_hand
?:
StocGameMessage
.
MsgShuffleHand
;
select_battle_cmd
?:
never
;
pos_change
?:
never
;
}
|
{
start
?:
never
;
...
...
@@ -5277,6 +5291,25 @@ export namespace ygopro {
select_option
?:
never
;
shuffle_hand
?:
never
;
select_battle_cmd
?:
StocGameMessage
.
MsgSelectBattleCmd
;
pos_change
?:
never
;
}
|
{
start
?:
never
;
draw
?:
never
;
new_turn
?:
never
;
new_phase
?:
never
;
hint
?:
never
;
select_idle_cmd
?:
never
;
select_place
?:
never
;
move
?:
never
;
select_card
?:
never
;
select_chain
?:
never
;
select_effect_yn
?:
never
;
select_position
?:
never
;
select_option
?:
never
;
shuffle_hand
?:
never
;
select_battle_cmd
?:
never
;
pos_change
?:
StocGameMessage
.
MsgPosChange
;
}
))
)
{
...
...
@@ -5338,6 +5371,9 @@ export namespace ygopro {
)
{
this
.
select_battle_cmd
=
data
.
select_battle_cmd
;
}
if
(
"
pos_change
"
in
data
&&
data
.
pos_change
!=
undefined
)
{
this
.
pos_change
=
data
.
pos_change
;
}
}
}
get
start
()
{
...
...
@@ -5535,6 +5571,19 @@ export namespace ygopro {
get
has_select_battle_cmd
()
{
return
pb_1
.
Message
.
getField
(
this
,
15
)
!=
null
;
}
get
pos_change
()
{
return
pb_1
.
Message
.
getWrapperField
(
this
,
StocGameMessage
.
MsgPosChange
,
16
)
as
StocGameMessage
.
MsgPosChange
;
}
set
pos_change
(
value
:
StocGameMessage
.
MsgPosChange
)
{
pb_1
.
Message
.
setOneofWrapperField
(
this
,
16
,
this
.
#
one_of_decls
[
0
],
value
);
}
get
has_pos_change
()
{
return
pb_1
.
Message
.
getField
(
this
,
16
)
!=
null
;
}
get
gameMsg
()
{
const
cases
:
{
[
index
:
number
]:
...
...
@@ -5553,7 +5602,8 @@ export namespace ygopro {
|
"
select_position
"
|
"
select_option
"
|
"
shuffle_hand
"
|
"
select_battle_cmd
"
;
|
"
select_battle_cmd
"
|
"
pos_change
"
;
}
=
{
0
:
"
none
"
,
1
:
"
start
"
,
...
...
@@ -5571,11 +5621,12 @@ export namespace ygopro {
13
:
"
select_option
"
,
14
:
"
shuffle_hand
"
,
15
:
"
select_battle_cmd
"
,
16
:
"
pos_change
"
,
};
return
cases
[
pb_1
.
Message
.
computeOneofCase
(
this
,
[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
]
[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
,
16
]
)
];
}
...
...
@@ -5617,6 +5668,9 @@ export namespace ygopro {
select_battle_cmd
?:
ReturnType
<
typeof
StocGameMessage
.
MsgSelectBattleCmd
.
prototype
.
toObject
>
;
pos_change
?:
ReturnType
<
typeof
StocGameMessage
.
MsgPosChange
.
prototype
.
toObject
>
;
}):
StocGameMessage
{
const
message
=
new
StocGameMessage
({});
if
(
data
.
start
!=
null
)
{
...
...
@@ -5683,6 +5737,11 @@ export namespace ygopro {
message
.
select_battle_cmd
=
StocGameMessage
.
MsgSelectBattleCmd
.
fromObject
(
data
.
select_battle_cmd
);
}
if
(
data
.
pos_change
!=
null
)
{
message
.
pos_change
=
StocGameMessage
.
MsgPosChange
.
fromObject
(
data
.
pos_change
);
}
return
message
;
}
toObject
()
{
...
...
@@ -5724,6 +5783,9 @@ export namespace ygopro {
select_battle_cmd
?:
ReturnType
<
typeof
StocGameMessage
.
MsgSelectBattleCmd
.
prototype
.
toObject
>
;
pos_change
?:
ReturnType
<
typeof
StocGameMessage
.
MsgPosChange
.
prototype
.
toObject
>
;
}
=
{};
if
(
this
.
start
!=
null
)
{
data
.
start
=
this
.
start
.
toObject
();
...
...
@@ -5770,6 +5832,9 @@ export namespace ygopro {
if
(
this
.
select_battle_cmd
!=
null
)
{
data
.
select_battle_cmd
=
this
.
select_battle_cmd
.
toObject
();
}
if
(
this
.
pos_change
!=
null
)
{
data
.
pos_change
=
this
.
pos_change
.
toObject
();
}
return
data
;
}
serialize
():
Uint8Array
;
...
...
@@ -5828,6 +5893,10 @@ export namespace ygopro {
writer
.
writeMessage
(
15
,
this
.
select_battle_cmd
,
()
=>
this
.
select_battle_cmd
.
serialize
(
writer
)
);
if
(
this
.
has_pos_change
)
writer
.
writeMessage
(
16
,
this
.
pos_change
,
()
=>
this
.
pos_change
.
serialize
(
writer
)
);
if
(
!
w
)
return
writer
.
getResultBuffer
();
}
static
deserialize
(
bytes
:
Uint8Array
|
pb_1
.
BinaryReader
):
StocGameMessage
{
...
...
@@ -5952,6 +6021,14 @@ export namespace ygopro {
StocGameMessage
.
MsgSelectBattleCmd
.
deserialize
(
reader
))
);
break
;
case
16
:
reader
.
readMessage
(
message
.
pos_change
,
()
=>
(
message
.
pos_change
=
StocGameMessage
.
MsgPosChange
.
deserialize
(
reader
))
);
break
;
default
:
reader
.
skipField
();
}
...
...
@@ -9574,5 +9651,148 @@ export namespace ygopro {
}
}
}
export
class
MsgPosChange
extends
pb_1
.
Message
{
#
one_of_decls
:
number
[][]
=
[];
constructor
(
data
?:
|
any
[]
|
{
card_info
?:
CardInfo
;
pre_position
?:
CardPosition
;
cur_position
?:
CardPosition
;
}
)
{
super
();
pb_1
.
Message
.
initialize
(
this
,
Array
.
isArray
(
data
)
?
data
:
[],
0
,
-
1
,
[],
this
.
#
one_of_decls
);
if
(
!
Array
.
isArray
(
data
)
&&
typeof
data
==
"
object
"
)
{
if
(
"
card_info
"
in
data
&&
data
.
card_info
!=
undefined
)
{
this
.
card_info
=
data
.
card_info
;
}
if
(
"
pre_position
"
in
data
&&
data
.
pre_position
!=
undefined
)
{
this
.
pre_position
=
data
.
pre_position
;
}
if
(
"
cur_position
"
in
data
&&
data
.
cur_position
!=
undefined
)
{
this
.
cur_position
=
data
.
cur_position
;
}
}
}
get
card_info
()
{
return
pb_1
.
Message
.
getWrapperField
(
this
,
CardInfo
,
1
)
as
CardInfo
;
}
set
card_info
(
value
:
CardInfo
)
{
pb_1
.
Message
.
setWrapperField
(
this
,
1
,
value
);
}
get
has_card_info
()
{
return
pb_1
.
Message
.
getField
(
this
,
1
)
!=
null
;
}
get
pre_position
()
{
return
pb_1
.
Message
.
getFieldWithDefault
(
this
,
2
,
CardPosition
.
FACEUP_ATTACK
)
as
CardPosition
;
}
set
pre_position
(
value
:
CardPosition
)
{
pb_1
.
Message
.
setField
(
this
,
2
,
value
);
}
get
cur_position
()
{
return
pb_1
.
Message
.
getFieldWithDefault
(
this
,
3
,
CardPosition
.
FACEUP_ATTACK
)
as
CardPosition
;
}
set
cur_position
(
value
:
CardPosition
)
{
pb_1
.
Message
.
setField
(
this
,
3
,
value
);
}
static
fromObject
(
data
:
{
card_info
?:
ReturnType
<
typeof
CardInfo
.
prototype
.
toObject
>
;
pre_position
?:
CardPosition
;
cur_position
?:
CardPosition
;
}):
MsgPosChange
{
const
message
=
new
MsgPosChange
({});
if
(
data
.
card_info
!=
null
)
{
message
.
card_info
=
CardInfo
.
fromObject
(
data
.
card_info
);
}
if
(
data
.
pre_position
!=
null
)
{
message
.
pre_position
=
data
.
pre_position
;
}
if
(
data
.
cur_position
!=
null
)
{
message
.
cur_position
=
data
.
cur_position
;
}
return
message
;
}
toObject
()
{
const
data
:
{
card_info
?:
ReturnType
<
typeof
CardInfo
.
prototype
.
toObject
>
;
pre_position
?:
CardPosition
;
cur_position
?:
CardPosition
;
}
=
{};
if
(
this
.
card_info
!=
null
)
{
data
.
card_info
=
this
.
card_info
.
toObject
();
}
if
(
this
.
pre_position
!=
null
)
{
data
.
pre_position
=
this
.
pre_position
;
}
if
(
this
.
cur_position
!=
null
)
{
data
.
cur_position
=
this
.
cur_position
;
}
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_card_info
)
writer
.
writeMessage
(
1
,
this
.
card_info
,
()
=>
this
.
card_info
.
serialize
(
writer
)
);
if
(
this
.
pre_position
!=
CardPosition
.
FACEUP_ATTACK
)
writer
.
writeEnum
(
2
,
this
.
pre_position
);
if
(
this
.
cur_position
!=
CardPosition
.
FACEUP_ATTACK
)
writer
.
writeEnum
(
3
,
this
.
cur_position
);
if
(
!
w
)
return
writer
.
getResultBuffer
();
}
static
deserialize
(
bytes
:
Uint8Array
|
pb_1
.
BinaryReader
):
MsgPosChange
{
const
reader
=
bytes
instanceof
pb_1
.
BinaryReader
?
bytes
:
new
pb_1
.
BinaryReader
(
bytes
),
message
=
new
MsgPosChange
();
while
(
reader
.
nextField
())
{
if
(
reader
.
isEndGroup
())
break
;
switch
(
reader
.
getFieldNumber
())
{
case
1
:
reader
.
readMessage
(
message
.
card_info
,
()
=>
(
message
.
card_info
=
CardInfo
.
deserialize
(
reader
))
);
break
;
case
2
:
message
.
pre_position
=
reader
.
readEnum
();
break
;
case
3
:
message
.
cur_position
=
reader
.
readEnum
();
break
;
default
:
reader
.
skipField
();
}
}
return
message
;
}
serializeBinary
():
Uint8Array
{
return
this
.
serialize
();
}
static
deserializeBinary
(
bytes
:
Uint8Array
):
MsgPosChange
{
return
MsgPosChange
.
deserialize
(
bytes
);
}
}
}
}
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/penetrate.json
View file @
0896be2d
...
...
@@ -33,5 +33,22 @@
"repeatedType"
:
"uint32"
}
]
},
"53"
:
{
"protoType"
:
"pos_change"
,
"fields"
:
[
{
"fieldName"
:
"card_info"
,
"fieldType"
:
"CardInfo"
},
{
"fieldName"
:
"pre_position"
,
"fieldType"
:
"CardPosition"
},
{
"fieldName"
:
"cur_position"
,
"fieldType"
:
"CardPosition"
}
]
}
}
src/api/ocgcore/ocgAdapter/stoc/stocGameMsg/penetrate.ts
View file @
0896be2d
...
...
@@ -3,6 +3,7 @@
import
PenetrateData
from
"
./penetrate.json
"
;
import
{
BufferReader
}
from
"
../../bufferIO
"
;
import
{
ygopro
}
from
"
../../../idl/ocgcore
"
;
import
{
numberToCardPosition
}
from
"
../../util
"
;
type
Constructor
<
T
=
any
>
=
new
(...
args
:
any
[])
=>
T
;
...
...
@@ -11,10 +12,13 @@ const ReadFieldHandlerMap: Map<string, readFieldHandler> = new Map([
[
"
uint16
"
,
(
reader
)
=>
reader
.
readUint16
()],
[
"
uint32
"
,
(
reader
)
=>
reader
.
readUint32
()],
[
"
CardLocation
"
,
(
reader
)
=>
reader
.
readCardLocation
()],
[
"
CardInfo
"
,
(
reader
)
=>
reader
.
readCardInfo
()],
[
"
CardPosition
"
,
(
reader
)
=>
numberToCardPosition
(
reader
.
readUint8
())],
]);
const
MsgConstructorMap
:
Map
<
string
,
Constructor
>
=
new
Map
([
[
"
move
"
,
ygopro
.
StocGameMessage
.
MsgMove
as
Constructor
],
[
"
shuffle_hand
"
,
ygopro
.
StocGameMessage
.
MsgShuffleHand
],
[
"
pos_change
"
,
ygopro
.
StocGameMessage
.
MsgPosChange
],
]);
export
interface
penetrateType
{
...
...
src/reducers/duel/generic.ts
View file @
0896be2d
...
...
@@ -251,3 +251,14 @@ export function clearIdleInteractivities<T extends DuelFieldState>(
});
}
}
export
function
setPosition
<
T
extends
DuelFieldState
>
(
state
:
T
|
undefined
,
sequence
:
number
,
position
:
ygopro
.
CardPosition
)
{
const
target
=
state
?.
inner
.
find
((
_
,
idx
)
=>
idx
==
sequence
);
if
(
target
&&
target
.
occupant
)
{
target
.
location
.
position
=
position
;
}
}
src/reducers/duel/magicSlice.ts
View file @
0896be2d
...
...
@@ -17,6 +17,7 @@ import {
Interactivity
,
extendIdleInteractivities
,
clearIdleInteractivities
,
setPosition
,
}
from
"
./generic
"
;
export
interface
MagicState
extends
DuelFieldState
{}
...
...
@@ -172,6 +173,23 @@ export const removeMagicImpl: CaseReducer<
removeOccupant
(
magics
,
action
.
payload
.
sequence
);
};
// 改变魔法表示形式
export
const
setMagicPositionImpl
:
CaseReducer
<
DuelState
,
PayloadAction
<
{
controler
:
number
;
sequence
:
number
;
position
:
ygopro
.
CardPosition
;
}
>
>
=
(
state
,
action
)
=>
{
const
controler
=
action
.
payload
.
controler
;
const
sequence
=
action
.
payload
.
sequence
;
const
position
=
action
.
payload
.
position
;
const
magics
=
judgeSelf
(
controler
,
state
)
?
state
.
meMagics
:
state
.
opMagics
;
setPosition
(
magics
,
sequence
,
position
);
};
export
const
selectMeMagics
=
(
state
:
RootState
)
=>
state
.
duel
.
meMagics
||
{
inner
:
[]
};
export
const
selectOpMagics
=
(
state
:
RootState
)
=>
...
...
src/reducers/duel/mod.ts
View file @
0896be2d
...
...
@@ -55,6 +55,7 @@ import {
addMonsterIdleInteractivitiesImpl
,
clearMonsterIdleInteractivitiesImpl
,
removeMonsterImpl
,
setMonsterPositionImpl
,
monsterCase
,
}
from
"
./monstersSlice
"
;
import
{
...
...
@@ -65,6 +66,7 @@ import {
addMagicIdleInteractivitiesImpl
,
clearMagicIdleInteractivitiesImpl
,
removeMagicImpl
,
setMagicPositionImpl
,
magicCase
,
}
from
"
./magicSlice
"
;
import
{
CemeteryState
,
initCemeteryImpl
,
cemeteryCase
}
from
"
./cemeretySlice
"
;
...
...
@@ -156,6 +158,7 @@ const duelSlice = createSlice({
clearMonsterPlaceInteractivities
:
clearMonsterPlaceInteractivitiesImpl
,
addMonsterIdleInteractivities
:
addMonsterIdleInteractivitiesImpl
,
clearMonsterIdleInteractivities
:
clearMonsterIdleInteractivitiesImpl
,
setMonsterPosition
:
setMonsterPositionImpl
,
removeMonster
:
removeMonsterImpl
,
// 魔法陷阱区相关`Reducer`
...
...
@@ -164,6 +167,7 @@ const duelSlice = createSlice({
clearMagicPlaceInteractivities
:
clearMagicPlaceInteractivitiesImpl
,
addMagicIdleInteractivities
:
addMagicIdleInteractivitiesImpl
,
clearMagicIdleInteractivities
:
clearMagicIdleInteractivitiesImpl
,
setMagicPosition
:
setMagicPositionImpl
,
removeMagic
:
removeMagicImpl
,
// 墓地相关`Reducer`
...
...
@@ -241,12 +245,14 @@ export const {
clearMonsterPlaceInteractivities
,
addMonsterIdleInteractivities
,
clearMonsterIdleInteractivities
,
setMonsterPosition
,
removeMonster
,
initMagics
,
addMagicPlaceInteractivities
,
clearMagicPlaceInteractivities
,
addMagicIdleInteractivities
,
clearMagicIdleInteractivities
,
setMagicPosition
,
removeMagic
,
removeHand
,
initCemetery
,
...
...
src/reducers/duel/monstersSlice.ts
View file @
0896be2d
...
...
@@ -17,6 +17,7 @@ import {
removeOccupant
,
extendIdleInteractivities
,
clearIdleInteractivities
,
setPosition
,
}
from
"
./generic
"
;
export
interface
MonsterState
extends
DuelFieldState
{}
...
...
@@ -184,6 +185,25 @@ export const removeMonsterImpl: CaseReducer<
removeOccupant
(
monsters
,
action
.
payload
.
sequence
);
};
// 改变怪兽表示形式
export
const
setMonsterPositionImpl
:
CaseReducer
<
DuelState
,
PayloadAction
<
{
controler
:
number
;
sequence
:
number
;
position
:
ygopro
.
CardPosition
;
}
>
>
=
(
state
,
action
)
=>
{
const
controler
=
action
.
payload
.
controler
;
const
sequence
=
action
.
payload
.
sequence
;
const
position
=
action
.
payload
.
position
;
const
monsters
=
judgeSelf
(
controler
,
state
)
?
state
.
meMonsters
:
state
.
opMonsters
;
setPosition
(
monsters
,
sequence
,
position
);
};
export
const
selectMeMonsters
=
(
state
:
RootState
)
=>
state
.
duel
.
meMonsters
||
{
inner
:
[]
};
export
const
selectOpMonsters
=
(
state
:
RootState
)
=>
...
...
src/service/duel/gameMsg.ts
View file @
0896be2d
...
...
@@ -15,6 +15,7 @@ import onMsgSelectPosition from "./selectPosition";
import
onMsgSelectOption
from
"
./selectOption
"
;
import
onMsgShuffleHand
from
"
./shuffleHand
"
;
import
onMsgSelectBattleCmd
from
"
./selectBattleCmd
"
;
import
onMsgPosChange
from
"
./posChange
"
;
export
default
function
handleGameMsg
(
pb
:
ygopro
.
YgoStocMsg
)
{
const
dispatch
=
store
.
dispatch
;
...
...
@@ -96,6 +97,11 @@ export default function handleGameMsg(pb: ygopro.YgoStocMsg) {
break
;
}
case
"
pos_change
"
:
{
onMsgPosChange
(
msg
.
pos_change
,
dispatch
);
break
;
}
default
:
{
break
;
}
...
...
src/service/duel/posChange.ts
0 → 100644
View file @
0896be2d
import
{
ygopro
}
from
"
../../api/ocgcore/idl/ocgcore
"
;
import
{
setMagicPosition
,
setMonsterPosition
}
from
"
../../reducers/duel/mod
"
;
import
{
AppDispatch
}
from
"
../../store
"
;
import
MsgPosChange
=
ygopro
.
StocGameMessage
.
MsgPosChange
;
export
default
(
posChange
:
MsgPosChange
,
dispatch
:
AppDispatch
)
=>
{
const
cardInfo
=
posChange
.
card_info
;
switch
(
cardInfo
.
location
)
{
case
ygopro
.
CardZone
.
MZONE
:
{
dispatch
(
setMonsterPosition
({
controler
:
cardInfo
.
controler
,
sequence
:
cardInfo
.
sequence
,
position
:
posChange
.
cur_position
,
})
);
break
;
}
case
ygopro
.
CardZone
.
SZONE
:
{
dispatch
(
setMagicPosition
({
controler
:
cardInfo
.
controler
,
sequence
:
cardInfo
.
sequence
,
position
:
posChange
.
cur_position
,
})
);
break
;
}
default
:
{
console
.
log
(
`Unhandled zone
${
cardInfo
.
location
}
`
);
}
}
};
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