UNPKG

moomooio-client

Version:

MooMooIO-Client is a client-side wrapper API designed for the game MooMoo.io. This package aims to provide a simple yet powerful API for creating clones, mods, or plugins for MooMoo.io.

79 lines (70 loc) 2.74 kB
import { z } from "zod"; const schema = z.union([z.tuple([z.array(z.number())]), z.tuple([])]); const chunkSchema = z.tuple([ z.number(), z.number(), z.number(), z.number(), z.number(), z.number(), z.number(), ]); /** * @member `uniqueName` If the AI is a cow or pig, this field will contain the name of the cow or pig. * Otherwise, it will be `null`. * @member `health` This field indicates the current health of the AI.. * @member `type` specifies the type of AI, which is used to fetch his meta data. * @member `rotation` indicates the rotation value of the AI. * @member `id` serves as a unique identifier for the AI. * @member `x` represents the player's position on the x-axis. * @member `y` represents the player's position on the y-axis. */ export interface GameAIData { readonly uniqueName: string | null; readonly health: number; readonly type: number; readonly rotation: number; readonly id: number; readonly x: number; readonly y: number; } /** * @packet-id "a" * @description **UpdateGameAI** is a packet that holds information about the current status of gameAI in the game. * @member `data` a list of PlayerData * * @member `GameAIData.uniqueName` If the AI is a cow or pig, this field will contain the name of the cow or pig. * Otherwise, it will be `null`. * @member `GameAIData.health` This field indicates the current health of the AI.. * @member `GameAIData.type` specifies the type of AI, which is used to fetch his meta data. * @member `GameAIData.rotation` indicates the rotation value of the AI. * @member `GameAIData.id` serves as a unique identifier for the AI. * @member `GameAIData.x` represents the player's position on the x-axis. * @member `GameAIData.y` represents the player's position on the y-axis. */ export default class UpdateGameAI { public static readonly PACKET_ID = "a"; public static readonly PACKET_NAME = "UpdateGameAI"; public readonly PACKET_NAME = "UpdateGameAI"; constructor(readonly data: GameAIData[]) {} static parse(data: unknown): UpdateGameAI { const result: GameAIData[] = []; const info = schema.parse(data)[0]; if (info) for (let i = 0; i < info.length; i += 7) { const content = info.slice(i, i + 7); const chunk = chunkSchema.parse(content); result.push({ health: chunk[5], type: chunk[1], rotation: chunk[4], // FIXME: uniqueName is string for cows. uniqueName: null, // getUniqueName(chunk[6]) || null, id: chunk[0], x: chunk[2], y: chunk[3], }); } return new UpdateGameAI(result); } }