GithubHelp home page GithubHelp logo

phoriah / rbx-dom Goto Github PK

View Code? Open in Web Editor NEW

This project forked from rojo-rbx/rbx-dom

0.0 0.0 0.0 3.27 MB

Roblox DOM and (de)serialization implementation in Rust

License: MIT License

Shell 0.12% Lua 4.23% Rust 95.60% Batchfile 0.05%

rbx-dom's Introduction

rbx-dom

rbx-dom is a collection of cross-platform libraries that enables any software to interact with Roblox instances.

Documentation about the project is hosted at dom.rojo.space.

At this moment, we do not specify a MSRV for any project in rbx-dom. If you need to build one of these libraries with an outdated version of Rust, please open an issue explaining what blockers there are to you updating Cargo, what version you would need us to support, and why.

rbx_dom_weak on crates.io rbx_dom_weak docs

Weakly-typed Roblox DOM implementation. Defines types for representing instances and properties on them.

rbx_types on crates.io rbx_types docs

Contains Roblox's value types like Vector3 and NumberSequence. Used by crates like rbx_dom_weak and a future rbx_dom_strong crate to let them share types and conversions.

rbx_xml on crates.io rbx_xml docs

Serializer and deserializer for for Roblox's XML model and place formats, rbxmx and rbxlx.

rbx_binary on crates.io rbx_binary docs

Serializer and deserializer for for Roblox's binary model and place formats, rbxm and rbxl.

rbx_reflection on crates.io rbx_reflection docs

Roblox reflection types for working with Instances in external tooling.

rbx_reflection_database on crates.io rbx_reflection_database docs

Bundled reflection database using types from rbx_reflection. Intended for users migrating from rbx_reflection 4.x and users who need reflection information statically.

Command line utility to generate a reflection database for rbx_dom_lua and rbx_reflection_database.

Command line utility to convert and debug Roblox model files.

Roblox Lua implementation of DOM APIs, allowing Instance reflection from inside Roblox. Uses a data format that's compatible with rbx_dom_weak to facilitate communication with applications outside Roblox about instances.

Property Type Coverage

Property Type Example Property rbx_types rbx_dom_lua rbx_xml rbx_binary
Axes ArcHandles.Axes
BinaryString Terrain.MaterialColors
Bool Part.Anchored
BrickColor Part.BrickColor
Bytecode N/A
CFrame Camera.CFrame
Color3 Lighting.Ambient
Color3uint8 Part.BrickColor
ColorSequence Beam.Color
Content Decal.Texture
Enum Part.Shape
Faces Handles.Faces
Float32 Players.RespawnTime
Float64 Sound.PlaybackLoudness
Font TextLabel.Font
Int32 Frame.ZIndex
Int64 Player.UserId
NumberRange ParticleEmitter.Lifetime
NumberSequence Beam.Transparency
OptionalCFrame Model.WorldPivotData
PhysicalProperties Part.CustomPhysicalProperties
ProtectedString ModuleScript.Source
Ray RayValue.Value
Rect ImageButton.SliceCenter
Ref Model.PrimaryPart
Region3 N/A
Region3int16 Terrain.MaxExtents
SecurityCapabilities Folder.SecurityCapabilities
SharedString N/A
String Instance.Name
UDim UIListLayout.Padding
UDim2 Frame.Size
UniqueId Instance.UniqueId
Vector2 ImageLabel.ImageRectSize
Vector2int16 N/A
Vector3 Part.Size
Vector3int16 TerrainRegion.ExtentsMax
QDir Studio.Auto-Save Path
QFont Studio.Font

✔ Implemented | ❌ Unimplemented | ➖ Partially Implemented | ⛔ Never

Outcome

This project has unveiled a handful of interesting bugs and quirks in Roblox!

  • GuiMain.DisplayOrder is uninitialized, so its default value isn't stable
  • MaxPlayersInternal and PreferredPlayersInternal on Players are scriptable and accessible by the command bar
  • Instantiating a NetworkClient will turn your edit session into a game client and stop you from sending HTTP requests
  • ContentProvider.RequestQueueSize is mistakenly marked as serializable
  • Trying to invoke game:GetService("Studio") causes a unique error: singleton Studio already exists
  • Color3 properties not serialized as Color3uint8 would have their colors mistakenly clamped in the XML place format. This was bad for properties on Lighting.
  • ColorSequence's XML serialization contains an extra value per keypoint that was intended to be used as an envelope value, but was never implemented.

For Maintainers

Cutting new releases is not currently as optimized as it should be. While we work on improving it, packages need to be published in a specific order to make sense. The order that currently works well is:

  1. rbx_types
  2. rbx_dom_weak and rbx_reflection
  3. rbx_reflection_database
  4. rbx_binary and rbx_xml

The process for publishing these is:

  1. Decide a new version number, following SemVer
  2. Update changelog to list new release under its own heading
  3. Adjust versions of local dependencies to be the new release (this is why releases must happen in a specific order)
  4. Increment version in Cargo.toml
  5. Add a git tag in the format library_name-vMAJOR.MINOR.PATCH at the commit that incremented the Cargo version
  6. Publish to Cargo

License

rbx-dom is available under the MIT license. See LICENSE.txt for details.

rbx-dom's People

Contributors

lpghatguy avatar dekkonot avatar kennethloeffler avatar kampfkarren avatar dervexdev avatar phoriah avatar maximumadhd avatar thattimothy avatar nezuo avatar boegie19 avatar barocena avatar wackbyte avatar st0nerhat avatar regginator avatar jeparlefrancais avatar cliffchapmanrbx avatar blackshibe avatar glowingumbreon avatar metatablecat avatar corecii avatar amaranthinecodices avatar johnnymorganz avatar cassanof avatar 1enrique3 avatar anaminus avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.