Dokumentacja Moddingu

Kompletny przewodnik do tworzenia modów Operacji Dostawa

📚
🧩
⚙️
🧠

Witamy w dokumentacji moddingu! Ten przewodnik pomoże Ci stworzyć własną zawartość i rozszerzyć grę o nowe produkty, dekoracje, a nawet mechaniki.

🚀 Szybki Start

Rozpocznij swoją przygodę z moddingiem w 3 prostych krokach!

1

Utwórz folder mods

W głównym katalogu gry (gdzie znajduje się main.lua) utwórz folder mods

Operacja Dostawa/ ├── main.lua ├── core/ ├── assets/ └── mods/ ← Tutaj!
2

Skopiuj szablon

Z folderu modcreator skopiuj plik examplemod.lua do mods

3

Zmień nazwę i edytuj

Zmień nazwę na moj_mod.lua i zacznij kodować!

🧭 Jak działa ładowanie modów?

  1. Start gry: main.lua ładuje moduły, a na końcu wywołuje Game.loadMods().
  2. Skany folderu: mods/ jest iterowany; każdy plik .lua jest require().
  3. Error handler: Błąd w modzie pokaże ekran z opcją restartu bez tego moda (zapisywany w disabled_mods.txt).
  4. Środowisko: W momencie ładowania mody mają dostęp do Game, Decorations, Tablet, CustomerManager itd.
Tip: Jeśli mod psuje grę, uruchom ponownie – zostanie automatycznie wyłączony.

📦 Podstawy Moddingu

🥤

Dodawanie Nowego Produktu

Dodaj nowy produkt do sprzedaży w sklepie:

if Game and Game.productTypes then
    Game.productTypes['super_cola'] = { 
        price = 10, 
        asset = 'super_cola'
    }
    print("Dodano Super Colę!")
end
⚠️ Ważne: Musisz dodać plik super_cola.png do folderu assets!
🗿

Dodawanie Nowej Dekoracji

Stwórz nową dekorację do kupienia w tablecie:

if Decorations and Decorations.list then
    table.insert(Decorations.list, {
        id = "golden_statue",
        name = "Złota Statua",
        price = 5000,
        asset = "deco_golden_statue",
        purchased = false,
        x = 100, y = 250,
        type = "cosmetic",
        scale = 0.7
    })
    print("Dodano Złotą Statuę!")
end
💰

Modyfikowanie Istniejącego Produktu

Zmień cenę lub właściwości istniejącego produktu:

if Game and Game.productTypes and Game.productTypes.milk then
    Game.productTypes.milk.price = 1
    print("Mleko teraz kosztuje 1 zł!")
end

⚡ Zaawansowane Techniki

Odkryj potężne możliwości systemu modów!

🔄

Hooking - Wpinanie się w Pętlę Gry

Rozszerz główne funkcje gry o własną logikę:

-- Zapisz oryginalną funkcję
local original_love_update = love.update

love.update = function(dt)
    original_love_update(dt) -- ZAWSZE wywołuj oryginał!
    
    -- Twoja logika - pasywny dochód
    if Game then 
        Game.money = Game.money + (1 * dt)
    end
end
💡 Tip: Zawsze zachowuj oryginalną funkcję i wywołuj ją w swoim hooku!
🔊

Dodawanie Własnych Dźwięków

Wczytaj i odtwarzaj własne efekty dźwiękowe:

-- 1. Umieść 'moj_dzwiek.mp3' w folderze /assets
local mojDzwiek = love.audio.newSource('assets/moj_dzwiek.mp3', 'static')

-- 2. Hook do odtwarzania
local original_mousepressed = love.mousepressed
love.mousepressed = function(x, y, button)
    if original_mousepressed then
        original_mousepressed(x, y, button)
    end
    mojDzwiek:play()
end
🎨

Rysowanie Własnych Elementów

Dodaj własne elementy graficzne do gry:

local original_love_draw = love.draw

love.draw = function()
    if original_love_draw then original_love_draw() end
    
    -- Rysuj własne elementy
    love.graphics.setColor(1, 1, 0)
    love.graphics.circle('fill', 100, 100, 50)
    love.graphics.setColor(1, 1, 1)
end

🧱 Ważne struktury danych

Produkt na półce

  • { type, price, x, y, scale, room }

Paczka

  • { x, y, scale, isBeingDragged, contents = { {type, quantity}, ... } }

Timer dostawy

  • { time, package } w Tablet.deliveryTimers

🔧 API Reference

Główne obiekty i funkcje dostępne w modach:

Game

Główny obiekt gry

  • Game.money - Pieniądze gracza
  • Game.productTypes - Typy produktów
  • Game.productsOnShelves - Produkty na półkach
  • Game.packages - Paczki
  • Game.shop_expanded - Czy sklep rozbudowany
  • Game.current_room - Aktualny pokój (1 lub 2)

Decorations

System dekoracji

  • Decorations.list - Lista dekoracji
  • Decorations.buy(id) - Kup dekorację
  • Decorations.getDecoration(id) - Pobierz dekorację

CustomerManager

Zarządzanie klientami

  • CustomerManager.customers - Lista klientów
  • CustomerManager.spawnCustomer() - Spawn klienta
  • CustomerManager.spawnInterval - Interwał spawnu

Tablet

System tabletu

  • Tablet.isOpen - Czy tablet otwarty
  • Tablet.toggle() - Przełącz tablet
  • Tablet.deliveryTimers - Timery dostaw

🧪 Checklist przed publikacją moda

❓ FAQ

⏱️

Dostawa nie dochodzi

Sprawdź Tablet.deliveryTimers – czy time schodzi do 0 i czy pakiet ma x/y ustawione w placeOrder().

🖼️

Grafika się nie wyświetla

Plik musi być w assets/, nazwa bez rozszerzenia zgodna z asset w produkcie/dekoracji, format PNG.

📜

Hook zawiesza grę

Upewnij się, że wywołujesz oryginalną funkcję i otaczasz własny kod pcall gdy to ryzykowne.

🐛 Debugowanie

📝

Używaj print()

Twój najlepszy przyjaciel! Dodawaj print("Mój mod działa!") aby śledzić wykonanie kodu.

Sprawdzaj istnienie obiektów

Zawsze używaj if Game and Game.productTypes then przed modyfikacją.

🔍

Czytaj błędy

Konsola pokaże dokładną linię, w której wystąpił błąd. Zainstaluj mod Console dla lepszego debugowania!

🖥️

Używaj Konsoli Deweloperskiej

Zainstaluj mod Console (Shift + C) aby testować komendy i śledzić logi w czasie rzeczywistym.

✨ Dobre Praktyki

🏷️

Unikalne Nazwy

Używaj prefiksów dla zmiennych: MojMod_Zmienna zamiast zmienna

📦

Lokalne Zmienne

Używaj local dla zmiennych, które nie muszą być globalne

💬

Komentarze

Dokumentuj swój kod komentarzami dla przyszłych siebie i innych

🧪

Testuj Często

Testuj mod po każdej większej zmianie, aby szybko wykryć błędy

🔄

Zachowuj Oryginały

Zawsze zapisuj oryginalne funkcje przed ich modyfikacją

📄

README

Dodaj plik README.txt z opisem moda i instrukcją instalacji