Files
a301_game_server/internal/ai/registry.go
2026-02-26 17:52:48 +09:00

131 lines
2.7 KiB
Go

package ai
import "time"
// MobRegistry holds all mob definitions.
type MobRegistry struct {
defs map[uint32]*MobDef
}
// NewMobRegistry creates a registry with default mob definitions.
func NewMobRegistry() *MobRegistry {
r := &MobRegistry{defs: make(map[uint32]*MobDef)}
r.registerDefaults()
return r
}
// Get returns a mob definition by ID.
func (r *MobRegistry) Get(id uint32) *MobDef {
return r.defs[id]
}
func (r *MobRegistry) registerDefaults() {
r.defs[1] = &MobDef{
ID: 1,
Name: "Goblin",
Level: 1,
HP: 60,
MP: 0,
Str: 8,
Dex: 6,
Int: 3,
MoveSpeed: 4.0,
AggroRange: 10.0,
AttackRange: 2.5,
AttackSkill: 1, // basic attack
LeashRange: 30.0,
ExpReward: 20,
LootTable: []LootEntry{
{ItemID: 101, Quantity: 1, Chance: 0.5},
},
}
r.defs[2] = &MobDef{
ID: 2,
Name: "Wolf",
Level: 2,
HP: 80,
MP: 0,
Str: 12,
Dex: 10,
Int: 2,
MoveSpeed: 6.0,
AggroRange: 12.0,
AttackRange: 2.0,
AttackSkill: 1,
LeashRange: 35.0,
ExpReward: 35,
LootTable: []LootEntry{
{ItemID: 102, Quantity: 1, Chance: 0.4},
{ItemID: 103, Quantity: 1, Chance: 0.1},
},
}
r.defs[3] = &MobDef{
ID: 3,
Name: "Forest Troll",
Level: 5,
HP: 200,
MP: 30,
Str: 25,
Dex: 8,
Int: 5,
MoveSpeed: 3.0,
AggroRange: 8.0,
AttackRange: 3.0,
AttackSkill: 1,
LeashRange: 25.0,
ExpReward: 80,
LootTable: []LootEntry{
{ItemID: 104, Quantity: 1, Chance: 0.6},
{ItemID: 105, Quantity: 1, Chance: 0.15},
},
}
r.defs[4] = &MobDef{
ID: 4,
Name: "Fire Elemental",
Level: 8,
HP: 350,
MP: 100,
Str: 15,
Dex: 12,
Int: 30,
MoveSpeed: 3.5,
AggroRange: 15.0,
AttackRange: 10.0,
AttackSkill: 2, // fireball
LeashRange: 40.0,
ExpReward: 150,
LootTable: []LootEntry{
{ItemID: 106, Quantity: 1, Chance: 0.3},
{ItemID: 107, Quantity: 1, Chance: 0.05},
},
}
r.defs[5] = &MobDef{
ID: 5,
Name: "Dragon Whelp",
Level: 12,
HP: 800,
MP: 200,
Str: 35,
Dex: 20,
Int: 25,
MoveSpeed: 5.0,
AggroRange: 20.0,
AttackRange: 4.0,
AttackSkill: 2,
LeashRange: 50.0,
ExpReward: 350,
LootTable: []LootEntry{
{ItemID: 108, Quantity: 1, Chance: 0.4},
{ItemID: 109, Quantity: 1, Chance: 0.02},
},
}
// Adjust respawn-related values (these go in SpawnPoints, not MobDef, but
// set sensible AttackSkill cooldowns via the existing combat skill system)
_ = time.Second // reference for documentation
}