README
This commit is contained in:
parent
027074a13e
commit
d908e2bc3f
152
README.md
Normal file
152
README.md
Normal file
@ -0,0 +1,152 @@
|
||||
# DegenzGame
|
||||
|
||||
A multiplayer Discord gaming platform built with F# and the Giraffe web framework, featuring interactive games with player progression and an in-game economy.
|
||||
|
||||
## Architecture
|
||||
|
||||
### Core Technologies
|
||||
|
||||
- **F# (.NET 6.0)**: Primary programming language for all game logic and bot functionality
|
||||
- **Giraffe**: F# web framework used for the Currency API microservice
|
||||
- **DSharpPlus**: Discord API library for bot interactions and slash commands
|
||||
- **PostgreSQL**: Database with Npgsql.FSharp for type-safe operations
|
||||
- **Docker**: Containerized deployment
|
||||
|
||||
### Project Structure
|
||||
|
||||
The solution consists of two main projects:
|
||||
|
||||
- **Bot** (`Bot.fsproj`): Main Discord bot application containing all game implementations
|
||||
- **CurrencyAPI** (`CurrencyAPI.fsproj`): HTTP API microservice for currency balance management
|
||||
|
||||
## Game System
|
||||
|
||||
### Available Games
|
||||
|
||||
#### HackerBattle
|
||||
Cyberpunk-themed combat game where players:
|
||||
- Use hack items (VIRUS, REMOTE, WORM) to attack other players and steal GBT currency
|
||||
- Deploy shields (FIREWALL, ENCRYPTION, CYPHER) for defense
|
||||
- Items have cooldown periods and class-based effectiveness
|
||||
- Combat resolution based on item power vs resistance stats
|
||||
- Includes comprehensive validation (can't attack yourself, cooldown checks, etc.)
|
||||
|
||||
#### SlotMachine
|
||||
Casino-style slot machine featuring:
|
||||
- Custom symbols: BigBrother, Eye, Obey, AnonMask, Rat, Ramen, Sushi, Pizza
|
||||
- Configurable reel probabilities per symbol
|
||||
- Prize table with money rewards and jackpot system
|
||||
- Integration with GBT currency system
|
||||
|
||||
#### Thief Game
|
||||
Player-vs-player stealing mechanics:
|
||||
- 1-minute cooldown for thieves, 1-hour recovery for victims
|
||||
- Success chance calculation based on player stats
|
||||
- Payout formula: `defenderBank * 0.1 * (1.0 - chance)` with random bonus
|
||||
- Two outcomes: Success (steal GBT) or WentToPrison (imprisoned status)
|
||||
|
||||
#### Rock Paper Scissors
|
||||
Classic game with Discord UI integration and animated GIF results
|
||||
|
||||
#### Store System
|
||||
In-game marketplace with:
|
||||
- Fixed-price item purchasing with GBT currency
|
||||
- Stock management (limited/unlimited items)
|
||||
- Role-based access control and invite requirements
|
||||
- Timed sales with Unix timestamp endpoints
|
||||
- Stack limits for certain items
|
||||
|
||||
#### Trainer System
|
||||
Tutorial/onboarding system:
|
||||
- Grants "Trainee" role to new players
|
||||
- Multi-step tutorial teaching shield and hack mechanics
|
||||
- Provides starting items (REMOTE hack, FIREWALL shield)
|
||||
- Simulated combat against "Sensei" bot
|
||||
|
||||
### Player Progression
|
||||
|
||||
#### Stats System (`GameTypes.fs:41-55`)
|
||||
Four core attributes with time-based decay:
|
||||
- **Strength**: Combat effectiveness
|
||||
- **Focus**: Precision and accuracy
|
||||
- **Charisma**: Social interactions
|
||||
- **Luck**: Random event outcomes
|
||||
|
||||
Each stat features:
|
||||
- Base range 0-100 with item-based modifications
|
||||
- Decay rate of 2.09 (100 to 0 in ~48 hours)
|
||||
- Item effects: Min/Max bounds, Add bonuses, RateMultiplier
|
||||
|
||||
## Discord Integration
|
||||
|
||||
### Multi-Bot Architecture (`Bot.fs:53-59`)
|
||||
The system uses multiple specialized Discord bot clients:
|
||||
- **hackerBattleBot**: HackerBattle game interactions
|
||||
- **storeBot**: Store transactions and interactions
|
||||
- **inviterBot**: Member recruitment and invite tracking
|
||||
- **slotsBot**: Slot machine operations
|
||||
- **adminBot**: Administrative functions
|
||||
|
||||
### Event Handling
|
||||
- Component interactions (buttons, dropdowns)
|
||||
- Slash command registration per guild
|
||||
- Message creation events
|
||||
- Guild member join/update tracking
|
||||
- Real-time game state management
|
||||
|
||||
## Database Design
|
||||
|
||||
### PostgreSQL Integration (`DbService.fs`)
|
||||
Type-safe database operations using Npgsql.FSharp:
|
||||
|
||||
- **User table**: Discord IDs, display names, GBT balances, wallet addresses
|
||||
- **Item system**: Database-driven item definitions with custom composite types
|
||||
- **Event tracking**: Player actions, cooldowns, game history with proper typing
|
||||
- **Custom types**: `StatMod` composite type for database item modifiers
|
||||
|
||||
## Currency API (Giraffe)
|
||||
|
||||
### Endpoints (`Currency.fs`)
|
||||
- **GET `/user/{id}/balance`**: Retrieve player's GBT balance
|
||||
- **PATCH `/user/{id}/balance/withdraw`**: Deduct GBT (with insufficient funds validation)
|
||||
- **PATCH `/user/{id}/balance/deposit`**: Add GBT to player account
|
||||
- **API Key Authentication**: `X-API-Key` header validation
|
||||
- **Error Handling**: Comprehensive error responses and logging
|
||||
|
||||
## Player Economy
|
||||
|
||||
The game features a balanced virtual economy:
|
||||
- **GBT Currency**: Primary medium of exchange earned through gameplay
|
||||
- **Fixed Pricing**: Items have set buy/sell prices (no dynamic market)
|
||||
- **Cooldown Systems**: Rate limiting prevents exploitation
|
||||
- **Risk/Reward Balance**: Thief game risk vs potential reward
|
||||
- **Player Progression**: Long-term engagement through stat decay requiring active play
|
||||
|
||||
## Development Setup
|
||||
|
||||
### Prerequisites
|
||||
- .NET 6.0 SDK
|
||||
- PostgreSQL database
|
||||
- Discord application with multiple bot tokens
|
||||
- Paket for F# package management
|
||||
|
||||
### Configuration
|
||||
Environment variables required:
|
||||
- `DATABASE_URL`: PostgreSQL connection string
|
||||
- `API_KEY`: Currency API authentication key
|
||||
- Multiple Discord bot tokens for specialized bots
|
||||
|
||||
### Running the Application
|
||||
```bash
|
||||
# Restore packages
|
||||
dotnet paket restore
|
||||
|
||||
# Build the solution
|
||||
dotnet build
|
||||
|
||||
# Run the Discord bot
|
||||
dotnet run --project Bot
|
||||
|
||||
# Run the Currency API
|
||||
dotnet run --project CurrencyAPI
|
||||
```
|
Loading…
x
Reference in New Issue
Block a user