aslobot-matrix/src/services/game/structures/entities.ts
2026-01-23 09:18:11 -05:00

98 lines
1.9 KiB
TypeScript

import { Location } from "./locations.js";
import { Race } from "./races.js";
import type { IInventory } from "../types.js";
export interface IEntity {
name: string;
description: string;
race: Race;
location: Location;
inventory: IInventory;
experience: number;
vitality: number;
strength: number;
endurance: number;
agility: number;
dexterity: number;
intelligence: number;
wisdom: number;
stealth: number;
charisma: number;
lockpicking: number;
}
export interface IPlayer extends IEntity {
health: number;
}
export interface INPC extends IEntity {
id: NPC;
type: NpcType;
}
export interface INPCData {
id: NPC;
health: number;
dead: boolean;
}
export type TFullNPC = INPC & INPCData;
export enum NPC {
BECKY = "BECKY",
TATO = "TATO",
}
export enum NpcType {
QUEST_GIVER = "QUEST_GIVER",
PASSIVE = "PASSIVE",
AGGRESIVE = "AGGRESIVE",
}
export const npcBecky: INPC = {
id: NPC.BECKY,
name: "Becky",
description: "A 50 meter tall giantess. Might be a bad idea to attack",
race: Race.GIANT,
location: Location.NIGHTROOT_FOREST,
inventory: {
items: [],
},
experience: 10000,
vitality: 250,
strength: 250,
endurance: 50,
agility: 5,
dexterity: 10,
intelligence: 20,
wisdom: 30,
stealth: 0,
charisma: 5,
lockpicking: 50,
type: NpcType.QUEST_GIVER,
};
export const npcTato: INPC = {
id: NPC.TATO,
name: "Tato",
description: "A drunk troll",
race: Race.TROLL,
location: Location.HIGHMERE_TAVERN,
inventory: {
items: [],
},
experience: 500,
vitality: 25,
strength: 25,
endurance: 5,
agility: 15,
dexterity: 30,
intelligence: 5,
wisdom: 10,
stealth: 5,
charisma: 20,
lockpicking: 0,
type: NpcType.QUEST_GIVER,
};
export const npcs = [npcBecky, npcTato];