md5-fight-plus
Version:
97 lines (90 loc) • 2.98 kB
text/typescript
import { PlayerDeathEvent } from "@/events/playerDeath";
import { Skill } from "@/types/skill";
import { BattleFieldInstance } from "@/types/battleField";
import { PlayerInstanceProperty } from "@/types/player";
import _ from "lodash";
export const getPlayers = (battleField: BattleFieldInstance) => {
return {
player1: battleField.players.left,
player2: battleField.players.right,
};
};
export const initFnToPlayers = (
battleField: BattleFieldInstance,
fn: (player: PlayerInstanceProperty) => void
) => {
const { player1, player2 } = getPlayers(battleField);
fn(player1);
fn(player2);
};
export const checkPlayerDeath = (battleField: BattleFieldInstance) => {
const player1 = battleField.players.left;
const player2 = battleField.players.right;
if (player1.runtimeProperty.hp <= 0) {
return new PlayerDeathEvent(`玩家【${player1.name}阵亡,游戏结束】`);
}
if (player2.runtimeProperty.hp <= 0) {
return new PlayerDeathEvent(`玩家【${player2.name}阵亡,游戏结束】`);
}
};
export const toUpperFirstCase = (name: string) =>
name.charAt(0).toUpperCase() + name.slice(1);
export const getRandomItem = (item: any[]) => {
const max = item.length - 1;
const index = _.random(0, max);
return item[index];
};
export const releaseFrostbite = (
player: PlayerInstanceProperty,
frostbite: number
) => {
const id = player.hooks.afterAttack.tap("release Frostbite", (props) => {
const battleField = props.battleField;
const { player2: defender } = getPlayers(battleField);
defender.hooks.onAdjustFrostbite.call(frostbite);
removeHookInRoundEnd(player, id, "afterAttack");
return props;
});
};
export const releaseFiring = (
player: PlayerInstanceProperty,
firing: number
) => {
player.hooks.onAdjustFiring.call(firing);
};
export const releasePoison = (
player: PlayerInstanceProperty,
poison: number
) => {
const id = player.hooks.afterAttack.tap("release Frostbite", (props) => {
player.hooks.onAdjustPoison.call(poison);
removeHookInRoundEnd(player, id, "afterAttack");
return props;
});
};
export const removeHookInRoundEnd = (
player: PlayerInstanceProperty,
id: number,
inHooks: string
) => {
const battleField = player.battleField;
battleField.roundHooks.roundEnd.tap("remove frostbiteAttack", (props) => {
player.hooks[inHooks].removeTap(id);
return props;
});
};
export const getOpponent = (player: PlayerInstanceProperty) => {
const battleField = player.battleField;
if (battleField.players.left === player) return battleField.players.right;
if (battleField.players.right === player) return battleField.players.left;
return undefined;
};
export const getPlayerState = (player: PlayerInstanceProperty) => {
const runtimeProperty = player.runtimeProperty;
let result = `${player.name}【状态记录】
`;
for (const [key, value] of Object.entries(runtimeProperty)) {
result += `${key}:${value} `;
}
return result;
};