UNPKG

programming-game

Version:

The client for programming game, an mmorpg that you interact with entirely through code.

86 lines (85 loc) 3.9 kB
import { OnTick } from "."; import { Equipments, Items, UsableItems } from "./items"; import { recipes } from "./recipes"; import { Spells, CastIntent } from "./spells"; import { AbandonQuestIntent, AcceptPartyInviteIntent, AcceptQuestIntent, AttackIntent, BatchedEvents, BuyItemsIntent, ClientSideNPC, ClientSidePlayer, ClientSideUnit, CraftIntent, DepositIntent, DropIntent, EatIntent, EquipIntent, EventMap, InstanceName, Intent, Inventory, InviteToPartyIntent, LeavePartyIntent, MoveIntent, NewTrades, PlayerEquipment, RawEvents, RespawnIntent, ROLES, SeekPartyIntent, SellItemsIntent, SetRoleIntent, SetSpellStonesIntent, SetTradeIntent, SummonManaIntent, TurnInQuestIntent, UnequipIntent, UseIntent, WeaponSkillIntent, WithdrawIntent } from "./types"; import { WeaponSkill, WeaponSkillSpecifics } from "./weapon-skills"; export type OnTickCurrentPlayer = ClientSidePlayer & ReturnType<typeof getHandlers>; declare const getHandlers: (player: ClientSidePlayer) => { setRole: (role: ROLES) => SetRoleIntent; attack: (target: ClientSideUnit) => AttackIntent; move: (position: { x: number; y: number; }) => MoveIntent; respawn: () => RespawnIntent; summonMana: () => SummonManaIntent; eat: (item: Items) => EatIntent; cast: (spell: Spells, target?: ClientSideUnit) => CastIntent; sell: (opt: { items: { [key in Items]?: number; }; to: ClientSideUnit; }) => SellItemsIntent; buy: (opts: { items: { [key in Items]?: number; }; from: ClientSideUnit; }) => BuyItemsIntent; use: (item: UsableItems, target?: ClientSideUnit) => UseIntent; seekParty: () => SeekPartyIntent; inviteToParty: (playerId: string) => InviteToPartyIntent; leaveParty: () => LeavePartyIntent; acceptPartyInvite: (playerId: string) => AcceptPartyInviteIntent; equip: (item: Equipments, slot: keyof PlayerEquipment) => EquipIntent; unequip: (slot: keyof PlayerEquipment) => UnequipIntent; craft: (item: keyof typeof recipes, from: Partial<Record<Items, number>>) => CraftIntent; useWeaponSkill: <T extends WeaponSkill>(specifics: WeaponSkillSpecifics[T]["client"]) => WeaponSkillIntent<T>; drop: ({ item, amount }: { item: Items; amount: number; }) => DropIntent; setSpellStones: (item: Items, stones: Spells[], name: string) => SetSpellStonesIntent; setTrade: (trades: NewTrades) => SetTradeIntent; acceptQuest: (npc: ClientSideNPC, questId: string) => AcceptQuestIntent; abandonQuest: (questId: string) => AbandonQuestIntent; turnInQuest: (npc: ClientSideNPC, questId: string) => TurnInQuestIntent; withdraw: (npc: ClientSideNPC, items: Inventory) => WithdrawIntent; deposit: (npc: ClientSideNPC, items: Inventory) => DepositIntent; }; export type OnEvent = <T extends keyof RawEvents>(instance: InstanceName, charId: string, eventName: T, evt: RawEvents[T]) => void; export type SetIntent = (intent: { c: string; i: InstanceName; intent: Intent; unitId: string; }) => void; /** * Base class for the client. * This class cares about the events, but NOT the implementation of the events. * Helpful for testing the server/client integration without firing up websockets. */ export declare class BaseClient { private onTick; private heartBeatInterval?; private setIntent; private onEvent?; constructor({ onTick, onEvent, setIntent, }: { onTick: OnTick; onEvent?: OnEvent; setIntent: SetIntent; }); private time; private lastOnTick; private innerState; private initializeInstance; clearState: () => void; eventsHandler: (events: BatchedEvents) => void; runOnTick: () => void; /** * Handles events coming from the server. */ socketEventHandlers: EventMap; private updateUnit; private updateNpc; private updatePlayer; } export {};