示例#1
0
    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
示例#2
0
    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))
示例#3
0
    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))
示例#4
0
文件: builder.py 项目: cn591/muddery
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
示例#5
0
    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))
示例#6
0
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
示例#7
0
    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))
示例#8
0
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
示例#9
0
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
示例#10
0
    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,
                                       })
示例#11
0
    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,
                    })