From 989deafb925d133faece57732b36d1711cbb0cf5 Mon Sep 17 00:00:00 2001 From: InspectorCaracal <51038201+InspectorCaracal@users.noreply.github.com> Date: Mon, 2 Dec 2024 18:13:40 -0700 Subject: [PATCH 1/2] filter direct-match search by candidates --- evennia/objects/objects.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index a1917dc20..491748a14 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -549,11 +549,12 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): """ if isinstance(searchdata, str): + candidates = kwargs.get("candidates", []) match searchdata.lower(): case "me" | "self": - return True, self + return self in candidates, self case "here": - return True, self.location + return self.location in candidates, self.location return False, searchdata def get_search_candidates(self, searchdata, **kwargs): @@ -833,8 +834,14 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): # replace incoming searchdata string with a potentially modified version searchdata = self.get_search_query_replacement(searchdata, **input_kwargs) + # get candidates + candidates = self.get_search_candidates(searchdata, **input_kwargs) + # handle special input strings, like "me" or "here". - should_return, searchdata = self.get_search_direct_match(searchdata, **input_kwargs) + # we also want to include the identified candidates here instead of input, to account for defaults + should_return, searchdata = self.get_search_direct_match( + searchdata, **(input_kwargs | {"candidates": candidates}) + ) if should_return: # we got an actual result, return it immediately return [searchdata] if quiet else searchdata @@ -854,9 +861,6 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): # always use exact match for dbref/global searches exact = True if global_search or dbref(searchdata) else exact - # get candidates - candidates = self.get_search_candidates(searchdata, **input_kwargs) - # do the actual search results = self.get_search_result( searchdata, From f2083ae9f91707423027dc8e0619136f92915888 Mon Sep 17 00:00:00 2001 From: InspectorCaracal <51038201+InspectorCaracal@users.noreply.github.com> Date: Mon, 2 Dec 2024 18:41:10 -0700 Subject: [PATCH 2/2] account for global searches --- evennia/objects/objects.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index 491748a14..e05db4463 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -549,12 +549,13 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): """ if isinstance(searchdata, str): - candidates = kwargs.get("candidates", []) + candidates = kwargs.get("candidates") or [] + global_search = kwargs.get("global_search", False) match searchdata.lower(): case "me" | "self": - return self in candidates, self + return global_search or self in candidates, self case "here": - return self.location in candidates, self.location + return global_search or self.location in candidates, self.location return False, searchdata def get_search_candidates(self, searchdata, **kwargs):