Example #1
0
class MonsterDataManager(DataManager):
    """Singleton class used to get and assign monster definitions and
    monster attributes"""

    DEFAULT_MONSTER_LOCATION = "location"
    DEFAULT_MONSTER_RATING = 0
    DEFAULT_MONSTER_STATS = {
        "attack" : 0,
        "speed" : 0,
        "defense" : 0,
        "health" : 0,
        "magic" : 0,
        "resist" : 0
    }

    def __init__(self):
        super().__init__("data/monster.p")
        self.attribute = DataManager("data/monster_attributes.p")

    def write(self):
        super().write()
        self.attribute.write()

    def get_attribute(self, name):
        for attr in range(self.attribute.get()):
            if attr.name == name:
                return attr
        return None

    def attributes(self):
        return self.attribute.get()

    def set_attributes(self, attributes):
        self.attribute.set(attribtes)

    def get_monster(self, name):
        """Convenience function. To get a monster"""
        return self.monsters()[name]

    def monsters(self):
        """Convenience function for returning dictionary of monster
        definitions"""
        return self.get()

    def new_monster(self, name):
        """Creates a new monster definition"""
        monster_def = {
            "location" : self.DEFAULT_MONSTER_LOCATION,
            "graphic" : {},
            "rating" : self.DEFAULT_MONSTER_RATING,
            "stats" : dict(self.DEFAULT_MONSTER_STATS),
            "abilities" : [],
            "attributes" : [],
            "drops" : []
        }
        self.monsters()[name] = monster_def

    def delete_monster(self, name):
        """Delete a monster with the given name."""
        del self.monsters()[name]

    def update_monster_name(self, name, new_name):
        monster = self.monsters()[name]
        del self.monsters()[name]
        self.monsters()[new_name] = monster

    def add_monster_drop(self, name, drop):
        self.monsters()[name]["drops"].append(drop)

    def remove_monster_drop(self, name, drop):
        self.monsters()[name]["drops"].remove(drop)

    def add_monster_move(self, name, move):
        self.monsters()[name]["abilities"].append(move)

    def remove_monster_move(self, name, move):
        self.monsters()[name]["abilities"].remove(move)

    def update_monster_stats(self, name, stype, value):
        self.monsters()[name]["stats"][stype] = value

    def update_monster_rating(self, name, rating):
        self.monsters()[name]["rating"] = rating

    def update_monster_location(self, name, location):
        self.monsters()[name]["location"] = location

    def add_monster_attribute(self, name, attribute):
        self.monsters()[name]["attributes"].append(attribute)

    def remove_monster_attribute(self, name, attribute):
        changed_attr = None
        for attr in self.monsters()[name]["attributes"]:
            if attr == attribute:
                changed_attr = attr
                break
        if changed_attr is not None:
            self.monsters()[name]["attributes"].remove(changed_attr)

    def update_monster_image(self, name, image_type, filename):
        self.monsters()[name]["graphic"][image_type] = filename
Example #2
0
class MonsterDataManager(DataManager):
    """Singleton class used to get and assign monster definitions and
    monster attributes"""

    DEFAULT_MONSTER_LOCATION = "location"
    DEFAULT_MONSTER_RATING = 0
    DEFAULT_MONSTER_STATS = {
        "attack": 0,
        "speed": 0,
        "defense": 0,
        "health": 0,
        "magic": 0,
        "resist": 0
    }

    def __init__(self):
        super().__init__("data/monster.p")
        self.attribute = DataManager("data/monster_attributes.p")

    def write(self):
        super().write()
        self.attribute.write()

    def get_attribute(self, name):
        for attr in range(self.attribute.get()):
            if attr.name == name:
                return attr
        return None

    def attributes(self):
        return self.attribute.get()

    def set_attributes(self, attributes):
        self.attribute.set(attribtes)

    def get_monster(self, name):
        """Convenience function. To get a monster"""
        return self.monsters()[name]

    def monsters(self):
        """Convenience function for returning dictionary of monster
        definitions"""
        return self.get()

    def new_monster(self, name):
        """Creates a new monster definition"""
        monster_def = {
            "location": self.DEFAULT_MONSTER_LOCATION,
            "graphic": {},
            "rating": self.DEFAULT_MONSTER_RATING,
            "stats": dict(self.DEFAULT_MONSTER_STATS),
            "abilities": [],
            "attributes": [],
            "drops": []
        }
        self.monsters()[name] = monster_def

    def delete_monster(self, name):
        """Delete a monster with the given name."""
        del self.monsters()[name]

    def update_monster_name(self, name, new_name):
        monster = self.monsters()[name]
        del self.monsters()[name]
        self.monsters()[new_name] = monster

    def add_monster_drop(self, name, drop):
        self.monsters()[name]["drops"].append(drop)

    def remove_monster_drop(self, name, drop):
        self.monsters()[name]["drops"].remove(drop)

    def add_monster_move(self, name, move):
        self.monsters()[name]["abilities"].append(move)

    def remove_monster_move(self, name, move):
        self.monsters()[name]["abilities"].remove(move)

    def update_monster_stats(self, name, stype, value):
        self.monsters()[name]["stats"][stype] = value

    def update_monster_rating(self, name, rating):
        self.monsters()[name]["rating"] = rating

    def update_monster_location(self, name, location):
        self.monsters()[name]["location"] = location

    def add_monster_attribute(self, name, attribute):
        self.monsters()[name]["attributes"].append(attribute)

    def remove_monster_attribute(self, name, attribute):
        changed_attr = None
        for attr in self.monsters()[name]["attributes"]:
            if attr == attribute:
                changed_attr = attr
                break
        if changed_attr is not None:
            self.monsters()[name]["attributes"].remove(changed_attr)

    def update_monster_image(self, name, image_type, filename):
        self.monsters()[name]["graphic"][image_type] = filename
Example #3
0
class ItemDataManager(object):
    """Wrapper class to handle item attributes and items"""

    DEFAULT_ITEM_TYPE = "sword"
    DEFAULT_ITEM_STATS = {
        "attack" : 0,
        "speed" : 0,
        "defense" : 0,
        "health" : 0,
        "magic" : 0,
        "resist" : 0,
        "action" : 0
    }

    def __init__(self):
        self.ITEMS = DataManager("data/item/items.p")
        self.BASE_ITEMS = DataManager("data/item/base_items.p")
        self.RARE_ATTRIBUTES = DataManager(
            "data/item/attributes/rare_attributes.p")
        self.LEGENDARY_ATTRIBUTES = DataManager(
            "data/item/attributes/legendary_attributes.p")
        self.UNIQUE_ATTRIBUTES = DataManager(
            "data/item/attributes/unique_attributes.p")

    def get_item(self, name):
        """Convenience function for getting an item by name"""
        if self.base_items().get(name):
            item = self.base_items()[name]
        else:
            item = self.items()[name]
        return item

    def is_base(self, name):
        """Returns if item is a base item or not"""
        if self.base_items().get(name):
            return True
        return False

    def set_rare_attributes(self, attributes):
        self.RARE_ATTRIBUTES.set(attribtes)

    def set_legendary_attributes(self, attributes):
        self.LEGENDARY_ATTRIBUTES.set(attribtes)

    def set_unique_attributes(self, attributes):
        self.UNIQUE_ATTRIBUTES.set(attribtes)

    def items(self):
        return self.ITEMS.get()

    def base_items(self):
        return self.BASE_ITEMS.get()

    def rare_attributes(self):
        return self.RARE_ATTRIBUTES.get()

    def legendary_attributes(self):
        return self.LEGENDARY_ATTRIBUTES.get()

    def unique_attributes(self):
        return self.UNIQUE_ATTRIBUTES.get()

    def new_item(self, name):
        """Create an empty item object"""
        item = Item(name, self.DEFAULT_ITEM_TYPE,
            dict(self.DEFAULT_ITEM_STATS))
        if self.is_base(name):
            self.base_items()[name] = item
        else:
            self.items()[name] = item

    def delete_item(self, name):
        """Delete attribute by name"""
        if self.is_base(name):
            del self.base_items()[name]
        else:
            del self.items()[name]

    def update_item_stat(self, name, stype, value):
        """Update the item stat"""
        if self.is_base(name):
            self.base_items()[name].stats[stype] = value
        else:
            self.items()[name].stats[stype] = value

    def update_item_type(self, name, itype):
        """Update the item type"""
        if self.is_base(name):
            self.base_items()[name].itype = itype
        else:
            self.items()[name].itype = itype

    def update_item_slot(self, name, slot):
        """Update the item slot"""
        if self.is_base(name):
            self.base_items()[name].slot = slot
        else:
            self.items()[name].slot = slot

    def update_item_name(self, name, new_name):
        """Update the item name"""
        if self.is_base(name):
            item = self.base_items()[name]
            del self.base_items()[name]
            item.name = new_name
            self.base_items()[new_name] = item
        else:
            item = self.items()[name]
            del self.items()[name]
            item.name = new_name
            self.items()[new_name] = item

    def set_item_base(self, name, base):
        """Update the item base"""
        if self.is_base(name) and not base:
            item = self.base_items()[name]
            del self.base_items()[name]
            self.items()[name] = item
        elif not self.is_base(name) and base:
            item = self.items()[name]
            del self.items()[name]
            self.base_items()[name] = item

    def add_item_attribute(self, name, attribute):
        self.get_item(name).attributes.append(attribute)

    def remove_item_attribute(self, name, index):
        del self.get_item(name).attributes[index]

    def new_item_attribute(self, attribute, rarity):
        """Insert a new attribute into the proper attributes dictionary"""
        if rarity == "rare":
            self.rare_attributes()[attribute.name] = attribute
        elif rarity == "legendary":
            self.legendary_attributes()[attribute.name] = attribute
        elif rarity == "unique":
            self.unique_attributes()[attribute.name] = attribute
        else:
            logging.warning("Attempted to make an item attribute: Invalid rarity")

    def delete_item_attribute(self, name, rarity):
        """Delete attribute by name and rarity"""
        if rarity == "rare":
            del self.rare_attributes()[name]
        elif rarity == "legendary":
            del self.legendary_attributes()[name]
        elif rarity == "unique":
            del self.unique_attributes()[name]
        else:
            logging.warning("Attempted to delete an item attribute: Invalid rarity")

    def write(self):
        self.ITEMS.write()
        self.BASE_ITEMS.write()
        self.RARE_ATTRIBUTES.write()
        self.LEGENDARY_ATTRIBUTES.write()
        self.UNIQUE_ATTRIBUTES.write()