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/pokedexer/getters.go

105 lines
2.7 KiB
Go
Raw Normal View History

// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package pokedexer
import (
"source.wtfteam.pro/i2_bot/i2_bot/lib/dbmapping"
"sort"
2018-02-07 14:37:50 +04:00
"strconv"
"strings"
)
func (p *Pokedexer) getAdvicePokememes(playerID int, adviceType string) ([]*dbmapping.PokememeFull, bool) {
c.Log.Debug("Getting advice for pokememes...")
pokememesArray := make([]*dbmapping.PokememeFull, 0)
playerRaw, err := c.DataCache.GetPlayerByID(playerID)
2017-10-18 07:03:34 +04:00
if err != nil {
c.Log.Error(err.Error())
return pokememesArray, false
2017-10-18 07:03:34 +04:00
}
profileRaw, err := c.DataCache.GetProfileByPlayerID(playerRaw.ID)
2017-10-18 07:03:34 +04:00
if err != nil {
c.Log.Error(err.Error())
return pokememesArray, false
2017-10-18 07:03:34 +04:00
}
if playerRaw.LeagueID == 0 {
return pokememesArray, false
2017-10-18 07:03:34 +04:00
}
weapon, err := c.DataCache.GetWeaponTypeByID(profileRaw.WeaponID)
if err != nil {
c.Log.Debug(err.Error())
}
summPower := profileRaw.Power
if weapon != nil {
summPower = summPower + weapon.Power
}
allPokememes := c.DataCache.GetAllPokememes()
for i := range allPokememes {
neededGrade := 0
if profileRaw.LevelID < 9 {
neededGrade = profileRaw.LevelID + 1
} else {
neededGrade = 9
}
if allPokememes[i].Pokememe.Grade == neededGrade {
matchLeague := false
if profileRaw.LevelID < 4 {
matchLeague = true
} else if adviceType == "best_nofilter" || adviceType == "advice_all" {
matchLeague = true
} else {
for j := range allPokememes[i].Elements {
if allPokememes[i].Elements[j].LeagueID == playerRaw.LeagueID {
matchLeague = true
}
}
}
if matchLeague {
switch adviceType {
case "best", "advice":
if (allPokememes[i].Pokememe.Defence < summPower) || allPokememes[i].Pokememe.Purchaseable {
pokememesArray = append(pokememesArray, allPokememes[i])
}
default:
pokememesArray = append(pokememesArray, allPokememes[i])
}
}
}
}
c.Log.Debug(strconv.Itoa(len(pokememesArray)) + " pokememes passed initial /best filtration.")
// As we have already filtered this array, we need to sort it and pass to view
sort.Slice(pokememesArray, func(i, j int) bool {
if strings.HasPrefix(adviceType, "best") {
return pokememesArray[i].Pokememe.Attack > pokememesArray[j].Pokememe.Attack
}
return pokememesArray[i].Pokememe.Price > pokememesArray[j].Pokememe.Price
})
switch adviceType {
case "best", "advice", "best_nofilter":
if len(pokememesArray) > 5 {
idx := 0
pokememesArrayShorted := make([]*dbmapping.PokememeFull, 0)
for i := range pokememesArray {
if idx < 5 {
pokememesArrayShorted = append(pokememesArrayShorted, pokememesArray[i])
}
idx++
}
pokememesArray = pokememesArrayShorted
}
}
return pokememesArray, true
}