first commit
This commit is contained in:
commit
52b8c2bf51
5 changed files with 229 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
/target
|
73
Cargo.lock
generated
Normal file
73
Cargo.lock
generated
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "idmangler-lib"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "git+https://github.com/Zatzou/idmangler-lib#9d1b88e2304927383c0efdad5b514a1a555d672b"
|
||||||
|
dependencies = [
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro2"
|
||||||
|
version = "1.0.86"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quote"
|
||||||
|
version = "1.0.37"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "syn"
|
||||||
|
version = "2.0.77"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror"
|
||||||
|
version = "1.0.63"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724"
|
||||||
|
dependencies = [
|
||||||
|
"thiserror-impl",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror-impl"
|
||||||
|
version = "1.0.63"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-ident"
|
||||||
|
version = "1.0.13"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wynntils-crafted-exploit"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"idmangler-lib",
|
||||||
|
]
|
7
Cargo.toml
Normal file
7
Cargo.toml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
[package]
|
||||||
|
name = "wynntils-crafted-exploit"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
idmangler-lib = { git = "https://github.com/Zatzou/idmangler-lib", version = "0.3.0" }
|
0
README.md
Normal file
0
README.md
Normal file
148
src/main.rs
Normal file
148
src/main.rs
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
use std::i32;
|
||||||
|
|
||||||
|
use idmangler_lib::{
|
||||||
|
decode,
|
||||||
|
encoding::{decode_string, encode_string},
|
||||||
|
types::{
|
||||||
|
ConsumableType, CustomStat, Effect, EffectType, GearType, ItemType, Powders, RollType,
|
||||||
|
SkillType, Stat, TransformVersion,
|
||||||
|
},
|
||||||
|
CustomConsumableTypeData, CustomGearTypeData, CustomIdentificationData, DataEncoder,
|
||||||
|
DurabilityData, EffectsData, EndData, IdentificationData, NameData, PowderData,
|
||||||
|
RequirementsData, RerollData, ShinyData, StartData, TypeData, UsesData,
|
||||||
|
};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut out = Vec::new();
|
||||||
|
let ver = TransformVersion::Version1;
|
||||||
|
|
||||||
|
StartData(ver).encode(ver, &mut out).unwrap();
|
||||||
|
|
||||||
|
TypeData(ItemType::CraftedConsu)
|
||||||
|
.encode(ver, &mut out)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
NameData(String::from("\n".repeat(220)))
|
||||||
|
.encode(ver, &mut out)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let mut ids = Vec::new();
|
||||||
|
|
||||||
|
for i in 0..78 {
|
||||||
|
if i == 15 || i == 71 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ids.push(Stat {
|
||||||
|
kind: i,
|
||||||
|
base: Some(63),
|
||||||
|
roll: RollType::Value(255),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// IdentificationData {
|
||||||
|
// identifications: vec![Stat {
|
||||||
|
// kind: 85,
|
||||||
|
// base: Some(100),
|
||||||
|
// roll: RollType::Value(100),
|
||||||
|
// }],
|
||||||
|
// extended_encoding: true,
|
||||||
|
// }
|
||||||
|
// .encode(ver, &mut out)
|
||||||
|
// .unwrap();
|
||||||
|
|
||||||
|
// let mut powdata = Vec::new();
|
||||||
|
|
||||||
|
// for _ in 0..51 {
|
||||||
|
// powdata.extend_from_slice(&[
|
||||||
|
// (Powders::AIR, 4),
|
||||||
|
// (Powders::EARTH, 4),
|
||||||
|
// (Powders::FIRE, 4),
|
||||||
|
// (Powders::THUNDER, 4),
|
||||||
|
// (Powders::WATER, 4),
|
||||||
|
// ]);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// PowderData {
|
||||||
|
// powder_slots: 255,
|
||||||
|
// powders: powdata,
|
||||||
|
// }
|
||||||
|
// .encode(ver, &mut out)
|
||||||
|
// .unwrap();
|
||||||
|
|
||||||
|
// RerollData(255).encode(ver, &mut out).unwrap();
|
||||||
|
|
||||||
|
// ShinyData {
|
||||||
|
// id: 2,
|
||||||
|
// val: i64::MAX, //- 0b0100_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000,
|
||||||
|
// }
|
||||||
|
// .encode(ver, &mut out)
|
||||||
|
// .unwrap();
|
||||||
|
|
||||||
|
CustomConsumableTypeData(ConsumableType::Potion)
|
||||||
|
.encode(ver, &mut out)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
UsesData {
|
||||||
|
current: 255,
|
||||||
|
max: 0,
|
||||||
|
}
|
||||||
|
.encode(ver, &mut out)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// CustomGearTypeData(GearType::Boots)
|
||||||
|
// .encode(ver, &mut out)
|
||||||
|
// .unwrap();
|
||||||
|
|
||||||
|
// DurabilityData {
|
||||||
|
// effect_strenght: 255,
|
||||||
|
// current: 0,
|
||||||
|
// max: 0,
|
||||||
|
// }
|
||||||
|
// .encode(ver, &mut out)
|
||||||
|
// .unwrap();
|
||||||
|
|
||||||
|
RequirementsData {
|
||||||
|
level: 123,
|
||||||
|
class: None,
|
||||||
|
skills: Vec::new(), // vec![(SkillType::Strenght, 255)],
|
||||||
|
}
|
||||||
|
.encode(ver, &mut out)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// EffectsData {
|
||||||
|
// effects: vec![Effect {
|
||||||
|
// kind: EffectType::Mana,
|
||||||
|
// value: i32::MIN,
|
||||||
|
// }],
|
||||||
|
// }
|
||||||
|
// .encode(ver, &mut out)
|
||||||
|
// .unwrap();
|
||||||
|
|
||||||
|
// CustomIdentificationData {
|
||||||
|
// idents: vec![CustomStat {
|
||||||
|
// kind: 81,
|
||||||
|
// max: i32::MAX,
|
||||||
|
// }],
|
||||||
|
// }
|
||||||
|
// .encode(ver, &mut out)
|
||||||
|
// .unwrap();
|
||||||
|
|
||||||
|
EndData.encode(ver, &mut out).unwrap();
|
||||||
|
|
||||||
|
println!("{}", encode_string(&out));
|
||||||
|
println!("lenght: {}", encode_string(&out).chars().count());
|
||||||
|
|
||||||
|
for b in out {
|
||||||
|
print!("{:02X}", b);
|
||||||
|
}
|
||||||
|
println!();
|
||||||
|
|
||||||
|
// decode test
|
||||||
|
// let input = "";
|
||||||
|
// let bytes = decode_string(input);
|
||||||
|
|
||||||
|
// let out = decode(&bytes).unwrap();
|
||||||
|
|
||||||
|
// println!("{:#?}", out);
|
||||||
|
// println!("{:#?}", out.get::<NameData>())
|
||||||
|
}
|
Loading…
Reference in a new issue