mirror of
https://github.com/Walter-Sparrow/lunar-tear.git
synced 2026-07-02 05:43:41 +03:00
114 lines
2.3 KiB
Go
114 lines
2.3 KiB
Go
package campaign
|
|
|
|
func (c *Catalog) PartsRateBonus(t PartsTarget, f Filter) RateBonus {
|
|
var out RateBonus
|
|
for _, r := range c.enhance {
|
|
if !r.isActive(f) {
|
|
continue
|
|
}
|
|
if !matchesParts(r.targets, t) {
|
|
continue
|
|
}
|
|
out = applyEnhanceEffect(out, r)
|
|
}
|
|
return out
|
|
}
|
|
|
|
func (c *Catalog) CostumeExpBonus(t CostumeTarget, f Filter) ExpBonus {
|
|
var sum int32
|
|
for _, r := range c.enhance {
|
|
if !r.isActive(f) || r.effectType != EnhanceEffectAdditionalPerm {
|
|
continue
|
|
}
|
|
if matchesCostume(r.targets, t) {
|
|
sum += r.effectValue
|
|
}
|
|
}
|
|
return ExpBonus{bonusPermil: sum}
|
|
}
|
|
|
|
func (c *Catalog) WeaponExpBonus(t WeaponTarget, f Filter) ExpBonus {
|
|
var sum int32
|
|
for _, r := range c.enhance {
|
|
if !r.isActive(f) || r.effectType != EnhanceEffectAdditionalPerm {
|
|
continue
|
|
}
|
|
if matchesWeapon(r.targets, t) {
|
|
sum += r.effectValue
|
|
}
|
|
}
|
|
return ExpBonus{bonusPermil: sum}
|
|
}
|
|
|
|
func applyEnhanceEffect(b RateBonus, r enhanceRow) RateBonus {
|
|
switch r.effectType {
|
|
case EnhanceEffectProbability:
|
|
b.override = r.effectValue
|
|
case EnhanceEffectAdditionalPerm:
|
|
b.bonusPermil += r.effectValue
|
|
}
|
|
return b
|
|
}
|
|
|
|
func matchesParts(targets []enhanceMatch, t PartsTarget) bool {
|
|
for _, m := range targets {
|
|
switch m.t {
|
|
case EnhanceTargetPartsAll:
|
|
return true
|
|
case EnhanceTargetPartsSeriesId:
|
|
if m.v == t.PartsGroupId {
|
|
return true
|
|
}
|
|
case EnhanceTargetPartsId:
|
|
if m.v == t.PartsId {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func matchesCostume(targets []enhanceMatch, t CostumeTarget) bool {
|
|
for _, m := range targets {
|
|
switch m.t {
|
|
case EnhanceTargetCostumeAll:
|
|
return true
|
|
case EnhanceTargetCostumeCharacterId:
|
|
if m.v == t.CharacterId {
|
|
return true
|
|
}
|
|
case EnhanceTargetCostumeSkillfulWeapon:
|
|
if m.v == t.SkillfulWeaponType {
|
|
return true
|
|
}
|
|
case EnhanceTargetCostumeId:
|
|
if m.v == t.CostumeId {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func matchesWeapon(targets []enhanceMatch, t WeaponTarget) bool {
|
|
for _, m := range targets {
|
|
switch m.t {
|
|
case EnhanceTargetWeaponAll:
|
|
return true
|
|
case EnhanceTargetWeaponTypeId:
|
|
if m.v == t.WeaponType {
|
|
return true
|
|
}
|
|
case EnhanceTargetWeaponAttributeTypeId:
|
|
if m.v == t.AttributeType {
|
|
return true
|
|
}
|
|
case EnhanceTargetWeaponId:
|
|
if m.v == t.WeaponId {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
return false
|
|
}
|