Merge pull request #25 from superyu1337/faster-bombholder-search
Faster bombholder search
This commit is contained in:
		
							
								
								
									
										470
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										470
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| @@ -91,6 +91,21 @@ version = "0.2.16" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" | ||||
|  | ||||
| [[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.13" | ||||
| @@ -168,6 +183,17 @@ dependencies = [ | ||||
|  "syn 2.0.58", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "atty" | ||||
| version = "0.2.14" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" | ||||
| dependencies = [ | ||||
|  "hermit-abi 0.1.19", | ||||
|  "libc", | ||||
|  "winapi", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "autocfg" | ||||
| version = "1.2.0" | ||||
| @@ -253,6 +279,26 @@ version = "0.21.7" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" | ||||
|  | ||||
| [[package]] | ||||
| name = "bindgen" | ||||
| version = "0.69.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" | ||||
| dependencies = [ | ||||
|  "bitflags 2.5.0", | ||||
|  "cexpr", | ||||
|  "clang-sys", | ||||
|  "itertools 0.10.5", | ||||
|  "lazy_static", | ||||
|  "lazycell", | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "regex", | ||||
|  "rustc-hash", | ||||
|  "shlex", | ||||
|  "syn 2.0.58", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "bit_field" | ||||
| version = "0.10.2" | ||||
| @@ -336,6 +382,15 @@ version = "1.0.90" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" | ||||
|  | ||||
| [[package]] | ||||
| name = "cexpr" | ||||
| version = "0.6.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" | ||||
| dependencies = [ | ||||
|  "nom", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "cfg-if" | ||||
| version = "1.0.0" | ||||
| @@ -382,6 +437,29 @@ dependencies = [ | ||||
|  "syn 1.0.109", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "chrono" | ||||
| version = "0.4.38" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" | ||||
| dependencies = [ | ||||
|  "android-tzdata", | ||||
|  "iana-time-zone", | ||||
|  "num-traits", | ||||
|  "windows-targets 0.52.4", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "clang-sys" | ||||
| version = "1.7.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" | ||||
| dependencies = [ | ||||
|  "glob", | ||||
|  "libc", | ||||
|  "libloading 0.8.3", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "clap" | ||||
| version = "4.5.4" | ||||
| @@ -449,6 +527,12 @@ dependencies = [ | ||||
|  "windows-sys 0.48.0", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "convert_case" | ||||
| version = "0.4.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" | ||||
|  | ||||
| [[package]] | ||||
| name = "core-foundation" | ||||
| version = "0.9.4" | ||||
| @@ -489,6 +573,15 @@ dependencies = [ | ||||
|  "libc", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "crc32fast" | ||||
| version = "1.4.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" | ||||
| dependencies = [ | ||||
|  "cfg-if", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "crossbeam-channel" | ||||
| version = "0.5.12" | ||||
| @@ -579,6 +672,19 @@ dependencies = [ | ||||
|  "powerfmt", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "derive_more" | ||||
| version = "0.99.17" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" | ||||
| dependencies = [ | ||||
|  "convert_case", | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "rustc_version 0.4.0", | ||||
|  "syn 1.0.109", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "derive_pod" | ||||
| version = "0.1.2" | ||||
| @@ -642,12 +748,36 @@ dependencies = [ | ||||
|  "syn 2.0.58", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "env_logger" | ||||
| version = "0.8.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3" | ||||
| dependencies = [ | ||||
|  "atty", | ||||
|  "humantime", | ||||
|  "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.2.8" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" | ||||
| dependencies = [ | ||||
|  "errno-dragonfly", | ||||
|  "libc", | ||||
|  "winapi", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "errno" | ||||
| version = "0.3.8" | ||||
| @@ -658,6 +788,16 @@ dependencies = [ | ||||
|  "windows-sys 0.52.0", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "errno-dragonfly" | ||||
| version = "0.1.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" | ||||
| dependencies = [ | ||||
|  "cc", | ||||
|  "libc", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "fastrand" | ||||
| version = "2.0.2" | ||||
| @@ -670,6 +810,16 @@ version = "0.10.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "1bb23c599a9ff5b981529099902fe5de8d55ecc8c1f451542da17b8d2d65326e" | ||||
|  | ||||
| [[package]] | ||||
| name = "flate2" | ||||
| version = "1.0.28" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" | ||||
| dependencies = [ | ||||
|  "crc32fast", | ||||
|  "miniz_oxide", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "fnv" | ||||
| version = "1.0.7" | ||||
| @@ -786,6 +936,12 @@ version = "0.28.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" | ||||
|  | ||||
| [[package]] | ||||
| name = "glob" | ||||
| version = "0.3.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" | ||||
|  | ||||
| [[package]] | ||||
| name = "goblin" | ||||
| version = "0.8.0" | ||||
| @@ -832,12 +988,27 @@ version = "0.5.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" | ||||
|  | ||||
| [[package]] | ||||
| name = "hermit-abi" | ||||
| version = "0.1.19" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" | ||||
| dependencies = [ | ||||
|  "libc", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "hermit-abi" | ||||
| version = "0.3.9" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" | ||||
|  | ||||
| [[package]] | ||||
| name = "hex" | ||||
| version = "0.4.3" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" | ||||
|  | ||||
| [[package]] | ||||
| name = "http" | ||||
| version = "1.1.0" | ||||
| @@ -890,6 +1061,12 @@ 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 = "1.2.0" | ||||
| @@ -947,6 +1124,29 @@ dependencies = [ | ||||
|  "tracing", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "iana-time-zone" | ||||
| version = "0.1.60" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" | ||||
| dependencies = [ | ||||
|  "android_system_properties", | ||||
|  "core-foundation-sys", | ||||
|  "iana-time-zone-haiku", | ||||
|  "js-sys", | ||||
|  "wasm-bindgen", | ||||
|  "windows-core 0.52.0", | ||||
| ] | ||||
|  | ||||
| [[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" | ||||
| @@ -982,6 +1182,17 @@ 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 0.3.9", | ||||
|  "libc", | ||||
|  "windows-sys 0.48.0", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "ipnet" | ||||
| version = "2.9.0" | ||||
| @@ -1027,6 +1238,12 @@ version = "1.4.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" | ||||
|  | ||||
| [[package]] | ||||
| name = "lazycell" | ||||
| version = "1.3.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" | ||||
|  | ||||
| [[package]] | ||||
| name = "libc" | ||||
| version = "0.2.153" | ||||
| @@ -1053,6 +1270,17 @@ dependencies = [ | ||||
|  "windows-targets 0.52.4", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "libproc" | ||||
| version = "0.14.6" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "8eb6497078a4c9c2aca63df56d8dce6eb4381d53a960f781a3a748f7ea97436d" | ||||
| dependencies = [ | ||||
|  "bindgen", | ||||
|  "errno 0.3.8", | ||||
|  "libc", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "libredox" | ||||
| version = "0.1.3" | ||||
| @@ -1063,6 +1291,12 @@ dependencies = [ | ||||
|  "libc", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "linux-raw-sys" | ||||
| version = "0.1.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" | ||||
|  | ||||
| [[package]] | ||||
| name = "linux-raw-sys" | ||||
| version = "0.4.13" | ||||
| @@ -1097,6 +1331,29 @@ version = "0.4.21" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" | ||||
|  | ||||
| [[package]] | ||||
| name = "mac-sys-info" | ||||
| version = "0.1.13" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "5459fd50cfe85d72b92af2cd5105876aba1d533c14bfbb7383f86e4efa5325af" | ||||
| dependencies = [ | ||||
|  "derive_more", | ||||
|  "env_logger", | ||||
|  "libc", | ||||
|  "log", | ||||
|  "serde", | ||||
|  "unix-exec-output-catcher", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "mach2" | ||||
| version = "0.4.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" | ||||
| dependencies = [ | ||||
|  "libc", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "matchit" | ||||
| version = "0.7.3" | ||||
| @@ -1153,6 +1410,23 @@ dependencies = [ | ||||
|  "syn 2.0.58", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "memflow-native" | ||||
| version = "0.2.4" | ||||
| source = "git+https://github.com/memflow/memflow-native#ebc9a25335885adf057d77bc7a2882211609a8f8" | ||||
| dependencies = [ | ||||
|  "goblin", | ||||
|  "itertools 0.12.1", | ||||
|  "libc", | ||||
|  "libproc", | ||||
|  "log", | ||||
|  "mac-sys-info", | ||||
|  "mach2", | ||||
|  "memflow", | ||||
|  "procfs", | ||||
|  "windows 0.54.0", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "memmap" | ||||
| version = "0.7.0" | ||||
| @@ -1179,6 +1453,12 @@ dependencies = [ | ||||
|  "unicase", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "minimal-lexical" | ||||
| version = "0.2.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" | ||||
|  | ||||
| [[package]] | ||||
| name = "miniz_oxide" | ||||
| version = "0.7.2" | ||||
| @@ -1248,6 +1528,16 @@ version = "0.4.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" | ||||
|  | ||||
| [[package]] | ||||
| name = "nom" | ||||
| version = "7.1.3" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" | ||||
| dependencies = [ | ||||
|  "memchr", | ||||
|  "minimal-lexical", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "ntapi" | ||||
| version = "0.4.1" | ||||
| @@ -1278,7 +1568,7 @@ version = "1.16.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" | ||||
| dependencies = [ | ||||
|  "hermit-abi", | ||||
|  "hermit-abi 0.3.9", | ||||
|  "libc", | ||||
| ] | ||||
|  | ||||
| @@ -1508,6 +1798,22 @@ dependencies = [ | ||||
|  "unicode-ident", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "procfs" | ||||
| version = "0.15.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "943ca7f9f29bab5844ecd8fdb3992c5969b6622bb9609b9502fef9b4310e3f1f" | ||||
| dependencies = [ | ||||
|  "backtrace", | ||||
|  "bitflags 1.3.2", | ||||
|  "byteorder", | ||||
|  "chrono", | ||||
|  "flate2", | ||||
|  "hex", | ||||
|  "lazy_static", | ||||
|  "rustix 0.36.17", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "quote" | ||||
| version = "1.0.35" | ||||
| @@ -1530,6 +1836,7 @@ dependencies = [ | ||||
|  "local-ip-address", | ||||
|  "log", | ||||
|  "memflow", | ||||
|  "memflow-native", | ||||
|  "num-traits", | ||||
|  "reqwest", | ||||
|  "serde", | ||||
| @@ -1693,6 +2000,12 @@ version = "0.1.23" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" | ||||
|  | ||||
| [[package]] | ||||
| name = "rustc-hash" | ||||
| version = "1.1.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" | ||||
|  | ||||
| [[package]] | ||||
| name = "rustc_version" | ||||
| version = "0.2.3" | ||||
| @@ -1711,6 +2024,20 @@ dependencies = [ | ||||
|  "semver 1.0.22", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "rustix" | ||||
| version = "0.36.17" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "305efbd14fde4139eb501df5f136994bb520b033fa9fbdce287507dc23b8c7ed" | ||||
| dependencies = [ | ||||
|  "bitflags 1.3.2", | ||||
|  "errno 0.3.8", | ||||
|  "io-lifetimes", | ||||
|  "libc", | ||||
|  "linux-raw-sys 0.1.4", | ||||
|  "windows-sys 0.45.0", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "rustix" | ||||
| version = "0.38.32" | ||||
| @@ -1718,9 +2045,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" | ||||
| dependencies = [ | ||||
|  "bitflags 2.5.0", | ||||
|  "errno", | ||||
|  "errno 0.3.8", | ||||
|  "libc", | ||||
|  "linux-raw-sys", | ||||
|  "linux-raw-sys 0.4.13", | ||||
|  "windows-sys 0.52.0", | ||||
| ] | ||||
|  | ||||
| @@ -1900,6 +2227,12 @@ dependencies = [ | ||||
|  "digest", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "shlex" | ||||
| version = "1.3.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" | ||||
|  | ||||
| [[package]] | ||||
| name = "signal-hook-registry" | ||||
| version = "1.4.1" | ||||
| @@ -2003,7 +2336,7 @@ dependencies = [ | ||||
|  "libc", | ||||
|  "ntapi", | ||||
|  "once_cell", | ||||
|  "windows", | ||||
|  "windows 0.52.0", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @@ -2041,10 +2374,19 @@ checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" | ||||
| dependencies = [ | ||||
|  "cfg-if", | ||||
|  "fastrand", | ||||
|  "rustix", | ||||
|  "rustix 0.38.32", | ||||
|  "windows-sys 0.52.0", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "termcolor" | ||||
| version = "1.4.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" | ||||
| dependencies = [ | ||||
|  "winapi-util", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "thiserror" | ||||
| version = "1.0.58" | ||||
| @@ -2368,6 +2710,18 @@ dependencies = [ | ||||
|  "tinyvec", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "unix-exec-output-catcher" | ||||
| version = "0.2.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "b3c26d0ac22fbe8f782d88c493c74a35b1f062c65b03df15ccd4fc6c293c5198" | ||||
| dependencies = [ | ||||
|  "derive_more", | ||||
|  "errno 0.2.8", | ||||
|  "libc", | ||||
|  "log", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "url" | ||||
| version = "2.5.0" | ||||
| @@ -2541,6 +2895,15 @@ 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" | ||||
| @@ -2553,7 +2916,17 @@ version = "0.52.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" | ||||
| dependencies = [ | ||||
|  "windows-core", | ||||
|  "windows-core 0.52.0", | ||||
|  "windows-targets 0.52.4", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "windows" | ||||
| version = "0.54.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" | ||||
| dependencies = [ | ||||
|  "windows-core 0.54.0", | ||||
|  "windows-targets 0.52.4", | ||||
| ] | ||||
|  | ||||
| @@ -2566,6 +2939,34 @@ dependencies = [ | ||||
|  "windows-targets 0.52.4", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "windows-core" | ||||
| version = "0.54.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" | ||||
| dependencies = [ | ||||
|  "windows-result", | ||||
|  "windows-targets 0.52.4", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "windows-result" | ||||
| version = "0.1.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "cd19df78e5168dfb0aedc343d1d1b8d422ab2db6756d2dc3fef75035402a3f64" | ||||
| dependencies = [ | ||||
|  "windows-targets 0.52.4", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "windows-sys" | ||||
| version = "0.45.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" | ||||
| dependencies = [ | ||||
|  "windows-targets 0.42.2", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "windows-sys" | ||||
| version = "0.48.0" | ||||
| @@ -2584,6 +2985,21 @@ dependencies = [ | ||||
|  "windows-targets 0.52.4", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "windows-targets" | ||||
| version = "0.42.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" | ||||
| 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-targets" | ||||
| version = "0.48.5" | ||||
| @@ -2614,6 +3030,12 @@ dependencies = [ | ||||
|  "windows_x86_64_msvc 0.52.4", | ||||
| ] | ||||
|  | ||||
| [[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" | ||||
| @@ -2626,6 +3048,12 @@ version = "0.52.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" | ||||
|  | ||||
| [[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" | ||||
| @@ -2638,6 +3066,12 @@ version = "0.52.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" | ||||
|  | ||||
| [[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" | ||||
| @@ -2650,6 +3084,12 @@ version = "0.52.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" | ||||
|  | ||||
| [[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" | ||||
| @@ -2662,6 +3102,12 @@ version = "0.52.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" | ||||
|  | ||||
| [[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" | ||||
| @@ -2674,6 +3120,12 @@ version = "0.52.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" | ||||
|  | ||||
| [[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" | ||||
| @@ -2686,6 +3138,12 @@ version = "0.52.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" | ||||
|  | ||||
| [[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" | ||||
|   | ||||
| @@ -9,6 +9,7 @@ edition = "2021" | ||||
| [dependencies] | ||||
| # memory | ||||
| memflow = "0.2.1" | ||||
| memflow-native = { git = "https://github.com/memflow/memflow-native" } | ||||
| dataview = "1.0.1" | ||||
|  | ||||
| # logging | ||||
|   | ||||
| @@ -40,7 +40,9 @@ fn version() -> String { | ||||
|     let commit_date = option_env!("VERGEN_GIT_COMMIT_DATE").unwrap_or("unknown"); | ||||
|     let avail_cons = { | ||||
|         let inventory = Inventory::scan(); | ||||
|         inventory.available_connectors().join(", ") | ||||
|         let mut avail = inventory.available_connectors(); | ||||
|         avail.push("native".into()); | ||||
|         avail.join(", ") | ||||
|     }; | ||||
|  | ||||
|     format!(" {pkg_ver} (rev {git_hash})\nCommit Date: {commit_date}\nAvailable Connectors: {avail_cons}") | ||||
|   | ||||
| @@ -3,7 +3,8 @@ pub enum Connector { | ||||
|     #[default] | ||||
|     Qemu, | ||||
|     Kvm, | ||||
|     Pcileech | ||||
|     Pcileech, | ||||
|     Native | ||||
| } | ||||
|  | ||||
| impl ToString for Connector { | ||||
| @@ -12,6 +13,7 @@ impl ToString for Connector { | ||||
|             Connector::Qemu => String::from("qemu"), | ||||
|             Connector::Kvm => String::from("kvm"), | ||||
|             Connector::Pcileech => String::from("pcileech"), | ||||
|             Connector::Native => String::from("native"), | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -7,7 +7,7 @@ use num_traits::FromPrimitive; | ||||
|  | ||||
| use crate::{structs::Vec3, enums::TeamID}; | ||||
|  | ||||
| use super::cs2dumper; | ||||
| use super::{cs2dumper, threaddata::CsData}; | ||||
|  | ||||
| pub struct DmaCtx { | ||||
|     pub process: IntoProcessInstanceArcBox<'static>, | ||||
| @@ -46,11 +46,13 @@ impl DmaCtx { | ||||
|                     .args(connector_args) | ||||
|                     .os("win32") | ||||
|                     .build()? | ||||
|             } else { | ||||
|             } else if connector != Connector::Native { | ||||
|                 inventory.builder() | ||||
|                 .connector(&connector.to_string()) | ||||
|                 .os("win32") | ||||
|                 .build()? | ||||
|                     .connector(&connector.to_string()) | ||||
|                     .os("win32") | ||||
|                     .build()? | ||||
|             } else { | ||||
|                 memflow_native::create_os(&Default::default(), Default::default())? | ||||
|             } | ||||
|         }; | ||||
|  | ||||
| @@ -144,41 +146,101 @@ impl DmaCtx { | ||||
|         Ok(is_controller) | ||||
|     } | ||||
|  | ||||
|     // Todo: Optimize this function: find another way to do this | ||||
|     pub fn has_c4(&mut self, pawn: Address, entity_list: Address) -> anyhow::Result<bool> { | ||||
|         let mut has_c4 = false; | ||||
|         let wep_services = self.process.read_addr64(pawn + cs2dumper::client::C_BasePlayerPawn::m_pWeaponServices)?; | ||||
|         let wep_count: i32  = self.process.read(wep_services + cs2dumper::client::CPlayer_WeaponServices::m_hMyWeapons)?; | ||||
|         let wep_base = self.process.read_addr64(wep_services + cs2dumper::client::CPlayer_WeaponServices::m_hMyWeapons + 0x8)?; | ||||
|     pub fn get_c4_holder(&mut self, pawns: Vec<Address>, entity_list: Address, csdata: &CsData) -> Option<Address> { | ||||
|  | ||||
|         for wep_idx in 0..wep_count { | ||||
|             let handle: i32 = self.process.read(wep_base + wep_idx * 0x4)?; | ||||
|             if handle == -1 { | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             let list_entry = self.process.read_addr64(entity_list + 0x8 * ((handle & 0x7FFF) >> 9) + 16)?; | ||||
|             if let Some(wep_ptr) = { | ||||
|                 if list_entry.is_null() || !list_entry.is_valid() { | ||||
|                     None | ||||
|                 } else { | ||||
|                     let ptr = self.process.read_addr64(list_entry + 120 * (handle & 0x1FF))?; | ||||
|                     Some(ptr) | ||||
|                 } | ||||
|             } { | ||||
|                 let wep_data = self.process.read_addr64(wep_ptr + cs2dumper::client::C_BaseEntity::m_nSubclassID + 0x8)?; | ||||
|                 let id: i32 = self.process.read(wep_data + cs2dumper::client::CCSWeaponBaseVData::m_WeaponType)?; | ||||
|  | ||||
|                 if id == 7 { | ||||
|                     has_c4 = true; | ||||
|                     break; | ||||
|                 } | ||||
|             } | ||||
|         if csdata.bomb_dropped || csdata.bomb_planted { | ||||
|             return None; | ||||
|         } | ||||
|  | ||||
|         Ok(has_c4) | ||||
|     } | ||||
|         // (pawn, wep_services, wep_count, wep_base) | ||||
|         let mut data_vec: Vec<(Address, u64, i32, u64)> = pawns | ||||
|             .into_iter() | ||||
|             .map(|pawn| (pawn, 0u64, 0i32, 0u64)) | ||||
|             .collect(); | ||||
|  | ||||
|         // Get wep_services | ||||
|         let mut batcher = self.process.batcher(); | ||||
|         data_vec.iter_mut().for_each(|(pawn, wep_services, _, _)| { | ||||
|             batcher.read_into(*pawn + cs2dumper::client::C_BasePlayerPawn::m_pWeaponServices, wep_services); | ||||
|         }); | ||||
|         drop(batcher); | ||||
|  | ||||
|         // Get wep_count and wep_base | ||||
|         let mut batcher = self.process.batcher(); | ||||
|         data_vec.iter_mut().for_each(|(_, wep_services, wep_count, wep_base)| { | ||||
|             batcher.read_into((*wep_services + cs2dumper::client::CPlayer_WeaponServices::m_hMyWeapons as u64).into(), wep_count); | ||||
|             batcher.read_into((*wep_services + cs2dumper::client::CPlayer_WeaponServices::m_hMyWeapons as u64 + 0x8).into() , wep_base); | ||||
|         }); | ||||
|         drop(batcher); | ||||
|  | ||||
|         // Rebuild data vec | ||||
|         // Vec<(pawn, wep_base, Vec<(buff, buff2)>)> | ||||
|         let mut data_vec: Vec<(Address, u64, Vec<(u64, i32)>)> = data_vec | ||||
|             .into_iter() | ||||
|             .map(|(pawn, _, wep_count, wep_base)| { | ||||
|                 let weps = (0..wep_count).into_iter().map(|idx| (0u64, idx)).collect(); | ||||
|                 (pawn, wep_base, weps) | ||||
|             }) | ||||
|             .collect(); | ||||
|  | ||||
|         // Get handle | ||||
|         let mut batcher = self.process.batcher(); | ||||
|         data_vec.iter_mut().for_each(|(_, wep_base, wep_data_vec)| { | ||||
|             wep_data_vec.iter_mut().for_each(|(_, idx)| { | ||||
|                 let b: Address = (*wep_base).into(); | ||||
|                 batcher.read_into(b + * idx * 0x4, idx); | ||||
|             }); | ||||
|         }); | ||||
|         drop(batcher); | ||||
|  | ||||
|         // Get list entry | ||||
|         let mut batcher = self.process.batcher(); | ||||
|         data_vec.iter_mut().for_each(|(_, _, wep_data_vec)| { | ||||
|             wep_data_vec.iter_mut().for_each(|(list_entry, handle)| { | ||||
|                 batcher.read_into(entity_list + 0x8 * ((*handle & 0x7FFF) >> 9) + 16, list_entry); | ||||
|             }); | ||||
|         }); | ||||
|         drop(batcher); | ||||
|  | ||||
|         // Get wep ptr | ||||
|         let mut batcher = self.process.batcher(); | ||||
|         data_vec.iter_mut().for_each(|(_, _, wep_data_vec)| { | ||||
|             wep_data_vec.iter_mut().for_each(|(list_entry, handle)| { | ||||
|                 let le: Address = (*list_entry).into(); | ||||
|                 batcher.read_into(le + 120 * (*handle & 0x1FF), list_entry); | ||||
|             }); | ||||
|         }); | ||||
|         drop(batcher); | ||||
|  | ||||
|         // Get wep data | ||||
|         let mut batcher = self.process.batcher(); | ||||
|         data_vec.iter_mut().for_each(|(_, _, wep_data_vec)| { | ||||
|             wep_data_vec.iter_mut().for_each(|(wep_ptr, _)| { | ||||
|                 let b: Address = (*wep_ptr).into(); | ||||
|                 batcher.read_into(b + cs2dumper::client::C_BaseEntity::m_nSubclassID + 0x8, wep_ptr); | ||||
|             }); | ||||
|         }); | ||||
|         drop(batcher); | ||||
|  | ||||
|         // Get wep id | ||||
|         let mut batcher = self.process.batcher(); | ||||
|         data_vec.iter_mut().for_each(|(_, _, wep_data_vec)| { | ||||
|             wep_data_vec.iter_mut().for_each(|(wep_data, id)| { | ||||
|                 let b: Address = (*wep_data).into(); | ||||
|                 batcher.read_into(b + cs2dumper::client::CCSWeaponBaseVData::m_WeaponType, id); | ||||
|             }); | ||||
|         }); | ||||
|         drop(batcher); | ||||
|  | ||||
|         let holder = data_vec.into_iter().find(|(_, _, wep_data_vec)| { | ||||
|             wep_data_vec.iter().find(|(_, id)| { *id == 7 }).is_some() | ||||
|         }); | ||||
|  | ||||
|         match holder { | ||||
|             Some((addr, _, _)) => Some(addr), | ||||
|             None => None, | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| use std::{thread, time::{Duration, Instant}}; | ||||
|  | ||||
| use memflow::{os::Process, types::Address, mem::MemoryView}; | ||||
| use memflow::{mem::MemoryView, os::Process, types::Address}; | ||||
|  | ||||
| use crate::{enums::{TeamID, PlayerType}, comms::{EntityData, PlayerData, RadarData, ArcRwlockRadarData, BombData}}; | ||||
| use crate::{enums::PlayerType, comms::{EntityData, PlayerData, RadarData, ArcRwlockRadarData, BombData}}; | ||||
|  | ||||
| use self::{context::DmaCtx, threaddata::CsData}; | ||||
|  | ||||
| @@ -19,6 +19,8 @@ pub async fn run(radar_data: ArcRwlockRadarData, connector: Connector, pcileech_ | ||||
|     // For read timing | ||||
|     let mut last_bomb_dropped = false; | ||||
|     let mut last_bomb_planted = false; | ||||
|     let mut last_freeze_period = false; | ||||
|     let mut last_round_start_count = 0u8; | ||||
|     let mut last_tick_count = 0; | ||||
|     let mut last_big_read = Instant::now(); | ||||
|  | ||||
| @@ -50,10 +52,37 @@ pub async fn run(radar_data: ArcRwlockRadarData, connector: Connector, pcileech_ | ||||
|             data.update_bomb(&mut ctx); | ||||
|         } | ||||
|  | ||||
|         if !data.bomb_dropped && last_bomb_dropped && !data.bomb_planted { | ||||
|         if data.bomb_dropped != last_bomb_dropped || data.bomb_planted != last_bomb_planted { | ||||
|             log::debug!("Bomb holder recheck due to bomb status"); | ||||
|             data.recheck_bomb_holder = true; | ||||
|         } | ||||
|  | ||||
|         if last_freeze_period != data.freeze_period { | ||||
|             log::debug!("Bomb holder recheck due to freeze time"); | ||||
|             data.recheck_bomb_holder = true; | ||||
|         } | ||||
|  | ||||
|         if last_round_start_count != data.round_start_count { | ||||
|             log::debug!("Bomb holder recheck due to round start"); | ||||
|             data.recheck_bomb_holder = true; | ||||
|         } | ||||
|  | ||||
|         last_freeze_period = data.freeze_period; | ||||
|         last_round_start_count = data.round_start_count; | ||||
|  | ||||
|         if data.recheck_bomb_holder { | ||||
|             let mut pawns: Vec<Address> = data.players | ||||
|                 .clone() | ||||
|                 .into_iter() | ||||
|                 .map(|(_, pawn)| pawn) | ||||
|                 .collect(); | ||||
|  | ||||
|             pawns.push(data.local_pawn.into()); | ||||
|          | ||||
|             data.bomb_holder = ctx.get_c4_holder(pawns, data.entity_list.into(), &data); | ||||
|             data.recheck_bomb_holder = false; | ||||
|         } | ||||
|  | ||||
|         let bomb_defuse_timeleft: f32 = { | ||||
|             if data.bomb_planted && !data.bomb_exploded && !data.bomb_defused { | ||||
|                 if let Some(bomb_stamp) = data.bomb_planted_stamp { | ||||
| @@ -123,23 +152,9 @@ pub async fn run(radar_data: ArcRwlockRadarData, connector: Connector, pcileech_ | ||||
|             ).unwrap(); | ||||
|  | ||||
|             if local_data.health > 0 { | ||||
|                 let has_bomb = { | ||||
|                     if data.bomb_planted || data.bomb_dropped { | ||||
|                         false | ||||
|                     } else if data.recheck_bomb_holder { | ||||
|                         if local_data.team == Some(TeamID::T) && !data.bomb_dropped && !data.bomb_planted { | ||||
|                             let is_holder = ctx.has_c4( | ||||
|                                 data.local_pawn.into(), data.entity_list.into() | ||||
|                             ).unwrap_or(false); | ||||
|  | ||||
|                             if is_holder { | ||||
|                                 data.bomb_holder = data.local.into(); | ||||
|                                 data.recheck_bomb_holder = false; | ||||
|                             } | ||||
|  | ||||
|                             is_holder | ||||
|                         } else { false } | ||||
|                     } else { Address::from(data.local) == data.bomb_holder } | ||||
|                 let has_bomb = match data.bomb_holder { | ||||
|                     Some(bh) => data.local_pawn == bh.to_umem(), | ||||
|                     None => false, | ||||
|                 }; | ||||
|  | ||||
|                 entity_data.push( | ||||
| @@ -164,21 +179,9 @@ pub async fn run(radar_data: ArcRwlockRadarData, connector: Connector, pcileech_ | ||||
|                     continue; | ||||
|                 } | ||||
|  | ||||
|                 let has_bomb = { | ||||
|                     if data.bomb_planted { | ||||
|                         false | ||||
|                     } else if data.recheck_bomb_holder { | ||||
|                         if player_data.team == Some(TeamID::T) && !data.bomb_dropped && !data.bomb_planted { | ||||
|                             let is_holder = ctx.has_c4(*pawn, data.entity_list.into()).unwrap_or(false); | ||||
|  | ||||
|                             if is_holder { | ||||
|                                 data.bomb_holder = *controller; | ||||
|                                 data.recheck_bomb_holder = false; | ||||
|                             } | ||||
|  | ||||
|                             is_holder | ||||
|                         } else { false } | ||||
|                     } else { *controller == data.bomb_holder } | ||||
|                 let has_bomb = match data.bomb_holder { | ||||
|                     Some(bh) => *pawn == bh, | ||||
|                     None => false, | ||||
|                 }; | ||||
|  | ||||
|                 let player_type = { | ||||
|   | ||||
| @@ -9,7 +9,7 @@ pub struct CsData { | ||||
|     // Entities | ||||
|     pub players: Vec<(Address, Address)>, | ||||
|     pub bomb: Address, | ||||
|     pub bomb_holder: Address, | ||||
|     pub bomb_holder: Option<Address>, | ||||
|     pub recheck_bomb_holder: bool, | ||||
|  | ||||
|     // Pointers | ||||
| @@ -23,6 +23,12 @@ pub struct CsData { | ||||
|     pub local_pawn: u64, | ||||
|     pub is_dead: bool, | ||||
|     pub tick_count: i32, | ||||
|     pub freeze_period: bool, | ||||
|     pub round_start_count: u8, | ||||
|     pub highest_index: i32, | ||||
|     pub map: String, | ||||
|  | ||||
|     // Bomb | ||||
|     pub bomb_dropped: bool, | ||||
|     pub bomb_planted: bool, | ||||
|     pub bomb_planted_stamp: Option<Instant>, | ||||
| @@ -32,8 +38,6 @@ pub struct CsData { | ||||
|     pub bomb_defuse_length: f32, | ||||
|     pub bomb_exploded: bool, | ||||
|     pub bomb_defused: bool, | ||||
|     pub highest_index: i32, | ||||
|     pub map: String | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -161,7 +165,7 @@ impl CsData { | ||||
|         let mut bomb_being_defused = 0u8; | ||||
|         let mut bomb_exploded = 0u8; | ||||
|         let mut bomb_defused = 0u8; | ||||
|  | ||||
|         let mut freeze_period = 0u8; | ||||
|         { | ||||
|             // Globals | ||||
|             let tick_count_addr = (self.globals + 0x40).into(); | ||||
| @@ -170,6 +174,8 @@ impl CsData { | ||||
|             // Gamerules | ||||
|             let bomb_dropped_addr = (self.gamerules + cs2dumper::client::C_CSGameRules::m_bBombDropped as u64).into(); | ||||
|             let bomb_planted_addr = (self.gamerules + cs2dumper::client::C_CSGameRules::m_bBombPlanted as u64).into(); | ||||
|             let total_rounds_addr = (self.gamerules + cs2dumper::client::C_CSGameRules::m_bFreezePeriod as u64).into(); | ||||
|             let round_start_count_addr = (self.gamerules + cs2dumper::client::C_CSGameRules::m_nRoundStartCount as u64).into(); | ||||
|  | ||||
|             // Game Entity System | ||||
|             let highest_index_addr = (self.game_ent_sys + cs2dumper::offsets::client_dll::dwGameEntitySystem_getHighestEntityIndex as u64).into(); | ||||
| @@ -187,6 +193,8 @@ impl CsData { | ||||
|             batcher.read_into(tick_count_addr, &mut self.tick_count); | ||||
|             batcher.read_into(bomb_dropped_addr, &mut bomb_dropped); | ||||
|             batcher.read_into(bomb_planted_addr, &mut bomb_planted); | ||||
|             batcher.read_into(total_rounds_addr, &mut freeze_period); | ||||
|             batcher.read_into(round_start_count_addr, &mut self.round_start_count); | ||||
|             batcher.read_into(highest_index_addr, &mut self.highest_index); | ||||
|             batcher.read_into(map_addr, &mut map_ptr); | ||||
|         } | ||||
| @@ -237,6 +245,7 @@ impl CsData { | ||||
|         self.bomb_exploded = bomb_exploded != 0; | ||||
|         self.bomb_being_defused = bomb_being_defused != 0; | ||||
|         self.bomb_defused = bomb_defused != 0; | ||||
|         self.freeze_period = freeze_period != 0; | ||||
|     } | ||||
|  | ||||
|     pub fn update_pointers(&mut self, ctx: &mut DmaCtx) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user