Files
Ilya Groshev 72b2bd1ec5
Build and Push Docker images to Docker Hub / build-and-push (push) Has been cancelled
Fix enhance campaign bonus scale and int32 overflow
2026-05-27 10:36:09 +03:00

58 lines
964 B
Go

package campaign
type RateBonus struct {
override int32
bonusPermil int32
}
func (b RateBonus) Apply(basePermil int32) int32 {
base := basePermil
if b.override > 0 {
base = b.override
}
return clampPermil(int32(int64(base) + int64(b.bonusPermil)))
}
type ExpBonus struct {
bonusPermil int32
}
func (b ExpBonus) Apply(base int32) int32 {
return int32(int64(base) * int64(1000+b.bonusPermil) / 1000)
}
type StaminaMul struct {
permil int32
}
func (m StaminaMul) Apply(base int32) int32 {
if m.permil == 1000 {
return base
}
return int32(int64(base) * int64(m.permil) / 1000)
}
type DropRateMul struct {
bonusPermil int32
}
func (m DropRateMul) Apply(base int32) int32 {
return int32((int64(base)*int64(1000+m.bonusPermil) + 999) / 1000)
}
type BonusDrop struct {
PossessionType int32
PossessionId int32
Count int32
}
func clampPermil(v int32) int32 {
if v < 0 {
return 0
}
if v > 1000 {
return 1000
}
return v
}