ackwell / ironworks Goto Github PK
View Code? Open in Web Editor NEWModular FFXIV data toolkit written in rust.
License: MIT License
Modular FFXIV data toolkit written in rust.
License: MIT License
Encountered when trying to extract every file in the game (lmao).
use ironworks::{ffxiv, sqpack::SqPack, Ironworks};
use std::path::Path;
fn main() {
let game_path = Path::new("G:/Steam/steamapps/common/FINAL FANTASY XIV Online");
let ironworks = Ironworks::new().resource(SqPack::new(ffxiv::FsResource::at(game_path)));
let file = ironworks
.file::<Vec<u8>>("chara/monster/m0023/obj/body/b0003/texture/v01_m0023b0003_s.tex");
println!("{:#?}", file);
}
thread 'main' panicked at 'assertion failed: `(left == right)`
left: `16000`,
right: `6`: Block info and header decompressed size differs.', C:\Users\Julian\.cargo\registry\src\github.com-1ecc6299db9ec823\ironworks-0.3.1\src\sqpack\file.rs:55:5
Some scalar fields have additional semantics, i.e. a numeric column can be an icon, which implies a path within the game data to an icon texture, despite no explicit table relation existing for this lookup.
This will require changes to the schema to include a (presumably optional) metadata field on scalars.
Of further note, relationships are technically a scalar in the source sheet, so there may be room to redefine relationships as metadata on a scalar.
Schema provider currently clones StC on first boot and never updates it. Need to add capability to schema module to update the repo, and a regular interval in bm to call it.
use std::path::Path;
use ironworks::{ffxiv, sqpack::SqPack, Ironworks};
fn main() {
let game_path = Path::new("G:/Steam/steamapps/common/FINAL FANTASY XIV Online");
let mut ironworks = Ironworks::new();
ironworks.add_resource(SqPack::new(ffxiv::FsResource::at(game_path)));
ironworks.file::<Vec<u8>>("chara/monster/m0678/obj/body/b0001/texture/v01_m0678b0001_b_d.tex");
}
thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 0', C:\Users\Julian\.cargo\git\checkouts\ironworks-836e4c5d0f0f4516\ed0af56\ironworks\src\sqpack\block\stream.rs:62:25
Search will need per-column explicit value filtering, i.e. numeric range checks and so on. Given search indices are decoupled from sheet schemas, and hence do not resolve any references, this will be a bit fiddly.
If the column filters are built to be sufficiently structured, it will likely be possible to trace a set of filters to the leaf fields, and then walk back up with a search at each reference to find matches.
Likely lots of optimisation opportunities on that.
Search field specifier can probably share some concept or implementation with reference targeting in schemas.
Using version 0.3.0 ironworks fails to compile if the ffxiv feature is enabled without excel.
cargo 1.75.0-nightly (794d0a825 2023-10-03)
, rustc 1.75.0-nightly (cae0791da 2023-10-05)
. After a cargo clean && cargo build
:
error[E0422]: cannot find struct, variant or union type `LineColumn` in crate `proc_macro`
--> C:\Users\Julian\.cargo\registry\src\index.crates.io-6f17d22bba15001f\proc-macro2-1.0.53\src\wrapper.rs:475:33
|
475 | let proc_macro::LineColumn { line, column } = s.start();
| ^^^^^^^^^^ not found in `proc_macro`
|
help: consider importing this struct through its public re-export
|
1 + use crate::LineColumn;
|
help: if you import `LineColumn`, refer to it directly
|
475 - let proc_macro::LineColumn { line, column } = s.start();
475 + let LineColumn { line, column } = s.start();
|
error[E0422]: cannot find struct, variant or union type `LineColumn` in crate `proc_macro`
--> C:\Users\Julian\.cargo\registry\src\index.crates.io-6f17d22bba15001f\proc-macro2-1.0.53\src\wrapper.rs:489:33
|
489 | let proc_macro::LineColumn { line, column } = s.end();
| ^^^^^^^^^^ not found in `proc_macro`
|
help: consider importing this struct through its public re-export
|
1 + use crate::LineColumn;
|
help: if you import `LineColumn`, refer to it directly
|
489 - let proc_macro::LineColumn { line, column } = s.end();
489 + let LineColumn { line, column } = s.end();
|
error[E0635]: unknown feature `proc_macro_span_shrink`
--> C:\Users\Julian\.cargo\registry\src\index.crates.io-6f17d22bba15001f\proc-macro2-1.0.53\src\lib.rs:92:30
|
92 | feature(proc_macro_span, proc_macro_span_shrink)
|
Running cargo update proc-macro2
leads to even more spooky errors, too long to post.
Sheet endpoints would benefit from a query argument(s) to control the columns that will be returned in the response. While the query arguments are necessarily strings, they should be parsed into some form of structured representation that can be "walked" alongside the schema.
Open questions:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.