def match_condition(self, quest_key): """ Check if the quest matches its condition. Args: quest_key: (string) quest's key Returns: (boolean) result """ # Get quest's record. model_names = OBJECT_KEY_HANDLER.get_models(quest_key) if not model_names: return False for model_name in model_names: model_quest = apps.get_model(settings.WORLD_DATA_APP, model_name) try: record = model_quest.objects.get(key=quest_key) return STATEMENT_HANDLER.match_condition( record.condition, self.owner, None) except ObjectDoesNotExist: continue except AttributeError: continue return True
def load_data_fields(self): """ Get object's data record from database. """ # Get model and key names. key = self.get_data_key() if not key: return models = OBJECT_KEY_HANDLER.get_models(key) for model in models: # Get db model model_obj = apps.get_model(settings.WORLD_DATA_APP, model) if not model_obj: logger.log_errmsg("%s can not open model %s" % (key, model)) continue # Get data record. try: data = model_obj.objects.get(key=key) except Exception, e: logger.log_errmsg("%s can not find key %s" % (key, key)) continue # Set data. for field in data._meta.fields: setattr(self.dfield, field.name, data.serializable_value(field.name))
def build_object(obj_key, caller=None): """ Build objects of a model. Args: obj_key: (string) The key of the object. caller: (command caller) If provide, running messages will send to the caller. """ # get typeclass model model_typeclass = apps.get_model(settings.WORLD_DATA_APP, settings.TYPECLASSES) # Get object's model name. record = None typeclass = None model_names = OBJECT_KEY_HANDLER.get_models(obj_key) for model_name in model_names: try: # Get record. model_obj = apps.get_model(settings.WORLD_DATA_APP, model_name) record_obj = model_obj.objects.get(key=obj_key) typeclass = model_typeclass.objects.get(key=record_obj.typeclass) record = record_obj break except Exception, e: continue
def load_data_fields(self, key): """ Get object's data record from database. Args: key: (String) object's data key. Returns: None """ # Get model and key names. if not key: key = self.get_data_key() if not key: return if key[:len(settings.REVERSE_EXIT_PREFIX )] == settings.REVERSE_EXIT_PREFIX: # Reverse exit loads data without key's prefix. key = key[len(settings.REVERSE_EXIT_PREFIX):] data_models = OBJECT_KEY_HANDLER.get_models(key) for data_model in data_models: # Get db model model_obj = apps.get_model(settings.WORLD_DATA_APP, data_model) if not model_obj: logger.log_errmsg("%s can not open model %s" % (key, data_model)) continue # Get data record. try: data = model_obj.objects.get(key=key) except Exception, e: logger.log_errmsg("%s can not find key %s" % (key, key)) continue # Set data. for field in data._meta.fields: setattr(self.dfield, field.name, data.serializable_value(field.name))
def build_object(obj_key, caller=None): """ Build objects of a model. Args: obj_key: (string) The key of the object. caller: (command caller) If provide, running messages will send to the caller. """ # Get object's model name. record = None model_names = OBJECT_KEY_HANDLER.get_models(obj_key) for model_name in model_names: try: # Get record. model_obj = apps.get_model(settings.WORLD_DATA_APP, model_name) record_obj = model_obj.objects.get(key=obj_key) if hasattr(record_obj, "typeclass"): if hasattr(record_obj.typeclass, "path"): record = record_obj break except Exception, e: continue
def load_data_fields(self, key): """ Get object's data record from database. Args: key: (String) object's data key. Returns: None """ # Get model and key names. if not key: key = self.get_data_key() if not key: return if key[:len(settings.REVERSE_EXIT_PREFIX)] == settings.REVERSE_EXIT_PREFIX: # Reverse exit loads data without key's prefix. key = key[len(settings.REVERSE_EXIT_PREFIX):] data_models = OBJECT_KEY_HANDLER.get_models(key) for data_model in data_models: # Get db model model_obj = apps.get_model(settings.WORLD_DATA_APP, data_model) if not model_obj: logger.log_errmsg("%s can not open model %s" % (key, data_model)) continue # Get data record. try: data = model_obj.objects.get(key=key) except Exception, e: logger.log_errmsg("%s can not find key %s" % (key, key)) continue # Set data. for field in data._meta.fields: setattr(self.dfield, field.name, data.serializable_value(field.name))
def get_object_record(obj_key): """ Query the object's record. Args: obj_key: (string) The key of the object. Returns: The object's data record. """ record = None model_names = OBJECT_KEY_HANDLER.get_models(obj_key) for model_name in model_names: try: # Get record. model_obj = apps.get_model(settings.WORLD_DATA_APP, model_name) record = model_obj.objects.get(key=obj_key) break except Exception, e: ostring = "Can not get record %s: %s." % (obj_key, e) print(ostring) print(traceback.print_exc()) continue
def return_objectives(self): """ Get the information of all objectives. Set desc to an objective can hide the details of the objective. """ objectives = [] for ordinal in self.objectives: desc = self.objectives[ordinal]["desc"] if desc: # If an objective has desc, use its desc. objectives.append({"desc": self.objectives[ordinal]["desc"]}) else: # Or make a desc by other data. obj_num = self.objectives[ordinal]["number"] accomplished = self.db.accomplished.get(ordinal, 0) if self.objectives[ordinal]["type"] == defines.OBJECTIVE_TALK: # talking target = _("Talk to") name = DIALOGUE_HANDLER.get_npc_name(self.objectives[ordinal]["object"]) objectives.append({"target": target, "object": name, "accomplished": accomplished, "total": obj_num, }) elif self.objectives[ordinal]["type"] == defines.OBJECTIVE_OBJECT: # getting target = _("Get") name = "" # Get the name of the objective object. object_key = self.objectives[ordinal]["object"] model_names = OBJECT_KEY_HANDLER.get_models(object_key) for model_name in model_names: model = apps.get_model(settings.WORLD_DATA_APP, model_name) # Get record. try: record = model.objects.get(key=object_key) name = record.name break except Exception, e: pass objectives.append({"target": target, "object": name, "accomplished": accomplished, "total": obj_num, }) elif self.objectives[ordinal]["type"] == defines.OBJECTIVE_KILL: # getting target = _("Kill") name = "" # Get the name of the objective character. object_key = self.objectives[ordinal]["object"] model_names = OBJECT_KEY_HANDLER.get_models(object_key) for model_name in model_names: model = apps.get_model(settings.WORLD_DATA_APP, model_name) # Get record. try: record = model.objects.get(key=object_key) name = record.name break except Exception, e: pass objectives.append({"target": target, "object": name, "accomplished": accomplished, "total": obj_num, })
def return_objectives(self): """ Get the information of all objectives. Set desc to an objective can hide the details of the objective. """ objectives = [] for ordinal in self.objectives: desc = self.objectives[ordinal]["desc"] if desc: # If an objective has desc, use its desc. objectives.append({"desc": self.objectives[ordinal]["desc"]}) else: # Or make a desc by other data. obj_num = self.objectives[ordinal]["number"] accomplished = self.db.accomplished.get(ordinal, 0) if self.objectives[ordinal]["type"] == defines.OBJECTIVE_TALK: # talking target = _("Talk to") name = DIALOGUE_HANDLER.get_npc_name( self.objectives[ordinal]["object"]) objectives.append({ "target": target, "object": name, "accomplished": accomplished, "total": obj_num, }) elif self.objectives[ordinal][ "type"] == defines.OBJECTIVE_OBJECT: # getting target = _("Get") name = "" # Get the name of the objective object. object_key = self.objectives[ordinal]["object"] model_names = OBJECT_KEY_HANDLER.get_models(object_key) for model_name in model_names: model = apps.get_model(settings.WORLD_DATA_APP, model_name) # Get record. try: record = model.objects.get(key=object_key) name = record.name break except Exception, e: pass objectives.append({ "target": target, "object": name, "accomplished": accomplished, "total": obj_num, }) elif self.objectives[ordinal][ "type"] == defines.OBJECTIVE_KILL: # getting target = _("Kill") name = "" # Get the name of the objective character. object_key = self.objectives[ordinal]["object"] model_names = OBJECT_KEY_HANDLER.get_models(object_key) for model_name in model_names: model = apps.get_model(settings.WORLD_DATA_APP, model_name) # Get record. try: record = model.objects.get(key=object_key) name = record.name break except Exception, e: pass objectives.append({ "target": target, "object": name, "accomplished": accomplished, "total": obj_num, })