programming-game
Version:
The client for programming game, an mmorpg that you interact with entirely through code.
86 lines (85 loc) • 3.9 kB
TypeScript
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 {};