# Director: Stückkosten Produktion (Balancing) ## Problem Die DB wählt das „beste“ Produkt über `QUERY_GET_BEST_PRODUCTION` (Worth-Formel mit `- 6 * ftp.category`), während der Daemon früher **nur** `certificate * 6` pro Stück abgebucht hat – **ohne** die Produktklasse. Dadurch konnten Stückkosten und Worth-Ranking auseinanderlaufen. ## Aktuelle Formel (Rust, `DirectorWorker::calc_one_piece_cost`) ``` raw = certificate × PRODUCTION_COST_PER_CERT_LEVEL + product_category × PRODUCTION_COST_PER_PRODUCT_CATEGORY effektiv = raw × (1 − headroom_discount) ``` - `product_category` kommt aus `QUERY_GET_BEST_PRODUCTION` (`ftp.category`). - **Headroom** = `max(0, certificate − product_category)` Wenn du **nicht** am Klassenlimit produzierst (Zertifikat höher als nötig für das Produkt), gibt es einen kleinen Rabatt (Effizienz / Reserve). Konstanten in `src/worker/director.rs` (anpassen zum Feintuning): | Konstante | Standard | Bedeutung | |-----------|----------|-----------| | `PRODUCTION_COST_PER_CERT_LEVEL` | `6.0` | wie früher `×6` pro Zertifikatsstufe | | `PRODUCTION_COST_PER_PRODUCT_CATEGORY` | `1.0` | Material pro Produktklasse | | `PRODUCTION_HEADROOM_DISCOUNT_PER_STEP` | `0.035` | Rabatt pro Headroom-Stufe | | `PRODUCTION_HEADROOM_DISCOUNT_CAP` | `0.14` | maximaler Gesamtrabatt | ## Spielerfortschritt - **Höheres Zertifikat** allein erhöht die Basis-Stückkosten linear – entspricht **besserer** Produktpalette (`ftp.category <= certificate` in SQL). - **Höhere Produktklasse** erhöht `raw` über `product_category` (bessere Ware = mehr Material). - **Zertifikat über der Produktklasse** (Headroom) senkt die effektiven Kosten – Belohnung, wenn du nicht immer nur am Limit produzierst. ## Worth in SQL Die Worth-Zeile in `QUERY_GET_BEST_PRODUCTION` sollte bei größeren Formeländerungen **mit** angepasst werden, damit der Director weiterhin sinnvoll sortiert. ## Parallelproduktionen `MAX_PARALLEL_PRODUCTIONS` (aktuell 2) bestimmt, wie viele Linien pro Tick Geld binden – unabhängig von der Stückkostenformel; bei Liquiditätsproblemen ggf. auf `1` setzen.