catbase/plugins/velouremon/creature.go

55 lines
1.2 KiB
Go

package velouremon
import (
"math/rand"
"math"
"fmt"
)
type Creature struct {
ID int `db:"id"`
Name string `db:"name"`
Health int
Experience int
Defense int `db:"defense"`
Attack int `db:"attack"`
Abilities []*Ability
}
type CreatureRef struct {
ID int `db:"id"`
Creature int `db:"creature"`
Health int `db:"health"`
Experience int `db:"experience"`
}
func (c *Creature) string() string {
message := fmt.Sprintf("%s : %d HP, %d XP, %d DEF, %d ATT\n", c.Name, c.Health, c.Experience, c.Defense, c.Attack)
for _, ability := range c.Abilities {
message += "\t" + ability.string()
}
return message
}
func (vp *VelouremonPlugin) buildOutCreature(c *Creature) *Creature {
creature := &Creature{
ID: c.ID,
Name: c.Name,
Health: 255,
Experience: int(math.Max(1, rand.NormFloat64() * 100 + 250)),
Defense: c.Defense,
Attack: c.Attack,
Abilities: make([]*Ability, rand.Intn(4)),
}
used := map[int]int{}
for i := range creature.Abilities {
index := rand.Intn(len(vp.abilities))
for _, ok := used[index]; ok; _, ok = used[index] {
index = rand.Intn(len(vp.abilities))
}
creature.Abilities[i] = vp.abilities[index]
}
return creature
}