🎮 Features implemented: - Pokemon-style pet collection and battles - Multi-location exploration system - Dynamic weather with background updates - Achievement system with location unlocks - Web dashboard for player stats - Modular command system - Async database with SQLite - PM flood prevention - Persistent player data 🌤️ Weather System: - 6 weather types with spawn modifiers - 30min-3hour dynamic durations - Background task for automatic updates - Location-specific weather patterns 🐛 Recent Bug Fixes: - Database persistence on restart - Player page SQLite row conversion - Achievement count calculations - Travel requirement messages - Battle move color coding - Locations page display 🔧 Generated with Claude Code 🤖 Co-Authored-By: Claude <noreply@anthropic.com>
525 lines
No EOL
22 KiB
HTML
525 lines
No EOL
22 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>PetBot IRC Commands Reference</title>
|
|
<style>
|
|
:root {
|
|
--bg-primary: #0f0f23;
|
|
--bg-secondary: #1e1e3f;
|
|
--bg-tertiary: #2a2a4a;
|
|
--text-primary: #cccccc;
|
|
--text-secondary: #999999;
|
|
--text-accent: #66ff66;
|
|
--border-color: #333366;
|
|
--hover-color: #3a3a5a;
|
|
--gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
--gradient-secondary: linear-gradient(135deg, #ff6b6b 0%, #feca57 100%);
|
|
--gradient-tertiary: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
|
|
--shadow-dark: 0 4px 20px rgba(0,0,0,0.3);
|
|
--shadow-glow: 0 0 20px rgba(102, 255, 102, 0.2);
|
|
}
|
|
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
font-family: 'Segoe UI', 'Roboto', 'Arial', sans-serif;
|
|
max-width: 1400px;
|
|
margin: 0 auto;
|
|
padding: 20px;
|
|
background: var(--bg-primary);
|
|
color: var(--text-primary);
|
|
line-height: 1.6;
|
|
background-image:
|
|
radial-gradient(circle at 20% 50%, rgba(120, 119, 198, 0.1) 0%, transparent 50%),
|
|
radial-gradient(circle at 80% 20%, rgba(255, 119, 198, 0.1) 0%, transparent 50%),
|
|
radial-gradient(circle at 40% 80%, rgba(120, 198, 119, 0.1) 0%, transparent 50%);
|
|
min-height: 100vh;
|
|
}
|
|
|
|
.header {
|
|
text-align: center;
|
|
background: var(--gradient-primary);
|
|
color: white;
|
|
padding: 40px;
|
|
border-radius: 20px;
|
|
margin-bottom: 40px;
|
|
box-shadow: var(--shadow-dark);
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.header::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.05'%3E%3Ccircle cx='30' cy='30' r='4'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
|
|
z-index: 0;
|
|
}
|
|
|
|
.header > * {
|
|
position: relative;
|
|
z-index: 1;
|
|
}
|
|
|
|
.header h1 {
|
|
margin: 0;
|
|
font-size: 3em;
|
|
font-weight: 700;
|
|
background: linear-gradient(45deg, #fff, #66ff66);
|
|
-webkit-background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
background-clip: text;
|
|
text-shadow: 0 2px 10px rgba(0,0,0,0.3);
|
|
}
|
|
|
|
.header p {
|
|
margin: 15px 0 0 0;
|
|
opacity: 0.9;
|
|
font-size: 1.3em;
|
|
font-weight: 300;
|
|
}
|
|
|
|
.section {
|
|
background: var(--bg-secondary);
|
|
margin-bottom: 30px;
|
|
border-radius: 15px;
|
|
overflow: hidden;
|
|
box-shadow: var(--shadow-dark);
|
|
border: 1px solid var(--border-color);
|
|
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
|
}
|
|
|
|
.section:hover {
|
|
transform: translateY(-5px);
|
|
box-shadow: var(--shadow-glow);
|
|
}
|
|
|
|
.section-header {
|
|
background: var(--gradient-tertiary);
|
|
color: white;
|
|
padding: 20px 25px;
|
|
font-size: 1.4em;
|
|
font-weight: 700;
|
|
text-shadow: 0 2px 4px rgba(0,0,0,0.3);
|
|
}
|
|
|
|
.command-grid {
|
|
padding: 25px;
|
|
display: grid;
|
|
gap: 20px;
|
|
}
|
|
|
|
.command {
|
|
border: 1px solid var(--border-color);
|
|
border-radius: 12px;
|
|
overflow: hidden;
|
|
transition: all 0.3s ease;
|
|
background: var(--bg-tertiary);
|
|
}
|
|
|
|
.command:hover {
|
|
transform: translateY(-3px);
|
|
box-shadow: 0 8px 25px rgba(102, 255, 102, 0.15);
|
|
border-color: var(--text-accent);
|
|
}
|
|
|
|
.command-name {
|
|
background: var(--bg-primary);
|
|
padding: 15px 20px;
|
|
font-family: 'Fira Code', 'Courier New', monospace;
|
|
font-weight: bold;
|
|
color: var(--text-accent);
|
|
border-bottom: 1px solid var(--border-color);
|
|
font-size: 1.2em;
|
|
text-shadow: 0 0 10px rgba(102, 255, 102, 0.3);
|
|
}
|
|
|
|
.command-desc {
|
|
padding: 20px;
|
|
line-height: 1.7;
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.command-example {
|
|
background: var(--bg-primary);
|
|
padding: 12px 20px;
|
|
font-family: 'Fira Code', 'Courier New', monospace;
|
|
color: var(--text-secondary);
|
|
border-top: 1px solid var(--border-color);
|
|
font-size: 0.95em;
|
|
}
|
|
|
|
.locations-list, .status-list {
|
|
background: var(--bg-tertiary);
|
|
padding: 20px;
|
|
border-radius: 12px;
|
|
margin: 20px 0;
|
|
border: 1px solid var(--border-color);
|
|
}
|
|
|
|
.locations-list h4, .status-list h4 {
|
|
margin: 0 0 15px 0;
|
|
color: var(--text-accent);
|
|
font-size: 1.1em;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.locations-list ul, .status-list ul {
|
|
margin: 0;
|
|
padding-left: 25px;
|
|
}
|
|
|
|
.locations-list li, .status-list li {
|
|
margin: 8px 0;
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.locations-list strong, .status-list strong {
|
|
color: var(--text-accent);
|
|
}
|
|
|
|
.footer {
|
|
text-align: center;
|
|
margin-top: 50px;
|
|
padding: 30px;
|
|
background: var(--bg-secondary);
|
|
border-radius: 15px;
|
|
color: var(--text-secondary);
|
|
box-shadow: var(--shadow-dark);
|
|
border: 1px solid var(--border-color);
|
|
}
|
|
|
|
.tip {
|
|
background: var(--bg-tertiary);
|
|
border: 1px solid var(--text-accent);
|
|
padding: 20px;
|
|
border-radius: 12px;
|
|
margin: 20px 0;
|
|
box-shadow: 0 0 15px rgba(102, 255, 102, 0.1);
|
|
}
|
|
|
|
.tip strong {
|
|
color: var(--text-accent);
|
|
}
|
|
|
|
table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
margin: 20px 0;
|
|
background: var(--bg-tertiary);
|
|
border-radius: 8px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
th, td {
|
|
padding: 15px;
|
|
text-align: left;
|
|
border-bottom: 1px solid var(--border-color);
|
|
}
|
|
|
|
th {
|
|
background: var(--bg-primary);
|
|
color: var(--text-accent);
|
|
font-weight: 600;
|
|
}
|
|
|
|
tr:hover {
|
|
background: var(--hover-color);
|
|
}
|
|
|
|
code {
|
|
background: var(--bg-primary);
|
|
color: var(--text-accent);
|
|
padding: 2px 6px;
|
|
border-radius: 4px;
|
|
font-family: 'Fira Code', 'Courier New', monospace;
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
.new-badge {
|
|
background: var(--gradient-secondary);
|
|
color: white;
|
|
font-size: 0.7em;
|
|
padding: 3px 8px;
|
|
border-radius: 12px;
|
|
margin-left: 10px;
|
|
font-weight: bold;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
|
|
}
|
|
|
|
.pm-indicator {
|
|
background: rgba(102, 255, 102, 0.2);
|
|
color: var(--text-accent);
|
|
font-size: 0.8em;
|
|
padding: 2px 8px;
|
|
border-radius: 8px;
|
|
margin-left: 10px;
|
|
border: 1px solid var(--text-accent);
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="header">
|
|
<h1>🐾 PetBot Command Reference</h1>
|
|
<p>Complete guide to IRC pet collection and battle commands</p>
|
|
<p><em>Connect to irc.libera.chat #petz to play!</em></p>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<div class="section-header">🎮 Getting Started</div>
|
|
<div class="command-grid">
|
|
<div class="command">
|
|
<div class="command-name">!start</div>
|
|
<div class="command-desc">Begin your pet journey! Creates your trainer account and gives you a starter pet in Starter Town.</div>
|
|
<div class="command-example">Example: !start</div>
|
|
</div>
|
|
<div class="command">
|
|
<div class="command-name">!help</div>
|
|
<div class="command-desc">Display a quick list of available commands in the IRC channel.</div>
|
|
<div class="command-example">Example: !help</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<div class="section-header">🔍 Exploration & Travel</div>
|
|
<div class="command-grid">
|
|
<div class="command">
|
|
<div class="command-name">!explore</div>
|
|
<div class="command-desc">Explore your current location to find wild pets. Weather affects what types of pets you'll encounter!</div>
|
|
<div class="command-example">Example: !explore</div>
|
|
</div>
|
|
<div class="command">
|
|
<div class="command-name">!location (or !where)</div>
|
|
<div class="command-desc">See where you currently are, including the location description.</div>
|
|
<div class="command-example">Example: !location</div>
|
|
</div>
|
|
<div class="command">
|
|
<div class="command-name">!travel <location></div>
|
|
<div class="command-desc">Travel to a different location. Some locations require achievements to unlock!</div>
|
|
<div class="command-example">Example: !travel Whispering Woods</div>
|
|
</div>
|
|
<div class="command">
|
|
<div class="command-name">!wild <location></div>
|
|
<div class="command-desc">Check what types of pets can be found in a specific location.</div>
|
|
<div class="command-example">Example: !wild Electric Canyon</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="locations-list">
|
|
<h4>Available Locations:</h4>
|
|
<ul>
|
|
<li><strong>Starter Town</strong> - Where all trainers begin (always accessible)</li>
|
|
<li><strong>Whispering Woods</strong> - Unlocked by catching 3 different Grass-type pets</li>
|
|
<li><strong>Electric Canyon</strong> - Unlocked by catching 2 different Electric-type pets</li>
|
|
<li><strong>Crystal Caves</strong> - Unlocked by catching 3 different Rock-type pets</li>
|
|
<li><strong>Frozen Tundra</strong> - Unlocked by catching 5 different Water/Ice-type pets</li>
|
|
<li><strong>Dragon's Peak</strong> - Unlocked by catching 15 pets total and having 3 Fire-type pets</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<div class="section-header">⚔️ Battle System</div>
|
|
<div class="command-grid">
|
|
<div class="command">
|
|
<div class="command-name">!battle</div>
|
|
<div class="command-desc">Start a battle with a wild pet you encountered during exploration. Strategic combat with type advantages!</div>
|
|
<div class="command-example">Example: !battle</div>
|
|
</div>
|
|
<div class="command">
|
|
<div class="command-name">!attack <move></div>
|
|
<div class="command-desc">Use a specific move during battle. Each pet has different moves based on their type.</div>
|
|
<div class="command-example">Example: !attack Ember</div>
|
|
</div>
|
|
<div class="command">
|
|
<div class="command-name">!flee</div>
|
|
<div class="command-desc">Attempt to escape from battle. Success depends on your pet's speed vs the wild pet's speed.</div>
|
|
<div class="command-example">Example: !flee</div>
|
|
</div>
|
|
<div class="command">
|
|
<div class="command-name">!moves</div>
|
|
<div class="command-desc">View your active pet's available moves (up to 4 moves). Shows move type and power for battle planning.</div>
|
|
<div class="command-example">Example: !moves</div>
|
|
</div>
|
|
<div class="command">
|
|
<div class="command-name">!catch (or !capture)</div>
|
|
<div class="command-desc">Try to catch a pet during exploration OR during battle. During battle, weaker pets (lower HP) have significantly higher catch rates - up to 90% for nearly defeated pets! Both !catch and !capture work identically.</div>
|
|
<div class="command-example">Example: !catch or !capture</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="tip">
|
|
<strong>Battle Strategy:</strong> Use type advantages! Water beats Fire, Fire beats Grass, Grass beats Water, Electric beats Water, Rock beats Fire and Electric. Weaken wild pets in battle to increase catch rate!
|
|
</div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<div class="section-header">🐾 Pet Management</div>
|
|
<div class="command-grid">
|
|
<div class="command">
|
|
<div class="command-name">!team</div>
|
|
<div class="command-desc">View all your pets with active pets marked by ⭐. Shows levels, HP, and storage status.</div>
|
|
<div class="command-example">Example: !team</div>
|
|
</div>
|
|
<div class="command">
|
|
<div class="command-name">!stats</div>
|
|
<div class="command-desc">View your player statistics including level, experience, and money.</div>
|
|
<div class="command-example">Example: !stats</div>
|
|
</div>
|
|
<div class="command">
|
|
<div class="command-name">!activate <pet> <span class="pm-indicator">PM ONLY</span></div>
|
|
<div class="command-desc">Activate a pet for battle by nickname or species name. Only inactive pets can be activated. This command only works in private messages to prevent channel spam.</div>
|
|
<div class="command-example">Example: /msg PetBot !activate Sparky<br>Example: /msg PetBot !activate Pikachu</div>
|
|
</div>
|
|
<div class="command">
|
|
<div class="command-name">!deactivate <pet> <span class="pm-indicator">PM ONLY</span></div>
|
|
<div class="command-desc">Deactivate an active pet, removing it from battle readiness. This command only works in private messages to prevent channel spam.</div>
|
|
<div class="command-example">Example: /msg PetBot !deactivate Sparky<br>Example: /msg PetBot !deactivate Pikachu</div>
|
|
</div>
|
|
<div class="command">
|
|
<div class="command-name">!swap <pet1> <pet2> <span class="pm-indicator">PM ONLY</span></div>
|
|
<div class="command-desc">Swap activation status between two pets. The first pet becomes inactive, the second becomes active. This command only works in private messages to prevent channel spam.</div>
|
|
<div class="command-example">Example: /msg PetBot !swap Sparky Flame<br>Example: /msg PetBot !swap Pikachu Charmander</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="tip">
|
|
<strong>Pet Management Tips:</strong> You can only have a limited number of active pets at once. Use !team to see which pets are active (⭐). Pet management commands (!activate, !deactivate, !swap) must be sent as private messages to the bot to prevent channel spam. Use <code>/msg PetBot <command></code> format.
|
|
</div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<div class="section-header">🏆 Achievements & Progress</div>
|
|
<div class="command-grid">
|
|
<div class="command">
|
|
<div class="command-name">!achievements</div>
|
|
<div class="command-desc">View your earned achievements and progress. Achievements unlock new locations!</div>
|
|
<div class="command-example">Example: !achievements</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="locations-list">
|
|
<h4>Key Achievements:</h4>
|
|
<ul>
|
|
<li><strong>Pet Collector</strong> - Catch your first 5 pets</li>
|
|
<li><strong>Advanced Trainer</strong> - Catch 10 pets total</li>
|
|
<li><strong>Nature Explorer</strong> - Catch 3 different Grass-type pets (unlocks Whispering Woods)</li>
|
|
<li><strong>Spark Collector</strong> - Catch 2 different Electric-type pets (unlocks Electric Canyon)</li>
|
|
<li><strong>Rock Hound</strong> - Catch 3 different Rock-type pets (unlocks Crystal Caves)</li>
|
|
<li><strong>Ice Breaker</strong> - Catch 5 different Water/Ice-type pets (unlocks Frozen Tundra)</li>
|
|
<li><strong>Dragon Tamer</strong> - Catch 15 pets total + 3 Fire types (unlocks Dragon's Peak)</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<div class="section-header">🌤️ Weather System</div>
|
|
<div class="command-grid">
|
|
<div class="command">
|
|
<div class="command-name">!weather</div>
|
|
<div class="command-desc">Check the current weather in your location and its effects on pet spawns.</div>
|
|
<div class="command-example">Example: !weather</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="status-list">
|
|
<h4>Weather Effects:</h4>
|
|
<ul>
|
|
<li><strong>Sunny</strong> - 1.5x Fire and Grass-type spawns</li>
|
|
<li><strong>Rainy</strong> - 2.0x Water-type spawns</li>
|
|
<li><strong>Thunderstorm</strong> - 2.0x Electric-type spawns</li>
|
|
<li><strong>Blizzard</strong> - 1.7x Ice and Water-type spawns</li>
|
|
<li><strong>Earthquake</strong> - 1.8x Rock-type spawns</li>
|
|
<li><strong>Calm</strong> - Normal spawn rates for all types</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<div class="section-header">📚 Game Mechanics</div>
|
|
<div class="command-grid">
|
|
<div style="grid-column: 1 / -1;">
|
|
<div class="tip">
|
|
<strong>How to Play:</strong>
|
|
<ol style="margin: 10px 0 0 20px; padding: 0;">
|
|
<li>Use <code>!start</code> to create your trainer and get a starter pet</li>
|
|
<li>Use <code>!explore</code> to find wild pets in your current location</li>
|
|
<li>Choose to <code>!battle</code> the wild pet (recommended) or <code>!catch</code> directly</li>
|
|
<li>In battle, use <code>!attack <move></code> to weaken the wild pet</li>
|
|
<li>Use <code>!catch</code> (or <code>!capture</code>) during battle for much higher success rates on damaged pets</li>
|
|
<li>Battle-catch rates: 30% base + up to 50% bonus for low HP (90% max for nearly defeated pets)</li>
|
|
<li>Collect different types of pets to unlock achievements and new locations</li>
|
|
<li>Use <code>!travel</code> to explore new areas as you unlock them</li>
|
|
<li>Check <code>!weather</code> for optimal catching conditions</li>
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<div class="section-header">🔧 Type Effectiveness Chart</div>
|
|
<div class="command-grid">
|
|
<div style="grid-column: 1 / -1;">
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Attacking Type</th>
|
|
<th>Strong Against (2x)</th>
|
|
<th>Weak Against (0.5x)</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><strong>Fire</strong></td>
|
|
<td>Grass, Ice</td>
|
|
<td>Water, Rock</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Water</strong></td>
|
|
<td>Fire, Rock</td>
|
|
<td>Electric, Grass</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Grass</strong></td>
|
|
<td>Water, Rock</td>
|
|
<td>Fire, Ice</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Electric</strong></td>
|
|
<td>Water</td>
|
|
<td>Rock</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Rock</strong></td>
|
|
<td>Fire, Electric</td>
|
|
<td>Water, Grass</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Normal</strong></td>
|
|
<td>None</td>
|
|
<td>Rock</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="footer">
|
|
<p><strong>PetBot v1.1</strong> - A complete IRC pet collection and battle game</p>
|
|
<p>Created for Libera Chat #petz | Last updated: July 13, 2025</p>
|
|
<p><em>Join the adventure and become the ultimate pet trainer!</em></p>
|
|
</div>
|
|
</body>
|
|
</html> |