Pets Schema
Database tabellen voor het huisdieren systeem.
Overzicht
Het pet systeem bevat:
- Pet types - Soorten huisdieren
- Player pets - Geadopteerde huisdieren met stats
- Pet homes - Verblijven in de boomhut
- Pet tricks - Leerbare trucjes
PetType (soort)
│
└── PlayerPet (instantie)
│
├── PetHome (verblijf)
│
└── PetLearnedTrick (geleerde trucjes)
└── PetTrick (definitie)
Tabellen
pet_type
Huisdier soorten/rassen.
#[table(name = pet_type, public)]
pub struct PetType {
#[primary_key]
pub type_id: String, // "kitten", "puppy", "bunny"
pub display_name: String, // "Kitten"
pub description: String,
pub sprite_path: String,
pub rarity: u8, // 0=common, 1=uncommon, 2=rare, 3=legendary
pub base_happiness_decay: f32, // Hoe snel happiness daalt
pub base_hunger_decay: f32,
pub favorite_food: String, // Item ID
pub favorite_toy: String, // Item ID
pub unlock_requirement: String, // JSON: {"level": 5}
}
Beschikbare Pet Types:
| Type | Rarity | Unlock |
|---|---|---|
| kitten | common | Level 1 |
| puppy | common | Level 1 |
| bunny | common | Level 3 |
| hamster | uncommon | Level 5 |
| bird | uncommon | Quest: "Bird Watcher" |
| fox | rare | Level 10 |
| owl | rare | Quest: "Night Explorer" |
| dragon | legendary | Event only |
player_pet
Huisdieren die een speler bezit.
#[table(name = player_pet, public)]
pub struct PlayerPet {
#[primary_key]
#[auto_inc]
pub id: u64,
pub owner: Identity,
pub pet_type: String,
pub name: String, // Zelfgekozen naam
pub happiness: u8, // 0-100
pub hunger: u8, // 0-100 (100 = vol)
pub energy: u8, // 0-100
pub affection: u32, // Totaal affection points
pub level: u8, // Pet level (1-20)
pub is_active: bool, // Volgt speler
pub adopted_at: Timestamp,
pub last_fed: Timestamp,
pub last_played: Timestamp,
pub personality: String, // "playful", "lazy", "curious", "shy"
pub color_variant: String, // "brown", "white", "spotted"
}
Stats Systeem
┌─────────────────────────────────────────────────────────────┐
│ Stat │ Decay Rate │ Boosted By │
├─────────────────────────────────────────────────────────────┤
│ happiness │ -2/uur │ Playing, petting, favorite toy │
│ hunger │ -5/uur │ Feeding (any food) │
│ energy │ -3/uur │ Resting in pet home │
│ affection │ Nooit │ Alle interacties │
└─────────────────────────────────────────────────────────────┘
Leveling
Affection → Level mapping:
| Level | Affection Nodig |
|---|---|
| 1 | 0 |
| 2 | 100 |
| 3 | 250 |
| 5 | 700 |
| 10 | 3000 |
| 15 | 8000 |
| 20 | 20000 |
pet_home
Verblijven voor huisdieren.
#[table(name = pet_home, public)]
pub struct PetHome {
#[primary_key]
#[auto_inc]
pub id: u64,
pub owner: Identity,
pub room_id: u64, // In welke kamer
pub home_type: String, // "basket", "cage", "aquarium"
pub x: i32,
pub y: i32,
pub assigned_pet: Option<u64>, // Welk pet woont hier
pub comfort_level: u8, // Beïnvloedt happiness decay
}
Home Types:
| Type | Voor | Comfort |
|---|---|---|
| basket | Katten, honden | 50 |
| deluxe_basket | Katten, honden | 80 |
| cage | Hamsters, vogels | 40 |
| aviary | Vogels | 70 |
| stable | Grotere dieren | 60 |
| aquarium | Vissen | 50 |
pet_trick
Trucjes die pets kunnen leren.
#[table(name = pet_trick, public)]
pub struct PetTrick {
#[primary_key]
pub trick_id: String,
pub display_name: String,
pub description: String,
pub required_level: u8,
pub required_affection: u32,
}
Beschikbare Tricks:
| Trick | Level | Affection |
|---|---|---|
| sit | 1 | 0 |
| shake_paw | 2 | 50 |
| roll_over | 3 | 100 |
| fetch | 5 | 300 |
| speak | 5 | 300 |
| dance | 8 | 800 |
| special | 10 | 1500 |
pet_learned_trick
Geleerde trucjes per pet.
#[table(name = pet_learned_trick, public)]
pub struct PetLearnedTrick {
#[primary_key]
#[auto_inc]
pub id: u64,
pub pet_id: u64,
pub trick_id: String,
pub mastery: u8, // 0-100 hoe goed
pub learned_at: Timestamp,
}
Interacties
Voeren
# Client code
func feed_pet(pet_id: int, food_item_id: String) -> void:
client.reducers.feed_pet(pet_id, food_item_id)
Effecten:
- Hunger +20 (normaal voedsel)
- Hunger +40 (favoriet voedsel)
- Happiness +10 (favoriet voedsel bonus)
- Affection +5
Spelen
func play_with_pet(pet_id: int, toy_item_id: String) -> void:
client.reducers.play_with_pet(pet_id, toy_item_id)
Effecten:
- Happiness +20 (normaal speelgoed)
- Happiness +35 (favoriet speelgoed)
- Energy -10
- Affection +10
Aaien
func pet_animal(pet_id: int) -> void:
client.reducers.pet_animal(pet_id)
Effecten:
- Happiness +5
- Affection +2
- Cooldown: 5 minuten
Queries
Speler's huisdieren
SELECT pp.*, pt.display_name, pt.sprite_path
FROM player_pet pp
JOIN pet_type pt ON pp.pet_type = pt.type_id
WHERE pp.owner = :identity
Hongerige pets
SELECT * FROM player_pet
WHERE owner = :identity AND hunger < 30
Actieve pet (volgt speler)
SELECT * FROM player_pet
WHERE owner = :identity AND is_active = true