Skip to content

Commit

Permalink
Merge pull request #9 from Coffee-fueled-deadlines/Development
Browse files Browse the repository at this point in the history
Development
  • Loading branch information
Coffee-fueled-deadlines committed Sep 3, 2024
2 parents 378e1a5 + 3eca557 commit dfd97ff
Show file tree
Hide file tree
Showing 4 changed files with 177 additions and 148 deletions.
9 changes: 9 additions & 0 deletions PyDnD/Inventory.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
39 changes: 6 additions & 33 deletions PyDnD/Player.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
182 changes: 149 additions & 33 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,38 +6,103 @@ 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

```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")
```
***

Expand All @@ -47,22 +112,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
Expand Down Expand Up @@ -118,5 +184,55 @@ 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
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]}" )
```
Loading

0 comments on commit dfd97ff

Please sign in to comment.