dungeon-sdk-drikkx
Version:
Shared types and entities for the Dungeon game
371 lines (366 loc) • 13.1 kB
text/typescript
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()
}
]
}
]
}
};