diff --git a/cmd/itemwatcher/internal/watcher.go b/cmd/itemwatcher/internal/watcher.go index 2f03796..5a073e8 100644 --- a/cmd/itemwatcher/internal/watcher.go +++ b/cmd/itemwatcher/internal/watcher.go @@ -55,12 +55,12 @@ func (w *Watcher) Start(ctx context.Context) error { d := w.gr.GetData() for _, i := range d.Items.ByLocation(item.LocationGround) { for _, r := range w.rules { - match, err := r.Evaluate(i) + res, err := r.Evaluate(i) if err != nil { log.Printf("error evaluating rule: %v", err) continue } - if !match { + if res == nip.RuleResultNoMatch { continue } } diff --git a/pkg/nip/ignored_properties.go b/pkg/nip/ignored_properties.go index cddd5e3..32a9018 100644 --- a/pkg/nip/ignored_properties.go +++ b/pkg/nip/ignored_properties.go @@ -3,10 +3,7 @@ package nip // These stats are currently NOT supported, rules can not contain them otherwise it will return an error var notSupportedStats = []string{ "plusmindamage", - "mindamage", "plusmaxdamage", - "maxdamage", - "enhanceddamage", "itemarmorpercent", "itemmindamagepercent", "itemslashdamage", @@ -19,3 +16,10 @@ var notSupportedStats = []string{ "secondarymaxdamage", "damagepercent", } + +// These stats are partially supported, rules can contain them but the ones matching the item type in this list will be blocked +var blockedStatsForItemType = map[string][]string{ + "mindamage": {"axe", "wand", "club", "scepter", "mace", "hammer", "sword", "knife", "thrownweapon", "throwingaxe", "javelin", "spear", "polearm", "staff", "bow", "crossbow", "assassinclaw", "orb", "amazonbow", "amazonspear", "amazonjavelin"}, + "maxdamage": {"axe", "wand", "club", "scepter", "mace", "hammer", "sword", "knife", "thrownweapon", "throwingaxe", "javelin", "spear", "polearm", "staff", "bow", "crossbow", "assassinclaw", "orb", "amazonbow", "amazonspear", "amazonjavelin"}, + "enhanceddamage": {"axe", "wand", "club", "scepter", "mace", "hammer", "sword", "knife", "thrownweapon", "throwingaxe", "javelin", "spear", "polearm", "staff", "bow", "crossbow", "assassinclaw", "orb", "amazonbow", "amazonspear", "amazonjavelin"}, +} diff --git a/pkg/nip/rule.go b/pkg/nip/rule.go index 131b42a..dc9b58e 100644 --- a/pkg/nip/rule.go +++ b/pkg/nip/rule.go @@ -156,6 +156,12 @@ func (r Rule) Evaluate(it data.Item) (RuleResult, error) { continue } + if itemTypes, found := blockedStatsForItemType[statName[0]]; found { + if slices.Contains(itemTypes, it.TypeAsString()) { + return RuleResultNoMatch, fmt.Errorf("property %s is not supported for item type %s", statName[0], it.TypeAsString()) + } + } + layer := 0 if len(statData) > 1 { layer = statData[1]