Ga naar hoofdinhoud

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:

TypeRarityUnlock
kittencommonLevel 1
puppycommonLevel 1
bunnycommonLevel 3
hamsteruncommonLevel 5
birduncommonQuest: "Bird Watcher"
foxrareLevel 10
owlrareQuest: "Night Explorer"
dragonlegendaryEvent 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:

LevelAffection Nodig
10
2100
3250
5700
103000
158000
2020000

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:

TypeVoorComfort
basketKatten, honden50
deluxe_basketKatten, honden80
cageHamsters, vogels40
aviaryVogels70
stableGrotere dieren60
aquariumVissen50

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:

TrickLevelAffection
sit10
shake_paw250
roll_over3100
fetch5300
speak5300
dance8800
special101500

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

Volgende