131 lines
2.7 KiB
Go
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
|
|
}
|