summaryrefslogtreecommitdiffstats
path: root/wat/db.go
blob: a79da094f9de083824b2cebf6bca615afa57dd07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package wat

import (
	"time"
	"github.com/jinzhu/gorm"
	_"github.com/jinzhu/gorm/dialects/sqlite"
)
import "fmt"

type Player struct {
	gorm.Model
	Nick string
	Host string
	Watting int64
	Anarchy int64
	Trickery int64
	Coins int64 `gorm:"default:'100'"`
	Health int64
	LastMined int64
	LastRested int64
	CoinsLost int64
}

func (p *Player) LoseCoins(coins int64) {
	p.Coins -= coins
	p.CoinsLost += coins
}

func (p *Player) Conscious() bool {
	return (p.Health > 0)
}

func (p *Player) Level(xp int64) int64 {
	if xp < 100 {
		return xp/10
	} else if xp < 900 {
		return 10 + (xp/100)
	} else {
		return 99
	}
}

type Ledger struct {
	PlayerId uint `gorm:"primary_key"`
	Time int64
	Balance int64
	Log string
}

type Item struct {
	PlayerId uint
	Name string `gorm:"primary_key"`
	Price int64
}

type PlayerItem struct {
	PlayerId uint
	ItemId int
	Count int
}

type WatDb struct {
	db *gorm.DB
}

func NewWatDb() *WatDb {
	w := WatDb{}
	var err error
	w.db, err = gorm.Open("sqlite3", "wat.db")
	if err != nil {
		panic(err)
	}
	w.db.AutoMigrate(&Player{}, &Ledger{}, &Item{}, &PlayerItem{})
	return &w
}

func (w *WatDb) User(nick, host string, create bool) Player {
	var player Player
	// Try and get a user
	if err := w.db.First(&player, "nick = ? or host = ?", nick, host).Error; err != nil && create {
		fmt.Printf("Creating user: %s\n", err.Error())
		// No user, make another
		player.Nick = nick
		player.Host = host
		w.db.Create(&player)
		w.db.First(&player, "nick = ? or host = ?", nick, host)
		w.db.Create(&Ledger{player.Model.ID, time.Now().Unix(), 0, "creation"})
	}
	return player
}

func (w *WatDb) Update(upd interface{}) {
	w.db.Save(upd)
}

func (w *WatDb) TopTen() []Player {
	var user = make([]Player, 10)
	w.db.Limit(10).Order("coins desc").Find(&user)
	return user
}