package main import ( "flag" "fmt" "math" ) func main() { var ( gearAtk = flag.Int("gearAtk", 10, "gear attack rate") maxLvl = flag.Int("maxLvl", 50, "max hero level") startAtk = flag.Int("startAtk", 10, "max hero level") ) flag.Parse() effectiveStrength := 1 baseAtk := *startAtk for i := 1; i <= *maxLvl; i++ { if i%2 == 0 { effectiveStrength++ } if i%3 == 0 { baseAtk++ } //multb := 1 - float64(effectiveStrength*(1 - i/(i+1)))/(float64(effectiveStrength+100)) //mult1 := 1 + (1 - 0.15*math.Pow(float64(effectiveStrength), 0.1)) mult2 := 1 + math.Exp(-0.05*float64(effectiveStrength-1)) mult1 := 1.1 - 0.002*math.Log(float64(effectiveStrength)) effectiveAtk1 := int(math.Round(float64(baseAtk + *gearAtk) * mult1)) effectiveAtk2 := int(math.Round(float64(baseAtk + *gearAtk) * mult2)) fmt.Println(fmt.Sprintf("Atk1 %d Atk2 %d base %d gear %d Lvl %d Str %d Mult %.3f, %.3f", effectiveAtk1, effectiveAtk2, baseAtk, *gearAtk, i, effectiveStrength, mult1, mult2)) } }