Commit 4dfc118d authored by chechunchi's avatar chechunchi

refactor fetchEsHintMeta

parent 58f1d87a
Pipeline #28460 passed with stages
in 10 minutes and 36 seconds
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { Container } from "@/container";
import { AudioActionType, playEffect } from "@/infra/audio"; import { AudioActionType, playEffect } from "@/infra/audio";
import { cardStore, fetchEsHintMeta } from "@/stores"; import { cardStore } from "@/stores";
import { callCardAttack } from "@/ui/Duel/PlayMat/Card"; import { callCardAttack } from "@/ui/Duel/PlayMat/Card";
export default async (attack: ygopro.StocGameMessage.MsgAttack) => { import { fetchEsHintMeta } from "./util";
export default async (
container: Container,
attack: ygopro.StocGameMessage.MsgAttack,
) => {
const context = container.context;
fetchEsHintMeta({ fetchEsHintMeta({
context,
originMsg: "「[?]」攻击时", originMsg: "「[?]」攻击时",
location: attack.attacker_location, location: attack.attacker_location,
}); });
......
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { fetchEsHintMeta } from "@/stores"; import { Container } from "@/container";
export default (_: ygopro.StocGameMessage.MsgAttackDisabled) => { import { fetchEsHintMeta } from "./util";
fetchEsHintMeta({ originMsg: "攻击被无效时" });
export default (
container: Container,
_: ygopro.StocGameMessage.MsgAttackDisabled,
) => {
fetchEsHintMeta({ context: container.context, originMsg: "攻击被无效时" });
}; };
import { fetchCard, ygopro } from "@/api"; import { fetchCard, ygopro } from "@/api";
import { Container } from "@/container"; import { Container } from "@/container";
import { AudioActionType, playEffect } from "@/infra/audio"; import { AudioActionType, playEffect } from "@/infra/audio";
import { cardStore, fetchEsHintMeta, matStore } from "@/stores"; import { cardStore, matStore } from "@/stores";
import { callCardFocus } from "@/ui/Duel/PlayMat/Card"; import { callCardFocus } from "@/ui/Duel/PlayMat/Card";
import { fetchEsHintMeta } from "./util";
export default async ( export default async (
container: Container, container: Container,
chaining: ygopro.StocGameMessage.MsgChaining, chaining: ygopro.StocGameMessage.MsgChaining,
) => { ) => {
playEffect(AudioActionType.SOUND_ACTIVATE); playEffect(AudioActionType.SOUND_ACTIVATE);
const context = container.context;
fetchEsHintMeta({ fetchEsHintMeta({
context,
originMsg: "「[?]」被发动时", originMsg: "「[?]」被发动时",
cardID: chaining.code, cardID: chaining.code,
}); });
const context = container.context;
const location = chaining.location; const location = chaining.location;
// 将`location`添加到连锁栈 // 将`location`添加到连锁栈
......
import { fetchCard, ygopro } from "@/api"; import { fetchCard, ygopro } from "@/api";
import { Container } from "@/container";
import { AudioActionType, playEffect } from "@/infra/audio"; import { AudioActionType, playEffect } from "@/infra/audio";
import { cardStore, fetchEsHintMeta } from "@/stores"; import { cardStore } from "@/stores";
import { callCardMove } from "@/ui/Duel/PlayMat/Card"; import { callCardMove } from "@/ui/Duel/PlayMat/Card";
export default async (draw: ygopro.StocGameMessage.MsgDraw) => { import { fetchEsHintMeta } from "./util";
fetchEsHintMeta({ originMsg: "玩家抽卡时" });
export default async (
container: Container,
draw: ygopro.StocGameMessage.MsgDraw,
) => {
const context = container.context;
fetchEsHintMeta({ context, originMsg: "玩家抽卡时" });
const drawLength = draw.cards.length; const drawLength = draw.cards.length;
......
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { fetchEsHintMeta } from "@/stores"; import { Container } from "@/container";
export default (_: ygopro.StocGameMessage.MsgFlipSummoned) => { import { fetchEsHintMeta } from "./util";
fetchEsHintMeta({ originMsg: 1608 });
export default (
container: Container,
_: ygopro.StocGameMessage.MsgFlipSummoned,
) => {
fetchEsHintMeta({ context: container.context, originMsg: 1608 });
}; };
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { fetchEsHintMeta } from "@/stores"; import { Container } from "@/container";
export default (flipSummoning: ygopro.StocGameMessage.MsgFlipSummoning) => { import { fetchEsHintMeta } from "./util";
export default (
container: Container,
flipSummoning: ygopro.StocGameMessage.MsgFlipSummoning,
) => {
// playEffect(AudioActionType.SOUND_FILP); // playEffect(AudioActionType.SOUND_FILP);
fetchEsHintMeta({ fetchEsHintMeta({
context: container.context,
originMsg: "「[?]」反转召唤宣言时", originMsg: "「[?]」反转召唤宣言时",
cardID: flipSummoning.code, cardID: flipSummoning.code,
}); });
......
...@@ -119,7 +119,7 @@ export default async function handleGameMsg( ...@@ -119,7 +119,7 @@ export default async function handleGameMsg(
break; break;
} }
case "draw": { case "draw": {
await onMsgDraw(msg.draw); await onMsgDraw(container, msg.draw);
break; break;
} }
...@@ -134,7 +134,7 @@ export default async function handleGameMsg( ...@@ -134,7 +134,7 @@ export default async function handleGameMsg(
break; break;
} }
case "hint": { case "hint": {
await onMsgHint(msg.hint); await onMsgHint(container, msg.hint);
break; break;
} }
...@@ -188,7 +188,7 @@ export default async function handleGameMsg( ...@@ -188,7 +188,7 @@ export default async function handleGameMsg(
break; break;
} }
case "pos_change": { case "pos_change": {
await onMsgPosChange(msg.pos_change); await onMsgPosChange(container, msg.pos_change);
break; break;
} }
...@@ -203,7 +203,7 @@ export default async function handleGameMsg( ...@@ -203,7 +203,7 @@ export default async function handleGameMsg(
break; break;
} }
case "update_hp": { case "update_hp": {
onMsgUpdateHp(msg.update_hp); onMsgUpdateHp(container, msg.update_hp);
break; break;
} }
...@@ -253,22 +253,22 @@ export default async function handleGameMsg( ...@@ -253,22 +253,22 @@ export default async function handleGameMsg(
break; break;
} }
case "set": { case "set": {
onMsgSet(msg.set); onMsgSet(container, msg.set);
break; break;
} }
case "swap": { case "swap": {
onMsgSwap(msg.swap); onMsgSwap(container, msg.swap);
break; break;
} }
case "attack": { case "attack": {
await onMsgAttack(msg.attack); await onMsgAttack(container, msg.attack);
break; break;
} }
case "attack_disable": { case "attack_disable": {
onMsgAttackDisable(msg.attack_disable); onMsgAttackDisable(container, msg.attack_disable);
break; break;
} }
...@@ -287,32 +287,32 @@ export default async function handleGameMsg( ...@@ -287,32 +287,32 @@ export default async function handleGameMsg(
break; break;
} }
case "summoning": { case "summoning": {
onMsgSummoning(msg.summoning); onMsgSummoning(container, msg.summoning);
break; break;
} }
case "summoned": { case "summoned": {
onMsgSummoned(msg.summoned); onMsgSummoned(container, msg.summoned);
break; break;
} }
case "flip_summoning": { case "flip_summoning": {
onMsgFlipSummoning(msg.flip_summoning); onMsgFlipSummoning(container, msg.flip_summoning);
break; break;
} }
case "flip_summoned": { case "flip_summoned": {
onMsgFilpSummoned(msg.flip_summoned); onMsgFilpSummoned(container, msg.flip_summoned);
break; break;
} }
case "sp_summoning": { case "sp_summoning": {
onMsgSpSummoning(msg.sp_summoning); onMsgSpSummoning(container, msg.sp_summoning);
break; break;
} }
case "sp_summoned": { case "sp_summoned": {
onMsgSpSummoned(msg.sp_summoned); onMsgSpSummoned(container, msg.sp_summoned);
break; break;
} }
......
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { import { fetchCommonHintMeta, fetchSelectHintMeta } from "@/stores";
fetchCommonHintMeta,
fetchEsHintMeta,
fetchSelectHintMeta,
} from "@/stores";
import MsgHint = ygopro.StocGameMessage.MsgHint; import MsgHint = ygopro.StocGameMessage.MsgHint;
import { Container } from "@/container";
export default async (hint: MsgHint) => { import { fetchEsHintMeta } from "./util";
export default async (container: Container, hint: MsgHint) => {
switch (hint.hint_type) { switch (hint.hint_type) {
case MsgHint.HintType.HINT_EVENT: { case MsgHint.HintType.HINT_EVENT: {
await fetchEsHintMeta({ originMsg: hint.hint_data }); await fetchEsHintMeta({
context: container.context,
originMsg: hint.hint_data,
});
break; break;
} }
case MsgHint.HintType.HINT_MESSAGE: { case MsgHint.HintType.HINT_MESSAGE: {
......
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import MsgPosChange = ygopro.StocGameMessage.MsgPosChange; import MsgPosChange = ygopro.StocGameMessage.MsgPosChange;
import { cardStore, fetchEsHintMeta } from "@/stores"; import { Container } from "@/container";
import { cardStore } from "@/stores";
import { callCardMove } from "@/ui/Duel/PlayMat/Card"; import { callCardMove } from "@/ui/Duel/PlayMat/Card";
export default async (posChange: MsgPosChange) => { import { fetchEsHintMeta } from "./util";
export default async (container: Container, posChange: MsgPosChange) => {
const context = container.context;
const { location, controller, sequence } = posChange.card_info; const { location, controller, sequence } = posChange.card_info;
const target = cardStore.at(location, controller, sequence); const target = cardStore.at(location, controller, sequence);
...@@ -17,6 +21,7 @@ export default async (posChange: MsgPosChange) => { ...@@ -17,6 +21,7 @@ export default async (posChange: MsgPosChange) => {
} }
fetchEsHintMeta({ fetchEsHintMeta({
context,
originMsg: 1600, originMsg: 1600,
}); });
}; };
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { fetchEsHintMeta } from "@/stores"; import { Container } from "@/container";
export default (_set: ygopro.StocGameMessage.MsgSet) => { import { fetchEsHintMeta } from "./util";
fetchEsHintMeta({ originMsg: 1601 });
export default (container: Container, _set: ygopro.StocGameMessage.MsgSet) => {
fetchEsHintMeta({ context: container.context, originMsg: 1601 });
}; };
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { fetchEsHintMeta } from "@/stores"; import { Container } from "@/container";
export default (_: ygopro.StocGameMessage.MsgSpSummoned) => { import { fetchEsHintMeta } from "./util";
fetchEsHintMeta({ originMsg: 1606 });
export default (
container: Container,
_: ygopro.StocGameMessage.MsgSpSummoned,
) => {
fetchEsHintMeta({ context: container.context, originMsg: 1606 });
}; };
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { fetchEsHintMeta } from "@/stores"; import { Container } from "@/container";
export default (spSummoning: ygopro.StocGameMessage.MsgSpSummoning) => { import { fetchEsHintMeta } from "./util";
export default (
container: Container,
spSummoning: ygopro.StocGameMessage.MsgSpSummoning,
) => {
// const card = fetchCard(spSummoning.code); // const card = fetchCard(spSummoning.code);
// if (card.data.type && card.data.type & TYPE_TOKEN) { // if (card.data.type && card.data.type & TYPE_TOKEN) {
// playEffect(AudioActionType.SOUND_TOKEN); // playEffect(AudioActionType.SOUND_TOKEN);
...@@ -9,6 +14,7 @@ export default (spSummoning: ygopro.StocGameMessage.MsgSpSummoning) => { ...@@ -9,6 +14,7 @@ export default (spSummoning: ygopro.StocGameMessage.MsgSpSummoning) => {
// playEffect(AudioActionType.SOUND_SPECIAL_SUMMON); // playEffect(AudioActionType.SOUND_SPECIAL_SUMMON);
// } // }
fetchEsHintMeta({ fetchEsHintMeta({
context: container.context,
originMsg: "「[?]」特殊召唤宣言时", originMsg: "「[?]」特殊召唤宣言时",
cardID: spSummoning.code, cardID: spSummoning.code,
}); });
......
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { fetchEsHintMeta } from "@/stores"; import { Container } from "@/container";
export default (_: ygopro.StocGameMessage.MsgSummoned) => { import { fetchEsHintMeta } from "./util";
fetchEsHintMeta({ originMsg: 1604 });
export default (
container: Container,
_: ygopro.StocGameMessage.MsgSummoned,
) => {
fetchEsHintMeta({ context: container.context, originMsg: 1604 });
}; };
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { fetchEsHintMeta } from "@/stores"; import { Container } from "@/container";
export default (summoning: ygopro.StocGameMessage.MsgSummoning) => { import { fetchEsHintMeta } from "./util";
export default (
container: Container,
summoning: ygopro.StocGameMessage.MsgSummoning,
) => {
/* 因为现在Neos动画架构的问题,这里播放音效的话会滞后于移动动画, /* 因为现在Neos动画架构的问题,这里播放音效的话会滞后于移动动画,
* 因此这里先注释掉,等解决掉上述问题后再加上召唤的音效。 * 因此这里先注释掉,等解决掉上述问题后再加上召唤的音效。
* */ * */
// playEffect(AudioActionType.SOUND_SUMMON); // playEffect(AudioActionType.SOUND_SUMMON);
fetchEsHintMeta({ fetchEsHintMeta({
context: container.context,
originMsg: "「[?]」通常召唤宣言时", originMsg: "「[?]」通常召唤宣言时",
cardID: summoning.code, cardID: summoning.code,
}); });
......
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { fetchEsHintMeta } from "@/stores"; import { Container } from "@/container";
export default (_swap: ygopro.StocGameMessage.MsgSwap) => { import { fetchEsHintMeta } from "./util";
fetchEsHintMeta({ originMsg: 1602 });
export default (
container: Container,
_swap: ygopro.StocGameMessage.MsgSwap,
) => {
fetchEsHintMeta({ context: container.context, originMsg: 1602 });
}; };
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { fetchEsHintMeta, matStore } from "@/stores"; import { matStore } from "@/stores";
import MsgUpdateHp = ygopro.StocGameMessage.MsgUpdateHp; import MsgUpdateHp = ygopro.StocGameMessage.MsgUpdateHp;
import { Container } from "@/container";
import { AudioActionType, changeScene, playEffect } from "@/infra/audio"; import { AudioActionType, changeScene, playEffect } from "@/infra/audio";
export default (msgUpdateHp: MsgUpdateHp) => { import { fetchEsHintMeta } from "./util";
export default (container: Container, msgUpdateHp: MsgUpdateHp) => {
const context = container.context;
if (msgUpdateHp.type_ === MsgUpdateHp.ActionType.DAMAGE) { if (msgUpdateHp.type_ === MsgUpdateHp.ActionType.DAMAGE) {
playEffect(AudioActionType.SOUND_DAMAGE); playEffect(AudioActionType.SOUND_DAMAGE);
fetchEsHintMeta({ originMsg: "玩家收到伤害时" }); // TODO: i18n fetchEsHintMeta({ context, originMsg: "玩家收到伤害时" }); // TODO: i18n
matStore.initInfo.of(msgUpdateHp.player).life -= msgUpdateHp.value; matStore.initInfo.of(msgUpdateHp.player).life -= msgUpdateHp.value;
} else if (msgUpdateHp.type_ === MsgUpdateHp.ActionType.RECOVER) { } else if (msgUpdateHp.type_ === MsgUpdateHp.ActionType.RECOVER) {
playEffect(AudioActionType.SOUND_RECOVER); playEffect(AudioActionType.SOUND_RECOVER);
fetchEsHintMeta({ originMsg: "玩家生命值回复时" }); // TODO: i18n fetchEsHintMeta({ context, originMsg: "玩家生命值回复时" }); // TODO: i18n
matStore.initInfo.of(msgUpdateHp.player).life += msgUpdateHp.value; matStore.initInfo.of(msgUpdateHp.player).life += msgUpdateHp.value;
} }
if (matStore.initInfo.me.life > matStore.initInfo.op.life * 2) { if (matStore.initInfo.me.life > matStore.initInfo.op.life * 2) {
......
import { ygopro } from "@/api"; import { ygopro } from "@/api";
const { MZONE, SZONE, HAND } = ygopro.CardZone; const { MZONE, SZONE, HAND } = ygopro.CardZone;
import { fetchStrings } from "@/api";
import { Region } from "@/api";
import { fetchCard } from "@/api/cards";
import { Context } from "@/container";
export function isAllOnField(locations: ygopro.CardLocation[]): boolean { export function isAllOnField(locations: ygopro.CardLocation[]): boolean {
const isOnField = (location: ygopro.CardLocation) => { const isOnField = (location: ygopro.CardLocation) => {
...@@ -53,3 +57,41 @@ export function argmax<T>(arr: T[], getValue: (item: T) => number): number { ...@@ -53,3 +57,41 @@ export function argmax<T>(arr: T[], getValue: (item: T) => number): number {
return maxIndex; return maxIndex;
} }
export const fetchEsHintMeta = async ({
context,
originMsg,
location,
cardID,
}: {
context: Context;
originMsg: string | number;
location?: ygopro.CardLocation;
cardID?: number;
}) => {
const newOriginMsg =
typeof originMsg === "string"
? originMsg
: fetchStrings(Region.System, originMsg);
const cardMeta = cardID ? fetchCard(cardID) : undefined;
let esHint = newOriginMsg;
if (cardMeta?.text.name) {
esHint = esHint.replace("[?]", cardMeta.text.name);
}
if (location) {
const fieldMeta = context.cardStore.at(
location.zone,
location.controller,
location.sequence,
);
if (fieldMeta?.meta.text.name) {
esHint = esHint.replace("[?]", fieldMeta.meta.text.name);
}
}
context.matStore.hint.esHint = esHint;
};
...@@ -94,6 +94,3 @@ export class CardStore implements NeosStore { ...@@ -94,6 +94,3 @@ export class CardStore implements NeosStore {
} }
export const cardStore = proxy(new CardStore()); export const cardStore = proxy(new CardStore());
// @ts-ignore
window.cardStore = cardStore;
import { Region, type ygopro } from "@/api"; import { Region } from "@/api";
import { DESCRIPTION_LIMIT, fetchStrings, getStrings } from "@/api"; import { DESCRIPTION_LIMIT, fetchStrings, getStrings } from "@/api";
import { fetchCard } from "@/api/cards"; import { fetchCard } from "@/api/cards";
import { cardStore } from "@/stores/cardStore";
import { matStore } from "../store"; import { matStore } from "../store";
...@@ -38,39 +37,3 @@ export const fetchSelectHintMeta = ({ ...@@ -38,39 +37,3 @@ export const fetchSelectHintMeta = ({
matStore.hint.esHint = esHint; matStore.hint.esHint = esHint;
} }
}; };
export const fetchEsHintMeta = async ({
originMsg,
location,
cardID,
}: {
originMsg: string | number;
location?: ygopro.CardLocation;
cardID?: number;
}) => {
const newOriginMsg =
typeof originMsg === "string"
? originMsg
: fetchStrings(Region.System, originMsg);
const cardMeta = cardID ? fetchCard(cardID) : undefined;
let esHint = newOriginMsg;
if (cardMeta?.text.name) {
esHint = esHint.replace("[?]", cardMeta.text.name);
}
if (location) {
const fieldMeta = cardStore.at(
location.zone,
location.controller,
location.sequence,
);
if (fieldMeta?.meta.text.name) {
esHint = esHint.replace("[?]", fieldMeta.meta.text.name);
}
}
matStore.hint.esHint = esHint;
};
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