UpLiftEd

UpLiftEd 1.2.6

Need to delete data file to use this update!​

Door / Elevator Item Payment​

Adds the option to pay:
  • Door cost using vanilla Garage Doors (1 per door)
  • Floor cost using vanilla Elevator items (1 per floor)
Config

BuildCostItems.HijackVanillaElevatorPlacement

Permissions

AllowDoorItemOrCost
AllowElevatorItemPerFloor


Data Handling Changes​

  • Lifts are saved only when an elevator becomes Ready
  • No full data save on server save or plugin unload
  • Cleaner unload process using:
    • crossReference
    • Pooled lists
This reduces unnecessary save operations and improves unload safety.


UI Changes​

  • Replaced dual options with a single “Remove Lift” button
    (removes previous “Full Remove” "No longer needed")
  • Added new localization strings:
    • "Or"
    • "Elevators"
    • "Garage Doors"
These support the new door/elevator item cost UI.


⚙ Defaults Updated​

  • Default DoorSkin ID updated
  • Added new default config keys for:
    • Door item payment
    • Elevator item per floor payment


Construction​

  • No longer places walls or roof on Elevator assembly. Only places Doorframes and doors if not already placed. Allows the player to build their walls how they want them and no longer destroys roofs, floors or deplorables due to replacement of entities and stability issues.
  • Vanilla elevator placement override (new)
    • Automatic conversion of vanilla elevators placements! "Config Option"
    • Optional item-based cost for elevator placement to use Vanilla Elevators as cost.
  • Added ability to convert all vanilla elevators already placed into UpLifted Elevators.
    • Console command: upl.convert_all
    • Chat commands:
      • /convert = Admin command to convert all vanilla elevators
      • /convert.here = Admin command to convert the elevator you are looking at
  • Elevator location on screen display.
    • Chat commands:
      • /liftmap = Player command to see all elevator locations on the map
      • /showlift = Admin command to see their lifts.
  • Performance
    • Replaced whole-scene scans with an active registry: activeLifts (HashSet) plus crossReference map to track all lift parts. This avoids FindObjectsOfType<Elevator>() on save/load and during lookups.
    • Throttled network work inside Elevator.Update() (via _lastNetSync) to reduce per-frame net traffic and recursive sync churn.
    • Centralized event-driven tracking (spawn/build/deploy hooks) reduces incidental polling and missed-state edge cases.
    • Same robust ELStorage schema retained for compatibility.
    • Save/Load now operate over known active lifts, improving reliability and speed when persisting large worlds.
    • Defensive load path kept: corrupt entries are safely skipped or halted per config (data safety unchanged).
    • Net effect
    • Better scalability on busy servers (fewer global scans, fewer per-frame net ops).
    • Smoother player flow when upgrading from vanilla elevators.
    • More reliable persistence with explicit, live-tracked elevator sets.
  • Update for Forced Wipe.
  • Updated calls: inv.FindItemsByItemID(foundItems, -946369541) and inv.FindItemsByItemID(list, -946369541)
This is for the coming Rust update. Do not update prior
Updated for pool changes
Revert because I am an idiot
This is for the coming Rust update. Do not update prior

Pool changes per Rust update
Revert because Facepunch
This is for the coming Rust update. Do not update prior
Fixed for Rust update