changed coins to uint64 and started using uints all over the place

added toplost
removed an ignore
This commit is contained in:
alex 2018-11-14 22:38:32 +00:00
parent 237d91de16
commit 5c24c985d3
3 changed files with 54 additions and 35 deletions

View File

@ -61,7 +61,7 @@ func (w *WatBot) AllowedChannel(c string) bool {
func (w *WatBot) Msg(m *irc.Message) {
// bail out if you're not yves, if you're not tripsit or if you're not in an allowed channel
// but if you're an admin you can do whatever
if m.Prefix.Host == "tripsit/user/creatonez" || m.Prefix.Host == "tripsit/user/Yves" || !strings.Contains(m.Prefix.Host, "tripsit") || (!w.AllowedChannel(m.Params[0]) && !w.Admin(m)) {
if m.Prefix.Host == "tripsit/user/creatonez" || !strings.Contains(m.Prefix.Host, "tripsit") || (!w.AllowedChannel(m.Params[0]) && !w.Admin(m)) {
return
}

View File

@ -15,14 +15,14 @@ type Player struct {
Watting int64
Anarchy int64
Trickery int64
Coins int64 `gorm:"default:'100'"`
Coins uint64 `gorm:"default:'100'"`
Health int64
LastMined int64
LastRested int64
CoinsLost int64
CoinsLost uint64
}
func (p *Player) LoseCoins(coins int64) {
func (p *Player) LoseCoins(coins uint64) {
p.Coins -= coins
p.CoinsLost += coins
}
@ -97,6 +97,12 @@ func (w *WatDb) Update(upd ...interface{}) {
}
}
func (w *WatDb) TopLost() []Player {
var user = make([]Player, 10)
w.db.Limit(10).Order("coins_lost desc").Find(&user)
return user
}
func (w *WatDb) TopTen() []Player {
var user = make([]Player, 10)
w.db.Limit(10).Order("coins desc").Find(&user)

View File

@ -33,10 +33,10 @@ func NewWatGame(bot *WatBot, db *WatDb) *WatGame {
"flip": g.Roll,
"dice": g.Dice,
"mine": g.Mine,
"riot": g.Riot,
"bench": g.Bench,
}
g.lifeCommands = map[string](func(*Player, []string) string){
"riot": g.Riot,
"bench": g.Bench,
"heal": g.Heal,
"steal": g.Steal,
"frame": g.Frame,
@ -65,6 +65,8 @@ func (g *WatGame) Msg(m *irc.Message, player *Player, fields []string) {
switch strings.ToLower(fields[0]) {
case "help":
reply = helpText
case "toplost":
reply = fmt.Sprintf("%s losers: %s", currency, g.TopLost())
case "topten":
reply = fmt.Sprintf("%s holders: %s", currency, g.TopTen())
case "source":
@ -83,9 +85,9 @@ func (g *WatGame) Msg(m *irc.Message, player *Player, fields []string) {
g.bot.reply(m, reply)
}
func (g *WatGame) RandInt(max int64) int64 {
func (g *WatGame) RandInt(max int64) uint64 {
i, _ := rand.Int(rand.Reader, big.NewInt(max))
return i.Int64()
return i.Uint64()
}
func (g *WatGame) Heal(player *Player, fields []string) string {
@ -97,20 +99,21 @@ func (g *WatGame) Heal(player *Player, fields []string) string {
if e != "" {
return e
}
amount, err := g.Int(fields[2])
a, err := g.Int(fields[2])
if err != nil {
return err.Error()
}
if amount > player.Coins {
if a > player.Coins {
return "u poor lol"
}
amount := int64(a)
if amount < multiplier {
return fmt.Sprintf("too cheap lol at least %d", multiplier)
}
target.Health += amount / multiplier
player.Coins -= amount
player.Coins -= a
if target.Nick == player.Nick {
target.Coins -= amount
target.Coins -= a
g.db.Update(target)
} else {
g.db.Update(target, player)
@ -120,14 +123,14 @@ func (g *WatGame) Heal(player *Player, fields []string) string {
}
func (g *WatGame) Dice(player *Player, fields []string) string {
roll := int64(6)
roll := uint64(6)
if len(fields) > 1 {
i, e := g.Int(fields[1])
if e == nil {
roll = i
}
}
answer := g.RandInt(roll) + 1
answer := g.RandInt(int64(roll)) + 1
return fmt.Sprintf("1d%d - %d", roll, answer)
}
@ -139,13 +142,13 @@ type ParseIntError struct {
func (e PositiveError) Error() string { return "i don't do negative numbers lol" }
func (e ParseIntError) Error() string { return fmt.Sprintf("wat kinda number is %s", e.original) }
func (g *WatGame) Int(str string) (int64, error) {
i, e := strconv.ParseInt(str, 10, 64)
func (g *WatGame) Int(str string) (uint64, error) {
i, e := strconv.ParseUint(str, 10, 64)
if i < 0 {
return 0, PositiveError{}
}
if e != nil {
e = ParseIntError{}
e = ParseIntError{str}
}
return i, e
}
@ -191,16 +194,16 @@ func (g *WatGame) Punch(player *Player, fields []string) string {
dmg := g.RandInt(6) + 1
ret := fmt.Sprintf("%s rolls a d6... %s ", player.Nick, player.Nick)
if chance > 3 {
dmg += player.Level(player.Anarchy)
dmg += uint64(player.Level(player.Anarchy))
ret += fmt.Sprintf("hits %s for %d points of damage! ", target.Nick, dmg)
target.Health -= dmg
target.Health -= int64(dmg)
g.db.Update(target)
if target.Health <= 0 {
ret += target.Nick + " has fallen unconscious."
}
} else {
ret += fmt.Sprintf("fumbles, and punches themselves in confusion! %d self-damage. ", dmg)
player.Health -= dmg
player.Health -= int64(dmg)
if player.Health <= 0 {
ret += player.Nick + " has fallen unconscious."
}
@ -253,7 +256,7 @@ func (g *WatGame) Steal(player *Player, fields []string) string {
return e.Error()
}
if player.Coins < amount*2 {
return "wat? you need double your theft or you'd go bankrupt if they steal back..."
return "wat? you need double what ur trying 2 steal or you'll go bankrupt..."
}
target, err := g.GetTarget(player.Nick, fields[1])
if target == nil {
@ -292,7 +295,7 @@ func (g *WatGame) GetTarget(player, target string) (*Player, string) {
}
func (g *WatGame) Leech(player *Player, fields []string) string {
divisor := int64(10)
divisor := uint64(10)
if len(fields) < 3 {
return fmt.Sprintf("leech <nick> <%s> - using your wealth, you steal the life force of another player", currency)
}
@ -312,8 +315,8 @@ func (g *WatGame) Leech(player *Player, fields []string) string {
hpDown := amount / divisor
player.Coins -= amount
if r < 5 {
target.Health -= hpDown
player.Health += hpDown
target.Health -= int64(hpDown)
player.Health += int64(hpDown)
player.Anarchy += 1
reply += fmt.Sprintf("The deal is done, you took %d HP from %s. They now have %d HP, you have %d.", hpDown, target.Nick, target.Health, player.Health)
g.db.Update(target, player)
@ -338,13 +341,14 @@ func (g *WatGame) Rest(player *Player, fields []string) string {
value := g.RandInt(10) + 1
ret = fmt.Sprintf("wat a nap - have back a random amount of hitpoints (this time it's %d)", value)
player.LastRested = time.Now().Unix()
player.Health += value
player.Health += int64(value)
g.db.Update(player)
}
return ret
}
func (g *WatGame) Bench(player *Player, fields []string) string {
return "meh"
weight := g.RandInt(370) + 50
reps := g.RandInt(10)
value := int64(0)
@ -393,29 +397,30 @@ func (g *WatGame) Send(player *Player, fields []string) string {
if err != nil {
return err.Error()
}
if int64(amount) > player.Coins {
if amount > player.Coins {
return "wat? you're too poor!"
}
target, str := g.GetTarget(player.Nick, fields[1])
if target == nil {
return str
}
player.Coins -= int64(amount)
target.Coins += int64(amount)
player.Coins -= amount
target.Coins += amount
g.db.Update(player, target)
return fmt.Sprintf("%s sent %s %d %s. %s has %d %s, %s has %d %s", player.Nick, target.Nick, amount, currency, player.Nick, player.Coins, currency, target.Nick, target.Coins, currency)
}
func (g *WatGame) Mine(player *Player, _ []string) string {
delta := time.Now().Unix() - player.LastMined
if delta < 600 {
delta := uint64(time.Now().Unix() - player.LastMined)
minDelta := uint64(600)
if delta < minDelta {
return fmt.Sprintf("wat? 2 soon. u earn more when u wait long (%d)", delta)
}
value := int64(0)
value := uint64(0)
if delta < 36000 {
value = delta / 600
value = delta / minDelta
} else if delta < 86400 {
value = 10
value = 25
} else if delta < 2592000 {
value = 50
} else {
@ -423,7 +428,7 @@ func (g *WatGame) Mine(player *Player, _ []string) string {
}
msg := ""
if player.LastMined == 0 {
msg = "with wat? you go to get a pickaxe"
msg = fmt.Sprintf("u forgot ur pickaxe but it's okay i'll give you one in %d", minDelta)
value = 0
} else {
player.Coins += value
@ -458,6 +463,14 @@ func (g *WatGame) Balance(player *Player, fields []string) string {
return fmt.Sprintf(balStr, balPlayer.Nick, currency, balPlayer.Coins, time.Now().Unix()-balPlayer.LastMined, balPlayer.CoinsLost)
}
func (g *WatGame) TopLost() string {
players := g.db.TopLost()
ret := ""
for _, p := range players {
ret += PrintTwo(p.Nick, p.CoinsLost)
}
return ret
}
func (g *WatGame) TopTen() string {
players := g.db.TopTen()
ret := ""
@ -467,7 +480,7 @@ func (g *WatGame) TopTen() string {
return ret
}
func PrintTwo(nick string, value int64) string {
func PrintTwo(nick string, value uint64) string {
return fmt.Sprintf("%s (%d) ", CleanNick(nick), value)
}