Commit 20c8ba1a authored by Chunchi Che's avatar Chunchi Che

Merge branch 'feat/service/select_option' into 'main'

Feat/service/select option

See merge request mycard/Neos!69
parents 19af9718 0b32f9ac
neos-protobuf @ 707b028e
Subproject commit 836412c292c4351ea9b7d499b31472672157e0dd Subproject commit 707b028ef6ecbe6de328f9e1114707553e0f3df2
...@@ -2412,7 +2412,7 @@ export namespace ygopro { ...@@ -2412,7 +2412,7 @@ export namespace ygopro {
} }
} }
export class CtosGameMsgResponse extends pb_1.Message { export class CtosGameMsgResponse extends pb_1.Message {
#one_of_decls: number[][] = [[1, 2, 3, 4, 5, 6]]; #one_of_decls: number[][] = [[1, 2, 3, 4, 5, 6, 7]];
constructor( constructor(
data?: data?:
| any[] | any[]
...@@ -2424,6 +2424,7 @@ export namespace ygopro { ...@@ -2424,6 +2424,7 @@ export namespace ygopro {
select_chain?: never; select_chain?: never;
select_effect_yn?: never; select_effect_yn?: never;
select_position?: never; select_position?: never;
select_option?: never;
} }
| { | {
select_idle_cmd?: never; select_idle_cmd?: never;
...@@ -2432,6 +2433,7 @@ export namespace ygopro { ...@@ -2432,6 +2433,7 @@ export namespace ygopro {
select_chain?: never; select_chain?: never;
select_effect_yn?: never; select_effect_yn?: never;
select_position?: never; select_position?: never;
select_option?: never;
} }
| { | {
select_idle_cmd?: never; select_idle_cmd?: never;
...@@ -2440,6 +2442,7 @@ export namespace ygopro { ...@@ -2440,6 +2442,7 @@ export namespace ygopro {
select_chain?: never; select_chain?: never;
select_effect_yn?: never; select_effect_yn?: never;
select_position?: never; select_position?: never;
select_option?: never;
} }
| { | {
select_idle_cmd?: never; select_idle_cmd?: never;
...@@ -2448,6 +2451,7 @@ export namespace ygopro { ...@@ -2448,6 +2451,7 @@ export namespace ygopro {
select_chain?: CtosGameMsgResponse.SelectChainResponse; select_chain?: CtosGameMsgResponse.SelectChainResponse;
select_effect_yn?: never; select_effect_yn?: never;
select_position?: never; select_position?: never;
select_option?: never;
} }
| { | {
select_idle_cmd?: never; select_idle_cmd?: never;
...@@ -2456,6 +2460,7 @@ export namespace ygopro { ...@@ -2456,6 +2460,7 @@ export namespace ygopro {
select_chain?: never; select_chain?: never;
select_effect_yn?: CtosGameMsgResponse.SelectEffectYnResponse; select_effect_yn?: CtosGameMsgResponse.SelectEffectYnResponse;
select_position?: never; select_position?: never;
select_option?: never;
} }
| { | {
select_idle_cmd?: never; select_idle_cmd?: never;
...@@ -2464,6 +2469,16 @@ export namespace ygopro { ...@@ -2464,6 +2469,16 @@ export namespace ygopro {
select_chain?: never; select_chain?: never;
select_effect_yn?: never; select_effect_yn?: never;
select_position?: CtosGameMsgResponse.SelectPositionResponse; select_position?: CtosGameMsgResponse.SelectPositionResponse;
select_option?: never;
}
| {
select_idle_cmd?: never;
select_place?: never;
select_card?: never;
select_chain?: never;
select_effect_yn?: never;
select_position?: never;
select_option?: CtosGameMsgResponse.SelectOptionResponse;
} }
)) ))
) { ) {
...@@ -2495,6 +2510,9 @@ export namespace ygopro { ...@@ -2495,6 +2510,9 @@ export namespace ygopro {
if ("select_position" in data && data.select_position != undefined) { if ("select_position" in data && data.select_position != undefined) {
this.select_position = data.select_position; this.select_position = data.select_position;
} }
if ("select_option" in data && data.select_option != undefined) {
this.select_option = data.select_option;
}
} }
} }
get select_idle_cmd() { get select_idle_cmd() {
...@@ -2575,6 +2593,19 @@ export namespace ygopro { ...@@ -2575,6 +2593,19 @@ export namespace ygopro {
get has_select_position() { get has_select_position() {
return pb_1.Message.getField(this, 6) != null; return pb_1.Message.getField(this, 6) != null;
} }
get select_option() {
return pb_1.Message.getWrapperField(
this,
CtosGameMsgResponse.SelectOptionResponse,
7
) as CtosGameMsgResponse.SelectOptionResponse;
}
set select_option(value: CtosGameMsgResponse.SelectOptionResponse) {
pb_1.Message.setOneofWrapperField(this, 7, this.#one_of_decls[0], value);
}
get has_select_option() {
return pb_1.Message.getField(this, 7) != null;
}
get gameMsgResponse() { get gameMsgResponse() {
const cases: { const cases: {
[index: number]: [index: number]:
...@@ -2584,7 +2615,8 @@ export namespace ygopro { ...@@ -2584,7 +2615,8 @@ export namespace ygopro {
| "select_card" | "select_card"
| "select_chain" | "select_chain"
| "select_effect_yn" | "select_effect_yn"
| "select_position"; | "select_position"
| "select_option";
} = { } = {
0: "none", 0: "none",
1: "select_idle_cmd", 1: "select_idle_cmd",
...@@ -2593,8 +2625,9 @@ export namespace ygopro { ...@@ -2593,8 +2625,9 @@ export namespace ygopro {
4: "select_chain", 4: "select_chain",
5: "select_effect_yn", 5: "select_effect_yn",
6: "select_position", 6: "select_position",
7: "select_option",
}; };
return cases[pb_1.Message.computeOneofCase(this, [1, 2, 3, 4, 5, 6])]; return cases[pb_1.Message.computeOneofCase(this, [1, 2, 3, 4, 5, 6, 7])];
} }
static fromObject(data: { static fromObject(data: {
select_idle_cmd?: ReturnType< select_idle_cmd?: ReturnType<
...@@ -2615,6 +2648,9 @@ export namespace ygopro { ...@@ -2615,6 +2648,9 @@ export namespace ygopro {
select_position?: ReturnType< select_position?: ReturnType<
typeof CtosGameMsgResponse.SelectPositionResponse.prototype.toObject typeof CtosGameMsgResponse.SelectPositionResponse.prototype.toObject
>; >;
select_option?: ReturnType<
typeof CtosGameMsgResponse.SelectOptionResponse.prototype.toObject
>;
}): CtosGameMsgResponse { }): CtosGameMsgResponse {
const message = new CtosGameMsgResponse({}); const message = new CtosGameMsgResponse({});
if (data.select_idle_cmd != null) { if (data.select_idle_cmd != null) {
...@@ -2648,6 +2684,12 @@ export namespace ygopro { ...@@ -2648,6 +2684,12 @@ export namespace ygopro {
data.select_position data.select_position
); );
} }
if (data.select_option != null) {
message.select_option =
CtosGameMsgResponse.SelectOptionResponse.fromObject(
data.select_option
);
}
return message; return message;
} }
toObject() { toObject() {
...@@ -2670,6 +2712,9 @@ export namespace ygopro { ...@@ -2670,6 +2712,9 @@ export namespace ygopro {
select_position?: ReturnType< select_position?: ReturnType<
typeof CtosGameMsgResponse.SelectPositionResponse.prototype.toObject typeof CtosGameMsgResponse.SelectPositionResponse.prototype.toObject
>; >;
select_option?: ReturnType<
typeof CtosGameMsgResponse.SelectOptionResponse.prototype.toObject
>;
} = {}; } = {};
if (this.select_idle_cmd != null) { if (this.select_idle_cmd != null) {
data.select_idle_cmd = this.select_idle_cmd.toObject(); data.select_idle_cmd = this.select_idle_cmd.toObject();
...@@ -2689,6 +2734,9 @@ export namespace ygopro { ...@@ -2689,6 +2734,9 @@ export namespace ygopro {
if (this.select_position != null) { if (this.select_position != null) {
data.select_position = this.select_position.toObject(); data.select_position = this.select_position.toObject();
} }
if (this.select_option != null) {
data.select_option = this.select_option.toObject();
}
return data; return data;
} }
serialize(): Uint8Array; serialize(): Uint8Array;
...@@ -2719,6 +2767,10 @@ export namespace ygopro { ...@@ -2719,6 +2767,10 @@ export namespace ygopro {
writer.writeMessage(6, this.select_position, () => writer.writeMessage(6, this.select_position, () =>
this.select_position.serialize(writer) this.select_position.serialize(writer)
); );
if (this.has_select_option)
writer.writeMessage(7, this.select_option, () =>
this.select_option.serialize(writer)
);
if (!w) return writer.getResultBuffer(); if (!w) return writer.getResultBuffer();
} }
static deserialize( static deserialize(
...@@ -2784,6 +2836,14 @@ export namespace ygopro { ...@@ -2784,6 +2836,14 @@ export namespace ygopro {
)) ))
); );
break; break;
case 7:
reader.readMessage(
message.select_option,
() =>
(message.select_option =
CtosGameMsgResponse.SelectOptionResponse.deserialize(reader))
);
break;
default: default:
reader.skipField(); reader.skipField();
} }
...@@ -3338,6 +3398,86 @@ export namespace ygopro { ...@@ -3338,6 +3398,86 @@ export namespace ygopro {
return SelectPositionResponse.deserialize(bytes); return SelectPositionResponse.deserialize(bytes);
} }
} }
export class SelectOptionResponse 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 }): SelectOptionResponse {
const message = new SelectOptionResponse({});
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
): SelectOptionResponse {
const reader =
bytes instanceof pb_1.BinaryReader
? bytes
: new pb_1.BinaryReader(bytes),
message = new SelectOptionResponse();
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): SelectOptionResponse {
return SelectOptionResponse.deserialize(bytes);
}
}
} }
export class StocJoinGame extends pb_1.Message { export class StocJoinGame extends pb_1.Message {
#one_of_decls: number[][] = []; #one_of_decls: number[][] = [];
...@@ -4717,7 +4857,7 @@ export namespace ygopro { ...@@ -4717,7 +4857,7 @@ export namespace ygopro {
} }
} }
export class StocGameMessage extends pb_1.Message { export class StocGameMessage extends pb_1.Message {
#one_of_decls: number[][] = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]; #one_of_decls: number[][] = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]];
constructor( constructor(
data?: data?:
| any[] | any[]
...@@ -4735,6 +4875,7 @@ export namespace ygopro { ...@@ -4735,6 +4875,7 @@ export namespace ygopro {
select_chain?: never; select_chain?: never;
select_effect_yn?: never; select_effect_yn?: never;
select_position?: never; select_position?: never;
select_option?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4749,6 +4890,7 @@ export namespace ygopro { ...@@ -4749,6 +4890,7 @@ export namespace ygopro {
select_chain?: never; select_chain?: never;
select_effect_yn?: never; select_effect_yn?: never;
select_position?: never; select_position?: never;
select_option?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4763,6 +4905,7 @@ export namespace ygopro { ...@@ -4763,6 +4905,7 @@ export namespace ygopro {
select_chain?: never; select_chain?: never;
select_effect_yn?: never; select_effect_yn?: never;
select_position?: never; select_position?: never;
select_option?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4777,6 +4920,7 @@ export namespace ygopro { ...@@ -4777,6 +4920,7 @@ export namespace ygopro {
select_chain?: never; select_chain?: never;
select_effect_yn?: never; select_effect_yn?: never;
select_position?: never; select_position?: never;
select_option?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4791,6 +4935,7 @@ export namespace ygopro { ...@@ -4791,6 +4935,7 @@ export namespace ygopro {
select_chain?: never; select_chain?: never;
select_effect_yn?: never; select_effect_yn?: never;
select_position?: never; select_position?: never;
select_option?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4805,6 +4950,7 @@ export namespace ygopro { ...@@ -4805,6 +4950,7 @@ export namespace ygopro {
select_chain?: never; select_chain?: never;
select_effect_yn?: never; select_effect_yn?: never;
select_position?: never; select_position?: never;
select_option?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4819,6 +4965,7 @@ export namespace ygopro { ...@@ -4819,6 +4965,7 @@ export namespace ygopro {
select_chain?: never; select_chain?: never;
select_effect_yn?: never; select_effect_yn?: never;
select_position?: never; select_position?: never;
select_option?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4833,6 +4980,7 @@ export namespace ygopro { ...@@ -4833,6 +4980,7 @@ export namespace ygopro {
select_chain?: never; select_chain?: never;
select_effect_yn?: never; select_effect_yn?: never;
select_position?: never; select_position?: never;
select_option?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4847,6 +4995,7 @@ export namespace ygopro { ...@@ -4847,6 +4995,7 @@ export namespace ygopro {
select_chain?: never; select_chain?: never;
select_effect_yn?: never; select_effect_yn?: never;
select_position?: never; select_position?: never;
select_option?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4861,6 +5010,7 @@ export namespace ygopro { ...@@ -4861,6 +5010,7 @@ export namespace ygopro {
select_chain?: StocGameMessage.MsgSelectChain; select_chain?: StocGameMessage.MsgSelectChain;
select_effect_yn?: never; select_effect_yn?: never;
select_position?: never; select_position?: never;
select_option?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4875,6 +5025,7 @@ export namespace ygopro { ...@@ -4875,6 +5025,7 @@ export namespace ygopro {
select_chain?: never; select_chain?: never;
select_effect_yn?: StocGameMessage.MsgSelectEffectYn; select_effect_yn?: StocGameMessage.MsgSelectEffectYn;
select_position?: never; select_position?: never;
select_option?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4889,6 +5040,22 @@ export namespace ygopro { ...@@ -4889,6 +5040,22 @@ export namespace ygopro {
select_chain?: never; select_chain?: never;
select_effect_yn?: never; select_effect_yn?: never;
select_position?: StocGameMessage.MsgSelectPosition; select_position?: StocGameMessage.MsgSelectPosition;
select_option?: 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?: StocGameMessage.MsgSelectOption;
} }
)) ))
) { ) {
...@@ -4938,6 +5105,9 @@ export namespace ygopro { ...@@ -4938,6 +5105,9 @@ export namespace ygopro {
if ("select_position" in data && data.select_position != undefined) { if ("select_position" in data && data.select_position != undefined) {
this.select_position = data.select_position; this.select_position = data.select_position;
} }
if ("select_option" in data && data.select_option != undefined) {
this.select_option = data.select_option;
}
} }
} }
get start() { get start() {
...@@ -5096,6 +5266,19 @@ export namespace ygopro { ...@@ -5096,6 +5266,19 @@ export namespace ygopro {
get has_select_position() { get has_select_position() {
return pb_1.Message.getField(this, 12) != null; return pb_1.Message.getField(this, 12) != null;
} }
get select_option() {
return pb_1.Message.getWrapperField(
this,
StocGameMessage.MsgSelectOption,
13
) as StocGameMessage.MsgSelectOption;
}
set select_option(value: StocGameMessage.MsgSelectOption) {
pb_1.Message.setOneofWrapperField(this, 13, this.#one_of_decls[0], value);
}
get has_select_option() {
return pb_1.Message.getField(this, 13) != null;
}
get gameMsg() { get gameMsg() {
const cases: { const cases: {
[index: number]: [index: number]:
...@@ -5111,7 +5294,8 @@ export namespace ygopro { ...@@ -5111,7 +5294,8 @@ export namespace ygopro {
| "select_card" | "select_card"
| "select_chain" | "select_chain"
| "select_effect_yn" | "select_effect_yn"
| "select_position"; | "select_position"
| "select_option";
} = { } = {
0: "none", 0: "none",
1: "start", 1: "start",
...@@ -5126,11 +5310,12 @@ export namespace ygopro { ...@@ -5126,11 +5310,12 @@ export namespace ygopro {
10: "select_chain", 10: "select_chain",
11: "select_effect_yn", 11: "select_effect_yn",
12: "select_position", 12: "select_position",
13: "select_option",
}; };
return cases[ return cases[
pb_1.Message.computeOneofCase( pb_1.Message.computeOneofCase(
this, this,
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
) )
]; ];
} }
...@@ -5163,6 +5348,9 @@ export namespace ygopro { ...@@ -5163,6 +5348,9 @@ export namespace ygopro {
select_position?: ReturnType< select_position?: ReturnType<
typeof StocGameMessage.MsgSelectPosition.prototype.toObject typeof StocGameMessage.MsgSelectPosition.prototype.toObject
>; >;
select_option?: ReturnType<
typeof StocGameMessage.MsgSelectOption.prototype.toObject
>;
}): StocGameMessage { }): StocGameMessage {
const message = new StocGameMessage({}); const message = new StocGameMessage({});
if (data.start != null) { if (data.start != null) {
...@@ -5215,6 +5403,11 @@ export namespace ygopro { ...@@ -5215,6 +5403,11 @@ export namespace ygopro {
data.select_position data.select_position
); );
} }
if (data.select_option != null) {
message.select_option = StocGameMessage.MsgSelectOption.fromObject(
data.select_option
);
}
return message; return message;
} }
toObject() { toObject() {
...@@ -5247,6 +5440,9 @@ export namespace ygopro { ...@@ -5247,6 +5440,9 @@ export namespace ygopro {
select_position?: ReturnType< select_position?: ReturnType<
typeof StocGameMessage.MsgSelectPosition.prototype.toObject typeof StocGameMessage.MsgSelectPosition.prototype.toObject
>; >;
select_option?: ReturnType<
typeof StocGameMessage.MsgSelectOption.prototype.toObject
>;
} = {}; } = {};
if (this.start != null) { if (this.start != null) {
data.start = this.start.toObject(); data.start = this.start.toObject();
...@@ -5284,6 +5480,9 @@ export namespace ygopro { ...@@ -5284,6 +5480,9 @@ export namespace ygopro {
if (this.select_position != null) { if (this.select_position != null) {
data.select_position = this.select_position.toObject(); data.select_position = this.select_position.toObject();
} }
if (this.select_option != null) {
data.select_option = this.select_option.toObject();
}
return data; return data;
} }
serialize(): Uint8Array; serialize(): Uint8Array;
...@@ -5330,6 +5529,10 @@ export namespace ygopro { ...@@ -5330,6 +5529,10 @@ export namespace ygopro {
writer.writeMessage(12, this.select_position, () => writer.writeMessage(12, this.select_position, () =>
this.select_position.serialize(writer) this.select_position.serialize(writer)
); );
if (this.has_select_option)
writer.writeMessage(13, this.select_option, () =>
this.select_option.serialize(writer)
);
if (!w) return writer.getResultBuffer(); if (!w) return writer.getResultBuffer();
} }
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): StocGameMessage { static deserialize(bytes: Uint8Array | pb_1.BinaryReader): StocGameMessage {
...@@ -5430,6 +5633,14 @@ export namespace ygopro { ...@@ -5430,6 +5633,14 @@ export namespace ygopro {
StocGameMessage.MsgSelectPosition.deserialize(reader)) StocGameMessage.MsgSelectPosition.deserialize(reader))
); );
break; break;
case 13:
reader.readMessage(
message.select_option,
() =>
(message.select_option =
StocGameMessage.MsgSelectOption.deserialize(reader))
);
break;
default: default:
reader.skipField(); reader.skipField();
} }
...@@ -8224,5 +8435,235 @@ export namespace ygopro { ...@@ -8224,5 +8435,235 @@ export namespace ygopro {
} }
} }
} }
export class MsgSelectOption extends pb_1.Message {
#one_of_decls: number[][] = [];
constructor(
data?:
| any[]
| {
player?: number;
options?: StocGameMessage.MsgSelectOption.Option[];
}
) {
super();
pb_1.Message.initialize(
this,
Array.isArray(data) ? data : [],
0,
-1,
[2],
this.#one_of_decls
);
if (!Array.isArray(data) && typeof data == "object") {
if ("player" in data && data.player != undefined) {
this.player = data.player;
}
if ("options" in data && data.options != undefined) {
this.options = data.options;
}
}
}
get player() {
return pb_1.Message.getFieldWithDefault(this, 1, 0) as number;
}
set player(value: number) {
pb_1.Message.setField(this, 1, value);
}
get options() {
return pb_1.Message.getRepeatedWrapperField(
this,
StocGameMessage.MsgSelectOption.Option,
2
) as StocGameMessage.MsgSelectOption.Option[];
}
set options(value: StocGameMessage.MsgSelectOption.Option[]) {
pb_1.Message.setRepeatedWrapperField(this, 2, value);
}
static fromObject(data: {
player?: number;
options?: ReturnType<
typeof StocGameMessage.MsgSelectOption.Option.prototype.toObject
>[];
}): MsgSelectOption {
const message = new MsgSelectOption({});
if (data.player != null) {
message.player = data.player;
}
if (data.options != null) {
message.options = data.options.map((item) =>
StocGameMessage.MsgSelectOption.Option.fromObject(item)
);
}
return message;
}
toObject() {
const data: {
player?: number;
options?: ReturnType<
typeof StocGameMessage.MsgSelectOption.Option.prototype.toObject
>[];
} = {};
if (this.player != null) {
data.player = this.player;
}
if (this.options != null) {
data.options = this.options.map(
(item: StocGameMessage.MsgSelectOption.Option) => 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.options.length)
writer.writeRepeatedMessage(
2,
this.options,
(item: StocGameMessage.MsgSelectOption.Option) =>
item.serialize(writer)
);
if (!w) return writer.getResultBuffer();
}
static deserialize(
bytes: Uint8Array | pb_1.BinaryReader
): MsgSelectOption {
const reader =
bytes instanceof pb_1.BinaryReader
? bytes
: new pb_1.BinaryReader(bytes),
message = new MsgSelectOption();
while (reader.nextField()) {
if (reader.isEndGroup()) break;
switch (reader.getFieldNumber()) {
case 1:
message.player = reader.readInt32();
break;
case 2:
reader.readMessage(message.options, () =>
pb_1.Message.addToRepeatedWrapperField(
message,
2,
StocGameMessage.MsgSelectOption.Option.deserialize(reader),
StocGameMessage.MsgSelectOption.Option
)
);
break;
default:
reader.skipField();
}
}
return message;
}
serializeBinary(): Uint8Array {
return this.serialize();
}
static deserializeBinary(bytes: Uint8Array): MsgSelectOption {
return MsgSelectOption.deserialize(bytes);
}
}
export namespace MsgSelectOption {
export class Option extends pb_1.Message {
#one_of_decls: number[][] = [];
constructor(
data?:
| any[]
| {
code?: number;
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 ("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 response() {
return pb_1.Message.getFieldWithDefault(this, 2, 0) as number;
}
set response(value: number) {
pb_1.Message.setField(this, 2, value);
}
static fromObject(data: { code?: number; response?: number }): Option {
const message = new Option({});
if (data.code != null) {
message.code = data.code;
}
if (data.response != null) {
message.response = data.response;
}
return message;
}
toObject() {
const data: {
code?: number;
response?: number;
} = {};
if (this.code != null) {
data.code = this.code;
}
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.response != 0) writer.writeInt32(2, this.response);
if (!w) return writer.getResultBuffer();
}
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Option {
const reader =
bytes instanceof pb_1.BinaryReader
? bytes
: new pb_1.BinaryReader(bytes),
message = new Option();
while (reader.nextField()) {
if (reader.isEndGroup()) break;
switch (reader.getFieldNumber()) {
case 1:
message.code = reader.readInt32();
break;
case 2:
message.response = reader.readInt32();
break;
default:
reader.skipField();
}
}
return message;
}
serializeBinary(): Uint8Array {
return this.serialize();
}
static deserializeBinary(bytes: Uint8Array): Option {
return Option.deserialize(bytes);
}
}
}
} }
} }
...@@ -7,6 +7,7 @@ import adaptSelectCardResponse from "./selectCard"; ...@@ -7,6 +7,7 @@ import adaptSelectCardResponse from "./selectCard";
import adaptSelectChainResponse from "./selectChain"; import adaptSelectChainResponse from "./selectChain";
import adaptSelectEffectYnResponse from "./selectEffectYn"; import adaptSelectEffectYnResponse from "./selectEffectYn";
import adaptSelectPositionResponse from "./selectPosition"; import adaptSelectPositionResponse from "./selectPosition";
import adaptSelectOptionResponse from "./selectOption";
/* /*
* CTOS CTOS_RESPONSE * CTOS CTOS_RESPONSE
...@@ -52,6 +53,11 @@ export default class CtosResponsePacket extends YgoProPacket { ...@@ -52,6 +53,11 @@ export default class CtosResponsePacket extends YgoProPacket {
break; break;
} }
case "select_option": {
extraData = adaptSelectOptionResponse(response.select_option);
break;
}
default: { default: {
break; break;
} }
......
import { ygopro } from "../../../idl/ocgcore";
import { BufferWriter } from "../../bufferIO";
export default (response: ygopro.CtosGameMsgResponse.SelectOptionResponse) => {
const array = new Uint8Array(4);
const writer = new BufferWriter(array, true);
writer.writeUint32(response.code);
return array;
};
...@@ -38,3 +38,4 @@ export const MSG_SELECT_CARD = 15; ...@@ -38,3 +38,4 @@ export const MSG_SELECT_CARD = 15;
export const MSG_SELECT_CHAIN = 16; export const MSG_SELECT_CHAIN = 16;
export const MSG_SELECT_EFFECTYN = 12; export const MSG_SELECT_EFFECTYN = 12;
export const MSG_SELECT_POSITION = 19; export const MSG_SELECT_POSITION = 19;
export const MSG_SELECT_OPTION = 14;
...@@ -18,6 +18,7 @@ import MsgSelectCardAdapter from "./selectCard"; ...@@ -18,6 +18,7 @@ import MsgSelectCardAdapter from "./selectCard";
import MsgSelectChainAdapter from "./selectChain"; import MsgSelectChainAdapter from "./selectChain";
import MsgSelectEffectYnAdapter from "./selectEffectYn"; import MsgSelectEffectYnAdapter from "./selectEffectYn";
import MsgSelectPositionAdapter from "./selectPosition"; import MsgSelectPositionAdapter from "./selectPosition";
import MsgSelectOptionAdapter from "./selectOption";
/* /*
* STOC GameMsg * STOC GameMsg
...@@ -103,6 +104,11 @@ export default class GameMsgAdapter implements StocAdapter { ...@@ -103,6 +104,11 @@ export default class GameMsgAdapter implements StocAdapter {
break; break;
} }
case GAME_MSG.MSG_SELECT_OPTION: {
gameMsg.select_option = MsgSelectOptionAdapter(gameData);
break;
}
default: { default: {
console.log("Unhandled GameMessage function=", func); console.log("Unhandled GameMessage function=", func);
......
import { ygopro } from "../../../idl/ocgcore";
import { BufferReader } from "../../bufferIO";
import MsgSelectOption = ygopro.StocGameMessage.MsgSelectOption;
/*
* Msg Select Option
*
* @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 count = reader.readUint8();
const msg = new MsgSelectOption({
player,
options: [],
});
for (let i = 0; i < count; i++) {
const option = new MsgSelectOption.Option({
code: reader.readUint32(),
response: i,
});
msg.options.push(option);
}
return msg;
};
...@@ -202,3 +202,16 @@ export function sendSelectPositionResponse(value: ygopro.CardPosition) { ...@@ -202,3 +202,16 @@ export function sendSelectPositionResponse(value: ygopro.CardPosition) {
socketMiddleWare({ cmd: socketCmd.SEND, payload }); socketMiddleWare({ cmd: socketCmd.SEND, payload });
} }
export function sendSelectOptionResponse(value: number) {
const response = new ygopro.YgoCtosMsg({
ctos_response: new ygopro.CtosGameMsgResponse({
select_option: new ygopro.CtosGameMsgResponse.SelectOptionResponse({
code: value,
}),
}),
});
const payload = new GameMsgResponse(response).serialize();
socketMiddleWare({ cmd: socketCmd.SEND, payload });
}
...@@ -37,6 +37,9 @@ import { ...@@ -37,6 +37,9 @@ import {
setPositionModalIsOpenImpl, setPositionModalIsOpenImpl,
setPositionModalPositionsImpl, setPositionModalPositionsImpl,
resetPositionModalImpl, resetPositionModalImpl,
setOptionModalIsOpenImpl,
resetOptionModalImpl,
optionModalCase,
} from "./modalSlice"; } from "./modalSlice";
import { import {
MonsterState, MonsterState,
...@@ -91,6 +94,7 @@ const initialState: DuelState = { ...@@ -91,6 +94,7 @@ const initialState: DuelState = {
checkCardModal: { isOpen: false, cancelAble: false, tags: [] }, checkCardModal: { isOpen: false, cancelAble: false, tags: [] },
yesNoModal: { isOpen: false }, yesNoModal: { isOpen: false },
positionModal: { isOpen: false, positions: [] }, positionModal: { isOpen: false, positions: [] },
optionModal: { isOpen: false, options: [] },
}, },
}; };
...@@ -141,6 +145,8 @@ const duelSlice = createSlice({ ...@@ -141,6 +145,8 @@ const duelSlice = createSlice({
setPositionModalIsOpen: setPositionModalIsOpenImpl, setPositionModalIsOpen: setPositionModalIsOpenImpl,
setPositionModalPositions: setPositionModalPositionsImpl, setPositionModalPositions: setPositionModalPositionsImpl,
resetPositionModal: resetPositionModalImpl, resetPositionModal: resetPositionModalImpl,
setOptionModalIsOpen: setOptionModalIsOpenImpl,
resetOptionModal: resetOptionModalImpl,
}, },
extraReducers(builder) { extraReducers(builder) {
handsCase(builder); handsCase(builder);
...@@ -150,6 +156,7 @@ const duelSlice = createSlice({ ...@@ -150,6 +156,7 @@ const duelSlice = createSlice({
cemeteryCase(builder); cemeteryCase(builder);
checkCardModalCase(builder); checkCardModalCase(builder);
YesNoModalCase(builder); YesNoModalCase(builder);
optionModalCase(builder);
}, },
}); });
...@@ -185,6 +192,8 @@ export const { ...@@ -185,6 +192,8 @@ export const {
setPositionModalIsOpen, setPositionModalIsOpen,
setPositionModalPositions, setPositionModalPositions,
resetPositionModal, resetPositionModal,
setOptionModalIsOpen,
resetOptionModal,
} = duelSlice.actions; } = duelSlice.actions;
export const selectDuelHsStart = (state: RootState) => { export const selectDuelHsStart = (state: RootState) => {
return state.duel.meInitInfo != null; return state.duel.meInitInfo != null;
......
...@@ -58,6 +58,11 @@ export interface ModalState { ...@@ -58,6 +58,11 @@ export interface ModalState {
isOpen: boolean; isOpen: boolean;
positions: ygopro.CardPosition[]; positions: ygopro.CardPosition[];
}; };
// 选项选择弹窗
optionModal: {
isOpen: boolean;
options: { msg: string; response: number }[];
};
} }
// 更新卡牌弹窗打开状态 // 更新卡牌弹窗打开状态
...@@ -288,11 +293,43 @@ export const setPositionModalPositionsImpl: CaseReducer< ...@@ -288,11 +293,43 @@ export const setPositionModalPositionsImpl: CaseReducer<
state.modalState.positionModal.positions = action.payload; state.modalState.positionModal.positions = action.payload;
}; };
export const setOptionModalIsOpenImpl: CaseReducer<
DuelState,
PayloadAction<boolean>
> = (state, action) => {
state.modalState.optionModal.isOpen = action.payload;
};
export const resetOptionModalImpl: CaseReducer<DuelState> = (state) => {
state.modalState.optionModal.options = [];
};
export const resetPositionModalImpl: CaseReducer<DuelState> = (state) => { export const resetPositionModalImpl: CaseReducer<DuelState> = (state) => {
state.modalState.positionModal.isOpen = false; state.modalState.positionModal.isOpen = false;
state.modalState.positionModal.positions = []; state.modalState.positionModal.positions = [];
}; };
// 增加选项
export const fetchOptionMeta = createAsyncThunk(
"duel/fetchOptionMeta",
async (param: { code: number; response: number }) => {
const meta = await fetchCard(param.code >> 4);
const msg = getCardStr(meta, param.code & 0xf) || "[?]";
const response = { msg, response: param.response };
return response;
}
);
export const optionModalCase = (
builder: ActionReducerMapBuilder<DuelState>
) => {
builder.addCase(fetchOptionMeta.fulfilled, (state, action) => {
state.modalState.optionModal.options.push(action.payload);
});
};
export const selectCardModalIsOpen = (state: RootState) => export const selectCardModalIsOpen = (state: RootState) =>
state.duel.modalState.cardModal.isOpen; state.duel.modalState.cardModal.isOpen;
export const selectCardModalName = (state: RootState) => export const selectCardModalName = (state: RootState) =>
...@@ -331,3 +368,7 @@ export const selectPositionModalIsOpen = (state: RootState) => ...@@ -331,3 +368,7 @@ export const selectPositionModalIsOpen = (state: RootState) =>
state.duel.modalState.positionModal.isOpen; state.duel.modalState.positionModal.isOpen;
export const selectPositionModalPositions = (state: RootState) => export const selectPositionModalPositions = (state: RootState) =>
state.duel.modalState.positionModal.positions; state.duel.modalState.positionModal.positions;
export const selectOptionModalIsOpen = (state: RootState) =>
state.duel.modalState.optionModal.isOpen;
export const selectOptionModalOptions = (state: RootState) =>
state.duel.modalState.optionModal.options;
...@@ -12,6 +12,7 @@ import onMsgSelectCard from "./selectCard"; ...@@ -12,6 +12,7 @@ import onMsgSelectCard from "./selectCard";
import onMsgSelectChain from "./selectChain"; import onMsgSelectChain from "./selectChain";
import onMsgSelectEffectYn from "./selectEffectYn"; import onMsgSelectEffectYn from "./selectEffectYn";
import onMsgSelectPosition from "./selectPosition"; import onMsgSelectPosition from "./selectPosition";
import onMsgSelectOption from "./selectOption";
export default function handleGameMsg(pb: ygopro.YgoStocMsg) { export default function handleGameMsg(pb: ygopro.YgoStocMsg) {
const dispatch = store.dispatch; const dispatch = store.dispatch;
...@@ -90,6 +91,12 @@ export default function handleGameMsg(pb: ygopro.YgoStocMsg) { ...@@ -90,6 +91,12 @@ export default function handleGameMsg(pb: ygopro.YgoStocMsg) {
break; break;
} }
case "select_option": {
const selectOption = msg.select_option;
onMsgSelectOption(selectOption, dispatch);
break;
}
default: { default: {
break; break;
} }
......
import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import { setOptionModalIsOpen } from "../../reducers/duel/mod";
import { fetchOptionMeta } from "../../reducers/duel/modalSlice";
import { AppDispatch } from "../../store";
import MsgSelectOption = ygopro.StocGameMessage.MsgSelectOption;
export default (selectOption: MsgSelectOption, dispatch: AppDispatch) => {
const player = selectOption.player;
const options = selectOption.options;
for (let option of options) {
dispatch(fetchOptionMeta(option));
}
dispatch(setOptionModalIsOpen(true));
};
...@@ -16,6 +16,7 @@ import CardListModal from "./cardListModal"; ...@@ -16,6 +16,7 @@ import CardListModal from "./cardListModal";
import CheckCardModal from "./checkCardModal"; import CheckCardModal from "./checkCardModal";
import YesNoModal from "./yesNoModal"; import YesNoModal from "./yesNoModal";
import PositionModal from "./positionModal"; import PositionModal from "./positionModal";
import OptionModal from "./optionModal";
// Ref: https://github.com/brianzinn/react-babylonjs/issues/126 // Ref: https://github.com/brianzinn/react-babylonjs/issues/126
const NeosDuel = () => ( const NeosDuel = () => (
...@@ -46,6 +47,7 @@ const NeosDuel = () => ( ...@@ -46,6 +47,7 @@ const NeosDuel = () => (
<CheckCardModal /> <CheckCardModal />
<YesNoModal /> <YesNoModal />
<PositionModal /> <PositionModal />
<OptionModal />
</> </>
); );
......
import React, { useState } from "react";
import { useAppSelector } from "../../hook";
import { store } from "../../store";
import { Modal, Button } from "antd";
import { CheckCard } from "@ant-design/pro-components";
import {
selectOptionModalIsOpen,
selectOptionModalOptions,
} from "../../reducers/duel/modalSlice";
import { sendSelectOptionResponse } from "../../api/ocgcore/ocgHelper";
import {
resetOptionModal,
setOptionModalIsOpen,
} from "../../reducers/duel/mod";
const OptionModal = () => {
const dispatch = store.dispatch;
const isOpen = useAppSelector(selectOptionModalIsOpen);
const options = useAppSelector(selectOptionModalOptions);
const [selected, setSelected] = useState<number | undefined>(undefined);
return (
<Modal
title="请选择需要发动的效果"
open={isOpen}
closable={false}
footer={
<Button
disabled={selected === undefined}
onClick={() => {
if (selected !== undefined) {
sendSelectOptionResponse(selected);
dispatch(setOptionModalIsOpen(false));
dispatch(resetOptionModal());
}
}}
>
submit
</Button>
}
>
<CheckCard.Group
bordered
size="small"
onChange={(value) => {
// @ts-ignore
setSelected(value);
}}
>
{options.map((option, idx) => (
<CheckCard key={idx} title={option.msg} value={option.response} />
))}
</CheckCard.Group>
</Modal>
);
};
export default OptionModal;
...@@ -34,7 +34,7 @@ const PositionModal = () => { ...@@ -34,7 +34,7 @@ const PositionModal = () => {
if (selected !== undefined) { if (selected !== undefined) {
sendSelectPositionResponse(selected); sendSelectPositionResponse(selected);
dispatch(setPositionModalIsOpen(false)); dispatch(setPositionModalIsOpen(false));
dispatch(resetPositionModal); dispatch(resetPositionModal());
} }
}} }}
> >
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment