catbase/plugins/velouremon/creature_db.go

117 lines
2.7 KiB
Go
Raw Normal View History

2019-07-07 01:56:26 +00:00
package velouremon
import (
"fmt"
"github.com/rs/zerolog/log"
)
func (vp *VelouremonPlugin) loadCreatures() error {
rows, err := vp.db.Queryx("select * from velouremon_creatures;")
if err != nil {
log.Error().Err(err)
return err
}
defer rows.Close()
for rows.Next() {
creature := &Creature{
Health: 255,
Experience: 0,
}
err := rows.Scan(creature)
if err != nil {
log.Error().Err(err)
return err
}
vp.creatures = append(vp.creatures, creature)
}
return nil
}
func (vp *VelouremonPlugin) loadCreaturesForPlayer(player *Player) ([]*Creature, error) {
creatureRefs, err := vp.loadCreatureRefsForPlayer(player)
if err != nil {
return nil, err
}
creatures, err := vp.loadCreaturesFromRefs(creatureRefs)
if err != nil {
return nil, err
}
return creatures, nil
}
func (vp *VelouremonPlugin) loadCreatureRefsForPlayer(player *Player) ([]*CreatureRef, error) {
rows, err := vp.db.Queryx(fmt.Sprintf("select * from velouremon_creature_ref where player = %d;", player.ID))
if err != nil {
log.Error().Err(err)
return nil, err
}
defer rows.Close()
creatures := []*CreatureRef{}
for rows.Next() {
creature := &CreatureRef{}
err := rows.Scan(creature)
if err != nil {
log.Error().Err(err)
return nil, err
}
creatures = append(creatures, creature)
}
return creatures, nil
}
func (vp *VelouremonPlugin) loadCreaturesFromRefs(refs []*CreatureRef) ([]*Creature, error) {
creatures := []*Creature{}
for _, ref := range refs {
creature, err := vp.loadCreaturesFromRef(ref)
if err != nil {
log.Error().Err(err)
return nil, err
}
creatures = append(creatures, creature)
}
return creatures, nil
}
func (vp *VelouremonPlugin) loadCreaturesFromRef(ref *CreatureRef) (*Creature, error) {
creature := &Creature{}
err := vp.db.QueryRowx(`select * from velouremon_creatures where id = ? LIMIT 1;`, ref.Creature).StructScan(creature)
if err != nil {
log.Error().Err(err)
return nil, err
}
creature.Abilities, err = vp.loadAbilitiesForCreatureRef(ref)
if err != nil {
log.Error().Err(err)
return nil, err
}
creature.Health = ref.Health
creature.Experience = ref.Experience
return creature, nil
}
func (vp *VelouremonPlugin) savePlayerCreatures(player *Player) error {
for _, creature := range player.Creatures {
err := vp.saveCreatureForPlayer(player, creature)
if err != nil {
log.Error().Err(err)
return err
}
}
return nil
}
func (vp *VelouremonPlugin) saveCreatureForPlayer(player *Player, creature *Creature) error {
_, err := vp.db.Exec(`update velouremon_creature_ref set health = ?, experience = ? where id = ?;`, creature.ID, creature.Health, creature.Experience)
if err != nil {
log.Error().Err(err)
return err
}
return nil
}