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 { Container } from "@/container";
import { AudioActionType, playEffect } from "@/infra/audio";
import { cardStore, fetchEsHintMeta } from "@/stores";
import { cardStore } from "@/stores";
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({
context,
originMsg: "「[?]」攻击时",
location: attack.attacker_location,
});
......
import { ygopro } from "@/api";
import { fetchEsHintMeta } from "@/stores";
import { Container } from "@/container";
export default (_: ygopro.StocGameMessage.MsgAttackDisabled) => {
fetchEsHintMeta({ originMsg: "攻击被无效时" });
import { fetchEsHintMeta } from "./util";
export default (
container: Container,
_: ygopro.StocGameMessage.MsgAttackDisabled,
) => {
fetchEsHintMeta({ context: container.context, originMsg: "攻击被无效时" });
};
import { fetchCard, ygopro } from "@/api";
import { Container } from "@/container";
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 { fetchEsHintMeta } from "./util";
export default async (
container: Container,
chaining: ygopro.StocGameMessage.MsgChaining,
) => {
playEffect(AudioActionType.SOUND_ACTIVATE);
const context = container.context;
fetchEsHintMeta({
context,
originMsg: "「[?]」被发动时",
cardID: chaining.code,
});
const context = container.context;
const location = chaining.location;
// 将`location`添加到连锁栈
......
import { fetchCard, ygopro } from "@/api";
import { Container } from "@/container";
import { AudioActionType, playEffect } from "@/infra/audio";
import { cardStore, fetchEsHintMeta } from "@/stores";
import { cardStore } from "@/stores";
import { callCardMove } from "@/ui/Duel/PlayMat/Card";
export default async (draw: ygopro.StocGameMessage.MsgDraw) => {
fetchEsHintMeta({ originMsg: "玩家抽卡时" });
import { fetchEsHintMeta } from "./util";
export default async (
container: Container,
draw: ygopro.StocGameMessage.MsgDraw,
) => {
const context = container.context;
fetchEsHintMeta({ context, originMsg: "玩家抽卡时" });
const drawLength = draw.cards.length;
......
import { ygopro } from "@/api";
import { fetchEsHintMeta } from "@/stores";
import { Container } from "@/container";
export default (_: ygopro.StocGameMessage.MsgFlipSummoned) => {
fetchEsHintMeta({ originMsg: 1608 });
import { fetchEsHintMeta } from "./util";
export default (
container: Container,
_: ygopro.StocGameMessage.MsgFlipSummoned,
) => {
fetchEsHintMeta({ context: container.context, originMsg: 1608 });
};
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);
fetchEsHintMeta({
context: container.context,
originMsg: "「[?]」反转召唤宣言时",
cardID: flipSummoning.code,
});
......
......@@ -119,7 +119,7 @@ export default async function handleGameMsg(
break;
}
case "draw": {
await onMsgDraw(msg.draw);
await onMsgDraw(container, msg.draw);
break;
}
......@@ -134,7 +134,7 @@ export default async function handleGameMsg(
break;
}
case "hint": {
await onMsgHint(msg.hint);
await onMsgHint(container, msg.hint);
break;
}
......@@ -188,7 +188,7 @@ export default async function handleGameMsg(
break;
}
case "pos_change": {
await onMsgPosChange(msg.pos_change);
await onMsgPosChange(container, msg.pos_change);
break;
}
......@@ -203,7 +203,7 @@ export default async function handleGameMsg(
break;
}
case "update_hp": {
onMsgUpdateHp(msg.update_hp);
onMsgUpdateHp(container, msg.update_hp);
break;
}
......@@ -253,22 +253,22 @@ export default async function handleGameMsg(
break;
}
case "set": {
onMsgSet(msg.set);
onMsgSet(container, msg.set);
break;
}
case "swap": {
onMsgSwap(msg.swap);
onMsgSwap(container, msg.swap);
break;
}
case "attack": {
await onMsgAttack(msg.attack);
await onMsgAttack(container, msg.attack);
break;
}
case "attack_disable": {
onMsgAttackDisable(msg.attack_disable);
onMsgAttackDisable(container, msg.attack_disable);
break;
}
......@@ -287,32 +287,32 @@ export default async function handleGameMsg(
break;
}
case "summoning": {
onMsgSummoning(msg.summoning);
onMsgSummoning(container, msg.summoning);
break;
}
case "summoned": {
onMsgSummoned(msg.summoned);
onMsgSummoned(container, msg.summoned);
break;
}
case "flip_summoning": {
onMsgFlipSummoning(msg.flip_summoning);
onMsgFlipSummoning(container, msg.flip_summoning);
break;
}
case "flip_summoned": {
onMsgFilpSummoned(msg.flip_summoned);
onMsgFilpSummoned(container, msg.flip_summoned);
break;
}
case "sp_summoning": {
onMsgSpSummoning(msg.sp_summoning);
onMsgSpSummoning(container, msg.sp_summoning);
break;
}
case "sp_summoned": {
onMsgSpSummoned(msg.sp_summoned);
onMsgSpSummoned(container, msg.sp_summoned);
break;
}
......
import { ygopro } from "@/api";
import {
fetchCommonHintMeta,
fetchEsHintMeta,
fetchSelectHintMeta,
} from "@/stores";
import { fetchCommonHintMeta, fetchSelectHintMeta } from "@/stores";
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) {
case MsgHint.HintType.HINT_EVENT: {
await fetchEsHintMeta({ originMsg: hint.hint_data });
await fetchEsHintMeta({
context: container.context,
originMsg: hint.hint_data,
});
break;
}
case MsgHint.HintType.HINT_MESSAGE: {
......
import { ygopro } from "@/api";
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";
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 target = cardStore.at(location, controller, sequence);
......@@ -17,6 +21,7 @@ export default async (posChange: MsgPosChange) => {
}
fetchEsHintMeta({
context,
originMsg: 1600,
});
};
import { ygopro } from "@/api";
import { fetchEsHintMeta } from "@/stores";
import { Container } from "@/container";
export default (_set: ygopro.StocGameMessage.MsgSet) => {
fetchEsHintMeta({ originMsg: 1601 });
import { fetchEsHintMeta } from "./util";
export default (container: Container, _set: ygopro.StocGameMessage.MsgSet) => {
fetchEsHintMeta({ context: container.context, originMsg: 1601 });
};
import { ygopro } from "@/api";
import { fetchEsHintMeta } from "@/stores";
import { Container } from "@/container";
export default (_: ygopro.StocGameMessage.MsgSpSummoned) => {
fetchEsHintMeta({ originMsg: 1606 });
import { fetchEsHintMeta } from "./util";
export default (
container: Container,
_: ygopro.StocGameMessage.MsgSpSummoned,
) => {
fetchEsHintMeta({ context: container.context, originMsg: 1606 });
};
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);
// if (card.data.type && card.data.type & TYPE_TOKEN) {
// playEffect(AudioActionType.SOUND_TOKEN);
......@@ -9,6 +14,7 @@ export default (spSummoning: ygopro.StocGameMessage.MsgSpSummoning) => {
// playEffect(AudioActionType.SOUND_SPECIAL_SUMMON);
// }
fetchEsHintMeta({
context: container.context,
originMsg: "「[?]」特殊召唤宣言时",
cardID: spSummoning.code,
});
......
import { ygopro } from "@/api";
import { fetchEsHintMeta } from "@/stores";
import { Container } from "@/container";
export default (_: ygopro.StocGameMessage.MsgSummoned) => {
fetchEsHintMeta({ originMsg: 1604 });
import { fetchEsHintMeta } from "./util";
export default (
container: Container,
_: ygopro.StocGameMessage.MsgSummoned,
) => {
fetchEsHintMeta({ context: container.context, originMsg: 1604 });
};
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动画架构的问题,这里播放音效的话会滞后于移动动画,
* 因此这里先注释掉,等解决掉上述问题后再加上召唤的音效。
* */
// playEffect(AudioActionType.SOUND_SUMMON);
fetchEsHintMeta({
context: container.context,
originMsg: "「[?]」通常召唤宣言时",
cardID: summoning.code,
});
......
import { ygopro } from "@/api";
import { fetchEsHintMeta } from "@/stores";
import { Container } from "@/container";
export default (_swap: ygopro.StocGameMessage.MsgSwap) => {
fetchEsHintMeta({ originMsg: 1602 });
import { fetchEsHintMeta } from "./util";
export default (
container: Container,
_swap: ygopro.StocGameMessage.MsgSwap,
) => {
fetchEsHintMeta({ context: container.context, originMsg: 1602 });
};
import { ygopro } from "@/api";
import { fetchEsHintMeta, matStore } from "@/stores";
import { matStore } from "@/stores";
import MsgUpdateHp = ygopro.StocGameMessage.MsgUpdateHp;
import { Container } from "@/container";
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) {
playEffect(AudioActionType.SOUND_DAMAGE);
fetchEsHintMeta({ originMsg: "玩家收到伤害时" }); // TODO: i18n
fetchEsHintMeta({ context, originMsg: "玩家收到伤害时" }); // TODO: i18n
matStore.initInfo.of(msgUpdateHp.player).life -= msgUpdateHp.value;
} else if (msgUpdateHp.type_ === MsgUpdateHp.ActionType.RECOVER) {
playEffect(AudioActionType.SOUND_RECOVER);
fetchEsHintMeta({ originMsg: "玩家生命值回复时" }); // TODO: i18n
fetchEsHintMeta({ context, originMsg: "玩家生命值回复时" }); // TODO: i18n
matStore.initInfo.of(msgUpdateHp.player).life += msgUpdateHp.value;
}
if (matStore.initInfo.me.life > matStore.initInfo.op.life * 2) {
......
import { ygopro } from "@/api";
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 {
const isOnField = (location: ygopro.CardLocation) => {
......@@ -53,3 +57,41 @@ export function argmax<T>(arr: T[], getValue: (item: T) => number): number {
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 {
}
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 { fetchCard } from "@/api/cards";
import { cardStore } from "@/stores/cardStore";
import { matStore } from "../store";
......@@ -38,39 +37,3 @@ export const fetchSelectHintMeta = ({
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