diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..4b9a056 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,5 @@ +[target.'cfg(unix)'] +runner = "sudo -E" + +[build] +rustflags = ["-C", "target-cpu=native"] \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..da75d43 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,2861 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "abi_stable" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7725ddc1a1204829816071550fdffafe7e66498e7a99e5f703da71801101ccb9" +dependencies = [ + "abi_stable_derive", + "abi_stable_shared", + "core_extensions", + "crossbeam-channel", + "generational-arena", + "libloading", + "lock_api", + "parking_lot 0.11.2", + "paste", + "repr_offset", + "rustc_version 0.4.0", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "abi_stable_derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b9810ef8debee5544010d92dac0b88b32853cd5bd5ca3298243c99e931da0f0" +dependencies = [ + "abi_stable_shared", + "as_derive_utils", + "core_extensions", + "proc-macro2 1.0.69", + "quote 1.0.33", + "rustc_version 0.2.3", + "syn 1.0.109", + "typed-arena", +] + +[[package]] +name = "abi_stable_shared" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece9da89066e018d908b48755e17cdd08a46ce222f84b1f226e837f836f84a5f" +dependencies = [ + "core_extensions", +] + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" + +[[package]] +name = "anstyle-parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" +dependencies = [ + "anstyle", + "windows-sys 0.48.0", +] + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "as_derive_utils" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a26fa495cefb8c86d9ce183b3f39ad11678e54fb3c20e6b7dbd87770811d9b" +dependencies = [ + "core_extensions", + "proc-macro2 1.0.69", + "quote 1.0.33", + "syn 1.0.109", +] + +[[package]] +name = "async-trait" +version = "0.1.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" +dependencies = [ + "proc-macro2 1.0.69", + "quote 1.0.33", + "syn 2.0.38", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core", + "base64", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http", + "http-body", + "hyper", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sha1", + "sync_wrapper", + "tokio", + "tokio-tungstenite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http", + "http-body", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" + +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cglue" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0618788ed53d08a2c1f64a69255b65de151a7f39beaf897296ef7ca0d89c2f20" +dependencies = [ + "abi_stable", + "cglue-macro", + "no-std-compat", + "rustc_version 0.4.0", + "serde", + "tarc", +] + +[[package]] +name = "cglue-gen" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09113ac46fb70539ed96b74af4382516fc25bfc463164eeb0ca036b9f77371d8" +dependencies = [ + "itertools", + "lazy_static", + "proc-macro-crate 2.0.0", + "proc-macro2 1.0.69", + "quote 1.0.33", + "syn 1.0.109", +] + +[[package]] +name = "cglue-macro" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf28b8c74a050973c9972edfad2f32f404bc1ff6725e37d003e7d55504dec1cf" +dependencies = [ + "cglue-gen", + "proc-macro2 1.0.69", + "quote 1.0.33", + "syn 1.0.109", +] + +[[package]] +name = "chrono" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets", +] + +[[package]] +name = "clap" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +dependencies = [ + "heck 0.4.1", + "proc-macro2 1.0.69", + "quote 1.0.33", + "syn 2.0.38", +] + +[[package]] +name = "clap_lex" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" + +[[package]] +name = "coarsetime" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a73ef0d00d14301df35d0f13f5ea32344de6b00837485c358458f1e7f2d27db4" +dependencies = [ + "libc", + "once_cell", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "colored" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6" +dependencies = [ + "is-terminal", + "lazy_static", + "windows-sys 0.48.0", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "core_extensions" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92c71dc07c9721607e7a16108336048ee978c3a8b129294534272e8bac96c0ee" +dependencies = [ + "core_extensions_proc_macros", +] + +[[package]] +name = "core_extensions_proc_macros" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f3b219d28b6e3b4ac87bc1fc522e0803ab22e055da177bff0068c4150c61a6" + +[[package]] +name = "cpufeatures" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +dependencies = [ + "libc", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2 1.0.69", + "quote 1.0.33", + "strsim", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core", + "quote 1.0.33", + "syn 1.0.109", +] + +[[package]] +name = "data-encoding" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" + +[[package]] +name = "dataview" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47a802a2cad0ff4dfc4f3110da174b7a6928c315cae523e88638cfb72941b4d5" + +[[package]] +name = "dataview" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50eb3a329e19d78c3a3dfa4ec5a51ecb84fa3a20c06edad04be25356018218f9" +dependencies = [ + "derive_pod", +] + +[[package]] +name = "deranged" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derive_pod" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2ea6706d74fca54e15f1d40b5cf7fe7f764aaec61352a9fcec58fe27e042fc8" + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enum-primitive-derive" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c375b9c5eadb68d0a6efee2999fef292f45854c3444c86f09d8ab086ba942b0e" +dependencies = [ + "num-traits", + "quote 1.0.33", + "syn 1.0.109", +] + +[[package]] +name = "env_logger" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "field_types" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "152ff4498a8c01b91737676420a1cd84e92724cb610320fdebee6838e4651c9a" +dependencies = [ + "heck 0.3.3", + "quote 0.6.13", + "syn 0.15.44", +] + +[[package]] +name = "fixed-slice-vec" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bb23c599a9ff5b981529099902fe5de8d55ecc8c1f451542da17b8d2d65326e" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" + +[[package]] +name = "futures-io" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" + +[[package]] +name = "futures-macro" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" +dependencies = [ + "proc-macro2 1.0.69", + "quote 1.0.33", + "syn 2.0.38", +] + +[[package]] +name = "futures-sink" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" + +[[package]] +name = "futures-task" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" + +[[package]] +name = "futures-util" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generational-arena" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877e94aff08e743b651baaea359664321055749b398adff8740a7399af7796e7" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" + +[[package]] +name = "goblin" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7666983ed0dd8d21a6f6576ee00053ca0926fb281a5522577a4dbd0f1b54143" +dependencies = [ + "log", + "plain", + "scroll", +] + +[[package]] +name = "h2" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 1.9.3", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" + +[[package]] +name = "http" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.4.10", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" +dependencies = [ + "equivalent", + "hashbrown 0.14.2", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi", + "rustix 0.38.21", + "windows-sys 0.48.0", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "js-sys" +version = "0.3.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" + +[[package]] +name = "local-ip-address" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66357e687a569abca487dc399a9c9ac19beb3f13991ed49f00c144e02cbd42ab" +dependencies = [ + "libc", + "neli", + "thiserror", + "windows-sys 0.48.0", +] + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "memflow" +version = "0.2.0-beta10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7f18ed9240420aadc21d8ba082e4a27c526fd3155a829b4de94013eb7855766" +dependencies = [ + "abi_stable", + "bitflags 1.3.2", + "bumpalo", + "cglue", + "coarsetime", + "dataview 1.0.1", + "dirs", + "fixed-slice-vec", + "goblin", + "hashbrown 0.13.2", + "itertools", + "libloading", + "log", + "memflow-derive", + "memmap", + "no-std-compat", + "once_cell", + "pelite", + "rangemap", + "serde", + "smallvec", + "toml", + "x86_64", +] + +[[package]] +name = "memflow-derive" +version = "0.2.0-beta3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee50e66f855a8a9c93b7c107fab899b25952ba8c7f0e97602a662a99c84fbef7" +dependencies = [ + "darling", + "proc-macro-crate 1.3.1", + "proc-macro2 1.0.69", + "quote 1.0.33", + "syn 1.0.109", +] + +[[package]] +name = "memmap" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "neli" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1100229e06604150b3becd61a4965d5c70f3be1759544ea7274166f4be41ef43" +dependencies = [ + "byteorder", + "libc", + "log", + "neli-proc-macros", +] + +[[package]] +name = "neli-proc-macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c168194d373b1e134786274020dae7fc5513d565ea2ebb9bc9ff17ffb69106d4" +dependencies = [ + "either", + "proc-macro2 1.0.69", + "quote 1.0.33", + "serde", + "syn 1.0.109", +] + +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_threads" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", +] + +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "openssl" +version = "0.10.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" +dependencies = [ + "bitflags 2.4.1", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2 1.0.69", + "quote 1.0.33", + "syn 2.0.38", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.9", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.4.1", + "smallvec", + "windows-targets", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pelite" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c270b1a0c279bbcb4cff3d2294121731c48ee68f0435d26cf71018a853cb890" +dependencies = [ + "dataview 0.1.2", + "no-std-compat", + "pelite-macros", +] + +[[package]] +name = "pelite-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a7cf3f8ecebb0f4895f4892a8be0a0dc81b498f9d56735cb769dc31bf00815b" + +[[package]] +name = "percent-encoding" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" + +[[package]] +name = "pin-project" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +dependencies = [ + "proc-macro2 1.0.69", + "quote 1.0.33", + "syn 2.0.38", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit 0.20.7", +] + +[[package]] +name = "proc-macro2" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "proc-macro2" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" +dependencies = [ + "proc-macro2 0.4.30", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2 1.0.69", +] + +[[package]] +name = "radarflow-cs2" +version = "0.1.0" +dependencies = [ + "anyhow", + "axum", + "chrono", + "clap", + "dataview 1.0.1", + "enum-primitive-derive", + "env_logger", + "field_types", + "futures-util", + "local-ip-address", + "log", + "memflow", + "num-traits", + "reqwest", + "serde", + "serde_json", + "simple_logger", + "tokio", + "tokio-timerfd", + "toml", + "tower", + "tower-http", + "vergen", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rangemap" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "977b1e897f9d764566891689e642653e5ed90c6895106acd005eb4c1d0203991" + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom", + "redox_syscall 0.2.16", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "repr_offset" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb1070755bd29dffc19d0971cab794e607839ba2ef4b69a9e6fbc8733c1b72ea" +dependencies = [ + "tstr", +] + +[[package]] +name = "reqwest" +version = "0.11.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "system-configuration", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver 1.0.20", +] + +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" +dependencies = [ + "bitflags 2.4.1", + "errno", + "libc", + "linux-raw-sys 0.4.10", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scroll" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" +dependencies = [ + "proc-macro2 1.0.69", + "quote 1.0.33", + "syn 2.0.38", +] + +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.190" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.190" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3" +dependencies = [ + "proc-macro2 1.0.69", + "quote 1.0.33", + "syn 2.0.38", +] + +[[package]] +name = "serde_json" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "simple_logger" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2230cd5c29b815c9b699fb610b49a5ed65588f3509d9f0108be3a885da629333" +dependencies = [ + "colored", + "log", + "time", + "windows-sys 0.42.0", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "syn" +version = "0.15.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" +dependencies = [ + "proc-macro2 0.4.30", + "quote 0.6.13", + "unicode-xid", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2 1.0.69", + "quote 1.0.33", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +dependencies = [ + "proc-macro2 1.0.69", + "quote 1.0.33", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sysinfo" +version = "0.29.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a18d114d420ada3a891e6bc8e96a2023402203296a47cdd65083377dad18ba5" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "winapi", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tarc" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f125b47a83cc4bfe253c9a5b7b991a47c315002232f715b4af9248c05f91a2" + +[[package]] +name = "tempfile" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall 0.4.1", + "rustix 0.38.21", + "windows-sys 0.48.0", +] + +[[package]] +name = "termcolor" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +dependencies = [ + "proc-macro2 1.0.69", + "quote 1.0.33", + "syn 2.0.38", +] + +[[package]] +name = "time" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" +dependencies = [ + "deranged", + "itoa", + "libc", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" +dependencies = [ + "time-core", +] + +[[package]] +name = "timerfd" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3fd47d83ad0b5c7be2e8db0b9d712901ef6ce5afbcc6f676761004f5104ea2" +dependencies = [ + "rustix 0.37.27", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot 0.12.1", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.5.5", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +dependencies = [ + "proc-macro2 1.0.69", + "quote 1.0.33", + "syn 2.0.38", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-timerfd" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87eecdae9a9b793843b1df7a64bc136f203443c1ca9889b3c4a39590afa51094" +dependencies = [ + "futures-core", + "libc", + "slab", + "timerfd", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.0.2", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap 2.0.2", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" +dependencies = [ + "bitflags 2.4.1", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + +[[package]] +name = "tstr" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cca3264971090dec0feef3b455a3c178f02762f7550cf4592991ac64b3be2d7e" +dependencies = [ + "tstr_proc_macros", +] + +[[package]] +name = "tstr_proc_macros" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78122066b0cb818b8afd08f7ed22f7fdbc3e90815035726f0840d0d26c0747a" + +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand", + "sha1", + "thiserror", + "url", + "utf-8", +] + +[[package]] +name = "typed-arena" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" + +[[package]] +name = "url" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vergen" +version = "8.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85e7dc29b3c54a2ea67ef4f953d5ec0c4085035c0ae2d325be1c0d2144bd9f16" +dependencies = [ + "anyhow", + "rustc_version 0.4.0", + "rustversion", + "sysinfo", + "time", +] + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "volatile" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "442887c63f2c839b346c192d047a7c87e73d0689c9157b00b53dcc27dd5ea793" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2 1.0.69", + "quote 1.0.33", + "syn 2.0.38", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +dependencies = [ + "quote 1.0.33", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +dependencies = [ + "proc-macro2 1.0.69", + "quote 1.0.33", + "syn 2.0.38", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" + +[[package]] +name = "web-sys" +version = "0.3.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "winnow" +version = "0.5.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3b801d0e0a6726477cc207f60162da452f3a95adb368399bef20a946e06f65c" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "x86_64" +version = "0.14.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b835097a84e4457323331ec5d6eb23d096066cbfb215d54096dcb4b2e85f500" +dependencies = [ + "bit_field", + "bitflags 2.4.1", + "rustversion", + "volatile", +] + +[[package]] +name = "zerocopy" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd66a62464e3ffd4e37bd09950c2b9dd6c4f8767380fabba0d523f9a775bc85a" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "255c4596d41e6916ced49cfafea18727b24d67878fa180ddfd69b9df34fd1726" +dependencies = [ + "proc-macro2 1.0.69", + "quote 1.0.33", + "syn 2.0.38", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..46232ab --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,46 @@ +[package] +name = "radarflow-cs2" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +# dma and memory +memflow = "=0.2.0-beta10" +dataview = "1.0.1" + +# logging +log = "0.4.19" +env_logger = "0.10.0" + +# error handling +anyhow = "1.0.72" + +# tokio +tokio = { version = "1.29.1", features = ["full"] } +field_types = "1.1.0" +futures-util = "0.3.28" + +# serde +serde = { version = "1.0.181", features = ["derive"] } +serde_json = "1.0.104" +toml = "0.7.6" + +# networking +axum = { version = "0.6.20", features = ["ws"] } +tower-http = { version = "0.4.3", features = ["fs"] } +tower = "0.4.13" +tokio-timerfd = "0.2.0" + +# other +local-ip-address = "0.5.4" +enum-primitive-derive = "0.2.2" +num-traits = "0.2.16" +clap = { version = "4.3.19", features = ["derive", "string"] } +simple_logger = "4.2.0" +chrono = "0.4.26" + +[build-dependencies] +reqwest = { version = "0.11.18", features = ["blocking"] } +vergen = { version = "8.0.0", features = ["build", "cargo", "git", "gitcl", "rustc", "si"] } diff --git a/README.md b/README.md new file mode 100644 index 0000000..8349d77 --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +# radarflow +A Web radar for CS:GO using [memflow](https://github.com/memflow/memflow) + +## How can I run this? +First, you need to set up a virtual machine on linux using qemu. +As of now, memflow's pcileech connector is not supported. + +How to set up a VM on linux is way out of scope for this. You can find plenty of information online on how to do it. + +After you have set up your VM, you can clone this repository on your host: +`git clone https://github.com/superyu1337/radarflow.git` + +Now you can run radarflow: +`cargo run --release` + +For an overview of CLI commands, run this: +`cargo run --release -- --help` + +## Detection Status +VAC: ✅ (Undetected) +FaceIt: ❓ (Unknown, could work with proper spoofing) +ESEA: ❓ (Unknown, could work with proper spoofing) diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..76c84d8 --- /dev/null +++ b/build.rs @@ -0,0 +1,42 @@ +use std::error::Error; +use vergen::EmitBuilder; + +fn download(url: &str, to: &str) -> Result<(), Box<dyn Error>> { + let content = reqwest::blocking::get(url) + .unwrap_or_else(|_| panic!("Downloading \"{to}\"")) + .text() + .expect("Convert response to text"); + + std::fs::write(to, content) + .expect("Write offsets to file"); + + Ok(()) +} + +fn main() -> Result<(), Box<dyn Error>> { + + download( + "https://raw.githubusercontent.com/a2x/cs2-dumper/main/generated/client.dll.rs", + "./src/sdk/cs2dumper/client.rs" + ).expect("Failed to download build file"); + + download( + "https://raw.githubusercontent.com/a2x/cs2-dumper/main/generated/offsets.rs", + "./src/sdk/cs2dumper/offsets.rs" + ).expect("Failed to download build file"); + + download( + "https://raw.githubusercontent.com/a2x/cs2-dumper/main/generated/engine2.dll.rs", + "./src/sdk/cs2dumper/engine2.rs" + ).expect("Failed to download build file"); + + EmitBuilder::builder() + .git_sha(true) + .git_commit_date() + .cargo_debug() + .cargo_target_triple() + .rustc_semver() + .rustc_llvm_version() + .emit()?; + Ok(()) +} \ No newline at end of file diff --git a/src/cli.rs b/src/cli.rs new file mode 100644 index 0000000..aff9fcb --- /dev/null +++ b/src/cli.rs @@ -0,0 +1,93 @@ +use std::path::PathBuf; + +use clap::Parser; +use memflow::prelude::Inventory; + +use crate::structs::{Connector, Loglevel}; + +const PORT_RANGE: std::ops::RangeInclusive<usize> = 8000..=65535; +const POLL_RANGE: std::ops::RangeInclusive<usize> = 1..=1000; + +#[derive(Parser)] +#[command(author, version = version(), about, long_about = None)] +pub struct Cli { + /// Connector to use for DMA + #[clap(value_enum, short, long, ignore_case = true, default_value_t = Connector::Qemu)] + pub connector: Connector, + + /// Pcileech device name + #[clap(long, default_value_t = String::from("FPGA"))] + pub pcileech_device: String, + + /// Port to run Webserver on + #[arg(short, long, default_value_t = 8000, value_parser = port_in_range)] + pub port: u16, + + /// Path to serve on webserver + #[arg(short, long, default_value = "./web", value_parser = valid_path)] + pub web_path: PathBuf, + + /// How often per second the DMA thread should poll for data + #[arg(short = 'r', long, default_value_t = 60, value_parser = poll_in_range)] + pub poll_rate: u16, + + /// Loglevel verbosity + #[arg(value_enum, long, short, ignore_case = true, default_value_t = Loglevel::Warn)] + pub loglevel: Loglevel, +} + +fn version() -> String { + let pkg_ver = env!("CARGO_PKG_VERSION"); + let git_hash = option_env!("VERGEN_GIT_SHA").unwrap_or("unknown"); + let commit_date = option_env!("VERGEN_GIT_COMMIT_DATE").unwrap_or("unknown"); + let avail_cons = { + let inventory = Inventory::scan(); + inventory.available_connectors().join(", ") + }; + + format!(" {pkg_ver} (rev {git_hash})\nCommit Date: {commit_date}\nAvailable Connectors: {avail_cons}") +} + +fn port_in_range(s: &str) -> Result<u16, String> { + let port: usize = s + .parse() + .map_err(|_| format!("`{s}` isn't a port number"))?; + if PORT_RANGE.contains(&port) { + Ok(port as u16) + } else { + Err(format!( + "port not in range {}-{}", + PORT_RANGE.start(), + PORT_RANGE.end() + )) + } +} + +fn valid_path(s: &str) -> Result<PathBuf, String> { + let path = PathBuf::from(s); + + if !path.exists() { + return Err("Path does not exist".to_string()) + } + + if !path.is_dir() { + return Err("Path is not a directory".to_string()) + } + + Ok(path) +} + +fn poll_in_range(s: &str) -> Result<u16, String> { + let port: usize = s + .parse() + .map_err(|_| format!("`{s}` isn't a valid number"))?; + if POLL_RANGE.contains(&port) { + Ok(port as u16) + } else { + Err(format!( + "not in range {}-{}", + POLL_RANGE.start(), + POLL_RANGE.end() + )) + } +} \ No newline at end of file diff --git a/src/dma/mod.rs b/src/dma/mod.rs new file mode 100644 index 0000000..607fe84 --- /dev/null +++ b/src/dma/mod.rs @@ -0,0 +1,268 @@ +use ::std::sync::Arc; + +use memflow::prelude::v1::*; +use tokio::{sync::RwLock, time::{Duration, Instant}}; + +use crate::{structs::{Connector, communication::{RadarData, PlayerType, EntityData, PlayerData}}, sdk::{self, cs2dumper, structs::{CPlayerPawn, CCSPlayerController}}}; + +pub struct CheatCtx { + pub process: IntoProcessInstanceArcBox<'static>, + pub client_module: ModuleInfo, + pub engine_module: ModuleInfo, +} + +impl CheatCtx { + pub fn setup(connector: Connector, pcileech_device: String) -> anyhow::Result<CheatCtx> { + let inventory = Inventory::scan(); + + let os = { + if connector == Connector::Pcileech { + let args = Args::new() + .insert("device", &pcileech_device); + + let connector_args = ConnectorArgs::new(None, args, None); + + inventory.builder() + .connector(&connector.to_string()) + .args(connector_args) + .os("win32") + .build()? + } else { + inventory.builder() + .connector(&connector.to_string()) + .os("win32") + .build()? + } + }; + + let mut process = os.into_process_by_name("cs2.exe")?; + + let client_module = process.module_by_name("client.dll")?; + + let engine_module = process.module_by_name("engine2.dll")?; + + let ctx = Self { + process, + client_module, + engine_module, + }; + + Ok(ctx) + } +} + +const SECOND_AS_NANO: u64 = 1000*1000*1000; +static ONCE: std::sync::Once = std::sync::Once::new(); + +pub async fn run(connector: Connector, pcileech_device: String, poll_rate: u16, data_lock: Arc<RwLock<RadarData>>) -> anyhow::Result<()> { + let mut ctx = CheatCtx::setup(connector, pcileech_device)?; + + // Avoid printing warnings and other stuff before the initial prints are complete + tokio::time::sleep(Duration::from_millis(500)).await; + + // For poll rate timing + let should_time = poll_rate != 0; + + let target_interval = Duration::from_nanos(SECOND_AS_NANO / poll_rate as u64); + let mut last_iteration_time = Instant::now(); + let mut missmatch_count = 0; + + loop { + if ctx.process.state().is_dead() { + println!("is dead"); + break; + } + + if sdk::is_ingame(&mut ctx)? { + let globals = sdk::get_globals(&mut ctx)?; + let entity_list = sdk::get_entity_list(&mut ctx)?; + let map_name = sdk::map_name(globals, &mut ctx)?; + + let local = sdk::get_local(&mut ctx)?; + + let local_pawn_ptr: u32 = ctx.process.read(local.ptr() + cs2dumper::client::CCSPlayerController::m_hPlayerPawn)?; + + if let Some(local_pawn) = CPlayerPawn::from_uhandle(local_pawn_ptr, entity_list, &mut ctx) { + let local_yaw = local_pawn.angles(&mut ctx)?.y; + let local_pos = local_pawn.pos(&mut ctx)?; + let mut player_data = Vec::with_capacity(64); + + if local_pawn.is_alive(&mut ctx)? { + player_data.push( + EntityData::Player( + PlayerData::new( + local_pos, + local_yaw, + PlayerType::Local, + false + ) + ) + ); + } + + let max_clients = sdk::max_clients(globals, &mut ctx)?; + + for idx in 1..max_clients { + let list_entry = ctx.process.read_addr64(entity_list + ((8 * (idx & 0x7FFF)) >> 9) + 16)?; + if list_entry.is_null() && !list_entry.is_valid() { + continue; + } + + let player_ptr = ctx.process.read_addr64(list_entry + 120 * (idx & 0x1FF))?; + if player_ptr.is_null() && !player_ptr.is_valid() { + continue; + } + + let pawn_uhandle = ctx.process.read(player_ptr + cs2dumper::client::CCSPlayerController::m_hPlayerPawn)?; + + if let (Some(pawn), player) = (CPlayerPawn::from_uhandle(pawn_uhandle, entity_list, &mut ctx), CCSPlayerController::new(player_ptr)) { + if player.entity_identity(&mut ctx)?.designer_name(&mut ctx)? == "cs_player_controller" && pawn.is_alive(&mut ctx)? { + let pos = pawn.pos(&mut ctx)?; + let angles = pawn.angles(&mut ctx)?; + + let player_type = { + match player.get_player_type(&mut ctx, &local)? { + Some(t) => { + if t == PlayerType::Spectator { continue } else { t } + }, + None => { continue }, + } + }; + + player_data.push( + EntityData::Player( + PlayerData::new( + pos, + angles.y, + player_type, + false + ) + ) + ); + } + } + } + + let mut data = data_lock.write().await; + *data = RadarData::new(true, map_name, player_data, local_yaw) + } + + + + + //let local_pawn = sdk::get_local_pawn(&mut ctx)?; + //let local_pawn = CPlayerPawn::new(local_cs_player_pawn); + + + + + + /* + + let mut next_ent = { + let mut iter_ent = local.to_base(); + while iter_ent.entity_identity(&mut ctx)?.prev_by_class(&mut ctx).is_ok() { + iter_ent = iter_ent.entity_identity(&mut ctx)?.prev_by_class(&mut ctx)?; + } + + iter_ent + }; + + let mut count = 0; + let mut pawn_count = 0; + + println!("prev by class ok? {}", next_ent.entity_identity(&mut ctx)?.prev_by_class(&mut ctx).is_ok()); + + while next_ent.entity_identity(&mut ctx)?.next_by_class(&mut ctx).is_ok() { + count += 1; + let pawn = next_ent.to_controller().pawn(entity_list, &mut ctx)?; + + if let Some(p) = pawn { + pawn_count += 1; + if !p.is_alive(&mut ctx)? { + next_ent = next_ent.entity_identity(&mut ctx).unwrap().next_by_class(&mut ctx).unwrap(); + continue + } + + let pos = p.pos(&mut ctx)?; + let angles = p.angles(&mut ctx)?; + + let player_type = { + match next_ent.to_controller().get_player_type(&mut ctx, &local)? { + Some(t) => { + if t == PlayerType::Spectator { + next_ent = next_ent.entity_identity(&mut ctx).unwrap().next_by_class(&mut ctx).unwrap(); + continue + } else { t } + }, + None => { + next_ent = next_ent.entity_identity(&mut ctx).unwrap().next_by_class(&mut ctx).unwrap(); + continue + }, + } + }; + + player_data.push( + EntityData::Player( + PlayerData::new( + pos, + angles.y, + player_type, + false + ) + ) + ); + } + //let pawn = next_ent.to_controller().pawn2(entity_list, &mut ctx)?; + + next_ent = next_ent.entity_identity(&mut ctx)?.next_by_class(&mut ctx)?; + } + + println!("next by class ok? {}", next_ent.entity_identity(&mut ctx)?.next_by_class(&mut ctx).is_ok()); + + */ + + } else { + let mut data = data_lock.write().await; + *data = RadarData::empty(); + } + + if should_time { + let elapsed = last_iteration_time.elapsed(); + + let remaining = match target_interval.checked_sub(elapsed) { + Some(t) => t, + None => { + if missmatch_count >= 25 { + ONCE.call_once(|| { + log::warn!("Remaining time till target interval was negative more than 25 times"); + log::warn!("You should decrease your poll rate."); + log::warn!("elapsed: {}ns", elapsed.as_nanos()); + log::warn!("target: {}ns", target_interval.as_nanos()); + }); + } else { + missmatch_count += 1; + } + Duration::from_nanos(0) + }, + }; + + #[cfg(target_os = "linux")] + tokio_timerfd::sleep(remaining).await?; + + #[cfg(not(target_os = "linux"))] + tokio::time::sleep(remaining).await; + + log::trace!("polling at {:.2}Hz", SECOND_AS_NANO as f64 / last_iteration_time.elapsed().as_nanos() as f64); + log::trace!("elapsed: {}", elapsed.as_nanos()); + log::trace!("target: {}", target_interval.as_nanos()); + log::trace!("missmatch count: {}", missmatch_count); + + last_iteration_time = Instant::now(); + } + } + + println!("DMA loop exited for some reason"); + + Ok(()) +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..ca51150 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,62 @@ +use ::std::sync::Arc; +use clap::Parser; + +use cli::Cli; +use structs::communication::RadarData; +use tokio::sync::RwLock; + +mod dma; +mod sdk; +mod structs; +mod cli; +mod webserver; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let cli = Cli::parse(); + + if std::env::var("RADARFLOW_LOG").is_err() { + std::env::set_var("RADARFLOW_LOG", "warn") + } + + simple_logger::SimpleLogger::new() + .with_level(cli.loglevel.into()) + .init() + .expect("Initializing logger"); + + let rwlock = Arc::new( + RwLock::new( + RadarData::empty() + ) + ); + + let rwlock_clone = rwlock.clone(); + let dma_handle = tokio::spawn(async move { + if let Err(err) = dma::run(cli.connector, cli.pcileech_device, cli.poll_rate, rwlock_clone).await { + log::error!("Error in dma thread: {}", err.to_string()); + } + + }); + + tokio::spawn(async move { + let future = webserver::run(cli.web_path, cli.port, rwlock); + + if let Ok(my_local_ip) = local_ip_address::local_ip() { + let address = format!("http://{}:{}", my_local_ip, cli.port); + println!("Launched webserver at {}", address); + } else { + let address = format!("http://0.0.0.0:{}", cli.port); + println!("launched webserver at! {}", address); + } + + if let Err(err) = future.await { + log::error!("Error in websocket server: {}", err.to_string()); + } + }); + + if let Err(err) = dma_handle.await { + log::error!("Error when waiting for dma thread: {}", err.to_string()); + } + + Ok(()) +} diff --git a/src/sdk/cs2dumper/client.rs b/src/sdk/cs2dumper/client.rs new file mode 100644 index 0000000..8c086a4 --- /dev/null +++ b/src/sdk/cs2dumper/client.rs @@ -0,0 +1,4138 @@ +/* + * Created using https://github.com/a2x/cs2-dumper + * Fri, 27 Oct 2023 01:03:23 +0000 + */ + +#![allow(non_snake_case, non_upper_case_globals)] + +pub mod ActiveModelConfig_t { + pub const m_Handle: usize = 0x28; // ModelConfigHandle_t + pub const m_Name: usize = 0x30; // CUtlSymbolLarge + pub const m_AssociatedEntities: usize = 0x38; // C_NetworkUtlVectorBase<CHandle<C_BaseModelEntity>> + pub const m_AssociatedEntityNames: usize = 0x50; // C_NetworkUtlVectorBase<CUtlSymbolLarge> +} + +pub mod CAnimGraphNetworkedVariables { + pub const m_PredNetBoolVariables: usize = 0x8; // C_NetworkUtlVectorBase<uint32_t> + pub const m_PredNetByteVariables: usize = 0x20; // C_NetworkUtlVectorBase<uint8_t> + pub const m_PredNetUInt16Variables: usize = 0x38; // C_NetworkUtlVectorBase<uint16_t> + pub const m_PredNetIntVariables: usize = 0x50; // C_NetworkUtlVectorBase<int32_t> + pub const m_PredNetUInt32Variables: usize = 0x68; // C_NetworkUtlVectorBase<uint32_t> + pub const m_PredNetUInt64Variables: usize = 0x80; // C_NetworkUtlVectorBase<uint64_t> + pub const m_PredNetFloatVariables: usize = 0x98; // C_NetworkUtlVectorBase<float> + pub const m_PredNetVectorVariables: usize = 0xB0; // C_NetworkUtlVectorBase<Vector> + pub const m_PredNetQuaternionVariables: usize = 0xC8; // C_NetworkUtlVectorBase<Quaternion> + pub const m_OwnerOnlyPredNetBoolVariables: usize = 0xE0; // C_NetworkUtlVectorBase<uint32_t> + pub const m_OwnerOnlyPredNetByteVariables: usize = 0xF8; // C_NetworkUtlVectorBase<uint8_t> + pub const m_OwnerOnlyPredNetUInt16Variables: usize = 0x110; // C_NetworkUtlVectorBase<uint16_t> + pub const m_OwnerOnlyPredNetIntVariables: usize = 0x128; // C_NetworkUtlVectorBase<int32_t> + pub const m_OwnerOnlyPredNetUInt32Variables: usize = 0x140; // C_NetworkUtlVectorBase<uint32_t> + pub const m_OwnerOnlyPredNetUInt64Variables: usize = 0x158; // C_NetworkUtlVectorBase<uint64_t> + pub const m_OwnerOnlyPredNetFloatVariables: usize = 0x170; // C_NetworkUtlVectorBase<float> + pub const m_OwnerOnlyPredNetVectorVariables: usize = 0x188; // C_NetworkUtlVectorBase<Vector> + pub const m_OwnerOnlyPredNetQuaternionVariables: usize = 0x1A0; // C_NetworkUtlVectorBase<Quaternion> + pub const m_nBoolVariablesCount: usize = 0x1B8; // int32_t + pub const m_nOwnerOnlyBoolVariablesCount: usize = 0x1BC; // int32_t + pub const m_nRandomSeedOffset: usize = 0x1C0; // int32_t + pub const m_flLastTeleportTime: usize = 0x1C4; // float +} + +pub mod CAttributeList { + pub const m_Attributes: usize = 0x8; // C_UtlVectorEmbeddedNetworkVar<CEconItemAttribute> + pub const m_pManager: usize = 0x58; // CAttributeManager* +} + +pub mod CAttributeManager { + pub const m_Providers: usize = 0x8; // CUtlVector<CHandle<C_BaseEntity>> + pub const m_iReapplyProvisionParity: usize = 0x20; // int32_t + pub const m_hOuter: usize = 0x24; // CHandle<C_BaseEntity> + pub const m_bPreventLoopback: usize = 0x28; // bool + pub const m_ProviderType: usize = 0x2C; // attributeprovidertypes_t + pub const m_CachedResults: usize = 0x30; // CUtlVector<CAttributeManager::cached_attribute_float_t> +} + +pub mod CAttributeManager_cached_attribute_float_t { + pub const flIn: usize = 0x0; // float + pub const iAttribHook: usize = 0x8; // CUtlSymbolLarge + pub const flOut: usize = 0x10; // float +} + +pub mod CBaseAnimGraph { // C_BaseModelEntity + pub const m_bInitiallyPopulateInterpHistory: usize = 0xCC0; // bool + pub const m_bShouldAnimateDuringGameplayPause: usize = 0xCC1; // bool + pub const m_bSuppressAnimEventSounds: usize = 0xCC3; // bool + pub const m_bAnimGraphUpdateEnabled: usize = 0xCD0; // bool + pub const m_flMaxSlopeDistance: usize = 0xCD4; // float + pub const m_vLastSlopeCheckPos: usize = 0xCD8; // Vector + pub const m_vecForce: usize = 0xCE8; // Vector + pub const m_nForceBone: usize = 0xCF4; // int32_t + pub const m_pClientsideRagdoll: usize = 0xCF8; // CBaseAnimGraph* + pub const m_bBuiltRagdoll: usize = 0xD00; // bool + pub const m_pRagdollPose: usize = 0xD18; // PhysicsRagdollPose_t* + pub const m_bClientRagdoll: usize = 0xD20; // bool + pub const m_bHasAnimatedMaterialAttributes: usize = 0xD30; // bool +} + +pub mod CBaseAnimGraphController { // CSkeletonAnimationController + pub const m_baseLayer: usize = 0x18; // CNetworkedSequenceOperation + pub const m_animGraphNetworkedVars: usize = 0x40; // CAnimGraphNetworkedVariables + pub const m_bSequenceFinished: usize = 0x1320; // bool + pub const m_flLastEventCycle: usize = 0x1324; // float + pub const m_flLastEventAnimTime: usize = 0x1328; // float + pub const m_flPlaybackRate: usize = 0x132C; // CNetworkedQuantizedFloat + pub const m_flPrevAnimTime: usize = 0x1334; // float + pub const m_bClientSideAnimation: usize = 0x1338; // bool + pub const m_bNetworkedAnimationInputsChanged: usize = 0x1339; // bool + pub const m_nPrevNewSequenceParity: usize = 0x133A; // uint8_t + pub const m_nPrevResetEventsParity: usize = 0x133B; // uint8_t + pub const m_nNewSequenceParity: usize = 0x133C; // int32_t + pub const m_nResetEventsParity: usize = 0x1340; // int32_t + pub const m_nAnimLoopMode: usize = 0x1344; // AnimLoopMode_t + pub const m_hAnimationUpdate: usize = 0x13E4; // AnimationUpdateListHandle_t + pub const m_hLastAnimEventSequence: usize = 0x13E8; // HSequence +} + +pub mod CBasePlayerController { // C_BaseEntity + pub const m_nFinalPredictedTick: usize = 0x548; // int32_t + pub const m_CommandContext: usize = 0x550; // C_CommandContext + pub const m_nInButtonsWhichAreToggles: usize = 0x5D0; // uint64_t + pub const m_nTickBase: usize = 0x5D8; // uint32_t + pub const m_hPawn: usize = 0x5DC; // CHandle<C_BasePlayerPawn> + pub const m_hPredictedPawn: usize = 0x5E0; // CHandle<C_BasePlayerPawn> + pub const m_nSplitScreenSlot: usize = 0x5E4; // CSplitScreenSlot + pub const m_hSplitOwner: usize = 0x5E8; // CHandle<CBasePlayerController> + pub const m_hSplitScreenPlayers: usize = 0x5F0; // CUtlVector<CHandle<CBasePlayerController>> + pub const m_bIsHLTV: usize = 0x608; // bool + pub const m_iConnected: usize = 0x60C; // PlayerConnectedState + pub const m_iszPlayerName: usize = 0x610; // char[128] + pub const m_steamID: usize = 0x698; // uint64_t + pub const m_bIsLocalPlayerController: usize = 0x6A0; // bool + pub const m_iDesiredFOV: usize = 0x6A4; // uint32_t +} + +pub mod CBasePlayerVData { // CEntitySubclassVDataBase + pub const m_sModelName: usize = 0x28; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>> + pub const m_flHeadDamageMultiplier: usize = 0x108; // CSkillFloat + pub const m_flChestDamageMultiplier: usize = 0x118; // CSkillFloat + pub const m_flStomachDamageMultiplier: usize = 0x128; // CSkillFloat + pub const m_flArmDamageMultiplier: usize = 0x138; // CSkillFloat + pub const m_flLegDamageMultiplier: usize = 0x148; // CSkillFloat + pub const m_flHoldBreathTime: usize = 0x158; // float + pub const m_flDrowningDamageInterval: usize = 0x15C; // float + pub const m_nDrowningDamageInitial: usize = 0x160; // int32_t + pub const m_nDrowningDamageMax: usize = 0x164; // int32_t + pub const m_nWaterSpeed: usize = 0x168; // int32_t + pub const m_flUseRange: usize = 0x16C; // float + pub const m_flUseAngleTolerance: usize = 0x170; // float + pub const m_flCrouchTime: usize = 0x174; // float +} + +pub mod CBasePlayerWeaponVData { // CEntitySubclassVDataBase + pub const m_szWorldModel: usize = 0x28; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>> + pub const m_bBuiltRightHanded: usize = 0x108; // bool + pub const m_bAllowFlipping: usize = 0x109; // bool + pub const m_bIsFullAuto: usize = 0x10A; // bool + pub const m_nNumBullets: usize = 0x10C; // int32_t + pub const m_sMuzzleAttachment: usize = 0x110; // CUtlString + pub const m_szMuzzleFlashParticle: usize = 0x118; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> + pub const m_iFlags: usize = 0x1F8; // ItemFlagTypes_t + pub const m_nPrimaryAmmoType: usize = 0x1F9; // AmmoIndex_t + pub const m_nSecondaryAmmoType: usize = 0x1FA; // AmmoIndex_t + pub const m_iMaxClip1: usize = 0x1FC; // int32_t + pub const m_iMaxClip2: usize = 0x200; // int32_t + pub const m_iDefaultClip1: usize = 0x204; // int32_t + pub const m_iDefaultClip2: usize = 0x208; // int32_t + pub const m_iWeight: usize = 0x20C; // int32_t + pub const m_bAutoSwitchTo: usize = 0x210; // bool + pub const m_bAutoSwitchFrom: usize = 0x211; // bool + pub const m_iRumbleEffect: usize = 0x214; // RumbleEffect_t + pub const m_aShootSounds: usize = 0x218; // CUtlMap<WeaponSound_t,CSoundEventName> + pub const m_iSlot: usize = 0x238; // int32_t + pub const m_iPosition: usize = 0x23C; // int32_t +} + +pub mod CBaseProp { // CBaseAnimGraph + pub const m_bModelOverrodeBlockLOS: usize = 0xE80; // bool + pub const m_iShapeType: usize = 0xE84; // int32_t + pub const m_bConformToCollisionBounds: usize = 0xE88; // bool + pub const m_mPreferredCatchTransform: usize = 0xE8C; // matrix3x4_t +} + +pub mod CBodyComponent { // CEntityComponent + pub const m_pSceneNode: usize = 0x8; // CGameSceneNode* + pub const __m_pChainEntity: usize = 0x20; // CNetworkVarChainer +} + +pub mod CBodyComponentBaseAnimGraph { // CBodyComponentSkeletonInstance + pub const m_animationController: usize = 0x470; // CBaseAnimGraphController + pub const __m_pChainEntity: usize = 0x18B0; // CNetworkVarChainer +} + +pub mod CBodyComponentBaseModelEntity { // CBodyComponentSkeletonInstance + pub const __m_pChainEntity: usize = 0x470; // CNetworkVarChainer +} + +pub mod CBodyComponentPoint { // CBodyComponent + pub const m_sceneNode: usize = 0x50; // CGameSceneNode + pub const __m_pChainEntity: usize = 0x1A0; // CNetworkVarChainer +} + +pub mod CBodyComponentSkeletonInstance { // CBodyComponent + pub const m_skeletonInstance: usize = 0x50; // CSkeletonInstance + pub const __m_pChainEntity: usize = 0x440; // CNetworkVarChainer +} + +pub mod CBombTarget { // C_BaseTrigger + pub const m_bBombPlantedHere: usize = 0xCC8; // bool +} + +pub mod CBreachCharge { // C_CSWeaponBase +} + +pub mod CBreachChargeProjectile { // C_BaseGrenade +} + +pub mod CBumpMine { // C_CSWeaponBase +} + +pub mod CBumpMineProjectile { // C_BaseGrenade +} + +pub mod CBuoyancyHelper { + pub const m_flFluidDensity: usize = 0x18; // float +} + +pub mod CCSGO_WingmanIntroCharacterPosition { // C_CSGO_TeamIntroCharacterPosition +} + +pub mod CCSGO_WingmanIntroCounterTerroristPosition { // CCSGO_WingmanIntroCharacterPosition +} + +pub mod CCSGO_WingmanIntroTerroristPosition { // CCSGO_WingmanIntroCharacterPosition +} + +pub mod CCSGameModeRules { + pub const __m_pChainEntity: usize = 0x8; // CNetworkVarChainer +} + +pub mod CCSGameModeRules_Deathmatch { // CCSGameModeRules + pub const m_bFirstThink: usize = 0x30; // bool + pub const m_bFirstThinkAfterConnected: usize = 0x31; // bool + pub const m_flDMBonusStartTime: usize = 0x34; // GameTime_t + pub const m_flDMBonusTimeLength: usize = 0x38; // float + pub const m_nDMBonusWeaponLoadoutSlot: usize = 0x3C; // int16_t +} + +pub mod CCSGameModeRules_Noop { // CCSGameModeRules +} + +pub mod CCSGameModeRules_Scripted { // CCSGameModeRules +} + +pub mod CCSGameModeScript { // CBasePulseGraphInstance +} + +pub mod CCSObserver_CameraServices { // CCSPlayerBase_CameraServices +} + +pub mod CCSObserver_MovementServices { // CPlayer_MovementServices +} + +pub mod CCSObserver_ObserverServices { // CPlayer_ObserverServices + pub const m_hLastObserverTarget: usize = 0x58; // CEntityHandle + pub const m_vecObserverInterpolateOffset: usize = 0x5C; // Vector + pub const m_vecObserverInterpStartPos: usize = 0x68; // Vector + pub const m_flObsInterp_PathLength: usize = 0x74; // float + pub const m_qObsInterp_OrientationStart: usize = 0x80; // Quaternion + pub const m_qObsInterp_OrientationTravelDir: usize = 0x90; // Quaternion + pub const m_obsInterpState: usize = 0xA0; // ObserverInterpState_t + pub const m_bObserverInterpolationNeedsDeferredSetup: usize = 0xA4; // bool +} + +pub mod CCSObserver_UseServices { // CPlayer_UseServices +} + +pub mod CCSObserver_ViewModelServices { // CPlayer_ViewModelServices +} + +pub mod CCSPlayerBase_CameraServices { // CPlayer_CameraServices + pub const m_iFOV: usize = 0x210; // uint32_t + pub const m_iFOVStart: usize = 0x214; // uint32_t + pub const m_flFOVTime: usize = 0x218; // GameTime_t + pub const m_flFOVRate: usize = 0x21C; // float + pub const m_hZoomOwner: usize = 0x220; // CHandle<C_BaseEntity> + pub const m_flLastShotFOV: usize = 0x224; // float +} + +pub mod CCSPlayerController { // CBasePlayerController + pub const m_pInGameMoneyServices: usize = 0x6D0; // CCSPlayerController_InGameMoneyServices* + pub const m_pInventoryServices: usize = 0x6D8; // CCSPlayerController_InventoryServices* + pub const m_pActionTrackingServices: usize = 0x6E0; // CCSPlayerController_ActionTrackingServices* + pub const m_pDamageServices: usize = 0x6E8; // CCSPlayerController_DamageServices* + pub const m_iPing: usize = 0x6F0; // uint32_t + pub const m_bHasCommunicationAbuseMute: usize = 0x6F4; // bool + pub const m_szCrosshairCodes: usize = 0x6F8; // CUtlSymbolLarge + pub const m_iPendingTeamNum: usize = 0x700; // uint8_t + pub const m_flForceTeamTime: usize = 0x704; // GameTime_t + pub const m_iCompTeammateColor: usize = 0x708; // int32_t + pub const m_bEverPlayedOnTeam: usize = 0x70C; // bool + pub const m_flPreviousForceJoinTeamTime: usize = 0x710; // GameTime_t + pub const m_szClan: usize = 0x718; // CUtlSymbolLarge + pub const m_sSanitizedPlayerName: usize = 0x720; // CUtlString + pub const m_iCoachingTeam: usize = 0x728; // int32_t + pub const m_nPlayerDominated: usize = 0x730; // uint64_t + pub const m_nPlayerDominatingMe: usize = 0x738; // uint64_t + pub const m_iCompetitiveRanking: usize = 0x740; // int32_t + pub const m_iCompetitiveWins: usize = 0x744; // int32_t + pub const m_iCompetitiveRankType: usize = 0x748; // int8_t + pub const m_iCompetitiveRankingPredicted_Win: usize = 0x74C; // int32_t + pub const m_iCompetitiveRankingPredicted_Loss: usize = 0x750; // int32_t + pub const m_iCompetitiveRankingPredicted_Tie: usize = 0x754; // int32_t + pub const m_nEndMatchNextMapVote: usize = 0x758; // int32_t + pub const m_unActiveQuestId: usize = 0x75C; // uint16_t + pub const m_nQuestProgressReason: usize = 0x760; // QuestProgress::Reason + pub const m_unPlayerTvControlFlags: usize = 0x764; // uint32_t + pub const m_iDraftIndex: usize = 0x790; // int32_t + pub const m_msQueuedModeDisconnectionTimestamp: usize = 0x794; // uint32_t + pub const m_uiAbandonRecordedReason: usize = 0x798; // uint32_t + pub const m_bEverFullyConnected: usize = 0x79C; // bool + pub const m_bAbandonAllowsSurrender: usize = 0x79D; // bool + pub const m_bAbandonOffersInstantSurrender: usize = 0x79E; // bool + pub const m_bDisconnection1MinWarningPrinted: usize = 0x79F; // bool + pub const m_bScoreReported: usize = 0x7A0; // bool + pub const m_nDisconnectionTick: usize = 0x7A4; // int32_t + pub const m_bControllingBot: usize = 0x7B0; // bool + pub const m_bHasControlledBotThisRound: usize = 0x7B1; // bool + pub const m_bHasBeenControlledByPlayerThisRound: usize = 0x7B2; // bool + pub const m_nBotsControlledThisRound: usize = 0x7B4; // int32_t + pub const m_bCanControlObservedBot: usize = 0x7B8; // bool + pub const m_hPlayerPawn: usize = 0x7BC; // CHandle<C_CSPlayerPawn> + pub const m_hObserverPawn: usize = 0x7C0; // CHandle<C_CSObserverPawn> + pub const m_bPawnIsAlive: usize = 0x7C4; // bool + pub const m_iPawnHealth: usize = 0x7C8; // uint32_t + pub const m_iPawnArmor: usize = 0x7CC; // int32_t + pub const m_bPawnHasDefuser: usize = 0x7D0; // bool + pub const m_bPawnHasHelmet: usize = 0x7D1; // bool + pub const m_nPawnCharacterDefIndex: usize = 0x7D2; // uint16_t + pub const m_iPawnLifetimeStart: usize = 0x7D4; // int32_t + pub const m_iPawnLifetimeEnd: usize = 0x7D8; // int32_t + pub const m_iPawnBotDifficulty: usize = 0x7DC; // int32_t + pub const m_hOriginalControllerOfCurrentPawn: usize = 0x7E0; // CHandle<CCSPlayerController> + pub const m_iScore: usize = 0x7E4; // int32_t + pub const m_vecKills: usize = 0x7E8; // C_NetworkUtlVectorBase<EKillTypes_t> + pub const m_iMVPs: usize = 0x800; // int32_t + pub const m_bIsPlayerNameDirty: usize = 0x804; // bool +} + +pub mod CCSPlayerController_ActionTrackingServices { // CPlayerControllerComponent + pub const m_perRoundStats: usize = 0x40; // C_UtlVectorEmbeddedNetworkVar<CSPerRoundStats_t> + pub const m_matchStats: usize = 0x90; // CSMatchStats_t + pub const m_iNumRoundKills: usize = 0x108; // int32_t + pub const m_iNumRoundKillsHeadshots: usize = 0x10C; // int32_t + pub const m_unTotalRoundDamageDealt: usize = 0x110; // uint32_t +} + +pub mod CCSPlayerController_DamageServices { // CPlayerControllerComponent + pub const m_nSendUpdate: usize = 0x40; // int32_t + pub const m_DamageList: usize = 0x48; // C_UtlVectorEmbeddedNetworkVar<CDamageRecord> +} + +pub mod CCSPlayerController_InGameMoneyServices { // CPlayerControllerComponent + pub const m_iAccount: usize = 0x40; // int32_t + pub const m_iStartAccount: usize = 0x44; // int32_t + pub const m_iTotalCashSpent: usize = 0x48; // int32_t + pub const m_iCashSpentThisRound: usize = 0x4C; // int32_t + pub const m_nPreviousAccount: usize = 0x50; // int32_t +} + +pub mod CCSPlayerController_InventoryServices { // CPlayerControllerComponent + pub const m_unMusicID: usize = 0x40; // uint16_t + pub const m_rank: usize = 0x44; // MedalRank_t[6] + pub const m_nPersonaDataPublicLevel: usize = 0x5C; // int32_t + pub const m_nPersonaDataPublicCommendsLeader: usize = 0x60; // int32_t + pub const m_nPersonaDataPublicCommendsTeacher: usize = 0x64; // int32_t + pub const m_nPersonaDataPublicCommendsFriendly: usize = 0x68; // int32_t + pub const m_vecServerAuthoritativeWeaponSlots: usize = 0x70; // C_UtlVectorEmbeddedNetworkVar<ServerAuthoritativeWeaponSlot_t> +} + +pub mod CCSPlayer_ActionTrackingServices { // CPlayerPawnComponent + pub const m_hLastWeaponBeforeC4AutoSwitch: usize = 0x40; // CHandle<C_BasePlayerWeapon> + pub const m_bIsRescuing: usize = 0x44; // bool + pub const m_weaponPurchasesThisMatch: usize = 0x48; // WeaponPurchaseTracker_t + pub const m_weaponPurchasesThisRound: usize = 0xA0; // WeaponPurchaseTracker_t +} + +pub mod CCSPlayer_BulletServices { // CPlayerPawnComponent + pub const m_totalHitsOnServer: usize = 0x40; // int32_t +} + +pub mod CCSPlayer_BuyServices { // CPlayerPawnComponent + pub const m_vecSellbackPurchaseEntries: usize = 0x40; // C_UtlVectorEmbeddedNetworkVar<SellbackPurchaseEntry_t> +} + +pub mod CCSPlayer_CameraServices { // CCSPlayerBase_CameraServices + pub const m_flDeathCamTilt: usize = 0x228; // float +} + +pub mod CCSPlayer_GlowServices { // CPlayerPawnComponent +} + +pub mod CCSPlayer_HostageServices { // CPlayerPawnComponent + pub const m_hCarriedHostage: usize = 0x40; // CHandle<C_BaseEntity> + pub const m_hCarriedHostageProp: usize = 0x44; // CHandle<C_BaseEntity> +} + +pub mod CCSPlayer_ItemServices { // CPlayer_ItemServices + pub const m_bHasDefuser: usize = 0x40; // bool + pub const m_bHasHelmet: usize = 0x41; // bool + pub const m_bHasHeavyArmor: usize = 0x42; // bool +} + +pub mod CCSPlayer_MovementServices { // CPlayer_MovementServices_Humanoid + pub const m_flMaxFallVelocity: usize = 0x210; // float + pub const m_vecLadderNormal: usize = 0x214; // Vector + pub const m_nLadderSurfacePropIndex: usize = 0x220; // int32_t + pub const m_flDuckAmount: usize = 0x224; // float + pub const m_flDuckSpeed: usize = 0x228; // float + pub const m_bDuckOverride: usize = 0x22C; // bool + pub const m_bDesiresDuck: usize = 0x22D; // bool + pub const m_flDuckOffset: usize = 0x230; // float + pub const m_nDuckTimeMsecs: usize = 0x234; // uint32_t + pub const m_nDuckJumpTimeMsecs: usize = 0x238; // uint32_t + pub const m_nJumpTimeMsecs: usize = 0x23C; // uint32_t + pub const m_flLastDuckTime: usize = 0x240; // float + pub const m_vecLastPositionAtFullCrouchSpeed: usize = 0x250; // Vector2D + pub const m_duckUntilOnGround: usize = 0x258; // bool + pub const m_bHasWalkMovedSinceLastJump: usize = 0x259; // bool + pub const m_bInStuckTest: usize = 0x25A; // bool + pub const m_flStuckCheckTime: usize = 0x268; // float[64][2] + pub const m_nTraceCount: usize = 0x468; // int32_t + pub const m_StuckLast: usize = 0x46C; // int32_t + pub const m_bSpeedCropped: usize = 0x470; // bool + pub const m_nOldWaterLevel: usize = 0x474; // int32_t + pub const m_flWaterEntryTime: usize = 0x478; // float + pub const m_vecForward: usize = 0x47C; // Vector + pub const m_vecLeft: usize = 0x488; // Vector + pub const m_vecUp: usize = 0x494; // Vector + pub const m_vecPreviouslyPredictedOrigin: usize = 0x4A0; // Vector + pub const m_bOldJumpPressed: usize = 0x4AC; // bool + pub const m_flJumpPressedTime: usize = 0x4B0; // float + pub const m_flJumpUntil: usize = 0x4B4; // float + pub const m_flJumpVel: usize = 0x4B8; // float + pub const m_fStashGrenadeParameterWhen: usize = 0x4BC; // GameTime_t + pub const m_nButtonDownMaskPrev: usize = 0x4C0; // uint64_t + pub const m_flOffsetTickCompleteTime: usize = 0x4C8; // float + pub const m_flOffsetTickStashedSpeed: usize = 0x4CC; // float + pub const m_flStamina: usize = 0x4D0; // float + pub const m_bUpdatePredictedOriginAfterDataUpdate: usize = 0x4D4; // bool +} + +pub mod CCSPlayer_PingServices { // CPlayerPawnComponent + pub const m_hPlayerPing: usize = 0x40; // CHandle<C_BaseEntity> +} + +pub mod CCSPlayer_UseServices { // CPlayer_UseServices +} + +pub mod CCSPlayer_ViewModelServices { // CPlayer_ViewModelServices + pub const m_hViewModel: usize = 0x40; // CHandle<C_BaseViewModel>[3] +} + +pub mod CCSPlayer_WaterServices { // CPlayer_WaterServices + pub const m_flWaterJumpTime: usize = 0x40; // float + pub const m_vecWaterJumpVel: usize = 0x44; // Vector + pub const m_flSwimSoundTime: usize = 0x50; // float +} + +pub mod CCSPlayer_WeaponServices { // CPlayer_WeaponServices + pub const m_flNextAttack: usize = 0xA8; // GameTime_t + pub const m_bIsLookingAtWeapon: usize = 0xAC; // bool + pub const m_bIsHoldingLookAtWeapon: usize = 0xAD; // bool +} + +pub mod CCSWeaponBaseVData { // CBasePlayerWeaponVData + pub const m_WeaponType: usize = 0x240; // CSWeaponType + pub const m_WeaponCategory: usize = 0x244; // CSWeaponCategory + pub const m_szViewModel: usize = 0x248; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>> + pub const m_szPlayerModel: usize = 0x328; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>> + pub const m_szWorldDroppedModel: usize = 0x408; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>> + pub const m_szAimsightLensMaskModel: usize = 0x4E8; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>> + pub const m_szMagazineModel: usize = 0x5C8; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>> + pub const m_szHeatEffect: usize = 0x6A8; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> + pub const m_szEjectBrassEffect: usize = 0x788; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> + pub const m_szMuzzleFlashParticleAlt: usize = 0x868; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> + pub const m_szMuzzleFlashThirdPersonParticle: usize = 0x948; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> + pub const m_szMuzzleFlashThirdPersonParticleAlt: usize = 0xA28; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> + pub const m_szTracerParticle: usize = 0xB08; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> + pub const m_GearSlot: usize = 0xBE8; // gear_slot_t + pub const m_GearSlotPosition: usize = 0xBEC; // int32_t + pub const m_DefaultLoadoutSlot: usize = 0xBF0; // loadout_slot_t + pub const m_sWrongTeamMsg: usize = 0xBF8; // CUtlString + pub const m_nPrice: usize = 0xC00; // int32_t + pub const m_nKillAward: usize = 0xC04; // int32_t + pub const m_nPrimaryReserveAmmoMax: usize = 0xC08; // int32_t + pub const m_nSecondaryReserveAmmoMax: usize = 0xC0C; // int32_t + pub const m_bMeleeWeapon: usize = 0xC10; // bool + pub const m_bHasBurstMode: usize = 0xC11; // bool + pub const m_bIsRevolver: usize = 0xC12; // bool + pub const m_bCannotShootUnderwater: usize = 0xC13; // bool + pub const m_szName: usize = 0xC18; // CUtlString + pub const m_szAnimExtension: usize = 0xC20; // CUtlString + pub const m_eSilencerType: usize = 0xC28; // CSWeaponSilencerType + pub const m_nCrosshairMinDistance: usize = 0xC2C; // int32_t + pub const m_nCrosshairDeltaDistance: usize = 0xC30; // int32_t + pub const m_flCycleTime: usize = 0xC34; // CFiringModeFloat + pub const m_flMaxSpeed: usize = 0xC3C; // CFiringModeFloat + pub const m_flSpread: usize = 0xC44; // CFiringModeFloat + pub const m_flInaccuracyCrouch: usize = 0xC4C; // CFiringModeFloat + pub const m_flInaccuracyStand: usize = 0xC54; // CFiringModeFloat + pub const m_flInaccuracyJump: usize = 0xC5C; // CFiringModeFloat + pub const m_flInaccuracyLand: usize = 0xC64; // CFiringModeFloat + pub const m_flInaccuracyLadder: usize = 0xC6C; // CFiringModeFloat + pub const m_flInaccuracyFire: usize = 0xC74; // CFiringModeFloat + pub const m_flInaccuracyMove: usize = 0xC7C; // CFiringModeFloat + pub const m_flRecoilAngle: usize = 0xC84; // CFiringModeFloat + pub const m_flRecoilAngleVariance: usize = 0xC8C; // CFiringModeFloat + pub const m_flRecoilMagnitude: usize = 0xC94; // CFiringModeFloat + pub const m_flRecoilMagnitudeVariance: usize = 0xC9C; // CFiringModeFloat + pub const m_nTracerFrequency: usize = 0xCA4; // CFiringModeInt + pub const m_flInaccuracyJumpInitial: usize = 0xCAC; // float + pub const m_flInaccuracyJumpApex: usize = 0xCB0; // float + pub const m_flInaccuracyReload: usize = 0xCB4; // float + pub const m_nRecoilSeed: usize = 0xCB8; // int32_t + pub const m_nSpreadSeed: usize = 0xCBC; // int32_t + pub const m_flTimeToIdleAfterFire: usize = 0xCC0; // float + pub const m_flIdleInterval: usize = 0xCC4; // float + pub const m_flAttackMovespeedFactor: usize = 0xCC8; // float + pub const m_flHeatPerShot: usize = 0xCCC; // float + pub const m_flInaccuracyPitchShift: usize = 0xCD0; // float + pub const m_flInaccuracyAltSoundThreshold: usize = 0xCD4; // float + pub const m_flBotAudibleRange: usize = 0xCD8; // float + pub const m_szUseRadioSubtitle: usize = 0xCE0; // CUtlString + pub const m_bUnzoomsAfterShot: usize = 0xCE8; // bool + pub const m_bHideViewModelWhenZoomed: usize = 0xCE9; // bool + pub const m_nZoomLevels: usize = 0xCEC; // int32_t + pub const m_nZoomFOV1: usize = 0xCF0; // int32_t + pub const m_nZoomFOV2: usize = 0xCF4; // int32_t + pub const m_flZoomTime0: usize = 0xCF8; // float + pub const m_flZoomTime1: usize = 0xCFC; // float + pub const m_flZoomTime2: usize = 0xD00; // float + pub const m_flIronSightPullUpSpeed: usize = 0xD04; // float + pub const m_flIronSightPutDownSpeed: usize = 0xD08; // float + pub const m_flIronSightFOV: usize = 0xD0C; // float + pub const m_flIronSightPivotForward: usize = 0xD10; // float + pub const m_flIronSightLooseness: usize = 0xD14; // float + pub const m_angPivotAngle: usize = 0xD18; // QAngle + pub const m_vecIronSightEyePos: usize = 0xD24; // Vector + pub const m_nDamage: usize = 0xD30; // int32_t + pub const m_flHeadshotMultiplier: usize = 0xD34; // float + pub const m_flArmorRatio: usize = 0xD38; // float + pub const m_flPenetration: usize = 0xD3C; // float + pub const m_flRange: usize = 0xD40; // float + pub const m_flRangeModifier: usize = 0xD44; // float + pub const m_flFlinchVelocityModifierLarge: usize = 0xD48; // float + pub const m_flFlinchVelocityModifierSmall: usize = 0xD4C; // float + pub const m_flRecoveryTimeCrouch: usize = 0xD50; // float + pub const m_flRecoveryTimeStand: usize = 0xD54; // float + pub const m_flRecoveryTimeCrouchFinal: usize = 0xD58; // float + pub const m_flRecoveryTimeStandFinal: usize = 0xD5C; // float + pub const m_nRecoveryTransitionStartBullet: usize = 0xD60; // int32_t + pub const m_nRecoveryTransitionEndBullet: usize = 0xD64; // int32_t + pub const m_flThrowVelocity: usize = 0xD68; // float + pub const m_vSmokeColor: usize = 0xD6C; // Vector + pub const m_szAnimClass: usize = 0xD78; // CUtlString +} + +pub mod CClientAlphaProperty { // IClientAlphaProperty + pub const m_nRenderFX: usize = 0x10; // uint8_t + pub const m_nRenderMode: usize = 0x11; // uint8_t + pub const m_bAlphaOverride: usize = 0x0; // bitfield:1 + pub const m_bShadowAlphaOverride: usize = 0x0; // bitfield:1 + pub const m_nReserved: usize = 0x0; // bitfield:6 + pub const m_nAlpha: usize = 0x13; // uint8_t + pub const m_nDesyncOffset: usize = 0x14; // uint16_t + pub const m_nReserved2: usize = 0x16; // uint16_t + pub const m_nDistFadeStart: usize = 0x18; // uint16_t + pub const m_nDistFadeEnd: usize = 0x1A; // uint16_t + pub const m_flFadeScale: usize = 0x1C; // float + pub const m_flRenderFxStartTime: usize = 0x20; // GameTime_t + pub const m_flRenderFxDuration: usize = 0x24; // float +} + +pub mod CCollisionProperty { + pub const m_collisionAttribute: usize = 0x10; // VPhysicsCollisionAttribute_t + pub const m_vecMins: usize = 0x40; // Vector + pub const m_vecMaxs: usize = 0x4C; // Vector + pub const m_usSolidFlags: usize = 0x5A; // uint8_t + pub const m_nSolidType: usize = 0x5B; // SolidType_t + pub const m_triggerBloat: usize = 0x5C; // uint8_t + pub const m_nSurroundType: usize = 0x5D; // SurroundingBoundsType_t + pub const m_CollisionGroup: usize = 0x5E; // uint8_t + pub const m_nEnablePhysics: usize = 0x5F; // uint8_t + pub const m_flBoundingRadius: usize = 0x60; // float + pub const m_vecSpecifiedSurroundingMins: usize = 0x64; // Vector + pub const m_vecSpecifiedSurroundingMaxs: usize = 0x70; // Vector + pub const m_vecSurroundingMaxs: usize = 0x7C; // Vector + pub const m_vecSurroundingMins: usize = 0x88; // Vector + pub const m_vCapsuleCenter1: usize = 0x94; // Vector + pub const m_vCapsuleCenter2: usize = 0xA0; // Vector + pub const m_flCapsuleRadius: usize = 0xAC; // float +} + +pub mod CComicBook { + pub const m_CoverImage: usize = 0x8; // CPanoramaImageName + pub const m_XmlFile: usize = 0x18; // CUtlString +} + +pub mod CCompositeMaterialEditorDoc { + pub const m_nVersion: usize = 0x8; // int32_t + pub const m_Points: usize = 0x10; // CUtlVector<CompositeMaterialEditorPoint_t> + pub const m_KVthumbnail: usize = 0x28; // KeyValues3 +} + +pub mod CDamageRecord { + pub const m_PlayerDamager: usize = 0x28; // CHandle<C_CSPlayerPawnBase> + pub const m_PlayerRecipient: usize = 0x2C; // CHandle<C_CSPlayerPawnBase> + pub const m_hPlayerControllerDamager: usize = 0x30; // CHandle<CCSPlayerController> + pub const m_hPlayerControllerRecipient: usize = 0x34; // CHandle<CCSPlayerController> + pub const m_szPlayerDamagerName: usize = 0x38; // CUtlString + pub const m_szPlayerRecipientName: usize = 0x40; // CUtlString + pub const m_DamagerXuid: usize = 0x48; // uint64_t + pub const m_RecipientXuid: usize = 0x50; // uint64_t + pub const m_iDamage: usize = 0x58; // int32_t + pub const m_iActualHealthRemoved: usize = 0x5C; // int32_t + pub const m_iNumHits: usize = 0x60; // int32_t + pub const m_iLastBulletUpdate: usize = 0x64; // int32_t + pub const m_bIsOtherEnemy: usize = 0x68; // bool + pub const m_killType: usize = 0x69; // EKillTypes_t +} + +pub mod CDecalInfo { + pub const m_flAnimationScale: usize = 0x0; // float + pub const m_flAnimationLifeSpan: usize = 0x4; // float + pub const m_flPlaceTime: usize = 0x8; // float + pub const m_flFadeStartTime: usize = 0xC; // float + pub const m_flFadeDuration: usize = 0x10; // float + pub const m_nVBSlot: usize = 0x14; // int32_t + pub const m_nBoneIndex: usize = 0x18; // int32_t + pub const m_pNext: usize = 0x28; // CDecalInfo* + pub const m_pPrev: usize = 0x30; // CDecalInfo* + pub const m_nDecalMaterialIndex: usize = 0x90; // int32_t +} + +pub mod CEconItemAttribute { + pub const m_iAttributeDefinitionIndex: usize = 0x30; // uint16_t + pub const m_flValue: usize = 0x34; // float + pub const m_flInitialValue: usize = 0x38; // float + pub const m_nRefundableCurrency: usize = 0x3C; // int32_t + pub const m_bSetBonus: usize = 0x40; // bool +} + +pub mod CEffectData { + pub const m_vOrigin: usize = 0x8; // Vector + pub const m_vStart: usize = 0x14; // Vector + pub const m_vNormal: usize = 0x20; // Vector + pub const m_vAngles: usize = 0x2C; // QAngle + pub const m_hEntity: usize = 0x38; // CEntityHandle + pub const m_hOtherEntity: usize = 0x3C; // CEntityHandle + pub const m_flScale: usize = 0x40; // float + pub const m_flMagnitude: usize = 0x44; // float + pub const m_flRadius: usize = 0x48; // float + pub const m_nSurfaceProp: usize = 0x4C; // CUtlStringToken + pub const m_nEffectIndex: usize = 0x50; // CWeakHandle<InfoForResourceTypeIParticleSystemDefinition> + pub const m_nDamageType: usize = 0x58; // uint32_t + pub const m_nPenetrate: usize = 0x5C; // uint8_t + pub const m_nMaterial: usize = 0x5E; // uint16_t + pub const m_nHitBox: usize = 0x60; // uint16_t + pub const m_nColor: usize = 0x62; // uint8_t + pub const m_fFlags: usize = 0x63; // uint8_t + pub const m_nAttachmentIndex: usize = 0x64; // AttachmentHandle_t + pub const m_nAttachmentName: usize = 0x68; // CUtlStringToken + pub const m_iEffectName: usize = 0x6C; // uint16_t + pub const m_nExplosionType: usize = 0x6E; // uint8_t +} + +pub mod CEntityComponent { +} + +pub mod CEntityIdentity { + pub const m_nameStringableIndex: usize = 0x14; // int32_t + pub const m_name: usize = 0x18; // CUtlSymbolLarge + pub const m_designerName: usize = 0x20; // CUtlSymbolLarge + pub const m_flags: usize = 0x30; // uint32_t + pub const m_worldGroupId: usize = 0x38; // WorldGroupId_t + pub const m_fDataObjectTypes: usize = 0x3C; // uint32_t + pub const m_PathIndex: usize = 0x40; // ChangeAccessorFieldPathIndex_t + pub const m_pPrev: usize = 0x58; // CEntityIdentity* + pub const m_pNext: usize = 0x60; // CEntityIdentity* + pub const m_pPrevByClass: usize = 0x68; // CEntityIdentity* + pub const m_pNextByClass: usize = 0x70; // CEntityIdentity* +} + +pub mod CEntityInstance { + pub const m_iszPrivateVScripts: usize = 0x8; // CUtlSymbolLarge + pub const m_pEntity: usize = 0x10; // CEntityIdentity* + pub const m_CScriptComponent: usize = 0x28; // CScriptComponent* +} + +pub mod CFireOverlay { // CGlowOverlay + pub const m_pOwner: usize = 0xD0; // C_FireSmoke* + pub const m_vBaseColors: usize = 0xD8; // Vector[4] + pub const m_flScale: usize = 0x108; // float + pub const m_nGUID: usize = 0x10C; // int32_t +} + +pub mod CFlashlightEffect { + pub const m_bIsOn: usize = 0x10; // bool + pub const m_bMuzzleFlashEnabled: usize = 0x20; // bool + pub const m_flMuzzleFlashBrightness: usize = 0x24; // float + pub const m_quatMuzzleFlashOrientation: usize = 0x30; // Quaternion + pub const m_vecMuzzleFlashOrigin: usize = 0x40; // Vector + pub const m_flFov: usize = 0x4C; // float + pub const m_flFarZ: usize = 0x50; // float + pub const m_flLinearAtten: usize = 0x54; // float + pub const m_bCastsShadows: usize = 0x58; // bool + pub const m_flCurrentPullBackDist: usize = 0x5C; // float + pub const m_FlashlightTexture: usize = 0x60; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_MuzzleFlashTexture: usize = 0x68; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_textureName: usize = 0x70; // char[64] +} + +pub mod CFuncWater { // C_BaseModelEntity + pub const m_BuoyancyHelper: usize = 0xCC0; // CBuoyancyHelper +} + +pub mod CGameSceneNode { + pub const m_nodeToWorld: usize = 0x10; // CTransform + pub const m_pOwner: usize = 0x30; // CEntityInstance* + pub const m_pParent: usize = 0x38; // CGameSceneNode* + pub const m_pChild: usize = 0x40; // CGameSceneNode* + pub const m_pNextSibling: usize = 0x48; // CGameSceneNode* + pub const m_hParent: usize = 0x70; // CGameSceneNodeHandle + pub const m_vecOrigin: usize = 0x80; // CNetworkOriginCellCoordQuantizedVector + pub const m_angRotation: usize = 0xB8; // QAngle + pub const m_flScale: usize = 0xC4; // float + pub const m_vecAbsOrigin: usize = 0xC8; // Vector + pub const m_angAbsRotation: usize = 0xD4; // QAngle + pub const m_flAbsScale: usize = 0xE0; // float + pub const m_nParentAttachmentOrBone: usize = 0xE4; // int16_t + pub const m_bDebugAbsOriginChanges: usize = 0xE6; // bool + pub const m_bDormant: usize = 0xE7; // bool + pub const m_bForceParentToBeNetworked: usize = 0xE8; // bool + pub const m_bDirtyHierarchy: usize = 0x0; // bitfield:1 + pub const m_bDirtyBoneMergeInfo: usize = 0x0; // bitfield:1 + pub const m_bNetworkedPositionChanged: usize = 0x0; // bitfield:1 + pub const m_bNetworkedAnglesChanged: usize = 0x0; // bitfield:1 + pub const m_bNetworkedScaleChanged: usize = 0x0; // bitfield:1 + pub const m_bWillBeCallingPostDataUpdate: usize = 0x0; // bitfield:1 + pub const m_bNotifyBoneTransformsChanged: usize = 0x0; // bitfield:1 + pub const m_bBoneMergeFlex: usize = 0x0; // bitfield:1 + pub const m_nLatchAbsOrigin: usize = 0x0; // bitfield:2 + pub const m_bDirtyBoneMergeBoneToRoot: usize = 0x0; // bitfield:1 + pub const m_nHierarchicalDepth: usize = 0xEB; // uint8_t + pub const m_nHierarchyType: usize = 0xEC; // uint8_t + pub const m_nDoNotSetAnimTimeInInvalidatePhysicsCount: usize = 0xED; // uint8_t + pub const m_name: usize = 0xF0; // CUtlStringToken + pub const m_hierarchyAttachName: usize = 0x130; // CUtlStringToken + pub const m_flZOffset: usize = 0x134; // float + pub const m_vRenderOrigin: usize = 0x138; // Vector +} + +pub mod CGameSceneNodeHandle { + pub const m_hOwner: usize = 0x8; // CEntityHandle + pub const m_name: usize = 0xC; // CUtlStringToken +} + +pub mod CGlobalLightBase { + pub const m_bSpotLight: usize = 0x10; // bool + pub const m_SpotLightOrigin: usize = 0x14; // Vector + pub const m_SpotLightAngles: usize = 0x20; // QAngle + pub const m_ShadowDirection: usize = 0x2C; // Vector + pub const m_AmbientDirection: usize = 0x38; // Vector + pub const m_SpecularDirection: usize = 0x44; // Vector + pub const m_InspectorSpecularDirection: usize = 0x50; // Vector + pub const m_flSpecularPower: usize = 0x5C; // float + pub const m_flSpecularIndependence: usize = 0x60; // float + pub const m_SpecularColor: usize = 0x64; // Color + pub const m_bStartDisabled: usize = 0x68; // bool + pub const m_bEnabled: usize = 0x69; // bool + pub const m_LightColor: usize = 0x6A; // Color + pub const m_AmbientColor1: usize = 0x6E; // Color + pub const m_AmbientColor2: usize = 0x72; // Color + pub const m_AmbientColor3: usize = 0x76; // Color + pub const m_flSunDistance: usize = 0x7C; // float + pub const m_flFOV: usize = 0x80; // float + pub const m_flNearZ: usize = 0x84; // float + pub const m_flFarZ: usize = 0x88; // float + pub const m_bEnableShadows: usize = 0x8C; // bool + pub const m_bOldEnableShadows: usize = 0x8D; // bool + pub const m_bBackgroundClearNotRequired: usize = 0x8E; // bool + pub const m_flCloudScale: usize = 0x90; // float + pub const m_flCloud1Speed: usize = 0x94; // float + pub const m_flCloud1Direction: usize = 0x98; // float + pub const m_flCloud2Speed: usize = 0x9C; // float + pub const m_flCloud2Direction: usize = 0xA0; // float + pub const m_flAmbientScale1: usize = 0xB0; // float + pub const m_flAmbientScale2: usize = 0xB4; // float + pub const m_flGroundScale: usize = 0xB8; // float + pub const m_flLightScale: usize = 0xBC; // float + pub const m_flFoWDarkness: usize = 0xC0; // float + pub const m_bEnableSeparateSkyboxFog: usize = 0xC4; // bool + pub const m_vFowColor: usize = 0xC8; // Vector + pub const m_ViewOrigin: usize = 0xD4; // Vector + pub const m_ViewAngles: usize = 0xE0; // QAngle + pub const m_flViewFoV: usize = 0xEC; // float + pub const m_WorldPoints: usize = 0xF0; // Vector[8] + pub const m_vFogOffsetLayer0: usize = 0x4A8; // Vector2D + pub const m_vFogOffsetLayer1: usize = 0x4B0; // Vector2D + pub const m_hEnvWind: usize = 0x4B8; // CHandle<C_BaseEntity> + pub const m_hEnvSky: usize = 0x4BC; // CHandle<C_BaseEntity> +} + +pub mod CGlowOverlay { + pub const m_vPos: usize = 0x8; // Vector + pub const m_bDirectional: usize = 0x14; // bool + pub const m_vDirection: usize = 0x18; // Vector + pub const m_bInSky: usize = 0x24; // bool + pub const m_skyObstructionScale: usize = 0x28; // float + pub const m_Sprites: usize = 0x30; // CGlowSprite[4] + pub const m_nSprites: usize = 0xB0; // int32_t + pub const m_flProxyRadius: usize = 0xB4; // float + pub const m_flHDRColorScale: usize = 0xB8; // float + pub const m_flGlowObstructionScale: usize = 0xBC; // float + pub const m_bCacheGlowObstruction: usize = 0xC0; // bool + pub const m_bCacheSkyObstruction: usize = 0xC1; // bool + pub const m_bActivated: usize = 0xC2; // int16_t + pub const m_ListIndex: usize = 0xC4; // uint16_t + pub const m_queryHandle: usize = 0xC8; // int32_t +} + +pub mod CGlowProperty { + pub const m_fGlowColor: usize = 0x8; // Vector + pub const m_iGlowType: usize = 0x30; // int32_t + pub const m_iGlowTeam: usize = 0x34; // int32_t + pub const m_nGlowRange: usize = 0x38; // int32_t + pub const m_nGlowRangeMin: usize = 0x3C; // int32_t + pub const m_glowColorOverride: usize = 0x40; // Color + pub const m_bFlashing: usize = 0x44; // bool + pub const m_flGlowTime: usize = 0x48; // float + pub const m_flGlowStartTime: usize = 0x4C; // float + pub const m_bEligibleForScreenHighlight: usize = 0x50; // bool + pub const m_bGlowing: usize = 0x51; // bool +} + +pub mod CGlowSprite { + pub const m_vColor: usize = 0x0; // Vector + pub const m_flHorzSize: usize = 0xC; // float + pub const m_flVertSize: usize = 0x10; // float + pub const m_hMaterial: usize = 0x18; // CStrongHandle<InfoForResourceTypeIMaterial2> +} + +pub mod CGrenadeTracer { // C_BaseModelEntity + pub const m_flTracerDuration: usize = 0xCE0; // float + pub const m_nType: usize = 0xCE4; // GrenadeType_t +} + +pub mod CHitboxComponent { // CEntityComponent + pub const m_bvDisabledHitGroups: usize = 0x24; // uint32_t[1] +} + +pub mod CHostageRescueZone { // CHostageRescueZoneShim +} + +pub mod CHostageRescueZoneShim { // C_BaseTrigger +} + +pub mod CInfoDynamicShadowHint { // C_PointEntity + pub const m_bDisabled: usize = 0x540; // bool + pub const m_flRange: usize = 0x544; // float + pub const m_nImportance: usize = 0x548; // int32_t + pub const m_nLightChoice: usize = 0x54C; // int32_t + pub const m_hLight: usize = 0x550; // CHandle<C_BaseEntity> +} + +pub mod CInfoDynamicShadowHintBox { // CInfoDynamicShadowHint + pub const m_vBoxMins: usize = 0x558; // Vector + pub const m_vBoxMaxs: usize = 0x564; // Vector +} + +pub mod CInfoOffscreenPanoramaTexture { // C_PointEntity + pub const m_bDisabled: usize = 0x540; // bool + pub const m_nResolutionX: usize = 0x544; // int32_t + pub const m_nResolutionY: usize = 0x548; // int32_t + pub const m_szLayoutFileName: usize = 0x550; // CUtlSymbolLarge + pub const m_RenderAttrName: usize = 0x558; // CUtlSymbolLarge + pub const m_TargetEntities: usize = 0x560; // C_NetworkUtlVectorBase<CHandle<C_BaseModelEntity>> + pub const m_nTargetChangeCount: usize = 0x578; // int32_t + pub const m_vecCSSClasses: usize = 0x580; // C_NetworkUtlVectorBase<CUtlSymbolLarge> + pub const m_bCheckCSSClasses: usize = 0x6F8; // bool +} + +pub mod CInfoParticleTarget { // C_PointEntity +} + +pub mod CInfoTarget { // C_PointEntity +} + +pub mod CInfoWorldLayer { // C_BaseEntity + pub const m_pOutputOnEntitiesSpawned: usize = 0x540; // CEntityIOOutput + pub const m_worldName: usize = 0x568; // CUtlSymbolLarge + pub const m_layerName: usize = 0x570; // CUtlSymbolLarge + pub const m_bWorldLayerVisible: usize = 0x578; // bool + pub const m_bEntitiesSpawned: usize = 0x579; // bool + pub const m_bCreateAsChildSpawnGroup: usize = 0x57A; // bool + pub const m_hLayerSpawnGroup: usize = 0x57C; // uint32_t + pub const m_bWorldLayerActuallyVisible: usize = 0x580; // bool +} + +pub mod CInterpolatedValue { + pub const m_flStartTime: usize = 0x0; // float + pub const m_flEndTime: usize = 0x4; // float + pub const m_flStartValue: usize = 0x8; // float + pub const m_flEndValue: usize = 0xC; // float + pub const m_nInterpType: usize = 0x10; // int32_t +} + +pub mod CLightComponent { // CEntityComponent + pub const __m_pChainEntity: usize = 0x48; // CNetworkVarChainer + pub const m_Color: usize = 0x85; // Color + pub const m_SecondaryColor: usize = 0x89; // Color + pub const m_flBrightness: usize = 0x90; // float + pub const m_flBrightnessScale: usize = 0x94; // float + pub const m_flBrightnessMult: usize = 0x98; // float + pub const m_flRange: usize = 0x9C; // float + pub const m_flFalloff: usize = 0xA0; // float + pub const m_flAttenuation0: usize = 0xA4; // float + pub const m_flAttenuation1: usize = 0xA8; // float + pub const m_flAttenuation2: usize = 0xAC; // float + pub const m_flTheta: usize = 0xB0; // float + pub const m_flPhi: usize = 0xB4; // float + pub const m_hLightCookie: usize = 0xB8; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_nCascades: usize = 0xC0; // int32_t + pub const m_nCastShadows: usize = 0xC4; // int32_t + pub const m_nShadowWidth: usize = 0xC8; // int32_t + pub const m_nShadowHeight: usize = 0xCC; // int32_t + pub const m_bRenderDiffuse: usize = 0xD0; // bool + pub const m_nRenderSpecular: usize = 0xD4; // int32_t + pub const m_bRenderTransmissive: usize = 0xD8; // bool + pub const m_flOrthoLightWidth: usize = 0xDC; // float + pub const m_flOrthoLightHeight: usize = 0xE0; // float + pub const m_nStyle: usize = 0xE4; // int32_t + pub const m_Pattern: usize = 0xE8; // CUtlString + pub const m_nCascadeRenderStaticObjects: usize = 0xF0; // int32_t + pub const m_flShadowCascadeCrossFade: usize = 0xF4; // float + pub const m_flShadowCascadeDistanceFade: usize = 0xF8; // float + pub const m_flShadowCascadeDistance0: usize = 0xFC; // float + pub const m_flShadowCascadeDistance1: usize = 0x100; // float + pub const m_flShadowCascadeDistance2: usize = 0x104; // float + pub const m_flShadowCascadeDistance3: usize = 0x108; // float + pub const m_nShadowCascadeResolution0: usize = 0x10C; // int32_t + pub const m_nShadowCascadeResolution1: usize = 0x110; // int32_t + pub const m_nShadowCascadeResolution2: usize = 0x114; // int32_t + pub const m_nShadowCascadeResolution3: usize = 0x118; // int32_t + pub const m_bUsesBakedShadowing: usize = 0x11C; // bool + pub const m_nShadowPriority: usize = 0x120; // int32_t + pub const m_nBakedShadowIndex: usize = 0x124; // int32_t + pub const m_bRenderToCubemaps: usize = 0x128; // bool + pub const m_LightGroups: usize = 0x130; // CUtlSymbolLarge + pub const m_nDirectLight: usize = 0x138; // int32_t + pub const m_nIndirectLight: usize = 0x13C; // int32_t + pub const m_flFadeMinDist: usize = 0x140; // float + pub const m_flFadeMaxDist: usize = 0x144; // float + pub const m_flShadowFadeMinDist: usize = 0x148; // float + pub const m_flShadowFadeMaxDist: usize = 0x14C; // float + pub const m_bEnabled: usize = 0x150; // bool + pub const m_bFlicker: usize = 0x151; // bool + pub const m_bPrecomputedFieldsValid: usize = 0x152; // bool + pub const m_vPrecomputedBoundsMins: usize = 0x154; // Vector + pub const m_vPrecomputedBoundsMaxs: usize = 0x160; // Vector + pub const m_vPrecomputedOBBOrigin: usize = 0x16C; // Vector + pub const m_vPrecomputedOBBAngles: usize = 0x178; // QAngle + pub const m_vPrecomputedOBBExtent: usize = 0x184; // Vector + pub const m_flPrecomputedMaxRange: usize = 0x190; // float + pub const m_nFogLightingMode: usize = 0x194; // int32_t + pub const m_flFogContributionStength: usize = 0x198; // float + pub const m_flNearClipPlane: usize = 0x19C; // float + pub const m_SkyColor: usize = 0x1A0; // Color + pub const m_flSkyIntensity: usize = 0x1A4; // float + pub const m_SkyAmbientBounce: usize = 0x1A8; // Color + pub const m_bUseSecondaryColor: usize = 0x1AC; // bool + pub const m_bMixedShadows: usize = 0x1AD; // bool + pub const m_flLightStyleStartTime: usize = 0x1B0; // GameTime_t + pub const m_flCapsuleLength: usize = 0x1B4; // float + pub const m_flMinRoughness: usize = 0x1B8; // float +} + +pub mod CLogicRelay { // CLogicalEntity + pub const m_OnTrigger: usize = 0x540; // CEntityIOOutput + pub const m_OnSpawn: usize = 0x568; // CEntityIOOutput + pub const m_bDisabled: usize = 0x590; // bool + pub const m_bWaitForRefire: usize = 0x591; // bool + pub const m_bTriggerOnce: usize = 0x592; // bool + pub const m_bFastRetrigger: usize = 0x593; // bool + pub const m_bPassthoughCaller: usize = 0x594; // bool +} + +pub mod CLogicalEntity { // C_BaseEntity +} + +pub mod CModelState { + pub const m_hModel: usize = 0xA0; // CStrongHandle<InfoForResourceTypeCModel> + pub const m_ModelName: usize = 0xA8; // CUtlSymbolLarge + pub const m_bClientClothCreationSuppressed: usize = 0xE8; // bool + pub const m_MeshGroupMask: usize = 0x180; // uint64_t + pub const m_nIdealMotionType: usize = 0x222; // int8_t + pub const m_nForceLOD: usize = 0x223; // int8_t + pub const m_nClothUpdateFlags: usize = 0x224; // int8_t +} + +pub mod CNetworkedSequenceOperation { + pub const m_hSequence: usize = 0x8; // HSequence + pub const m_flPrevCycle: usize = 0xC; // float + pub const m_flCycle: usize = 0x10; // float + pub const m_flWeight: usize = 0x14; // CNetworkedQuantizedFloat + pub const m_bSequenceChangeNetworked: usize = 0x1C; // bool + pub const m_bDiscontinuity: usize = 0x1D; // bool + pub const m_flPrevCycleFromDiscontinuity: usize = 0x20; // float + pub const m_flPrevCycleForAnimEventDetection: usize = 0x24; // float +} + +pub mod CPlayerSprayDecalRenderHelper { +} + +pub mod CPlayer_AutoaimServices { // CPlayerPawnComponent +} + +pub mod CPlayer_CameraServices { // CPlayerPawnComponent + pub const m_vecCsViewPunchAngle: usize = 0x40; // QAngle + pub const m_nCsViewPunchAngleTick: usize = 0x4C; // GameTick_t + pub const m_flCsViewPunchAngleTickRatio: usize = 0x50; // float + pub const m_PlayerFog: usize = 0x58; // C_fogplayerparams_t + pub const m_hColorCorrectionCtrl: usize = 0x98; // CHandle<C_ColorCorrection> + pub const m_hViewEntity: usize = 0x9C; // CHandle<C_BaseEntity> + pub const m_hTonemapController: usize = 0xA0; // CHandle<C_TonemapController2> + pub const m_audio: usize = 0xA8; // audioparams_t + pub const m_PostProcessingVolumes: usize = 0x120; // C_NetworkUtlVectorBase<CHandle<C_PostProcessingVolume>> + pub const m_flOldPlayerZ: usize = 0x138; // float + pub const m_flOldPlayerViewOffsetZ: usize = 0x13C; // float + pub const m_CurrentFog: usize = 0x140; // fogparams_t + pub const m_hOldFogController: usize = 0x1A8; // CHandle<C_FogController> + pub const m_bOverrideFogColor: usize = 0x1AC; // bool[5] + pub const m_OverrideFogColor: usize = 0x1B1; // Color[5] + pub const m_bOverrideFogStartEnd: usize = 0x1C5; // bool[5] + pub const m_fOverrideFogStart: usize = 0x1CC; // float[5] + pub const m_fOverrideFogEnd: usize = 0x1E0; // float[5] + pub const m_hActivePostProcessingVolume: usize = 0x1F4; // CHandle<C_PostProcessingVolume> + pub const m_angDemoViewAngles: usize = 0x1F8; // QAngle +} + +pub mod CPlayer_FlashlightServices { // CPlayerPawnComponent +} + +pub mod CPlayer_ItemServices { // CPlayerPawnComponent +} + +pub mod CPlayer_MovementServices { // CPlayerPawnComponent + pub const m_nImpulse: usize = 0x40; // int32_t + pub const m_nButtons: usize = 0x48; // CInButtonState + pub const m_nQueuedButtonDownMask: usize = 0x68; // uint64_t + pub const m_nQueuedButtonChangeMask: usize = 0x70; // uint64_t + pub const m_nButtonDoublePressed: usize = 0x78; // uint64_t + pub const m_pButtonPressedCmdNumber: usize = 0x80; // uint32_t[64] + pub const m_nLastCommandNumberProcessed: usize = 0x180; // uint32_t + pub const m_nToggleButtonDownMask: usize = 0x188; // uint64_t + pub const m_flMaxspeed: usize = 0x190; // float + pub const m_arrForceSubtickMoveWhen: usize = 0x194; // float[4] + pub const m_flForwardMove: usize = 0x1A4; // float + pub const m_flLeftMove: usize = 0x1A8; // float + pub const m_flUpMove: usize = 0x1AC; // float + pub const m_vecLastMovementImpulses: usize = 0x1B0; // Vector + pub const m_vecOldViewAngles: usize = 0x1BC; // QAngle +} + +pub mod CPlayer_MovementServices_Humanoid { // CPlayer_MovementServices + pub const m_flStepSoundTime: usize = 0x1D0; // float + pub const m_flFallVelocity: usize = 0x1D4; // float + pub const m_bInCrouch: usize = 0x1D8; // bool + pub const m_nCrouchState: usize = 0x1DC; // uint32_t + pub const m_flCrouchTransitionStartTime: usize = 0x1E0; // GameTime_t + pub const m_bDucked: usize = 0x1E4; // bool + pub const m_bDucking: usize = 0x1E5; // bool + pub const m_bInDuckJump: usize = 0x1E6; // bool + pub const m_groundNormal: usize = 0x1E8; // Vector + pub const m_flSurfaceFriction: usize = 0x1F4; // float + pub const m_surfaceProps: usize = 0x1F8; // CUtlStringToken + pub const m_nStepside: usize = 0x208; // int32_t +} + +pub mod CPlayer_ObserverServices { // CPlayerPawnComponent + pub const m_iObserverMode: usize = 0x40; // uint8_t + pub const m_hObserverTarget: usize = 0x44; // CHandle<C_BaseEntity> + pub const m_iObserverLastMode: usize = 0x48; // ObserverMode_t + pub const m_bForcedObserverMode: usize = 0x4C; // bool + pub const m_flObserverChaseDistance: usize = 0x50; // float + pub const m_flObserverChaseDistanceCalcTime: usize = 0x54; // GameTime_t +} + +pub mod CPlayer_UseServices { // CPlayerPawnComponent +} + +pub mod CPlayer_ViewModelServices { // CPlayerPawnComponent +} + +pub mod CPlayer_WaterServices { // CPlayerPawnComponent +} + +pub mod CPlayer_WeaponServices { // CPlayerPawnComponent + pub const m_bAllowSwitchToNoWeapon: usize = 0x40; // bool + pub const m_hMyWeapons: usize = 0x48; // C_NetworkUtlVectorBase<CHandle<C_BasePlayerWeapon>> + pub const m_hActiveWeapon: usize = 0x60; // CHandle<C_BasePlayerWeapon> + pub const m_hLastWeapon: usize = 0x64; // CHandle<C_BasePlayerWeapon> + pub const m_iAmmo: usize = 0x68; // uint16_t[32] +} + +pub mod CPointOffScreenIndicatorUi { // C_PointClientUIWorldPanel + pub const m_bBeenEnabled: usize = 0xF20; // bool + pub const m_bHide: usize = 0xF21; // bool + pub const m_flSeenTargetTime: usize = 0xF24; // float + pub const m_pTargetPanel: usize = 0xF28; // C_PointClientUIWorldPanel* +} + +pub mod CPointTemplate { // CLogicalEntity + pub const m_iszWorldName: usize = 0x540; // CUtlSymbolLarge + pub const m_iszSource2EntityLumpName: usize = 0x548; // CUtlSymbolLarge + pub const m_iszEntityFilterName: usize = 0x550; // CUtlSymbolLarge + pub const m_flTimeoutInterval: usize = 0x558; // float + pub const m_bAsynchronouslySpawnEntities: usize = 0x55C; // bool + pub const m_pOutputOnSpawned: usize = 0x560; // CEntityIOOutput + pub const m_clientOnlyEntityBehavior: usize = 0x588; // PointTemplateClientOnlyEntityBehavior_t + pub const m_ownerSpawnGroupType: usize = 0x58C; // PointTemplateOwnerSpawnGroupType_t + pub const m_createdSpawnGroupHandles: usize = 0x590; // CUtlVector<uint32_t> + pub const m_SpawnedEntityHandles: usize = 0x5A8; // CUtlVector<CEntityHandle> + pub const m_ScriptSpawnCallback: usize = 0x5C0; // HSCRIPT + pub const m_ScriptCallbackScope: usize = 0x5C8; // HSCRIPT +} + +pub mod CPrecipitationVData { // CEntitySubclassVDataBase + pub const m_szParticlePrecipitationEffect: usize = 0x28; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> + pub const m_flInnerDistance: usize = 0x108; // float + pub const m_nAttachType: usize = 0x10C; // ParticleAttachment_t + pub const m_bBatchSameVolumeType: usize = 0x110; // bool + pub const m_nRTEnvCP: usize = 0x114; // int32_t + pub const m_nRTEnvCPComponent: usize = 0x118; // int32_t + pub const m_szModifier: usize = 0x120; // CUtlString +} + +pub mod CProjectedTextureBase { + pub const m_hTargetEntity: usize = 0xC; // CHandle<C_BaseEntity> + pub const m_bState: usize = 0x10; // bool + pub const m_bAlwaysUpdate: usize = 0x11; // bool + pub const m_flLightFOV: usize = 0x14; // float + pub const m_bEnableShadows: usize = 0x18; // bool + pub const m_bSimpleProjection: usize = 0x19; // bool + pub const m_bLightOnlyTarget: usize = 0x1A; // bool + pub const m_bLightWorld: usize = 0x1B; // bool + pub const m_bCameraSpace: usize = 0x1C; // bool + pub const m_flBrightnessScale: usize = 0x20; // float + pub const m_LightColor: usize = 0x24; // Color + pub const m_flIntensity: usize = 0x28; // float + pub const m_flLinearAttenuation: usize = 0x2C; // float + pub const m_flQuadraticAttenuation: usize = 0x30; // float + pub const m_bVolumetric: usize = 0x34; // bool + pub const m_flVolumetricIntensity: usize = 0x38; // float + pub const m_flNoiseStrength: usize = 0x3C; // float + pub const m_flFlashlightTime: usize = 0x40; // float + pub const m_nNumPlanes: usize = 0x44; // uint32_t + pub const m_flPlaneOffset: usize = 0x48; // float + pub const m_flColorTransitionTime: usize = 0x4C; // float + pub const m_flAmbient: usize = 0x50; // float + pub const m_SpotlightTextureName: usize = 0x54; // char[512] + pub const m_nSpotlightTextureFrame: usize = 0x254; // int32_t + pub const m_nShadowQuality: usize = 0x258; // uint32_t + pub const m_flNearZ: usize = 0x25C; // float + pub const m_flFarZ: usize = 0x260; // float + pub const m_flProjectionSize: usize = 0x264; // float + pub const m_flRotation: usize = 0x268; // float + pub const m_bFlipHorizontal: usize = 0x26C; // bool +} + +pub mod CRenderComponent { // CEntityComponent + pub const __m_pChainEntity: usize = 0x10; // CNetworkVarChainer + pub const m_bIsRenderingWithViewModels: usize = 0x50; // bool + pub const m_nSplitscreenFlags: usize = 0x54; // uint32_t + pub const m_bEnableRendering: usize = 0x60; // bool + pub const m_bInterpolationReadyToDraw: usize = 0xB0; // bool +} + +pub mod CSMatchStats_t { // CSPerRoundStats_t + pub const m_iEnemy5Ks: usize = 0x68; // int32_t + pub const m_iEnemy4Ks: usize = 0x6C; // int32_t + pub const m_iEnemy3Ks: usize = 0x70; // int32_t +} + +pub mod CSPerRoundStats_t { + pub const m_iKills: usize = 0x30; // int32_t + pub const m_iDeaths: usize = 0x34; // int32_t + pub const m_iAssists: usize = 0x38; // int32_t + pub const m_iDamage: usize = 0x3C; // int32_t + pub const m_iEquipmentValue: usize = 0x40; // int32_t + pub const m_iMoneySaved: usize = 0x44; // int32_t + pub const m_iKillReward: usize = 0x48; // int32_t + pub const m_iLiveTime: usize = 0x4C; // int32_t + pub const m_iHeadShotKills: usize = 0x50; // int32_t + pub const m_iObjective: usize = 0x54; // int32_t + pub const m_iCashEarned: usize = 0x58; // int32_t + pub const m_iUtilityDamage: usize = 0x5C; // int32_t + pub const m_iEnemiesFlashed: usize = 0x60; // int32_t +} + +pub mod CScriptComponent { // CEntityComponent + pub const m_scriptClassName: usize = 0x30; // CUtlSymbolLarge +} + +pub mod CServerOnlyModelEntity { // C_BaseModelEntity +} + +pub mod CSkeletonInstance { // CGameSceneNode + pub const m_modelState: usize = 0x160; // CModelState + pub const m_bIsAnimationEnabled: usize = 0x390; // bool + pub const m_bUseParentRenderBounds: usize = 0x391; // bool + pub const m_bDisableSolidCollisionsForHierarchy: usize = 0x392; // bool + pub const m_bDirtyMotionType: usize = 0x0; // bitfield:1 + pub const m_bIsGeneratingLatchedParentSpaceState: usize = 0x0; // bitfield:1 + pub const m_materialGroup: usize = 0x394; // CUtlStringToken + pub const m_nHitboxSet: usize = 0x398; // uint8_t +} + +pub mod CSkyboxReference { // C_BaseEntity + pub const m_worldGroupId: usize = 0x540; // WorldGroupId_t + pub const m_hSkyCamera: usize = 0x544; // CHandle<C_SkyCamera> +} + +pub mod CTablet { // C_CSWeaponBase +} + +pub mod CTimeline { // IntervalTimer + pub const m_flValues: usize = 0x10; // float[64] + pub const m_nValueCounts: usize = 0x110; // int32_t[64] + pub const m_nBucketCount: usize = 0x210; // int32_t + pub const m_flInterval: usize = 0x214; // float + pub const m_flFinalValue: usize = 0x218; // float + pub const m_nCompressionType: usize = 0x21C; // TimelineCompression_t + pub const m_bStopped: usize = 0x220; // bool +} + +pub mod CTripWireFire { // C_BaseCSGrenade +} + +pub mod CTripWireFireProjectile { // C_BaseGrenade +} + +pub mod CWaterSplasher { // C_BaseModelEntity +} + +pub mod CWeaponZoneRepulsor { // C_CSWeaponBaseGun +} + +pub mod C_AK47 { // C_CSWeaponBaseGun +} + +pub mod C_AttributeContainer { // CAttributeManager + pub const m_Item: usize = 0x50; // C_EconItemView + pub const m_iExternalItemProviderRegisteredToken: usize = 0x498; // int32_t + pub const m_ullRegisteredAsItemID: usize = 0x4A0; // uint64_t +} + +pub mod C_BarnLight { // C_BaseModelEntity + pub const m_bEnabled: usize = 0xCC0; // bool + pub const m_nColorMode: usize = 0xCC4; // int32_t + pub const m_Color: usize = 0xCC8; // Color + pub const m_flColorTemperature: usize = 0xCCC; // float + pub const m_flBrightness: usize = 0xCD0; // float + pub const m_flBrightnessScale: usize = 0xCD4; // float + pub const m_nDirectLight: usize = 0xCD8; // int32_t + pub const m_nBakedShadowIndex: usize = 0xCDC; // int32_t + pub const m_nLuminaireShape: usize = 0xCE0; // int32_t + pub const m_flLuminaireSize: usize = 0xCE4; // float + pub const m_flLuminaireAnisotropy: usize = 0xCE8; // float + pub const m_LightStyleString: usize = 0xCF0; // CUtlString + pub const m_flLightStyleStartTime: usize = 0xCF8; // GameTime_t + pub const m_QueuedLightStyleStrings: usize = 0xD00; // C_NetworkUtlVectorBase<CUtlString> + pub const m_LightStyleEvents: usize = 0xD18; // C_NetworkUtlVectorBase<CUtlString> + pub const m_LightStyleTargets: usize = 0xD30; // C_NetworkUtlVectorBase<CHandle<C_BaseModelEntity>> + pub const m_StyleEvent: usize = 0xD48; // CEntityIOOutput[4] + pub const m_hLightCookie: usize = 0xDE8; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_flShape: usize = 0xDF0; // float + pub const m_flSoftX: usize = 0xDF4; // float + pub const m_flSoftY: usize = 0xDF8; // float + pub const m_flSkirt: usize = 0xDFC; // float + pub const m_flSkirtNear: usize = 0xE00; // float + pub const m_vSizeParams: usize = 0xE04; // Vector + pub const m_flRange: usize = 0xE10; // float + pub const m_vShear: usize = 0xE14; // Vector + pub const m_nBakeSpecularToCubemaps: usize = 0xE20; // int32_t + pub const m_vBakeSpecularToCubemapsSize: usize = 0xE24; // Vector + pub const m_nCastShadows: usize = 0xE30; // int32_t + pub const m_nShadowMapSize: usize = 0xE34; // int32_t + pub const m_nShadowPriority: usize = 0xE38; // int32_t + pub const m_bContactShadow: usize = 0xE3C; // bool + pub const m_nBounceLight: usize = 0xE40; // int32_t + pub const m_flBounceScale: usize = 0xE44; // float + pub const m_flMinRoughness: usize = 0xE48; // float + pub const m_vAlternateColor: usize = 0xE4C; // Vector + pub const m_fAlternateColorBrightness: usize = 0xE58; // float + pub const m_nFog: usize = 0xE5C; // int32_t + pub const m_flFogStrength: usize = 0xE60; // float + pub const m_nFogShadows: usize = 0xE64; // int32_t + pub const m_flFogScale: usize = 0xE68; // float + pub const m_flFadeSizeStart: usize = 0xE6C; // float + pub const m_flFadeSizeEnd: usize = 0xE70; // float + pub const m_flShadowFadeSizeStart: usize = 0xE74; // float + pub const m_flShadowFadeSizeEnd: usize = 0xE78; // float + pub const m_bPrecomputedFieldsValid: usize = 0xE7C; // bool + pub const m_vPrecomputedBoundsMins: usize = 0xE80; // Vector + pub const m_vPrecomputedBoundsMaxs: usize = 0xE8C; // Vector + pub const m_vPrecomputedOBBOrigin: usize = 0xE98; // Vector + pub const m_vPrecomputedOBBAngles: usize = 0xEA4; // QAngle + pub const m_vPrecomputedOBBExtent: usize = 0xEB0; // Vector +} + +pub mod C_BaseButton { // C_BaseToggle + pub const m_glowEntity: usize = 0xCC0; // CHandle<C_BaseModelEntity> + pub const m_usable: usize = 0xCC4; // bool + pub const m_szDisplayText: usize = 0xCC8; // CUtlSymbolLarge +} + +pub mod C_BaseCSGrenade { // C_CSWeaponBase + pub const m_bClientPredictDelete: usize = 0x1940; // bool + pub const m_bRedraw: usize = 0x1968; // bool + pub const m_bIsHeldByPlayer: usize = 0x1969; // bool + pub const m_bPinPulled: usize = 0x196A; // bool + pub const m_bJumpThrow: usize = 0x196B; // bool + pub const m_eThrowStatus: usize = 0x196C; // EGrenadeThrowState + pub const m_fThrowTime: usize = 0x1970; // GameTime_t + pub const m_flThrowStrength: usize = 0x1974; // float + pub const m_flThrowStrengthApproach: usize = 0x1978; // float + pub const m_fDropTime: usize = 0x197C; // GameTime_t +} + +pub mod C_BaseCSGrenadeProjectile { // C_BaseGrenade + pub const m_vInitialVelocity: usize = 0x1068; // Vector + pub const m_nBounces: usize = 0x1074; // int32_t + pub const m_nExplodeEffectIndex: usize = 0x1078; // CStrongHandle<InfoForResourceTypeIParticleSystemDefinition> + pub const m_nExplodeEffectTickBegin: usize = 0x1080; // int32_t + pub const m_vecExplodeEffectOrigin: usize = 0x1084; // Vector + pub const m_flSpawnTime: usize = 0x1090; // GameTime_t + pub const vecLastTrailLinePos: usize = 0x1094; // Vector + pub const flNextTrailLineTime: usize = 0x10A0; // GameTime_t + pub const m_bExplodeEffectBegan: usize = 0x10A4; // bool + pub const m_bCanCreateGrenadeTrail: usize = 0x10A5; // bool + pub const m_nSnapshotTrajectoryEffectIndex: usize = 0x10A8; // ParticleIndex_t + pub const m_hSnapshotTrajectoryParticleSnapshot: usize = 0x10B0; // CStrongHandle<InfoForResourceTypeIParticleSnapshot> + pub const m_arrTrajectoryTrailPoints: usize = 0x10B8; // CUtlVector<Vector> + pub const m_arrTrajectoryTrailPointCreationTimes: usize = 0x10D0; // CUtlVector<float> + pub const m_flTrajectoryTrailEffectCreationTime: usize = 0x10E8; // float +} + +pub mod C_BaseClientUIEntity { // C_BaseModelEntity + pub const m_bEnabled: usize = 0xCC8; // bool + pub const m_DialogXMLName: usize = 0xCD0; // CUtlSymbolLarge + pub const m_PanelClassName: usize = 0xCD8; // CUtlSymbolLarge + pub const m_PanelID: usize = 0xCE0; // CUtlSymbolLarge +} + +pub mod C_BaseCombatCharacter { // C_BaseFlex + pub const m_hMyWearables: usize = 0x1018; // C_NetworkUtlVectorBase<CHandle<C_EconWearable>> + pub const m_bloodColor: usize = 0x1030; // int32_t + pub const m_leftFootAttachment: usize = 0x1034; // AttachmentHandle_t + pub const m_rightFootAttachment: usize = 0x1035; // AttachmentHandle_t + pub const m_nWaterWakeMode: usize = 0x1038; // C_BaseCombatCharacter::WaterWakeMode_t + pub const m_flWaterWorldZ: usize = 0x103C; // float + pub const m_flWaterNextTraceTime: usize = 0x1040; // float + pub const m_flFieldOfView: usize = 0x1044; // float +} + +pub mod C_BaseDoor { // C_BaseToggle + pub const m_bIsUsable: usize = 0xCC0; // bool +} + +pub mod C_BaseEntity { // CEntityInstance + pub const m_CBodyComponent: usize = 0x30; // CBodyComponent* + pub const m_NetworkTransmitComponent: usize = 0x38; // CNetworkTransmitComponent + pub const m_nLastThinkTick: usize = 0x308; // GameTick_t + pub const m_pGameSceneNode: usize = 0x310; // CGameSceneNode* + pub const m_pRenderComponent: usize = 0x318; // CRenderComponent* + pub const m_pCollision: usize = 0x320; // CCollisionProperty* + pub const m_iMaxHealth: usize = 0x328; // int32_t + pub const m_iHealth: usize = 0x32C; // int32_t + pub const m_lifeState: usize = 0x330; // uint8_t + pub const m_bTakesDamage: usize = 0x331; // bool + pub const m_nTakeDamageFlags: usize = 0x334; // TakeDamageFlags_t + pub const m_ubInterpolationFrame: usize = 0x338; // uint8_t + pub const m_hSceneObjectController: usize = 0x33C; // CHandle<C_BaseEntity> + pub const m_nNoInterpolationTick: usize = 0x340; // int32_t + pub const m_nVisibilityNoInterpolationTick: usize = 0x344; // int32_t + pub const m_flProxyRandomValue: usize = 0x348; // float + pub const m_iEFlags: usize = 0x34C; // int32_t + pub const m_nWaterType: usize = 0x350; // uint8_t + pub const m_bInterpolateEvenWithNoModel: usize = 0x351; // bool + pub const m_bPredictionEligible: usize = 0x352; // bool + pub const m_bApplyLayerMatchIDToModel: usize = 0x353; // bool + pub const m_tokLayerMatchID: usize = 0x354; // CUtlStringToken + pub const m_nSubclassID: usize = 0x358; // CUtlStringToken + pub const m_nSimulationTick: usize = 0x368; // int32_t + pub const m_iCurrentThinkContext: usize = 0x36C; // int32_t + pub const m_aThinkFunctions: usize = 0x370; // CUtlVector<thinkfunc_t> + pub const m_flAnimTime: usize = 0x388; // float + pub const m_flSimulationTime: usize = 0x38C; // float + pub const m_nSceneObjectOverrideFlags: usize = 0x390; // uint8_t + pub const m_bHasSuccessfullyInterpolated: usize = 0x391; // bool + pub const m_bHasAddedVarsToInterpolation: usize = 0x392; // bool + pub const m_bRenderEvenWhenNotSuccessfullyInterpolated: usize = 0x393; // bool + pub const m_nInterpolationLatchDirtyFlags: usize = 0x394; // int32_t[2] + pub const m_ListEntry: usize = 0x39C; // uint16_t[11] + pub const m_flCreateTime: usize = 0x3B4; // GameTime_t + pub const m_flSpeed: usize = 0x3B8; // float + pub const m_EntClientFlags: usize = 0x3BC; // uint16_t + pub const m_bClientSideRagdoll: usize = 0x3BE; // bool + pub const m_iTeamNum: usize = 0x3BF; // uint8_t + pub const m_spawnflags: usize = 0x3C0; // uint32_t + pub const m_nNextThinkTick: usize = 0x3C4; // GameTick_t + pub const m_fFlags: usize = 0x3C8; // uint32_t + pub const m_vecAbsVelocity: usize = 0x3CC; // Vector + pub const m_vecVelocity: usize = 0x3D8; // CNetworkVelocityVector + pub const m_vecBaseVelocity: usize = 0x408; // Vector + pub const m_hEffectEntity: usize = 0x414; // CHandle<C_BaseEntity> + pub const m_hOwnerEntity: usize = 0x418; // CHandle<C_BaseEntity> + pub const m_MoveCollide: usize = 0x41C; // MoveCollide_t + pub const m_MoveType: usize = 0x41D; // MoveType_t + pub const m_flWaterLevel: usize = 0x420; // float + pub const m_fEffects: usize = 0x424; // uint32_t + pub const m_hGroundEntity: usize = 0x428; // CHandle<C_BaseEntity> + pub const m_flFriction: usize = 0x42C; // float + pub const m_flElasticity: usize = 0x430; // float + pub const m_flGravityScale: usize = 0x434; // float + pub const m_flTimeScale: usize = 0x438; // float + pub const m_bSimulatedEveryTick: usize = 0x43C; // bool + pub const m_bAnimatedEveryTick: usize = 0x43D; // bool + pub const m_flNavIgnoreUntilTime: usize = 0x440; // GameTime_t + pub const m_hThink: usize = 0x444; // uint16_t + pub const m_fBBoxVisFlags: usize = 0x450; // uint8_t + pub const m_bPredictable: usize = 0x451; // bool + pub const m_bRenderWithViewModels: usize = 0x452; // bool + pub const m_nSplitUserPlayerPredictionSlot: usize = 0x454; // CSplitScreenSlot + pub const m_nFirstPredictableCommand: usize = 0x458; // int32_t + pub const m_nLastPredictableCommand: usize = 0x45C; // int32_t + pub const m_hOldMoveParent: usize = 0x460; // CHandle<C_BaseEntity> + pub const m_Particles: usize = 0x468; // CParticleProperty + pub const m_vecPredictedScriptFloats: usize = 0x490; // CUtlVector<float> + pub const m_vecPredictedScriptFloatIDs: usize = 0x4A8; // CUtlVector<int32_t> + pub const m_nNextScriptVarRecordID: usize = 0x4D8; // int32_t + pub const m_vecAngVelocity: usize = 0x4E8; // QAngle + pub const m_DataChangeEventRef: usize = 0x4F4; // int32_t + pub const m_dependencies: usize = 0x4F8; // CUtlVector<CEntityHandle> + pub const m_nCreationTick: usize = 0x510; // int32_t + pub const m_bAnimTimeChanged: usize = 0x529; // bool + pub const m_bSimulationTimeChanged: usize = 0x52A; // bool + pub const m_sUniqueHammerID: usize = 0x538; // CUtlString +} + +pub mod C_BaseFire { // C_BaseEntity + pub const m_flScale: usize = 0x540; // float + pub const m_flStartScale: usize = 0x544; // float + pub const m_flScaleTime: usize = 0x548; // float + pub const m_nFlags: usize = 0x54C; // uint32_t +} + +pub mod C_BaseFlex { // CBaseAnimGraph + pub const m_flexWeight: usize = 0xE90; // C_NetworkUtlVectorBase<float> + pub const m_vLookTargetPosition: usize = 0xEA8; // Vector + pub const m_blinktoggle: usize = 0xEC0; // bool + pub const m_nLastFlexUpdateFrameCount: usize = 0xF20; // int32_t + pub const m_CachedViewTarget: usize = 0xF24; // Vector + pub const m_nNextSceneEventId: usize = 0xF30; // uint32_t + pub const m_iBlink: usize = 0xF34; // int32_t + pub const m_blinktime: usize = 0xF38; // float + pub const m_prevblinktoggle: usize = 0xF3C; // bool + pub const m_iJawOpen: usize = 0xF40; // int32_t + pub const m_flJawOpenAmount: usize = 0xF44; // float + pub const m_flBlinkAmount: usize = 0xF48; // float + pub const m_iMouthAttachment: usize = 0xF4C; // AttachmentHandle_t + pub const m_iEyeAttachment: usize = 0xF4D; // AttachmentHandle_t + pub const m_bResetFlexWeightsOnModelChange: usize = 0xF4E; // bool + pub const m_nEyeOcclusionRendererBone: usize = 0xF68; // int32_t + pub const m_mEyeOcclusionRendererCameraToBoneTransform: usize = 0xF6C; // matrix3x4_t + pub const m_vEyeOcclusionRendererHalfExtent: usize = 0xF9C; // Vector + pub const m_PhonemeClasses: usize = 0xFB8; // C_BaseFlex::Emphasized_Phoneme[3] +} + +pub mod C_BaseFlex_Emphasized_Phoneme { + pub const m_sClassName: usize = 0x0; // CUtlString + pub const m_flAmount: usize = 0x18; // float + pub const m_bRequired: usize = 0x1C; // bool + pub const m_bBasechecked: usize = 0x1D; // bool + pub const m_bValid: usize = 0x1E; // bool +} + +pub mod C_BaseGrenade { // C_BaseFlex + pub const m_bHasWarnedAI: usize = 0x1018; // bool + pub const m_bIsSmokeGrenade: usize = 0x1019; // bool + pub const m_bIsLive: usize = 0x101A; // bool + pub const m_DmgRadius: usize = 0x101C; // float + pub const m_flDetonateTime: usize = 0x1020; // GameTime_t + pub const m_flWarnAITime: usize = 0x1024; // float + pub const m_flDamage: usize = 0x1028; // float + pub const m_iszBounceSound: usize = 0x1030; // CUtlSymbolLarge + pub const m_ExplosionSound: usize = 0x1038; // CUtlString + pub const m_hThrower: usize = 0x1044; // CHandle<C_CSPlayerPawn> + pub const m_flNextAttack: usize = 0x105C; // GameTime_t + pub const m_hOriginalThrower: usize = 0x1060; // CHandle<C_CSPlayerPawn> +} + +pub mod C_BaseModelEntity { // C_BaseEntity + pub const m_CRenderComponent: usize = 0xA10; // CRenderComponent* + pub const m_CHitboxComponent: usize = 0xA18; // CHitboxComponent + pub const m_bInitModelEffects: usize = 0xA60; // bool + pub const m_bIsStaticProp: usize = 0xA61; // bool + pub const m_nLastAddDecal: usize = 0xA64; // int32_t + pub const m_nDecalsAdded: usize = 0xA68; // int32_t + pub const m_iOldHealth: usize = 0xA6C; // int32_t + pub const m_nRenderMode: usize = 0xA70; // RenderMode_t + pub const m_nRenderFX: usize = 0xA71; // RenderFx_t + pub const m_bAllowFadeInView: usize = 0xA72; // bool + pub const m_clrRender: usize = 0xA73; // Color + pub const m_vecRenderAttributes: usize = 0xA78; // C_UtlVectorEmbeddedNetworkVar<EntityRenderAttribute_t> + pub const m_LightGroup: usize = 0xAE0; // CUtlStringToken + pub const m_bRenderToCubemaps: usize = 0xAE4; // bool + pub const m_Collision: usize = 0xAE8; // CCollisionProperty + pub const m_Glow: usize = 0xB98; // CGlowProperty + pub const m_flGlowBackfaceMult: usize = 0xBF0; // float + pub const m_fadeMinDist: usize = 0xBF4; // float + pub const m_fadeMaxDist: usize = 0xBF8; // float + pub const m_flFadeScale: usize = 0xBFC; // float + pub const m_flShadowStrength: usize = 0xC00; // float + pub const m_nObjectCulling: usize = 0xC04; // uint8_t + pub const m_nAddDecal: usize = 0xC08; // int32_t + pub const m_vDecalPosition: usize = 0xC0C; // Vector + pub const m_vDecalForwardAxis: usize = 0xC18; // Vector + pub const m_flDecalHealBloodRate: usize = 0xC24; // float + pub const m_flDecalHealHeightRate: usize = 0xC28; // float + pub const m_ConfigEntitiesToPropagateMaterialDecalsTo: usize = 0xC30; // C_NetworkUtlVectorBase<CHandle<C_BaseModelEntity>> + pub const m_vecViewOffset: usize = 0xC48; // CNetworkViewOffsetVector + pub const m_pClientAlphaProperty: usize = 0xC78; // CClientAlphaProperty* + pub const m_ClientOverrideTint: usize = 0xC80; // Color + pub const m_bUseClientOverrideTint: usize = 0xC84; // bool +} + +pub mod C_BasePlayerPawn { // C_BaseCombatCharacter + pub const m_pWeaponServices: usize = 0x10A8; // CPlayer_WeaponServices* + pub const m_pItemServices: usize = 0x10B0; // CPlayer_ItemServices* + pub const m_pAutoaimServices: usize = 0x10B8; // CPlayer_AutoaimServices* + pub const m_pObserverServices: usize = 0x10C0; // CPlayer_ObserverServices* + pub const m_pWaterServices: usize = 0x10C8; // CPlayer_WaterServices* + pub const m_pUseServices: usize = 0x10D0; // CPlayer_UseServices* + pub const m_pFlashlightServices: usize = 0x10D8; // CPlayer_FlashlightServices* + pub const m_pCameraServices: usize = 0x10E0; // CPlayer_CameraServices* + pub const m_pMovementServices: usize = 0x10E8; // CPlayer_MovementServices* + pub const m_ServerViewAngleChanges: usize = 0x10F8; // C_UtlVectorEmbeddedNetworkVar<ViewAngleServerChange_t> + pub const m_nHighestConsumedServerViewAngleChangeIndex: usize = 0x1148; // uint32_t + pub const v_angle: usize = 0x114C; // QAngle + pub const v_anglePrevious: usize = 0x1158; // QAngle + pub const m_iHideHUD: usize = 0x1164; // uint32_t + pub const m_skybox3d: usize = 0x1168; // sky3dparams_t + pub const m_flDeathTime: usize = 0x11F8; // GameTime_t + pub const m_vecPredictionError: usize = 0x11FC; // Vector + pub const m_flPredictionErrorTime: usize = 0x1208; // GameTime_t + pub const m_flFOVSensitivityAdjust: usize = 0x120C; // float + pub const m_flMouseSensitivity: usize = 0x1210; // float + pub const m_vOldOrigin: usize = 0x1214; // Vector + pub const m_flOldSimulationTime: usize = 0x1220; // float + pub const m_nLastExecutedCommandNumber: usize = 0x1224; // int32_t + pub const m_nLastExecutedCommandTick: usize = 0x1228; // int32_t + pub const m_hController: usize = 0x122C; // CHandle<CBasePlayerController> + pub const m_bIsSwappingToPredictableController: usize = 0x1230; // bool +} + +pub mod C_BasePlayerWeapon { // C_EconEntity + pub const m_nNextPrimaryAttackTick: usize = 0x1560; // GameTick_t + pub const m_flNextPrimaryAttackTickRatio: usize = 0x1564; // float + pub const m_nNextSecondaryAttackTick: usize = 0x1568; // GameTick_t + pub const m_flNextSecondaryAttackTickRatio: usize = 0x156C; // float + pub const m_iClip1: usize = 0x1570; // int32_t + pub const m_iClip2: usize = 0x1574; // int32_t + pub const m_pReserveAmmo: usize = 0x1578; // int32_t[2] +} + +pub mod C_BasePropDoor { // C_DynamicProp + pub const m_eDoorState: usize = 0x10F8; // DoorState_t + pub const m_modelChanged: usize = 0x10FC; // bool + pub const m_bLocked: usize = 0x10FD; // bool + pub const m_closedPosition: usize = 0x1100; // Vector + pub const m_closedAngles: usize = 0x110C; // QAngle + pub const m_hMaster: usize = 0x1118; // CHandle<C_BasePropDoor> + pub const m_vWhereToSetLightingOrigin: usize = 0x111C; // Vector +} + +pub mod C_BaseToggle { // C_BaseModelEntity +} + +pub mod C_BaseTrigger { // C_BaseToggle + pub const m_bDisabled: usize = 0xCC0; // bool + pub const m_bClientSidePredicted: usize = 0xCC1; // bool +} + +pub mod C_BaseViewModel { // CBaseAnimGraph + pub const m_vecLastFacing: usize = 0xE88; // Vector + pub const m_nViewModelIndex: usize = 0xE94; // uint32_t + pub const m_nAnimationParity: usize = 0xE98; // uint32_t + pub const m_flAnimationStartTime: usize = 0xE9C; // float + pub const m_hWeapon: usize = 0xEA0; // CHandle<C_BasePlayerWeapon> + pub const m_sVMName: usize = 0xEA8; // CUtlSymbolLarge + pub const m_sAnimationPrefix: usize = 0xEB0; // CUtlSymbolLarge + pub const m_hWeaponModel: usize = 0xEB8; // CHandle<C_ViewmodelWeapon> + pub const m_iCameraAttachment: usize = 0xEBC; // AttachmentHandle_t + pub const m_vecLastCameraAngles: usize = 0xEC0; // QAngle + pub const m_previousElapsedDuration: usize = 0xECC; // float + pub const m_previousCycle: usize = 0xED0; // float + pub const m_nOldAnimationParity: usize = 0xED4; // int32_t + pub const m_hOldLayerSequence: usize = 0xED8; // HSequence + pub const m_oldLayer: usize = 0xEDC; // int32_t + pub const m_oldLayerStartTime: usize = 0xEE0; // float + pub const m_hControlPanel: usize = 0xEE4; // CHandle<C_BaseEntity> +} + +pub mod C_Beam { // C_BaseModelEntity + pub const m_flFrameRate: usize = 0xCC0; // float + pub const m_flHDRColorScale: usize = 0xCC4; // float + pub const m_flFireTime: usize = 0xCC8; // GameTime_t + pub const m_flDamage: usize = 0xCCC; // float + pub const m_nNumBeamEnts: usize = 0xCD0; // uint8_t + pub const m_queryHandleHalo: usize = 0xCD4; // int32_t + pub const m_hBaseMaterial: usize = 0xCF8; // CStrongHandle<InfoForResourceTypeIMaterial2> + pub const m_nHaloIndex: usize = 0xD00; // CStrongHandle<InfoForResourceTypeIMaterial2> + pub const m_nBeamType: usize = 0xD08; // BeamType_t + pub const m_nBeamFlags: usize = 0xD0C; // uint32_t + pub const m_hAttachEntity: usize = 0xD10; // CHandle<C_BaseEntity>[10] + pub const m_nAttachIndex: usize = 0xD38; // AttachmentHandle_t[10] + pub const m_fWidth: usize = 0xD44; // float + pub const m_fEndWidth: usize = 0xD48; // float + pub const m_fFadeLength: usize = 0xD4C; // float + pub const m_fHaloScale: usize = 0xD50; // float + pub const m_fAmplitude: usize = 0xD54; // float + pub const m_fStartFrame: usize = 0xD58; // float + pub const m_fSpeed: usize = 0xD5C; // float + pub const m_flFrame: usize = 0xD60; // float + pub const m_nClipStyle: usize = 0xD64; // BeamClipStyle_t + pub const m_bTurnedOff: usize = 0xD68; // bool + pub const m_vecEndPos: usize = 0xD6C; // Vector + pub const m_hEndEntity: usize = 0xD78; // CHandle<C_BaseEntity> +} + +pub mod C_Breakable { // C_BaseModelEntity +} + +pub mod C_BreakableProp { // CBaseProp + pub const m_OnBreak: usize = 0xEC8; // CEntityIOOutput + pub const m_OnHealthChanged: usize = 0xEF0; // CEntityOutputTemplate<float> + pub const m_OnTakeDamage: usize = 0xF18; // CEntityIOOutput + pub const m_impactEnergyScale: usize = 0xF40; // float + pub const m_iMinHealthDmg: usize = 0xF44; // int32_t + pub const m_flPressureDelay: usize = 0xF48; // float + pub const m_hBreaker: usize = 0xF4C; // CHandle<C_BaseEntity> + pub const m_PerformanceMode: usize = 0xF50; // PerformanceMode_t + pub const m_flDmgModBullet: usize = 0xF54; // float + pub const m_flDmgModClub: usize = 0xF58; // float + pub const m_flDmgModExplosive: usize = 0xF5C; // float + pub const m_flDmgModFire: usize = 0xF60; // float + pub const m_iszPhysicsDamageTableName: usize = 0xF68; // CUtlSymbolLarge + pub const m_iszBasePropData: usize = 0xF70; // CUtlSymbolLarge + pub const m_iInteractions: usize = 0xF78; // int32_t + pub const m_flPreventDamageBeforeTime: usize = 0xF7C; // GameTime_t + pub const m_bHasBreakPiecesOrCommands: usize = 0xF80; // bool + pub const m_explodeDamage: usize = 0xF84; // float + pub const m_explodeRadius: usize = 0xF88; // float + pub const m_explosionDelay: usize = 0xF90; // float + pub const m_explosionBuildupSound: usize = 0xF98; // CUtlSymbolLarge + pub const m_explosionCustomEffect: usize = 0xFA0; // CUtlSymbolLarge + pub const m_explosionCustomSound: usize = 0xFA8; // CUtlSymbolLarge + pub const m_explosionModifier: usize = 0xFB0; // CUtlSymbolLarge + pub const m_hPhysicsAttacker: usize = 0xFB8; // CHandle<C_BasePlayerPawn> + pub const m_flLastPhysicsInfluenceTime: usize = 0xFBC; // GameTime_t + pub const m_flDefaultFadeScale: usize = 0xFC0; // float + pub const m_hLastAttacker: usize = 0xFC4; // CHandle<C_BaseEntity> + pub const m_hFlareEnt: usize = 0xFC8; // CHandle<C_BaseEntity> + pub const m_noGhostCollision: usize = 0xFCC; // bool +} + +pub mod C_BulletHitModel { // CBaseAnimGraph + pub const m_matLocal: usize = 0xE80; // matrix3x4_t + pub const m_iBoneIndex: usize = 0xEB0; // int32_t + pub const m_hPlayerParent: usize = 0xEB4; // CHandle<C_BaseEntity> + pub const m_bIsHit: usize = 0xEB8; // bool + pub const m_flTimeCreated: usize = 0xEBC; // float + pub const m_vecStartPos: usize = 0xEC0; // Vector +} + +pub mod C_C4 { // C_CSWeaponBase + pub const m_szScreenText: usize = 0x1940; // char[32] + pub const m_bombdroppedlightParticleIndex: usize = 0x1960; // ParticleIndex_t + pub const m_bStartedArming: usize = 0x1964; // bool + pub const m_fArmedTime: usize = 0x1968; // GameTime_t + pub const m_bBombPlacedAnimation: usize = 0x196C; // bool + pub const m_bIsPlantingViaUse: usize = 0x196D; // bool + pub const m_entitySpottedState: usize = 0x1970; // EntitySpottedState_t + pub const m_nSpotRules: usize = 0x1988; // int32_t + pub const m_bPlayedArmingBeeps: usize = 0x198C; // bool[7] + pub const m_bBombPlanted: usize = 0x1993; // bool + pub const m_bDroppedFromDeath: usize = 0x1994; // bool +} + +pub mod C_CSGOViewModel { // C_PredictedViewModel + pub const m_bShouldIgnoreOffsetAndAccuracy: usize = 0xF10; // bool + pub const m_nWeaponParity: usize = 0xF14; // uint32_t + pub const m_nOldWeaponParity: usize = 0xF18; // uint32_t + pub const m_nLastKnownAssociatedWeaponEntIndex: usize = 0xF1C; // CEntityIndex + pub const m_bNeedToQueueHighResComposite: usize = 0xF20; // bool + pub const m_vLoweredWeaponOffset: usize = 0xF64; // QAngle +} + +pub mod C_CSGO_CounterTerroristTeamIntroCamera { // C_CSGO_TeamPreviewCamera +} + +pub mod C_CSGO_CounterTerroristWingmanIntroCamera { // C_CSGO_TeamPreviewCamera +} + +pub mod C_CSGO_EndOfMatchCamera { // C_CSGO_TeamPreviewCamera +} + +pub mod C_CSGO_EndOfMatchCharacterPosition { // C_CSGO_TeamPreviewCharacterPosition +} + +pub mod C_CSGO_EndOfMatchLineupEnd { // C_CSGO_EndOfMatchLineupEndpoint +} + +pub mod C_CSGO_EndOfMatchLineupEndpoint { // C_BaseEntity +} + +pub mod C_CSGO_EndOfMatchLineupStart { // C_CSGO_EndOfMatchLineupEndpoint +} + +pub mod C_CSGO_MapPreviewCameraPath { // C_BaseEntity + pub const m_flZFar: usize = 0x540; // float + pub const m_flZNear: usize = 0x544; // float + pub const m_bLoop: usize = 0x548; // bool + pub const m_bVerticalFOV: usize = 0x549; // bool + pub const m_bConstantSpeed: usize = 0x54A; // bool + pub const m_flDuration: usize = 0x54C; // float + pub const m_flPathLength: usize = 0x590; // float + pub const m_flPathDuration: usize = 0x594; // float +} + +pub mod C_CSGO_MapPreviewCameraPathNode { // C_BaseEntity + pub const m_szParentPathUniqueID: usize = 0x540; // CUtlSymbolLarge + pub const m_nPathIndex: usize = 0x548; // int32_t + pub const m_vInTangentLocal: usize = 0x54C; // Vector + pub const m_vOutTangentLocal: usize = 0x558; // Vector + pub const m_flFOV: usize = 0x564; // float + pub const m_flSpeed: usize = 0x568; // float + pub const m_flEaseIn: usize = 0x56C; // float + pub const m_flEaseOut: usize = 0x570; // float + pub const m_vInTangentWorld: usize = 0x574; // Vector + pub const m_vOutTangentWorld: usize = 0x580; // Vector +} + +pub mod C_CSGO_PreviewModel { // C_BaseFlex + pub const m_animgraph: usize = 0x1018; // CUtlString + pub const m_animgraphCharacterModeString: usize = 0x1020; // CUtlString + pub const m_defaultAnim: usize = 0x1028; // CUtlString + pub const m_nDefaultAnimLoopMode: usize = 0x1030; // AnimLoopMode_t + pub const m_flInitialModelScale: usize = 0x1034; // float +} + +pub mod C_CSGO_PreviewModelAlias_csgo_item_previewmodel { // C_CSGO_PreviewModel +} + +pub mod C_CSGO_PreviewPlayer { // C_CSPlayerPawn + pub const m_animgraph: usize = 0x22C0; // CUtlString + pub const m_animgraphCharacterModeString: usize = 0x22C8; // CUtlString + pub const m_flInitialModelScale: usize = 0x22D0; // float +} + +pub mod C_CSGO_PreviewPlayerAlias_csgo_player_previewmodel { // C_CSGO_PreviewPlayer +} + +pub mod C_CSGO_TeamIntroCharacterPosition { // C_CSGO_TeamPreviewCharacterPosition +} + +pub mod C_CSGO_TeamIntroCounterTerroristPosition { // C_CSGO_TeamIntroCharacterPosition +} + +pub mod C_CSGO_TeamIntroTerroristPosition { // C_CSGO_TeamIntroCharacterPosition +} + +pub mod C_CSGO_TeamPreviewCamera { // C_CSGO_MapPreviewCameraPath + pub const m_nVariant: usize = 0x5A0; // int32_t + pub const m_bDofEnabled: usize = 0x5A4; // bool + pub const m_flDofNearBlurry: usize = 0x5A8; // float + pub const m_flDofNearCrisp: usize = 0x5AC; // float + pub const m_flDofFarCrisp: usize = 0x5B0; // float + pub const m_flDofFarBlurry: usize = 0x5B4; // float + pub const m_flDofTiltToGround: usize = 0x5B8; // float +} + +pub mod C_CSGO_TeamPreviewCharacterPosition { // C_BaseEntity + pub const m_nVariant: usize = 0x540; // int32_t + pub const m_nRandom: usize = 0x544; // int32_t + pub const m_nOrdinal: usize = 0x548; // int32_t + pub const m_sWeaponName: usize = 0x550; // CUtlString + pub const m_xuid: usize = 0x558; // uint64_t + pub const m_agentItem: usize = 0x560; // C_EconItemView + pub const m_glovesItem: usize = 0x9A8; // C_EconItemView + pub const m_weaponItem: usize = 0xDF0; // C_EconItemView +} + +pub mod C_CSGO_TeamPreviewModel { // C_CSGO_PreviewPlayer +} + +pub mod C_CSGO_TeamSelectCamera { // C_CSGO_TeamPreviewCamera +} + +pub mod C_CSGO_TeamSelectCharacterPosition { // C_CSGO_TeamPreviewCharacterPosition +} + +pub mod C_CSGO_TeamSelectCounterTerroristPosition { // C_CSGO_TeamSelectCharacterPosition +} + +pub mod C_CSGO_TeamSelectTerroristPosition { // C_CSGO_TeamSelectCharacterPosition +} + +pub mod C_CSGO_TerroristTeamIntroCamera { // C_CSGO_TeamPreviewCamera +} + +pub mod C_CSGO_TerroristWingmanIntroCamera { // C_CSGO_TeamPreviewCamera +} + +pub mod C_CSGameRules { // C_TeamplayRules + pub const __m_pChainEntity: usize = 0x8; // CNetworkVarChainer + pub const m_bFreezePeriod: usize = 0x30; // bool + pub const m_bWarmupPeriod: usize = 0x31; // bool + pub const m_fWarmupPeriodEnd: usize = 0x34; // GameTime_t + pub const m_fWarmupPeriodStart: usize = 0x38; // GameTime_t + pub const m_nTotalPausedTicks: usize = 0x3C; // int32_t + pub const m_nPauseStartTick: usize = 0x40; // int32_t + pub const m_bServerPaused: usize = 0x44; // bool + pub const m_bGamePaused: usize = 0x45; // bool + pub const m_bTerroristTimeOutActive: usize = 0x46; // bool + pub const m_bCTTimeOutActive: usize = 0x47; // bool + pub const m_flTerroristTimeOutRemaining: usize = 0x48; // float + pub const m_flCTTimeOutRemaining: usize = 0x4C; // float + pub const m_nTerroristTimeOuts: usize = 0x50; // int32_t + pub const m_nCTTimeOuts: usize = 0x54; // int32_t + pub const m_bTechnicalTimeOut: usize = 0x58; // bool + pub const m_bMatchWaitingForResume: usize = 0x59; // bool + pub const m_iRoundTime: usize = 0x5C; // int32_t + pub const m_fMatchStartTime: usize = 0x60; // float + pub const m_fRoundStartTime: usize = 0x64; // GameTime_t + pub const m_flRestartRoundTime: usize = 0x68; // GameTime_t + pub const m_bGameRestart: usize = 0x6C; // bool + pub const m_flGameStartTime: usize = 0x70; // float + pub const m_timeUntilNextPhaseStarts: usize = 0x74; // float + pub const m_gamePhase: usize = 0x78; // int32_t + pub const m_totalRoundsPlayed: usize = 0x7C; // int32_t + pub const m_nRoundsPlayedThisPhase: usize = 0x80; // int32_t + pub const m_nOvertimePlaying: usize = 0x84; // int32_t + pub const m_iHostagesRemaining: usize = 0x88; // int32_t + pub const m_bAnyHostageReached: usize = 0x8C; // bool + pub const m_bMapHasBombTarget: usize = 0x8D; // bool + pub const m_bMapHasRescueZone: usize = 0x8E; // bool + pub const m_bMapHasBuyZone: usize = 0x8F; // bool + pub const m_bIsQueuedMatchmaking: usize = 0x90; // bool + pub const m_nQueuedMatchmakingMode: usize = 0x94; // int32_t + pub const m_bIsValveDS: usize = 0x98; // bool + pub const m_bLogoMap: usize = 0x99; // bool + pub const m_bPlayAllStepSoundsOnServer: usize = 0x9A; // bool + pub const m_iSpectatorSlotCount: usize = 0x9C; // int32_t + pub const m_MatchDevice: usize = 0xA0; // int32_t + pub const m_bHasMatchStarted: usize = 0xA4; // bool + pub const m_nNextMapInMapgroup: usize = 0xA8; // int32_t + pub const m_szTournamentEventName: usize = 0xAC; // char[512] + pub const m_szTournamentEventStage: usize = 0x2AC; // char[512] + pub const m_szMatchStatTxt: usize = 0x4AC; // char[512] + pub const m_szTournamentPredictionsTxt: usize = 0x6AC; // char[512] + pub const m_nTournamentPredictionsPct: usize = 0x8AC; // int32_t + pub const m_flCMMItemDropRevealStartTime: usize = 0x8B0; // GameTime_t + pub const m_flCMMItemDropRevealEndTime: usize = 0x8B4; // GameTime_t + pub const m_bIsDroppingItems: usize = 0x8B8; // bool + pub const m_bIsQuestEligible: usize = 0x8B9; // bool + pub const m_bIsHltvActive: usize = 0x8BA; // bool + pub const m_nGuardianModeWaveNumber: usize = 0x8BC; // int32_t + pub const m_nGuardianModeSpecialKillsRemaining: usize = 0x8C0; // int32_t + pub const m_nGuardianModeSpecialWeaponNeeded: usize = 0x8C4; // int32_t + pub const m_nGuardianGrenadesToGiveBots: usize = 0x8C8; // int32_t + pub const m_nNumHeaviesToSpawn: usize = 0x8CC; // int32_t + pub const m_numGlobalGiftsGiven: usize = 0x8D0; // uint32_t + pub const m_numGlobalGifters: usize = 0x8D4; // uint32_t + pub const m_numGlobalGiftsPeriodSeconds: usize = 0x8D8; // uint32_t + pub const m_arrFeaturedGiftersAccounts: usize = 0x8DC; // uint32_t[4] + pub const m_arrFeaturedGiftersGifts: usize = 0x8EC; // uint32_t[4] + pub const m_arrProhibitedItemIndices: usize = 0x8FC; // uint16_t[100] + pub const m_arrTournamentActiveCasterAccounts: usize = 0x9C4; // uint32_t[4] + pub const m_numBestOfMaps: usize = 0x9D4; // int32_t + pub const m_nHalloweenMaskListSeed: usize = 0x9D8; // int32_t + pub const m_bBombDropped: usize = 0x9DC; // bool + pub const m_bBombPlanted: usize = 0x9DD; // bool + pub const m_iRoundWinStatus: usize = 0x9E0; // int32_t + pub const m_eRoundWinReason: usize = 0x9E4; // int32_t + pub const m_bTCantBuy: usize = 0x9E8; // bool + pub const m_bCTCantBuy: usize = 0x9E9; // bool + pub const m_flGuardianBuyUntilTime: usize = 0x9EC; // GameTime_t + pub const m_iMatchStats_RoundResults: usize = 0x9F0; // int32_t[30] + pub const m_iMatchStats_PlayersAlive_CT: usize = 0xA68; // int32_t[30] + pub const m_iMatchStats_PlayersAlive_T: usize = 0xAE0; // int32_t[30] + pub const m_TeamRespawnWaveTimes: usize = 0xB58; // float[32] + pub const m_flNextRespawnWave: usize = 0xBD8; // GameTime_t[32] + pub const m_nServerQuestID: usize = 0xC58; // int32_t + pub const m_vMinimapMins: usize = 0xC5C; // Vector + pub const m_vMinimapMaxs: usize = 0xC68; // Vector + pub const m_MinimapVerticalSectionHeights: usize = 0xC74; // float[8] + pub const m_bDontIncrementCoopWave: usize = 0xC94; // bool + pub const m_bSpawnedTerrorHuntHeavy: usize = 0xC95; // bool + pub const m_nEndMatchMapGroupVoteTypes: usize = 0xC98; // int32_t[10] + pub const m_nEndMatchMapGroupVoteOptions: usize = 0xCC0; // int32_t[10] + pub const m_nEndMatchMapVoteWinner: usize = 0xCE8; // int32_t + pub const m_iNumConsecutiveCTLoses: usize = 0xCEC; // int32_t + pub const m_iNumConsecutiveTerroristLoses: usize = 0xCF0; // int32_t + pub const m_bMarkClientStopRecordAtRoundEnd: usize = 0xD10; // bool + pub const m_bMatchAbortedDueToPlayerBan: usize = 0xD68; // bool + pub const m_bHasTriggeredRoundStartMusic: usize = 0xD69; // bool + pub const m_bHasTriggeredCoopSpawnReset: usize = 0xD6A; // bool + pub const m_bSwitchingTeamsAtRoundReset: usize = 0xD6B; // bool + pub const m_pGameModeRules: usize = 0xD88; // CCSGameModeRules* + pub const m_RetakeRules: usize = 0xD90; // C_RetakeGameRules + pub const m_nMatchEndCount: usize = 0xEA8; // uint8_t + pub const m_nTTeamIntroVariant: usize = 0xEAC; // int32_t + pub const m_nCTTeamIntroVariant: usize = 0xEB0; // int32_t + pub const m_bTeamIntroPeriod: usize = 0xEB4; // bool + pub const m_flLastPerfSampleTime: usize = 0x4EC0; // double +} + +pub mod C_CSGameRulesProxy { // C_GameRulesProxy + pub const m_pGameRules: usize = 0x540; // C_CSGameRules* +} + +pub mod C_CSMinimapBoundary { // C_BaseEntity +} + +pub mod C_CSObserverPawn { // C_CSPlayerPawnBase + pub const m_hDetectParentChange: usize = 0x1698; // CEntityHandle +} + +pub mod C_CSPlayerPawn { // C_CSPlayerPawnBase + pub const m_pBulletServices: usize = 0x1698; // CCSPlayer_BulletServices* + pub const m_pHostageServices: usize = 0x16A0; // CCSPlayer_HostageServices* + pub const m_pBuyServices: usize = 0x16A8; // CCSPlayer_BuyServices* + pub const m_pGlowServices: usize = 0x16B0; // CCSPlayer_GlowServices* + pub const m_pActionTrackingServices: usize = 0x16B8; // CCSPlayer_ActionTrackingServices* + pub const m_flHealthShotBoostExpirationTime: usize = 0x16C0; // GameTime_t + pub const m_flLastFiredWeaponTime: usize = 0x16C4; // GameTime_t + pub const m_bHasFemaleVoice: usize = 0x16C8; // bool + pub const m_flLandseconds: usize = 0x16CC; // float + pub const m_flOldFallVelocity: usize = 0x16D0; // float + pub const m_szLastPlaceName: usize = 0x16D4; // char[18] + pub const m_bPrevDefuser: usize = 0x16E6; // bool + pub const m_bPrevHelmet: usize = 0x16E7; // bool + pub const m_nPrevArmorVal: usize = 0x16E8; // int32_t + pub const m_nPrevGrenadeAmmoCount: usize = 0x16EC; // int32_t + pub const m_unPreviousWeaponHash: usize = 0x16F0; // uint32_t + pub const m_unWeaponHash: usize = 0x16F4; // uint32_t + pub const m_bInBuyZone: usize = 0x16F8; // bool + pub const m_bPreviouslyInBuyZone: usize = 0x16F9; // bool + pub const m_aimPunchAngle: usize = 0x16FC; // QAngle + pub const m_aimPunchAngleVel: usize = 0x1708; // QAngle + pub const m_aimPunchTickBase: usize = 0x1714; // int32_t + pub const m_aimPunchTickFraction: usize = 0x1718; // float + pub const m_aimPunchCache: usize = 0x1720; // CUtlVector<QAngle> + pub const m_bInLanding: usize = 0x1740; // bool + pub const m_flLandingTime: usize = 0x1744; // float + pub const m_bInHostageRescueZone: usize = 0x1748; // bool + pub const m_bInBombZone: usize = 0x1749; // bool + pub const m_bIsBuyMenuOpen: usize = 0x174A; // bool + pub const m_flTimeOfLastInjury: usize = 0x174C; // GameTime_t + pub const m_flNextSprayDecalTime: usize = 0x1750; // GameTime_t + pub const m_iRetakesOffering: usize = 0x1868; // int32_t + pub const m_iRetakesOfferingCard: usize = 0x186C; // int32_t + pub const m_bRetakesHasDefuseKit: usize = 0x1870; // bool + pub const m_bRetakesMVPLastRound: usize = 0x1871; // bool + pub const m_iRetakesMVPBoostItem: usize = 0x1874; // int32_t + pub const m_RetakesMVPBoostExtraUtility: usize = 0x1878; // loadout_slot_t + pub const m_bNeedToReApplyGloves: usize = 0x1898; // bool + pub const m_EconGloves: usize = 0x18A0; // C_EconItemView + pub const m_bMustSyncRagdollState: usize = 0x1CE8; // bool + pub const m_nRagdollDamageBone: usize = 0x1CEC; // int32_t + pub const m_vRagdollDamageForce: usize = 0x1CF0; // Vector + pub const m_vRagdollDamagePosition: usize = 0x1CFC; // Vector + pub const m_szRagdollDamageWeaponName: usize = 0x1D08; // char[64] + pub const m_bRagdollDamageHeadshot: usize = 0x1D48; // bool + pub const m_bLastHeadBoneTransformIsValid: usize = 0x2288; // bool + pub const m_lastLandTime: usize = 0x228C; // GameTime_t + pub const m_bOnGroundLastTick: usize = 0x2290; // bool + pub const m_qDeathEyeAngles: usize = 0x22AC; // QAngle + pub const m_bSkipOneHeadConstraintUpdate: usize = 0x22B8; // bool +} + +pub mod C_CSPlayerPawnBase { // C_BasePlayerPawn + pub const m_pPingServices: usize = 0x1250; // CCSPlayer_PingServices* + pub const m_pViewModelServices: usize = 0x1258; // CPlayer_ViewModelServices* + pub const m_fRenderingClipPlane: usize = 0x1260; // float[4] + pub const m_nLastClipPlaneSetupFrame: usize = 0x1270; // int32_t + pub const m_vecLastClipCameraPos: usize = 0x1274; // Vector + pub const m_vecLastClipCameraForward: usize = 0x1280; // Vector + pub const m_bClipHitStaticWorld: usize = 0x128C; // bool + pub const m_bCachedPlaneIsValid: usize = 0x128D; // bool + pub const m_pClippingWeapon: usize = 0x1290; // C_CSWeaponBase* + pub const m_previousPlayerState: usize = 0x1298; // CSPlayerState + pub const m_flLastCollisionCeiling: usize = 0x129C; // float + pub const m_flLastCollisionCeilingChangeTime: usize = 0x12A0; // float + pub const m_grenadeParameterStashTime: usize = 0x12C0; // GameTime_t + pub const m_bGrenadeParametersStashed: usize = 0x12C4; // bool + pub const m_angStashedShootAngles: usize = 0x12C8; // QAngle + pub const m_vecStashedGrenadeThrowPosition: usize = 0x12D4; // Vector + pub const m_vecStashedVelocity: usize = 0x12E0; // Vector + pub const m_angShootAngleHistory: usize = 0x12EC; // QAngle[2] + pub const m_vecThrowPositionHistory: usize = 0x1304; // Vector[2] + pub const m_vecVelocityHistory: usize = 0x131C; // Vector[2] + pub const m_thirdPersonHeading: usize = 0x1338; // QAngle + pub const m_flSlopeDropOffset: usize = 0x1350; // float + pub const m_flSlopeDropHeight: usize = 0x1360; // float + pub const m_vHeadConstraintOffset: usize = 0x1370; // Vector + pub const m_bIsScoped: usize = 0x1388; // bool + pub const m_bIsWalking: usize = 0x1389; // bool + pub const m_bResumeZoom: usize = 0x138A; // bool + pub const m_iPlayerState: usize = 0x138C; // CSPlayerState + pub const m_bIsDefusing: usize = 0x1390; // bool + pub const m_bIsGrabbingHostage: usize = 0x1391; // bool + pub const m_iBlockingUseActionInProgress: usize = 0x1394; // CSPlayerBlockingUseAction_t + pub const m_bIsRescuing: usize = 0x1398; // bool + pub const m_fImmuneToGunGameDamageTime: usize = 0x139C; // GameTime_t + pub const m_fImmuneToGunGameDamageTimeLast: usize = 0x13A0; // GameTime_t + pub const m_bGunGameImmunity: usize = 0x13A4; // bool + pub const m_bHasMovedSinceSpawn: usize = 0x13A5; // bool + pub const m_fMolotovUseTime: usize = 0x13A8; // float + pub const m_fMolotovDamageTime: usize = 0x13AC; // float + pub const m_nWhichBombZone: usize = 0x13B0; // int32_t + pub const m_bInNoDefuseArea: usize = 0x13B4; // bool + pub const m_iThrowGrenadeCounter: usize = 0x13B8; // int32_t + pub const m_bWaitForNoAttack: usize = 0x13BC; // bool + pub const m_flGuardianTooFarDistFrac: usize = 0x13C0; // float + pub const m_flDetectedByEnemySensorTime: usize = 0x13C4; // GameTime_t + pub const m_flNextGuardianTooFarWarning: usize = 0x13C8; // float + pub const m_bSuppressGuardianTooFarWarningAudio: usize = 0x13CC; // bool + pub const m_bKilledByTaser: usize = 0x13CD; // bool + pub const m_iMoveState: usize = 0x13D0; // int32_t + pub const m_bCanMoveDuringFreezePeriod: usize = 0x13D4; // bool + pub const m_flLowerBodyYawTarget: usize = 0x13D8; // float + pub const m_bStrafing: usize = 0x13DC; // bool + pub const m_flLastSpawnTimeIndex: usize = 0x13E0; // GameTime_t + pub const m_flEmitSoundTime: usize = 0x13E4; // GameTime_t + pub const m_iAddonBits: usize = 0x13E8; // int32_t + pub const m_iPrimaryAddon: usize = 0x13EC; // int32_t + pub const m_iSecondaryAddon: usize = 0x13F0; // int32_t + pub const m_iProgressBarDuration: usize = 0x13F4; // int32_t + pub const m_flProgressBarStartTime: usize = 0x13F8; // float + pub const m_iDirection: usize = 0x13FC; // int32_t + pub const m_iShotsFired: usize = 0x1400; // int32_t + pub const m_bNightVisionOn: usize = 0x1404; // bool + pub const m_bHasNightVision: usize = 0x1405; // bool + pub const m_flVelocityModifier: usize = 0x1408; // float + pub const m_flHitHeading: usize = 0x140C; // float + pub const m_nHitBodyPart: usize = 0x1410; // int32_t + pub const m_iStartAccount: usize = 0x1414; // int32_t + pub const m_vecIntroStartEyePosition: usize = 0x1418; // Vector + pub const m_vecIntroStartPlayerForward: usize = 0x1424; // Vector + pub const m_flClientDeathTime: usize = 0x1430; // GameTime_t + pub const m_flNightVisionAlpha: usize = 0x1434; // float + pub const m_bScreenTearFrameCaptured: usize = 0x1438; // bool + pub const m_flFlashBangTime: usize = 0x143C; // float + pub const m_flFlashScreenshotAlpha: usize = 0x1440; // float + pub const m_flFlashOverlayAlpha: usize = 0x1444; // float + pub const m_bFlashBuildUp: usize = 0x1448; // bool + pub const m_bFlashDspHasBeenCleared: usize = 0x1449; // bool + pub const m_bFlashScreenshotHasBeenGrabbed: usize = 0x144A; // bool + pub const m_flFlashMaxAlpha: usize = 0x144C; // float + pub const m_flFlashDuration: usize = 0x1450; // float + pub const m_lastStandingPos: usize = 0x1454; // Vector + pub const m_vecLastMuzzleFlashPos: usize = 0x1460; // Vector + pub const m_angLastMuzzleFlashAngle: usize = 0x146C; // QAngle + pub const m_hMuzzleFlashShape: usize = 0x1478; // CHandle<C_BaseEntity> + pub const m_iHealthBarRenderMaskIndex: usize = 0x147C; // int32_t + pub const m_flHealthFadeValue: usize = 0x1480; // float + pub const m_flHealthFadeAlpha: usize = 0x1484; // float + pub const m_nMyCollisionGroup: usize = 0x1488; // int32_t + pub const m_ignoreLadderJumpTime: usize = 0x148C; // float + pub const m_ladderSurpressionTimer: usize = 0x1490; // CountdownTimer + pub const m_lastLadderNormal: usize = 0x14A8; // Vector + pub const m_lastLadderPos: usize = 0x14B4; // Vector + pub const m_flDeathCCWeight: usize = 0x14C8; // float + pub const m_bOldIsScoped: usize = 0x14CC; // bool + pub const m_flPrevRoundEndTime: usize = 0x14D0; // float + pub const m_flPrevMatchEndTime: usize = 0x14D4; // float + pub const m_unCurrentEquipmentValue: usize = 0x14D8; // uint16_t + pub const m_unRoundStartEquipmentValue: usize = 0x14DA; // uint16_t + pub const m_unFreezetimeEndEquipmentValue: usize = 0x14DC; // uint16_t + pub const m_vecThirdPersonViewPositionOverride: usize = 0x14E0; // Vector + pub const m_nHeavyAssaultSuitCooldownRemaining: usize = 0x14EC; // int32_t + pub const m_ArmorValue: usize = 0x14F0; // int32_t + pub const m_angEyeAngles: usize = 0x14F8; // QAngle + pub const m_fNextThinkPushAway: usize = 0x1510; // float + pub const m_bShouldAutobuyDMWeapons: usize = 0x1514; // bool + pub const m_bShouldAutobuyNow: usize = 0x1515; // bool + pub const m_bHud_MiniScoreHidden: usize = 0x1516; // bool + pub const m_bHud_RadarHidden: usize = 0x1517; // bool + pub const m_nLastKillerIndex: usize = 0x1518; // CEntityIndex + pub const m_nLastConcurrentKilled: usize = 0x151C; // int32_t + pub const m_nDeathCamMusic: usize = 0x1520; // int32_t + pub const m_iIDEntIndex: usize = 0x1524; // CEntityIndex + pub const m_delayTargetIDTimer: usize = 0x1528; // CountdownTimer + pub const m_iTargetedWeaponEntIndex: usize = 0x1540; // CEntityIndex + pub const m_iOldIDEntIndex: usize = 0x1544; // CEntityIndex + pub const m_holdTargetIDTimer: usize = 0x1548; // CountdownTimer + pub const m_flCurrentMusicStartTime: usize = 0x1564; // float + pub const m_flMusicRoundStartTime: usize = 0x1568; // float + pub const m_bDeferStartMusicOnWarmup: usize = 0x156C; // bool + pub const m_cycleLatch: usize = 0x1570; // int32_t + pub const m_serverIntendedCycle: usize = 0x1574; // float + pub const m_vecPlayerPatchEconIndices: usize = 0x1578; // uint32_t[5] + pub const m_bHideTargetID: usize = 0x1594; // bool + pub const m_nextTaserShakeTime: usize = 0x1598; // float + pub const m_firstTaserShakeTime: usize = 0x159C; // float + pub const m_flLastSmokeOverlayAlpha: usize = 0x15A0; // float + pub const m_vLastSmokeOverlayColor: usize = 0x15A4; // Vector + pub const m_nPlayerSmokedFx: usize = 0x15B0; // ParticleIndex_t + pub const m_flNextMagDropTime: usize = 0x15B4; // float + pub const m_nLastMagDropAttachmentIndex: usize = 0x15B8; // int32_t + pub const m_vecBulletHitModels: usize = 0x15C0; // CUtlVector<C_BulletHitModel*> + pub const m_vecPickupModelSlerpers: usize = 0x15D8; // CUtlVector<C_PickUpModelSlerper*> + pub const m_vecLastAliveLocalVelocity: usize = 0x15F0; // Vector + pub const m_entitySpottedState: usize = 0x1618; // EntitySpottedState_t + pub const m_nSurvivalTeamNumber: usize = 0x1630; // int32_t + pub const m_bGuardianShouldSprayCustomXMark: usize = 0x1634; // bool + pub const m_bHasDeathInfo: usize = 0x1635; // bool + pub const m_flDeathInfoTime: usize = 0x1638; // float + pub const m_vecDeathInfoOrigin: usize = 0x163C; // Vector + pub const m_bKilledByHeadshot: usize = 0x1648; // bool + pub const m_hOriginalController: usize = 0x164C; // CHandle<CCSPlayerController> +} + +pub mod C_CSPlayerResource { // C_BaseEntity + pub const m_bHostageAlive: usize = 0x540; // bool[12] + pub const m_isHostageFollowingSomeone: usize = 0x54C; // bool[12] + pub const m_iHostageEntityIDs: usize = 0x558; // CEntityIndex[12] + pub const m_bombsiteCenterA: usize = 0x588; // Vector + pub const m_bombsiteCenterB: usize = 0x594; // Vector + pub const m_hostageRescueX: usize = 0x5A0; // int32_t[4] + pub const m_hostageRescueY: usize = 0x5B0; // int32_t[4] + pub const m_hostageRescueZ: usize = 0x5C0; // int32_t[4] + pub const m_bEndMatchNextMapAllVoted: usize = 0x5D0; // bool + pub const m_foundGoalPositions: usize = 0x5D1; // bool +} + +pub mod C_CSTeam { // C_Team + pub const m_szTeamMatchStat: usize = 0x5F8; // char[512] + pub const m_numMapVictories: usize = 0x7F8; // int32_t + pub const m_bSurrendered: usize = 0x7FC; // bool + pub const m_scoreFirstHalf: usize = 0x800; // int32_t + pub const m_scoreSecondHalf: usize = 0x804; // int32_t + pub const m_scoreOvertime: usize = 0x808; // int32_t + pub const m_szClanTeamname: usize = 0x80C; // char[129] + pub const m_iClanID: usize = 0x890; // uint32_t + pub const m_szTeamFlagImage: usize = 0x894; // char[8] + pub const m_szTeamLogoImage: usize = 0x89C; // char[8] +} + +pub mod C_CSWeaponBase { // C_BasePlayerWeapon + pub const m_flFireSequenceStartTime: usize = 0x15D0; // float + pub const m_nFireSequenceStartTimeChange: usize = 0x15D4; // int32_t + pub const m_nFireSequenceStartTimeAck: usize = 0x15D8; // int32_t + pub const m_bPlayerFireEventIsPrimary: usize = 0x15DC; // bool + pub const m_seqIdle: usize = 0x15E0; // HSequence + pub const m_seqFirePrimary: usize = 0x15E4; // HSequence + pub const m_seqFireSecondary: usize = 0x15E8; // HSequence + pub const m_ClientPreviousWeaponState: usize = 0x1600; // CSWeaponState_t + pub const m_iState: usize = 0x1604; // CSWeaponState_t + pub const m_flCrosshairDistance: usize = 0x1608; // float + pub const m_iAmmoLastCheck: usize = 0x160C; // int32_t + pub const m_iAlpha: usize = 0x1610; // int32_t + pub const m_iScopeTextureID: usize = 0x1614; // int32_t + pub const m_iCrosshairTextureID: usize = 0x1618; // int32_t + pub const m_flGunAccuracyPosition: usize = 0x161C; // float + pub const m_nViewModelIndex: usize = 0x1620; // uint32_t + pub const m_bReloadsWithClips: usize = 0x1624; // bool + pub const m_flTimeWeaponIdle: usize = 0x1628; // GameTime_t + pub const m_bFireOnEmpty: usize = 0x162C; // bool + pub const m_OnPlayerPickup: usize = 0x1630; // CEntityIOOutput + pub const m_weaponMode: usize = 0x1658; // CSWeaponMode + pub const m_flTurningInaccuracyDelta: usize = 0x165C; // float + pub const m_vecTurningInaccuracyEyeDirLast: usize = 0x1660; // Vector + pub const m_flTurningInaccuracy: usize = 0x166C; // float + pub const m_fAccuracyPenalty: usize = 0x1670; // float + pub const m_flLastAccuracyUpdateTime: usize = 0x1674; // GameTime_t + pub const m_fAccuracySmoothedForZoom: usize = 0x1678; // float + pub const m_fScopeZoomEndTime: usize = 0x167C; // GameTime_t + pub const m_iRecoilIndex: usize = 0x1680; // int32_t + pub const m_flRecoilIndex: usize = 0x1684; // float + pub const m_bBurstMode: usize = 0x1688; // bool + pub const m_flPostponeFireReadyTime: usize = 0x168C; // GameTime_t + pub const m_bInReload: usize = 0x1690; // bool + pub const m_bReloadVisuallyComplete: usize = 0x1691; // bool + pub const m_flDroppedAtTime: usize = 0x1694; // GameTime_t + pub const m_bIsHauledBack: usize = 0x1698; // bool + pub const m_bSilencerOn: usize = 0x1699; // bool + pub const m_flTimeSilencerSwitchComplete: usize = 0x169C; // GameTime_t + pub const m_iOriginalTeamNumber: usize = 0x16A0; // int32_t + pub const m_flNextAttackRenderTimeOffset: usize = 0x16A4; // float + pub const m_bVisualsDataSet: usize = 0x1728; // bool + pub const m_bOldFirstPersonSpectatedState: usize = 0x1729; // bool + pub const m_hOurPing: usize = 0x172C; // CHandle<C_BaseEntity> + pub const m_nOurPingIndex: usize = 0x1730; // CEntityIndex + pub const m_vecOurPingPos: usize = 0x1734; // Vector + pub const m_bGlowForPing: usize = 0x1740; // bool + pub const m_bUIWeapon: usize = 0x1741; // bool + pub const m_hPrevOwner: usize = 0x1750; // CHandle<C_CSPlayerPawn> + pub const m_nDropTick: usize = 0x1754; // GameTick_t + pub const m_donated: usize = 0x1774; // bool + pub const m_fLastShotTime: usize = 0x1778; // GameTime_t + pub const m_bWasOwnedByCT: usize = 0x177C; // bool + pub const m_bWasOwnedByTerrorist: usize = 0x177D; // bool + pub const m_gunHeat: usize = 0x1780; // float + pub const m_smokeAttachments: usize = 0x1784; // uint32_t + pub const m_lastSmokeTime: usize = 0x1788; // GameTime_t + pub const m_flLastClientFireBulletTime: usize = 0x178C; // float + pub const m_IronSightController: usize = 0x1840; // C_IronSightController + pub const m_iIronSightMode: usize = 0x18F0; // int32_t + pub const m_flLastLOSTraceFailureTime: usize = 0x1900; // GameTime_t + pub const m_iNumEmptyAttacks: usize = 0x1904; // int32_t +} + +pub mod C_CSWeaponBaseGun { // C_CSWeaponBase + pub const m_zoomLevel: usize = 0x1940; // int32_t + pub const m_iBurstShotsRemaining: usize = 0x1944; // int32_t + pub const m_iSilencerBodygroup: usize = 0x1948; // int32_t + pub const m_silencedModelIndex: usize = 0x1958; // int32_t + pub const m_inPrecache: usize = 0x195C; // bool + pub const m_bNeedsBoltAction: usize = 0x195D; // bool +} + +pub mod C_Chicken { // C_DynamicProp + pub const m_hHolidayHatAddon: usize = 0x10F0; // CHandle<CBaseAnimGraph> + pub const m_jumpedThisFrame: usize = 0x10F4; // bool + pub const m_leader: usize = 0x10F8; // CHandle<C_CSPlayerPawnBase> + pub const m_AttributeManager: usize = 0x1100; // C_AttributeContainer + pub const m_OriginalOwnerXuidLow: usize = 0x15A8; // uint32_t + pub const m_OriginalOwnerXuidHigh: usize = 0x15AC; // uint32_t + pub const m_bAttributesInitialized: usize = 0x15B0; // bool + pub const m_hWaterWakeParticles: usize = 0x15B4; // ParticleIndex_t +} + +pub mod C_ClientRagdoll { // CBaseAnimGraph + pub const m_bFadeOut: usize = 0xE80; // bool + pub const m_bImportant: usize = 0xE81; // bool + pub const m_flEffectTime: usize = 0xE84; // GameTime_t + pub const m_gibDespawnTime: usize = 0xE88; // GameTime_t + pub const m_iCurrentFriction: usize = 0xE8C; // int32_t + pub const m_iMinFriction: usize = 0xE90; // int32_t + pub const m_iMaxFriction: usize = 0xE94; // int32_t + pub const m_iFrictionAnimState: usize = 0xE98; // int32_t + pub const m_bReleaseRagdoll: usize = 0xE9C; // bool + pub const m_iEyeAttachment: usize = 0xE9D; // AttachmentHandle_t + pub const m_bFadingOut: usize = 0xE9E; // bool + pub const m_flScaleEnd: usize = 0xEA0; // float[10] + pub const m_flScaleTimeStart: usize = 0xEC8; // GameTime_t[10] + pub const m_flScaleTimeEnd: usize = 0xEF0; // GameTime_t[10] +} + +pub mod C_ColorCorrection { // C_BaseEntity + pub const m_vecOrigin: usize = 0x540; // Vector + pub const m_MinFalloff: usize = 0x54C; // float + pub const m_MaxFalloff: usize = 0x550; // float + pub const m_flFadeInDuration: usize = 0x554; // float + pub const m_flFadeOutDuration: usize = 0x558; // float + pub const m_flMaxWeight: usize = 0x55C; // float + pub const m_flCurWeight: usize = 0x560; // float + pub const m_netlookupFilename: usize = 0x564; // char[512] + pub const m_bEnabled: usize = 0x764; // bool + pub const m_bMaster: usize = 0x765; // bool + pub const m_bClientSide: usize = 0x766; // bool + pub const m_bExclusive: usize = 0x767; // bool + pub const m_bEnabledOnClient: usize = 0x768; // bool[1] + pub const m_flCurWeightOnClient: usize = 0x76C; // float[1] + pub const m_bFadingIn: usize = 0x770; // bool[1] + pub const m_flFadeStartWeight: usize = 0x774; // float[1] + pub const m_flFadeStartTime: usize = 0x778; // float[1] + pub const m_flFadeDuration: usize = 0x77C; // float[1] +} + +pub mod C_ColorCorrectionVolume { // C_BaseTrigger + pub const m_LastEnterWeight: usize = 0xCC8; // float + pub const m_LastEnterTime: usize = 0xCCC; // float + pub const m_LastExitWeight: usize = 0xCD0; // float + pub const m_LastExitTime: usize = 0xCD4; // float + pub const m_bEnabled: usize = 0xCD8; // bool + pub const m_MaxWeight: usize = 0xCDC; // float + pub const m_FadeDuration: usize = 0xCE0; // float + pub const m_Weight: usize = 0xCE4; // float + pub const m_lookupFilename: usize = 0xCE8; // char[512] +} + +pub mod C_CommandContext { + pub const needsprocessing: usize = 0x0; // bool + pub const command_number: usize = 0x78; // int32_t +} + +pub mod C_CsmFovOverride { // C_BaseEntity + pub const m_cameraName: usize = 0x540; // CUtlString + pub const m_flCsmFovOverrideValue: usize = 0x548; // float +} + +pub mod C_DEagle { // C_CSWeaponBaseGun +} + +pub mod C_DecoyGrenade { // C_BaseCSGrenade +} + +pub mod C_DecoyProjectile { // C_BaseCSGrenadeProjectile + pub const m_flTimeParticleEffectSpawn: usize = 0x1110; // GameTime_t +} + +pub mod C_DynamicLight { // C_BaseModelEntity + pub const m_Flags: usize = 0xCC0; // uint8_t + pub const m_LightStyle: usize = 0xCC1; // uint8_t + pub const m_Radius: usize = 0xCC4; // float + pub const m_Exponent: usize = 0xCC8; // int32_t + pub const m_InnerAngle: usize = 0xCCC; // float + pub const m_OuterAngle: usize = 0xCD0; // float + pub const m_SpotRadius: usize = 0xCD4; // float +} + +pub mod C_DynamicProp { // C_BreakableProp + pub const m_bUseHitboxesForRenderBox: usize = 0xFD0; // bool + pub const m_bUseAnimGraph: usize = 0xFD1; // bool + pub const m_pOutputAnimBegun: usize = 0xFD8; // CEntityIOOutput + pub const m_pOutputAnimOver: usize = 0x1000; // CEntityIOOutput + pub const m_pOutputAnimLoopCycleOver: usize = 0x1028; // CEntityIOOutput + pub const m_OnAnimReachedStart: usize = 0x1050; // CEntityIOOutput + pub const m_OnAnimReachedEnd: usize = 0x1078; // CEntityIOOutput + pub const m_iszDefaultAnim: usize = 0x10A0; // CUtlSymbolLarge + pub const m_nDefaultAnimLoopMode: usize = 0x10A8; // AnimLoopMode_t + pub const m_bAnimateOnServer: usize = 0x10AC; // bool + pub const m_bRandomizeCycle: usize = 0x10AD; // bool + pub const m_bStartDisabled: usize = 0x10AE; // bool + pub const m_bScriptedMovement: usize = 0x10AF; // bool + pub const m_bFiredStartEndOutput: usize = 0x10B0; // bool + pub const m_bForceNpcExclude: usize = 0x10B1; // bool + pub const m_bCreateNonSolid: usize = 0x10B2; // bool + pub const m_bIsOverrideProp: usize = 0x10B3; // bool + pub const m_iInitialGlowState: usize = 0x10B4; // int32_t + pub const m_nGlowRange: usize = 0x10B8; // int32_t + pub const m_nGlowRangeMin: usize = 0x10BC; // int32_t + pub const m_glowColor: usize = 0x10C0; // Color + pub const m_nGlowTeam: usize = 0x10C4; // int32_t + pub const m_iCachedFrameCount: usize = 0x10C8; // int32_t + pub const m_vecCachedRenderMins: usize = 0x10CC; // Vector + pub const m_vecCachedRenderMaxs: usize = 0x10D8; // Vector +} + +pub mod C_DynamicPropAlias_cable_dynamic { // C_DynamicProp +} + +pub mod C_DynamicPropAlias_dynamic_prop { // C_DynamicProp +} + +pub mod C_DynamicPropAlias_prop_dynamic_override { // C_DynamicProp +} + +pub mod C_EconEntity { // C_BaseFlex + pub const m_flFlexDelayTime: usize = 0x1028; // float + pub const m_flFlexDelayedWeight: usize = 0x1030; // float* + pub const m_bAttributesInitialized: usize = 0x1038; // bool + pub const m_AttributeManager: usize = 0x1040; // C_AttributeContainer + pub const m_OriginalOwnerXuidLow: usize = 0x14E8; // uint32_t + pub const m_OriginalOwnerXuidHigh: usize = 0x14EC; // uint32_t + pub const m_nFallbackPaintKit: usize = 0x14F0; // int32_t + pub const m_nFallbackSeed: usize = 0x14F4; // int32_t + pub const m_flFallbackWear: usize = 0x14F8; // float + pub const m_nFallbackStatTrak: usize = 0x14FC; // int32_t + pub const m_bClientside: usize = 0x1500; // bool + pub const m_bParticleSystemsCreated: usize = 0x1501; // bool + pub const m_vecAttachedParticles: usize = 0x1508; // CUtlVector<int32_t> + pub const m_hViewmodelAttachment: usize = 0x1520; // CHandle<CBaseAnimGraph> + pub const m_iOldTeam: usize = 0x1524; // int32_t + pub const m_bAttachmentDirty: usize = 0x1528; // bool + pub const m_nUnloadedModelIndex: usize = 0x152C; // int32_t + pub const m_iNumOwnerValidationRetries: usize = 0x1530; // int32_t + pub const m_hOldProvidee: usize = 0x1540; // CHandle<C_BaseEntity> + pub const m_vecAttachedModels: usize = 0x1548; // CUtlVector<C_EconEntity::AttachedModelData_t> +} + +pub mod C_EconEntity_AttachedModelData_t { + pub const m_iModelDisplayFlags: usize = 0x0; // int32_t +} + +pub mod C_EconItemView { // IEconItemInterface + pub const m_bInventoryImageRgbaRequested: usize = 0x60; // bool + pub const m_bInventoryImageTriedCache: usize = 0x61; // bool + pub const m_nInventoryImageRgbaWidth: usize = 0x80; // int32_t + pub const m_nInventoryImageRgbaHeight: usize = 0x84; // int32_t + pub const m_szCurrentLoadCachedFileName: usize = 0x88; // char[260] + pub const m_bRestoreCustomMaterialAfterPrecache: usize = 0x1B8; // bool + pub const m_iItemDefinitionIndex: usize = 0x1BA; // uint16_t + pub const m_iEntityQuality: usize = 0x1BC; // int32_t + pub const m_iEntityLevel: usize = 0x1C0; // uint32_t + pub const m_iItemID: usize = 0x1C8; // uint64_t + pub const m_iItemIDHigh: usize = 0x1D0; // uint32_t + pub const m_iItemIDLow: usize = 0x1D4; // uint32_t + pub const m_iAccountID: usize = 0x1D8; // uint32_t + pub const m_iInventoryPosition: usize = 0x1DC; // uint32_t + pub const m_bInitialized: usize = 0x1E8; // bool + pub const m_bIsStoreItem: usize = 0x1E9; // bool + pub const m_bIsTradeItem: usize = 0x1EA; // bool + pub const m_iEntityQuantity: usize = 0x1EC; // int32_t + pub const m_iRarityOverride: usize = 0x1F0; // int32_t + pub const m_iQualityOverride: usize = 0x1F4; // int32_t + pub const m_unClientFlags: usize = 0x1F8; // uint8_t + pub const m_unOverrideStyle: usize = 0x1F9; // uint8_t + pub const m_AttributeList: usize = 0x210; // CAttributeList + pub const m_NetworkedDynamicAttributes: usize = 0x270; // CAttributeList + pub const m_szCustomName: usize = 0x2D0; // char[161] + pub const m_szCustomNameOverride: usize = 0x371; // char[161] + pub const m_bInitializedTags: usize = 0x440; // bool +} + +pub mod C_EconWearable { // C_EconEntity + pub const m_nForceSkin: usize = 0x1560; // int32_t + pub const m_bAlwaysAllow: usize = 0x1564; // bool +} + +pub mod C_EntityDissolve { // C_BaseModelEntity + pub const m_flStartTime: usize = 0xCC8; // GameTime_t + pub const m_flFadeInStart: usize = 0xCCC; // float + pub const m_flFadeInLength: usize = 0xCD0; // float + pub const m_flFadeOutModelStart: usize = 0xCD4; // float + pub const m_flFadeOutModelLength: usize = 0xCD8; // float + pub const m_flFadeOutStart: usize = 0xCDC; // float + pub const m_flFadeOutLength: usize = 0xCE0; // float + pub const m_flNextSparkTime: usize = 0xCE4; // GameTime_t + pub const m_nDissolveType: usize = 0xCE8; // EntityDisolveType_t + pub const m_vDissolverOrigin: usize = 0xCEC; // Vector + pub const m_nMagnitude: usize = 0xCF8; // uint32_t + pub const m_bCoreExplode: usize = 0xCFC; // bool + pub const m_bLinkedToServerEnt: usize = 0xCFD; // bool +} + +pub mod C_EntityFlame { // C_BaseEntity + pub const m_hEntAttached: usize = 0x540; // CHandle<C_BaseEntity> + pub const m_hOldAttached: usize = 0x568; // CHandle<C_BaseEntity> + pub const m_bCheapEffect: usize = 0x56C; // bool +} + +pub mod C_EnvCombinedLightProbeVolume { // C_BaseEntity + pub const m_Color: usize = 0x15A8; // Color + pub const m_flBrightness: usize = 0x15AC; // float + pub const m_hCubemapTexture: usize = 0x15B0; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_bCustomCubemapTexture: usize = 0x15B8; // bool + pub const m_hLightProbeTexture: usize = 0x15C0; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_hLightProbeDirectLightIndicesTexture: usize = 0x15C8; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_hLightProbeDirectLightScalarsTexture: usize = 0x15D0; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_hLightProbeDirectLightShadowsTexture: usize = 0x15D8; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_vBoxMins: usize = 0x15E0; // Vector + pub const m_vBoxMaxs: usize = 0x15EC; // Vector + pub const m_LightGroups: usize = 0x15F8; // CUtlSymbolLarge + pub const m_bMoveable: usize = 0x1600; // bool + pub const m_nHandshake: usize = 0x1604; // int32_t + pub const m_nEnvCubeMapArrayIndex: usize = 0x1608; // int32_t + pub const m_nPriority: usize = 0x160C; // int32_t + pub const m_bStartDisabled: usize = 0x1610; // bool + pub const m_flEdgeFadeDist: usize = 0x1614; // float + pub const m_vEdgeFadeDists: usize = 0x1618; // Vector + pub const m_nLightProbeSizeX: usize = 0x1624; // int32_t + pub const m_nLightProbeSizeY: usize = 0x1628; // int32_t + pub const m_nLightProbeSizeZ: usize = 0x162C; // int32_t + pub const m_nLightProbeAtlasX: usize = 0x1630; // int32_t + pub const m_nLightProbeAtlasY: usize = 0x1634; // int32_t + pub const m_nLightProbeAtlasZ: usize = 0x1638; // int32_t + pub const m_bEnabled: usize = 0x1651; // bool +} + +pub mod C_EnvCubemap { // C_BaseEntity + pub const m_hCubemapTexture: usize = 0x5C8; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_bCustomCubemapTexture: usize = 0x5D0; // bool + pub const m_flInfluenceRadius: usize = 0x5D4; // float + pub const m_vBoxProjectMins: usize = 0x5D8; // Vector + pub const m_vBoxProjectMaxs: usize = 0x5E4; // Vector + pub const m_LightGroups: usize = 0x5F0; // CUtlSymbolLarge + pub const m_bMoveable: usize = 0x5F8; // bool + pub const m_nHandshake: usize = 0x5FC; // int32_t + pub const m_nEnvCubeMapArrayIndex: usize = 0x600; // int32_t + pub const m_nPriority: usize = 0x604; // int32_t + pub const m_flEdgeFadeDist: usize = 0x608; // float + pub const m_vEdgeFadeDists: usize = 0x60C; // Vector + pub const m_flDiffuseScale: usize = 0x618; // float + pub const m_bStartDisabled: usize = 0x61C; // bool + pub const m_bDefaultEnvMap: usize = 0x61D; // bool + pub const m_bDefaultSpecEnvMap: usize = 0x61E; // bool + pub const m_bIndoorCubeMap: usize = 0x61F; // bool + pub const m_bCopyDiffuseFromDefaultCubemap: usize = 0x620; // bool + pub const m_bEnabled: usize = 0x630; // bool +} + +pub mod C_EnvCubemapBox { // C_EnvCubemap +} + +pub mod C_EnvCubemapFog { // C_BaseEntity + pub const m_flEndDistance: usize = 0x540; // float + pub const m_flStartDistance: usize = 0x544; // float + pub const m_flFogFalloffExponent: usize = 0x548; // float + pub const m_bHeightFogEnabled: usize = 0x54C; // bool + pub const m_flFogHeightWidth: usize = 0x550; // float + pub const m_flFogHeightEnd: usize = 0x554; // float + pub const m_flFogHeightStart: usize = 0x558; // float + pub const m_flFogHeightExponent: usize = 0x55C; // float + pub const m_flLODBias: usize = 0x560; // float + pub const m_bActive: usize = 0x564; // bool + pub const m_bStartDisabled: usize = 0x565; // bool + pub const m_flFogMaxOpacity: usize = 0x568; // float + pub const m_nCubemapSourceType: usize = 0x56C; // int32_t + pub const m_hSkyMaterial: usize = 0x570; // CStrongHandle<InfoForResourceTypeIMaterial2> + pub const m_iszSkyEntity: usize = 0x578; // CUtlSymbolLarge + pub const m_hFogCubemapTexture: usize = 0x580; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_bHasHeightFogEnd: usize = 0x588; // bool + pub const m_bFirstTime: usize = 0x589; // bool +} + +pub mod C_EnvDecal { // C_BaseModelEntity + pub const m_hDecalMaterial: usize = 0xCC0; // CStrongHandle<InfoForResourceTypeIMaterial2> + pub const m_flWidth: usize = 0xCC8; // float + pub const m_flHeight: usize = 0xCCC; // float + pub const m_flDepth: usize = 0xCD0; // float + pub const m_nRenderOrder: usize = 0xCD4; // uint32_t + pub const m_bProjectOnWorld: usize = 0xCD8; // bool + pub const m_bProjectOnCharacters: usize = 0xCD9; // bool + pub const m_bProjectOnWater: usize = 0xCDA; // bool + pub const m_flDepthSortBias: usize = 0xCDC; // float +} + +pub mod C_EnvDetailController { // C_BaseEntity + pub const m_flFadeStartDist: usize = 0x540; // float + pub const m_flFadeEndDist: usize = 0x544; // float +} + +pub mod C_EnvLightProbeVolume { // C_BaseEntity + pub const m_hLightProbeTexture: usize = 0x1520; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_hLightProbeDirectLightIndicesTexture: usize = 0x1528; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_hLightProbeDirectLightScalarsTexture: usize = 0x1530; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_hLightProbeDirectLightShadowsTexture: usize = 0x1538; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_vBoxMins: usize = 0x1540; // Vector + pub const m_vBoxMaxs: usize = 0x154C; // Vector + pub const m_LightGroups: usize = 0x1558; // CUtlSymbolLarge + pub const m_bMoveable: usize = 0x1560; // bool + pub const m_nHandshake: usize = 0x1564; // int32_t + pub const m_nPriority: usize = 0x1568; // int32_t + pub const m_bStartDisabled: usize = 0x156C; // bool + pub const m_nLightProbeSizeX: usize = 0x1570; // int32_t + pub const m_nLightProbeSizeY: usize = 0x1574; // int32_t + pub const m_nLightProbeSizeZ: usize = 0x1578; // int32_t + pub const m_nLightProbeAtlasX: usize = 0x157C; // int32_t + pub const m_nLightProbeAtlasY: usize = 0x1580; // int32_t + pub const m_nLightProbeAtlasZ: usize = 0x1584; // int32_t + pub const m_bEnabled: usize = 0x1591; // bool +} + +pub mod C_EnvParticleGlow { // C_ParticleSystem + pub const m_flAlphaScale: usize = 0x1270; // float + pub const m_flRadiusScale: usize = 0x1274; // float + pub const m_flSelfIllumScale: usize = 0x1278; // float + pub const m_ColorTint: usize = 0x127C; // Color + pub const m_hTextureOverride: usize = 0x1280; // CStrongHandle<InfoForResourceTypeCTextureBase> +} + +pub mod C_EnvProjectedTexture { // C_ModelPointEntity +} + +pub mod C_EnvScreenOverlay { // C_PointEntity + pub const m_iszOverlayNames: usize = 0x540; // CUtlSymbolLarge[10] + pub const m_flOverlayTimes: usize = 0x590; // float[10] + pub const m_flStartTime: usize = 0x5B8; // GameTime_t + pub const m_iDesiredOverlay: usize = 0x5BC; // int32_t + pub const m_bIsActive: usize = 0x5C0; // bool + pub const m_bWasActive: usize = 0x5C1; // bool + pub const m_iCachedDesiredOverlay: usize = 0x5C4; // int32_t + pub const m_iCurrentOverlay: usize = 0x5C8; // int32_t + pub const m_flCurrentOverlayTime: usize = 0x5CC; // GameTime_t +} + +pub mod C_EnvSky { // C_BaseModelEntity + pub const m_hSkyMaterial: usize = 0xCC0; // CStrongHandle<InfoForResourceTypeIMaterial2> + pub const m_hSkyMaterialLightingOnly: usize = 0xCC8; // CStrongHandle<InfoForResourceTypeIMaterial2> + pub const m_bStartDisabled: usize = 0xCD0; // bool + pub const m_vTintColor: usize = 0xCD1; // Color + pub const m_vTintColorLightingOnly: usize = 0xCD5; // Color + pub const m_flBrightnessScale: usize = 0xCDC; // float + pub const m_nFogType: usize = 0xCE0; // int32_t + pub const m_flFogMinStart: usize = 0xCE4; // float + pub const m_flFogMinEnd: usize = 0xCE8; // float + pub const m_flFogMaxStart: usize = 0xCEC; // float + pub const m_flFogMaxEnd: usize = 0xCF0; // float + pub const m_bEnabled: usize = 0xCF4; // bool +} + +pub mod C_EnvVolumetricFogController { // C_BaseEntity + pub const m_flScattering: usize = 0x540; // float + pub const m_flAnisotropy: usize = 0x544; // float + pub const m_flFadeSpeed: usize = 0x548; // float + pub const m_flDrawDistance: usize = 0x54C; // float + pub const m_flFadeInStart: usize = 0x550; // float + pub const m_flFadeInEnd: usize = 0x554; // float + pub const m_flIndirectStrength: usize = 0x558; // float + pub const m_nIndirectTextureDimX: usize = 0x55C; // int32_t + pub const m_nIndirectTextureDimY: usize = 0x560; // int32_t + pub const m_nIndirectTextureDimZ: usize = 0x564; // int32_t + pub const m_vBoxMins: usize = 0x568; // Vector + pub const m_vBoxMaxs: usize = 0x574; // Vector + pub const m_bActive: usize = 0x580; // bool + pub const m_flStartAnisoTime: usize = 0x584; // GameTime_t + pub const m_flStartScatterTime: usize = 0x588; // GameTime_t + pub const m_flStartDrawDistanceTime: usize = 0x58C; // GameTime_t + pub const m_flStartAnisotropy: usize = 0x590; // float + pub const m_flStartScattering: usize = 0x594; // float + pub const m_flStartDrawDistance: usize = 0x598; // float + pub const m_flDefaultAnisotropy: usize = 0x59C; // float + pub const m_flDefaultScattering: usize = 0x5A0; // float + pub const m_flDefaultDrawDistance: usize = 0x5A4; // float + pub const m_bStartDisabled: usize = 0x5A8; // bool + pub const m_bEnableIndirect: usize = 0x5A9; // bool + pub const m_bIsMaster: usize = 0x5AA; // bool + pub const m_hFogIndirectTexture: usize = 0x5B0; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_nForceRefreshCount: usize = 0x5B8; // int32_t + pub const m_bFirstTime: usize = 0x5BC; // bool +} + +pub mod C_EnvVolumetricFogVolume { // C_BaseEntity + pub const m_bActive: usize = 0x540; // bool + pub const m_vBoxMins: usize = 0x544; // Vector + pub const m_vBoxMaxs: usize = 0x550; // Vector + pub const m_bStartDisabled: usize = 0x55C; // bool + pub const m_flStrength: usize = 0x560; // float + pub const m_nFalloffShape: usize = 0x564; // int32_t + pub const m_flFalloffExponent: usize = 0x568; // float +} + +pub mod C_EnvWind { // C_BaseEntity + pub const m_EnvWindShared: usize = 0x540; // C_EnvWindShared +} + +pub mod C_EnvWindClientside { // C_BaseEntity + pub const m_EnvWindShared: usize = 0x540; // C_EnvWindShared +} + +pub mod C_EnvWindShared { + pub const m_flStartTime: usize = 0x8; // GameTime_t + pub const m_iWindSeed: usize = 0xC; // uint32_t + pub const m_iMinWind: usize = 0x10; // uint16_t + pub const m_iMaxWind: usize = 0x12; // uint16_t + pub const m_windRadius: usize = 0x14; // int32_t + pub const m_iMinGust: usize = 0x18; // uint16_t + pub const m_iMaxGust: usize = 0x1A; // uint16_t + pub const m_flMinGustDelay: usize = 0x1C; // float + pub const m_flMaxGustDelay: usize = 0x20; // float + pub const m_flGustDuration: usize = 0x24; // float + pub const m_iGustDirChange: usize = 0x28; // uint16_t + pub const m_location: usize = 0x2C; // Vector + pub const m_iszGustSound: usize = 0x38; // int32_t + pub const m_iWindDir: usize = 0x3C; // int32_t + pub const m_flWindSpeed: usize = 0x40; // float + pub const m_currentWindVector: usize = 0x44; // Vector + pub const m_CurrentSwayVector: usize = 0x50; // Vector + pub const m_PrevSwayVector: usize = 0x5C; // Vector + pub const m_iInitialWindDir: usize = 0x68; // uint16_t + pub const m_flInitialWindSpeed: usize = 0x6C; // float + pub const m_flVariationTime: usize = 0x70; // GameTime_t + pub const m_flSwayTime: usize = 0x74; // GameTime_t + pub const m_flSimTime: usize = 0x78; // GameTime_t + pub const m_flSwitchTime: usize = 0x7C; // GameTime_t + pub const m_flAveWindSpeed: usize = 0x80; // float + pub const m_bGusting: usize = 0x84; // bool + pub const m_flWindAngleVariation: usize = 0x88; // float + pub const m_flWindSpeedVariation: usize = 0x8C; // float + pub const m_iEntIndex: usize = 0x90; // CEntityIndex +} + +pub mod C_EnvWindShared_WindAveEvent_t { + pub const m_flStartWindSpeed: usize = 0x0; // float + pub const m_flAveWindSpeed: usize = 0x4; // float +} + +pub mod C_EnvWindShared_WindVariationEvent_t { + pub const m_flWindAngleVariation: usize = 0x0; // float + pub const m_flWindSpeedVariation: usize = 0x4; // float +} + +pub mod C_FireCrackerBlast { // C_Inferno +} + +pub mod C_FireFromAboveSprite { // C_Sprite +} + +pub mod C_FireSmoke { // C_BaseFire + pub const m_nFlameModelIndex: usize = 0x550; // int32_t + pub const m_nFlameFromAboveModelIndex: usize = 0x554; // int32_t + pub const m_flScaleRegister: usize = 0x558; // float + pub const m_flScaleStart: usize = 0x55C; // float + pub const m_flScaleEnd: usize = 0x560; // float + pub const m_flScaleTimeStart: usize = 0x564; // GameTime_t + pub const m_flScaleTimeEnd: usize = 0x568; // GameTime_t + pub const m_flChildFlameSpread: usize = 0x56C; // float + pub const m_flClipPerc: usize = 0x580; // float + pub const m_bClipTested: usize = 0x584; // bool + pub const m_bFadingOut: usize = 0x585; // bool + pub const m_tParticleSpawn: usize = 0x588; // TimedEvent + pub const m_pFireOverlay: usize = 0x590; // CFireOverlay* +} + +pub mod C_FireSprite { // C_Sprite + pub const m_vecMoveDir: usize = 0xDF0; // Vector + pub const m_bFadeFromAbove: usize = 0xDFC; // bool +} + +pub mod C_Fish { // CBaseAnimGraph + pub const m_pos: usize = 0xE80; // Vector + pub const m_vel: usize = 0xE8C; // Vector + pub const m_angles: usize = 0xE98; // QAngle + pub const m_localLifeState: usize = 0xEA4; // int32_t + pub const m_deathDepth: usize = 0xEA8; // float + pub const m_deathAngle: usize = 0xEAC; // float + pub const m_buoyancy: usize = 0xEB0; // float + pub const m_wiggleTimer: usize = 0xEB8; // CountdownTimer + pub const m_wigglePhase: usize = 0xED0; // float + pub const m_wiggleRate: usize = 0xED4; // float + pub const m_actualPos: usize = 0xED8; // Vector + pub const m_actualAngles: usize = 0xEE4; // QAngle + pub const m_poolOrigin: usize = 0xEF0; // Vector + pub const m_waterLevel: usize = 0xEFC; // float + pub const m_gotUpdate: usize = 0xF00; // bool + pub const m_x: usize = 0xF04; // float + pub const m_y: usize = 0xF08; // float + pub const m_z: usize = 0xF0C; // float + pub const m_angle: usize = 0xF10; // float + pub const m_errorHistory: usize = 0xF14; // float[20] + pub const m_errorHistoryIndex: usize = 0xF64; // int32_t + pub const m_errorHistoryCount: usize = 0xF68; // int32_t + pub const m_averageError: usize = 0xF6C; // float +} + +pub mod C_Fists { // C_CSWeaponBase + pub const m_bPlayingUninterruptableAct: usize = 0x1940; // bool + pub const m_nUninterruptableActivity: usize = 0x1944; // PlayerAnimEvent_t +} + +pub mod C_Flashbang { // C_BaseCSGrenade +} + +pub mod C_FlashbangProjectile { // C_BaseCSGrenadeProjectile +} + +pub mod C_FogController { // C_BaseEntity + pub const m_fog: usize = 0x540; // fogparams_t + pub const m_bUseAngles: usize = 0x5A8; // bool + pub const m_iChangedVariables: usize = 0x5AC; // int32_t +} + +pub mod C_FootstepControl { // C_BaseTrigger + pub const m_source: usize = 0xCC8; // CUtlSymbolLarge + pub const m_destination: usize = 0xCD0; // CUtlSymbolLarge +} + +pub mod C_FuncBrush { // C_BaseModelEntity +} + +pub mod C_FuncConveyor { // C_BaseModelEntity + pub const m_vecMoveDirEntitySpace: usize = 0xCC8; // Vector + pub const m_flTargetSpeed: usize = 0xCD4; // float + pub const m_nTransitionStartTick: usize = 0xCD8; // GameTick_t + pub const m_nTransitionDurationTicks: usize = 0xCDC; // int32_t + pub const m_flTransitionStartSpeed: usize = 0xCE0; // float + pub const m_hConveyorModels: usize = 0xCE8; // C_NetworkUtlVectorBase<CHandle<C_BaseEntity>> + pub const m_flCurrentConveyorOffset: usize = 0xD00; // float + pub const m_flCurrentConveyorSpeed: usize = 0xD04; // float +} + +pub mod C_FuncElectrifiedVolume { // C_FuncBrush + pub const m_nAmbientEffect: usize = 0xCC0; // ParticleIndex_t + pub const m_EffectName: usize = 0xCC8; // CUtlSymbolLarge + pub const m_bState: usize = 0xCD0; // bool +} + +pub mod C_FuncLadder { // C_BaseModelEntity + pub const m_vecLadderDir: usize = 0xCC0; // Vector + pub const m_Dismounts: usize = 0xCD0; // CUtlVector<CHandle<C_InfoLadderDismount>> + pub const m_vecLocalTop: usize = 0xCE8; // Vector + pub const m_vecPlayerMountPositionTop: usize = 0xCF4; // Vector + pub const m_vecPlayerMountPositionBottom: usize = 0xD00; // Vector + pub const m_flAutoRideSpeed: usize = 0xD0C; // float + pub const m_bDisabled: usize = 0xD10; // bool + pub const m_bFakeLadder: usize = 0xD11; // bool + pub const m_bHasSlack: usize = 0xD12; // bool +} + +pub mod C_FuncMonitor { // C_FuncBrush + pub const m_targetCamera: usize = 0xCC0; // CUtlString + pub const m_nResolutionEnum: usize = 0xCC8; // int32_t + pub const m_bRenderShadows: usize = 0xCCC; // bool + pub const m_bUseUniqueColorTarget: usize = 0xCCD; // bool + pub const m_brushModelName: usize = 0xCD0; // CUtlString + pub const m_hTargetCamera: usize = 0xCD8; // CHandle<C_BaseEntity> + pub const m_bEnabled: usize = 0xCDC; // bool + pub const m_bDraw3DSkybox: usize = 0xCDD; // bool +} + +pub mod C_FuncMoveLinear { // C_BaseToggle +} + +pub mod C_FuncRotating { // C_BaseModelEntity +} + +pub mod C_FuncTrackTrain { // C_BaseModelEntity + pub const m_nLongAxis: usize = 0xCC0; // int32_t + pub const m_flRadius: usize = 0xCC4; // float + pub const m_flLineLength: usize = 0xCC8; // float +} + +pub mod C_GameRules { +} + +pub mod C_GameRulesProxy { // C_BaseEntity +} + +pub mod C_GlobalLight { // C_BaseEntity + pub const m_WindClothForceHandle: usize = 0xA00; // uint16_t +} + +pub mod C_GradientFog { // C_BaseEntity + pub const m_hGradientFogTexture: usize = 0x540; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_flFogStartDistance: usize = 0x548; // float + pub const m_flFogEndDistance: usize = 0x54C; // float + pub const m_bHeightFogEnabled: usize = 0x550; // bool + pub const m_flFogStartHeight: usize = 0x554; // float + pub const m_flFogEndHeight: usize = 0x558; // float + pub const m_flFarZ: usize = 0x55C; // float + pub const m_flFogMaxOpacity: usize = 0x560; // float + pub const m_flFogFalloffExponent: usize = 0x564; // float + pub const m_flFogVerticalExponent: usize = 0x568; // float + pub const m_fogColor: usize = 0x56C; // Color + pub const m_flFogStrength: usize = 0x570; // float + pub const m_flFadeTime: usize = 0x574; // float + pub const m_bStartDisabled: usize = 0x578; // bool + pub const m_bIsEnabled: usize = 0x579; // bool + pub const m_bGradientFogNeedsTextures: usize = 0x57A; // bool +} + +pub mod C_HEGrenade { // C_BaseCSGrenade +} + +pub mod C_HEGrenadeProjectile { // C_BaseCSGrenadeProjectile +} + +pub mod C_HandleTest { // C_BaseEntity + pub const m_Handle: usize = 0x540; // CHandle<C_BaseEntity> + pub const m_bSendHandle: usize = 0x544; // bool +} + +pub mod C_Hostage { // C_BaseCombatCharacter + pub const m_entitySpottedState: usize = 0x10A8; // EntitySpottedState_t + pub const m_leader: usize = 0x10C0; // CHandle<C_BaseEntity> + pub const m_reuseTimer: usize = 0x10C8; // CountdownTimer + pub const m_vel: usize = 0x10E0; // Vector + pub const m_isRescued: usize = 0x10EC; // bool + pub const m_jumpedThisFrame: usize = 0x10ED; // bool + pub const m_nHostageState: usize = 0x10F0; // int32_t + pub const m_bHandsHaveBeenCut: usize = 0x10F4; // bool + pub const m_hHostageGrabber: usize = 0x10F8; // CHandle<C_CSPlayerPawn> + pub const m_fLastGrabTime: usize = 0x10FC; // GameTime_t + pub const m_vecGrabbedPos: usize = 0x1100; // Vector + pub const m_flRescueStartTime: usize = 0x110C; // GameTime_t + pub const m_flGrabSuccessTime: usize = 0x1110; // GameTime_t + pub const m_flDropStartTime: usize = 0x1114; // GameTime_t + pub const m_flDeadOrRescuedTime: usize = 0x1118; // GameTime_t + pub const m_blinkTimer: usize = 0x1120; // CountdownTimer + pub const m_lookAt: usize = 0x1138; // Vector + pub const m_lookAroundTimer: usize = 0x1148; // CountdownTimer + pub const m_isInit: usize = 0x1160; // bool + pub const m_eyeAttachment: usize = 0x1161; // AttachmentHandle_t + pub const m_chestAttachment: usize = 0x1162; // AttachmentHandle_t + pub const m_pPredictionOwner: usize = 0x1168; // CBasePlayerController* + pub const m_fNewestAlphaThinkTime: usize = 0x1170; // GameTime_t +} + +pub mod C_HostageCarriableProp { // CBaseAnimGraph +} + +pub mod C_IncendiaryGrenade { // C_MolotovGrenade +} + +pub mod C_Inferno { // C_BaseModelEntity + pub const m_nfxFireDamageEffect: usize = 0xD00; // ParticleIndex_t + pub const m_firePositions: usize = 0xD04; // Vector[64] + pub const m_fireParentPositions: usize = 0x1004; // Vector[64] + pub const m_bFireIsBurning: usize = 0x1304; // bool[64] + pub const m_BurnNormal: usize = 0x1344; // Vector[64] + pub const m_fireCount: usize = 0x1644; // int32_t + pub const m_nInfernoType: usize = 0x1648; // int32_t + pub const m_nFireLifetime: usize = 0x164C; // float + pub const m_bInPostEffectTime: usize = 0x1650; // bool + pub const m_lastFireCount: usize = 0x1654; // int32_t + pub const m_nFireEffectTickBegin: usize = 0x1658; // int32_t + pub const m_drawableCount: usize = 0x8260; // int32_t + pub const m_blosCheck: usize = 0x8264; // bool + pub const m_nlosperiod: usize = 0x8268; // int32_t + pub const m_maxFireHalfWidth: usize = 0x826C; // float + pub const m_maxFireHeight: usize = 0x8270; // float + pub const m_minBounds: usize = 0x8274; // Vector + pub const m_maxBounds: usize = 0x8280; // Vector + pub const m_flLastGrassBurnThink: usize = 0x828C; // float +} + +pub mod C_InfoInstructorHintHostageRescueZone { // C_PointEntity +} + +pub mod C_InfoLadderDismount { // C_BaseEntity +} + +pub mod C_InfoVisibilityBox { // C_BaseEntity + pub const m_nMode: usize = 0x544; // int32_t + pub const m_vBoxSize: usize = 0x548; // Vector + pub const m_bEnabled: usize = 0x554; // bool +} + +pub mod C_IronSightController { + pub const m_bIronSightAvailable: usize = 0x10; // bool + pub const m_flIronSightAmount: usize = 0x14; // float + pub const m_flIronSightAmountGained: usize = 0x18; // float + pub const m_flIronSightAmountBiased: usize = 0x1C; // float + pub const m_flIronSightAmount_Interpolated: usize = 0x20; // float + pub const m_flIronSightAmountGained_Interpolated: usize = 0x24; // float + pub const m_flIronSightAmountBiased_Interpolated: usize = 0x28; // float + pub const m_flInterpolationLastUpdated: usize = 0x2C; // float + pub const m_angDeltaAverage: usize = 0x30; // QAngle[8] + pub const m_angViewLast: usize = 0x90; // QAngle + pub const m_vecDotCoords: usize = 0x9C; // Vector2D + pub const m_flDotBlur: usize = 0xA4; // float + pub const m_flSpeedRatio: usize = 0xA8; // float +} + +pub mod C_Item { // C_EconEntity + pub const m_bShouldGlow: usize = 0x1560; // bool + pub const m_pReticleHintTextName: usize = 0x1561; // char[256] +} + +pub mod C_ItemDogtags { // C_Item + pub const m_OwningPlayer: usize = 0x1668; // CHandle<C_CSPlayerPawn> + pub const m_KillingPlayer: usize = 0x166C; // CHandle<C_CSPlayerPawn> +} + +pub mod C_Item_Healthshot { // C_WeaponBaseItem +} + +pub mod C_Knife { // C_CSWeaponBase +} + +pub mod C_LightDirectionalEntity { // C_LightEntity +} + +pub mod C_LightEntity { // C_BaseModelEntity + pub const m_CLightComponent: usize = 0xCC0; // CLightComponent* +} + +pub mod C_LightEnvironmentEntity { // C_LightDirectionalEntity +} + +pub mod C_LightGlow { // C_BaseModelEntity + pub const m_nHorizontalSize: usize = 0xCC0; // uint32_t + pub const m_nVerticalSize: usize = 0xCC4; // uint32_t + pub const m_nMinDist: usize = 0xCC8; // uint32_t + pub const m_nMaxDist: usize = 0xCCC; // uint32_t + pub const m_nOuterMaxDist: usize = 0xCD0; // uint32_t + pub const m_flGlowProxySize: usize = 0xCD4; // float + pub const m_flHDRColorScale: usize = 0xCD8; // float + pub const m_Glow: usize = 0xCE0; // C_LightGlowOverlay +} + +pub mod C_LightGlowOverlay { // CGlowOverlay + pub const m_vecOrigin: usize = 0xD0; // Vector + pub const m_vecDirection: usize = 0xDC; // Vector + pub const m_nMinDist: usize = 0xE8; // int32_t + pub const m_nMaxDist: usize = 0xEC; // int32_t + pub const m_nOuterMaxDist: usize = 0xF0; // int32_t + pub const m_bOneSided: usize = 0xF4; // bool + pub const m_bModulateByDot: usize = 0xF5; // bool +} + +pub mod C_LightOrthoEntity { // C_LightEntity +} + +pub mod C_LightSpotEntity { // C_LightEntity +} + +pub mod C_LocalTempEntity { // CBaseAnimGraph + pub const flags: usize = 0xE98; // int32_t + pub const die: usize = 0xE9C; // GameTime_t + pub const m_flFrameMax: usize = 0xEA0; // float + pub const x: usize = 0xEA4; // float + pub const y: usize = 0xEA8; // float + pub const fadeSpeed: usize = 0xEAC; // float + pub const bounceFactor: usize = 0xEB0; // float + pub const hitSound: usize = 0xEB4; // int32_t + pub const priority: usize = 0xEB8; // int32_t + pub const tentOffset: usize = 0xEBC; // Vector + pub const m_vecTempEntAngVelocity: usize = 0xEC8; // QAngle + pub const tempent_renderamt: usize = 0xED4; // int32_t + pub const m_vecNormal: usize = 0xED8; // Vector + pub const m_flSpriteScale: usize = 0xEE4; // float + pub const m_nFlickerFrame: usize = 0xEE8; // int32_t + pub const m_flFrameRate: usize = 0xEEC; // float + pub const m_flFrame: usize = 0xEF0; // float + pub const m_pszImpactEffect: usize = 0xEF8; // char* + pub const m_pszParticleEffect: usize = 0xF00; // char* + pub const m_bParticleCollision: usize = 0xF08; // bool + pub const m_iLastCollisionFrame: usize = 0xF0C; // int32_t + pub const m_vLastCollisionOrigin: usize = 0xF10; // Vector + pub const m_vecTempEntVelocity: usize = 0xF1C; // Vector + pub const m_vecPrevAbsOrigin: usize = 0xF28; // Vector + pub const m_vecTempEntAcceleration: usize = 0xF34; // Vector +} + +pub mod C_MapPreviewParticleSystem { // C_ParticleSystem +} + +pub mod C_MapVetoPickController { // C_BaseEntity + pub const m_nDraftType: usize = 0x550; // int32_t + pub const m_nTeamWinningCoinToss: usize = 0x554; // int32_t + pub const m_nTeamWithFirstChoice: usize = 0x558; // int32_t[64] + pub const m_nVoteMapIdsList: usize = 0x658; // int32_t[7] + pub const m_nAccountIDs: usize = 0x674; // int32_t[64] + pub const m_nMapId0: usize = 0x774; // int32_t[64] + pub const m_nMapId1: usize = 0x874; // int32_t[64] + pub const m_nMapId2: usize = 0x974; // int32_t[64] + pub const m_nMapId3: usize = 0xA74; // int32_t[64] + pub const m_nMapId4: usize = 0xB74; // int32_t[64] + pub const m_nMapId5: usize = 0xC74; // int32_t[64] + pub const m_nStartingSide0: usize = 0xD74; // int32_t[64] + pub const m_nCurrentPhase: usize = 0xE74; // int32_t + pub const m_nPhaseStartTick: usize = 0xE78; // int32_t + pub const m_nPhaseDurationTicks: usize = 0xE7C; // int32_t + pub const m_nPostDataUpdateTick: usize = 0xE80; // int32_t + pub const m_bDisabledHud: usize = 0xE84; // bool +} + +pub mod C_Melee { // C_CSWeaponBase + pub const m_flThrowAt: usize = 0x1940; // GameTime_t +} + +pub mod C_ModelPointEntity { // C_BaseModelEntity +} + +pub mod C_MolotovGrenade { // C_BaseCSGrenade +} + +pub mod C_MolotovProjectile { // C_BaseCSGrenadeProjectile + pub const m_bIsIncGrenade: usize = 0x10F0; // bool +} + +pub mod C_Multimeter { // CBaseAnimGraph + pub const m_hTargetC4: usize = 0xE88; // CHandle<C_PlantedC4> +} + +pub mod C_MultiplayRules { // C_GameRules +} + +pub mod C_NetTestBaseCombatCharacter { // C_BaseCombatCharacter +} + +pub mod C_OmniLight { // C_BarnLight + pub const m_flInnerAngle: usize = 0xF08; // float + pub const m_flOuterAngle: usize = 0xF0C; // float + pub const m_bShowLight: usize = 0xF10; // bool +} + +pub mod C_ParticleSystem { // C_BaseModelEntity + pub const m_szSnapshotFileName: usize = 0xCC0; // char[512] + pub const m_bActive: usize = 0xEC0; // bool + pub const m_bFrozen: usize = 0xEC1; // bool + pub const m_flFreezeTransitionDuration: usize = 0xEC4; // float + pub const m_nStopType: usize = 0xEC8; // int32_t + pub const m_bAnimateDuringGameplayPause: usize = 0xECC; // bool + pub const m_iEffectIndex: usize = 0xED0; // CStrongHandle<InfoForResourceTypeIParticleSystemDefinition> + pub const m_flStartTime: usize = 0xED8; // GameTime_t + pub const m_flPreSimTime: usize = 0xEDC; // float + pub const m_vServerControlPoints: usize = 0xEE0; // Vector[4] + pub const m_iServerControlPointAssignments: usize = 0xF10; // uint8_t[4] + pub const m_hControlPointEnts: usize = 0xF14; // CHandle<C_BaseEntity>[64] + pub const m_bNoSave: usize = 0x1014; // bool + pub const m_bNoFreeze: usize = 0x1015; // bool + pub const m_bNoRamp: usize = 0x1016; // bool + pub const m_bStartActive: usize = 0x1017; // bool + pub const m_iszEffectName: usize = 0x1018; // CUtlSymbolLarge + pub const m_iszControlPointNames: usize = 0x1020; // CUtlSymbolLarge[64] + pub const m_nDataCP: usize = 0x1220; // int32_t + pub const m_vecDataCPValue: usize = 0x1224; // Vector + pub const m_nTintCP: usize = 0x1230; // int32_t + pub const m_clrTint: usize = 0x1234; // Color + pub const m_bOldActive: usize = 0x1258; // bool + pub const m_bOldFrozen: usize = 0x1259; // bool +} + +pub mod C_PathParticleRope { // C_BaseEntity + pub const m_bStartActive: usize = 0x540; // bool + pub const m_flMaxSimulationTime: usize = 0x544; // float + pub const m_iszEffectName: usize = 0x548; // CUtlSymbolLarge + pub const m_PathNodes_Name: usize = 0x550; // CUtlVector<CUtlSymbolLarge> + pub const m_flParticleSpacing: usize = 0x568; // float + pub const m_flSlack: usize = 0x56C; // float + pub const m_flRadius: usize = 0x570; // float + pub const m_ColorTint: usize = 0x574; // Color + pub const m_nEffectState: usize = 0x578; // int32_t + pub const m_iEffectIndex: usize = 0x580; // CStrongHandle<InfoForResourceTypeIParticleSystemDefinition> + pub const m_PathNodes_Position: usize = 0x588; // C_NetworkUtlVectorBase<Vector> + pub const m_PathNodes_TangentIn: usize = 0x5A0; // C_NetworkUtlVectorBase<Vector> + pub const m_PathNodes_TangentOut: usize = 0x5B8; // C_NetworkUtlVectorBase<Vector> + pub const m_PathNodes_Color: usize = 0x5D0; // C_NetworkUtlVectorBase<Vector> + pub const m_PathNodes_PinEnabled: usize = 0x5E8; // C_NetworkUtlVectorBase<bool> + pub const m_PathNodes_RadiusScale: usize = 0x600; // C_NetworkUtlVectorBase<float> +} + +pub mod C_PathParticleRopeAlias_path_particle_rope_clientside { // C_PathParticleRope +} + +pub mod C_PhysBox { // C_Breakable +} + +pub mod C_PhysMagnet { // CBaseAnimGraph + pub const m_aAttachedObjectsFromServer: usize = 0xE80; // CUtlVector<int32_t> + pub const m_aAttachedObjects: usize = 0xE98; // CUtlVector<CHandle<C_BaseEntity>> +} + +pub mod C_PhysPropClientside { // C_BreakableProp + pub const m_flTouchDelta: usize = 0xFD0; // GameTime_t + pub const m_fDeathTime: usize = 0xFD4; // GameTime_t + pub const m_impactEnergyScale: usize = 0xFD8; // float + pub const m_inertiaScale: usize = 0xFDC; // float + pub const m_flDmgModBullet: usize = 0xFE0; // float + pub const m_flDmgModClub: usize = 0xFE4; // float + pub const m_flDmgModExplosive: usize = 0xFE8; // float + pub const m_flDmgModFire: usize = 0xFEC; // float + pub const m_iszPhysicsDamageTableName: usize = 0xFF0; // CUtlSymbolLarge + pub const m_iszBasePropData: usize = 0xFF8; // CUtlSymbolLarge + pub const m_iInteractions: usize = 0x1000; // int32_t + pub const m_bHasBreakPiecesOrCommands: usize = 0x1004; // bool + pub const m_vecDamagePosition: usize = 0x1008; // Vector + pub const m_vecDamageDirection: usize = 0x1014; // Vector + pub const m_nDamageType: usize = 0x1020; // int32_t +} + +pub mod C_PhysicsProp { // C_BreakableProp + pub const m_bAwake: usize = 0xFD0; // bool +} + +pub mod C_PhysicsPropMultiplayer { // C_PhysicsProp +} + +pub mod C_PickUpModelSlerper { // CBaseAnimGraph + pub const m_hPlayerParent: usize = 0xE80; // CHandle<C_BaseEntity> + pub const m_hItem: usize = 0xE84; // CHandle<C_BaseEntity> + pub const m_flTimePickedUp: usize = 0xE88; // float + pub const m_angOriginal: usize = 0xE8C; // QAngle + pub const m_vecPosOriginal: usize = 0xE98; // Vector + pub const m_angRandom: usize = 0xEA8; // QAngle +} + +pub mod C_PlantedC4 { // CBaseAnimGraph + pub const m_bBombTicking: usize = 0xE80; // bool + pub const m_nBombSite: usize = 0xE84; // int32_t + pub const m_nSourceSoundscapeHash: usize = 0xE88; // int32_t + pub const m_entitySpottedState: usize = 0xE90; // EntitySpottedState_t + pub const m_flNextGlow: usize = 0xEA8; // GameTime_t + pub const m_flNextBeep: usize = 0xEAC; // GameTime_t + pub const m_flC4Blow: usize = 0xEB0; // GameTime_t + pub const m_bCannotBeDefused: usize = 0xEB4; // bool + pub const m_bHasExploded: usize = 0xEB5; // bool + pub const m_flTimerLength: usize = 0xEB8; // float + pub const m_bBeingDefused: usize = 0xEBC; // bool + pub const m_bTriggerWarning: usize = 0xEC0; // float + pub const m_bExplodeWarning: usize = 0xEC4; // float + pub const m_bC4Activated: usize = 0xEC8; // bool + pub const m_bTenSecWarning: usize = 0xEC9; // bool + pub const m_flDefuseLength: usize = 0xECC; // float + pub const m_flDefuseCountDown: usize = 0xED0; // GameTime_t + pub const m_bBombDefused: usize = 0xED4; // bool + pub const m_hBombDefuser: usize = 0xED8; // CHandle<C_CSPlayerPawn> + pub const m_hControlPanel: usize = 0xEDC; // CHandle<C_BaseEntity> + pub const m_hDefuserMultimeter: usize = 0xEE0; // CHandle<C_Multimeter> + pub const m_flNextRadarFlashTime: usize = 0xEE4; // GameTime_t + pub const m_bRadarFlash: usize = 0xEE8; // bool + pub const m_pBombDefuser: usize = 0xEEC; // CHandle<C_CSPlayerPawn> + pub const m_fLastDefuseTime: usize = 0xEF0; // GameTime_t + pub const m_pPredictionOwner: usize = 0xEF8; // CBasePlayerController* +} + +pub mod C_PlayerPing { // C_BaseEntity + pub const m_hPlayer: usize = 0x570; // CHandle<C_CSPlayerPawn> + pub const m_hPingedEntity: usize = 0x574; // CHandle<C_BaseEntity> + pub const m_iType: usize = 0x578; // int32_t + pub const m_bUrgent: usize = 0x57C; // bool + pub const m_szPlaceName: usize = 0x57D; // char[18] +} + +pub mod C_PlayerSprayDecal { // C_ModelPointEntity + pub const m_nUniqueID: usize = 0xCC0; // int32_t + pub const m_unAccountID: usize = 0xCC4; // uint32_t + pub const m_unTraceID: usize = 0xCC8; // uint32_t + pub const m_rtGcTime: usize = 0xCCC; // uint32_t + pub const m_vecEndPos: usize = 0xCD0; // Vector + pub const m_vecStart: usize = 0xCDC; // Vector + pub const m_vecLeft: usize = 0xCE8; // Vector + pub const m_vecNormal: usize = 0xCF4; // Vector + pub const m_nPlayer: usize = 0xD00; // int32_t + pub const m_nEntity: usize = 0xD04; // int32_t + pub const m_nHitbox: usize = 0xD08; // int32_t + pub const m_flCreationTime: usize = 0xD0C; // float + pub const m_nTintID: usize = 0xD10; // int32_t + pub const m_nVersion: usize = 0xD14; // uint8_t + pub const m_ubSignature: usize = 0xD15; // uint8_t[128] + pub const m_SprayRenderHelper: usize = 0xDA0; // CPlayerSprayDecalRenderHelper +} + +pub mod C_PlayerVisibility { // C_BaseEntity + pub const m_flVisibilityStrength: usize = 0x540; // float + pub const m_flFogDistanceMultiplier: usize = 0x544; // float + pub const m_flFogMaxDensityMultiplier: usize = 0x548; // float + pub const m_flFadeTime: usize = 0x54C; // float + pub const m_bStartDisabled: usize = 0x550; // bool + pub const m_bIsEnabled: usize = 0x551; // bool +} + +pub mod C_PointCamera { // C_BaseEntity + pub const m_FOV: usize = 0x540; // float + pub const m_Resolution: usize = 0x544; // float + pub const m_bFogEnable: usize = 0x548; // bool + pub const m_FogColor: usize = 0x549; // Color + pub const m_flFogStart: usize = 0x550; // float + pub const m_flFogEnd: usize = 0x554; // float + pub const m_flFogMaxDensity: usize = 0x558; // float + pub const m_bActive: usize = 0x55C; // bool + pub const m_bUseScreenAspectRatio: usize = 0x55D; // bool + pub const m_flAspectRatio: usize = 0x560; // float + pub const m_bNoSky: usize = 0x564; // bool + pub const m_fBrightness: usize = 0x568; // float + pub const m_flZFar: usize = 0x56C; // float + pub const m_flZNear: usize = 0x570; // float + pub const m_bCanHLTVUse: usize = 0x574; // bool + pub const m_bDofEnabled: usize = 0x575; // bool + pub const m_flDofNearBlurry: usize = 0x578; // float + pub const m_flDofNearCrisp: usize = 0x57C; // float + pub const m_flDofFarCrisp: usize = 0x580; // float + pub const m_flDofFarBlurry: usize = 0x584; // float + pub const m_flDofTiltToGround: usize = 0x588; // float + pub const m_TargetFOV: usize = 0x58C; // float + pub const m_DegreesPerSecond: usize = 0x590; // float + pub const m_bIsOn: usize = 0x594; // bool + pub const m_pNext: usize = 0x598; // C_PointCamera* +} + +pub mod C_PointCameraVFOV { // C_PointCamera + pub const m_flVerticalFOV: usize = 0x5A0; // float +} + +pub mod C_PointClientUIDialog { // C_BaseClientUIEntity + pub const m_hActivator: usize = 0xCF0; // CHandle<C_BaseEntity> + pub const m_bStartEnabled: usize = 0xCF4; // bool +} + +pub mod C_PointClientUIHUD { // C_BaseClientUIEntity + pub const m_bCheckCSSClasses: usize = 0xCF8; // bool + pub const m_bIgnoreInput: usize = 0xE80; // bool + pub const m_flWidth: usize = 0xE84; // float + pub const m_flHeight: usize = 0xE88; // float + pub const m_flDPI: usize = 0xE8C; // float + pub const m_flInteractDistance: usize = 0xE90; // float + pub const m_flDepthOffset: usize = 0xE94; // float + pub const m_unOwnerContext: usize = 0xE98; // uint32_t + pub const m_unHorizontalAlign: usize = 0xE9C; // uint32_t + pub const m_unVerticalAlign: usize = 0xEA0; // uint32_t + pub const m_unOrientation: usize = 0xEA4; // uint32_t + pub const m_bAllowInteractionFromAllSceneWorlds: usize = 0xEA8; // bool + pub const m_vecCSSClasses: usize = 0xEB0; // C_NetworkUtlVectorBase<CUtlSymbolLarge> +} + +pub mod C_PointClientUIWorldPanel { // C_BaseClientUIEntity + pub const m_bForceRecreateNextUpdate: usize = 0xCF8; // bool + pub const m_bMoveViewToPlayerNextThink: usize = 0xCF9; // bool + pub const m_bCheckCSSClasses: usize = 0xCFA; // bool + pub const m_anchorDeltaTransform: usize = 0xD00; // CTransform + pub const m_pOffScreenIndicator: usize = 0xEA0; // CPointOffScreenIndicatorUi* + pub const m_bIgnoreInput: usize = 0xEC8; // bool + pub const m_bLit: usize = 0xEC9; // bool + pub const m_bFollowPlayerAcrossTeleport: usize = 0xECA; // bool + pub const m_flWidth: usize = 0xECC; // float + pub const m_flHeight: usize = 0xED0; // float + pub const m_flDPI: usize = 0xED4; // float + pub const m_flInteractDistance: usize = 0xED8; // float + pub const m_flDepthOffset: usize = 0xEDC; // float + pub const m_unOwnerContext: usize = 0xEE0; // uint32_t + pub const m_unHorizontalAlign: usize = 0xEE4; // uint32_t + pub const m_unVerticalAlign: usize = 0xEE8; // uint32_t + pub const m_unOrientation: usize = 0xEEC; // uint32_t + pub const m_bAllowInteractionFromAllSceneWorlds: usize = 0xEF0; // bool + pub const m_vecCSSClasses: usize = 0xEF8; // C_NetworkUtlVectorBase<CUtlSymbolLarge> + pub const m_bOpaque: usize = 0xF10; // bool + pub const m_bNoDepth: usize = 0xF11; // bool + pub const m_bRenderBackface: usize = 0xF12; // bool + pub const m_bUseOffScreenIndicator: usize = 0xF13; // bool + pub const m_bExcludeFromSaveGames: usize = 0xF14; // bool + pub const m_bGrabbable: usize = 0xF15; // bool + pub const m_bOnlyRenderToTexture: usize = 0xF16; // bool + pub const m_bDisableMipGen: usize = 0xF17; // bool + pub const m_nExplicitImageLayout: usize = 0xF18; // int32_t +} + +pub mod C_PointClientUIWorldTextPanel { // C_PointClientUIWorldPanel + pub const m_messageText: usize = 0xF20; // char[512] +} + +pub mod C_PointCommentaryNode { // CBaseAnimGraph + pub const m_bActive: usize = 0xE88; // bool + pub const m_bWasActive: usize = 0xE89; // bool + pub const m_flEndTime: usize = 0xE8C; // GameTime_t + pub const m_flStartTime: usize = 0xE90; // GameTime_t + pub const m_flStartTimeInCommentary: usize = 0xE94; // float + pub const m_iszCommentaryFile: usize = 0xE98; // CUtlSymbolLarge + pub const m_iszTitle: usize = 0xEA0; // CUtlSymbolLarge + pub const m_iszSpeakers: usize = 0xEA8; // CUtlSymbolLarge + pub const m_iNodeNumber: usize = 0xEB0; // int32_t + pub const m_iNodeNumberMax: usize = 0xEB4; // int32_t + pub const m_bListenedTo: usize = 0xEB8; // bool + pub const m_hViewPosition: usize = 0xEC8; // CHandle<C_BaseEntity> + pub const m_bRestartAfterRestore: usize = 0xECC; // bool +} + +pub mod C_PointEntity { // C_BaseEntity +} + +pub mod C_PointValueRemapper { // C_BaseEntity + pub const m_bDisabled: usize = 0x540; // bool + pub const m_bDisabledOld: usize = 0x541; // bool + pub const m_bUpdateOnClient: usize = 0x542; // bool + pub const m_nInputType: usize = 0x544; // ValueRemapperInputType_t + pub const m_hRemapLineStart: usize = 0x548; // CHandle<C_BaseEntity> + pub const m_hRemapLineEnd: usize = 0x54C; // CHandle<C_BaseEntity> + pub const m_flMaximumChangePerSecond: usize = 0x550; // float + pub const m_flDisengageDistance: usize = 0x554; // float + pub const m_flEngageDistance: usize = 0x558; // float + pub const m_bRequiresUseKey: usize = 0x55C; // bool + pub const m_nOutputType: usize = 0x560; // ValueRemapperOutputType_t + pub const m_hOutputEntities: usize = 0x568; // C_NetworkUtlVectorBase<CHandle<C_BaseEntity>> + pub const m_nHapticsType: usize = 0x580; // ValueRemapperHapticsType_t + pub const m_nMomentumType: usize = 0x584; // ValueRemapperMomentumType_t + pub const m_flMomentumModifier: usize = 0x588; // float + pub const m_flSnapValue: usize = 0x58C; // float + pub const m_flCurrentMomentum: usize = 0x590; // float + pub const m_nRatchetType: usize = 0x594; // ValueRemapperRatchetType_t + pub const m_flRatchetOffset: usize = 0x598; // float + pub const m_flInputOffset: usize = 0x59C; // float + pub const m_bEngaged: usize = 0x5A0; // bool + pub const m_bFirstUpdate: usize = 0x5A1; // bool + pub const m_flPreviousValue: usize = 0x5A4; // float + pub const m_flPreviousUpdateTickTime: usize = 0x5A8; // GameTime_t + pub const m_vecPreviousTestPoint: usize = 0x5AC; // Vector +} + +pub mod C_PointWorldText { // C_ModelPointEntity + pub const m_bForceRecreateNextUpdate: usize = 0xCC8; // bool + pub const m_messageText: usize = 0xCD8; // char[512] + pub const m_FontName: usize = 0xED8; // char[64] + pub const m_bEnabled: usize = 0xF18; // bool + pub const m_bFullbright: usize = 0xF19; // bool + pub const m_flWorldUnitsPerPx: usize = 0xF1C; // float + pub const m_flFontSize: usize = 0xF20; // float + pub const m_flDepthOffset: usize = 0xF24; // float + pub const m_Color: usize = 0xF28; // Color + pub const m_nJustifyHorizontal: usize = 0xF2C; // PointWorldTextJustifyHorizontal_t + pub const m_nJustifyVertical: usize = 0xF30; // PointWorldTextJustifyVertical_t + pub const m_nReorientMode: usize = 0xF34; // PointWorldTextReorientMode_t +} + +pub mod C_PostProcessingVolume { // C_BaseTrigger + pub const m_hPostSettings: usize = 0xCD8; // CStrongHandle<InfoForResourceTypeCPostProcessingResource> + pub const m_flFadeDuration: usize = 0xCE0; // float + pub const m_flMinLogExposure: usize = 0xCE4; // float + pub const m_flMaxLogExposure: usize = 0xCE8; // float + pub const m_flMinExposure: usize = 0xCEC; // float + pub const m_flMaxExposure: usize = 0xCF0; // float + pub const m_flExposureCompensation: usize = 0xCF4; // float + pub const m_flExposureFadeSpeedUp: usize = 0xCF8; // float + pub const m_flExposureFadeSpeedDown: usize = 0xCFC; // float + pub const m_flTonemapEVSmoothingRange: usize = 0xD00; // float + pub const m_bMaster: usize = 0xD04; // bool + pub const m_bExposureControl: usize = 0xD05; // bool + pub const m_flRate: usize = 0xD08; // float + pub const m_flTonemapPercentTarget: usize = 0xD0C; // float + pub const m_flTonemapPercentBrightPixels: usize = 0xD10; // float + pub const m_flTonemapMinAvgLum: usize = 0xD14; // float +} + +pub mod C_Precipitation { // C_BaseTrigger + pub const m_flDensity: usize = 0xCC8; // float + pub const m_flParticleInnerDist: usize = 0xCD8; // float + pub const m_pParticleDef: usize = 0xCE0; // char* + pub const m_tParticlePrecipTraceTimer: usize = 0xD08; // TimedEvent[1] + pub const m_bActiveParticlePrecipEmitter: usize = 0xD10; // bool[1] + pub const m_bParticlePrecipInitialized: usize = 0xD11; // bool + pub const m_bHasSimulatedSinceLastSceneObjectUpdate: usize = 0xD12; // bool + pub const m_nAvailableSheetSequencesMaxIndex: usize = 0xD14; // int32_t +} + +pub mod C_PrecipitationBlocker { // C_BaseModelEntity +} + +pub mod C_PredictedViewModel { // C_BaseViewModel + pub const m_LagAnglesHistory: usize = 0xEE8; // QAngle + pub const m_vPredictedOffset: usize = 0xF00; // Vector +} + +pub mod C_RagdollManager { // C_BaseEntity + pub const m_iCurrentMaxRagdollCount: usize = 0x540; // int8_t +} + +pub mod C_RagdollProp { // CBaseAnimGraph + pub const m_ragPos: usize = 0xE88; // C_NetworkUtlVectorBase<Vector> + pub const m_ragAngles: usize = 0xEA0; // C_NetworkUtlVectorBase<QAngle> + pub const m_flBlendWeight: usize = 0xEB8; // float + pub const m_hRagdollSource: usize = 0xEBC; // CHandle<C_BaseEntity> + pub const m_iEyeAttachment: usize = 0xEC0; // AttachmentHandle_t + pub const m_flBlendWeightCurrent: usize = 0xEC4; // float + pub const m_parentPhysicsBoneIndices: usize = 0xEC8; // CUtlVector<int32_t> + pub const m_worldSpaceBoneComputationOrder: usize = 0xEE0; // CUtlVector<int32_t> +} + +pub mod C_RagdollPropAttached { // C_RagdollProp + pub const m_boneIndexAttached: usize = 0xEF8; // uint32_t + pub const m_ragdollAttachedObjectIndex: usize = 0xEFC; // uint32_t + pub const m_attachmentPointBoneSpace: usize = 0xF00; // Vector + pub const m_attachmentPointRagdollSpace: usize = 0xF0C; // Vector + pub const m_vecOffset: usize = 0xF18; // Vector + pub const m_parentTime: usize = 0xF24; // float + pub const m_bHasParent: usize = 0xF28; // bool +} + +pub mod C_RectLight { // C_BarnLight + pub const m_bShowLight: usize = 0xF08; // bool +} + +pub mod C_RetakeGameRules { + pub const m_nMatchSeed: usize = 0xF8; // int32_t + pub const m_bBlockersPresent: usize = 0xFC; // bool + pub const m_bRoundInProgress: usize = 0xFD; // bool + pub const m_iFirstSecondHalfRound: usize = 0x100; // int32_t + pub const m_iBombSite: usize = 0x104; // int32_t +} + +pub mod C_RopeKeyframe { // C_BaseModelEntity + pub const m_LinksTouchingSomething: usize = 0xCC8; // CBitVec<10> + pub const m_nLinksTouchingSomething: usize = 0xCCC; // int32_t + pub const m_bApplyWind: usize = 0xCD0; // bool + pub const m_fPrevLockedPoints: usize = 0xCD4; // int32_t + pub const m_iForcePointMoveCounter: usize = 0xCD8; // int32_t + pub const m_bPrevEndPointPos: usize = 0xCDC; // bool[2] + pub const m_vPrevEndPointPos: usize = 0xCE0; // Vector[2] + pub const m_flCurScroll: usize = 0xCF8; // float + pub const m_flScrollSpeed: usize = 0xCFC; // float + pub const m_RopeFlags: usize = 0xD00; // uint16_t + pub const m_iRopeMaterialModelIndex: usize = 0xD08; // CStrongHandle<InfoForResourceTypeIMaterial2> + pub const m_LightValues: usize = 0xF80; // Vector[10] + pub const m_nSegments: usize = 0xFF8; // uint8_t + pub const m_hStartPoint: usize = 0xFFC; // CHandle<C_BaseEntity> + pub const m_hEndPoint: usize = 0x1000; // CHandle<C_BaseEntity> + pub const m_iStartAttachment: usize = 0x1004; // AttachmentHandle_t + pub const m_iEndAttachment: usize = 0x1005; // AttachmentHandle_t + pub const m_Subdiv: usize = 0x1006; // uint8_t + pub const m_RopeLength: usize = 0x1008; // int16_t + pub const m_Slack: usize = 0x100A; // int16_t + pub const m_TextureScale: usize = 0x100C; // float + pub const m_fLockedPoints: usize = 0x1010; // uint8_t + pub const m_nChangeCount: usize = 0x1011; // uint8_t + pub const m_Width: usize = 0x1014; // float + pub const m_PhysicsDelegate: usize = 0x1018; // C_RopeKeyframe::CPhysicsDelegate + pub const m_hMaterial: usize = 0x1028; // CStrongHandle<InfoForResourceTypeIMaterial2> + pub const m_TextureHeight: usize = 0x1030; // int32_t + pub const m_vecImpulse: usize = 0x1034; // Vector + pub const m_vecPreviousImpulse: usize = 0x1040; // Vector + pub const m_flCurrentGustTimer: usize = 0x104C; // float + pub const m_flCurrentGustLifetime: usize = 0x1050; // float + pub const m_flTimeToNextGust: usize = 0x1054; // float + pub const m_vWindDir: usize = 0x1058; // Vector + pub const m_vColorMod: usize = 0x1064; // Vector + pub const m_vCachedEndPointAttachmentPos: usize = 0x1070; // Vector[2] + pub const m_vCachedEndPointAttachmentAngle: usize = 0x1088; // QAngle[2] + pub const m_bConstrainBetweenEndpoints: usize = 0x10A0; // bool + pub const m_bEndPointAttachmentPositionsDirty: usize = 0x0; // bitfield:1 + pub const m_bEndPointAttachmentAnglesDirty: usize = 0x0; // bitfield:1 + pub const m_bNewDataThisFrame: usize = 0x0; // bitfield:1 + pub const m_bPhysicsInitted: usize = 0x0; // bitfield:1 +} + +pub mod C_RopeKeyframe_CPhysicsDelegate { + pub const m_pKeyframe: usize = 0x8; // C_RopeKeyframe* +} + +pub mod C_SceneEntity { // C_PointEntity + pub const m_bIsPlayingBack: usize = 0x548; // bool + pub const m_bPaused: usize = 0x549; // bool + pub const m_bMultiplayer: usize = 0x54A; // bool + pub const m_bAutogenerated: usize = 0x54B; // bool + pub const m_flForceClientTime: usize = 0x54C; // float + pub const m_nSceneStringIndex: usize = 0x550; // uint16_t + pub const m_bClientOnly: usize = 0x552; // bool + pub const m_hOwner: usize = 0x554; // CHandle<C_BaseFlex> + pub const m_hActorList: usize = 0x558; // C_NetworkUtlVectorBase<CHandle<C_BaseFlex>> + pub const m_bWasPlaying: usize = 0x570; // bool + pub const m_QueuedEvents: usize = 0x580; // CUtlVector<C_SceneEntity::QueuedEvents_t> + pub const m_flCurrentTime: usize = 0x598; // float +} + +pub mod C_SceneEntity_QueuedEvents_t { + pub const starttime: usize = 0x0; // float +} + +pub mod C_SensorGrenade { // C_BaseCSGrenade +} + +pub mod C_SensorGrenadeProjectile { // C_BaseCSGrenadeProjectile +} + +pub mod C_ShatterGlassShardPhysics { // C_PhysicsProp + pub const m_ShardDesc: usize = 0xFE0; // shard_model_desc_t +} + +pub mod C_SingleplayRules { // C_GameRules +} + +pub mod C_SkyCamera { // C_BaseEntity + pub const m_skyboxData: usize = 0x540; // sky3dparams_t + pub const m_skyboxSlotToken: usize = 0x5D0; // CUtlStringToken + pub const m_bUseAngles: usize = 0x5D4; // bool + pub const m_pNext: usize = 0x5D8; // C_SkyCamera* +} + +pub mod C_SmokeGrenade { // C_BaseCSGrenade +} + +pub mod C_SmokeGrenadeProjectile { // C_BaseCSGrenadeProjectile + pub const m_nSmokeEffectTickBegin: usize = 0x10F8; // int32_t + pub const m_bDidSmokeEffect: usize = 0x10FC; // bool + pub const m_nRandomSeed: usize = 0x1100; // int32_t + pub const m_vSmokeColor: usize = 0x1104; // Vector + pub const m_vSmokeDetonationPos: usize = 0x1110; // Vector + pub const m_VoxelFrameData: usize = 0x1120; // CUtlVector<uint8_t> + pub const m_bSmokeVolumeDataReceived: usize = 0x1138; // bool + pub const m_bSmokeEffectSpawned: usize = 0x1139; // bool +} + +pub mod C_SoundAreaEntityBase { // C_BaseEntity + pub const m_bDisabled: usize = 0x540; // bool + pub const m_bWasEnabled: usize = 0x548; // bool + pub const m_iszSoundAreaType: usize = 0x550; // CUtlSymbolLarge + pub const m_vPos: usize = 0x558; // Vector +} + +pub mod C_SoundAreaEntityOrientedBox { // C_SoundAreaEntityBase + pub const m_vMin: usize = 0x568; // Vector + pub const m_vMax: usize = 0x574; // Vector +} + +pub mod C_SoundAreaEntitySphere { // C_SoundAreaEntityBase + pub const m_flRadius: usize = 0x568; // float +} + +pub mod C_SoundOpvarSetAABBEntity { // C_SoundOpvarSetPointEntity +} + +pub mod C_SoundOpvarSetOBBEntity { // C_SoundOpvarSetAABBEntity +} + +pub mod C_SoundOpvarSetOBBWindEntity { // C_SoundOpvarSetPointBase +} + +pub mod C_SoundOpvarSetPathCornerEntity { // C_SoundOpvarSetPointEntity +} + +pub mod C_SoundOpvarSetPointBase { // C_BaseEntity + pub const m_iszStackName: usize = 0x540; // CUtlSymbolLarge + pub const m_iszOperatorName: usize = 0x548; // CUtlSymbolLarge + pub const m_iszOpvarName: usize = 0x550; // CUtlSymbolLarge + pub const m_iOpvarIndex: usize = 0x558; // int32_t + pub const m_bUseAutoCompare: usize = 0x55C; // bool +} + +pub mod C_SoundOpvarSetPointEntity { // C_SoundOpvarSetPointBase +} + +pub mod C_SpotlightEnd { // C_BaseModelEntity + pub const m_flLightScale: usize = 0xCC0; // float + pub const m_Radius: usize = 0xCC4; // float +} + +pub mod C_Sprite { // C_BaseModelEntity + pub const m_hSpriteMaterial: usize = 0xCD8; // CStrongHandle<InfoForResourceTypeIMaterial2> + pub const m_hAttachedToEntity: usize = 0xCE0; // CHandle<C_BaseEntity> + pub const m_nAttachment: usize = 0xCE4; // AttachmentHandle_t + pub const m_flSpriteFramerate: usize = 0xCE8; // float + pub const m_flFrame: usize = 0xCEC; // float + pub const m_flDieTime: usize = 0xCF0; // GameTime_t + pub const m_nBrightness: usize = 0xD00; // uint32_t + pub const m_flBrightnessDuration: usize = 0xD04; // float + pub const m_flSpriteScale: usize = 0xD08; // float + pub const m_flScaleDuration: usize = 0xD0C; // float + pub const m_bWorldSpaceScale: usize = 0xD10; // bool + pub const m_flGlowProxySize: usize = 0xD14; // float + pub const m_flHDRColorScale: usize = 0xD18; // float + pub const m_flLastTime: usize = 0xD1C; // GameTime_t + pub const m_flMaxFrame: usize = 0xD20; // float + pub const m_flStartScale: usize = 0xD24; // float + pub const m_flDestScale: usize = 0xD28; // float + pub const m_flScaleTimeStart: usize = 0xD2C; // GameTime_t + pub const m_nStartBrightness: usize = 0xD30; // int32_t + pub const m_nDestBrightness: usize = 0xD34; // int32_t + pub const m_flBrightnessTimeStart: usize = 0xD38; // GameTime_t + pub const m_hOldSpriteMaterial: usize = 0xD40; // CWeakHandle<InfoForResourceTypeIMaterial2> + pub const m_nSpriteWidth: usize = 0xDE8; // int32_t + pub const m_nSpriteHeight: usize = 0xDEC; // int32_t +} + +pub mod C_SpriteOriented { // C_Sprite +} + +pub mod C_Sun { // C_BaseModelEntity + pub const m_fxSSSunFlareEffectIndex: usize = 0xCC0; // ParticleIndex_t + pub const m_fxSunFlareEffectIndex: usize = 0xCC4; // ParticleIndex_t + pub const m_fdistNormalize: usize = 0xCC8; // float + pub const m_vSunPos: usize = 0xCCC; // Vector + pub const m_vDirection: usize = 0xCD8; // Vector + pub const m_iszEffectName: usize = 0xCE8; // CUtlSymbolLarge + pub const m_iszSSEffectName: usize = 0xCF0; // CUtlSymbolLarge + pub const m_clrOverlay: usize = 0xCF8; // Color + pub const m_bOn: usize = 0xCFC; // bool + pub const m_bmaxColor: usize = 0xCFD; // bool + pub const m_flSize: usize = 0xD00; // float + pub const m_flHazeScale: usize = 0xD04; // float + pub const m_flRotation: usize = 0xD08; // float + pub const m_flHDRColorScale: usize = 0xD0C; // float + pub const m_flAlphaHaze: usize = 0xD10; // float + pub const m_flAlphaScale: usize = 0xD14; // float + pub const m_flAlphaHdr: usize = 0xD18; // float + pub const m_flFarZScale: usize = 0xD1C; // float +} + +pub mod C_SunGlowOverlay { // CGlowOverlay + pub const m_bModulateByDot: usize = 0xD0; // bool +} + +pub mod C_Team { // C_BaseEntity + pub const m_aPlayerControllers: usize = 0x540; // C_NetworkUtlVectorBase<CHandle<CBasePlayerController>> + pub const m_aPlayers: usize = 0x558; // C_NetworkUtlVectorBase<CHandle<C_BasePlayerPawn>> + pub const m_iScore: usize = 0x570; // int32_t + pub const m_szTeamname: usize = 0x574; // char[129] +} + +pub mod C_TeamRoundTimer { // C_BaseEntity + pub const m_bTimerPaused: usize = 0x540; // bool + pub const m_flTimeRemaining: usize = 0x544; // float + pub const m_flTimerEndTime: usize = 0x548; // GameTime_t + pub const m_bIsDisabled: usize = 0x54C; // bool + pub const m_bShowInHUD: usize = 0x54D; // bool + pub const m_nTimerLength: usize = 0x550; // int32_t + pub const m_nTimerInitialLength: usize = 0x554; // int32_t + pub const m_nTimerMaxLength: usize = 0x558; // int32_t + pub const m_bAutoCountdown: usize = 0x55C; // bool + pub const m_nSetupTimeLength: usize = 0x560; // int32_t + pub const m_nState: usize = 0x564; // int32_t + pub const m_bStartPaused: usize = 0x568; // bool + pub const m_bInCaptureWatchState: usize = 0x569; // bool + pub const m_flTotalTime: usize = 0x56C; // float + pub const m_bStopWatchTimer: usize = 0x570; // bool + pub const m_bFireFinished: usize = 0x571; // bool + pub const m_bFire5MinRemain: usize = 0x572; // bool + pub const m_bFire4MinRemain: usize = 0x573; // bool + pub const m_bFire3MinRemain: usize = 0x574; // bool + pub const m_bFire2MinRemain: usize = 0x575; // bool + pub const m_bFire1MinRemain: usize = 0x576; // bool + pub const m_bFire30SecRemain: usize = 0x577; // bool + pub const m_bFire10SecRemain: usize = 0x578; // bool + pub const m_bFire5SecRemain: usize = 0x579; // bool + pub const m_bFire4SecRemain: usize = 0x57A; // bool + pub const m_bFire3SecRemain: usize = 0x57B; // bool + pub const m_bFire2SecRemain: usize = 0x57C; // bool + pub const m_bFire1SecRemain: usize = 0x57D; // bool + pub const m_nOldTimerLength: usize = 0x580; // int32_t + pub const m_nOldTimerState: usize = 0x584; // int32_t +} + +pub mod C_TeamplayRules { // C_MultiplayRules +} + +pub mod C_TextureBasedAnimatable { // C_BaseModelEntity + pub const m_bLoop: usize = 0xCC0; // bool + pub const m_flFPS: usize = 0xCC4; // float + pub const m_hPositionKeys: usize = 0xCC8; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_hRotationKeys: usize = 0xCD0; // CStrongHandle<InfoForResourceTypeCTextureBase> + pub const m_vAnimationBoundsMin: usize = 0xCD8; // Vector + pub const m_vAnimationBoundsMax: usize = 0xCE4; // Vector + pub const m_flStartTime: usize = 0xCF0; // float + pub const m_flStartFrame: usize = 0xCF4; // float +} + +pub mod C_TintController { // C_BaseEntity +} + +pub mod C_TonemapController2 { // C_BaseEntity + pub const m_flAutoExposureMin: usize = 0x540; // float + pub const m_flAutoExposureMax: usize = 0x544; // float + pub const m_flTonemapPercentTarget: usize = 0x548; // float + pub const m_flTonemapPercentBrightPixels: usize = 0x54C; // float + pub const m_flTonemapMinAvgLum: usize = 0x550; // float + pub const m_flExposureAdaptationSpeedUp: usize = 0x554; // float + pub const m_flExposureAdaptationSpeedDown: usize = 0x558; // float + pub const m_flTonemapEVSmoothingRange: usize = 0x55C; // float +} + +pub mod C_TonemapController2Alias_env_tonemap_controller2 { // C_TonemapController2 +} + +pub mod C_TriggerBuoyancy { // C_BaseTrigger + pub const m_BuoyancyHelper: usize = 0xCC8; // CBuoyancyHelper + pub const m_flFluidDensity: usize = 0xCE8; // float +} + +pub mod C_TriggerLerpObject { // C_BaseTrigger +} + +pub mod C_TriggerMultiple { // C_BaseTrigger +} + +pub mod C_TriggerVolume { // C_BaseModelEntity +} + +pub mod C_ViewmodelAttachmentModel { // CBaseAnimGraph +} + +pub mod C_ViewmodelWeapon { // CBaseAnimGraph + pub const m_worldModel: usize = 0xE80; // char* +} + +pub mod C_VoteController { // C_BaseEntity + pub const m_iActiveIssueIndex: usize = 0x550; // int32_t + pub const m_iOnlyTeamToVote: usize = 0x554; // int32_t + pub const m_nVoteOptionCount: usize = 0x558; // int32_t[5] + pub const m_nPotentialVotes: usize = 0x56C; // int32_t + pub const m_bVotesDirty: usize = 0x570; // bool + pub const m_bTypeDirty: usize = 0x571; // bool + pub const m_bIsYesNoVote: usize = 0x572; // bool +} + +pub mod C_WaterBullet { // CBaseAnimGraph +} + +pub mod C_WeaponAWP { // C_CSWeaponBaseGun +} + +pub mod C_WeaponAug { // C_CSWeaponBaseGun +} + +pub mod C_WeaponBaseItem { // C_CSWeaponBase + pub const m_SequenceCompleteTimer: usize = 0x1940; // CountdownTimer + pub const m_bRedraw: usize = 0x1958; // bool +} + +pub mod C_WeaponBizon { // C_CSWeaponBaseGun +} + +pub mod C_WeaponElite { // C_CSWeaponBaseGun +} + +pub mod C_WeaponFamas { // C_CSWeaponBaseGun +} + +pub mod C_WeaponFiveSeven { // C_CSWeaponBaseGun +} + +pub mod C_WeaponG3SG1 { // C_CSWeaponBaseGun +} + +pub mod C_WeaponGalilAR { // C_CSWeaponBaseGun +} + +pub mod C_WeaponGlock { // C_CSWeaponBaseGun +} + +pub mod C_WeaponHKP2000 { // C_CSWeaponBaseGun +} + +pub mod C_WeaponM249 { // C_CSWeaponBaseGun +} + +pub mod C_WeaponM4A1 { // C_CSWeaponBaseGun +} + +pub mod C_WeaponMAC10 { // C_CSWeaponBaseGun +} + +pub mod C_WeaponMP7 { // C_CSWeaponBaseGun +} + +pub mod C_WeaponMP9 { // C_CSWeaponBaseGun +} + +pub mod C_WeaponMag7 { // C_CSWeaponBaseGun +} + +pub mod C_WeaponNOVA { // C_CSWeaponBase +} + +pub mod C_WeaponNegev { // C_CSWeaponBaseGun +} + +pub mod C_WeaponP250 { // C_CSWeaponBaseGun +} + +pub mod C_WeaponP90 { // C_CSWeaponBaseGun +} + +pub mod C_WeaponSCAR20 { // C_CSWeaponBaseGun +} + +pub mod C_WeaponSG556 { // C_CSWeaponBaseGun +} + +pub mod C_WeaponSSG08 { // C_CSWeaponBaseGun +} + +pub mod C_WeaponSawedoff { // C_CSWeaponBase +} + +pub mod C_WeaponShield { // C_CSWeaponBaseGun + pub const m_flDisplayHealth: usize = 0x1960; // float +} + +pub mod C_WeaponTaser { // C_CSWeaponBaseGun + pub const m_fFireTime: usize = 0x1960; // GameTime_t +} + +pub mod C_WeaponTec9 { // C_CSWeaponBaseGun +} + +pub mod C_WeaponUMP45 { // C_CSWeaponBaseGun +} + +pub mod C_WeaponXM1014 { // C_CSWeaponBase +} + +pub mod C_World { // C_BaseModelEntity +} + +pub mod C_WorldModelGloves { // CBaseAnimGraph +} + +pub mod C_WorldModelNametag { // CBaseAnimGraph +} + +pub mod C_WorldModelStattrak { // CBaseAnimGraph +} + +pub mod C_fogplayerparams_t { + pub const m_hCtrl: usize = 0x8; // CHandle<C_FogController> + pub const m_flTransitionTime: usize = 0xC; // float + pub const m_OldColor: usize = 0x10; // Color + pub const m_flOldStart: usize = 0x14; // float + pub const m_flOldEnd: usize = 0x18; // float + pub const m_flOldMaxDensity: usize = 0x1C; // float + pub const m_flOldHDRColorScale: usize = 0x20; // float + pub const m_flOldFarZ: usize = 0x24; // float + pub const m_NewColor: usize = 0x28; // Color + pub const m_flNewStart: usize = 0x2C; // float + pub const m_flNewEnd: usize = 0x30; // float + pub const m_flNewMaxDensity: usize = 0x34; // float + pub const m_flNewHDRColorScale: usize = 0x38; // float + pub const m_flNewFarZ: usize = 0x3C; // float +} + +pub mod CompMatMutatorCondition_t { + pub const m_nMutatorCondition: usize = 0x0; // CompMatPropertyMutatorConditionType_t + pub const m_strMutatorConditionContainerName: usize = 0x8; // CUtlString + pub const m_strMutatorConditionContainerVarName: usize = 0x10; // CUtlString + pub const m_strMutatorConditionContainerVarValue: usize = 0x18; // CUtlString + pub const m_bPassWhenTrue: usize = 0x20; // bool +} + +pub mod CompMatPropertyMutator_t { + pub const m_bEnabled: usize = 0x0; // bool + pub const m_nMutatorCommandType: usize = 0x4; // CompMatPropertyMutatorType_t + pub const m_strInitWith_Container: usize = 0x8; // CUtlString + pub const m_strCopyProperty_InputContainerSrc: usize = 0x10; // CUtlString + pub const m_strCopyProperty_InputContainerProperty: usize = 0x18; // CUtlString + pub const m_strCopyProperty_TargetProperty: usize = 0x20; // CUtlString + pub const m_strRandomRollInputVars_SeedInputVar: usize = 0x28; // CUtlString + pub const m_vecRandomRollInputVars_InputVarsToRoll: usize = 0x30; // CUtlVector<CUtlString> + pub const m_strCopyMatchingKeys_InputContainerSrc: usize = 0x48; // CUtlString + pub const m_strCopyKeysWithSuffix_InputContainerSrc: usize = 0x50; // CUtlString + pub const m_strCopyKeysWithSuffix_FindSuffix: usize = 0x58; // CUtlString + pub const m_strCopyKeysWithSuffix_ReplaceSuffix: usize = 0x60; // CUtlString + pub const m_nSetValue_Value: usize = 0x68; // CompositeMaterialInputLooseVariable_t + pub const m_strGenerateTexture_TargetParam: usize = 0x2D8; // CUtlString + pub const m_strGenerateTexture_InitialContainer: usize = 0x2E0; // CUtlString + pub const m_nResolution: usize = 0x2E8; // int32_t + pub const m_bIsScratchTarget: usize = 0x2EC; // bool + pub const m_bSplatDebugInfo: usize = 0x2ED; // bool + pub const m_bCaptureInRenderDoc: usize = 0x2EE; // bool + pub const m_vecTexGenInstructions: usize = 0x2F0; // CUtlVector<CompMatPropertyMutator_t> + pub const m_vecConditionalMutators: usize = 0x308; // CUtlVector<CompMatPropertyMutator_t> + pub const m_strPopInputQueue_Container: usize = 0x320; // CUtlString + pub const m_strDrawText_InputContainerSrc: usize = 0x328; // CUtlString + pub const m_strDrawText_InputContainerProperty: usize = 0x330; // CUtlString + pub const m_vecDrawText_Position: usize = 0x338; // Vector2D + pub const m_colDrawText_Color: usize = 0x340; // Color + pub const m_strDrawText_Font: usize = 0x348; // CUtlString + pub const m_vecConditions: usize = 0x350; // CUtlVector<CompMatMutatorCondition_t> +} + +pub mod CompositeMaterialAssemblyProcedure_t { + pub const m_vecCompMatIncludes: usize = 0x0; // CUtlVector<CResourceName> + pub const m_vecMatchFilters: usize = 0x18; // CUtlVector<CompositeMaterialMatchFilter_t> + pub const m_vecCompositeInputContainers: usize = 0x30; // CUtlVector<CompositeMaterialInputContainer_t> + pub const m_vecPropertyMutators: usize = 0x48; // CUtlVector<CompMatPropertyMutator_t> +} + +pub mod CompositeMaterialEditorPoint_t { + pub const m_ModelName: usize = 0x0; // CResourceName + pub const m_nSequenceIndex: usize = 0xE0; // int32_t + pub const m_flCycle: usize = 0xE4; // float + pub const m_KVModelStateChoices: usize = 0xE8; // KeyValues3 + pub const m_bEnableChildModel: usize = 0xF8; // bool + pub const m_ChildModelName: usize = 0x100; // CResourceName + pub const m_vecCompositeMaterialAssemblyProcedures: usize = 0x1E0; // CUtlVector<CompositeMaterialAssemblyProcedure_t> + pub const m_vecCompositeMaterials: usize = 0x1F8; // CUtlVector<CompositeMaterial_t> +} + +pub mod CompositeMaterialInputContainer_t { + pub const m_bEnabled: usize = 0x0; // bool + pub const m_nCompositeMaterialInputContainerSourceType: usize = 0x4; // CompositeMaterialInputContainerSourceType_t + pub const m_strSpecificContainerMaterial: usize = 0x8; // CResourceName + pub const m_strAttrName: usize = 0xE8; // CUtlString + pub const m_strAlias: usize = 0xF0; // CUtlString + pub const m_vecLooseVariables: usize = 0xF8; // CUtlVector<CompositeMaterialInputLooseVariable_t> + pub const m_strAttrNameForVar: usize = 0x110; // CUtlString + pub const m_bExposeExternally: usize = 0x118; // bool +} + +pub mod CompositeMaterialInputLooseVariable_t { + pub const m_strName: usize = 0x0; // CUtlString + pub const m_bExposeExternally: usize = 0x8; // bool + pub const m_strExposedFriendlyName: usize = 0x10; // CUtlString + pub const m_strExposedFriendlyGroupName: usize = 0x18; // CUtlString + pub const m_bExposedVariableIsFixedRange: usize = 0x20; // bool + pub const m_strExposedVisibleWhenTrue: usize = 0x28; // CUtlString + pub const m_strExposedHiddenWhenTrue: usize = 0x30; // CUtlString + pub const m_nVariableType: usize = 0x38; // CompositeMaterialInputLooseVariableType_t + pub const m_bValueBoolean: usize = 0x3C; // bool + pub const m_nValueIntX: usize = 0x40; // int32_t + pub const m_nValueIntY: usize = 0x44; // int32_t + pub const m_nValueIntZ: usize = 0x48; // int32_t + pub const m_nValueIntW: usize = 0x4C; // int32_t + pub const m_bHasFloatBounds: usize = 0x50; // bool + pub const m_flValueFloatX: usize = 0x54; // float + pub const m_flValueFloatX_Min: usize = 0x58; // float + pub const m_flValueFloatX_Max: usize = 0x5C; // float + pub const m_flValueFloatY: usize = 0x60; // float + pub const m_flValueFloatY_Min: usize = 0x64; // float + pub const m_flValueFloatY_Max: usize = 0x68; // float + pub const m_flValueFloatZ: usize = 0x6C; // float + pub const m_flValueFloatZ_Min: usize = 0x70; // float + pub const m_flValueFloatZ_Max: usize = 0x74; // float + pub const m_flValueFloatW: usize = 0x78; // float + pub const m_flValueFloatW_Min: usize = 0x7C; // float + pub const m_flValueFloatW_Max: usize = 0x80; // float + pub const m_cValueColor4: usize = 0x84; // Color + pub const m_nValueSystemVar: usize = 0x88; // CompositeMaterialVarSystemVar_t + pub const m_strResourceMaterial: usize = 0x90; // CResourceName + pub const m_strTextureContentAssetPath: usize = 0x170; // CUtlString + pub const m_strTextureRuntimeResourcePath: usize = 0x178; // CResourceName + pub const m_strTextureCompilationVtexTemplate: usize = 0x258; // CUtlString + pub const m_nTextureType: usize = 0x260; // CompositeMaterialInputTextureType_t + pub const m_strString: usize = 0x268; // CUtlString +} + +pub mod CompositeMaterialMatchFilter_t { + pub const m_nCompositeMaterialMatchFilterType: usize = 0x0; // CompositeMaterialMatchFilterType_t + pub const m_strMatchFilter: usize = 0x8; // CUtlString + pub const m_strMatchValue: usize = 0x10; // CUtlString + pub const m_bPassWhenTrue: usize = 0x18; // bool +} + +pub mod CompositeMaterial_t { + pub const m_TargetKVs: usize = 0x8; // KeyValues3 + pub const m_PreGenerationKVs: usize = 0x18; // KeyValues3 + pub const m_FinalKVs: usize = 0x28; // KeyValues3 + pub const m_vecGeneratedTextures: usize = 0x40; // CUtlVector<GeneratedTextureHandle_t> +} + +pub mod CountdownTimer { + pub const m_duration: usize = 0x8; // float + pub const m_timestamp: usize = 0xC; // GameTime_t + pub const m_timescale: usize = 0x10; // float + pub const m_nWorldGroupId: usize = 0x14; // WorldGroupId_t +} + +pub mod EngineCountdownTimer { + pub const m_duration: usize = 0x8; // float + pub const m_timestamp: usize = 0xC; // float + pub const m_timescale: usize = 0x10; // float +} + +pub mod EntityRenderAttribute_t { + pub const m_ID: usize = 0x30; // CUtlStringToken + pub const m_Values: usize = 0x34; // Vector4D +} + +pub mod EntitySpottedState_t { + pub const m_bSpotted: usize = 0x8; // bool + pub const m_bSpottedByMask: usize = 0xC; // uint32_t[2] +} + +pub mod GeneratedTextureHandle_t { + pub const m_strBitmapName: usize = 0x0; // CUtlString +} + +pub mod IClientAlphaProperty { +} + +pub mod IntervalTimer { + pub const m_timestamp: usize = 0x8; // GameTime_t + pub const m_nWorldGroupId: usize = 0xC; // WorldGroupId_t +} + +pub mod PhysicsRagdollPose_t { + pub const __m_pChainEntity: usize = 0x8; // CNetworkVarChainer + pub const m_Transforms: usize = 0x30; // C_NetworkUtlVectorBase<CTransform> + pub const m_hOwner: usize = 0x48; // CHandle<C_BaseEntity> + pub const m_bDirty: usize = 0x68; // bool +} + +pub mod SellbackPurchaseEntry_t { + pub const m_unDefIdx: usize = 0x30; // uint16_t + pub const m_nCost: usize = 0x34; // int32_t + pub const m_nPrevArmor: usize = 0x38; // int32_t + pub const m_bPrevHelmet: usize = 0x3C; // bool + pub const m_hItem: usize = 0x40; // CEntityHandle +} + +pub mod ServerAuthoritativeWeaponSlot_t { + pub const unClass: usize = 0x28; // uint16_t + pub const unSlot: usize = 0x2A; // uint16_t + pub const unItemDefIdx: usize = 0x2C; // uint16_t +} + +pub mod TimedEvent { + pub const m_TimeBetweenEvents: usize = 0x0; // float + pub const m_fNextEvent: usize = 0x4; // float +} + +pub mod VPhysicsCollisionAttribute_t { + pub const m_nInteractsAs: usize = 0x8; // uint64_t + pub const m_nInteractsWith: usize = 0x10; // uint64_t + pub const m_nInteractsExclude: usize = 0x18; // uint64_t + pub const m_nEntityId: usize = 0x20; // uint32_t + pub const m_nOwnerId: usize = 0x24; // uint32_t + pub const m_nHierarchyId: usize = 0x28; // uint16_t + pub const m_nCollisionGroup: usize = 0x2A; // uint8_t + pub const m_nCollisionFunctionMask: usize = 0x2B; // uint8_t +} + +pub mod ViewAngleServerChange_t { + pub const nType: usize = 0x30; // FixAngleSet_t + pub const qAngle: usize = 0x34; // QAngle + pub const nIndex: usize = 0x40; // uint32_t +} + +pub mod WeaponPurchaseCount_t { + pub const m_nItemDefIndex: usize = 0x30; // uint16_t + pub const m_nCount: usize = 0x32; // uint16_t +} + +pub mod WeaponPurchaseTracker_t { + pub const m_weaponPurchases: usize = 0x8; // C_UtlVectorEmbeddedNetworkVar<WeaponPurchaseCount_t> +} + +pub mod audioparams_t { + pub const localSound: usize = 0x8; // Vector[8] + pub const soundscapeIndex: usize = 0x68; // int32_t + pub const localBits: usize = 0x6C; // uint8_t + pub const soundscapeEntityListIndex: usize = 0x70; // int32_t + pub const soundEventHash: usize = 0x74; // uint32_t +} + +pub mod fogparams_t { + pub const dirPrimary: usize = 0x8; // Vector + pub const colorPrimary: usize = 0x14; // Color + pub const colorSecondary: usize = 0x18; // Color + pub const colorPrimaryLerpTo: usize = 0x1C; // Color + pub const colorSecondaryLerpTo: usize = 0x20; // Color + pub const start: usize = 0x24; // float + pub const end: usize = 0x28; // float + pub const farz: usize = 0x2C; // float + pub const maxdensity: usize = 0x30; // float + pub const exponent: usize = 0x34; // float + pub const HDRColorScale: usize = 0x38; // float + pub const skyboxFogFactor: usize = 0x3C; // float + pub const skyboxFogFactorLerpTo: usize = 0x40; // float + pub const startLerpTo: usize = 0x44; // float + pub const endLerpTo: usize = 0x48; // float + pub const maxdensityLerpTo: usize = 0x4C; // float + pub const lerptime: usize = 0x50; // GameTime_t + pub const duration: usize = 0x54; // float + pub const blendtobackground: usize = 0x58; // float + pub const scattering: usize = 0x5C; // float + pub const locallightscale: usize = 0x60; // float + pub const enable: usize = 0x64; // bool + pub const blend: usize = 0x65; // bool + pub const m_bNoReflectionFog: usize = 0x66; // bool + pub const m_bPadding: usize = 0x67; // bool +} + +pub mod shard_model_desc_t { + pub const m_nModelID: usize = 0x8; // int32_t + pub const m_hMaterial: usize = 0x10; // CStrongHandle<InfoForResourceTypeIMaterial2> + pub const m_solid: usize = 0x18; // ShardSolid_t + pub const m_ShatterPanelMode: usize = 0x19; // ShatterPanelMode + pub const m_vecPanelSize: usize = 0x1C; // Vector2D + pub const m_vecStressPositionA: usize = 0x24; // Vector2D + pub const m_vecStressPositionB: usize = 0x2C; // Vector2D + pub const m_vecPanelVertices: usize = 0x38; // C_NetworkUtlVectorBase<Vector2D> + pub const m_flGlassHalfThickness: usize = 0x50; // float + pub const m_bHasParent: usize = 0x54; // bool + pub const m_bParentFrozen: usize = 0x55; // bool + pub const m_SurfacePropStringToken: usize = 0x58; // CUtlStringToken + pub const m_LightGroup: usize = 0x5C; // CUtlStringToken +} + +pub mod sky3dparams_t { + pub const scale: usize = 0x8; // int16_t + pub const origin: usize = 0xC; // Vector + pub const bClip3DSkyBoxNearToWorldFar: usize = 0x18; // bool + pub const flClip3DSkyBoxNearToWorldFarOffset: usize = 0x1C; // float + pub const fog: usize = 0x20; // fogparams_t + pub const m_nWorldGroupID: usize = 0x88; // WorldGroupId_t +} \ No newline at end of file diff --git a/src/sdk/cs2dumper/engine2.rs b/src/sdk/cs2dumper/engine2.rs new file mode 100644 index 0000000..75c2e20 --- /dev/null +++ b/src/sdk/cs2dumper/engine2.rs @@ -0,0 +1,242 @@ +/* + * Created using https://github.com/a2x/cs2-dumper + * Fri, 27 Oct 2023 01:03:22 +0000 + */ + +#![allow(non_snake_case, non_upper_case_globals)] + +pub mod CEmptyEntityInstance { +} + +pub mod CEntityComponent { +} + +pub mod CEntityComponentHelper { + pub const m_flags: usize = 0x8; // uint32_t + pub const m_pInfo: usize = 0x10; // EntComponentInfo_t* + pub const m_nPriority: usize = 0x18; // int32_t + pub const m_pNext: usize = 0x20; // CEntityComponentHelper* +} + +pub mod CEntityIOOutput { + pub const m_Value: usize = 0x18; // CVariantBase<CVariantDefaultAllocator> +} + +pub mod CEntityIdentity { + pub const m_nameStringableIndex: usize = 0x14; // int32_t + pub const m_name: usize = 0x18; // CUtlSymbolLarge + pub const m_designerName: usize = 0x20; // CUtlSymbolLarge + pub const m_flags: usize = 0x30; // uint32_t + pub const m_worldGroupId: usize = 0x38; // WorldGroupId_t + pub const m_fDataObjectTypes: usize = 0x3C; // uint32_t + pub const m_PathIndex: usize = 0x40; // ChangeAccessorFieldPathIndex_t + pub const m_pPrev: usize = 0x58; // CEntityIdentity* + pub const m_pNext: usize = 0x60; // CEntityIdentity* + pub const m_pPrevByClass: usize = 0x68; // CEntityIdentity* + pub const m_pNextByClass: usize = 0x70; // CEntityIdentity* +} + +pub mod CEntityInstance { + pub const m_iszPrivateVScripts: usize = 0x8; // CUtlSymbolLarge + pub const m_pEntity: usize = 0x10; // CEntityIdentity* + pub const m_CScriptComponent: usize = 0x28; // CScriptComponent* +} + +pub mod CNetworkVarChainer { + pub const m_PathIndex: usize = 0x20; // ChangeAccessorFieldPathIndex_t +} + +pub mod CScriptComponent { // CEntityComponent + pub const m_scriptClassName: usize = 0x30; // CUtlSymbolLarge +} + +pub mod CVariantDefaultAllocator { +} + +pub mod EngineLoopState_t { + pub const m_nPlatWindowWidth: usize = 0x18; // int32_t + pub const m_nPlatWindowHeight: usize = 0x1C; // int32_t + pub const m_nRenderWidth: usize = 0x20; // int32_t + pub const m_nRenderHeight: usize = 0x24; // int32_t +} + +pub mod EntComponentInfo_t { + pub const m_pName: usize = 0x0; // char* + pub const m_pCPPClassname: usize = 0x8; // char* + pub const m_pNetworkDataReferencedDescription: usize = 0x10; // char* + pub const m_pNetworkDataReferencedPtrPropDescription: usize = 0x18; // char* + pub const m_nRuntimeIndex: usize = 0x20; // int32_t + pub const m_nFlags: usize = 0x24; // uint32_t + pub const m_pBaseClassComponentHelper: usize = 0x60; // CEntityComponentHelper* +} + +pub mod EntInput_t { +} + +pub mod EntOutput_t { +} + +pub mod EventAdvanceTick_t { // EventSimulate_t + pub const m_nCurrentTick: usize = 0x30; // int32_t + pub const m_nCurrentTickThisFrame: usize = 0x34; // int32_t + pub const m_nTotalTicksThisFrame: usize = 0x38; // int32_t + pub const m_nTotalTicks: usize = 0x3C; // int32_t +} + +pub mod EventAppShutdown_t { + pub const m_nDummy0: usize = 0x0; // int32_t +} + +pub mod EventClientAdvanceTick_t { // EventAdvanceTick_t +} + +pub mod EventClientFrameSimulate_t { + pub const m_LoopState: usize = 0x0; // EngineLoopState_t + pub const m_flRealTime: usize = 0x28; // float + pub const m_flFrameTime: usize = 0x2C; // float +} + +pub mod EventClientOutput_t { + pub const m_LoopState: usize = 0x0; // EngineLoopState_t + pub const m_flRenderTime: usize = 0x28; // float + pub const m_flRealTime: usize = 0x2C; // float + pub const m_flRenderFrameTimeUnbounded: usize = 0x30; // float + pub const m_bRenderOnly: usize = 0x34; // bool +} + +pub mod EventClientPauseSimulate_t { // EventSimulate_t +} + +pub mod EventClientPollInput_t { + pub const m_LoopState: usize = 0x0; // EngineLoopState_t + pub const m_flRealTime: usize = 0x28; // float +} + +pub mod EventClientPollNetworking_t { + pub const m_nTickCount: usize = 0x0; // int32_t +} + +pub mod EventClientPostAdvanceTick_t { // EventPostAdvanceTick_t +} + +pub mod EventClientPostOutput_t { + pub const m_LoopState: usize = 0x0; // EngineLoopState_t + pub const m_flRenderTime: usize = 0x28; // double + pub const m_flRenderFrameTime: usize = 0x30; // float + pub const m_flRenderFrameTimeUnbounded: usize = 0x34; // float + pub const m_bRenderOnly: usize = 0x38; // bool +} + +pub mod EventClientPostSimulate_t { // EventSimulate_t +} + +pub mod EventClientPreOutput_t { + pub const m_LoopState: usize = 0x0; // EngineLoopState_t + pub const m_flRenderTime: usize = 0x28; // double + pub const m_flRenderFrameTime: usize = 0x30; // double + pub const m_flRenderFrameTimeUnbounded: usize = 0x38; // double + pub const m_flRealTime: usize = 0x40; // float + pub const m_bRenderOnly: usize = 0x44; // bool +} + +pub mod EventClientPreSimulate_t { // EventSimulate_t +} + +pub mod EventClientPredictionPostNetupdate_t { +} + +pub mod EventClientProcessGameInput_t { + pub const m_LoopState: usize = 0x0; // EngineLoopState_t + pub const m_flRealTime: usize = 0x28; // float + pub const m_flFrameTime: usize = 0x2C; // float +} + +pub mod EventClientProcessInput_t { + pub const m_LoopState: usize = 0x0; // EngineLoopState_t + pub const m_flRealTime: usize = 0x28; // float +} + +pub mod EventClientProcessNetworking_t { +} + +pub mod EventClientSceneSystemThreadStateChange_t { + pub const m_bThreadsActive: usize = 0x0; // bool +} + +pub mod EventClientSendInput_t { + pub const m_bFinalClientCommandTick: usize = 0x0; // bool + pub const m_nAdditionalClientCommandsToCreate: usize = 0x4; // int32_t +} + +pub mod EventClientSimulate_t { // EventSimulate_t +} + +pub mod EventFrameBoundary_t { + pub const m_flFrameTime: usize = 0x0; // float +} + +pub mod EventModInitialized_t { +} + +pub mod EventPostAdvanceTick_t { // EventSimulate_t + pub const m_nCurrentTick: usize = 0x30; // int32_t + pub const m_nCurrentTickThisFrame: usize = 0x34; // int32_t + pub const m_nTotalTicksThisFrame: usize = 0x38; // int32_t + pub const m_nTotalTicks: usize = 0x3C; // int32_t +} + +pub mod EventPostDataUpdate_t { + pub const m_nCount: usize = 0x0; // int32_t +} + +pub mod EventPreDataUpdate_t { + pub const m_nCount: usize = 0x0; // int32_t +} + +pub mod EventProfileStorageAvailable_t { + pub const m_nSplitScreenSlot: usize = 0x0; // CSplitScreenSlot +} + +pub mod EventServerAdvanceTick_t { // EventAdvanceTick_t +} + +pub mod EventServerPollNetworking_t { // EventSimulate_t +} + +pub mod EventServerPostAdvanceTick_t { // EventPostAdvanceTick_t +} + +pub mod EventServerPostSimulate_t { // EventSimulate_t +} + +pub mod EventServerProcessNetworking_t { // EventSimulate_t +} + +pub mod EventServerSimulate_t { // EventSimulate_t +} + +pub mod EventSetTime_t { + pub const m_LoopState: usize = 0x0; // EngineLoopState_t + pub const m_nClientOutputFrames: usize = 0x28; // int32_t + pub const m_flRealTime: usize = 0x30; // double + pub const m_flRenderTime: usize = 0x38; // double + pub const m_flRenderFrameTime: usize = 0x40; // double + pub const m_flRenderFrameTimeUnbounded: usize = 0x48; // double + pub const m_flRenderFrameTimeUnscaled: usize = 0x50; // double + pub const m_flTickRemainder: usize = 0x58; // double +} + +pub mod EventSimpleLoopFrameUpdate_t { + pub const m_LoopState: usize = 0x0; // EngineLoopState_t + pub const m_flRealTime: usize = 0x28; // float + pub const m_flFrameTime: usize = 0x2C; // float +} + +pub mod EventSimulate_t { + pub const m_LoopState: usize = 0x0; // EngineLoopState_t + pub const m_bFirstTick: usize = 0x28; // bool + pub const m_bLastTick: usize = 0x29; // bool +} + +pub mod EventSplitScreenStateChanged_t { +} \ No newline at end of file diff --git a/src/sdk/cs2dumper/mod.rs b/src/sdk/cs2dumper/mod.rs new file mode 100644 index 0000000..dc63cf0 --- /dev/null +++ b/src/sdk/cs2dumper/mod.rs @@ -0,0 +1,4 @@ +#![allow(dead_code)] +pub mod client; +pub mod engine2; +pub mod offsets; diff --git a/src/sdk/cs2dumper/offsets.rs b/src/sdk/cs2dumper/offsets.rs new file mode 100644 index 0000000..f996e07 --- /dev/null +++ b/src/sdk/cs2dumper/offsets.rs @@ -0,0 +1,46 @@ +/* + * Created using https://github.com/a2x/cs2-dumper + * Mon, 30 Oct 2023 00:17:09 +0000 + */ + +#![allow(non_snake_case, non_upper_case_globals)] + +pub mod client_dll { // client.dll + pub const dwBaseEntityModel_setModel: usize = 0x57EA50; + pub const dwEntityList: usize = 0x17995C0; + pub const dwForceAttack: usize = 0x169EE60; + pub const dwForceAttack2: usize = 0x169EEF0; + pub const dwForceBackward: usize = 0x169F130; + pub const dwForceCrouch: usize = 0x169F400; + pub const dwForceForward: usize = 0x169F0A0; + pub const dwForceJump: usize = 0x169F370; + pub const dwForceLeft: usize = 0x169F1C0; + pub const dwForceRight: usize = 0x169F250; + pub const dwGameEntitySystem: usize = 0x1952588; + pub const dwGameEntitySystem_getBaseEntity: usize = 0x602050; + pub const dwGameEntitySystem_getHighestEntityIndex: usize = 0x5F3D40; + pub const dwGameRules: usize = 0x17F5488; + pub const dwGlobalVars: usize = 0x169AFE0; + pub const dwGlowManager: usize = 0x17F4C10; + pub const dwInterfaceLinkList: usize = 0x1980298; + pub const dwLocalPlayerController: usize = 0x17E8158; + pub const dwLocalPlayerPawn: usize = 0x1886C48; + pub const dwPlantedC4: usize = 0x188BFE0; + pub const dwViewAngles: usize = 0x18E6770; + pub const dwViewMatrix: usize = 0x1887730; + pub const dwViewRender: usize = 0x1888128; +} + +pub mod engine2_dll { // engine2.dll + pub const dwBuildNumber: usize = 0x488514; + pub const dwNetworkGameClient: usize = 0x487AB0; + pub const dwNetworkGameClient_getLocalPlayer: usize = 0xF0; + pub const dwNetworkGameClient_maxClients: usize = 0x250; + pub const dwNetworkGameClient_signOnState: usize = 0x240; + pub const dwWindowHeight: usize = 0x5396DC; + pub const dwWindowWidth: usize = 0x5396D8; +} + +pub mod inputsystem_dll { // inputsystem.dll + pub const dwInputSystem: usize = 0x35770; +} \ No newline at end of file diff --git a/src/sdk/mod.rs b/src/sdk/mod.rs new file mode 100644 index 0000000..564b429 --- /dev/null +++ b/src/sdk/mod.rs @@ -0,0 +1,43 @@ +pub mod structs; +pub mod cs2dumper; +use crate::dma::CheatCtx; + +use memflow::prelude::v1::*; +use anyhow::Result; + +use self::structs::{CCSPlayerController, CPlayerPawn}; + +pub fn get_local(ctx: &mut CheatCtx) -> Result<CCSPlayerController> { + let ptr = ctx.process.read_addr64(ctx.client_module.base + cs2dumper::offsets::client_dll::dwLocalPlayerController)?; + Ok(CCSPlayerController::new(ptr)) +} + +pub fn get_local_pawn(ctx: &mut CheatCtx) -> Result<CPlayerPawn> { + let ptr = ctx.process.read_addr64(ctx.client_module.base + cs2dumper::offsets::client_dll::dwLocalPlayerPawn)?; + Ok(CPlayerPawn::new(ptr)) +} + +pub fn get_entity_list(ctx: &mut CheatCtx) -> Result<Address> { + let ptr = ctx.process.read_addr64(ctx.client_module.base + cs2dumper::offsets::client_dll::dwEntityList)?; + Ok(ptr) +} + +pub fn get_globals(ctx: &mut CheatCtx) -> Result<Address> { + let ptr = ctx.process.read_addr64(ctx.client_module.base + cs2dumper::offsets::client_dll::dwGlobalVars)?; + Ok(ptr) +} + +pub fn map_name(global_vars: Address, ctx: &mut CheatCtx) -> Result<String> { + let ptr = ctx.process.read_addr64(global_vars + 0x188)?; + Ok(ctx.process.read_char_string_n(ptr, 32)?) +} + +pub fn max_clients(global_vars: Address, ctx: &mut CheatCtx) -> Result<i32> { + Ok(ctx.process.read(global_vars + 0x10)?) +} + +pub fn is_ingame(ctx: &mut CheatCtx) -> Result<bool> { + let ptr = ctx.process.read_addr64(ctx.engine_module.base + cs2dumper::offsets::engine2_dll::dwNetworkGameClient)?; + let signonstate: u64 = ctx.process.read(ptr + cs2dumper::offsets::engine2_dll::dwNetworkGameClient_signOnState)?; + Ok(signonstate == 6) +} \ No newline at end of file diff --git a/src/sdk/structs/entity.rs b/src/sdk/structs/entity.rs new file mode 100644 index 0000000..c634753 --- /dev/null +++ b/src/sdk/structs/entity.rs @@ -0,0 +1,206 @@ +use crate::{dma::CheatCtx, sdk::cs2dumper, structs::{Vec3, communication::PlayerType}}; +use enum_primitive_derive::Primitive; +use memflow::{prelude::MemoryView, types::Address}; +use anyhow::{Result, anyhow}; +use num_traits::FromPrimitive; + +#[repr(i32)] +#[derive(Debug, Eq, PartialEq, Primitive)] +pub enum TeamID { + Spectator = 1, + T = 2, + CT = 3 +} + +pub struct CEntityIdentity(Address); + +impl CEntityIdentity { + pub fn prev_by_class(&self, ctx: &mut CheatCtx) -> Result<CBaseEntity> { + let prev1 = ctx.process.read_addr64(self.0 + cs2dumper::client::CEntityIdentity::m_pPrevByClass)?; + let prev = ctx.process.read_addr64(prev1)?; + + if prev.is_null() || !prev.is_valid() { + Err(anyhow!("Invalid or Null")) + } else { + Ok(CBaseEntity(prev)) + } + } + + pub fn next_by_class(&self, ctx: &mut CheatCtx) -> Result<CBaseEntity> { + let next1 = ctx.process.read_addr64(self.0 + cs2dumper::client::CEntityIdentity::m_pNextByClass)?; + let next = ctx.process.read_addr64(next1)?; + + if next.is_null() || !next.is_valid() { + Err(anyhow!("Invalid or Null")) + } else { + Ok(CBaseEntity(next)) + } + } + + pub fn designer_name(&self, ctx: &mut CheatCtx) -> Result<String> { + let ptr = ctx.process.read_addr64(self.0 + cs2dumper::client::CEntityIdentity::m_designerName)?; + Ok(ctx.process.read_char_string_n(ptr, 32)?) + } +} + +pub struct CBaseEntity(Address); + +impl CBaseEntity { + pub fn new(ptr: Address) -> CBaseEntity { + CBaseEntity(ptr) + } + + pub fn ptr(&self) -> Address { + self.0 + } + + pub fn to_controller(&self) -> CCSPlayerController { + CCSPlayerController(self.0) + } + + pub fn get_from_list(ctx: &mut CheatCtx, entity_list: Address, idx: usize) -> Result<CBaseEntity> { + let list_entry = ctx.process.read_addr64(entity_list + ((( idx & 0x7FFF ) >> 9 ) * 0x8)).unwrap(); + + if list_entry.is_null() || !list_entry.is_valid() { + Err(anyhow!("Invalid or Null")) + } else { + let ptr = ctx.process.read_addr64(list_entry + 120 * (idx & 0x1FF)).unwrap(); + Ok(CBaseEntity(ptr)) + } + } + + pub fn entity_identity(&self, ctx: &mut CheatCtx) -> Result<CEntityIdentity> { + let ptr = ctx.process.read_addr64(self.0 + cs2dumper::client::CEntityInstance::m_pEntity)?; + Ok(CEntityIdentity(ptr)) + } +} + +pub struct CPlayerPawn(Address); + +impl CPlayerPawn { + pub fn new(ptr: Address) -> CPlayerPawn { + CPlayerPawn(ptr) + } + + pub fn from_uhandle(uhandle: u32, entity_list: Address, ctx: &mut CheatCtx) -> Option<CPlayerPawn> { + let list_entry = ctx.process.read_addr64(entity_list + 0x8 * ((uhandle & 0x7FFF) >> 9) + 16).unwrap(); + + if list_entry.is_null() || !list_entry.is_valid() { + None + } else { + let ptr = ctx.process.read_addr64(list_entry + 120 * (uhandle & 0x1FF)).unwrap(); + Some(CPlayerPawn(ptr)) + } + } + + /* + DWORD64 entityPawnBase = Memory::Read<unsigned __int64>(EntitiesList + ((hEntity & 0x7FFF) * ENTITY_SPACING)); + auto pawn = read<C_CSPlayerPawnBase*>(entityPawnBase + 0x78 * (hEntity & 0x1FF)); + */ + + pub fn from_uhandle2(uhandle: u32, entity_list: Address, ctx: &mut CheatCtx) -> Option<CPlayerPawn> { + let ent_pawn_base = ctx.process.read_addr64(entity_list + (uhandle & 0x7FFF) * 0x10).unwrap(); + + if ent_pawn_base.is_null() || !ent_pawn_base.is_valid() { + None + } else { + let ptr = ctx.process.read_addr64(ent_pawn_base + 0x78 * (uhandle & 0x1FF)).unwrap(); + Some(CPlayerPawn(ptr)) + } + } + + pub fn ptr(&self) -> Address { + self.0 + } + + pub fn pos(&self, ctx: &mut CheatCtx) -> Result<Vec3> { + Ok(ctx.process.read(self.0 + cs2dumper::client::C_BasePlayerPawn::m_vOldOrigin)?) + } + + pub fn angles(&self, ctx: &mut CheatCtx) -> Result<Vec3> { + Ok(ctx.process.read(self.0 + cs2dumper::client::C_CSPlayerPawnBase::m_angEyeAngles)?) + } + + pub fn health(&self, ctx: &mut CheatCtx) -> Result<u32> { + Ok(ctx.process.read(self.0 + cs2dumper::client::C_BaseEntity::m_iHealth)?) + } + + /// Same as ::get_health > 0 + pub fn is_alive(&self, ctx: &mut CheatCtx) -> Result<bool> { + Ok(self.health(ctx)? > 0) + } + +} + +pub struct CCSPlayerController(Address); + +impl CCSPlayerController { + pub fn ptr(&self) -> Address { + self.0 + } + + pub fn new(ptr: Address) -> CCSPlayerController { + CCSPlayerController(ptr) + } + + pub fn get_team(&self, ctx: &mut CheatCtx) -> Result<Option<TeamID>> { + let team: i32 = ctx.process.read(self.0 + cs2dumper::client::C_BaseEntity::m_iTeamNum)?; + Ok(TeamID::from_i32(team)) + } + + pub fn get_player_type(&self, ctx: &mut CheatCtx, local: &CCSPlayerController) -> Result<Option<PlayerType>> { + if self.0 == local.0 { + return Ok(Some(PlayerType::Local)) + } + + let team = { + match self.get_team(ctx)? { + Some(t) => t, + None => { return Ok(None) }, + } + }; + + let local_team = { + match local.get_team(ctx)? { + Some(t) => t, + None => { return Ok(None) }, + } + }; + + let player_type = { + if team == TeamID::Spectator { + PlayerType::Spectator + } else if team != local_team { + PlayerType::Enemy + } else { + PlayerType::Team + } + }; + + Ok(Some(player_type)) + } + + pub fn pawn(&self, entity_list: Address, ctx: &mut CheatCtx) -> Result<Option<CPlayerPawn>> { + let uhandle = ctx.process.read(self.0 + cs2dumper::client::CCSPlayerController::m_hPlayerPawn)?; + Ok(CPlayerPawn::from_uhandle(uhandle, entity_list, ctx)) + } + + pub fn pawn2(&self, entity_list: Address, ctx: &mut CheatCtx) -> Result<Option<CPlayerPawn>> { + let uhandle = ctx.process.read(self.0 + cs2dumper::client::CBasePlayerController::m_hPawn)?; + Ok(CPlayerPawn::from_uhandle2(uhandle, entity_list, ctx)) + } + + pub fn player_name(&self, ctx: &mut CheatCtx) -> Result<String> { + let ptr = ctx.process.read_addr64(self.0 + cs2dumper::client::CCSPlayerController::m_sSanitizedPlayerName)?; + Ok(ctx.process.read_char_string_n(ptr, 32)?) + } + + pub fn entity_identity(&self, ctx: &mut CheatCtx) -> Result<CEntityIdentity> { + let ptr = ctx.process.read_addr64(self.0 + cs2dumper::client::CEntityInstance::m_pEntity)?; + Ok(CEntityIdentity(ptr)) + } + + pub fn to_base(&self) -> CBaseEntity { + CBaseEntity(self.0) + } +} \ No newline at end of file diff --git a/src/sdk/structs/mod.rs b/src/sdk/structs/mod.rs new file mode 100644 index 0000000..4f2b2b6 --- /dev/null +++ b/src/sdk/structs/mod.rs @@ -0,0 +1,2 @@ +mod entity; +pub use entity::*; \ No newline at end of file diff --git a/src/structs/comms.rs b/src/structs/comms.rs new file mode 100644 index 0000000..496eb08 --- /dev/null +++ b/src/structs/comms.rs @@ -0,0 +1,79 @@ +use serde::{Serialize, Deserialize}; + +use super::Vec3; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct PlayerData { + pos: Vec3, + yaw: f32, + #[serde(rename = "playerType")] + player_type: PlayerType, + + #[serde(rename = "hasBomb")] + has_bomb: bool +} + +impl PlayerData { + pub fn new(pos: Vec3, yaw: f32, player_type: PlayerType, has_bomb: bool) -> PlayerData { + PlayerData { pos, yaw, player_type, has_bomb } + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct BombData { + pos: Vec3, + #[serde(rename = "isPlanted")] + is_planted: bool +} + +impl BombData { + pub fn new(pos: Vec3, is_planted: bool) -> BombData { + BombData { pos, is_planted } + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum EntityData { + Player(PlayerData), + Bomb(BombData) +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)] +pub enum PlayerType { + #[default] + Unknown, + Spectator, + Local, + Enemy, + Team +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct RadarData { + ingame: bool, + + #[serde(rename = "mapName")] + map_name: String, + + #[serde(rename(serialize = "entityData"))] + player_data: Vec<EntityData>, + + #[serde(rename(serialize = "localYaw"))] + local_yaw: f32, +} + +impl RadarData { + pub fn new(ingame: bool, map_name: String, player_data: Vec<EntityData>, local_yaw: f32) -> RadarData { + RadarData { ingame, map_name, player_data, local_yaw } + } + + /// Returns empty RadarData, it's also the same data that gets sent to clients when not ingame + pub fn empty() -> RadarData { + RadarData { + ingame: false, + map_name: String::new(), + player_data: Vec::new(), + local_yaw: 0.0, + } + } +} \ No newline at end of file diff --git a/src/structs/mod.rs b/src/structs/mod.rs new file mode 100644 index 0000000..f67efb9 --- /dev/null +++ b/src/structs/mod.rs @@ -0,0 +1,50 @@ +pub mod comms; + +use clap::ValueEnum; +pub use comms as communication; + +mod vec3; +pub use vec3::Vec3; + + + +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Default)] +pub enum Connector { + #[default] + Qemu, + Kvm, + Pcileech +} + +impl ToString for Connector { + fn to_string(&self) -> String { + match self { + Connector::Qemu => String::from("qemu"), + Connector::Kvm => String::from("kvm"), + Connector::Pcileech => String::from("pcileech"), + } + } +} + +/// Wrapper because log::LevelFilter doesn't implement ValueEnum +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Default)] +pub enum Loglevel { + Error, + #[default] + Warn, + Info, + Debug, + Trace, +} + +impl From<Loglevel> for log::LevelFilter { + fn from(val: Loglevel) -> Self { + match val { + Loglevel::Error => log::LevelFilter::Error, + Loglevel::Warn => log::LevelFilter::Warn, + Loglevel::Info => log::LevelFilter::Info, + Loglevel::Debug => log::LevelFilter::Debug, + Loglevel::Trace => log::LevelFilter::Trace, + } + } +} \ No newline at end of file diff --git a/src/structs/vec3.rs b/src/structs/vec3.rs new file mode 100644 index 0000000..8b8cc8d --- /dev/null +++ b/src/structs/vec3.rs @@ -0,0 +1,11 @@ +use serde::Serialize; + +#[derive(Debug, Clone, Copy, Serialize, serde::Deserialize)] +#[repr(C)] +pub struct Vec3 { + pub x: f32, + pub y: f32, + pub z: f32 +} + +unsafe impl dataview::Pod for Vec3 {} \ No newline at end of file diff --git a/src/webserver.rs b/src/webserver.rs new file mode 100644 index 0000000..ebf134e --- /dev/null +++ b/src/webserver.rs @@ -0,0 +1,66 @@ +use std::{sync::Arc, path::PathBuf}; + +use axum::{ + extract::{ws::{WebSocketUpgrade, WebSocket, Message}, State}, + response::Response, + routing::get, + Router, +}; + +use tokio::sync::RwLock; +use tower_http::services::ServeDir; + +use crate::structs::communication::RadarData; + +#[derive(Clone)] +struct AppState { + data_lock: Arc<RwLock<RadarData>> +} + +async fn ws_handler(ws: WebSocketUpgrade, State(state): State<AppState>) -> Response { + ws.on_upgrade(|socket| handle_socket(socket, state)) +} + +async fn handle_socket(mut socket: WebSocket, state: AppState) { + while let Some(msg) = socket.recv().await { + if let Ok(msg) = msg { + if msg == Message::Text("requestInfo".to_string()) { + let data = state.data_lock.read().await; + + let str = { + match serde_json::to_string(&*data) { + Ok(json) => json, + Err(e) => { + log::error!("Could not serialize data into json: {}", e.to_string()); + log::error!("Sending \"error\" instead"); + "error".to_string() + }, + } + }; + + if socket.send(Message::Text(str)).await.is_err() { + // client disconnected + return; + } + } + } else { + // client disconnected + return; + } + } +} + +pub async fn run(path: PathBuf, port: u16, data_lock: Arc<RwLock<RadarData>>) -> anyhow::Result<()> { + let app = Router::new() + .nest_service("/", ServeDir::new(path)) + .route("/ws", get(ws_handler)) + .with_state(AppState { data_lock }); + + let address = format!("0.0.0.0:{}", port); + + axum::Server::bind(&address.parse()?) + .serve(app.into_make_service()) + .await?; + + Ok(()) +} \ No newline at end of file diff --git a/web/assets/image/cs_italy_radar_psd.png b/web/assets/image/cs_italy_radar_psd.png new file mode 100644 index 0000000..df5151a Binary files /dev/null and b/web/assets/image/cs_italy_radar_psd.png differ diff --git a/web/assets/image/cs_office_radar_psd.png b/web/assets/image/cs_office_radar_psd.png new file mode 100644 index 0000000..33214e6 Binary files /dev/null and b/web/assets/image/cs_office_radar_psd.png differ diff --git a/web/assets/image/de_ancient_radar_psd.png b/web/assets/image/de_ancient_radar_psd.png new file mode 100644 index 0000000..f50347d Binary files /dev/null and b/web/assets/image/de_ancient_radar_psd.png differ diff --git a/web/assets/image/de_anubis_radar_psd.png b/web/assets/image/de_anubis_radar_psd.png new file mode 100644 index 0000000..1528ee3 Binary files /dev/null and b/web/assets/image/de_anubis_radar_psd.png differ diff --git a/web/assets/image/de_dust2_radar_psd.png b/web/assets/image/de_dust2_radar_psd.png new file mode 100644 index 0000000..9cea0ae Binary files /dev/null and b/web/assets/image/de_dust2_radar_psd.png differ diff --git a/web/assets/image/de_inferno_radar_psd.png b/web/assets/image/de_inferno_radar_psd.png new file mode 100644 index 0000000..6696710 Binary files /dev/null and b/web/assets/image/de_inferno_radar_psd.png differ diff --git a/web/assets/image/de_mirage_radar_psd.png b/web/assets/image/de_mirage_radar_psd.png new file mode 100644 index 0000000..5964578 Binary files /dev/null and b/web/assets/image/de_mirage_radar_psd.png differ diff --git a/web/assets/image/de_nuke_radar_psd.png b/web/assets/image/de_nuke_radar_psd.png new file mode 100644 index 0000000..b6479e2 Binary files /dev/null and b/web/assets/image/de_nuke_radar_psd.png differ diff --git a/web/assets/image/de_overpass_radar_psd.png b/web/assets/image/de_overpass_radar_psd.png new file mode 100644 index 0000000..78ec8c7 Binary files /dev/null and b/web/assets/image/de_overpass_radar_psd.png differ diff --git a/web/assets/image/de_vertigo_radar_psd.png b/web/assets/image/de_vertigo_radar_psd.png new file mode 100644 index 0000000..e1559f6 Binary files /dev/null and b/web/assets/image/de_vertigo_radar_psd.png differ diff --git a/web/assets/json/cs_italy.json b/web/assets/json/cs_italy.json new file mode 100644 index 0000000..e1a2626 --- /dev/null +++ b/web/assets/json/cs_italy.json @@ -0,0 +1,7 @@ +{ + "pos_x": -2647.0, + "pos_y": 2592.0, + "scale": 4.6, + "rotate": 1, + "zoom": 1.5 +} \ No newline at end of file diff --git a/web/assets/json/cs_office.json b/web/assets/json/cs_office.json new file mode 100644 index 0000000..9813ace --- /dev/null +++ b/web/assets/json/cs_office.json @@ -0,0 +1,7 @@ +{ + "pos_x": -1838.0, + "pos_y": 1858.0, + "scale": 4.1, + "rotate": 0, + "zoom": 0.0 +} \ No newline at end of file diff --git a/web/assets/json/de_ancient.json b/web/assets/json/de_ancient.json new file mode 100644 index 0000000..ee07098 --- /dev/null +++ b/web/assets/json/de_ancient.json @@ -0,0 +1,7 @@ +{ + "pos_x": -2953.0, + "pos_y": 2164.0, + "scale": 5.0, + "rotate": 0, + "zoom": 0.0 +} \ No newline at end of file diff --git a/web/assets/json/de_anubis.json b/web/assets/json/de_anubis.json new file mode 100644 index 0000000..5ac6180 --- /dev/null +++ b/web/assets/json/de_anubis.json @@ -0,0 +1,7 @@ +{ + "pos_x": -2796.0, + "pos_y": 3328.0, + "scale": 5.22, + "rotate": 0, + "zoom": 0.0 +} \ No newline at end of file diff --git a/web/assets/json/de_dust2.json b/web/assets/json/de_dust2.json new file mode 100644 index 0000000..c1d112f --- /dev/null +++ b/web/assets/json/de_dust2.json @@ -0,0 +1,7 @@ +{ + "pos_x": -2476.0, + "pos_y": 3239.0, + "scale": 4.400000095367432, + "rotate": 1, + "zoom": 1.100000023841858 +} \ No newline at end of file diff --git a/web/assets/json/de_inferno.json b/web/assets/json/de_inferno.json new file mode 100644 index 0000000..b735f3c --- /dev/null +++ b/web/assets/json/de_inferno.json @@ -0,0 +1,7 @@ +{ + "pos_x": -2087.0, + "pos_y": 3870.0, + "scale": 4.9, + "rotate": 0, + "zoom": 0.0 +} \ No newline at end of file diff --git a/web/assets/json/de_mirage.json b/web/assets/json/de_mirage.json new file mode 100644 index 0000000..34e44da --- /dev/null +++ b/web/assets/json/de_mirage.json @@ -0,0 +1,7 @@ +{ + "pos_x": -3230.0, + "pos_y": 1713.0, + "scale": 5.0, + "rotate": 0, + "zoom": 0.0 +} \ No newline at end of file diff --git a/web/assets/json/de_nuke.json b/web/assets/json/de_nuke.json new file mode 100644 index 0000000..f432c77 --- /dev/null +++ b/web/assets/json/de_nuke.json @@ -0,0 +1,7 @@ +{ + "pos_x": -3453.0, + "pos_y": 2887.0, + "scale": 7.0, + "rotate": 0, + "zoom": 0.0 +} \ No newline at end of file diff --git a/web/assets/json/de_overpass.json b/web/assets/json/de_overpass.json new file mode 100644 index 0000000..f5a8de9 --- /dev/null +++ b/web/assets/json/de_overpass.json @@ -0,0 +1,7 @@ +{ + "pos_x": -4831.0, + "pos_y": 1781.0, + "scale": 5.2, + "rotate": 0, + "zoom": 0.0 +} \ No newline at end of file diff --git a/web/assets/json/de_vertigo.json b/web/assets/json/de_vertigo.json new file mode 100644 index 0000000..9b7c042 --- /dev/null +++ b/web/assets/json/de_vertigo.json @@ -0,0 +1,7 @@ +{ + "pos_x": -3168.0, + "pos_y": 1762.0, + "scale": 4.0, + "rotate": 0, + "zoom": 0.0 +} \ No newline at end of file diff --git a/web/cs2/map images/cs_italy_radar_psd.png b/web/cs2/map images/cs_italy_radar_psd.png new file mode 100644 index 0000000..df5151a Binary files /dev/null and b/web/cs2/map images/cs_italy_radar_psd.png differ diff --git a/web/cs2/map images/cs_office_radar_psd.png b/web/cs2/map images/cs_office_radar_psd.png new file mode 100644 index 0000000..33214e6 Binary files /dev/null and b/web/cs2/map images/cs_office_radar_psd.png differ diff --git a/web/cs2/map images/de_ancient_radar_psd.png b/web/cs2/map images/de_ancient_radar_psd.png new file mode 100644 index 0000000..f50347d Binary files /dev/null and b/web/cs2/map images/de_ancient_radar_psd.png differ diff --git a/web/cs2/map images/de_anubis_radar_psd.png b/web/cs2/map images/de_anubis_radar_psd.png new file mode 100644 index 0000000..1528ee3 Binary files /dev/null and b/web/cs2/map images/de_anubis_radar_psd.png differ diff --git a/web/cs2/map images/de_dust2_radar_psd.png b/web/cs2/map images/de_dust2_radar_psd.png new file mode 100644 index 0000000..9cea0ae Binary files /dev/null and b/web/cs2/map images/de_dust2_radar_psd.png differ diff --git a/web/cs2/map images/de_inferno_radar_psd.png b/web/cs2/map images/de_inferno_radar_psd.png new file mode 100644 index 0000000..6696710 Binary files /dev/null and b/web/cs2/map images/de_inferno_radar_psd.png differ diff --git a/web/cs2/map images/de_mirage_radar_psd.png b/web/cs2/map images/de_mirage_radar_psd.png new file mode 100644 index 0000000..5964578 Binary files /dev/null and b/web/cs2/map images/de_mirage_radar_psd.png differ diff --git a/web/cs2/map images/de_nuke_radar_psd.png b/web/cs2/map images/de_nuke_radar_psd.png new file mode 100644 index 0000000..b6479e2 Binary files /dev/null and b/web/cs2/map images/de_nuke_radar_psd.png differ diff --git a/web/cs2/map images/de_overpass_radar_psd.png b/web/cs2/map images/de_overpass_radar_psd.png new file mode 100644 index 0000000..78ec8c7 Binary files /dev/null and b/web/cs2/map images/de_overpass_radar_psd.png differ diff --git a/web/cs2/map images/de_vertigo_radar_psd.png b/web/cs2/map images/de_vertigo_radar_psd.png new file mode 100644 index 0000000..e1559f6 Binary files /dev/null and b/web/cs2/map images/de_vertigo_radar_psd.png differ diff --git a/web/cs2/map images/default_png.png b/web/cs2/map images/default_png.png new file mode 100644 index 0000000..3e99566 Binary files /dev/null and b/web/cs2/map images/default_png.png differ diff --git a/web/cs2/positions/cs_italy.txt b/web/cs2/positions/cs_italy.txt new file mode 100644 index 0000000..181c0af --- /dev/null +++ b/web/cs2/positions/cs_italy.txt @@ -0,0 +1,31 @@ +// HLTV overview description file for cs_italy.bsp + +"cs_italy" +{ + "material" "overviews/cs_italy" // texture file + "pos_x" "-2647" // upper left world coordinate + "pos_y" "2592" + "scale" "4.6" + "rotate" "1" + "zoom" "1.5" + + // loading screen icons and positions + "CTSpawn_x" "0.41" + "CTSpawn_y" "0.91" + "TSpawn_x" "0.6" + "TSpawn_y" "0.1" + + "Hostage1_x" "0.43" + "Hostage1_y" "0.29" + "Hostage2_x" "0.48" + "Hostage2_y" "0.24" + "Hostage3_x" "0.64" + "Hostage3_y" "0.03" + "Hostage4_x" "0.72" + "Hostage4_y" "0.05" +// "Hostage5_x" "0.8" +// "Hostage5_y" "0.3" +// "Hostage6_x" "0.6" +// "Hostage6_y" "0.9" +} + diff --git a/web/cs2/positions/cs_office.txt b/web/cs2/positions/cs_office.txt new file mode 100644 index 0000000..7ad08c5 --- /dev/null +++ b/web/cs2/positions/cs_office.txt @@ -0,0 +1,29 @@ +// HLTV overview description file for cs_office.bsp + +"cs_office" +{ + "material" "overviews/cs_office" // texture file + "pos_x" "-1838" // upper left world coordinate + "pos_y" "1858" + "scale" "4.1" + + // loading screen icons and positions + "CTSpawn_x" "0.16" + "CTSpawn_y" "0.89" + "TSpawn_x" "0.78" + "TSpawn_y" "0.30" + + "Hostage1_x" "0.84" + "Hostage1_y" "0.27" + "Hostage2_x" "0.84" + "Hostage2_y" "0.48" + "Hostage3_x" "0.91" + "Hostage3_y" "0.48" + "Hostage4_x" "0.77" + "Hostage4_y" "0.48" + "Hostage5_x" "0.77" + "Hostage5_y" "0.55" +// "Hostage6_x" "0.6" +// "Hostage6_y" "0.9" +} + diff --git a/web/cs2/positions/de_ancient.txt b/web/cs2/positions/de_ancient.txt new file mode 100644 index 0000000..7dd61b5 --- /dev/null +++ b/web/cs2/positions/de_ancient.txt @@ -0,0 +1,23 @@ +// HLTV overview description file for de_ancient.bsp + +"de_ancient" +{ + "material" "overviews/de_ancient" // texture file + "pos_x" "-2953" // upper left world coordinate + "pos_y" "2164" + "scale" "5" + "rotate" "0" + "zoom" "0" + + // loading screen icons and positions + "CTSpawn_x" "0.51" + "CTSpawn_y" "0.17" + "TSpawn_x" "0.485" + "TSpawn_y" "0.87" + + "bombA_x" "0.31" + "bombA_y" "0.25" + "bombB_x" "0.80" + "bombB_y" "0.40" +} + diff --git a/web/cs2/positions/de_anubis.txt b/web/cs2/positions/de_anubis.txt new file mode 100644 index 0000000..354ddcc --- /dev/null +++ b/web/cs2/positions/de_anubis.txt @@ -0,0 +1,12 @@ +// TAVR - AUTO RADAR. v 2.5.0a +"de_anubis" +{ + "CTSpawn_x" "0.610000" + "CTSpawn_y" "0.220000" + "TSpawn_x" "0.580000" + "TSpawn_y" "0.930000" + "material" "overviews/de_anubis" + "pos_x" "-2796.000000" + "pos_y" "3328.000000" + "scale" "5.220000" +} diff --git a/web/cs2/positions/de_dust2.txt b/web/cs2/positions/de_dust2.txt new file mode 100644 index 0000000..8279cb5 --- /dev/null +++ b/web/cs2/positions/de_dust2.txt @@ -0,0 +1,27 @@ +// HLTV overview description file for de_dust2_v2.bsp + +"de_dust2" +{ + "material" "overviews/de_dust2_v2" // texture file + "pos_x" "-2476" // upper left world coordinate + "pos_y" "3239" + "scale" "4.4" + "rotate" "1" + "zoom" "1.1" + + "inset_left" "0.0" + "inset_top" "0.0" + "inset_right" "0.0" + "inset_bottom" "0.0" + + // loading screen icons and positions + "CTSpawn_x" "0.62" + "CTSpawn_y" "0.21" + "TSpawn_x" "0.39" + "TSpawn_y" "0.91" + + "bombA_x" "0.80" + "bombA_y" "0.16" + "bombB_x" "0.21" + "bombB_y" "0.12" +} diff --git a/web/cs2/positions/de_inferno.txt b/web/cs2/positions/de_inferno.txt new file mode 100644 index 0000000..3edd3d6 --- /dev/null +++ b/web/cs2/positions/de_inferno.txt @@ -0,0 +1,20 @@ +// HLTV overview description file for de_inferno.bsp + +"de_inferno" +{ + "material" "overviews/de_inferno" // texture file + "pos_x" "-2087" // upper left world coordinate + "pos_y" "3870" + "scale" "4.9" + + // loading screen icons and positions + "CTSpawn_x" "0.9" + "CTSpawn_y" "0.35" + "TSpawn_x" "0.1" + "TSpawn_y" "0.67" + + "bombA_x" "0.81" + "bombA_y" "0.69" + "bombB_x" "0.49" + "bombB_y" "0.22" +} diff --git a/web/cs2/positions/de_mirage.txt b/web/cs2/positions/de_mirage.txt new file mode 100644 index 0000000..d503439 --- /dev/null +++ b/web/cs2/positions/de_mirage.txt @@ -0,0 +1,25 @@ +"de_mirage" +{ + "material" "overviews/de_mirage" // texture file + "pos_x" "-3230" // X coordinate, + "pos_y" "1713" // Y coordinate, + "scale" "5.00" // and used scale used when taking the screenshot + "rotate" "0" // map was rotated by 90 degress in image editor + "zoom" "0" // optimal zoom factor if map is shown in full size + + // loading screen icons and positions + "CTSpawn_x" "0.28" + "CTSpawn_y" "0.70" + "TSpawn_x" "0.87" + "TSpawn_y" "0.36" + + "bombA_x" "0.54" + "bombA_y" "0.76" + "bombB_x" "0.23" + "bombB_y" "0.28" + + "inset_left" "0.135" + "inset_top" "0.08" + "inset_right" "0.105" + "inset_bottom" "0.08" +} \ No newline at end of file diff --git a/web/cs2/positions/de_nuke.txt b/web/cs2/positions/de_nuke.txt new file mode 100644 index 0000000..c00ecc9 --- /dev/null +++ b/web/cs2/positions/de_nuke.txt @@ -0,0 +1,41 @@ +// HLTV overview description file for de_nuke.bsp + +"de_nuke" +{ + "material" "overviews/de_nuke" // texture file + "pos_x" "-3453" // upper left world coordinate + "pos_y" "2887" + "scale" "7" + + "verticalsections" + { + "default" // use the primary radar image + { + "AltitudeMax" "10000" + "AltitudeMin" "-495" + } + "lower" // i.e. de_nuke_lower_radar.dds + { + "AltitudeMax" "-495" + "AltitudeMin" "-10000" + } + } + + // loading screen icons and positions + "CTSpawn_x" "0.82" + "CTSpawn_y" "0.45" + "TSpawn_x" "0.19" + "TSpawn_y" "0.54" + + "bombA_x" "0.58" + "bombA_y" "0.48" + "bombB_x" "0.58" + "bombB_y" "0.58" + + "inset_left" "0.33" + "inset_top" "0.2" + "inset_right" "0.2" + "inset_bottom" "0.2" + +} + diff --git a/web/cs2/positions/de_overpass.txt b/web/cs2/positions/de_overpass.txt new file mode 100644 index 0000000..3b169b1 --- /dev/null +++ b/web/cs2/positions/de_overpass.txt @@ -0,0 +1,22 @@ +// HLTV overview description file for de_overpass.bsp + +"de_overpass" +{ + "material" "overviews/de_overpass" // texture file + "pos_x" "-4831" // upper left world coordinate + "pos_y" "1781" + "scale" "5.2" + "rotate" "0" + "zoom" "0" + + // loading screen icons and positions + "CTSpawn_x" "0.49" + "CTSpawn_y" "0.2" + "TSpawn_x" "0.66" + "TSpawn_y" "0.93" + + "bombA_x" "0.55" + "bombA_y" "0.23" + "bombB_x" "0.7" + "bombB_y" "0.31" +} \ No newline at end of file diff --git a/web/cs2/positions/de_vertigo.txt b/web/cs2/positions/de_vertigo.txt new file mode 100644 index 0000000..901d298 --- /dev/null +++ b/web/cs2/positions/de_vertigo.txt @@ -0,0 +1,40 @@ +// HLTV overview description file for de_vertigo.bsp + +"de_vertigo" +{ + "material" "overviews/de_vertigo_radar" // texture file + "pos_x" "-3168" // upper left world coordinate + "pos_y" "1762" + "scale" "4.0" + + "verticalsections" + { + "default" // use the primary radar image + { + "AltitudeMax" "20000" + "AltitudeMin" "11700" + } + "lower" // i.e. de_nuke_lower_radar.dds + { + "AltitudeMax" "11700" + "AltitudeMin" "-10000" + } + } + + // loading screen icons and positions + "CTSpawn_x" "0.54" + "CTSpawn_y" "0.25" + "TSpawn_x" "0.20" + "TSpawn_y" "0.75" + + "bombA_x" "0.705" + "bombA_y" "0.585" + "bombB_x" "0.222" + "bombB_y" "0.223" + + "inset_left" "0.1" + "inset_top" "0.1" + "inset_right" "0.2" + "inset_bottom" "0.15" + +} diff --git a/web/cs2/positions/workshop_preview.txt b/web/cs2/positions/workshop_preview.txt new file mode 100644 index 0000000..3e0cd2b --- /dev/null +++ b/web/cs2/positions/workshop_preview.txt @@ -0,0 +1,7 @@ +"workshop_preview" +{ + "autogenerated_tga" "1" + "pos_x" "-2071" + "pos_y" "711" + "scale" "1.699219" +} diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..bb82358 --- /dev/null +++ b/web/index.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>radarflow</title> + <link rel="stylesheet" href="styles.css"> +</head> +<body> + <canvas id="canvas"></canvas> + <script src="script.js"></script> +</body> +</html> \ No newline at end of file diff --git a/web/script.js b/web/script.js new file mode 100644 index 0000000..74c6078 --- /dev/null +++ b/web/script.js @@ -0,0 +1,416 @@ +// Colors +const localColor = "#109856" +const teamColor = "#68a3e5" +const enemyColor = "#ec040b" +const bombColor = "#eda338" +const textColor = "#d1d1d1" + +// Should zoom or not +shouldZoom = true + +// Common +canvas = null +ctx = null + +// radarflow specific +image = null +map = null +mapName = null +loaded = false +entityData = null +update = false + +/// Radarflow zoom in +zoomSet = false +safetyBound = 50 +boundingRect = null + +// networking +websocket = null +if (location.protocol == 'https:') { + websocketAddr = `wss://${window.location.host}/ws` +} else { + websocketAddr = `ws://${window.location.host}/ws` +} + +// Util functions +const clamp = (num, min, max) => Math.min(Math.max(num, min), max); +const degreesToRadians = (degrees) => degrees * (Math.PI/180); +function makeBoundingRect(x1, y1, x2, y2, aspectRatio) { + const topLeftX = x1; + const topLeftY = y1; + const bottomRightX = x2; + const bottomRightY = y2; + + const width = bottomRightX - topLeftX; + const height = bottomRightY - topLeftY; + + let newWidth, newHeight; + if (width / height > aspectRatio) { + // Wider rectangle + newHeight = width / aspectRatio; + newWidth = width; + } else { + // Taller rectangle + newWidth = height * aspectRatio; + newHeight = height; + } + + const centerX = (topLeftX + bottomRightX) / 2; + const centerY = (topLeftY + bottomRightY) / 2; + + const rectMinX = centerX - newWidth / 2; + const rectMaxX = centerX + newWidth / 2; + const rectMinY = centerY - newHeight / 2; + const rectMaxY = centerY + newHeight / 2; + + const boundingRectangle = { + x: rectMinX, + y: rectMinY, + width: rectMaxX - rectMinX, + height: rectMaxY - rectMinY, + } + + const boundingRectangle2 = { + x: 0, + y: 0, + width: image.width / 1.2, + height: image.width / 1.2, + } + + return boundingRectangle; +} + +function boundingCoordinates(coordinates, boundingRect) { + const xScale = boundingRect.width / image.width; + const yScale = boundingRect.height / image.height; + + const newX = (coordinates.x - boundingRect.x) / xScale; + const newY = (coordinates.y - boundingRect.y) / yScale; + + return {x: newX, y: newY}; +} + +function boundingScale(value, boundingRect) { + const scale = image.width / boundingRect.width; + return value * scale +} + +function mapCoordinates(coordinates) { + let offset_x = coordinates.x - map.pos_x; + let offset_y = coordinates.y - map.pos_y; + + offset_x /= map.scale; + offset_y /= -map.scale; + + return {x: offset_x, y: offset_y} +} + +function render() { + if (update) { + fillCanvas() + if (loaded) { + update = false + + // Iterate through the array and update the min/max values + if (entityData != null && map != null && image != null && shouldZoom) { + + let minX = Infinity + let minY = Infinity + let maxX = -Infinity + let maxY = -Infinity + + entityData.forEach((data) => { + let mapCords = null + + if (data.Bomb !== undefined) { + mapCords = mapCoordinates(data.Bomb.pos) + } else { + mapCords = mapCoordinates(data.Player.pos) + } + + minX = Math.min(minX, mapCords.x); + minY = Math.min(minY, mapCords.y); + maxX = Math.max(maxX, mapCords.x); + maxY = Math.max(maxY, mapCords.y); + }); + + + boundingRect = makeBoundingRect(minX-safetyBound, minY-safetyBound, maxX+safetyBound, maxY+safetyBound, image.width/image.height) + + zoomSet = true + } else if (zoomSet) { + zoomSet = false + } + + drawImage() + + if (entityData != null) { + entityData.forEach((data) => { + if (data.Bomb !== undefined) { + drawBomb(data.Bomb.pos, data.Bomb.isPlanted) + } else { + let fillStyle = localColor + + switch (data.Player.playerType) { + case "Team": + fillStyle = teamColor + break; + + case "Enemy": + fillStyle = enemyColor + break; + } + + drawEntity( + data.Player.pos, + fillStyle, + data.Player.isDormant, + data.Player.hasBomb, + data.Player.yaw + ) + } + }); + } + } else { + if (websocket != null) { + ctx.font = "100px Arial"; + ctx.textAlign = "center" + ctx.textBaseline = "middle" + ctx.fillStyle = textColor + ctx.fillText("Not on a server", 1024/2, 1024/2); + } else { + ctx.font = "100px Arial"; + ctx.textAlign = "center" + ctx.fillStyle = textColor + ctx.fillText("Disconnected", 1024/2, 1024/2); + } + } + } + + if (websocket != null) { + websocket.send("requestInfo"); + } +} + +function fillCanvas() { + ctx.fillStyle = "#0f0f0f"; + ctx.fillRect(0, 0, canvas.width, canvas.height); +} + +function drawImage() { + if (image == null || canvas == null) + return + + if (zoomSet != false && boundingRect.x != null) { + ctx.drawImage(image, boundingRect.x, boundingRect.y, boundingRect.width, boundingRect.height, 0, 0, canvas.width, canvas.height) + } else { + ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height) + } +} + +function drawBomb(pos, planted) { + if (map == null) + return + + if (zoomSet) { + pos = boundingCoordinates(mapCoordinates(pos), boundingRect) + size = boundingScale(5, boundingRect); + } else { + pos = mapCoordinates(pos) + size = 5 + } + + ctx.beginPath(); + ctx.arc(pos.x, pos.y, size, 0, 2 * Math.PI); + ctx.fillStyle = bombColor; + ctx.fill(); + ctx.closePath(); + + if (planted && ((new Date().getTime() / 1000) % 1) > 0.5) { + ctx.strokeStyle = enemyColor + ctx.lineWidth = 1; + ctx.stroke() + } +} + +function drawEntity(pos, fillStyle, dormant, hasBomb, yaw) { + if (map == null) + return + + if (zoomSet) { + pos = boundingCoordinates(mapCoordinates(pos), boundingRect) + circleRadius = boundingScale(7, boundingRect); + distance = circleRadius + boundingScale(2, boundingRect); + radius = distance + boundingScale(2, boundingRect) + arrowWidth = 35 + } else { + pos = mapCoordinates(pos) + circleRadius = 7 + distance = circleRadius + 2 + radius = distance + 5; + arrowWidth = 35; + } + + if (dormant) { + ctx.font = "20px Arial"; + ctx.textAlign = "center" + ctx.fillStyle = fillStyle + ctx.fillText("?", pos.x, pos.y); + } else { + + // Draw circle + ctx.beginPath(); + ctx.arc(pos.x, pos.y, circleRadius, 0, 2 * Math.PI); + ctx.fillStyle = fillStyle; + ctx.fill(); + + if (hasBomb) { + ctx.beginPath(); + ctx.arc(pos.x, pos.y, circleRadius / 2, 0, 2 * Math.PI); + ctx.fillStyle = "#dbb81d"; + ctx.fill(); + } + + + ctx.closePath(); + + // Calculate arrowhead points + + + const arrowHeadX = pos.x + radius * Math.cos(yaw * (Math.PI / 180)) + const arrowHeadY = pos.y - radius * Math.sin(yaw * (Math.PI / 180)) + + const arrowCornerX1 = pos.x + distance * Math.cos((yaw - arrowWidth) * (Math.PI / 180)) + const arrowCornerY1 = pos.y - distance * Math.sin((yaw - arrowWidth) * (Math.PI / 180)) + + const arrowCornerX2 = pos.x + distance * Math.cos((yaw + arrowWidth) * (Math.PI / 180)) + const arrowCornerY2 = pos.y - distance * Math.sin((yaw + arrowWidth) * (Math.PI / 180)) + + + const cicleYaw = 90-yaw + const startAngle = degreesToRadians(cicleYaw-arrowWidth)-Math.PI/2 + const endAngle = degreesToRadians(cicleYaw+arrowWidth)-Math.PI/2 + + // Draw arrow + + /// Backside of the arrow + ctx.beginPath(); + ctx.arc(pos.x, pos.y, distance, startAngle, endAngle) + + /// Draw from corners to arrowhead + ctx.lineTo(arrowCornerX1, arrowCornerY1); + ctx.lineTo(arrowHeadX, arrowHeadY); + ctx.lineTo(arrowCornerX2, arrowCornerY2); + ctx.closePath() + + ctx.fillStyle = 'white' + ctx.fill(); + } +} + +function loadMap(mapName) { + console.log(`[radarflow] loading map ${mapName}`) + loaded = true; + const map_img = new Image(); + map_img.src = `assets/image/${mapName}_radar_psd.png`; + + fetch(`assets/json/${mapName}.json`) + .then(response => response.json()) + .then(data => { + map = data; + }) + .catch(error => { + console.error('Error loading JSON file:', error); + }); + + map_img.onload = () => { + image = map_img; + update = true; + }; +} + +function unloadMap() { + console.log("[radarflow] unloading map") + ctx.clearRect(0, 0, canvas.width, canvas.height) + map = null + mapName = null + loaded = false, + update = true + requestAnimationFrame(render); +} + +function connect() { + if (websocket == null) { + let socket = new WebSocket(websocketAddr) + + socket.onopen = () => { + console.log("[radarflow] Connection established") + websocket.send("requestInfo"); + }; + + socket.onmessage = (event) => { + if (event.data == "error") { + console.log("[radarflow] Server had an unknown error") + } else { + let data = JSON.parse(event.data); + + if (data.ingame == false) { + mapName = null + entityData = null + + if (loaded) + unloadMap() + } else { + if (!loaded) { + mapName = data.mapName + entityData = data.entityData + loadMap(mapName) + } else { + entityData = data.entityData + } + } + + update = true + requestAnimationFrame(render); + } + }; + + socket.onclose = (event) => { + if (event.wasClean) { + console.log("[radarflow] connection closed"); + } else { + console.log("[radarflow] connection died"); + } + + playerData = null + websocket = null + unloadMap() + + setTimeout(function() { + connect(); + }, 1000); + }; + + socket.onerror = (error) => { + console.log(`[radarflow] websocket error: ${error}`); + }; + + websocket = socket; + } else { + setTimeout(() => { + connect(); + }, 1000); + } +} + +addEventListener("DOMContentLoaded", (e) => { + canvas = document.getElementById('canvas'); + canvas.width = 1024; + canvas.height = 1024; + canvasAspectRatio = canvas.width / canvas.height + ctx = canvas.getContext('2d'); + + console.log(`[radarflow] connecting to ${websocketAddr}`) + connect() +}); diff --git a/web/styles.css b/web/styles.css new file mode 100644 index 0000000..8695ad3 --- /dev/null +++ b/web/styles.css @@ -0,0 +1,17 @@ +body { + margin: 0; + overflow: hidden; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + background-color: #000000; /* Change the background color as needed */ +} + +canvas { + width: 100%; + height: 100%; + overflow: hidden; + display: block; + object-fit: contain; +} \ No newline at end of file