From 8c57417773be4ad87a456a5ba44dddf3b3ab7051 Mon Sep 17 00:00:00 2001 From: CFDeadlines <47742787+Coffee-fueled-deadlines@users.noreply.github.com> Date: Mon, 2 Sep 2024 22:49:12 -0400 Subject: [PATCH 1/2] Fixed bugs Undeprecated things, added features, fixed readme --- PyDnD/Inventory.py | 9 +++ PyDnD/Player.py | 39 ++---------- README.md | 156 +++++++++++++++++++++++++++++++++++---------- example.py | 95 ++++----------------------- 4 files changed, 151 insertions(+), 148 deletions(-) diff --git a/PyDnD/Inventory.py b/PyDnD/Inventory.py index 5f867d9..8627d4b 100644 --- a/PyDnD/Inventory.py +++ b/PyDnD/Inventory.py @@ -88,6 +88,15 @@ def remove_item(self, item, quantity=1): for _ in range(quantity): self.items.remove(item) + def get_inventory_max_size(self): + """ + Returns the maximum size of the inventory + + Returns: + int: The maximum size of the inventory + """ + return self.max_size + def get_inventory_size(self): """ Returns the number of items in the inventory. diff --git a/PyDnD/Player.py b/PyDnD/Player.py index d2366a8..0380e8f 100644 --- a/PyDnD/Player.py +++ b/PyDnD/Player.py @@ -444,58 +444,31 @@ def remove_item_from_inventory(self, item, quantity=1): def get_inventory(self): return self.inventory.items + def get_inventory_max_size(self): + return self.inventory.get_inventory_max_size() - # Deprecated methods with warnings def giveExp(self, xp): - warnings.warn( - "Player.giveExp() is deprecated. Use LevelingSystem.giveExp() instead.", - DeprecationWarning, - stacklevel=2 - ) self.leveling_system.giveExp(xp) def removeExp(self, xp): - warnings.warn( - "Player.removeExp() is deprecated. Use LevelingSystem.removeExp() instead.", - DeprecationWarning, - stacklevel=2 - ) self.leveling_system.removeExp(xp) def LeveledUp(self): - warnings.warn( - "Player.LeveledUp() is deprecated. Use LevelingSystem.LeveledUp() instead.", - DeprecationWarning, - stacklevel=2 - ) + """This will be removed in version 1.1.0""" return self.leveling_system.LeveledUp() def LeveledDown(self): - warnings.warn( - "Player.LeveledDown() is deprecated. Use LevelingSystem.LeveledDown() instead.", - DeprecationWarning, - stacklevel=2 - ) + """This will be removed in version 1.1.0""" return self.leveling_system.LeveledDown() def levelUp(self): - warnings.warn( - "Player.levelUp() is deprecated. Use LevelingSystem.levelUp() instead.", - DeprecationWarning, - stacklevel=2 - ) + """This will be removed in version 1.1.0""" self.leveling_system.levelUp() def levelDown(self): - warnings.warn( - "Player.levelDown() is deprecated. Use LevelingSystem.levelDown() instead.", - DeprecationWarning, - stacklevel=2 - ) + """This will be removed in version 1.1.0""" self.leveling_system.levelDown() - - # Static Helper Methods @staticmethod def _validate_string(value, name): diff --git a/README.md b/README.md index 8af1483..101f1d1 100644 --- a/README.md +++ b/README.md @@ -12,32 +12,91 @@ Incomplete/In-Development ```python from PyDnD import Player -from PyDnD import Roll if __name__ == '__main__': - newPlayer = Player(name='Thor Odinson', - age='34', - gender='Male', - description='Looks like a pirate angel', - biography='Born on Asgard, God of Thunder') + newPlayer = Player(name='Thor Odinson', age='34', gender='Male', description='Looks like a pirate angel', biography='Born on Asgard, God of Thunder') # newPlayer is created, lets display some stats - print( "Name:", newPlayer.name) - print( "Age:", newPlayer.age) - print( "Gender:", newPlayer.gender) - print( "Description:", newPlayer.description) - print( "Biography:", newPlayer.biography) + print( "Name:" + newPlayer.name ) + print( "Age: " +newPlayer.age) + print( "Gender:" + newPlayer.gender ) + print( "Description: " + newPlayer.description ) + print( "Biography: " + newPlayer.biography ) + print( "\n" ) - print( "Level:", newPlayer.level) # Level isn't specified in creation, so level is 1 - print( "Current Experience:", newPlayer.experience) # Level wasn't specified, so current xp is 0 - print( "EXP to next Level:", newPlayer.nextLvlExperience) # 1000 Experience is required to get to level 2 + print( "\tLevel: " + str( newPlayer.level ) ) # Level isn't specified in creation, so level is 1 + print( "\tCurrent Experience: " + str( newPlayer.experience ) ) # Level wasn't specified, so current xp is 0 + print( "\tEXP to next Level: " + str( newPlayer.nextLvlExperience ) ) # 1000 Experience is required to get to level 2 + print( "\n\t--Stats--\n") + print( "\t\tStrength is: " + str( newPlayer.strength )) + print( "\t\tDexterity is: " + str( newPlayer.dexterity )) + print( "\t\tConsitution is: " + str( newPlayer.constitution )) + print( "\t\tWisdom is: " + str( newPlayer.wisdom )) + print( "\t\tIntelligence is: " + str( newPlayer.intelligence )) + print( "\t\tCharisma is: " + str( newPlayer.charisma )) + print( "\n\t--Inventory--\n" ) + + # Lets give Thor his hammer + newPlayer.add_item_to_inventory("Mjolnir") + print( f"\t\tThor's inventory is: \n\t\t\t{newPlayer.get_inventory()}\n" ) + # Oh no he's not worthy + newPlayer.remove_item_from_inventory("Mjolnir") + print( f"\t\tThor's inventory is: \n\t\t\t{newPlayer.get_inventory()}\n" ) + print( "\n" ) + + print( "LEVEL UP") + + print("\n\n") # Lets see what Thor looks like as a level 2 newPlayer.giveExp(1000) - print( "New Level: ", newPlayer.level) # newPlayer.level is automatically increased when XP threshold increases - print( "Current Experience:", newPlayer.experience) # Current, experience after leveling up - print( "EXP to next Level:", newPlayer.nextLvlExperience) # 3000 Experience is required to get to level 3 + print( "\tNew Level: " + str( newPlayer.level ) ) # newPlayer.level is automatically increased when XP threshold increases + print( "\tCurrent Experience: " + str( newPlayer.experience ) ) # Current, experience after leveling up + print( "\tEXP to next Level: " + str( newPlayer.nextLvlExperience ) ) # 3000 Experience total is required to get to level 3 + print( "\n\t--Stats--\n") + print( "\t\tStrength is: " + str( newPlayer.strength )) + print( "\t\tDexterity is: " + str( newPlayer.dexterity )) + print( "\t\tConsitution is: " + str( newPlayer.constitution )) + print( "\t\tWisdom is: " + str( newPlayer.wisdom )) + print( "\t\tIntelligence is: " + str( newPlayer.intelligence )) + print( "\t\tCharisma is: " + str( newPlayer.charisma )) + print( "\n\t--Inventory--\n" ) + + # Lets give Thor back his hammer + newPlayer.add_item_to_inventory("Mjolnir") + print( f"\t\tThor's inventory is: \n\t\t\t{newPlayer.get_inventory()}\n" ) + + # Oh no he's not worthy again + newPlayer.remove_item_from_inventory("Mjolnir") + print( f"\t\tThor's inventory is: \n\t\t\t{newPlayer.get_inventory()}\n" ) + print("\n\n") + + print( "LEVEL DOWN") + + print("\n\n") + # Lets see what Thor looks like as a level 2 + newPlayer.removeExp(500) + print( "\tNew Level: " + str( newPlayer.level ) ) # newPlayer.level is automatically increased when XP threshold increases + print( "\tCurrent Experience: " + str( newPlayer.experience ) ) # Current, experience after leveling up + print( "\tEXP to next Level: " + str( newPlayer.nextLvlExperience ) ) # 3000 Experience total is required to get to level 3 + print( "\n\t--Stats--\n") + print( "\t\tStrength is: " + str( newPlayer.strength )) + print( "\t\tDexterity is: " + str( newPlayer.dexterity )) + print( "\t\tConsitution is: " + str( newPlayer.constitution )) + print( "\t\tWisdom is: " + str( newPlayer.wisdom )) + print( "\t\tIntelligence is: " + str( newPlayer.intelligence )) + print( "\t\tCharisma is: " + str( newPlayer.charisma )) + print( "\n\t--Inventory--\n" ) + + # Lets give Thor back his hammer + newPlayer.add_item_to_inventory("Mjolnir") + print( f"\t\tThor's inventory is: \n\t\t\t{newPlayer.get_inventory()}\n" ) + + # Oh no he's not worthy again + newPlayer.remove_item_from_inventory("Mjolnir") + print( f"\t\tThor's inventory is: \n\t\t\t{newPlayer.get_inventory()}\n" ) + print("\n\n") ``` *** @@ -47,22 +106,23 @@ if __name__ == '__main__': #### Player Object — Arguments ``` -name (str): Player character's name -age (str): Player character's age -gender (str): Player character's gender -alignment (str): Player character's two letter alignment -description (str): Physical description of Player character -biography (str): Backstory of Player character -level (int): Player character's starting level -wealth (int): Player character's starting wealth -strength (int): Player character's starting strength Ability Score -dexterity (int): Player character's starting dexterity Ability Score -constitution (int): Player character's starting constitution Ability Score -wisdom (int): Player character's starting wisdom Ability Score -intelligence (int): Player character's starting intelligence Ability Score -charisma (int): Player character's starting charisma Ability Score -hp (int): Player character's starting hitpoint value -mp (int): Player character's starting mp value (may convert to SPD) +name (str): Player character's name +age (str): Player character's age +gender (str): Player character's gender +alignment (str): Player character's two letter alignment +description (str): Physical description of Player character +biography (str): Backstory of Player character +level (int): Player character's starting level +wealth (int): Player character's starting wealth +strength (int): Player character's starting strength Ability Score +dexterity (int): Player character's starting dexterity Ability Score +constitution (int): Player character's starting constitution Ability Score +wisdom (int): Player character's starting wisdom Ability Score +intelligence (int): Player character's starting intelligence Ability Score +charisma (int): Player character's starting charisma Ability Score +hp (int): Player character's starting hitpoint value +mp (int): Player character's starting mp value (may convert to SPD) +inventory_size (int): Player character's inventory size ``` #### Examples @@ -118,5 +178,35 @@ print("Current Level:", newPlayer.level) print("Current Experience:", newPlayer.experience) print("Experience until Level Up:", newPlayer.nextLvlExperience) ``` +*** +## Inventory + The new inventory system is a tad bit more robust than the previous implementation, although it's still quite primitive and not necessarily related to inventory management in true SRD at all. Instead, I allow the creator to set an `inventory_size` argument in the `Player` object upon initialization. If it is not set, `inventory_size` will default to `10`. + +### Examples +```python +# Lets create our Character +theBagMan = Player(name="The Bagman", inventory_size=10) +print(f"Player Name: {theBagMan.name}") +print(f"Player Inventory Size: {theBagMan.get_inventory_max_size()}") + +# Our inventory comes nice and empty +print(f"Items in inventory: {theBagMan.get_inventory()}") + +# Lets give The Bagman some stuff +theBagMan.add_item_to_inventory("Health Potion") +print(f"Items in inventory: {theBagMan.get_inventory()}") # Our inventory now has a potion + +# Lets remove that potion +theBagMan.remove_item_from_inventory("Health Potion") +print(f"Items in inventory: {theBagMan.get_inventory()}") # Bye bye +``` +*** + +## Roll and Dice + + `Roll` and `Dice` are two new Modules in the PyDnD package. The `Roll` module makes use of the `Dice` module, meaning that generally you won't or shouldn't interact directly with the `Dice` module itself. Below are some examples of how to roll different types of dice. + +Examples +```python diff --git a/example.py b/example.py index ac6bec9..194d616 100644 --- a/example.py +++ b/example.py @@ -1,89 +1,20 @@ -from PyDnD import Player from PyDnD import Roll +# Lets roll a D20 +print( Roll.roll(num_dice=1, sides=20) ) +# Lets roll 2 D20 +print( Roll.roll(num_dice=2, sides=20) ) -if __name__ == '__main__': - - newPlayer = Player(name='Thor Odinson', age='34', gender='Male', description='Looks like a pirate angel', biography='Born on Asgard, God of Thunder') - - # newPlayer is created, lets display some stats - print( "Name:" + newPlayer.name ) - print( "Age: " +newPlayer.age) - print( "Gender:" + newPlayer.gender ) - print( "Description: " + newPlayer.description ) - print( "Biography: " + newPlayer.biography ) - print( "\n" ) - - print( "\tLevel: " + str( newPlayer.level ) ) # Level isn't specified in creation, so level is 1 - print( "\tCurrent Experience: " + str( newPlayer.experience ) ) # Level wasn't specified, so current xp is 0 - print( "\tEXP to next Level: " + str( newPlayer.nextLvlExperience ) ) # 1000 Experience is required to get to level 2 - print( "\n\t--Stats--\n") - print( "\t\tStrength is: " + str( newPlayer.strength )) - print( "\t\tDexterity is: " + str( newPlayer.dexterity )) - print( "\t\tConsitution is: " + str( newPlayer.constitution )) - print( "\t\tWisdom is: " + str( newPlayer.wisdom )) - print( "\t\tIntelligence is: " + str( newPlayer.intelligence )) - print( "\t\tCharisma is: " + str( newPlayer.charisma )) - print( "\n\t--Inventory--\n" ) +# Lets add a modifier +print( Roll.roll(num_dice=2, sides=20, modifier=4) ) - # Lets give Thor his hammer - newPlayer.add_item_to_inventory("Mjolnir") - print( f"\t\tThor's inventory is: \n\t\t\t{newPlayer.get_inventory()}\n" ) - - # Oh no he's not worthy - newPlayer.remove_item_from_inventory("Mjolnir") - print( f"\t\tThor's inventory is: \n\t\t\t{newPlayer.get_inventory()}\n" ) - print( "\n" ) +# Lets roll a Stat using 4d6 and drop the lowest one +strength_stat = Roll.roll(num_dice=4, sides=6, drop_lowest=1) +print( f"Strength Stat is: {strength_stat}" ) - print( "LEVEL UP") +# Now lets say that we want to see each of those rolls +# Lets tell the roller +strength_stat = Roll.roll(num_dice=4, sides=6, drop_lowest=1, return_rolls=True) +print( f"Strength Stat is: {strength_stat[0]} and the rolls where: {strength_stat[1]}" ) - print("\n\n") - # Lets see what Thor looks like as a level 2 - newPlayer.giveExp(1000) - print( "\tNew Level: " + str( newPlayer.level ) ) # newPlayer.level is automatically increased when XP threshold increases - print( "\tCurrent Experience: " + str( newPlayer.experience ) ) # Current, experience after leveling up - print( "\tEXP to next Level: " + str( newPlayer.nextLvlExperience ) ) # 3000 Experience total is required to get to level 3 - print( "\n\t--Stats--\n") - print( "\t\tStrength is: " + str( newPlayer.strength )) - print( "\t\tDexterity is: " + str( newPlayer.dexterity )) - print( "\t\tConsitution is: " + str( newPlayer.constitution )) - print( "\t\tWisdom is: " + str( newPlayer.wisdom )) - print( "\t\tIntelligence is: " + str( newPlayer.intelligence )) - print( "\t\tCharisma is: " + str( newPlayer.charisma )) - print( "\n\t--Inventory--\n" ) - - # Lets give Thor back his hammer - newPlayer.add_item_to_inventory("Mjolnir") - print( f"\t\tThor's inventory is: \n\t\t\t{newPlayer.get_inventory()}\n" ) - - # Oh no he's not worthy again - newPlayer.remove_item_from_inventory("Mjolnir") - print( f"\t\tThor's inventory is: \n\t\t\t{newPlayer.get_inventory()}\n" ) - print("\n\n") - - print( "LEVEL DOWN") - - print("\n\n") - # Lets see what Thor looks like as a level 2 - newPlayer.removeExp(500) - print( "\tNew Level: " + str( newPlayer.level ) ) # newPlayer.level is automatically increased when XP threshold increases - print( "\tCurrent Experience: " + str( newPlayer.experience ) ) # Current, experience after leveling up - print( "\tEXP to next Level: " + str( newPlayer.nextLvlExperience ) ) # 3000 Experience total is required to get to level 3 - print( "\n\t--Stats--\n") - print( "\t\tStrength is: " + str( newPlayer.strength )) - print( "\t\tDexterity is: " + str( newPlayer.dexterity )) - print( "\t\tConsitution is: " + str( newPlayer.constitution )) - print( "\t\tWisdom is: " + str( newPlayer.wisdom )) - print( "\t\tIntelligence is: " + str( newPlayer.intelligence )) - print( "\t\tCharisma is: " + str( newPlayer.charisma )) - print( "\n\t--Inventory--\n" ) - - # Lets give Thor back his hammer - newPlayer.add_item_to_inventory("Mjolnir") - print( f"\t\tThor's inventory is: \n\t\t\t{newPlayer.get_inventory()}\n" ) - - # Oh no he's not worthy again - newPlayer.remove_item_from_inventory("Mjolnir") - print( f"\t\tThor's inventory is: \n\t\t\t{newPlayer.get_inventory()}\n" ) - print("\n\n") \ No newline at end of file From 3eca55777513210290a909e7a06ccd7e5d57198d Mon Sep 17 00:00:00 2001 From: CFDeadlines <47742787+Coffee-fueled-deadlines@users.noreply.github.com> Date: Mon, 2 Sep 2024 22:49:58 -0400 Subject: [PATCH 2/2] Update README.md --- README.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/README.md b/README.md index 101f1d1..d78641f 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,12 @@ Python Dungeons and Dragons Library utilizing SRD **Status**: Incomplete/In-Development +**Last Update** +2024-09-02 + +**Version** +1.0.0 + **Note**: If you like and/or want to use this, a star or a follow would be appreciated. ## Example Invocation @@ -210,3 +216,23 @@ print(f"Items in inventory: {theBagMan.get_inventory()}") # Bye bye Examples ```python +from PyDnD import Roll + +# Lets roll a D20 +print( Roll.roll(num_dice=1, sides=20) ) + +# Lets roll 2 D20 +print( Roll.roll(num_dice=2, sides=20) ) + +# Lets add a modifier +print( Roll.roll(num_dice=2, sides=20, modifier=4) ) + +# Lets roll a Stat using 4d6 and drop the lowest one +strength_stat = Roll.roll(num_dice=4, sides=6, drop_lowest=1) +print( f"Strength Stat is: {strength_stat}" ) + +# Now lets say that we want to see each of those rolls +# Lets tell the roller +strength_stat = Roll.roll(num_dice=4, sides=6, drop_lowest=1, return_rolls=True) +print( f"Strength Stat is: {strength_stat[0]} and the rolls where: {strength_stat[1]}" ) +``` \ No newline at end of file