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"])
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)