Sets up RPG system as a Redbot cog with core mechanics Implements character creation, class selection, and stat management Adds action commands for attacking and healing Provides inventory and shop functionality for item management Introduces interactive UI menus for user engagement
80 lines
3.4 KiB
Python
80 lines
3.4 KiB
Python
import discord
|
|
from redbot.core import commands, Config
|
|
|
|
class RPGInventory:
|
|
"""
|
|
Manages character inventories for the RPG system.
|
|
"""
|
|
|
|
def __init__(self, rpg_cog):
|
|
self.rpg_cog = rpg_cog
|
|
super().__init__()
|
|
|
|
@commands.group()
|
|
async def inventory(self, ctx):
|
|
"""Main RPG command group."""
|
|
pass
|
|
|
|
@inventory.command(name="add")
|
|
async def add_item(self, ctx, user: discord.Member, item_name, quantity=1):
|
|
"""
|
|
Adds an item to the user's active character's inventory.
|
|
"""
|
|
character_data = await self.rpg_cog.config.member(user).get_raw("active_character")
|
|
if not character_data:
|
|
return await self.rpg_cog.send_message(ctx, f"{user.mention}, you don't have an active character.")
|
|
|
|
inventory = character_data.get("inventory", {})
|
|
if item_name in inventory:
|
|
inventory[item_name] += quantity
|
|
else:
|
|
inventory[item_name] = quantity
|
|
|
|
await self.rpg_cog.config.member(user).set_raw("active_character", "inventory", value=inventory)
|
|
await self.rpg_cog.send_message(ctx, f"{quantity} {item_name}(s) added to your inventory!")
|
|
|
|
@inventory.command(name="remove")
|
|
async def remove_item(self, ctx, user: discord.Member, item_name, quantity=1):
|
|
"""
|
|
Removes an item from the user's active character's inventory.
|
|
"""
|
|
character_data = await self.rpg_cog.config.member(user).get_raw("active_character")
|
|
if not character_data:
|
|
return await self.rpg_cog.send_message(ctx, f"{user.mention}, you don't have an active character.")
|
|
|
|
inventory = character_data.get("inventory", {})
|
|
if item_name in inventory:
|
|
if inventory[item_name] >= quantity:
|
|
inventory[item_name] -= quantity
|
|
if inventory[item_name] == 0:
|
|
del inventory[item_name]
|
|
await self.rpg_cog.config.member(user).set_raw("active_character", "inventory", value=inventory)
|
|
await self.rpg_cog.send_message(ctx, f"{quantity} {item_name}(s) removed from your inventory!")
|
|
else:
|
|
await self.rpg_cog.send_message(ctx, f"You don't have enough {item_name}s.")
|
|
else:
|
|
await self.rpg_cog.send_message(ctx, f"You don't have any {item_name}s in your inventory.")
|
|
|
|
@inventory.command(name="bag")
|
|
async def get_inventory(self, user):
|
|
"""
|
|
Retrieves the inventory of the user's active character.
|
|
"""
|
|
character_data = await self.rpg_cog.config.member(user).get_raw("active_character")
|
|
if not character_data:
|
|
return None # Or handle the case where the user has no active character
|
|
return character_data.get("inventory", {})
|
|
|
|
@inventory.command(name="showbag")
|
|
async def display_inventory(self, ctx, user: discord.Member):
|
|
"""
|
|
Displays the user's inventory in a user-friendly format.
|
|
"""
|
|
inventory = await self.get_inventory(user)
|
|
if not inventory:
|
|
return await self.rpg_cog.send_message(ctx, f"{user.mention}, your inventory is empty!")
|
|
|
|
# Format the inventory for display (you can customize this)
|
|
inventory_str = "\n".join([f"{item}: {quantity}" for item, quantity in inventory.items()])
|
|
embed = discord.Embed(title=f"{user.name}'s Inventory", description=inventory_str)
|
|
await self.rpg_cog.send_message(ctx, embed=embed) |