[ 'host' => 'localhost', 'user' => 'root', 'pass' => 'lol1337', 'name' => 'soapbox', ], // ---------- Sitzung / Login ---------- 'session_days' => 30, // ---------- Core-Hook (Java Core -> PHP, server-zu-server, kein Login) ---------- // Wird vom RewardBO-Patch (core/patchwork) nach jedem Renn-Sieg aufgerufen, // um Cop-Strafen/XP/Transaktions-Log nachzuholen, die frueher am Heartbeat- // Cash-Delta haengen. Kein Nutzer-Request, daher eigener Shared-Secret statt // Session-Cookie. Auf dem Core-Server denselben Wert in RewardBO.java eintragen. 'core_hook_secret' => 'nsz_core_hook_8f3a1e6d9c2b4517', // ---------- Renn-Belohnung (Rebalance 1:1) ---------- // Der Java-Core zahlt ~60x zu hoch. Bis zum Core-Patch (Phase 2) korrigiert der // core_race_reward-Hook in rp.php die Auszahlung runter: Ziel = amount * factor, // gedeckelt auf cap. Aktuell: Median ~35k * 0.07 = ~2.450$, kein Rennen ueber 8.000$. // Zum Nachjustieren: factor hoch = mehr Geld/Rennen, cap = Deckel fuer lange/High-Level-Rennen. // HINWEIS: Die Renn-Skalierung macht jetzt der CORE-Parameter // CASH_REWARD_MULTIPLIER (0.07) an der Quelle -> Anzeige+Auszahlung stimmen. // Der PHP-Hook (core_race_reward) lief eh ins Leere (Core ruft /rp.php statt // /api/rp.php). factor hier auf 1.0 = Hook macht NICHTS mehr (kein Doppel- // Skalieren, falls der Hook-URL im Core mal korrigiert wird). 'race_reward' => [ 'factor' => 1.0, // 1.0 = aus (Skalierung laeuft ueber CASH_REWARD_MULTIPLIER) 'cap' => 0, // 0 = kein Deckel ], // ---------- Daily Login Bonus ---------- 'daily' => [ 'cooldown_hours' => 24, 'base_bonus' => 500, // REBALANCE 1:1 (war 5000) 'streak_bonus' => 200, // REBALANCE 1:1 (war 1000) -> max 500+7*200 = 1900/Tag 'streak_max' => 7, 'reset_after_h' => 48, ], // ---------- Dienstleistungen (Werkstatt, Tuner, Kino) ---------- 'services' => [ 'werkstatt' => [ 'cost' => 400, // REBALANCE 1:1 (war 1200) 'require_poi' => 'werkstatt', ], 'tuner' => [ 'cost' => 600, // REBALANCE 1:1 (war 2500) 'require_poi' => 'tuner', ], 'kino' => [ 'cost' => 0, 'require_poi' => 'kino', ] ], // ---------- Schwarzmarkt / Darknet ---------- // ANLEITUNG: NEUE TEILE HINZUFUeGEN // 1. Kopiere eine vorhandene Zeile. // 2. Aendere die 'id' (muss einmalig sein!). // 3. Passe 'name' und 'price' an. 'darknet' => [ 'open_hour_start' => 0, // ab 22:00 Uhr Serverzeit 'open_hour_end' => 20, // bis 06:00 Uhr Serverzeit 'require_poi' => 'schwarzmarkt', 'parts' => [ ['id'=>'proto_turbo', 'name'=>'Prototyp-Turbolader', 'price'=>8000], // REBALANCE 1:1 (war 250000) ['id'=>'nitro_x', 'name'=>'Schwarzmarkt-Nitro X', 'price'=>3000], // war 90000 ['id'=>'ghost_ecu', 'name'=>'Ghost-ECU (unauffindbar)', 'price'=>6000], // war 180000 ['id'=>'race_slicks', 'name'=>'Illegale Rennslicks', 'price'=>2000], // war 60000 // Beispiel fuer ein neues Teil: // ['id'=>'fake_plates', 'name'=>'Gefaelschte Kennzeichen', 'price'=>15000], ], ], // ---------- Werkstatt / Crafting ---------- 'crafting' => [ 'max_parallel' => 3, // max. gleichzeitig laufende Craftings pro Spieler ], // ---------- Lizenzen / Cop-Strafen / Sprit ---------- // 'trucker' = Fahrer-Lizenz fuer Liefer-Jobs (Raffinerie -> Tankstelle). // REBALANCE 1:1 (war craft 25000, tuner 100000, tankstelle 75000, trucker 25000) 'licenses' => [ 'craft' => 1500, 'tuner' => 5000, 'tankstelle' => 4000, 'trucker' => 1500 ], 'cop_penalty' => [ 'warn_field' => 'copsDeployed', 'warn_pct' => 0.10, 'warn_max' => 0.40, 'arrest_pct' => 0.50, 'hardcore_full' => true ], 'fuel' => [ 'cost_per_percent' => 3 ], // REBALANCE 1:1 (war 20) -> Volltank ~300$ // ---------- Tankstellen-Logistik (Vorrat + Liefer-Jobs) ---------- // Spieler-Tankstellen haben einen Sprit-Vorrat in Litern (rp_station_fuel); // Tanken verbraucht ihn, Lieferungen (Raffinerie Kempton) fuellen ihn auf. // Staatliche Tankstellen haben unbegrenzt Sprit. Kapazitaet der Station: // 1000 + Ausbaustufe*500 Liter (Stufe 1 = 1500 L ... Stufe 6 = 4000 L). 'fuel_delivery' => [ 'order_liters' => 500, // Liter pro Bestellung/Lieferung 'buy_per_liter' => 1, // REBALANCE 1:1 (war 10) Einkaufspreis Besitzer/Liter 'driver_payout' => 250, // (Fallback) Fahrerlohn falls Distanz-Lohn aus ist // ----- DISTANZ-LOHN: Lohn = Basis + pro_km * km (Raffinerie -> Ziel-Tankstelle) ----- // Naechste Station (~1,5 km) ~= 7000$, weiteste (~6,2 km) ~= 11700$. Der Lohn gilt // pro GANZE Bestellung und wird bei Split-Lieferung anteilig je Fahrt ausgezahlt. 'payout_distance_enabled' => true, 'payout_base' => 5500, // Sockel; naechste Tankstelle landet damit bei ~7000 'payout_per_km' => 1000, // Aufschlag je km Luftlinie ab Raffinerie 'units_per_km' => 1000, // Spiel-Einheiten pro km (Umrechnung; Map-Distanzen ~1500-6200) 'tank_liters' => 50, // voller Fahrzeugtank in Litern (Verbrauch pro Volltanken) 'price_min' => 1, // REBALANCE 1:1 (war 10) Spritpreis (pro %) Spieler-Tankstellen 'price_max' => 6, // war 60 // Ausbaustufe-Boni: Rabatt auf den Raffinerie-Einkauf (pro Stufe, gedeckelt) // und mehr gleichzeitige Bestellungen pro Stufe. 'refinery_discount_per_level' => 0.03, // 3% pro Stufe (Stufe 5 = 15% guenstiger) 'refinery_discount_max' => 0.30, 'max_orders_base' => 1, // gleichzeitige offene Bestellungen ... 'max_orders_per_level' => 1, // ... + 1 pro Ausbaustufe (Stufe 5 = 6) // Freie Bestellmenge: der Besitzer tippt Liter ein (min..max, Vielfaches). 'order_min' => 100, 'order_max' => 4000, // >= groesste Tankstellen-Kapazitaet (Stufe 6) 'order_step' => 50, // Teleport-Sperre: Sprung > X Einheiten zwischen zwei Heartbeats waehrend // eines laufenden Auftrags = Betrug -> Auftrag storniert (kein Lohn). // Ausnahme: waehrend eines aktiven Rennens (da portet das Spiel legitim). 'teleport_cancel_dist' => 1500, // Nacht-Bonus: Lieferungen zwischen night_start/night_end zahlen mehr. 'night_bonus_pct' => 50, // +50% Fahrerlohn nachts // ----- AUTO-NACHBESTELLUNG (durchgehend Jobs) ----- // ALLE Tankstellen verbrauchen; faellt der Vorrat unter X%, wird // automatisch ein Lieferauftrag angelegt (wenn nicht schon einer offen ist). // - Staatliche: staatlich finanziert (Lohn = Mint, gedeckt durch die // Tank-Einnahmen der Staatskasse), Tanken wird NIE blockiert. // - Spieler: Besitzer zahlt vorab wie normal, aber nur wenn genug Giro da // ist (sonst uebersprungen -- kein Minus-Konto). 'auto_order_enabled' => true, 'auto_order_threshold_pct' => 10, // Auto-Auftrag wenn Vorrat < 10% 'state_capacity' => 2500, // Vorrat-Kapazitaet staatlicher Tankstellen (L) 'auto_order_cooldown_sec' => 300, // Sweep (Verbrauch+Einkommen+Auftrags-Check) nur alle 5 Min // ----- PASSIVER VERBRAUCH (NPC-Nachfrage -> erzeugt Jobs von selbst) ----- // Jede Station verbraucht automatisch ueber Zeit (proportional zur real // vergangenen Zeit seit letztem Sweep), auch ohne dass ein Spieler tankt. 'passive_drain_per_min' => 6, // Liter/Minute Grundverbrauch je Station (moderat) 'passive_drain_jitter_pct' => 50, // +/- Zufallsschwankung darauf (%) // Staatliche haben zusaetzlich zufaellige PLOETZLICHE Verbrauchs-Spikes: 'state_spike_chance_pct' => 15, // Chance je Sweep, dass eine staatliche einen Spike hat 'state_spike_liters' => [200, 800],// Spike-Menge (zufaellig min..max L) // Spieler-Besitzer verdienen an der NPC-Nachfrage (Sim-Verkauf zu ihrem Preis), // sonst waere passiver Verbrauch nur Verlust. false = Besitzer verdient nicht. 'owner_earns_passive' => true, ], // ---------- Kofferraum-Gewicht (KG) ---------- // Jedes Item im Kofferraum wiegt; das Auto hat ein KG-Limit. Sprit-Lieferung // belegt beim Fahren KG (1 L = 1 KG) -> ein voller Kofferraum kann weniger // Sprit hauln. Kapazitaet je Auto per car.name-Slug (Trucks tragen mehr). 'trunk' => [ 'default_capacity_kg' => 200, // normale Autos (kleiner Kofferraum) 'material_weight_kg' => 2, // pro Crafting-Material (Stueck) 'part_weight_kg' => 10, // pro gecraftetem/gekauftem Teil 'fuel_kg_per_liter' => 1, // Sprit: 1 L = 1 KG // Fahrzeug-Kapazitaeten (KG). Schluessel = Teilstring aus car.name (Slug), // erster Treffer gewinnt. Slug im Spiel ablesbar: Kofferraum (K) -> "Modell:". // WICHTIG: nur eindeutige Slugs verwenden -- ein zu kurzer wie 'van' wuerde // sonst mitten in 'vantagev12' matchen. Alles ohne Treffer = default 200 KG. 'capacities' => [ // --- bestaetigte grosse Fahrzeuge (Trucks / SUVs) --- 'car1050' => 1000, // Ford Raptor (groesster Kofferraum) 'car1020' => 1000, // grosser SUV (fast wie Battlefield) 'battlefield2' => 1000, // grosser SUV // --- weitere hier ergaenzen, sobald der Slug bekannt ist --- // Richtwerte (frueheres Konzept): Pickup 750, mittlerer SUV 500, // El-Camino-Klasse 250. Einfach 'carXXXX' => KG eintragen. ], ], // ---------- Spielzeit-Praemie ---------- 'playtime_bonus' => [ // 0 = kein km-Mindestmass, nur Heartbeat-Praesenz zaehlt (siehe rp.php Kommentar // im heartbeat-Zweig). >0 = zusaetzlich muessen seit Start X km gefahren sein, // sonst bleibt die Praemie aktiv stehen, bis das erreicht ist. 'km_required' => 0, ], // ---------- Bankraub / Heist ---------- // Wirtschafts-Rebalance (17.07.2026): reward/bust_penalty waren 150k-500k bzw. // 50k -- das schlug jede andere Geldquelle (Quests 7k-90k, Schatzsuche bis 10,8k, // Immobilien 500-15k/Tag) um Groessenordnungen. Neu: ein Erfolg liegt auf // Tages-Quest-Niveau (~20k-60k), Cooldown von 60 auf 120 Min angehoben, damit // Bankraub etwas Besonderes bleibt statt stuendlich gefarmt zu werden. 'robbery' => [ 'require_poi' => 'state_bank', 'cooldown_minutes' => 120, 'locks' => 4, 'lock_time_ms' => 4000, 'total_time_s' => 60, 'reward_min' => 2000, // REBALANCE 1:1 (war 20000) 'reward_max' => 8000, // war 60000 'bust_chance' => 25, 'bust_penalty' => 1500, // war 15000 ], // ---------- POIs (Orte auf der Map) ---------- // ANLEITUNG: NEUE ORTE HINZUFUeGEN // 1. Fahre im Spiel an die gewuenschte Stelle. // 2. Lies in Cheat Engine (dein Pointer: nfsw.exe+9C0BB8) X, Y, und Z ab. // 3. Kopiere einen Block hier unten und ersetze die Werte. // Wichtig: Achte darauf, dass 'type' zur Funktion passt, die du aufrufen willst! // Jeder POI hat jetzt zusaetzlich 'city' (fuer die Gruppierung auf der // Orte-Webseite/im Handy) und 'photo' (Dateiname unter Webseite/assets/pois/, // von der Community bereitgestellt -- solange die Datei nicht existiert, // zeigt die Webseite automatisch einen Platzhalter). city='Unbekannt' heisst: // noch nicht zugeordnet, bitte mit Ulf klaeren sobald die Koordinaten // feststehen (betrifft dieselben Orte die noch 0/0/0-Platzhalterkoordinaten haben). 'pois' => [ ['id'=>'state_bank', 'name'=>'NightStalkerZ Staatsbank', 'type'=>'Bank', 'city'=>'Unbekannt', 'photo'=>'state_bank.jpg', 'x'=>59, 'y'=>904, 'z'=>-5388, 'radius'=>40.0, 'night_only'=>false], ['id'=>'schwarzmarkt', 'name'=>'Schwarzmarkt', 'type'=>'darknet', 'city'=>'Unbekannt', 'photo'=>'schwarzmarkt.jpg', 'x'=>17, 'y'=>2313, 'z'=>-9586, 'radius'=>10.0, 'night_only'=>true], ['id'=>'werkstatt', 'name'=>'Werkstatt Palmont', 'type'=>'repair', 'city'=>'Palmont', 'photo'=>'werkstatt.jpg', 'x'=>0.0, 'y'=>0.0, 'z'=>0.0, 'radius'=>40.0, 'night_only'=>false], // Craft-Labor fuer das Werkstatt/Crafting-System (Trunk.cpp/Craft.cpp) -- // Sammelpunkt fuer Crafting-Werkstoffe (Turbo/Reifen/Motor/Getriebe/ // Fahrwerk). Eigener 'type'=>'craft_lab', damit er NICHT mit dem // Reparatur-POI oben (type=repair) kollidiert. Koordinaten + Name am // 16.07.2026 von der Community bestaetigt (vorher Platzhalter 0/0/0 // und faelschlich "Rockport" im Namen -- liegt tatsaechlich in Kempton/ // Palmont, siehe Discord-Meldung "Kempton (Sammler fuer Crafter)"). ['id'=>'craft_lab_1', 'name'=>'Werkstatt-Labor Kempton', 'type'=>'craft_lab', 'city'=>'Palmont', 'photo'=>'craft_lab_1.jpg', 'x'=>33, 'y'=>-361, 'z'=>-5155, 'radius'=>25.0, 'night_only'=>false], // NEU (16.07.2026): Raffinerie fuer Oel -- von der Community gemeldet // als "Kempton Crafter". Noch keine eigene Spiel-Mechanik dahinter // (Belieferungs-System Raffinerie->Tankstelle war nur Brainstorming, // siehe Entwicklung andere Kis/nightstalkerz_feature_brainstorming*.md), // aber schon als Ort auf Webseite/Karte sichtbar. ['id'=>'raffinerie_kempton', 'name'=>'Raffinerie Kempton', 'type'=>'raffinerie', 'city'=>'Palmont', 'photo'=>'raffinerie_kempton.jpg', // 21.07.2026: an neuen Standort verlegt (getauscht mit dem alten Platz, // wo jetzt die Reifen-Werkstatt steht). 'x'=>27, 'y'=>1374, 'z'=>-9952, 'radius'=>25.0, 'night_only'=>false], // 21.07.2026: Reifen-Werkstatt am ALTEN Raffinerie-Standort. type=craft_lab // -> nutzt dasselbe Crafting-System (F-Taste oeffnet den Crafter). Zeigt // aktuell alle Rezepte; auf Wunsch server-seitig auf Reifen filterbar. ['id'=>'reifen_crafter', 'name'=>'Reifen-Werkstatt', 'type'=>'craft_lab', 'city'=>'Palmont', 'photo'=>'craft_lab_1.jpg', 'x'=>38, 'y'=>-35, 'z'=>-4385, 'radius'=>25.0, 'night_only'=>false], // HINWEIS: Bei mehreren Tunern muessen die IDs trotzdem eindeutig bleiben! // property_id verknuepft diesen POI mit einer Zeile in economy_properties (type='tuner'). // Ist der Property-Slot vermietet/verkauft, wird der Shop spielerbetrieben (eigener // Bestand/Preis), sonst bleibt er staatlich wie bisher (Fixpreise, unbegrenzt). // Neuen Tuner-POI hinzufuegen -> zuerst eine neue Zeile in economy_properties (type=tuner) // anlegen, dann hier property_id auf deren id setzen. ['id'=>'tuner_1', 'name'=>'RoseWood Tuner', 'type'=>'Tuner', 'city'=>'Rosewood', 'photo'=>'tuner_1.jpg', 'property_id'=>5, 'x'=>159, 'y'=>2017, 'z'=>-7526, 'radius'=>20.0, 'night_only'=>false], // Die Doppel-Minus (--75865) wurden hier korrigiert zu -75865 // Noch kein property_id: bleibt staatlich, bis eine passende economy_properties-Zeile existiert. ['id'=>'tuner_2', 'name'=>'RoseWood Tuner 2', 'type'=>'Tuner', 'city'=>'Rosewood', 'photo'=>'tuner_2.jpg', 'x'=>145, 'y'=>667, 'z'=>-7865, 'radius'=>20.0, 'night_only'=>false], // Doppel-Minus korrigiert zu -4966 ['id'=>'kino', 'name'=>'NightStalkerZ Kino', 'type'=>'Kino', 'city'=>'Unbekannt', 'photo'=>'kino.jpg', 'x'=>43, 'y'=>801, 'z'=>-4966, 'radius'=>20.0, 'night_only'=>false], ['id'=>'casino', 'name'=>'Casino Golden Piston', 'type'=>'casino', 'city'=>'Unbekannt', 'photo'=>'casino.jpg', 'x'=>0.0, 'y'=>0.0, 'z'=>0.0, 'radius'=>40.0, 'night_only'=>false], // ---- Neue Orte Rosewood (2026-07-08) ---- ['id'=>'tankstelle_autobahn_rose', 'name'=>'Tankstelle Autobahn (Rosewood)', 'type'=>'tankstelle', 'city'=>'Rosewood', 'photo'=>'tankstelle_autobahn_rose.jpg', 'property_id'=>11, 'x'=>206, 'y'=>3949, 'z'=>-6825, 'radius'=>20.0, 'night_only'=>false], // Neuer Tuner-Standort, aktuell noch ohne property_id -> staatlich (nur Reparatur). // Soll er kaeuflich werden: erst Zeile in economy_properties (type=tuner) anlegen, // dann hier 'property_id'=>... ergaenzen. ['id'=>'tuner_autobahn_rose', 'name'=>'Tuner Autobahn (Rosewood)', 'type'=>'Tuner', 'city'=>'Rosewood', 'photo'=>'tuner_autobahn_rose.jpg', 'x'=>217, 'y'=>3975, 'z'=>-6709, 'radius'=>20.0, 'night_only'=>false], ['id'=>'golf_club_rose', 'name'=>'Golf Club', 'type'=>'freizeit', 'city'=>'Rosewood', 'photo'=>'golf_club_rose.jpg', 'x'=>162, 'y'=>3000, 'z'=>-8133, 'radius'=>25.0, 'night_only'=>false], ['id'=>'autohaendler_rose', 'name'=>'Autohaendler (Rosewood)', 'type'=>'haendler', 'city'=>'Rosewood', 'photo'=>'autohaendler_rose.jpg', 'x'=>154, 'y'=>1597, 'z'=>-6996, 'radius'=>20.0, 'night_only'=>false], ['id'=>'tankstelle_rosewood', 'name'=>'Tankstelle Rosewood', 'type'=>'tankstelle', 'city'=>'Rosewood', 'photo'=>'tankstelle_rosewood.jpg', 'property_id'=>9, 'x'=>153, 'y'=>1602, 'z'=>-7174, 'radius'=>20.0, 'night_only'=>false], ['id'=>'flea_market_garage_rose', 'name'=>'Flea Market Safehouse Garage (Rosewood)', 'type'=>'garage', 'city'=>'Rosewood', 'photo'=>'flea_market_garage_rose.jpg', 'x'=>149, 'y'=>1960, 'z'=>-7794, 'radius'=>20.0, 'night_only'=>false], // ---- Neue Orte Palmont (2026-07-08) ---- // Verknuepft mit der bereits existierenden economy_properties-Zeile id=4 // ("Tankstelle Palmont", type=tankstelle) -- gleiches Prinzip wie beim Tuner. ['id'=>'tankstelle_palmont', 'name'=>'Tankstelle Palmont', 'type'=>'tankstelle', 'city'=>'Palmont', 'photo'=>'tankstelle_palmont.jpg', 'property_id'=>4, 'x'=>31, 'y'=>-675, 'z'=>-4359, 'radius'=>20.0, 'night_only'=>false], ['id'=>'diner_palmont', 'name'=>'Diner Palmont', 'type'=>'freizeit', 'city'=>'Palmont', 'photo'=>'diner_palmont.jpg', 'x'=>19, 'y'=>-371, 'z'=>-3156, 'radius'=>20.0, 'night_only'=>false], ['id'=>'gebrauchtwagenhaendler_palmont', 'name'=>'Gebrauchtwagenhaendler Palmont City', 'type'=>'haendler', 'city'=>'Palmont', 'photo'=>'gebrauchtwagenhaendler_palmont.jpg', 'x'=>33, 'y'=>-234, 'z'=>-3457, 'radius'=>20.0, 'night_only'=>false], // Neuer Tuner-Standort, aktuell noch ohne property_id -> staatlich (nur Reparatur). ['id'=>'tuner_palmont_city', 'name'=>'Palmont City Tuner', 'type'=>'Tuner', 'city'=>'Palmont', 'photo'=>'tuner_palmont_city.jpg', 'x'=>41, 'y'=>239, 'z'=>-1221, 'radius'=>20.0, 'night_only'=>false], ['id'=>'bordell_palmont', 'name'=>'Palmont City Bordell', 'type'=>'freizeit', 'city'=>'Palmont', 'photo'=>'bordell_palmont.jpg', 'x'=>59, 'y'=>646, 'z'=>-2140, 'radius'=>20.0, 'night_only'=>false], ['id'=>'hotel_pacific_palmont', 'name'=>'The Pacific Palmont Hotel', 'type'=>'freizeit', 'city'=>'Palmont', 'photo'=>'hotel_pacific_palmont.jpg', 'x'=>26, 'y'=>431, 'z'=>-2656, 'radius'=>25.0, 'night_only'=>false], // ---- Neue Tankstellen aus Community-Meldungen (16.07.2026) ---- // Erst gegen die bestehenden Orte geprueft (Distanz-Abgleich), das sind // KEINE Duplikate der 3 bisherigen Tankstellen -- naechster bestehender // Ort war jeweils >400 Einheiten entfernt. Jede hier wurde von 2 // unabhaengigen Community-Meldungen bestaetigt (Landmarke + Tankstelle // auf denselben paar Metern). ['id'=>'tankstelle_rosewood_mitte', 'name'=>'Tankstelle Rosewood Mitte', 'type'=>'tankstelle', 'city'=>'Rosewood', 'photo'=>'tankstelle_rosewood_mitte.jpg', 'property_id'=>10, 'x'=>172, 'y'=>2099, 'z'=>-6471, 'radius'=>20.0, 'night_only'=>false], ['id'=>'tankstelle_rosewood_busbahnhof', 'name'=>'Tankstelle Rosewood Busbahnhof', 'type'=>'tankstelle', 'city'=>'Rosewood', 'photo'=>'tankstelle_rosewood_busbahnhof.jpg', 'property_id'=>8, 'x'=>152, 'y'=>1074, 'z'=>-8032, 'radius'=>20.0, 'night_only'=>false], ['id'=>'tankstelle_dunwich', 'name'=>'Tankstelle Dunwich Village', 'type'=>'tankstelle', 'city'=>'Dunwich', 'photo'=>'tankstelle_dunwich.jpg', 'property_id'=>7, 'x'=>12, 'y'=>2867, 'z'=>-9990, 'radius'=>20.0, 'night_only'=>false], ['id'=>'tankstelle_rockport', 'name'=>'Tankstelle Rockport City', 'type'=>'tankstelle', 'city'=>'Rockport', 'photo'=>'tankstelle_rockport.jpg', 'property_id'=>12, 'x'=>92, 'y'=>-160, 'z'=>-7846, 'radius'=>20.0, 'night_only'=>false], ['id'=>'tankstelle_silverton', 'name'=>'Tankstelle Silverton', 'type'=>'tankstelle', 'city'=>'Silverton', 'photo'=>'tankstelle_silverton.jpg', 'property_id'=>6, 'x'=>151, 'y'=>2836, 'z'=>-3888, 'radius'=>20.0, 'night_only'=>false], ], 'poi_check_enabled' => true, // ---------- Quests (Daily / Weekly / Monthly) ---------- 'quests' => [ 'daily_count' => 3, 'weekly_count' => 3, 'monthly_count' => 2, // REBALANCE 1:1 (2026-07-21): Belohnungen 500-5000, Geld-Ziele ~/10 (Real-Skala). 'pool' => [ // ---- Geld verdienen ---- ['id'=>'earn_50k', 'title'=>'Verdiene 5.000 $', 'metric'=>'money_earned', 'target'=>5000, 'reward'=>1000], ['id'=>'earn_200k', 'title'=>'Verdiene 20.000 $', 'metric'=>'money_earned', 'target'=>20000, 'reward'=>3000], // ---- Geld ausgeben ---- ['id'=>'spend_30k', 'title'=>'Gib 3.000 $ aus', 'metric'=>'money_spent', 'target'=>3000, 'reward'=>800], ['id'=>'spend_100k', 'title'=>'Gib 10.000 $ aus', 'metric'=>'money_spent', 'target'=>10000, 'reward'=>2000], // ---- Fahren ---- ['id'=>'drive_20km', 'title'=>'Fahre 20 km', 'metric'=>'distance_km', 'target'=>20, 'reward'=>800], ['id'=>'drive_50km', 'title'=>'Fahre 50 km', 'metric'=>'distance_km', 'target'=>50, 'reward'=>1500], ['id'=>'drive_100km', 'title'=>'Fahre 100 km', 'metric'=>'distance_km', 'target'=>100, 'reward'=>3000], // ---- Rennen ---- ['id'=>'win_3races', 'title'=>'Beende 3 Rennen', 'metric'=>'races', 'target'=>3, 'reward'=>1200], ['id'=>'win_10races', 'title'=>'Beende 10 Rennen', 'metric'=>'races', 'target'=>10, 'reward'=>3500], // ---- Bankraub ---- ['id'=>'rob_1', 'title'=>'Begehe 1 Bankraub', 'metric'=>'robbery_success', 'target'=>1, 'reward'=>2000], ['id'=>'rob_3', 'title'=>'Begehe 3 Bankraube', 'metric'=>'robbery_success', 'target'=>3, 'reward'=>5000], // ---- Schwarzmarkt ---- ['id'=>'darknet_1', 'title'=>'Kaufe 1 Schwarzmarkt-Teil', 'metric'=>'darknet_buy', 'target'=>1, 'reward'=>1500], ['id'=>'darknet_3', 'title'=>'Kaufe 3 Schwarzmarkt-Teile', 'metric'=>'darknet_buy', 'target'=>3, 'reward'=>3000], // ---- Tanken ---- ['id'=>'refuel_15', 'title'=>'Tanke 15x', 'metric'=>'refuel_count', 'target'=>15, 'reward'=>1500], ['id'=>'refuel_20', 'title'=>'Tanke 20x', 'metric'=>'refuel_count', 'target'=>20, 'reward'=>2500], ], ], // ===================================================================== // MONITORING-AGENT (nsz_monitor.php + monitor_dashboard.php) // Beobachtet die Wirtschaft, zeichnet Probleme auf, schlaegt Alarm. // Greift NIE selbst ein -- nur melden. // ===================================================================== 'monitor' => [ 'big_tx' => 2000000, // Einzelbuchung >= 2 Mio $ -> Exploit-Verdacht 'supply_jump_pct' => 15.0, // Geldmenge waechst >15% zwischen 2 Snapshots -> Alarm 'stuck_order_hours' => 48, // angenommener Lieferauftrag haengt so lange -> Alarm 'retention_days' => 30, // Snapshots/Alerts aelter -> geloescht 'ai_min_interval_h' => 24, // KI-Analyst hoechstens alle X h (Kosten-Bremse) ], // Claude-API fuer den KI-Analysten. LEER = Analyst ruht (Schicht 1+2 laufen // trotzdem gratis weiter). Key eintragen -> Analyst wird scharf. 'anthropic' => [ 'api_key' => '', // sk-ant-... hier eintragen 'model' => 'claude-sonnet-5', // Kompromiss Kosten/Klugheit 'max_tokens' => 2000, ], ];