@ -149,6 +149,9 @@ class HikeMapDB {
try {
try {
this . db . exec ( ` ALTER TABLE monster_types ADD COLUMN spawn_weight INTEGER DEFAULT 100 ` ) ;
this . db . exec ( ` ALTER TABLE monster_types ADD COLUMN spawn_weight INTEGER DEFAULT 100 ` ) ;
} catch ( e ) { /* Column already exists */ }
} catch ( e ) { /* Column already exists */ }
try {
this . db . exec ( ` ALTER TABLE monster_types ADD COLUMN spawn_location TEXT DEFAULT 'anywhere' ` ) ;
} catch ( e ) { /* Column already exists */ }
// Skills table - defines available skills/spells
// Skills table - defines available skills/spells
this . db . exec ( `
this . db . exec ( `
@ -868,8 +871,8 @@ class HikeMapDB {
const stmt = this . db . prepare ( `
const stmt = this . db . prepare ( `
INSERT INTO monster_types ( id , name , icon , base_hp , base_atk , base_def , xp_reward ,
INSERT INTO monster_types ( id , name , icon , base_hp , base_atk , base_def , xp_reward ,
level_scale_hp , level_scale_atk , level_scale_def , min_level , max_level , spawn_weight , dialogues , enabled ,
level_scale_hp , level_scale_atk , level_scale_def , min_level , max_level , spawn_weight , dialogues , enabled ,
base_mp , level_scale_mp , attack_animation , death_animation , idle_animation )
VALUES ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? )
base_mp , level_scale_mp , attack_animation , death_animation , idle_animation , spawn_location )
VALUES ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? )
` );
` );
// Support both camelCase (legacy) and snake_case (new admin UI) field names
// Support both camelCase (legacy) and snake_case (new admin UI) field names
const baseHp = monsterData . baseHp || monsterData . base_hp ;
const baseHp = monsterData . baseHp || monsterData . base_hp ;
@ -895,6 +898,8 @@ class HikeMapDB {
const attackAnim = monsterData . attack_animation || monsterData . attackAnimation || 'attack' ;
const attackAnim = monsterData . attack_animation || monsterData . attackAnimation || 'attack' ;
const deathAnim = monsterData . death_animation || monsterData . deathAnimation || 'death' ;
const deathAnim = monsterData . death_animation || monsterData . deathAnimation || 'death' ;
const idleAnim = monsterData . idle_animation || monsterData . idleAnimation || 'idle' ;
const idleAnim = monsterData . idle_animation || monsterData . idleAnimation || 'idle' ;
// Spawn location restriction
const spawnLocation = monsterData . spawn_location || monsterData . spawnLocation || 'anywhere' ;
return stmt . run (
return stmt . run (
monsterData . id || monsterData . key ,
monsterData . id || monsterData . key ,
@ -916,7 +921,8 @@ class HikeMapDB {
levelScale . mp || 5 ,
levelScale . mp || 5 ,
attackAnim ,
attackAnim ,
deathAnim ,
deathAnim ,
idleAnim
idleAnim ,
spawnLocation
) ;
) ;
}
}
@ -926,7 +932,8 @@ class HikeMapDB {
name = ? , icon = ? , base_hp = ? , base_atk = ? , base_def = ? ,
name = ? , icon = ? , base_hp = ? , base_atk = ? , base_def = ? ,
xp_reward = ? , level_scale_hp = ? , level_scale_atk = ? , level_scale_def = ? ,
xp_reward = ? , level_scale_hp = ? , level_scale_atk = ? , level_scale_def = ? ,
min_level = ? , max_level = ? , spawn_weight = ? , dialogues = ? , enabled = ? ,
min_level = ? , max_level = ? , spawn_weight = ? , dialogues = ? , enabled = ? ,
base_mp = ? , level_scale_mp = ? , attack_animation = ? , death_animation = ? , idle_animation = ?
base_mp = ? , level_scale_mp = ? , attack_animation = ? , death_animation = ? , idle_animation = ? ,
spawn_location = ?
WHERE id = ?
WHERE id = ?
` );
` );
// Support both camelCase (legacy) and snake_case (new admin UI) field names
// Support both camelCase (legacy) and snake_case (new admin UI) field names
@ -953,6 +960,8 @@ class HikeMapDB {
const attackAnim = monsterData . attack_animation || monsterData . attackAnimation || 'attack' ;
const attackAnim = monsterData . attack_animation || monsterData . attackAnimation || 'attack' ;
const deathAnim = monsterData . death_animation || monsterData . deathAnimation || 'death' ;
const deathAnim = monsterData . death_animation || monsterData . deathAnimation || 'death' ;
const idleAnim = monsterData . idle_animation || monsterData . idleAnimation || 'idle' ;
const idleAnim = monsterData . idle_animation || monsterData . idleAnimation || 'idle' ;
// Spawn location restriction
const spawnLocation = monsterData . spawn_location || monsterData . spawnLocation || 'anywhere' ;
return stmt . run (
return stmt . run (
monsterData . name ,
monsterData . name ,
@ -974,6 +983,7 @@ class HikeMapDB {
attackAnim ,
attackAnim ,
deathAnim ,
deathAnim ,
idleAnim ,
idleAnim ,
spawnLocation ,
id
id
) ;
) ;
}
}