Commit e0e04dcf authored by Chunchi Che's avatar Chunchi Che

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

Feat/service/select effect yn

See merge request mycard/Neos!66
parents 9c34b487 2661de6f
neos-protobuf @ d8991a3d
Subproject commit 779d9d9c18d393df432570d80753a6fd9134c21e Subproject commit d8991a3d4a3b96db852653d5eb49664826466c90
...@@ -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]]; #one_of_decls: number[][] = [[1, 2, 3, 4, 5]];
constructor( constructor(
data?: data?:
| any[] | any[]
...@@ -2422,24 +2422,35 @@ export namespace ygopro { ...@@ -2422,24 +2422,35 @@ export namespace ygopro {
select_place?: never; select_place?: never;
select_card?: never; select_card?: never;
select_chain?: never; select_chain?: never;
select_effect_yn?: never;
} }
| { | {
select_idle_cmd?: never; select_idle_cmd?: never;
select_place?: CtosGameMsgResponse.SelectPlaceResponse; select_place?: CtosGameMsgResponse.SelectPlaceResponse;
select_card?: never; select_card?: never;
select_chain?: never; select_chain?: never;
select_effect_yn?: never;
} }
| { | {
select_idle_cmd?: never; select_idle_cmd?: never;
select_place?: never; select_place?: never;
select_card?: CtosGameMsgResponse.SelectCardResponse; select_card?: CtosGameMsgResponse.SelectCardResponse;
select_chain?: never; select_chain?: never;
select_effect_yn?: never;
} }
| { | {
select_idle_cmd?: never; select_idle_cmd?: never;
select_place?: never; select_place?: never;
select_card?: never; select_card?: never;
select_chain?: CtosGameMsgResponse.SelectChainResponse; select_chain?: CtosGameMsgResponse.SelectChainResponse;
select_effect_yn?: never;
}
| {
select_idle_cmd?: never;
select_place?: never;
select_card?: never;
select_chain?: never;
select_effect_yn?: CtosGameMsgResponse.SelectEffectYnResponse;
} }
)) ))
) { ) {
...@@ -2465,6 +2476,9 @@ export namespace ygopro { ...@@ -2465,6 +2476,9 @@ export namespace ygopro {
if ("select_chain" in data && data.select_chain != undefined) { if ("select_chain" in data && data.select_chain != undefined) {
this.select_chain = data.select_chain; this.select_chain = data.select_chain;
} }
if ("select_effect_yn" in data && data.select_effect_yn != undefined) {
this.select_effect_yn = data.select_effect_yn;
}
} }
} }
get select_idle_cmd() { get select_idle_cmd() {
...@@ -2519,6 +2533,19 @@ export namespace ygopro { ...@@ -2519,6 +2533,19 @@ export namespace ygopro {
get has_select_chain() { get has_select_chain() {
return pb_1.Message.getField(this, 4) != null; return pb_1.Message.getField(this, 4) != null;
} }
get select_effect_yn() {
return pb_1.Message.getWrapperField(
this,
CtosGameMsgResponse.SelectEffectYnResponse,
5
) as CtosGameMsgResponse.SelectEffectYnResponse;
}
set select_effect_yn(value: CtosGameMsgResponse.SelectEffectYnResponse) {
pb_1.Message.setOneofWrapperField(this, 5, this.#one_of_decls[0], value);
}
get has_select_effect_yn() {
return pb_1.Message.getField(this, 5) != null;
}
get gameMsgResponse() { get gameMsgResponse() {
const cases: { const cases: {
[index: number]: [index: number]:
...@@ -2526,15 +2553,17 @@ export namespace ygopro { ...@@ -2526,15 +2553,17 @@ export namespace ygopro {
| "select_idle_cmd" | "select_idle_cmd"
| "select_place" | "select_place"
| "select_card" | "select_card"
| "select_chain"; | "select_chain"
| "select_effect_yn";
} = { } = {
0: "none", 0: "none",
1: "select_idle_cmd", 1: "select_idle_cmd",
2: "select_place", 2: "select_place",
3: "select_card", 3: "select_card",
4: "select_chain", 4: "select_chain",
5: "select_effect_yn",
}; };
return cases[pb_1.Message.computeOneofCase(this, [1, 2, 3, 4])]; return cases[pb_1.Message.computeOneofCase(this, [1, 2, 3, 4, 5])];
} }
static fromObject(data: { static fromObject(data: {
select_idle_cmd?: ReturnType< select_idle_cmd?: ReturnType<
...@@ -2549,6 +2578,9 @@ export namespace ygopro { ...@@ -2549,6 +2578,9 @@ export namespace ygopro {
select_chain?: ReturnType< select_chain?: ReturnType<
typeof CtosGameMsgResponse.SelectChainResponse.prototype.toObject typeof CtosGameMsgResponse.SelectChainResponse.prototype.toObject
>; >;
select_effect_yn?: ReturnType<
typeof CtosGameMsgResponse.SelectEffectYnResponse.prototype.toObject
>;
}): CtosGameMsgResponse { }): CtosGameMsgResponse {
const message = new CtosGameMsgResponse({}); const message = new CtosGameMsgResponse({});
if (data.select_idle_cmd != null) { if (data.select_idle_cmd != null) {
...@@ -2570,6 +2602,12 @@ export namespace ygopro { ...@@ -2570,6 +2602,12 @@ export namespace ygopro {
message.select_chain = message.select_chain =
CtosGameMsgResponse.SelectChainResponse.fromObject(data.select_chain); CtosGameMsgResponse.SelectChainResponse.fromObject(data.select_chain);
} }
if (data.select_effect_yn != null) {
message.select_effect_yn =
CtosGameMsgResponse.SelectEffectYnResponse.fromObject(
data.select_effect_yn
);
}
return message; return message;
} }
toObject() { toObject() {
...@@ -2586,6 +2624,9 @@ export namespace ygopro { ...@@ -2586,6 +2624,9 @@ export namespace ygopro {
select_chain?: ReturnType< select_chain?: ReturnType<
typeof CtosGameMsgResponse.SelectChainResponse.prototype.toObject typeof CtosGameMsgResponse.SelectChainResponse.prototype.toObject
>; >;
select_effect_yn?: ReturnType<
typeof CtosGameMsgResponse.SelectEffectYnResponse.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();
...@@ -2599,6 +2640,9 @@ export namespace ygopro { ...@@ -2599,6 +2640,9 @@ export namespace ygopro {
if (this.select_chain != null) { if (this.select_chain != null) {
data.select_chain = this.select_chain.toObject(); data.select_chain = this.select_chain.toObject();
} }
if (this.select_effect_yn != null) {
data.select_effect_yn = this.select_effect_yn.toObject();
}
return data; return data;
} }
serialize(): Uint8Array; serialize(): Uint8Array;
...@@ -2621,6 +2665,10 @@ export namespace ygopro { ...@@ -2621,6 +2665,10 @@ export namespace ygopro {
writer.writeMessage(4, this.select_chain, () => writer.writeMessage(4, this.select_chain, () =>
this.select_chain.serialize(writer) this.select_chain.serialize(writer)
); );
if (this.has_select_effect_yn)
writer.writeMessage(5, this.select_effect_yn, () =>
this.select_effect_yn.serialize(writer)
);
if (!w) return writer.getResultBuffer(); if (!w) return writer.getResultBuffer();
} }
static deserialize( static deserialize(
...@@ -2666,6 +2714,16 @@ export namespace ygopro { ...@@ -2666,6 +2714,16 @@ export namespace ygopro {
CtosGameMsgResponse.SelectChainResponse.deserialize(reader)) CtosGameMsgResponse.SelectChainResponse.deserialize(reader))
); );
break; break;
case 5:
reader.readMessage(
message.select_effect_yn,
() =>
(message.select_effect_yn =
CtosGameMsgResponse.SelectEffectYnResponse.deserialize(
reader
))
);
break;
default: default:
reader.skipField(); reader.skipField();
} }
...@@ -3053,6 +3111,86 @@ export namespace ygopro { ...@@ -3053,6 +3111,86 @@ export namespace ygopro {
return SelectChainResponse.deserialize(bytes); return SelectChainResponse.deserialize(bytes);
} }
} }
export class SelectEffectYnResponse extends pb_1.Message {
#one_of_decls: number[][] = [];
constructor(
data?:
| any[]
| {
selected?: boolean;
}
) {
super();
pb_1.Message.initialize(
this,
Array.isArray(data) ? data : [],
0,
-1,
[],
this.#one_of_decls
);
if (!Array.isArray(data) && typeof data == "object") {
if ("selected" in data && data.selected != undefined) {
this.selected = data.selected;
}
}
}
get selected() {
return pb_1.Message.getFieldWithDefault(this, 1, false) as boolean;
}
set selected(value: boolean) {
pb_1.Message.setField(this, 1, value);
}
static fromObject(data: { selected?: boolean }): SelectEffectYnResponse {
const message = new SelectEffectYnResponse({});
if (data.selected != null) {
message.selected = data.selected;
}
return message;
}
toObject() {
const data: {
selected?: boolean;
} = {};
if (this.selected != null) {
data.selected = this.selected;
}
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 != false) writer.writeBool(1, this.selected);
if (!w) return writer.getResultBuffer();
}
static deserialize(
bytes: Uint8Array | pb_1.BinaryReader
): SelectEffectYnResponse {
const reader =
bytes instanceof pb_1.BinaryReader
? bytes
: new pb_1.BinaryReader(bytes),
message = new SelectEffectYnResponse();
while (reader.nextField()) {
if (reader.isEndGroup()) break;
switch (reader.getFieldNumber()) {
case 1:
message.selected = reader.readBool();
break;
default:
reader.skipField();
}
}
return message;
}
serializeBinary(): Uint8Array {
return this.serialize();
}
static deserializeBinary(bytes: Uint8Array): SelectEffectYnResponse {
return SelectEffectYnResponse.deserialize(bytes);
}
}
} }
export class StocJoinGame extends pb_1.Message { export class StocJoinGame extends pb_1.Message {
#one_of_decls: number[][] = []; #one_of_decls: number[][] = [];
...@@ -4432,7 +4570,7 @@ export namespace ygopro { ...@@ -4432,7 +4570,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]]; #one_of_decls: number[][] = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]];
constructor( constructor(
data?: data?:
| any[] | any[]
...@@ -4448,6 +4586,7 @@ export namespace ygopro { ...@@ -4448,6 +4586,7 @@ export namespace ygopro {
move?: never; move?: never;
select_card?: never; select_card?: never;
select_chain?: never; select_chain?: never;
select_effect_yn?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4460,6 +4599,7 @@ export namespace ygopro { ...@@ -4460,6 +4599,7 @@ export namespace ygopro {
move?: never; move?: never;
select_card?: never; select_card?: never;
select_chain?: never; select_chain?: never;
select_effect_yn?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4472,6 +4612,7 @@ export namespace ygopro { ...@@ -4472,6 +4612,7 @@ export namespace ygopro {
move?: never; move?: never;
select_card?: never; select_card?: never;
select_chain?: never; select_chain?: never;
select_effect_yn?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4484,6 +4625,7 @@ export namespace ygopro { ...@@ -4484,6 +4625,7 @@ export namespace ygopro {
move?: never; move?: never;
select_card?: never; select_card?: never;
select_chain?: never; select_chain?: never;
select_effect_yn?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4496,6 +4638,7 @@ export namespace ygopro { ...@@ -4496,6 +4638,7 @@ export namespace ygopro {
move?: never; move?: never;
select_card?: never; select_card?: never;
select_chain?: never; select_chain?: never;
select_effect_yn?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4508,6 +4651,7 @@ export namespace ygopro { ...@@ -4508,6 +4651,7 @@ export namespace ygopro {
move?: never; move?: never;
select_card?: never; select_card?: never;
select_chain?: never; select_chain?: never;
select_effect_yn?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4520,6 +4664,7 @@ export namespace ygopro { ...@@ -4520,6 +4664,7 @@ export namespace ygopro {
move?: never; move?: never;
select_card?: never; select_card?: never;
select_chain?: never; select_chain?: never;
select_effect_yn?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4532,6 +4677,7 @@ export namespace ygopro { ...@@ -4532,6 +4677,7 @@ export namespace ygopro {
move?: StocGameMessage.MsgMove; move?: StocGameMessage.MsgMove;
select_card?: never; select_card?: never;
select_chain?: never; select_chain?: never;
select_effect_yn?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4544,6 +4690,7 @@ export namespace ygopro { ...@@ -4544,6 +4690,7 @@ export namespace ygopro {
move?: never; move?: never;
select_card?: StocGameMessage.MsgSelectCard; select_card?: StocGameMessage.MsgSelectCard;
select_chain?: never; select_chain?: never;
select_effect_yn?: never;
} }
| { | {
start?: never; start?: never;
...@@ -4556,6 +4703,20 @@ export namespace ygopro { ...@@ -4556,6 +4703,20 @@ export namespace ygopro {
move?: never; move?: never;
select_card?: never; select_card?: never;
select_chain?: StocGameMessage.MsgSelectChain; select_chain?: StocGameMessage.MsgSelectChain;
select_effect_yn?: 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?: StocGameMessage.MsgSelectEffectYn;
} }
)) ))
) { ) {
...@@ -4599,6 +4760,9 @@ export namespace ygopro { ...@@ -4599,6 +4760,9 @@ export namespace ygopro {
if ("select_chain" in data && data.select_chain != undefined) { if ("select_chain" in data && data.select_chain != undefined) {
this.select_chain = data.select_chain; this.select_chain = data.select_chain;
} }
if ("select_effect_yn" in data && data.select_effect_yn != undefined) {
this.select_effect_yn = data.select_effect_yn;
}
} }
} }
get start() { get start() {
...@@ -4731,6 +4895,19 @@ export namespace ygopro { ...@@ -4731,6 +4895,19 @@ export namespace ygopro {
get has_select_chain() { get has_select_chain() {
return pb_1.Message.getField(this, 10) != null; return pb_1.Message.getField(this, 10) != null;
} }
get select_effect_yn() {
return pb_1.Message.getWrapperField(
this,
StocGameMessage.MsgSelectEffectYn,
11
) as StocGameMessage.MsgSelectEffectYn;
}
set select_effect_yn(value: StocGameMessage.MsgSelectEffectYn) {
pb_1.Message.setOneofWrapperField(this, 11, this.#one_of_decls[0], value);
}
get has_select_effect_yn() {
return pb_1.Message.getField(this, 11) != null;
}
get gameMsg() { get gameMsg() {
const cases: { const cases: {
[index: number]: [index: number]:
...@@ -4744,7 +4921,8 @@ export namespace ygopro { ...@@ -4744,7 +4921,8 @@ export namespace ygopro {
| "select_place" | "select_place"
| "move" | "move"
| "select_card" | "select_card"
| "select_chain"; | "select_chain"
| "select_effect_yn";
} = { } = {
0: "none", 0: "none",
1: "start", 1: "start",
...@@ -4757,9 +4935,10 @@ export namespace ygopro { ...@@ -4757,9 +4935,10 @@ export namespace ygopro {
8: "move", 8: "move",
9: "select_card", 9: "select_card",
10: "select_chain", 10: "select_chain",
11: "select_effect_yn",
}; };
return cases[ return cases[
pb_1.Message.computeOneofCase(this, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) pb_1.Message.computeOneofCase(this, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
]; ];
} }
static fromObject(data: { static fromObject(data: {
...@@ -4785,6 +4964,9 @@ export namespace ygopro { ...@@ -4785,6 +4964,9 @@ export namespace ygopro {
select_chain?: ReturnType< select_chain?: ReturnType<
typeof StocGameMessage.MsgSelectChain.prototype.toObject typeof StocGameMessage.MsgSelectChain.prototype.toObject
>; >;
select_effect_yn?: ReturnType<
typeof StocGameMessage.MsgSelectEffectYn.prototype.toObject
>;
}): StocGameMessage { }): StocGameMessage {
const message = new StocGameMessage({}); const message = new StocGameMessage({});
if (data.start != null) { if (data.start != null) {
...@@ -4827,6 +5009,11 @@ export namespace ygopro { ...@@ -4827,6 +5009,11 @@ export namespace ygopro {
data.select_chain data.select_chain
); );
} }
if (data.select_effect_yn != null) {
message.select_effect_yn = StocGameMessage.MsgSelectEffectYn.fromObject(
data.select_effect_yn
);
}
return message; return message;
} }
toObject() { toObject() {
...@@ -4853,6 +5040,9 @@ export namespace ygopro { ...@@ -4853,6 +5040,9 @@ export namespace ygopro {
select_chain?: ReturnType< select_chain?: ReturnType<
typeof StocGameMessage.MsgSelectChain.prototype.toObject typeof StocGameMessage.MsgSelectChain.prototype.toObject
>; >;
select_effect_yn?: ReturnType<
typeof StocGameMessage.MsgSelectEffectYn.prototype.toObject
>;
} = {}; } = {};
if (this.start != null) { if (this.start != null) {
data.start = this.start.toObject(); data.start = this.start.toObject();
...@@ -4884,6 +5074,9 @@ export namespace ygopro { ...@@ -4884,6 +5074,9 @@ export namespace ygopro {
if (this.select_chain != null) { if (this.select_chain != null) {
data.select_chain = this.select_chain.toObject(); data.select_chain = this.select_chain.toObject();
} }
if (this.select_effect_yn != null) {
data.select_effect_yn = this.select_effect_yn.toObject();
}
return data; return data;
} }
serialize(): Uint8Array; serialize(): Uint8Array;
...@@ -4922,6 +5115,10 @@ export namespace ygopro { ...@@ -4922,6 +5115,10 @@ export namespace ygopro {
writer.writeMessage(10, this.select_chain, () => writer.writeMessage(10, this.select_chain, () =>
this.select_chain.serialize(writer) this.select_chain.serialize(writer)
); );
if (this.has_select_effect_yn)
writer.writeMessage(11, this.select_effect_yn, () =>
this.select_effect_yn.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 {
...@@ -5006,6 +5203,14 @@ export namespace ygopro { ...@@ -5006,6 +5203,14 @@ export namespace ygopro {
StocGameMessage.MsgSelectChain.deserialize(reader)) StocGameMessage.MsgSelectChain.deserialize(reader))
); );
break; break;
case 11:
reader.readMessage(
message.select_effect_yn,
() =>
(message.select_effect_yn =
StocGameMessage.MsgSelectEffectYn.deserialize(reader))
);
break;
default: default:
reader.skipField(); reader.skipField();
} }
...@@ -7388,5 +7593,170 @@ export namespace ygopro { ...@@ -7388,5 +7593,170 @@ export namespace ygopro {
} }
} }
} }
export class MsgSelectEffectYn extends pb_1.Message {
#one_of_decls: number[][] = [];
constructor(
data?:
| any[]
| {
player?: number;
code?: number;
location?: CardLocation;
effect_description?: 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 ("player" in data && data.player != undefined) {
this.player = data.player;
}
if ("code" in data && data.code != undefined) {
this.code = data.code;
}
if ("location" in data && data.location != undefined) {
this.location = data.location;
}
if (
"effect_description" in data &&
data.effect_description != undefined
) {
this.effect_description = data.effect_description;
}
}
}
get player() {
return pb_1.Message.getFieldWithDefault(this, 1, 0) as number;
}
set player(value: number) {
pb_1.Message.setField(this, 1, value);
}
get code() {
return pb_1.Message.getFieldWithDefault(this, 2, 0) as number;
}
set code(value: number) {
pb_1.Message.setField(this, 2, value);
}
get location() {
return pb_1.Message.getWrapperField(
this,
CardLocation,
3
) as CardLocation;
}
set location(value: CardLocation) {
pb_1.Message.setWrapperField(this, 3, value);
}
get has_location() {
return pb_1.Message.getField(this, 3) != null;
}
get effect_description() {
return pb_1.Message.getFieldWithDefault(this, 4, 0) as number;
}
set effect_description(value: number) {
pb_1.Message.setField(this, 4, value);
}
static fromObject(data: {
player?: number;
code?: number;
location?: ReturnType<typeof CardLocation.prototype.toObject>;
effect_description?: number;
}): MsgSelectEffectYn {
const message = new MsgSelectEffectYn({});
if (data.player != null) {
message.player = data.player;
}
if (data.code != null) {
message.code = data.code;
}
if (data.location != null) {
message.location = CardLocation.fromObject(data.location);
}
if (data.effect_description != null) {
message.effect_description = data.effect_description;
}
return message;
}
toObject() {
const data: {
player?: number;
code?: number;
location?: ReturnType<typeof CardLocation.prototype.toObject>;
effect_description?: number;
} = {};
if (this.player != null) {
data.player = this.player;
}
if (this.code != null) {
data.code = this.code;
}
if (this.location != null) {
data.location = this.location.toObject();
}
if (this.effect_description != null) {
data.effect_description = this.effect_description;
}
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.code != 0) writer.writeInt32(2, this.code);
if (this.has_location)
writer.writeMessage(3, this.location, () =>
this.location.serialize(writer)
);
if (this.effect_description != 0)
writer.writeInt32(4, this.effect_description);
if (!w) return writer.getResultBuffer();
}
static deserialize(
bytes: Uint8Array | pb_1.BinaryReader
): MsgSelectEffectYn {
const reader =
bytes instanceof pb_1.BinaryReader
? bytes
: new pb_1.BinaryReader(bytes),
message = new MsgSelectEffectYn();
while (reader.nextField()) {
if (reader.isEndGroup()) break;
switch (reader.getFieldNumber()) {
case 1:
message.player = reader.readInt32();
break;
case 2:
message.code = reader.readInt32();
break;
case 3:
reader.readMessage(
message.location,
() => (message.location = CardLocation.deserialize(reader))
);
break;
case 4:
message.effect_description = reader.readInt32();
break;
default:
reader.skipField();
}
}
return message;
}
serializeBinary(): Uint8Array {
return this.serialize();
}
static deserializeBinary(bytes: Uint8Array): MsgSelectEffectYn {
return MsgSelectEffectYn.deserialize(bytes);
}
}
} }
} }
...@@ -5,6 +5,7 @@ import adaptSelectIdleCmdResponse from "./selectIdleCmd"; ...@@ -5,6 +5,7 @@ import adaptSelectIdleCmdResponse from "./selectIdleCmd";
import adaptSelectPlaceResponse from "./selectPlace"; import adaptSelectPlaceResponse from "./selectPlace";
import adaptSelectCardResponse from "./selectCard"; import adaptSelectCardResponse from "./selectCard";
import adaptSelectChainResponse from "./selectChain"; import adaptSelectChainResponse from "./selectChain";
import adaptSelectEffectYnResponse from "./selectEffectYn";
/* /*
* CTOS CTOS_RESPONSE * CTOS CTOS_RESPONSE
...@@ -40,6 +41,11 @@ export default class CtosResponsePacket extends YgoProPacket { ...@@ -40,6 +41,11 @@ export default class CtosResponsePacket extends YgoProPacket {
break; break;
} }
case "select_effect_yn": {
extraData = adaptSelectEffectYnResponse(response.select_effect_yn);
break;
}
default: { default: {
break; break;
} }
......
import { ygopro } from "../../../idl/ocgcore";
import { BufferWriter } from "../../bufferIO";
export default (
response: ygopro.CtosGameMsgResponse.SelectEffectYnResponse
) => {
const array = new Uint8Array(4);
const writer = new BufferWriter(array, true);
writer.writeUint32(response.selected ? 1 : 0);
return array;
};
...@@ -36,3 +36,4 @@ export const MSG_SELECT_PLACE = 18; ...@@ -36,3 +36,4 @@ export const MSG_SELECT_PLACE = 18;
export const MSG_MOVE = 50; export const MSG_MOVE = 50;
export const MSG_SELECT_CARD = 15; export const MSG_SELECT_CARD = 15;
export const MSG_SELECT_CHAIN = 16; export const MSG_SELECT_CHAIN = 16;
export const MSG_SELECT_EFFECTYN = 12;
...@@ -16,6 +16,7 @@ import MsgSelectPlaceAdapter from "./selectPlace"; ...@@ -16,6 +16,7 @@ import MsgSelectPlaceAdapter from "./selectPlace";
import MsgMoveAdapter from "./move"; import MsgMoveAdapter from "./move";
import MsgSelectCardAdapter from "./selectCard"; import MsgSelectCardAdapter from "./selectCard";
import MsgSelectChainAdapter from "./selectChain"; import MsgSelectChainAdapter from "./selectChain";
import MsgSelectEffectYnAdapter from "./selectEffectYn";
/* /*
* STOC GameMsg * STOC GameMsg
...@@ -91,6 +92,11 @@ export default class GameMsgAdapter implements StocAdapter { ...@@ -91,6 +92,11 @@ export default class GameMsgAdapter implements StocAdapter {
break; break;
} }
case GAME_MSG.MSG_SELECT_EFFECTYN: {
gameMsg.select_effect_yn = MsgSelectEffectYnAdapter(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 MsgSelectEffectYn = ygopro.StocGameMessage.MsgSelectEffectYn;
/*
* Msg Select EffectYn
*
* @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 code = reader.readUint32();
const location = reader.readCardLocation();
const effect_description = reader.readUint32();
return new MsgSelectEffectYn({
player,
code,
location,
effect_description,
});
};
...@@ -176,3 +176,16 @@ export function sendSelectChainResponse(value: number) { ...@@ -176,3 +176,16 @@ export function sendSelectChainResponse(value: number) {
socketMiddleWare({ cmd: socketCmd.SEND, payload }); socketMiddleWare({ cmd: socketCmd.SEND, payload });
} }
export function sendSelectEffectYnResponse(value: boolean) {
const response = new ygopro.YgoCtosMsg({
ctos_response: new ygopro.CtosGameMsgResponse({
select_effect_yn: new ygopro.CtosGameMsgResponse.SelectEffectYnResponse({
selected: value,
}),
}),
});
const payload = new GameMsgResponse(response).serialize();
socketMiddleWare({ cmd: socketCmd.SEND, payload });
}
...@@ -31,7 +31,9 @@ import { ...@@ -31,7 +31,9 @@ import {
setCheckCardMOdalCancelAbleImpl, setCheckCardMOdalCancelAbleImpl,
setCheckCardModalCancelResponseImpl, setCheckCardModalCancelResponseImpl,
resetCheckCardModalImpl, resetCheckCardModalImpl,
setYesNoModalIsOpenImpl,
checkCardModalCase, checkCardModalCase,
YesNoModalCase,
} from "./modalSlice"; } from "./modalSlice";
import { import {
MonsterState, MonsterState,
...@@ -84,6 +86,7 @@ const initialState: DuelState = { ...@@ -84,6 +86,7 @@ const initialState: DuelState = {
cardModal: { isOpen: false, interactivies: [] }, cardModal: { isOpen: false, interactivies: [] },
cardListModal: { isOpen: false, list: [] }, cardListModal: { isOpen: false, list: [] },
checkCardModal: { isOpen: false, cancelAble: false, tags: [] }, checkCardModal: { isOpen: false, cancelAble: false, tags: [] },
yesNoModal: { isOpen: false },
}, },
}; };
...@@ -130,6 +133,7 @@ const duelSlice = createSlice({ ...@@ -130,6 +133,7 @@ const duelSlice = createSlice({
setCheckCardMOdalCancelAble: setCheckCardMOdalCancelAbleImpl, setCheckCardMOdalCancelAble: setCheckCardMOdalCancelAbleImpl,
setCheckCardModalCancelResponse: setCheckCardModalCancelResponseImpl, setCheckCardModalCancelResponse: setCheckCardModalCancelResponseImpl,
resetCheckCardModal: resetCheckCardModalImpl, resetCheckCardModal: resetCheckCardModalImpl,
setYesNoModalIsOpen: setYesNoModalIsOpenImpl,
}, },
extraReducers(builder) { extraReducers(builder) {
handsCase(builder); handsCase(builder);
...@@ -138,6 +142,7 @@ const duelSlice = createSlice({ ...@@ -138,6 +142,7 @@ const duelSlice = createSlice({
magicCase(builder); magicCase(builder);
cemeteryCase(builder); cemeteryCase(builder);
checkCardModalCase(builder); checkCardModalCase(builder);
YesNoModalCase(builder);
}, },
}); });
...@@ -169,6 +174,7 @@ export const { ...@@ -169,6 +174,7 @@ export const {
setCheckCardMOdalCancelAble, setCheckCardMOdalCancelAble,
setCheckCardModalCancelResponse, setCheckCardModalCancelResponse,
resetCheckCardModal, resetCheckCardModal,
setYesNoModalIsOpen,
} = duelSlice.actions; } = duelSlice.actions;
export const selectDuelHsStart = (state: RootState) => { export const selectDuelHsStart = (state: RootState) => {
return state.duel.meInitInfo != null; return state.duel.meInitInfo != null;
......
...@@ -4,7 +4,9 @@ import { ...@@ -4,7 +4,9 @@ import {
createAsyncThunk, createAsyncThunk,
ActionReducerMapBuilder, ActionReducerMapBuilder,
} from "@reduxjs/toolkit"; } from "@reduxjs/toolkit";
import { fetchCard, getCardStr } from "../../api/cards"; import { CardMeta, fetchCard, getCardStr } from "../../api/cards";
import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import { fetchStrings } from "../../api/strings";
import { RootState } from "../../store"; import { RootState } from "../../store";
import { DuelState } from "./mod"; import { DuelState } from "./mod";
import { judgeSelf } from "./util"; import { judgeSelf } from "./util";
...@@ -46,6 +48,11 @@ export interface ModalState { ...@@ -46,6 +48,11 @@ export interface ModalState {
}[]; }[];
}[]; }[];
}; };
// Yes or No弹窗
yesNoModal: {
isOpen: boolean;
msg?: string;
};
} }
// 更新卡牌弹窗打开状态 // 更新卡牌弹窗打开状态
...@@ -227,6 +234,41 @@ export const resetCheckCardModalImpl: CaseReducer<DuelState> = (state) => { ...@@ -227,6 +234,41 @@ export const resetCheckCardModalImpl: CaseReducer<DuelState> = (state) => {
state.modalState.checkCardModal.tags = []; state.modalState.checkCardModal.tags = [];
}; };
// 更新YesNo弹窗是否打开状态
export const setYesNoModalIsOpenImpl: CaseReducer<
DuelState,
PayloadAction<boolean>
> = (state, action) => {
state.modalState.yesNoModal.isOpen = action.payload;
};
// 设置YesNo弹窗展示内容
export const fetchYesNoMeta = createAsyncThunk(
"duel/fetchYesNoMeta",
async (param: {
code: number;
location: ygopro.CardLocation;
descCode: number;
textGenerator: (
desc: string,
cardMeta: CardMeta,
cardLocation: ygopro.CardLocation
) => string;
}) => {
const desc = await fetchStrings("!system", param.descCode);
const meta = await fetchCard(param.code);
// TODO: 国际化文案
return param.textGenerator(desc, meta, param.location);
}
);
export const YesNoModalCase = (builder: ActionReducerMapBuilder<DuelState>) => {
builder.addCase(fetchYesNoMeta.fulfilled, (state, action) => {
state.modalState.yesNoModal.msg = 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) =>
...@@ -257,3 +299,7 @@ export const selectCheckCardModalCancelAble = (state: RootState) => ...@@ -257,3 +299,7 @@ export const selectCheckCardModalCancelAble = (state: RootState) =>
state.duel.modalState.checkCardModal.cancelAble; state.duel.modalState.checkCardModal.cancelAble;
export const selectCheckCardModalCacnelResponse = (state: RootState) => export const selectCheckCardModalCacnelResponse = (state: RootState) =>
state.duel.modalState.checkCardModal.cancelResponse; state.duel.modalState.checkCardModal.cancelResponse;
export const selectYesNoModalIsOpen = (state: RootState) =>
state.duel.modalState.yesNoModal.isOpen;
export const selectYesNOModalMsg = (state: RootState) =>
state.duel.modalState.yesNoModal.msg;
...@@ -10,6 +10,7 @@ import onMsgSelectPlace from "./selectPlace"; ...@@ -10,6 +10,7 @@ import onMsgSelectPlace from "./selectPlace";
import onMsgMove from "./move"; import onMsgMove from "./move";
import onMsgSelectCard from "./selectCard"; import onMsgSelectCard from "./selectCard";
import onMsgSelectChain from "./selectChain"; import onMsgSelectChain from "./selectChain";
import onMsgSelectEffectYn from "./selectEffectYn";
export default function handleGameMsg(pb: ygopro.YgoStocMsg) { export default function handleGameMsg(pb: ygopro.YgoStocMsg) {
const dispatch = store.dispatch; const dispatch = store.dispatch;
...@@ -18,74 +19,70 @@ export default function handleGameMsg(pb: ygopro.YgoStocMsg) { ...@@ -18,74 +19,70 @@ export default function handleGameMsg(pb: ygopro.YgoStocMsg) {
switch (msg.gameMsg) { switch (msg.gameMsg) {
case "start": { case "start": {
const start = msg.start; const start = msg.start;
onMsgStart(start, dispatch); onMsgStart(start, dispatch);
break; break;
} }
case "draw": { case "draw": {
const draw = msg.draw; const draw = msg.draw;
onMsgDraw(draw, dispatch); onMsgDraw(draw, dispatch);
break; break;
} }
case "new_turn": { case "new_turn": {
const newTurn = msg.new_turn; const newTurn = msg.new_turn;
onMsgNewTurn(newTurn, dispatch); onMsgNewTurn(newTurn, dispatch);
break; break;
} }
case "new_phase": { case "new_phase": {
const newPhase = msg.new_phase; const newPhase = msg.new_phase;
onMsgNewPhase(newPhase, dispatch); onMsgNewPhase(newPhase, dispatch);
break; break;
} }
case "hint": { case "hint": {
const hint = msg.hint; const hint = msg.hint;
onMsgHint(hint, dispatch); onMsgHint(hint, dispatch);
break; break;
} }
case "select_idle_cmd": { case "select_idle_cmd": {
const selectIdleCmd = msg.select_idle_cmd; const selectIdleCmd = msg.select_idle_cmd;
onMsgSelectIdleCmd(selectIdleCmd, dispatch); onMsgSelectIdleCmd(selectIdleCmd, dispatch);
break; break;
} }
case "select_place": { case "select_place": {
const selectPlace = msg.select_place; const selectPlace = msg.select_place;
onMsgSelectPlace(selectPlace, dispatch); onMsgSelectPlace(selectPlace, dispatch);
break; break;
} }
case "move": { case "move": {
const move = msg.move; const move = msg.move;
onMsgMove(move, dispatch); onMsgMove(move, dispatch);
break; break;
} }
case "select_card": { case "select_card": {
const selectCard = msg.select_card; const selectCard = msg.select_card;
onMsgSelectCard(selectCard, dispatch); onMsgSelectCard(selectCard, dispatch);
break; break;
} }
case "select_chain": { case "select_chain": {
const selectChain = msg.select_chain; const selectChain = msg.select_chain;
onMsgSelectChain(selectChain, dispatch); onMsgSelectChain(selectChain, dispatch);
break; break;
} }
case "select_effect_yn": {
const selectEffectYn = msg.select_effect_yn;
onMsgSelectEffectYn(selectEffectYn, dispatch);
break;
}
default: { default: {
break; break;
} }
......
import { CardMeta } from "../../api/cards";
import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import { setYesNoModalIsOpen } from "../../reducers/duel/mod";
import { fetchYesNoMeta } from "../../reducers/duel/modalSlice";
import { AppDispatch } from "../../store";
import { CardZoneToChinese } from "./util";
import MsgSelectEffectYn = ygopro.StocGameMessage.MsgSelectEffectYn;
export default (selectEffectYn: MsgSelectEffectYn, dispatch: AppDispatch) => {
const player = selectEffectYn.player;
const code = selectEffectYn.code;
const location = selectEffectYn.location;
const effect_description = selectEffectYn.effect_description;
const textGenerator =
effect_description == 0 || effect_description == 221
? (
desc: string,
cardMeta: CardMeta,
cardLocation: ygopro.CardLocation
) => {
const desc1 = desc.replace(
`[%ls]`,
CardZoneToChinese(cardLocation.location)
);
const desc2 = desc1.replace(`[%ls]`, cardMeta.text.name || "[?]");
return desc2;
}
: (desc: string, cardMeta: CardMeta, _: ygopro.CardLocation) => {
const desc1 = desc.replace(`[%ls]`, cardMeta.text.name || "[?]");
return desc1;
};
dispatch(
fetchYesNoMeta({
code,
location,
descCode: effect_description,
textGenerator,
})
);
dispatch(setYesNoModalIsOpen(true));
};
...@@ -14,6 +14,7 @@ import Exclusion from "./exclusion"; ...@@ -14,6 +14,7 @@ import Exclusion from "./exclusion";
import Cemeteries from "./cemetery"; import Cemeteries from "./cemetery";
import CardListModal from "./cardListModal"; import CardListModal from "./cardListModal";
import CheckCardModal from "./checkCardModal"; import CheckCardModal from "./checkCardModal";
import YesNoModal from "./yesNoModal";
// Ref: https://github.com/brianzinn/react-babylonjs/issues/126 // Ref: https://github.com/brianzinn/react-babylonjs/issues/126
const NeosDuel = () => ( const NeosDuel = () => (
...@@ -42,6 +43,7 @@ const NeosDuel = () => ( ...@@ -42,6 +43,7 @@ const NeosDuel = () => (
<CardListModal /> <CardListModal />
<HintNotification /> <HintNotification />
<CheckCardModal /> <CheckCardModal />
<YesNoModal />
</> </>
); );
......
import React from "react";
import { useAppSelector } from "../../hook";
import { store } from "../../store";
import { Modal, Button } from "antd";
import { sendSelectEffectYnResponse } from "../../api/ocgcore/ocgHelper";
import {
selectYesNoModalIsOpen,
selectYesNOModalMsg,
} from "../../reducers/duel/modalSlice";
import { setYesNoModalIsOpen } from "../../reducers/duel/mod";
const YesNoModal = () => {
const dispatch = store.dispatch;
const isOpen = useAppSelector(selectYesNoModalIsOpen);
const msg = useAppSelector(selectYesNOModalMsg);
return (
<Modal
title={msg}
open={isOpen}
closable={false}
footer={
<>
<Button
onClick={() => {
sendSelectEffectYnResponse(true);
dispatch(setYesNoModalIsOpen(false));
}}
>
Yes
</Button>
<Button
onClick={() => {
sendSelectEffectYnResponse(false);
dispatch(setYesNoModalIsOpen(false));
}}
>
No
</Button>
</>
}
/>
);
};
export default YesNoModal;
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