Archived
1
This repository has been archived on 2022-11-04. You can view files and clone it, but cannot push or open issues or pull requests.
i2_bot/lib/statistics/possibilities.go

77 lines
1.7 KiB
Go
Raw Normal View History

2017-10-13 00:31:12 +04:00
// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package statistics
2017-10-13 00:31:12 +04:00
// PossibilityRequiredPokeballs returns possibility of catching pokememe
// It's based on location, grade of pokememe and current level of player
func (s *Statistics) PossibilityRequiredPokeballs(location int, grade int, lvl int) (float64, int) {
var basePossibility float64
var requiredPokeballs int
var percentile float64
2017-10-13 00:31:12 +04:00
2017-10-18 07:03:34 +04:00
if lvl > 3 {
switch {
case grade == (lvl + 1):
basePossibility = 0.05
2017-10-18 07:03:34 +04:00
case grade == lvl:
basePossibility = 0.5
2017-10-18 07:03:34 +04:00
case grade == (lvl - 1):
basePossibility = 0.3
2017-10-18 07:03:34 +04:00
case grade == (lvl - 2):
basePossibility = 0.1
2017-10-18 07:03:34 +04:00
case grade == (lvl - 3):
basePossibility = 0.05
2017-10-18 07:03:34 +04:00
default:
basePossibility = 0.00
2017-10-18 07:03:34 +04:00
}
} else if lvl == 3 {
switch grade {
case 4:
basePossibility = 0.05
2017-10-18 07:03:34 +04:00
case 3:
basePossibility = 0.5
2017-10-18 07:03:34 +04:00
case 2:
basePossibility = 0.3
2017-10-18 07:03:34 +04:00
case 1:
basePossibility = 0.15
2017-10-18 07:03:34 +04:00
default:
basePossibility = 0.00
2017-10-18 07:03:34 +04:00
}
} else if lvl == 2 {
switch grade {
case 3:
basePossibility = 0.05
2017-10-18 07:03:34 +04:00
case 2:
basePossibility = 0.70
2017-10-18 07:03:34 +04:00
case 1:
basePossibility = 0.25
2017-10-18 07:03:34 +04:00
default:
basePossibility = 0.00
2017-10-18 07:03:34 +04:00
}
} else if lvl == 1 {
switch grade {
case 2:
basePossibility = 0.80
2017-10-18 07:03:34 +04:00
case 1:
basePossibility = 0.20
2017-10-18 07:03:34 +04:00
default:
basePossibility = 0.00
2017-10-18 07:03:34 +04:00
}
}
2017-10-13 00:31:12 +04:00
var pokememesCount int
2017-10-13 00:31:12 +04:00
err := c.Db.Get(&pokememesCount, c.Db.Rebind("SELECT count(*) FROM pokememes p, pokememes_locations pl WHERE p.grade = ? AND pl.location_id = ? AND pl.pokememe_id = p.id;"), grade, location)
2017-10-18 07:03:34 +04:00
if err != nil {
2017-11-14 03:44:21 +04:00
c.Log.Error(err)
2017-10-18 07:03:34 +04:00
}
2017-10-13 00:31:12 +04:00
if basePossibility != 0 && pokememesCount != 0 {
percentile = basePossibility * 100.0 / float64(pokememesCount)
requiredPokeballs = int(100.0 / percentile)
2017-10-18 07:03:34 +04:00
}
2017-10-13 00:31:12 +04:00
return percentile, requiredPokeballs
2017-10-13 00:31:12 +04:00
}