UNPKG

dungeon-sdk-drikkx

Version:

Shared types and entities for the Dungeon game

371 lines (366 loc) 13.1 kB
import { DungeonDatabase, DungeonTheme, DungeonDifficulty, RoomType, RoomStatus, DungeonStatus, WaveStatus } from '../types/dungeon.types'; import { CHARACTER_DEFAULTS } from '../types/character.types'; import { Item, ItemType, ItemRarity } from '../types/item.types'; import { StatusEffect } from '../types/combat.types'; // Fonction helper pour créer un ennemi basé sur un template de personnage const createEnemy = (baseType: string, level: number = 1) => { const base = CHARACTER_DEFAULTS[baseType]; return { ...base, level, id: undefined, experience: 0 }; }; // Items de récompense communs const commonRewards: Item[] = [ { id: '1', name: 'Health Potion', description: 'Restore 50 vitality', type: 'consumable', rarity: 'common', level: 1, effects: [{ trigger: 'onUse', effect: { type: 'hot', stat: 'vitality', value: 50, duration: 1, source: 'item' } }], price: 100, stackable: true, maxStack: 10 }, { id: '2', name: 'Mana Potion', description: 'Restaure une partie des points de mana', type: 'consumable', rarity: 'common', level: 1, effects: [{ trigger: 'onUse', effect: { type: 'hot', stat: 'intelligence', value: 50, duration: 1, source: 'item' } }], price: 100, stackable: true, maxStack: 10 } ]; // Fonction helper pour créer un item d'équipement const createEquipment = (id: string, name: string, type: ItemType, rarity: ItemRarity, effects: StatusEffect[]): Item => ({ id, name, description: `${name} - ${rarity} ${type}`, type, rarity, level: 1, effects: effects.map(effect => ({ trigger: 'onEquip', effect })), price: rarity === 'epic' ? 1000 : rarity === 'rare' ? 500 : 200, stackable: false }); export const DUNGEON_DEFAULTS: Record<string, DungeonDatabase> = { // Donjon de la Grotte des Débutants cave: { id: '', theme: DungeonTheme.CAVE, difficulty: DungeonDifficulty.EASY, status: DungeonStatus.WAITING, currentRoom: 0, currentWave: 0, totalRooms: 3, totalWaves: 3, party: [], combatHistory: [], completed: false, createdAt: new Date(), startedAt: new Date(), createdById: '', rooms: [ { id: 'room1', dungeonId: '', type: RoomType.COMBAT, roomNumber: 1, status: RoomStatus.PENDING, completed: false, description: 'Une petite grotte faiblement éclairée', createdAt: new Date(), waves: [ { id: 'wave1', roomId: 'room1', waveNumber: 1, status: WaveStatus.PENDING, enemies: [createEnemy('skeleton', 1)], rewards: commonRewards, completed: false, createdAt: new Date() } ] }, { id: 'room2', dungeonId: '', type: RoomType.COMBAT, roomNumber: 2, status: RoomStatus.PENDING, completed: false, description: 'Une caverne avec des cristaux lumineux', createdAt: new Date(), waves: [ { id: 'wave2', roomId: 'room2', waveNumber: 1, status: WaveStatus.PENDING, enemies: [ createEnemy('skeleton', 1), createEnemy('skeleton_archer', 1) ], rewards: [ ...commonRewards, createEquipment('3', 'Crystal Shard', 'material', 'uncommon', []) ], completed: false, createdAt: new Date() } ] }, { id: 'room3', dungeonId: 'cave', type: RoomType.BOSS, roomNumber: 3, status: RoomStatus.PENDING, completed: false, description: 'La chambre du boss, un grand espace avec un trône de pierre', createdAt: new Date(), waves: [ { id: 'wave3', roomId: 'room3', waveNumber: 1, status: WaveStatus.PENDING, enemies: [ createEnemy('skeleton', 1), createEnemy('armored_skeleton', 1), createEnemy('skeleton_archer', 1) ], rewards: [ ...commonRewards, createEquipment('4', 'Knight\'s Shield', 'armor', 'rare', [{ type: 'buff', stat: 'vitality', value: 10, duration: -1, source: 'equipment' }]) ], completed: false, createdAt: new Date() } ] } ] }, // Forêt Mystique forest: { id: '', theme: DungeonTheme.FOREST, difficulty: DungeonDifficulty.MEDIUM, status: DungeonStatus.WAITING, currentRoom: 0, currentWave: 0, totalRooms: 4, totalWaves: 5, party: [], combatHistory: [], completed: false, createdAt: new Date(), startedAt: new Date(), createdById: '', rooms: [ { id: 'room1', dungeonId: 'forest', type: RoomType.COMBAT, roomNumber: 1, status: RoomStatus.PENDING, completed: false, description: 'Une clairière brumeuse', createdAt: new Date(), waves: [ { id: 'wave1', roomId: 'room1', waveNumber: 1, status: WaveStatus.PENDING, enemies: [ createEnemy('archer', 2), createEnemy('archer', 2) ], rewards: commonRewards, completed: false, createdAt: new Date() } ] }, { id: 'room2', dungeonId: 'forest', type: RoomType.COMBAT, roomNumber: 2, status: RoomStatus.PENDING, completed: false, description: 'Un bosquet enchanté', createdAt: new Date(), waves: [ { id: 'wave2', roomId: 'room2', waveNumber: 1, status: WaveStatus.PENDING, enemies: [ createEnemy('priest', 2), createEnemy('swordsman', 2) ], rewards: commonRewards, completed: false, createdAt: new Date() }, { id: 'wave3', roomId: 'room2', waveNumber: 2, status: WaveStatus.PENDING, enemies: [ createEnemy('archer', 2), createEnemy('priest', 2) ], rewards: [ ...commonRewards, createEquipment('5', 'Enchanted Bow', 'weapon', 'rare', [{ type: 'buff', stat: 'strength', value: 5, duration: -1, source: 'equipment' }]) ], completed: false, createdAt: new Date() } ] }, { id: 'room3', dungeonId: 'forest', type: RoomType.ELITE, roomNumber: 3, status: RoomStatus.PENDING, completed: false, description: 'Le sanctuaire des gardiens', createdAt: new Date(), waves: [ { id: 'wave4', roomId: 'room3', waveNumber: 1, status: WaveStatus.PENDING, enemies: [ createEnemy('knight', 3), createEnemy('priest', 3) ], rewards: [ ...commonRewards, createEquipment('6', 'Guardian\'s Amulet', 'armor', 'rare', [ { type: 'buff', stat: 'strength', value: 3, duration: -1, source: 'equipment' }, { type: 'buff', stat: 'agility', value: 3, duration: -1, source: 'equipment' }, { type: 'buff', stat: 'intelligence', value: 3, duration: -1, source: 'equipment' } ]) ], completed: false, createdAt: new Date() } ] }, { id: 'room4', dungeonId: 'forest', type: RoomType.BOSS, roomNumber: 4, status: RoomStatus.PENDING, completed: false, description: 'L\'arbre ancestral', createdAt: new Date(), waves: [ { id: 'wave5', roomId: 'room4', waveNumber: 1, status: WaveStatus.PENDING, enemies: [ createEnemy('knight', 4), createEnemy('priest', 4), createEnemy('archer', 4) ], rewards: [ ...commonRewards, createEquipment('7', 'Ancient Tree Core', 'material', 'epic', []), createEquipment('8', 'Forest Guardian\'s Blade', 'weapon', 'epic', [ { type: 'buff', stat: 'strength', value: 10, duration: -1, source: 'equipment' }, { type: 'buff', stat: 'agility', value: 5, duration: -1, source: 'equipment' } ]) ], completed: false, createdAt: new Date() } ] } ] } };