Valheim
You are viewing a potentially older version of this package. View Latest Version
Install with App

Details

Date Uploaded
last week
Downloads
455
Size
51KB
ADDatHost Valheim hosting
30% off

BotanicPupPatch 1.7.0

Ein Zusatzmod für PUP FPS 1.0.33: Cart-Guard, Guard für Tiere/Monster und bisheriger Statikfix und neue Statik-Bereitschaftsprüfung in einer DLL. Optionale Unterstützung für Besitzerwechsel mit FiresGhettoNetworking. Normale Kristallwände bleiben vom Clustern ausgeschlossen. Eigene Logs sind standardmäßig aus. PUP FPS bleibt erforderlich.

1.7.0 stellt den gemeinsamen Kollisionsguard auf lokale, durch PUP-Ereignisse invalidierte Bereitschaft um. Schwerpunkt: Mehrspieler-Login, verzögerte Cluster und FGN-Besitzerwechsel. Bei unveränderten Daten entfallen wiederholte Collider-/Metadatenprüfungen. Kein eigener Weltscan oder Polling-Timer.

Mobbesitzer und Bauteil-/Regionsbesitzer müssen nicht gleich sein. PUP-Collider sind lokale Unity-Objekte ohne eigenen Netzwerkbesitzer. Der tatsächlich simulierende Rechner muss seine eigenen Collider bereitstellen; eine Fertigmeldung oder ein geladener Cache auf einem anderen Rechner genügt nicht. FGN darf weiterhin Mobs anders verteilen als Statik. Besitzer-ID und OwnerRevision invalidieren die lokalen Freigaben; aktuelle Physikposition und FGN-Zielposition bleiben getrennt geprüft. Keine Änderung von FGNs Ownership-Verteilung.

Statikschutz ab 1.6.0

Der frühere Fix ermöglichte PUPs nachträgliche Support-Reparatur. Er verhinderte nicht zuverlässig, dass Valheim bei unvollständig geladenen Clustern bereits vorher schlechten Support berechnete oder anschließend einen Ofen zerstörte.

Jetzt prüft der tatsächliche lokale Gebäude-Besitzer vor der Supportberechnung, beim Eintritt in den Statikzweig und unmittelbar vor dessen Schadensentscheidung:

  • Client-Manifest beziehungsweise erfolgreich beobachtetes serverseitiges Laden.
  • Aktuelle Records, Cache-ID, Manifest-Anzahl und Geometrie-Fingerprint.
  • Ausstehende Restore-Vorgänge, unvollständige Kollisionsrezepte und fehlende Prefabs/Meshes.
  • Aktuell validierte, aktive Cluster-Collider oder vollständig vorbereitete PUP-Support-Proxys für das tatsächliche native Support-Abfragevolumen.
  • Beim Zurücksetzen die erforderlichen Collider einschließlich der jeweils aktiven Neu-/Beschädigt-Darstellung; ein einzelner fertiger Collider reicht nicht mehr, wenn andere notwendige Collider noch fehlen.

Solange die Prüfung pending ist, wird die native Supportberechnung zurückgestellt und der native Statik-Schadenszweig übersprungen. Der Guard setzt keine künstlich hohen Supportwerte und heilt nichts. Nach Bereitschaft werden überholte lokale Support-Caches einmalig verworfen; normale Statik kann im selben Aufruf fortfahren. Auch ein Besitzer- oder Weltwechsel invalidiert den passenden lokalen Cache. Für den Dedicated Server sind Record-basierte Proxys zulässig: Er muss nicht auf clientseitige GPU-Fertigmeldungen warten.

Eigene Änderungen betreffen den Statikzweig. Kampf-/RPC-Schäden und die übrigen nativen Verschleißzweige bleiben im Code erhalten; PUPs bereits vorhandene globale Lade-Prefixes behalten ihr eigenes Verhalten. PUPs pauschale Wiederherstellung alten Supports wird bei nachgewiesener Kollisionsbereitschaft unterbunden, damit tatsächlich frei schwebende Bauteile weiterhin normal zerbrechen können.

Keine zusätzliche Komponente pro Bauteil. Native Statikprüfungen verwenden gecachte lokale Freigaben, solange PUP-Daten, Welt, Besitzer und Abfragevolumen passen. PUPs bestehende Aktivierungs-/Wartungsaufrufe erhalten die normale Collider-Retention von zwei Sekunden und Proxy-Lebensdauer von sechs Sekunden ab letzter Nutzung. Die Laufzeit wird dadurch nicht pauschal verlängert.

Vor dem ersten Manifest ist noch unbekannt, wo Cluster liegen: Statik kann dann auch außerhalb später bekannter Cluster kurz warten. Fehlerhafte PUP-Daten oder nicht vorbereitbare notwendige Collider bleiben pending, statt nach einem Timeout unsicher freigegeben zu werden. Das ist keine Garantie gegen alle nativen Statik- oder Fremdmodfehler. Die neue Version ist noch nicht im echten Multiplayer geprüft.

Kristallwände: Ausschluss und bestehende Cluster

Die beiden erfolglosen Renderexperimente aus 1.3.0 und 1.4.0 sind vollständig entfernt. Das native Prefab crystal_wall_1x1 wird stattdessen vor dem Clustern aus PUPs Kandidatenlisten entfernt. Die Wand bleibt als normales Valheim-Bauteil mit eigenen Renderern, LODs, Material, Kollision und Statik bestehen. Es werden keine Materialien, Kameras oder Reflection-Probes verändert.

Der Ausschluss greift sowohl bei lokaler Clusterauswahl und Multiplayer- Administratoranfragen als auch bei PUPs separater Dedicated-Server-Auswahl. Er verwendet den nativen ZDO-Prefab-Hash; Anzeigenamen und veränderte Materialien beeinflussen ihn nicht. Andere Prefabs und zusätzliche modded Kristallvarianten werden nicht pauschal ausgeschlossen.

Bereits gespeicherte Cluster behalten ihren bisherigen Inhalt. Ein Neustart allein entfernt enthaltene Kristallwände nicht. Nach Installation auf Server und allen Clients betroffene Zellen einmal mit PUP selbst zurücksetzen:

  1. Als Serveradministrator an den betroffenen Cluster gehen.
  2. PUPs ] drücken: nächste geclusterte Zelle wiederherstellen.
  3. Abschlussmeldung abwarten. Bei gemeldeten fehlenden Records zuerst die Wiederherstellung klären; nicht direkt weiter clustern.
  4. In der wiederhergestellten Zelle mit [ erneut clustern. Kristallwände bleiben jetzt draußen; andere unterstützte Bauteile werden wieder geclustert.
  5. Für weitere betroffene Zellen wiederholen.

Das sind PUPs native Tasten RightBracket / LeftBracket. Bei Problemen mit deutschem Layout zum Bedienen kurz auf englisches Tastaturlayout wechseln. Der Zusatzmod startet keine automatische Welt-/Cache-Migration. PUP-Cache und Restoredaten während bestehender Cluster nicht löschen. Normale Kristallwände kosten wieder ihre ursprüngliche Render-/Instance-Arbeit; andere Cluster bleiben optimiert. Der neue Filter läuft ausschließlich während der Kandidatenauswahl, linear und ohne zusätzliche Ergebnislisten, laufenden Frame-Scan oder Timer.

Installation

  1. Spiel und Dedicated Server beenden.
  2. Alte PupCartGuard.dll entfernen. Vorige BotanicPupPatch.dll ersetzen; nur eine Kopie des Zusatzmods behalten.
  3. ZIP wie SmartContainersIgnore im Modmanager lokal importieren. Manuell: DLL nach BepInEx/plugins/BotanicPupPatch/ kopieren.
  4. Für vollständigen Dedicated-Schutz auf Server mit PUP und auf allen simulierenden Clients dieselbe Version installieren.
  5. Neu starten. Eigene Start-, Status-, Warn- und Fehlerlogs sind standardmäßig aus.

Benötigt: BepInExPack Valheim 5.4.2351 und PUP FPS 1.0.33. FGN-Unterstützung wurde gegen FiresGhettoNetworking 1.5.36 und 1.5.28 geprüft (Assembly-Version 1.4.67.0). FGN ist eine weiche BepInEx-Abhängigkeit für die Ladefolge; keine Pflichtabhängigkeit des ZIPs. Seine DLL bleibt unverändert. Für den aktuellen Serverbetrieb Server und alle Clients auf dieselbe FGN-Version abgleichen. Ihre tatsächlich verwendeten Versionen waren beim Vorfall unbekannt. FGN 1.5.36 lässt mit der vorgelegten Einstellung abweichende Versionen zu und schaltet für sie einige Netzwerkfunktionen ab; das schließt Ladeverzögerungen oder eine Wechselwirkung nicht aus. Der Patch ändert keine FGN-Einstellungen, Ownership-Verteilung oder Netzwerkprotokolle.

Originale PUP-DLL und bisherige Support-Test-DLL werden erkannt. Eine bereits korrigierte DLL kann bleiben; der Statikzweig wird nicht erneut invertiert. Andere PUP-Binaries werden abgewiesen und der Zusatzmod bleibt inaktiv; mit aktivierter Diagnose erscheint der Grund. Keine separate Cart-DLL nötig.

Schutz

  • Carts: Chassis und vorhandene Rad-Rigidbodies werden bei ausstehender PUP-Kollision vorübergehend mit Constraints gesperrt.
  • Tiere/Monster: Character-Rigidbody wird ebenso gehalten. PUPs gemeinsame Vorbereitung liefert währenddessen false, sodass Bewegung und AI pausieren und PUP keine zweite kinematische Sperre setzt. Gezähmte Tiere eingeschlossen; Spieler bleiben vom neuen Guard ausgenommen.
  • FGN-Übergaben: Vor bevorstehender lokaler Mob-Übernahme werden aktuelle Physikposition und die von FGN verwendete ZDO-Zielposition geprüft. Nach FGN und nativem ZSyncTransform.CustomFixedUpdate erfolgt ein Nachcheck der tatsächlichen Rigidbody-Position, auch bei übersprungener nativer Methode. Fehlende Kollision hält den Körper vor der nächsten normalen Unity-Physiksimulation. FGN darf weiterhin Besitz und Position abgleichen.
  • Freigabe: Aktuelle Clusterdaten, passende Cache-Version und PUPs exakte Kollisionsvorbereitung müssen vorliegen. Keine Freigabe nach bloßem Timer. Vor Empfang des Multiplayer-Manifests kann auch außerhalb später bekannter Clustergebiete kurz gehalten werden.
  • Statik: Bisherige m_noSupportWear-Korrektur plus vorgelagerte und erneute Bereitschaftsprüfung. Ausstehende Cluster-Kollision darf keine neue native Supportberechnung oder Statikzerstörung auslösen. Nach Freigabe normale Statik.

Guard arbeitet im Multiplayer. Die Statikzweig-Korrektur bleibt wie der frühere DLL-Patch auch im Singleplayer vorhanden. Keine neuen Netzwerkpakete, ZDO-Schreibvorgänge, Besitzübernahmen, Positionskorrekturen oder Änderungen an Gravitation/isKinematic. PUP kann temporäre Kollisionsproxies erzeugen.

Ablauf und laufende Kosten

  1. Beim ersten lokalen Zugriff werden Manifest/Records/Cache/Restore und die erforderlichen Collider geprüft; neue Proxys vor Freigabe synchronisiert.
  2. PUP-Schreibereignisse invalidieren betroffene Zellen vor der Änderung. Erfasst sind auch Coroutine-MoveNext, Aktivierung, Entfernen, geplante Zerstörung, Listen-/Manifeständerungen und neue/veröffentlichte Roots.
  3. Ohne solche Änderungen prüfen Statik/Carts/Mobs nur lokale Freigabe, Welt/OwnerRevision und erforderliches Abfragevolumen. Kein erneutes Auslesen von Root-Collidern, Fingerprints oder vollständigen Zell-Metadaten.
  4. Relevante Änderungen, neue Abdeckung beim Bewegen und Besitzerwechsel lösen sofort wieder die vollständige lokale Prüfung aus. Ausstehende Vorbereitung wird beim nächsten regulären Guard-Aufruf erneut versucht, ohne zusätzlichen Warte-Timer oder Freigabe-Timeout. Änderungen außerhalb der gespeicherten Umgebung erfordern keine erneute lokale Kollisionsvorbereitung.

Stabile native Statik-Bounds werden weiter berechnet/verglichen; Veränderungen daran dürfen den Cache nicht umgehen. Vollständig geprüfte Roots decken weitere Bewegung innerhalb derselben Zellumgebung ab. Ein lokaler Proxy-Fallback deckt das vorbereitete Volumen ab; zusätzliche Geometrie wird unmittelbar vorbereitet. Extrem große native Bounds behalten den konservativen ungecachten Pfad.

Kosten sind klein, nicht null: Actor-Guards laufen weiter vor normaler Physik/AI und vor/nach Network-Sync. Sie lesen Besitzer/Revision/Position und nutzen den Cache. PUPs vorhandene Retention-/Proxy-Wartung berücksichtigt die letzte Nutzung. Kein neuer Wartungs-Update oder Weltscan. Aufbau/Prüfung und Aufräumen von Freigaben benötigen Arbeit und Speicher während Änderungen; Registrierung vieler Bauteile erzeugt keinen quadratischen Listenscan.

PUPs eigene Mob-Routine läuft weiter, einschließlich Freigabe früherer isKinematic-Sperren. Nur deren doppelte exakte Kollisionsvorbereitung wird während einer geschützten Mob-Abfrage durch denselben lokalen Cache ersetzt. Spieler und ungeschützte/noch ungültige Mob-Views behalten PUPs native Route. Native Position-/Aktivierungs-/Destroy-Aufrufe werden mit unveränderten Argumenten weitergereicht; der Patch setzt keine eigenen Netzwerkpositionen. Eigene Constraints und Diagnoseverhalten bleiben erhalten; Logs sind aus.

Der Cache ist auf die beiden hashgeprüften PUP-1.0.33-Binaries abgestimmt. Er beobachtet PUPs eigene Schreibstellen, keine globalen Unity-Setter. Unangekündigte Eingriffe weiterer Mods in private PUP-Daten/Collider sind nicht als kompatibel bestätigt. Das ist keine absolute Garantie gegen alle PhysX-/Fremdmodfehler.

Logs

Konfigurationsdatei: BepInEx/config/botanic.pup.patch.cfg.

[Diagnostics]
EnableLogs = false

Standardmäßig keine eigenen Start-, HOLD-/RELEASE-, Besitzerwechsel-, Warn- oder Fehlerlogs. BepInEx, PUP und FGN haben ihre eigenen Logeinstellungen. Für Fehlersuche optional EnableLogs = true setzen; bei Bedarf neu starten. Dann erscheinen auch OWNER CHANGE, SYNC RECHECK und FGN destination pending. Warnung nach zehn Sekunden Hold, danach alle 30 Sekunden. Bei einem Fehler der Bewegungs-/Kristall-Hooks werden eigene Bewegungssperren freigegeben und diese Hooks deaktiviert. Ein bereits vollständig installierter Statikschutz bleibt separat aktiv. Lokale Statik-Vorbereitungsfehler bleiben pending. Scheitert die gesamte Initialisierung, steht auch dieser Schutz nicht bereit; Diagnose kann den Grund anzeigen. Ausgeschaltete Logs unterdrücken eigene Fehlermeldungen ebenfalls.

Prüfung und Dedicated-Test

Build und 919 automatisierte Assertions bestanden: 164 bisherige Guard-Prüfungen, 16 Kristallprüfungen, 726 Prüfungen produktiver gemeinsamer Bereitschafts-/Statik-/Eventklassen und 13 Tests der produktiven Mob-Hooks. Managed Stellvertreter für Unity/Actors: kein echter Transport-/PhysX-Test. Die echten PUP-Binaries wurden zusätzlich per Cecil/Signatur-/Rewrite geprüft: 115 beobachtete Methoden, 458 Schreibstellen, darunter 22 MoveNext-Methoden. Echte native PUP-Methoden wurden dabei nicht ausgeführt oder detourt.

Im Managed-Test: 100 unveränderte Statikprüfungen an einem Root mit 1.001 Collidern benötigen 0 Collider-enabled-/Bounds-Abfragen und 0 Hierarchiescans. Je 1.000 aufgewärmte Root-/Proxy-Prüfungen erzeugen dort 0 Abfrage-Allokationen. Initialisierung ist ausgeschlossen; keine Messung der echten Valheim-CPU/FPS. Proxy-Ablauf, Aktivierung, geplante Collider-/Mesh-Zerstörung, Coroutine-Änderungen, lokal unabhängige Bereitschaft, Besitzerwechsel und normale Statik wurden geprüft.

Echter Unity-/Dedicated-Ablauf noch nicht bestätigt. Mit Weltkopie testen: Cart, gezähmtes Tier, wildes Monster und ausschließlich am Cluster abgestützte Bauteile. Mehrmals einloggen, weit weg und zurückgehen, zweiten Spieler beitreten lassen. Insbesondere drei Spieler verwenden: einer lädt noch den Cache, während der dritte beitritt; auch langsame Transfers über 30 Sekunden und die vorgelegte FGN-SSS-Konfiguration prüfen. Danach normale Bewegung, AI und Statik prüfen. Wirklich frei schwebende Bauteile müssen weiterhin Schaden nehmen.

Für FGN Balance Creature Ownership eingeschaltet lassen. Zwei Spieler in Reichweite eines wilden Monsters verwenden und tatsächliche Übergabe auslösen. Optional Diagnose anschalten: Erst OWNER CHANGE bestätigt den Übergabefall. Gezähmte Tiere und Carts verteilt FGNs zusätzlicher Mob-Balancer nicht; sie behalten den allgemeinen Guard und Netzwerk-Sync-Schutz.

Bereits falsche Netzwerkpositionen werden nicht nach oben zurückgesetzt; verlorene Objekte werden nicht rekonstruiert. Der jeweilige Simulationsbesitzer muss den Patch installiert haben. Andere FGN-Versionen sind nicht pauschal blockiert, aber nicht als geprüft einzustufen. Fallende ItemDrops erhalten keinen neuen eigenen Rigidbody-Guard. Die neue Absicherung soll die vorangehende Statikzerstörung verhindern, repariert aber keine bereits zerstörten Öfen oder deren bereits gefallene Drops.

Paket und Rückweg

Struktur wie SmartContainersIgnore-1.3.0.zip:

BotanicPupPatch.dll
README.md
manifest.json
icon.png

Entfernen: Spiel/Server beenden und Zusatz-DLL löschen. Keine neuen Weltdaten bleiben zurück. Eine vorher veränderte PUP-DLL wird dadurch nicht zurückgesetzt; für deren ursprüngliches Verhalten PUP FPS 1.0.33 original installieren.

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.