コード例 #1
0
def create_character_from_json(abilities, all_items, character_dict):
    _abilities = {}
    for ability_dict in character_dict["abilities"]:
        ability = abilities[ability_dict]
        _abilities[ability.name] = ability
    _armor = character_dict["armor"]
    _weapon = character_dict["weapon"]
    _inventory = Inventory()
    _inventory.remove_all()
    char_inventory = character_dict["inventory"]
    for item in all_items:
        if _inventory.count_all_item() >= len(char_inventory) and type(
                _armor) == Armor and type(_weapon) == Weapon:
            break
        elif item.id == _armor:
            _armor = item
            continue
        elif item.id == _weapon:
            _weapon = item
            continue
        elif item.id in char_inventory:
            for _ in range(char_inventory.count(item.id)):
                _inventory.add(item, {})
            continue

    if _inventory.count_all_item() < len(char_inventory):
        raise Exception("lost some item")
    return Character(id=character_dict["id"],
                     name=character_dict["name"],
                     description=character_dict["description"],
                     max_health=character_dict["max_health"],
                     max_mana=character_dict["max_mana"],
                     mana_regen=character_dict["mana_regen"],
                     abilities=_abilities,
                     inventory=_inventory,
                     armor=_armor,
                     weapon=_weapon,
                     position=character_dict["position"],
                     coin=character_dict["coin"],
                     character_type=character_dict["character_type"])
コード例 #2
0
def character_gen(character_type="",
                  difficulty=0,
                  _name="",
                  abilities={},
                  _position=[0, 0],
                  armor=None,
                  weapon=None,
                  _inventory=None,
                  heal_abilities=[],
                  attack_abilities=[]):
    # TODO ADD Base_power_ratio list arg
    # TODO potion add to mob and boss
    # TODO use potion for mob and boss with log
    name = ""
    description = ""
    max_health = 100
    max_mana = 150
    rand_abilities = []
    _abilities = {}
    inventory = Inventory()
    inventory = inventory.remove_all()
    coin = 0
    if character_type.lower() == "mob":
        name, gender = character_names_gen(
            first_prefix=static_vars["lvl"],
            second_prefix=static_vars["outlaws"],
            second_suffix=static_vars["races"])
        description = character_description_gen(name, gender)
        max_health = math.floor((1 + random.random()) * 100)
        max_mana = math.floor((1 + random.random()) * 150)
        armor = common_armors[random.randint(0, len(common_armors) - 1)]
        weapon = common_weapons[random.randint(0, len(common_weapons) - 1)]
        name_parts = name.split(" ")
        if len(name_parts) > 3:
            lvl_index = static_vars["lvl"].index(name_parts[0])
            if lvl_index > 1:
                inventory.add(random.choice(common_potions), {})
        coin = random.randint(1, difficulty + 1) * 14
        rand_heal_abilities = random.choice(heal_abilities)
        _abilities[rand_heal_abilities] = abilities[rand_heal_abilities]
        rand_attack_abilities = random.choice(attack_abilities)
        _abilities[rand_attack_abilities] = abilities[rand_attack_abilities]
        for _ in range(random.randint(1, difficulty + 1)):
            inventory.add(
                common_miscs[random.randint(0,
                                            len(common_miscs) - 1)], {})
    elif character_type.lower() == "boss":
        name, gender = character_names_gen(first_prefix=static_vars["outlaws"],
                                           second_prefix=static_vars["races"],
                                           second_suffix=static_vars["races"])
        description = character_description_gen(name, gender)
        max_health = math.floor(((1 + random.random()) * 100) +
                                (100 * difficulty))
        max_mana = math.floor(((1 + random.random()) * 150) +
                              (100 * difficulty))
        armor = epic_armors[random.randint(0, len(epic_armors) - 1)]
        weapon = epic_weapons[random.randint(0, len(epic_weapons) - 1)]
        inventory.add(random.choice(common_potions), {})
        inventory.add(random.choice(epic_potions), {})
        coin = random.randint(difficulty, difficulty * 2) * 110
        rand_abilities = random.choices(list(abilities.keys()),
                                        k=random.randint(
                                            difficulty,
                                            len(abilities) - 1))
        rand_abilities.append(random.choice(heal_abilities))
        for key in rand_abilities:
            _abilities[key] = abilities[key]
        for _ in range(random.randint(difficulty, difficulty * 2)):
            inventory.add(
                common_miscs[random.randint(0,
                                            len(common_miscs) - 1)], {})
            inventory.add(
                common_miscs[random.randint(0,
                                            len(common_miscs) - 1)], {})
    elif character_type.lower() == "player":
        name = _name
        description = static_vars["player_desc"]
        max_health = math.floor((1 + random.random()) * 100)
        max_mana = math.floor((1 + random.random()) * 150)
        _abilities = abilities
        if _inventory:
            inventory = _inventory
        coin = 50
    return Character(name=name,
                     description=description,
                     max_health=max_health,
                     max_mana=max_mana,
                     abilities=_abilities,
                     inventory=inventory,
                     armor=armor,
                     weapon=weapon,
                     position=_position,
                     coin=coin,
                     character_type=character_type)