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
deft
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
Show 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