commit 25f07857ffd1224de393fe2af1be504ca0be0368
Author: gtacodeshop <118129585+gtacodeshop@users.noreply.github.com>
Date: Sun Nov 13 19:41:26 2022 +0100
Initial Commit
diff --git a/CHEAT_1_SIGS.txt b/CHEAT_1_SIGS.txt
new file mode 100644
index 0000000..bac992d
--- /dev/null
+++ b/CHEAT_1_SIGS.txt
@@ -0,0 +1,241 @@
+NRT:0:true:48 8D 0D ? ? ? ? 48 8B 14 FA E8
+ST:0:true:48 03 15 ? ? ? ? 4C 23 C2 49 8B 08
+GS:0:true:83 3D ? ? ? ? ? 75 17 8B 43 20 25 ? ? ? ? 3C 03 75 0B
+CPF:0:true:48 8B 05 ? ? ? ? 45 ? ? ? ? 48 8B
+GCP:0:true:4C 8D 05 ? ? ? ? 4D 8B 08 4D 85 C9 74 11
+WCHL:0:true:8B 05 ? ? ? ? 44 8B D3 8D 48 FF 85 C9 78 35 46
+WIHL:0:true:44 0F B7 05 ? ? ? ? 44 8B DD 41 FF C8 78 28 48 8B 1D
+GCA:0:true:48 8B 05 ? ? ? ? 4A 8B 1C F0 48 85 DB 0F 84
+GTPC:0:true:E8 ? ? ? ? 48 8B 0D ? ? ? ? 48 8B D3 48 8B F8 E8 ? ? ? ? 48 85 FF 74 3B 48 8B 17 48 8B CF FF 52
+TPCP:0:true:48 8B 05 ? ? ? ? 8B A8 ? ? ? ? E8 ? ? ? ? 48 8B F8
+GEA:0:true:E8 ? ? ? ? 48 8B D8 48 85 C0 0F 84 ? ? ? ? 48 8B 0D ? ? ? ? 8B D7 E8 ? ? ? ? 48 8B F8 48 85 C0
+GEH:-104:true:48 F7 F9 49 8B 48 08 48 63 D0 C1 E0 08 0F B6 1C 11 03 D8
+PMSP:28:false:40 53 48 83 EC 20 E8 ? ? ? ? 48 8B D8 48 85 C0 74 12
+MSP:0:false:48 85 C0 0F 84 ? ? ? ? 8B 48 50
+GCNGPFI:0:true:48 83 EC 28 33 C0 38 05 ? ? ? ? 74 0A 83 F9 1F 77 05 E8 ? ? ? ? 48 83 C4 28
+GMI:0:true:E8 ? ? ? ? 0F B7 45 58 66 89 45 50 8B 45 50 41 0B C7 41 23 C6 0F
+SVG:0:true:8B 91 ? ? ? ? F3 0F 10 05 ? ? ? ? 8D 42 FD A9
+GVPA:0:true:4C 8B 0D ? ? ? ? 45 33 C0 4D 85 C9 75 03 33 C0 C3
+DOI:0:true:89 1D ? ? ? ? 48 8B 5C 24 ? 48 8B 6C 24 ? 48 8B 74 24 ? 48 83 C4 30 5F
+ATCT:0:true:48 83 EC 28 45 8B C8 44 8B C2 8B D1 48 8D 0D ? ? ? ? E8 ? ? ? ? 8B 05
+DST:0:true:48 8D 3D ? ? ? ? 80 3B 00 76 12 48 8B 0F 48 85 C9 74 0A 48 8B 01 FF 50 10 84 C0 75 3C
+EXPD:0:true:48 8D ? ? ? ? ? C1 EF 12 8B D0 89 85 88 00 00 00 40 80 E7 01 E8
+EXPFX:0:true:48 8D 0D ? ? ? ? 41 0F 28 D9 45 33 C0 48 8B D3 E8 ? ? ? ? 44
+BL:0:true:4C 8D 05 ? ? ? ? 0F B7 C1
+OQ:118:true:40 53 48 83 EC 20 33 DB 44 8D 43 01 41 3B C8 75 60
+WT:0:true:4C 8D 0D ? ? ? ? 48 0F 45 D1 48 8B 0D ? ? ? ? 48 83 64 24 ? ? 4C 8D 05 ? ? ? ? E8 ? ? ? ? 84 C0 0F 85
+SPH:0:true:4C 8B 81 ? ? ? ? 4D 85 C0 0F 84 ? ? ? ? 41 8B 80 ? ? ? ? F3
+AWM:0:true:40 53 48 83 EC 30 0F 29 74 24 ? 48 8B D9 E8 ? ? ? ? F3 0F 10 83 ? ? ? ? F3 0F 10 35
+SCPCS:0:true:0F B7 02 44 0F B7 4A ? 66 83 F8 05 73 58 33 D2 66 45 85 C9 74 50 0F B7 C0 4C 8D 04 80 4D 03
+SCPCSC:0:true:48 89 5C 24 ? 48 89 4C 24 ? 55 56 57 41 54 41 55 41 56 41 57 48 83 EC 30 4C 8B FA 4D 8B E8 48 8B D1 4D 85 FF 74 10
+FGES:0:true:48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 41 56 48 83 EC 20 33 DB 49 8B F9 41 8B
+RSTRB:0:false:40 22 F0 44 3B 77 20
+RSTEB:0:false:40 22 F8 3B 73 44
+SCT:0:true:48 89 5C 24 ? 57 48 83 EC 20 8B F9 48 8B 0D ? ? ? ? 48 8B DA 33 D2 E9
+SWU:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC 30 40 8A E9 48 8B 0D
+GHNGP:0:true:E8 ? ? ? ? 33 C9 48 85 C0 74 2A 44 8D 41 01 66 89 4C 24 ? 48 89 4C 24 ? 4C 8D 4C 24 ? 48
+TSE:0:true:48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 41 56 48 81 EC ? ? ? ? 45 8B F0 41 8B F9
+SISE:22:true:48 8B 8B ? ? ? ? E8 ? ? ? ? 8B D7 B9 ? ? ? ? 4C 8B C0 E8
+AOEB:0:true:44 38 35 ? ? ? ? F3 0F 10 45 ? F3 0F 11 75 ? F3 0F 11 45 ? 8A
+UNOO:-81:true:48 83 60 ? ? 48 8D 05 ? ? ? ? 48 89 03 EB 02 33 DB 48 85 DB 0F 84 ? ? ? ? 48
+NOM:0:true:48 8B 0D ? ? ? ? 48 8D 15 ? ? ? ? E8 ? ? ? ? 4C 8B 13 4C 8D 05 ? ? ? ? 48
+HROFV:0:true:45 33 C9 45 85 C0 74 56 41 FF C8 74 4C 41 FF C8 74 42 41 FF C8 74 38 41 FF C8 74 2E 41 FF
+GNGPFH:0:true:E8 ? ? ? ? 48 8B 0D ? ? ? ? 48 8B F0 E8 ? ? ? ? 33 FF 48
+GST:0:true:48 89 5C 24 ? 57 48 83 EC 20 48 8B FA 4C 8B C1 48 8D 54 24 ? 48 8D 0D ? ? ? ? E8 ? ? ? ? 48 8B D8 83
+STMNM:80:true:48 89 9C 24 ? ? ? ? E8 ? ? ? ? 48 8D 8C 24 ? ? ? ? 48 8B D8 E8 ? ? ? ? 48 8D 94 24 ? ? ? ? 0F 10
+PMDN:0:true:40 53 48 83 EC 20 48 8B 02 4C 8B C2 48 8B D9 48 8B D1 49 8B C8 FF 50 58 B8
+STL:0:true:40 53 48 83 EC 30 80 3D ? ? ? ? ? 0F 84 ? ? ? ? 48 8D 1D ? ? ? ? 4C 8D 0D ? ? ? ? 4C 8D 05
+UTL:0:true:48 8B C4 48 89 58 08 55 56 57 41 54 41 55 41 56 41 57 48 8D 68 A1 48 81 EC ? ? ? ? 83 3D
+STLC:0:true:48 8B C4 48 89 58 08 55 48 8D 68 B8 48 81 EC ? ? ? ? 0F 28 05 ? ? ? ? 0F 28 2A 0F 29 70 E8
+SVLC:0:true:48 89 5C 24 ? 57 48 83 EC 20 80 3D ? ? ? ? ? 0F 84 ? ? ? ? 48 8D 3D ? ? ? ? 48 8D 1D
+GSTFCT:0:true:0F B7 CA 83 F9 07 7F 5E 74 54 85 C9 74 48 FF C9 74 3C FF C9 74 30
+GNOFNI:0:true:48 89 5C 24 ? 48 89 6C 24 ? 66 89 54 24 ? 56 57 41 56 48 83 EC 20 45
+RBFBB:0:true:48 89 5C 24 ? 57 48 83 EC 20 83 64 24 ? ? 48 8B FA BB ? ? ? ? 48 8D 54 24 ? 44 8B C3 E8
+RIFBB:0:true:E8 ? ? ? ? 48 8B 4C 24 ? 48 8D 53 34 41 B8 ? ? ? ? E8 ? ? ? ? 40 84 FF 74 1E 8B 0E E8
+RV3FBB:0:true:48 8B C4 48 89 58 08 48 89 70 10 57 48 83 EC 60 48 8B F2 48 8B F9 48 8D 50 C8 48 8D 48 E8 41 8B D9 E8
+RAFBB:0:true:48 89 5C 24 ? 57 48 83 EC 30 41 8B F8 4C 8B D2 48 8B D9 45 85 C0 74 4F 8A 41 1C A8 02 75 48 A8
+RSFBB:0:true:48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 20 48 8B D9 33 C9 41 8B F8 8A 43 1C 48 8B F2 A8 02 75 45 A8 01 74 05
+NER:0:true:48 8B 0D ? ? ? ? 4C 8D 0D ? ? ? ? 4C 8D 05 ? ? ? ? BA ? ? ? ? E8 ? ? ? ? 48 8B 0D ? ? ? ? 4C 8D 0D
+GPI:0:true:48 89 5C 24 ? 57 48 83 EC 20 48 8B D9 48 8B 0D ? ? ? ? 48 8B FA 48 8B 01 FF 90 ? ? ? ? 84 C0 74 47 8B
+NARRCF3:0:false:48 8B 0D ? ? ? ? 48 85 C9 74 08 48 8B 01 B2 01 FF 50 18 0F B7 56 0A 41 B0 01 48 8B CD E8 ? ? ? ? 33 C9
+NB:0:false:48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 30 41 8B D8 8B FA 8B F1 E8
+SSIR:0:true:48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 41 56 48 83 EC 30 48 83 3D ? ? ? ? ? 8B
+RSINFO:0:true:48 8D 05 ? ? ? ? 4D 69 C0 ? ? ? ? 4C 03 C0 41 83 B8 ? ? ? ? ? 0F 86 ? ? ? ? 83 CD FF 48 8D 15
+GSIFGS:0:true:48 89 5C 24 ? 48 89 6C 24 ? 56 57 41 56 48 81 EC ? ? ? ? 48 8B F2 33 D2 49 8B F8 4C 8B F1 44 8D 42 7C 48 8D 4C 24 ? 41 8A E9 C6 44 24 ? ? E8
+SNER:0:true:48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 57 41 56 41 57 48 83 EC 60 4C 8B F9 48 8D 48 C8 49 8B F1 49
+SNEA:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC 30 8B 6C 24 60 8B 74 24 68 49 8B C1 4D 8B D0
+SGCE:0:true:4C 8B DC 49 89 5B 08 49 89 73 10 49 89 7B 18 41 56 48 83 EC 40 48 8B F1 48 8B C2 49 89 53 F0 48 8D 0D
+SFR:0:true:80 3D ? ? ? ? ? 75 03 32 C0 C3 4C 8B CA 8B 15 ? ? ? ? 4C 8B C1 48 8D 0D ? ? ? ? E9
+SGCM:0:true:E8 ? ? ? ? 41 FF C4 48 83 C5 08 44 3B A7 ? ? ? ? 0F 8C ? ? ? ? 44 89 AB ? ? ? ? 45 88 2E
+GCHP:0:true:48 8B 0D ? ? ? ? 4C 8D 44 24 ? 48 8D 95 ? ? ? ? 48 89 85 ? ? ? ? E8 ? ? ? ? 48 8D 4C 24 ? E8 ? ? ? ? 48 8D
+GCPK:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC 20 48 8D A9 ? ? ? ? 48 8B F1 41 8B D8
+NODES_1:0:true:48 8B 07 48 8B CF FF 90 ? ? ? ? 84 C0 74 07 41 C7 06 ? ? ? ? 41 39 36 76 5E 4C 8B 17 45 33 C9 48
+NODES_2:0:true:33 F6 39 75 00 0F 86 ? ? ? ? 48 8B 03 45 33 C9 44 8B FE 45 8D 41 03 48 8B CB 4D 6B FF 64 4D 8D 34 3F 49
+NODES_3:0:true:48 8B 07 48 8B CF FF 90 ? ? ? ? 84 C0 74 07 41 C7 06 ? ? ? ? 44 38 23 74 14 48 8B 07 48 8B CF FF 90
+NODES_4:0:true:48 8B 06 4C 8D B5 ? ? ? ? 49 8B D6 45 33 C0 48 8B CE FF 50 38 48 8B 06 48 8B CE FF 90 ? ? ? ? 33
+NODES_5:0:true:45 8B F4 45 39 27 76 7C 48 8B 07 45 33 C9 48 8D 96 ? ? ? ? 41 8B DE 45 8D 41 20 48 8B CF 48 8D 14
+NODES_6:0:true:48 8B 06 48 8B CE FF 90 ? ? ? ? 33 DB 84 C0 74 06 C7 07 ? ? ? ? 39 1F 76 21 4C 8B 0E 48 8D 95 ? ? ? ? 45 33 C0
+NODES_7:86:true:E8 ? ? ? ? 48 8B 07 48 8D 9E ? ? ? ? 48 8B D3 45 33 C0 48 8B CF FF 50 38 45 33 FF 44 38 3B 75 1C 48 8B 07
+NODES_8:0:true:48 8B 06 45 33 C9 4D 8D AE ? ? ? ? 45 8D 41 08 49 8B D5 48 8B CE FF 50 68 33 ED 4D 8D A6 ? ? ? ? 41
+NODES_9:0:true:33 ED 41 39 2E 76 2D 48 8D 96 ? ? ? ? 45 33 C0 48 8B CF 48 8D 14 AA E8 ? ? ? ? C6 84 35 ? ? ? ? ? C6 84 35
+NODES_10:0:true:B8 ? ? ? ? 41 39 06 41 0F 42 06 33 ED 41 89 06 85 C0 74 7A 44 8B FD 45 33 C0 48 8B CF
+NODES_11:0:true:44 8B E7 41 39 3F 76 66 48 8B 06 45 33 C9 41 8B FC 49 8D 96 ? ? ? ? 48 8D 1C 7F 45 8D 41 03
+NODES_12:0:true:45 8B F7 44 39 3B 76 24 4C 8B 17 45 33 C9 41 8B D6 48 83 C2 4A 45 8D 41 20 48 8B CF 48 8D 14 96 41 FF 52 68 41 FF C6 44 3B 33 72 DC 48 8B
+NODES_13:0:true:48 8B 07 48 8B CF FF 90 ? ? ? ? 84 C0 74 06 C7 03 ? ? ? ? 41 BF ? ? ? ? 44 38 65 00 75 33 45 38 26 75 2E 48 8B 07 48 8B CF
+NODES_14:0:true:45 33 E4 41 8B EC 45 39 26 76 44 48 8B 07 44 8B FD 45 33 C0 49 8D 1C 37 48 8B CF 48 8D 93 ? ? ? ? FF 50 38 44 38 A3 ? ? ? ? 74 1A 48 8B 07
+RWOM:0:true:F3 0F 10 05 ? ? ? ? 0F 57 C9 0F 2F C1 76 1B 48 8B 05 ? ? ? ? 0F 2F 48 70 73 0E 48 8D 0D ? ? ? ? 33
+MFI:0:true:0F 2F 35 ? ? ? ? 0F 86 ? ? ? ? 0F 28 05 ? ? ? ? 48 8D 4D B0 41 0F 28 D9 48 8B D3 0F 28 D7 0F 29 45 A0
+VFXW:0:true:48 8D 05 ? ? ? ? 48 6B FF 45 F3 0F 59 0D ? ? ? ? F3 41 0F 59 9E ? ? ? ? F3 0F 10 BD ? ? ? ? 48 03 FE 48 69 FF ? ? ? ? F3
+FL:0:true:48 03 0D ? ? ? ? E8 ? ? ? ? 48 8D 4C 24 ? E8 ? ? ? ? 84 C0 74 10 48 8D 4C 24 ? 44 8B
+SPE:0:true:48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 41 56 48 81 EC ? ? ? ? 48 8B EA 44 8B F1 49 8B D9 41
+NBC:0:true:48 8B 0D ? ? ? ? 33 D2 E8 ? ? ? ? 84 C0 75 ? 48 8B 05 ? ? ? ? BA
+VFX-S:0:true:48 8D 0D ? ? ? ? 44 8A CE 44 8A C5 8B D3 44 89 64 24 ? 89 7C 24 20 E8 ? ? ? ? 8D
+VFX-P:0:true:48 8B 05 ? ? ? ? 83 20 00 48 8B 0D ? ? ? ? 48 83 C4 28 E9
+POOL_PI:0:true:48 8B 05 ? ? ? ? 0F B7 48 10 66 03 CA 66 44 03 C1 41 80 F9 04
+POOL_A:0:true:48 8B 0D ? ? ? ? E8 ? ? ? ? 48 85 C0 74 0E 48 8B D6 48 8B C8 E8 ? ? ? ? 48 8B D8 48 89 5F 48
+POOL_NEQ:0:true:48 8B 05 ? ? ? ? 48 8B E9 44 8B 40 20 8B 40 10 41 C1 E0 02 41 C1 F8 02 41 2B C0
+GGXTL:0:false:48 89 5C 24 ? 57 48 83 EC 20 48 8B DA 48 8B F9 48 85 D2 75 44
+PGDN:0:true:48 89 5C 24 ? 48 89 6C 24 ? 56 57 41 56 48 83 EC 20 48 8D 99 ? ? ? ? 33 ED 48 8B FA 48 8B F1 48 39 2B 74
+HRP:0:true:45 33 C9 4C 8B D1 44 39 89 ? ? ? ? 76 60 83 FA 1C 7D 5B 44 8B C2 41 FF C8 74 36 41 83 F8 06 74 30
+SJRM:0:true:E8 ? ? ? ? 48 8D 8C 24 ? ? ? ? 8A D8 E8 ? ? ? ? 48 8D 4C 24 ? E8 ? ? ? ? 8A C3 48 81 C4
+RSIR:0:true:48 8B C4 48 89 58 08 48 89 70 10 48 89 78 18 55 41 54 41 56 48 8D 68 88 48 81 EC ? ? ? ? 45 33 F6 48 8B F9 45 8D 66 01 44 39 B1 ? ? ? ? 0F 86 ? ? ? ? 48 8D 4C 24 ? E8
+SAGTSC:0:true:48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 20 48 8B F2 48 8B D9 E8 ? ? ? ? 84 C0 74 77 F6 43 1C 01 75 71 8B 4B 10 8D 41 06 3B 43 0C 7F 66 F6 43 1C 02 BF
+RCC:-73:true:41 8A C6 44 88 AC 24 ? ? ? ? C0 E8 07 24 01 88 84 24 ? ? ? ? E8 ? ? ? ? 44 0F B7
+RCS:-48:true:E8 ? ? ? ? 4C 8B 8C 24 ? ? ? ? 48 83 64 24 ? ? 8D 55 FA 48 8B C8 45 33 C0 E8
+PADN:0:true:40 53 48 83 EC 70 8A 81 ? ? ? ? F3 0F 10 81 ? ? ? ? F3 0F 10 89 ? ? ? ? 4C 8B
+SEM:0:true:40 53 48 83 EC 20 48 81 C1 ? ? ? ? 48 8B DA 48 8B 01 FF 90 ? ? ? ? 33 C9 48 85 C0 0F 84 ? ? ? ? 0F 28 48 60 0F
+APCM:0:true:4D 85 C9 0F 84 ? ? ? ? 48 8B C4 48 89 58 08 48 89 70 10 48 89 78 18 4C 89 48
+RUTDRB:0:true:48 8D 05 ? ? ? ? 48 8D 8E ? ? ? ? 48 8D 54 24 ? 48 89 5C 24 ? 48 89 44 24
+RCR:0:true:48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 41 54 41 56 41 57 48 83 EC 50 4C 8B F2 4D 8B E0 48
+HMKP:0:true:48 89 5C 24 ? 57 48 83 EC 20 41 B8 ? ? ? ? 48 8B FA 48 8B D9 E8 ? ? ? ? 84 C0 74 57 48 8D
+HMNSH:0:true:E8 ? ? ? ? 84 C0 74 60 4C 39 77 40 74 29 48 8B 4C 24 ? 48 8B 01 FF 50 28 48 8B 4F 40 44 0F B7
+HNE:0:true:66 41 83 F9 ? 0F 83 ? ? ? ? 4C 8B DC 49 89 5B 08 49 89 6B 10 49 89 73 18 57 41 56 41 57 48 83 EC 50 8B
+RBV:-46:true:49 8B F0 4C 8B F2 41 B7 01 E8 ? ? ? ? 44 8B E0 89 45 F4 48 8B 03 48 8B CB FF 90
+WUTDWB:0:true:48 89 5C 24 ? 57 48 83 EC 20 48 8B 59 18 41 8B F8 F6 43 1C 01 75 2D 8B 4B 10 42 8D 04 01 3B 43 0C 7F
+HNGE:0:true:48 89 5C 24 ? 57 48 83 EC 20 48 8B 05 ? ? ? ? 33 DB 48 85 C0 74 39 8B 50 20 8B 40 10 C1 E2 02 C1 FA 02 3B C2
+APPI:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 54 41 55 41 56 41 57 48 83 EC 20 41 8A E8 4C 8B F2 48 8B F1
+HPE:0:true:E8 ? ? ? ? F6 C3 02 74 0D 48 8D 4C 24 ? 83 E3 FD E8 ? ? ? ? F6 C3 01
+STT:0:true:48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 20 80 B9 ? ? ? ? ? 8B FA 48 8B D9 74 05 8B 41 10 EB 7F E8 ? ? ? ? 83 25
+PCC:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC 20 48 8B F9 48 8B CA 49 8B E9
+SHP:0:true:0F B7 15 ? ? ? ? 45 33 F6 8B E9 85 C9 B8 ? ? ? ? 45 8D 7E 01 41 8A F6 41 8B DE 0F 44 E8
+MSH:0:true:48 89 5C 24 ? 57 48 83 EC 50 48 8B FA 48 8B D9 E8 ? ? ? ? 83 7B 10 08
+PCS:0:true:48 89 5C 24 ? 55 56 57 41 54 41 55 41 56 41 57 48 8D AC 24 ? ? ? ? 48 81 EC ? ? ? ? 48 8B 02
+SULL:0:true:48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 41 56 48 83 EC 20 48 8B F2 BB ? ? ? ? 45 8B F0 48 C1
+WDD:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC 20 41 8B F0 48 8B EA 48 8B D9 41 83 F8 20 0F 8E
+HPBR:0:true:E8 ? ? ? ? 84 C0 0F 85 ? ? ? ? 83 FB 01 75 2D 8B 45 7F 48 8D 55 CF 48 8D 4D EF 44 8B CE
+PRU:-73:true:83 65 D0 00 83 65 D4 00 83 65 D8 00 83 65 E0 00 C6 45 DC 00 48 8D 5D E4 BF ? ? ? ? 48
+NPM:0:true:48 8B 0D ? ? ? ? E8 ? ? ? ? 48 85 C0 0F 84 ? ? ? ? 48 8B 0D ? ? ? ? E8
+GCRASH:51:true:48 83 EC 48 48 83 64 24 ? ? 83 4C 24 ? ? 33 D2 48 8D 05 ? ? ? ? 44 8D 4A 0F 48 8D 0D ? ? ? ? 41 B8 ? ? ? ? 48 89 44 24 ? E8
+CHATINF:0:true:4C 8B 05 ? ? ? ? 4D 85 C0 74 E4 83 CA FF 48 8D 05 ? ? ? ? 4C 8D 4B 70 89 54 24 48 89 54 24 40 48 89 44 24
+TEXS:0:true:48 8D 0D ? ? ? ? E8 ? ? ? ? 8B 45 EC 4C 8D 45 F0 48 8D 55 EC 48 8D 0D ? ? ? ? 89 45 F0 E8
+SMMR:0:true:48 8B C4 48 89 58 18 44 89 48 20 89 50 10 55 56 57 41 54 41 55 41 56 41 57 48 8D A8 ? ? ? ? 48 81
+RXMLS:0:true:E8 ? ? ? ? 48 85 C0 74 52 83 78 40 00 74 06 48 8B 40 38 EB 02 33 C0
+RXMLNS:0:true:E8 ? ? ? ? 48 89 45 38 48 85 C0 74 16 48 8D 55 38 48 8D 8F ? ? ? ? 41 B8
+RMMR:0:true:48 89 5C 24 ? 48 89 74 24 ? 57 48 81 EC ? ? ? ? 41 83 21 00 49 8B C0 49 8B D9 48 8B F1 48 8D 15 ? ? ? ? 41 B1 01 48 8B C8 45 33 C0 E8
+WMMR:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 56 41 57 48 81 EC ? ? ? ? 4D 8B F1 45 8B
+WESTR:0:true:E8 ? ? ? ? 84 C0 0F 84 ? ? ? ? 48 BD ? ? ? ? ? ? ? ? 4D 8B C7 49 8D 04 2F 48 83 F8
+GGESLC:0:true:48 8B C4 48 89 58 08 48 89 70 10 48 89 78 18 4C 89 60 20 55 41 56 41 57 48 8D 68 C8 48 81 EC ? ? ? ? 0F 29 70 D8 49 8B F9 4C 8B FA 0F 28
+WAYP:0:true:48 8D 0D ? ? ? ? 48 98 4C 8B C6 41 8B 44 85 ? 0D ? ? ? ? 89 44 24 30 83 64 24 ? ? C6 44 24
+NSQ:0:true:48 8B 0D ? ? ? ? 41 8A D9
+UUIV1:0:true:48 83 EC 18 48 8B 0D ? ? ? ? 4C 8D 05 ? ? ? ? F3 0F 10 89 ? ? ? ? F3 0F 10 81 ? ? ? ? F3 0F 10 99 ? ? ? ? 0F 14 D9
+UUIV2:0:true:48 8B C4 53 48 81 EC ? ? ? ? 80 B9 ? ? ? ? ? 0F 29 70 E8 0F 29 78 D8 48 8B D9 44 0F 29 40 ? 44 0F 29 48 ? 44
+UIVS:0:true:48 8D 0D ? ? ? ? 0F 29 44 24 ? E8 ? ? ? ? 0F 28 05 ? ? ? ? 0F 59 44 24 ? F3 48 0F 2C C0 0F C6 C0 55
+SVNUI:0:true:40 53 48 83 EC 30 F3 0F 10 15 ? ? ? ? 48 8D 15 ? ? ? ? 41 B1 01 48 8B D9 E8 ? ? ? ? 48 8D 15 ? ? ? ? F3 0F
+VFXL:0:true:48 8D 05 ? ? ? ? 4C 8D 1C 7F 48 8B 4A 10 49 C1 E3 05 4C 03 D8 0F B6 85 ? ? ? ? 48 23 C8 8B 42 18 48 3B
+HVBO:0:true:40 53 48 83 EC 20 8A D9 8A D1 48 8D 0D ? ? ? ? 45 33 C0 E8 ? ? ? ? 88 1D ? ? ? ? 48 83 C4 20
+NS_ABTQ:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 56 41 57 48 83 EC 30 45 8B F9 41 8B E8 4C 8B F2 48 8B F1 33 DB E8 ? ? ? ? 48 85 C0 0F 85 ? ? ? ? 33 D2
+NS_AITB:0:true:48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 20 48 8B F2 48 8D 54 24
+RTMH:0:true:48 8B C4 48 89 58 08 48 89 70 10 48 89 78 20 55 41 56 41 57 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 49 8B 00 48
+RTMBB:0:true:E8 ? ? ? ? 84 C0 0F 84 ? ? ? ? 48 8D 4C 24 ? E8 ? ? ? ? 3B C7 0F 85 ? ? ? ? 44 38 3D ? ? ? ? 0F 85
+RCMBB:0:true:E8 ? ? ? ? 84 C0 74 0A 48 8D 4C 24 ? E8 ? ? ? ? 48 8B 45 50 48 8D 55
+GCFP:0:true:48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 41 56 48 83 EC 20 48 8B D9 48 81 C1 ? ? ? ? 48 8B EA 33 FF E8 ? ? ? ? 48 3B E8 75 09 48 8D BB ? ? ? ? EB 3D 8B F7 39 BB
+CKL:0:false:E8 ? ? ? ? 48 8B 56 08 84 C0 74 59 48 FF C3 44 38 3C 1A 75 F7 48 8D 4D 00 4C 8B C3 E8 ? ? ? ? 48 8D 4D 48 E8
+CKK:0:false:E8 ? ? ? ? 84 C0 0F 85 ? ? ? ? 48 8B 56 08 4C 8B C3 49 FF C0 46 38 3C 02 75 F7 48 8D 4D 00 E8 ? ? ? ? 48 8D 4D 00 E8 ? ? ? ? 48 8B 56 08 84 C0 0F 84
+RULLFBB:0:true:48 8B C4 48 89 58 08 56 57 41 56 48 83 EC 20 41 8B F8 33 DB 41 B8 ? ? ? ? 4C 8B F2 48 8B F1 89 58 18 41 3B F8 7E 38 48 8D 50 20 89 58 20 E8
+RNMHFBB:0:true:48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 20 8A 42 1C 40 32 FF 48 8B DA 48 8B F1 A8 02 0F 85 ? ? ? ? A8 01 74 05 8B 4A 0C EB 03 8B 4A 14 8B 42 10 83
+WUITBB:0:true:48 89 5C 24 ? 44 8B DA 83 CB FF 4D 63 D1 49 C1 FA 03 41 83 E1 07 4C 03 D1 B9 ? ? ? ? 41 2B C8 D3 E3 41 D3 E3 41 8B C9 8B D3 41 8B C3 C1 EA
+RYTD:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 7C 24 ? 41 54 41 56 41 57 48 83 EC 50 48 8B EA 4C 8B FA 48 8B D9 4D 85 C9 B2
+ASDFWD:0:true:0F B7 9C 24 ? ? ? ? 41 B1 01 4D 8B C6 49 8B CF 0F B7 D3 E8 ? ? ? ? 48
+ASDFWE:0:true:45 84 C0 0F 85 ? ? ? ? 48 89 5C 24 ? 4C 89 4C 24 ? 55 56 57 41 54 41 55 41 56 41 57 48 83 EC 50
+CGIP:0:true:48 89 5C 24 ? 57 48 83 EC 20 48 8B DA 48 8B F9 E8 ? ? ? ? 48 8B 43 60 48 89 47 60 48 8B 43 68 48 89 47 68 0F 10 43
+SGIP:0:true:48 89 5C 24 ? 57 48 81 EC ? ? ? ? 48 8B FA 48 8B D9 E8 ? ? ? ? 8B 83 ? ? ? ? 4C 8D 4B 78 85 C0 74 2E C7 44 24
+SGIPT:0:true:48 8D 05 ? ? ? ? 48 8D 3D ? ? ? ? 48 8D 4C 24 ? 48 69 D2 ? ? ? ? 48 03 D0 48 89 7C 24
+RPFBB:0:true:48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 20 48 8B 01 48 8D 71 0C 48 8B FA 66 83 3E 08 48 8B D9 0F 93 44 24 ? FF 50 10 48
+SRE:0:true:40 53 48 83 EC 20 0F B7 D9 48 8B 0D ? ? ? ? B2 01 E8 ? ? ? ? 48 8B 0D ? ? ? ? E8 ? ? ? ? 48 8B C8 33 C0 48 85 C9 74 08 0F B7 D3 E8 ? ? ? ? 48 8B 0D
+UPSS:0:true:40 53 48 83 EC 30 48 8B 05 ? ? ? ? 4C 8B D1 41 83 7A ? ? 48 8B 48 40 7D 23 48 85 C9 0F 84 ? ? ? ? 48 8B 01 4C 8D 05
+WATDWB:0:true:48 8D 05 ? ? ? ? 48 8D 51 30 44 8D 4E 13 48 8D 4D E0 45 33 C0 48 89 75 F0 48 89 45 E0 C6 45 E8 02 E8
+HHJR:0:true:48 8B C4 4C 89 48 20 4C 89 40 18 48 89 50 10 55 53 56 57 41 54 41 55 41 56 41 57 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 4C 8B F9 48 8D 4D
+PDN1:0:true:48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 41 54 41 56 41 57 48 83 EC 30 4D 8B F9 8B F2 4C 8B F1 85 51
+PDN2:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 54 41 55 41 56 41 57 48 83 EC 30 48 8B 01 4C 8B F2 33 D2 48 8B F1 FF 90 ? ? ? ? 84 C0 0F 84
+RID0:0:true:48 89 5C 24 ? 57 48 83 EC 20 48 8B FA 48 8B D9 E8 ? ? ? ? 48 8B 47 60 4C 8B C7 48 8D 8B ? ? ? ? 48 89 43 60
+SBULLET:0:true:48 8B C4 48 89 58 20 4C 89 40 18 55 56 57 41 54 41 55 41 56 41 57 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 0F 29 70 B8 0F 29 78 A8 44 0F 29 40 ? 44 0F 29 48
+WPHDN:0:true:48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 41 56 48 83 EC 20 48 8B B9 ? ? ? ? 4C 8D B1
+WPGDN:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 54 41 55 41 56 41 57 48 83 EC 30 0F B7 81 ? ? ? ? 48 8B B1
+RBLM:0:true:48 8B C4 48 89 58 08 48 89 70 10 57 48 83 EC 20 48 8B F1 48 8D 48 18 33 DB 48 8B FA 89 58 18 E8 ? ? ? ? 85 C0 74 48 8B 44 24 40 39 05 ? ? ? ? 75 3C 44 8D 43 40 48 8B D6
+HDNM:0:true:48 8B C4 48 89 58 08 48 89 70 10 48 89 78 20 55 41 56 41 57 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 83 8D ? ? ? ? ? 41 8B 78 40 49 8B 58 38 4C 8B F9 48 8D 4C 24
+HDPR:0:true:48 8B C4 48 89 58 10 44 89 48 20 4C 89 40 18 48 89 48 08 55 56 57 41 54 41 55 41 56 41 57 48 8D 6C 24 ? 48 81 EC
+GPT:0:true:48 89 5C 24 ? 57 48 83 EC 20 48 8B F9 48 8D 0D ? ? ? ? E8 ? ? ? ? 80 3D ? ? ? ? ? 75 56 33 C9 E8 ? ? ? ? 48 8B D8 E8
+GSME:0:true:40 53 48 83 EC 20 48 8B C2 48 8B D9 33 D2 48 8B C8 E8 ? ? ? ? 33 D2 44 8B D0 F7 35 ? ? ? ? 44 8B C2 48 8B 15 ? ? ? ? 46 8B 0C 82 41
+RSF:0:true:89 54 24 10 55 53 56 57 48 8D AC 24 ? ? ? ? 48 81 EC ? ? ? ? 48 83 79 ? ? 41 8B F8 48 8B F1 75 07 32 C0 E9 ? ? ? ? 48 8B 06
+CGFXF:0:true:40 53 48 83 EC 20 C7 41 ? ? ? ? ? 48 8D 05 ? ? ? ? 48 8B D9 48 89 01 C7 41 ? ? ? ? ? 48 8D 05 ? ? ? ? 48 89 01
+D:0:true:48 83 EC 28 F0 FF 49 08 75 0F 48 85 C9 74 0A 48 8B 01 BA ? ? ? ? FF 10 48 83 C4 28 C3
+CIDFF:0:true:40 55 48 8B EC 48 81 EC ? ? ? ? 49 8B 00 F3 0F 10 02 F3 0F 10 4A ? 83 65 B8 00 83 65 C0 00 83 65 C4 00 F3
+AFL:0:true:40 53 48 83 EC 20 48 8B 41 40 4D 63 C8 4C 8B D9 46 0F B6 14 08 48 8B DA 41 81 E2 ? ? ? ? 41 8B C2 45 8B CA 49 F7 D9 4C 0B
+VERTEX:0:true:E8 ? ? ? ? F3 0F 10 35 ? ? ? ? F3 0F 10 44 1D ? F3 0F 10 4C 1D ? 8B 47 28 41 0F 28 DB 41 0F 28
+RST:0:true:48 8B C4 48 89 58 10 55 56 57 41 54 41 56 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 0F 29 70 C8 0F 29 78 B8 44 0F 29 40 ? 44 0F
+FT:0:true:48 8B 05 ? ? ? ? 48 8B CB 48 69 C9 ? ? ? ? 40 38 AC 01 ? ? ? ? 74 0F E8 ? ? ? ? 0F 28 CE 8B CB E8 ? ? ? ? F3 0F 10 05 ? ? ? ? B2 01 E8
+FMH:0:true:48 8B 0D ? ? ? ? E8 ? ? ? ? 48 8B 0D ? ? ? ? 33 DB 48 85 C9 74 20 E8 ? ? ? ? 48 8B 0D
+GFIDT:0:true:48 85 D2 74 10 49 83 C8 FF 49 FF C0 42 80 3C 02 ? 75 F6 EB 03 45 33 C0 E9
+MH:0:true:48 8B 0D ? ? ? ? 45 33 C0 48 8B 01 41 8D 50 20 FF 50 50 48 85 C0 74 0D 48 8B C8 E8
+SM:0:true:48 8D 0D ? ? ? ? 03 D3 E8 ? ? ? ? 66 44 39 7D ? 74 09 48 8B 4D E8 E8
+D3DDEV:0:true:48 8D 05 ? ? ? ? 33 D2 48 89 44 24 ? 48 8D 05 ? ? ? ? 48 8B CB 48 89 44 24 ? 48 8D 05 ? ? ? ? 48 89 44 24
+GRCTFDX:0:true:48 8B 0D ? ? ? ? 45 33 C0 48 8B 01 33 D2 FF 90 ? ? ? ? 48 8B 0D ? ? ? ? 83 64 24
+TLSA:0:true:E8 ? ? ? ? 48 85 C0 0F 84 ? ? ? ? 48 8B D7 48 8B C8 E8 ? ? ? ? E9 ? ? ? ? B9
+SD:0:true:48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 20 48 63 FA 48 8B D9 E8 ? ? ? ? C7 43 ? ? ? ? ? 48 8D 05 ? ? ? ? 48 89 03
+SSI:0:true:E8 ? ? ? ? 8B 00 48 8B 0D ? ? ? ? 48 63 D0 0F AF 05 ? ? ? ? 44 0F B6 04 0A 48 63 D0 41 FF C7 48 03 15
+IVPS:0:true:45 33 D2 4C 8B D9 85 D2 78 3A 48 8B 41 40 4C 63 C2 46 0F B6 0C 00 8B 41 4C 41 81 E1 ? ? ? ? 45 8B C1 0F AF
+ADTP:0:true:89 54 24 10 48 83 EC 28 48 8B 41 40 4C 63 CA 46 0F B6 14 08 8B 41 4C 41 81 E2 ? ? ? ? 45 8B CA 0F AF C2
+AGRCTD:0:true:48 89 5C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 0F B7 41 28 45 33 D2 8B DA 4C 8B C9 49 8B F8 41 8B CA 8B D0 41 8D 72 01
+WEATHER:0:true:48 8D 0D ? ? ? ? E8 ? ? ? ? 39 05 ? ? ? ? 74 0B 39 05
+GSS:0:true:48 8D 0D ? ? ? ? E8 ? ? ? ? 83 38 FF 74 2D
+GSS_G:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC 20 48 8B EA 48 8B F1 49 8B D0 B9 ? ? ? ? 49 8B F8 E8
+PRESFIX:0:false:E8 ? ? ? ? 84 C0 0F 84 ? ? ? ? 8B 85 ? ? ? ? 8B 9D
+GCHATS:0:true:48 8B 05 ? ? ? ? 44 38 60 14 75 06 44 39 60 04 74 10 33 C9 E8 ? ? ? ? 83 B8
+RI:0:true:48 8D 0D ? ? ? ? 48 8B D7 E8 ? ? ? ? 48 8D 0D ? ? ? ? 8A D8 E8 ? ? ? ? 84 DB 75 13 48 8D 0D ? ? ? ? 48 8B D7
+RESOL:0:true:44 8B 05 ? ? ? ? 48 8D 0D ? ? ? ? 48 8D 15 ? ? ? ? 48 8D 05 ? ? ? ? 48 0F 45 C1 44 39 2D ? ? ? ? 48 8D 0D
+HHJR_1:0:true:85 FF 74 17 FF C9 75 26 8A 9D ? ? ? ? C7 44 24 ? ? ? ? ? 80 E3 01 EB 0F
+HHJR_2:0:true:8A 85 ? ? ? ? 48 63 5C 24 ? 45 85 E4 88 44 24 48 41 8B 84 9F ? ? ? ? 40 0F 94 C7 4C 89 74 24 ? 44 89
+GFI:0:true:85 D2 74 68 FF CA 74 5B FF CA 74 4E FF CA 74 41 FF CA 74 34 FF CA 74 27 FF CA 74 1A FF CA 74 0D
+RSTS:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC 20 33 DB 41 8B F0 8B EA 48 8B F9 39 99 ? ? ? ? 76 1F 48 8D 0C 9B 44 8B C6 8B D5 48 C1 E1
+GNGRCT:0:true:8B 91 ? ? ? ? 33 C0 81 FA ? ? ? ? 73 13 48 8D 04 92 48 C1 E0 04 48 03 C1 FF C2 89 91 ? ? ? ? C3
+RSRP:0:true:8B 05 ? ? ? ? 3B 05 ? ? ? ? 0F 84 ? ? ? ? 48 63 0D ? ? ? ? F3 0F 10 05
+GNMTI:0:true:33 C0 33 D2 48 83 C1 70 80 39 00 74 18 48 FF C2 FF C0 48 81 C1 ? ? ? ? 48 81 FA ? ? ? ? 7C E6 83 C8 FF C3
+TMTS:0:true:48 8B C4 48 89 58 08 48 89 70 10 48 89 78 18 4C 89 70 20 55 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 0F 29 70 E8 0F 29 78 D8 44 0F 29 40 ? 48 8B F9 44 0F 29 48
+RMTS:0:true:48 89 5C 24 ? 55 56 57 41 56 41 57 48 8D AC 24 ? ? ? ? 48 81 EC ? ? ? ? 48 8B F9 E8 ? ? ? ? BB ? ? ? ? 44 8D 7B 50
+AMTT:0:true:48 89 5C 24 ? 57 48 83 EC 20 48 8B FA 48 8B D9 E8 ? ? ? ? 4C 63 C8 83 C8 FF 44 3B C8 0F 84 ? ? ? ? 4D
+SPROJ:14:true:4C 8D 4D 07 4C 8D 45 17 48 8B D3 48 8B CE E8 ? ? ? ? EB 17 4C 8D 4D 07 4C 8D 45 17 48 8B D3 48 8B CE E8 ? ? ? ? EB 02
+WGSITEM:0:true:48 89 5C 24 ? 48 89 74 24 ? 57 48 81 EC ? ? ? ? 48 8B 02 8B F1 48 8D 4C 24 ? 48 89 44 24 ? 48 8B 42
+GGXTLFH:0:true:48 83 EC 28 E8 ? ? ? ? 48 85 C0 75 34 8B 0D ? ? ? ? 65 48 8B 04 25 ? ? ? ? BA ? ? ? ? 48 8B 04 C8 8B 0C 02 D1
+BB_C:0:true:48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 41 55 41 56 41 57 48 83 EC 20 8B 7A 14 8B 5A 10 4C 8B E9 48 8B 4C 24 ? 41 8B E9 4D 8B F8 E8
+C1:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 54 41 55 41 56 41 57 48 83 EC 40 48 8B B1 ? ? ? ? 8A 9A ? ? ? ? 32
+C2:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 56 41 57 48 83 EC 20 48 8B D9 48 8B 49 30 45 33
+C3:0:true:48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 57 48 81 EC ? ? ? ? 48 8B D9 48 8B 89 ? ? ? ? 0F 29 70 E8 0F 29 78 D8 48 8B F2 E8
+C4:0:true:40 53 48 83 EC 20 48 83 79 ? ? 48 8D 05 ? ? ? ? 48 8B D9 48 89 01 74 05 E8 ? ? ? ? 48
+C5:0:true:48 8B 01 4C 8B C1 48 3B D0 75 21 48 8B 40 18 48 89 01 33 C0 48 89 42 18 48 8B 09 48 85 C9 74 06 48 89 41 20 EB 4E 49
+C6:0:true:48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 20 48 8B F9 48 83 C1 30 41 8A F1 48 8B 19 EB 10
+C7:0:true:48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 20 80 3D ? ? ? ? ? 41 8B D8 8B F2 48 8B F9 74 2F E8
+C8:0:false:45 33 C0 48 8B 51 50 48 85 D2 74 06 48 8B 4A 48 EB 02 33 C9 48 85 C9 74 0E 8B 41 5C 24 0F 3C 02 72
+PLPSOM:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 56 41 57 48 81 EC ? ? ? ? 4C 8D B9 ? ? ? ? 48
+RJRESP:0:true:E8 ? ? ? ? 84 C0 0F 84 ? ? ? ? 8B 7D B0 83 FF 09 75 5D 40 38 75 B8 74 1C 40
+SJRESP:75:true:48 8B 0D ? ? ? ? E8 ? ? ? ? 84 C0 74 0F 48 8B 0D ? ? ? ? E8 ? ? ? ? 44 8B F0 8B 05
+ROS_SHA:0:true:E8 ? ? ? ? F6 46 18 04 74 17 48 8D 96 ? ? ? ? 48 8D 4C 24 ? 41 B8 ? ? ? ? E8 ? ? ? ? 48 8D
+ROS_XKE:0:true:E8 ? ? ? ? 8B D7 8B C7 49 8B CE 83 E0 0F FF C2 8A 44 04 20 30 01 48 63 C2 48 FF C1 48 83 F8 10
+GPIFNM:0:true:44 8B CA 4C 8B C1 0F B7 C2 85 D2 78 31 3B 81 ? ? ? ? 73 29 8A 89 ? ? ? ? 8B D0 48 D3 EA 49 8B 88
+GDROPS:0:true:48 8D 2D ? ? ? ? 0F 2F C6 0F 97 C0 88 44 24 40 84 C0 74 4A 8B 0D ? ? ? ? 83 CB FF 44
+GNMNP:0:true:E8 ? ? ? ? 4C 8B E8 48 85 C0 0F 84 ? ? ? ? 48 8B C8 E8 ? ? ? ? 84 C0 0F 84
+3DPED:0:true:4C 8B 15 ? ? ? ? F3 0F 11 45 ? F3 0F 10 05 ? ? ? ? BF ? ? ? ? BB ? ? ? ? 41 BE ? ? ? ? F3 0F 11
+INVALIDS:0:true:E8 ? ? ? ? 41 B8 ? ? ? ? 48 8B D7 48 8B C8 E8 ? ? ? ? EB 07 48 8D 05 ? ? ? ? 48 8B 5C 24 ? 48 83 C4 20 5F C3
+BB_RST:0:true:48 89 5C 24 ? 48 89 6C 24 ? 56 57 41 56 48 83 EC 20 48 8B F2 45 8B F0 32 DB 88 1A 48 8D 54 24 ? 41 B8 ? ? ? ? 48 8B
+BB_RTOK:0:true:48 89 5C 24 ? 55 56 57 48 83 EC 20 33 C0 48 8B EA 48 8B D9 8D 70 01 C6 44 24 ? ? 89 44 24 51 66 89 44 24 ? 88
+INVPLY:0:true:48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC 30 49 8B D9 41 8B F8 48 8B F2 48 8B E9 4D 85 C9 75 16 48 8D 15 ? ? ? ? 48
+WUTDRB:0:true:48 8D 05 ? ? ? ? 48 8D 54 24 ? 48 8B CB 48 89 44 24 ? 48 89 7C 24 ? C6 44 24 ? ? E8 ? ? ? ? 48 8B
\ No newline at end of file
diff --git a/GTAV/GTAV.vcxproj b/GTAV/GTAV.vcxproj
new file mode 100644
index 0000000..d385cb4
--- /dev/null
+++ b/GTAV/GTAV.vcxproj
@@ -0,0 +1,922 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 16.0
+ Win32Proj
+ {d7fd141f-81b7-45af-89d4-9e45c1887955}
+ GTAV
+ 10.0
+
+
+
+ DynamicLibrary
+ true
+ v143
+ Unicode
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ Unicode
+
+
+ DynamicLibrary
+ true
+ v143
+ Unicode
+
+
+ DynamicLibrary
+ false
+ v143
+ Unicode
+ x64
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+ false
+ $(SolutionDir)Build\$(Configuration)\$(ProjectName)\
+ $(SolutionDir)Build\Intermediate\$(Configuration)\$(ProjectName)\
+ $(SolutionDir)Dependencies;$(LibraryPath)
+
+
+
+ Level3
+ true
+ WIN32;_DEBUG;GTAV_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ Use
+ pch.h
+
+
+ Windows
+ true
+ false
+
+
+
+
+ Level3
+ true
+ true
+ true
+ WIN32;NDEBUG;GTAV_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ Use
+ pch.h
+
+
+ Windows
+ true
+ true
+ true
+ false
+
+
+
+
+ Level3
+ true
+ _DEBUG;GTAV_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ Use
+ pch.h
+
+
+ Windows
+ true
+ false
+
+
+
+
+ Level3
+ true
+ NDEBUG;GTAV_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ false
+ NotUsing
+ pch.h
+ stdcpplatest
+ $(ProjectDir)/src;$(ProjectDir);%(AdditionalIncludeDirectories)
+ None
+ false
+ MaxSpeed
+ MultiThreaded
+ true
+ false
+ /MP64 %(AdditionalOptions)
+ true
+ false
+ stdc17
+
+
+ Windows
+ true
+ true
+ true
+ false
+ false
+ $(SolutionDir)Dependencies\cryptopp\lib\cryptlib.lib;%(AdditionalDependencies)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GTAV/GTAV.vcxproj.filters b/GTAV/GTAV.vcxproj.filters
new file mode 100644
index 0000000..a02f097
--- /dev/null
+++ b/GTAV/GTAV.vcxproj.filters
@@ -0,0 +1,2155 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+ Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+
\ No newline at end of file
diff --git a/GTAV/GTAV.vcxproj.user b/GTAV/GTAV.vcxproj.user
new file mode 100644
index 0000000..429333d
--- /dev/null
+++ b/GTAV/GTAV.vcxproj.user
@@ -0,0 +1,6 @@
+
+
+
+ true
+
+
\ No newline at end of file
diff --git a/GTAV/src/dllmain.cpp b/GTAV/src/dllmain.cpp
new file mode 100644
index 0000000..83ba227
--- /dev/null
+++ b/GTAV/src/dllmain.cpp
@@ -0,0 +1,31 @@
+#include "stdafx.h"
+#include "global/vars.h"
+#include "util/threads.h"
+#include "menu/init.h"
+#include "global/auth_vars.h"
+#include "security/security.h"
+
+#include
+#pragma comment(lib, "Winmm.lib")
+
+BOOL APIENTRY DllMain(HMODULE handle, DWORD reason, LPVOID reserved) {
+ switch (reason) {
+ case DLL_PROCESS_ATTACH:
+ global::vars::g_module_handle = handle;
+
+ if (handle) {
+ MODULEINFO module_info;
+ GetModuleInformation(GetCurrentProcess(), handle, &module_info, sizeof(module_info));
+ global::vars::g_cheat_address = { (uint64_t)module_info.lpBaseOfDll, module_info.SizeOfImage };
+ }
+
+ util::threads::add_job(menu::init::entry, handle);
+ break;
+
+ case DLL_PROCESS_DETACH:
+ global::vars::g_unloading = true;
+ break;
+ }
+
+ return TRUE;
+}
\ No newline at end of file
diff --git a/GTAV/src/global/lists.cpp b/GTAV/src/global/lists.cpp
new file mode 100644
index 0000000..5c67701
--- /dev/null
+++ b/GTAV/src/global/lists.cpp
@@ -0,0 +1,737 @@
+#include "lists.h"
+
+namespace global::lists {
+ scroll_struct g_timers[] = {
+ { localization("Unlocked", true), 0 },
+ { localization("100ms", true), 100 },
+ { localization("250ms", true), 250 },
+ { localization("500ms", true), 500 },
+ { localization("750ms", true), 750 },
+ { localization("1s", true), 1000 },
+ { localization("2.5s", true), 2500 },
+ { localization("5s", true), 5000 },
+ { localization("10s", true), 10000 },
+ { localization("15s", true), 15000 },
+ };
+
+ scroll_struct g_distances[] = {
+ { localization("Unlocked", true), 99999.f },
+ { localization("50m", true), 50.f },
+ { localization("100m", true), 100.f },
+ { localization("200m", true), 200.f },
+ { localization("250m", true), 250.f },
+ { localization("300m", true), 300.f },
+ { localization("400m", true), 400.f },
+ { localization("500m", true), 500.f }
+ };
+
+ scroll_struct g_ped_model_popular[] = {
+ { localization("Alien", true), 0x64611296 },
+ { localization("Astronaut", true), 0xE7B31432 },
+ { localization("Playboy (Naked)", true), 0x4498DDE },
+ { localization("Hooker", true), 0x28ABF95 },
+ { localization("Pogo", true), 0xDC59940D },
+ { localization("Stripper", true), 0x52580019 },
+ { localization("Swat", true), 0x8D8F1B10 },
+ { localization("Topless", true), 0x9CF26183 },
+ { localization("Zombie", true), 0xAC4B4506 },
+ };
+
+ scroll_struct g_ped_model_story[] = {
+ { localization("Michael", true), 0xD7114C9 },
+ { localization("Franklin", true), 0x9B22DBAF },
+ { localization("Trevor", true), 0x9B810FA2 },
+ { localization("Amanda", true), 0x6D1E15F7 },
+ { localization("Ashley", true), 0x7EF440DB },
+ { localization("Brad", true), 0xBDBB4922 },
+ { localization("Chef", true), 0x49EADBF6 },
+ { localization("Chris Formage", true), 0x286E54A7 },
+ { localization("Clag", true), 0x6CCFE08A },
+ { localization("Cletus", true), 0xE6631195 },
+ { localization("Dave Norton", true), 0x15CD4C33 },
+ { localization("Denise", true), 0x820B33BD },
+ { localization("Fabien", true), 0xD090C350 },
+ { localization("Floyd", true), 0xB1B196B2 },
+ { localization("Jay Norris", true), 0x7A32EE74 },
+ { localization("Jimmy", true), 0x570462B9 },
+ { localization("Lamar", true), 0x65B93076 },
+ { localization("Lazlow", true), 0xDFE443E5 },
+ { localization("Lester", true), 0x4DA6E849 },
+ { localization("Mrs Phillips", true), 0x3862EEA8 },
+ { localization("Stretch", true), 0x36984358 },
+ { localization("Tao Cheng", true), 0xDC5C5EA5 },
+ { localization("Tennis Coach", true), 0xA23B5F57 },
+ { localization("Tracy", true), 0xDE352A35 },
+ { localization("Wade", true), 0x92991B72 }
+ };
+
+ scroll_struct g_ped_model_animal[] = {
+ { localization("Boar", true), 0xCE5FF074 },
+ { localization("Chimp", true), 0xA8683715 },
+ { localization("Chop", true), 0x14EC17EA },
+ { localization("Cow", true), 0xFCFA9E1E },
+ { localization("Coyote", true), 0x644AC75E },
+ { localization("Crow", true), 0x18012A9F },
+ { localization("Deer", true), 0xD86B5A95 },
+ { localization("Fish", true), 0x2FD800B7 },
+ { localization("Chicken Hawk", true), 0xAAB71F62 },
+ { localization("Hen", true), 0x6AF51FAF },
+ { localization("Husky", true), 0x4E8F95A2 },
+ { localization("Mountain Lion", true), 0x1250D7BA },
+ { localization("Pig", true), 0xB11BAB56 },
+ { localization("Pigeon", true), 0x6A20728 },
+ { localization("Retriever", true), 0x349F33E1 },
+ { localization("Rhesus", true), 0xC2D06F53 },
+ { localization("Rottweiler", true), 0x9563221D },
+ { localization("Seagull", true), 0xD3939DFD },
+ { localization("Tiger Shark", true), 0x6C3F072 },
+ { localization("Shepherd", true), 0x431FC24C },
+ };
+
+ scroll_struct g_ped_model_emergency[] = {
+ { localization("Black Ops", true), 0xB3F3EE34 },
+ { localization("Chem Security", true), 0x2EFEAFD5 },
+ { localization("City Cop", true), 0x5E3DA4A4 },
+ { localization("County Cop", true), 0x9AB35F63 },
+ { localization("Fireman", true), 0xB6B1EDA8 },
+ { localization("Security Guard", true), 0x709220C7 },
+ { localization("Highway Cop", true), 0x739B1EF5 },
+ { localization("Lifeguard", true), 0xB4A6862 },
+ { localization("Marine", true), 0x72C0CAD2 },
+ { localization("Marine (Senior)", true), 0xF0259D83 },
+ { localization("Paramedic", true), 0xB353629E },
+ { localization("Ranger", true), 0xEF7135AE },
+ { localization("Prison Guard", true), 0x56C96FC6 },
+ { localization("Security Guard", true), 0xD768B228 },
+ { localization("Sheriff", true), 0xB144F9B9 },
+ { localization("Snow Cop", true), 0x1AE8BB58 },
+ };
+
+ scroll_struct g_ped_model_role[] = {
+ { localization("Bouncer", true), 0x9FD4292D },
+ { localization("Bride", true), 0x6162EC47 },
+ { localization("Pest Control", true), 0x48114518 },
+ { localization("Doctor", true), 0xD47303AC },
+ { localization("Factory Worker", true), 0x4163A158 },
+ { localization("Garbage Man", true), 0xEE75A00F },
+ { localization("Groom", true), 0xFECE8B85 },
+ { localization("Hunter", true), 0xCE1324DE },
+ { localization("Jesus", true), 0xCE2CB751 },
+ { localization("Mime", true), 0x3CDCA742 },
+ { localization("Priest", true), 0x6437E77D },
+ { localization("Prisoner", true), 0xB1BB9B59 },
+ { localization("Scientist", true), 0x4117D39B },
+ { localization("Spy", true), 0x5B81D86C },
+ };
+
+ scroll_struct g_ped_model_ambient[] = {
+ { localization("Body Builder", true), 0xDA116E7E },
+ { localization("Nonce", true), 0x7DC3908F },
+ { localization("Guido", true), 0xC6B49A2F },
+ { localization("Statue", true), 0x795AC7A8 },
+ { localization("Mani", true), 0xC8BB1E52 },
+ { localization("Griff", true), 0xC454BCBB },
+ };
+
+ scroll_struct g_ped_model_misc[] = {
+ { localization("Dead Hooker", true), 0x73DEA88B },
+ { localization("Imporage", true), 0x348065F5 },
+ { localization("Marston", true), 0x38430167 },
+ { localization("Misty", true), 0xD128FF9D },
+ { localization("Niko", true), 0xEEDACFC9 },
+ };
+
+ scroll_struct g_ped_bones[] = {
+ { localization("Head", true), 31086 },
+ { localization("Neck", true), 39317 },
+ { localization("Chest", true), 24818 },
+ { localization("Right Hand", true), 57005 }, // 28422
+ { localization("Left Hand", true), 18905 }, // 36029
+ { localization("Right Foot", true), 52301 }, // 6286
+ { localization("Left Foot", true), 14201 },
+ { localization("Right Calf", true), 36864 },
+ { localization("Left Calf", true), 63931 },
+ { localization("Right Forearm", true), 28252 },
+ { localization("Left Forearm", true), 61163 },
+ { localization("Right Upper Arm", true), 40269 },
+ { localization("Left Upper Arm", true), 45509 }
+ };
+
+ scroll_struct g_vehicle_bones[] = {
+ { localization("Front: Left Wheel", true), "wheel_lf" },
+ { localization("Front: Right Wheel", true), "wheel_rf" },
+ { localization("Rear: Left Wheel", true), "wheel_lr" },
+ { localization("Rear: Right Wheel", true), "wheel_rr" },
+ { localization("Left: Tail Light", true), "taillight_l" },
+ { localization("Left: Headlight", true), "headlight_l" },
+ { localization("Right: Tail Light", true), "taillight_r" },
+ { localization("Right: Headlight", true), "headlight_r" },
+ { localization("Numberplate", true), "numberplate" },
+ { localization("Exhaust", true), "exhaust" }
+ };
+
+ scroll_struct g_particles[] = {
+ { localization("Purple Cloud 1", true), { "scr_rcbarry2", "scr_clown_appears", false } },
+ { localization("Purple Cloud 2", true), { "scr_rcbarry2", "scr_clown_death", false } },
+ { localization("Purple Cloud 3", true), { "scr_rcbarry2", "scr_exp_clown", false } },
+ { localization("Firework Starburst", true), { "scr_indep_fireworks", "scr_indep_firework_starburst", false } },
+ { localization("Firework Fountain", true), { "scr_indep_fireworks", "scr_indep_firework_fountain", false } },
+ { localization("Firework Shotburst", true), { "scr_indep_fireworks", "scr_indep_firework_shotburst", false } },
+ { localization("Xmas Firework Burst", true), { "proj_xmas_firework", "scr_firework_xmas_spiral_burst_rgw", false } },
+ { localization("Teleport", true), { "scr_rcbarry1", "scr_alien_teleport", false } },
+ { localization("Disintegration", true), { "scr_rcbarry1", "scr_alien_disintegrate", false } },
+ { localization("Drip", true), { "scr_agencyheist", "scr_fbi_mop_drips", false } },
+ { localization("Flower Jet", true), { "scr_rcbarry2", "scr_clown_bul", false } },
+ { localization("Flash", true), { "scr_rcpaparazzo1", "scr_rcpap1_camera", false } },
+ { localization("Blue Flash", true), { "scr_rcbarry1", "scr_alien_impact_bul", false } },
+ { localization("Burnout", true), { "scr_recartheft", "scr_wheel_burnout", false } },
+ { localization("Splash", true), { "scr_trevor1", "scr_trev1_trailer_splash", false } },
+ { localization("Blood", true), { "scr_solomon3", "scr_trev4_747_blood_impact", false } },
+ { localization("Sparks", true), { "scr_family4", "scr_fam4_trailer_sparks", false } },
+ { localization("Shock", true), { "scr_trevor1", "scr_trev1_trailer_boosh", false } },
+ { localization("Money Cloud", true), { "scr_ornate_heist", "scr_heist_ornate_banknotes", false } },
+ { localization("Tire Smoke", true), { "scr_carsteal4", "scr_carsteal4_wheel_burnout", false } },
+ { localization("Clouds", true), { "wpn_projectile", "proj_missile_trail", true } },
+ { localization("Golf Trail", true), { "scr_minigamegolf", "scr_golf_ball_trail", true } },
+ { localization("Tennis Trail", true), { "scr_minigametennis", "scr_tennis_ball_trail", true } },
+ { localization("Water Trail", true), { "core", "trail_splash_water", true } },
+ { localization("Parachute Trail", true), { "core", "ped_parachute_trail", true } },
+ { localization("Flare Trail", true), { "core", "proj_flare_trail", true } },
+ { localization("Blood Trail", true), { "core", "trail_splash_blood", true } },
+ { localization("Grenade Trail", true), { "wpn_projectile", "proj_grenade_trail", true } },
+ { localization("Flaregun Trail", true), { "wpn_projectile", "proj_flare_trail", true } },
+ };
+
+ scroll_struct g_weapons[] = {
+ { localization("Pistol", true), 0x1b06d571 },
+ { localization("Pistol Mk II", true), 0xbfe256d4 },
+ { localization("Combat Pistol", true), 0x5ef9fec4 },
+ { localization("AP Pistol", true), 0x22d8fe39 },
+ { localization("Stun Gun", true), 0x3656c8c1 },
+ { localization("Pistol .50", true), 0x99aeeb3b },
+ { localization("SNS Pistol", true), 0xbfd21232 },
+ { localization("SNS Pistol Mk II", true), 0x88374054 },
+ { localization("Heavy Pistol", true), 0xd205520e },
+ { localization("Vintage Pistol", true), 0x83839c4 },
+ { localization("Flare Gun", true), 0x47757124 },
+ { localization("Marksman Pistol", true), 0xdc4db296 },
+ { localization("Heavy Revolver", true), 0xc1b3c3d1 },
+ { localization("Heavy Revolver Mk II", true), 0xcb96392f },
+ { localization("Double Action Revolver", true), 0x97ea20b8 },
+ { localization("Up-n-Atomizer", true), 0xaf3696a1 },
+ { localization("Ceramic Pistol", true), 0x2b5ef5ec },
+ { localization("Navy Revolver", true), 0x917f6c8c },
+ { localization("Gadget Pistol", true), 0x57a4368c },
+
+ { localization("Micro SMG", true), 0x13532244 },
+ { localization("SMG", true), 0x2be6766b },
+ { localization("SMG Mk II", true), 0x78a97cd0 },
+ { localization("Assault SMG", true), 0xefe7e2df },
+ { localization("Combat PDW", true), 0xa3d4d34 },
+ { localization("Machine Pistol", true), 0xdb1aa450 },
+ { localization("Mini SMG", true), 0xbd248b55 },
+ { localization("Unholy Hellbringer", true), 0x476bf155 },
+
+ { localization("Pump Shotgun", true), 0x1d073a89 },
+ { localization("Pump Shotgun Mk II", true), 0x555af99a },
+ { localization("Sawed-Off Shotgun", true), 0x7846a318 },
+ { localization("Assault Shotgun", true), 0xe284c527 },
+ { localization("Bullpup Shotgun", true), 0x9d61e50f },
+ { localization("Musket", true), 0xa89cb99e },
+ { localization("Heavy Shotgun", true), 0x3aabbbaa },
+ { localization("Double Barrel Shotgun", true), 0xef951fbb },
+ { localization("Sweeper Shotgun", true), 0x12e82d3d },
+ { localization("Combat Shotgun", true), 0x5a96ba4 },
+
+ { localization("Assault Rifle", true), 0xbfefff6d },
+ { localization("Assault Rifle Mk II", true), 0x394f415c },
+ { localization("Carbine Rifle", true), 0x83bf0278 },
+ { localization("Carbine Rifle Mk II", true), 0xfad1f1c9 },
+ { localization("Advanced Rifle", true), 0xaf113f99 },
+ { localization("Special Carbine", true), 0xc0a3098d },
+ { localization("Special Carbine Mk II", true), 0x969c3d67 },
+ { localization("Bullpup Rifle", true), 0x7f229f94 },
+ { localization("Bullpup Rifle Mk II", true), 0x84d6fafd },
+ { localization("Compact Rifle", true), 0x624fe830 },
+ { localization("Military Rifle", true), 0x9d1f17e6 },
+
+ { localization("MG", true), 0x9d07f764 },
+ { localization("Combat MG", true), 0x7fd62962 },
+ { localization("Combat MG Mk II", true), 0xdbbd7280 },
+ { localization("Gusenberg Sweeper", true), 0x61012683 },
+
+ { localization("Sniper Rifle", true), 0x5fc3c11 },
+ { localization("Heavy Sniper", true), 0xc472fe2 },
+ { localization("Heavy Sniper Mk II", true), 0xa914799 },
+ { localization("Marksman Rifle", true), 0xc734385a },
+ { localization("Marksman Rifle Mk II", true), 0x6a6c02e0 },
+
+ { localization("RPG", true), 0xb1ca77b1 },
+ { localization("Grenade Launcher", true), 0xa284510b },
+ { localization("Grenade Launcher Smoke", true), 0x4dd2dc56 },
+ { localization("Minigun", true), 0x42bf8a85 },
+ { localization("Firework Launcher", true), 0x7f7497e5 },
+ { localization("Railgun", true), 0x6d544c99 },
+ { localization("Homing Launcher", true), 0x63ab0442 },
+ { localization("Compact Grenade Launcher", true), 0x781fe4a },
+ { localization("Widowmaker", true), 0xb62d1f67 },
+
+ { localization("Jerry Can", true), 0x34a67b97 },
+ { localization("Hazardous Jerry Can", true), 0xba536372 },
+ { localization("Parachute", true), 0xfbab5776 },
+ { localization("Fire Extinguisher", true), 0x60ec506 },
+ { localization("Digi Scanner", true), 0xfdbadced },
+
+ { localization("Grenade", true), 0x93e220bd },
+ { localization("BZ Gas", true), 0xa0973d5e },
+ { localization("Molotov Cocktail", true), 0x24b17070 },
+ { localization("Sticky Bomb", true), 0x2c3731d9 },
+ { localization("Proximity Mines", true), 0xab564b93 },
+ { localization("Snowballs", true), 0x787f0bb },
+ { localization("Pipe Bombs", true), 0xba45e8b8 },
+ { localization("Baseball", true), 0x23c9f95c },
+ { localization("Tear Gas", true), 0xfdbc8a50 },
+ { localization("Flare", true), 0x497facc3 },
+
+ { localization("Antique Cavalry Dagger", true), 0x92a27487 },
+ { localization("Baseball Bat", true), 0x958a4a8f },
+ { localization("Broken Bottle", true), 0xf9e6aa4b },
+ { localization("Crowbar", true), 0x84bd7bfd },
+ { localization("Flashlight", true), 0x8bb05fd7 },
+ { localization("Golf Club", true), 0x440e4788 },
+ { localization("Hammer", true), 0x4e875f73 },
+ { localization("Hatchet", true), 0xf9dcbf2d },
+ { localization("Brass Knuckles", true), 0xd8df3c3c },
+ { localization("Knife", true), 0x99b507ea },
+ { localization("Machete", true), 0xdd5df8d9 },
+ { localization("Switchblade", true), 0xdfe37640 },
+ { localization("Nightstick", true), 0x678b81b1 },
+ { localization("Pipe Wrench", true), 0x19044ee0 },
+ { localization("Battle Axe", true), 0xcd274149 },
+ { localization("Pool Cue", true), 0x94117305 },
+ { localization("Stone Hatchet", true), 0x3813fc08 },
+ };
+
+ scroll_struct g_explosions[] = {
+ { localization("Grenade", true), EXPLOSION_GRENADE },
+ { localization("Grenade Launcher", true), EXPLOSION_GRENADELAUNCHER },
+ { localization("Sticky Bomb", true), EXPLOSION_STICKYBOMB },
+ { localization("Molotov", true), EXPLOSION_MOLOTOV },
+ { localization("Rocket", true), EXPLOSION_ROCKET },
+ { localization("Tank Shell", true), EXPLOSION_TANKSHELL },
+ { localization("Hi-Octane", true), EXPLOSION_HI_OCTANE },
+ { localization("Car", true), EXPLOSION_CAR },
+ { localization("Plane", true), EXPLOSION_PLANE },
+ { localization("Petrol Pump", true), EXPLOSION_PETROL_PUMP },
+ { localization("Bike", true), EXPLOSION_BIKE },
+ { localization("Steam", true), EXPLOSION_DIR_STEAM },
+ { localization("Flame", true), EXPLOSION_DIR_FLAME },
+ { localization("Water Hydrant", true), EXPLOSION_DIR_WATER_HYDRANT },
+ { localization("Gas Fire", true), EXPLOSION_DIR_GAS_CANISTER },
+ { localization("Boat", true), EXPLOSION_BOAT },
+ { localization("Ship Destroy", true), EXPLOSION_SHIP_DESTROY },
+ { localization("Truck", true), EXPLOSION_TRUCK },
+ { localization("Bullet", true), EXPLOSION_BULLET },
+ { localization("Smoke Grenade Launcher", true), EXPLOSION_SMOKEGRENADELAUNCHER },
+ { localization("Smoke Grenade", true), EXPLOSION_SMOKEGRENADE },
+ { localization("Bz Gas", true), EXPLOSION_BZGAS },
+ { localization("Flare", true), EXPLOSION_FLARE },
+ { localization("Gas Canister", true), EXPLOSION_GAS_CANISTER },
+ { localization("Extinguisher", true), EXPLOSION_EXTINGUISHER },
+ { localization("Programmable AR", true), EXPLOSION_PROGRAMMABLEAR },
+ { localization("Train", true), EXPLOSION_TRAIN },
+ { localization("Barrel", true), EXPLOSION_BARREL },
+ { localization("Propane", true), EXPLOSION_PROPANE },
+ { localization("Blimp", true), EXPLOSION_BLIMP },
+ { localization("Flame Explode", true), EXPLOSION_DIR_FLAME_EXPLODE },
+ { localization("Tanker", true), EXPLOSION_TANKER },
+ { localization("Plane Rocket", true), EXPLOSION_PLANE_ROCKET },
+ { localization("Vehicle Bullet", true), EXPLOSION_VEHICLE_BULLET },
+ { localization("Gas Tank", true), EXPLOSION_GAS_TANK },
+ { localization("Bird Crap", true), EXPLOSION_BIRD_CRAP },
+ };
+
+ scroll_struct g_gravity[] = {
+ { localization("Earth", true), 9.807f },
+ { localization("Moon", true), 1.62f },
+ { localization("Mercury", true), 3.7f },
+ { localization("Jupiter", true), 24.79f },
+ { localization("Mars", true), 3.711f },
+ { localization("Saturn", true), 10.44f },
+ { localization("Uranus/Venus", true), 8.87f },
+ { localization("Neptune", true), 11.15f },
+ { localization("Sun", true), 274.0f },
+ };
+
+ scroll_struct g_opacity[] = {
+ { localization("0%", true), 0 },
+ { localization("20%", true), 51 },
+ { localization("40%", true), 102 },
+ { localization("60%", true), 153 },
+ { localization("80%", true), 204 },
+ { localization("100%", true), 255 }
+ };
+
+ scroll_struct g_vehicle_weapons[] = {
+ { localization("RPG", true), 0xb1ca77b1 },
+ { localization("Snowball", true), 0x787F0BB },
+ { localization("Firework", true), 0x7f7497e5 },
+ { localization("Flare", true), 0x497FACC3 },
+ { localization("Player Laser", true), 0xeffd014b },
+ { localization("Enemy Laser", true), 0x5d6660ab },
+ { localization("Space Rocket", true), 0xf8a3939f },
+ { localization("Player Bullet", true), 0x4b139b2d },
+ { localization("Player Buzzard", true), 0x46b89c8e },
+ };
+
+ scroll_struct, math::vector3_>> g_acrobatics[] = {
+ { localization("Wheelie", true), { { 0.f, 0.f, 1.f }, { 0.f, 5.0f, 0.f } } },
+ { localization("Kickflip", true), { { 0.f, 0.0f, 11.5f }, { 5.f, 0.f, 0.f } } },
+ { localization("Double Kickflip", true), { { 0.f, 0.0f, 21.f }, { 10.f, 0.f, 0.f } } },
+ { localization("Quadruple Kickflip", true), {{ 0.f, 0.0f, 33.f }, { 15.f, 0.f, 0.f } } },
+ { localization("Leap", true), {{ 0.f, 0.f, 20.f }, { 0.f, 0.f, 0.f } } },
+ { localization("Slingshot", true), {{ 0.f, 0.f, 200.f }, { 0.f, 0.f, 0.f } } },
+ { localization("Backflip", true), {{ 0.f, 0.f, 15.5f }, { 0.f, 1.3f, 0.f } } },
+ { localization("Frontflip", true), {{ 0.f, 0.f, 15.5f }, { 0.f, -1.f, 0.f } } },
+ { localization("Right Jump", true), {{ 0.f, 0.f, 2.8f }, { -3.f, 0.f, 0.f } } },
+ { localization("Left Jump", true), {{ 0.f, 0.f, 2.8f }, { 3.f, 0.f, 0.f } } }
+ };
+
+ scroll_struct> g_popular_locations[] = {
+ { localization("Diamond Casino", true), {919.94f, 50.7f, 80.90f } },
+ { localization("Los Santos Customs", true), {-365.425f, -131.809f, 37.873f } },
+ { localization("Los Santos Airport", true), {-1052.392f, -2933.508f, 13.951f } },
+ { localization("Sandy Shores Airfield", true), {1770.241f, 3266.942f, 41.620f } },
+ { localization("Eclipse Towers", true), {-807.247f, 301.868f, 86.073f } },
+ { localization("Eclipse Towers Garage (Outside)", true), {-795.46f, 308.89f, 85.71f } },
+ { localization("Eclipse Towers Roof", true), {-779.026f, 331.695f, 238.828f } },
+ { localization("Fort Zancudo", true), {-2119.877f, 3284.521f, 32.810f } },
+ { localization("Mount Chiliad", true), {498.142f, 5593.435f, 795.364f } },
+ { localization("Michael's House", true), {-803.462f, 172.808f, 72.845f } },
+ { localization("Franklin's House", true), {0.603f, 527.954f, 174.628f } },
+ { localization("Lester's House", true), {1273.727f, -1712.099f, 54.771f } },
+ { localization("Trevor's Meth Lab", true), {1393.173f, 3602.266f, 38.942f } },
+ { localization("Floyd's Apartment", true), {-1159.055f, -1520.858f, 10.633f } },
+ { localization("Prison", true), {1678.585f, 2513.168f, 45.565f } },
+ { localization("Torture Room", true), {144.672f, -2201.973f, 4.688f } },
+ { localization("Del Perro Beach", true), {-1583.278f, -1099.167f, 4.956f } },
+ { localization("Del Perro Pier", true), {-1731.210f, -1110.329f, 13.102f } },
+ { localization("Helicopter Pad", true), {-724.384f, -1443.399f, 5.001f } },
+ { localization("Maze Bank", true), {-75.858f, -817.789f, 326.174f } },
+ { localization("FIB Building", true), {135.786f, -749.233f, 258.152f } },
+ { localization("IAA Office", true), {121.282f, -622.149f, 206.047f } },
+ { localization("Blaine County Bank", true), {-108.245f, 6466.301f, 31.627f } },
+ { localization("Pacific Standard Vault", true), {256.786f, 226.157f, 101.876f } },
+ { localization("Humane Labs", true), {3616.195f, 3738.724f, 28.690f } },
+ { localization("Humane Labs Tunnel", true), {3524.949f, 3708.167f, 20.992f } },
+ { localization("Playboy Mansion", true), {-1461.834f, 179.259f, 54.752f } },
+ { localization("Mors Mutual Insurance", true), {-232.084f, -1163.830f, 22.948f } },
+ { localization("Impound Lot", true), {401.057f, -1631.766f, 29.293f } },
+ { localization("Police Station", true), {441.259f, -983.160f, 30.690f } },
+ { localization("Underwater UFO", true), {763.656f, 7381.180f, -110.135f } },
+ { localization("Vinewood Sign", true), {741.941f, 1198.555f, 326.344f } },
+ { localization("Waterfall", true), {-597.9525f, 4475.2910f, 25.6890f } },
+ { localization("Island", true), {20.968f, 7636.292f, 15.943f } },
+ { localization("Bank Vault", true), { 255.5819f, 217.6896f, 101.6834f }}
+ };
+
+ scroll_struct g_object_model_small[] = {
+ { localization("Alarm", true), 0x9E5FFFCB },
+ { localization("Backpack", true), 0x47B7DAED },
+ { localization("Barbell", true), 0xE2FBA8D8 },
+ { localization("Basketball", true), 0x6DB9599A },
+ { localization("Beachball", true), 0x81ECE1F },
+ { localization("Bear 1", true), 0x772114C9 },
+ { localization("Bear 2", true), 0x3CF34F26 },
+ { localization("Bigfoot Mask", true), 0xC9751EF7 },
+ { localization("Bong", true), 0xF0A61994 },
+ { localization("Campfire", true), 0xC079B265 },
+ { localization("Candle", true), 0x203011A1 },
+ { localization("Dildo", true), 0xE6CB661E },
+ { localization("Dog Cage", true), 0x16A39A90 },
+ { localization("Egg", true), 0x6B795EBC },
+ { localization("EMP", true), 0x3794ACC9 },
+ { localization("Engine", true), 0xDD75614 },
+ { localization("Fish", true), 0xCE3D7AA0 },
+ { localization("Gold", true), 0xF046EA37 },
+ { localization("Guitar 1", true), 0xD5C0BC07 },
+ { localization("Guitar 2", true), 0xA4E7E0A7 },
+ { localization("Hotdog", true), 0x98EE1ACD },
+ { localization("Katana", true), 0xE2BA016F },
+ { localization("Lawnmower", true), 0x1AB39621 },
+ { localization("Leafblower", true), 0x5F989485 },
+ { localization("Minigun", true), 0xC89630B8 },
+ { localization("Missile", true), 0xB2274905 },
+ { localization("Parachute", true), 0x34DCF0A3 },
+ { localization("Pumpkin", true), 0x83C07621 },
+ { localization("Safe", true), 0x40F52369 },
+ { localization("Saxophone", true), 0x1212FE11 },
+ { localization("Scuba Tank", true), 0x18B8F776 },
+ { localization("Shield", true), 0x44083A8F },
+ { localization("Shit", true), 0x84898EFE },
+ { localization("Soccer Ball", true), 0xD541462D },
+ { localization("Toilet", true), 0x6F9939C7 },
+ { localization("Traffic Cone", true), 0xE0264F5D },
+ { localization("TV", true), 0x5C9F1C35 },
+ { localization("Volleyball", true), 0xC79A987E },
+ { localization("Weed", true), 0x1AFA6A0A },
+ };
+
+ scroll_struct g_object_model_medium[] = {
+ { localization("Anti-Aircraft", true), 0x98D3236B },
+ { localization("Arcade", true), 0xA50DDDD0 },
+ { localization("Bed", true), 0xB374CC1F },
+ { localization("Bench", true), 0x6BA514AC },
+ { localization("Blast Fence", true), 0xB4978950 },
+ { localization("Block", true), 0xC3F13FCC },
+ { localization("Bumper Car", true), 0xFB631122 },
+ { localization("Cheetah", true), 0x37D80B0E },
+ { localization("Dinghy", true), 0x282D6851 },
+ { localization("Entity XF", true), 0xB155FD87 },
+ { localization("Ferris Car", true), 0x1AFA509F },
+ { localization("Helicopter", true), 0x8E8C7A5B },
+ { localization("JB700", true), 0x72F54E90 },
+ { localization("Jetski Ramp", true), 0xBF8918DE },
+ { localization("Log", true), 0xACD6D1AB },
+ { localization("Mannequin", true), 0x7FFBC1E2 },
+ { localization("Orange Sphere", true), 0x8DA1C0E },
+ { localization("Propeller", true), 0x5D20643D },
+ { localization("Ramp 1", true), 0xB157C9E4 },
+ { localization("Ramp 2", true), 0xF4F1511E },
+ { localization("Ramp 3", true), 0x93948E5E },
+ { localization("Repair", true), 0xE6FA7770 },
+ { localization("Sand Block", true), 0xF724026D },
+ { localization("Sofa", true), 0x5EF5520E },
+ { localization("Stairs", true), 0x757C28D },
+ { localization("Umbrella", true), 0xDCA9A809 },
+ { localization("Xmas Tree", true), 0xE3BA450 },
+ };
+
+ scroll_struct g_object_model_large[] = {
+ { localization("Asteroid", true), 0xDF9841D7 },
+ { localization("Barge 1", true), 0x9C762726 },
+ { localization("Barge 2", true), 0x8AF58425 },
+ { localization("Cablecar", true), 0xD44295DD },
+ { localization("Crane", true), 0x7D10B85C },
+ { localization("Crane Cab", true), 0x3673E396 },
+ { localization("Ferris Wheel", true), 0xC42C019A },
+ { localization("Halfpipe", true), 0xF66F582F },
+ { localization("Jet", true), 0xC2BC19CD },
+ { localization("Lava", true), 0xD733DF },
+ { localization("Radar", true), 0x8973A868 },
+ { localization("Large Tarp", true), 0x6FA720A4 },
+ { localization("Tree", true), 0xEDF5CD3C },
+ { localization("Tugboat", true), 0xF20B1BDD },
+ { localization("UFO", true), 0xB467C540 },
+ { localization("Windmill", true), 0x745F3383 },
+ { localization("Xmas Tree", true), 0x7121AC4 },
+ };
+
+ scroll_struct g_object_model_flags[] = {
+ { localization("Canada", true), joaat("prop_flag_canada") },
+ { localization("Europe", true), joaat("prop_flag_eu") },
+ { localization("France", true), joaat("prop_flag_france") },
+ { localization("Germany", true), joaat("prop_flag_german") },
+ { localization("Ireland", true), joaat("prop_flag_ireland") },
+ { localization("Japan", true), joaat("prop_flag_japan") },
+ { localization("City of Los Santos", true), joaat("prop_flag_ls") },
+ { localization("Los Santos Fire Department", true), joaat("prop_flag_lsfd") },
+ { localization("Los Santos Services", true), joaat("prop_flag_lsservices") },
+ { localization("Mexico", true), joaat("prop_flag_mexico") },
+ { localization("Russia", true), joaat("prop_flag_russia") },
+ { localization("San Andreas Republic", true), joaat("prop_flag_sa") },
+ { localization("San Andreas Police Department", true), joaat("prop_flag_sapd") },
+ { localization("Scotland", true), joaat("prop_flag_scotland") },
+ { localization("Los Santos County Sheriff", true), joaat("prop_flag_sheriff") },
+ { localization("United Kingdom", true), joaat("prop_flag_uk") },
+ { localization("United States", true), joaat("prop_flag_us") },
+ };
+
+ scroll_struct g_precisions[] = {
+ { localization(".0001", false), .0001f },
+ { localization(".001", false), .001f },
+ { localization(".01", false), .01f },
+ { localization(".1", false), .1f },
+ { localization("1", true), 1.f },
+ { localization("2", true), 2.f },
+ { localization("5", true), 5.f },
+ { localization("10", true), 10.f },
+ { localization("50", true), 50.f },
+ { localization("100", true), 100.f }
+ };
+
+ scroll_struct> g_sounds[] = {
+ { localization("Alien", true), { "SPAWN", "BARRY_01_SOUNDSET" } },
+ { localization("Whistle", true), { "Franklin_Whistle_For_Chop", "SPEECH_RELATED_SOUNDS" } },
+ { localization("EMP", true), { "EMP_Vehicle_Hum", "DLC_HEIST_BIOLAB_DELIVER_EMP_SOUNDS" } },
+ { localization("Helicopter", true), { "Helicopter_Wind", "BASEJUMPS_SOUNDS" } },
+ { localization("Scan", true), { "SCAN", "EPSILONISM_04_SOUNDSET" } },
+ { localization("Leafblower", true), { "GARDENING_LEAFBLOWER_ANIM_TRIGGERED", "" } },
+ { localization("Unlock", true), { "Bar_Unlock_And_Raise", "DLC_IND_ROLLERCOASTER_SOUNDS" } },
+ { localization("Brakes", true), { "MOD_SHOP_BRAKES_ONESHOT", "" } },
+
+ { localization("Carwash", true), { "SPRAY", "CARWASH_SOUNDS" } },
+ { localization("Carwash 2", true), { "SPRAY_CAR", "CARWASH_SOUNDS" } },
+ { localization("Carwash 3", true), { "DRYER", "CARWASH_SOUNDS" } },
+
+ { localization("Keycard", true), { "Keycard_Success", "DLC_HEISTS_BIOLAB_FINALE_SOUNDS" } },
+ { localization("Keycard 2", true), { "Keycard_Fail", "DLC_HEISTS_BIOLAB_FINALE_SOUNDS" } },
+
+ { localization("Ringtone", true), { "Remote_Ring", "Phone_SoundSet_Michael" } },
+ { localization("Ringtone 2", true), { "PED_PHONE_DIAL_01", "" } },
+
+ { localization("Beep", true), { "Crate_Beeps", "MP_CRATE_DROP_SOUNDS" } },
+ { localization("Beep 2", true), { "Crate_Collect", "MP_CRATE_DROP_SOUNDS" } },
+ { localization("Endless Beep", true), { "CONTINUAL_BEEP", "EPSILONISM_04_SOUNDSET" } },
+ { localization("Short Beep", true), { "IDLE_BEEP", "EPSILONISM_04_SOUNDSET" } },
+ { localization("Long Beep", true), { "Beep_Green", "DLC_HEIST_HACKING_SNAKE_SOUNDS" } },
+ { localization("Solo Fast Beep", true), { "Beep_Red", "DLC_HEIST_HACKING_SNAKE_SOUNDS" } },
+ { localization("Confirm Beep", true), { "CONFIRM_BEEP", "HUD_MINI_GAME_SOUNDSET" } },
+
+ { localization("5s Timer", true), { "5_Second_Timer", "DLC_HEISTS_GENERAL_FRONTEND_SOUNDS" } },
+ { localization("5s Timer 2", true), { "MP_5_SECOND_TIMER", "HUD_FRONTEND_DEFAULT_SOUNDSET" } },
+ { localization("Idle Timer", true), { "MP_IDLE_TIMER", "HUD_FRONTEND_DEFAULT_SOUNDSET" } },
+ { localization("Out of Bounds Timer", true), { "Out_Of_Bounds_Timer", "DLC_HEISTS_GENERAL_FRONTEND_SOUNDS" } },
+ { localization("Timer Stop", true), { "TIMER_STOP", "HUD_MINI_GAME_SOUNDSET" } },
+
+ { localization("Pickup", true), { "PICK_UP", "HUD_FRONTEND_DEFAULT_SOUNDSET" } },
+ { localization("Pickup 2", true), { "PICK_UP_SOUND", "HUD_FRONTEND_CUSTOM_SOUNDSET" } },
+ { localization("Pickup 3", true), { "PICKUP_WEAPON_SMOKEGRENADE", "HUD_FRONTEND_WEAPONS_PICKUPS_SOUNDSET" } },
+
+ { localization("Silence", true), { "3_2_1_NON_RACE", "HUD_MINI_GAME_SOUNDSET" } },
+ { localization("Silence 2", true), { "Airhorn", "DLC_TG_Running_Back_Sounds" } },
+
+ { localization("Screen Flash", true), { "ScreenFlash", "MissionFailedSounds" } },
+ { localization("Screen Flash 2", true), { "ScreenFlash", "WastedSounds" } },
+
+ { localization("Click", true), { "Click", "DLC_HEIST_HACKING_SNAKE_SOUNDS" } },
+ { localization("Click Fail", true), { "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE" } },
+ { localization("Click Special", true), { "Click_Special", "WEB_NAVIGATION_SOUNDS_PHONE" } },
+
+ { localization("Nav Arrow Ahead", true), { "Nav_Arrow_Ahead", "DLC_HEISTS_GENERAL_FRONTEND_SOUNDS" } },
+ { localization("Nav Arrow Left", true), { "Nav_Arrow_Left", "DLC_HEISTS_GENERAL_FRONTEND_SOUNDS" } },
+ { localization("Nav Arrow Right", true), { "Nav_Arrow_Right", "DLC_HEISTS_GENERAL_FRONTEND_SOUNDS" } },
+
+ { localization("Checkpoint Missed", true), { "CHECKPOINT_MISSED", "HUD_MINI_GAME_SOUNDSET" } },
+ { localization("Checkpoint Ahead", true), { "CHECKPOINT_AHEAD", "HUD_MINI_GAME_SOUNDSET" } },
+ { localization("Checkpoint Perfect", true), { "CHECKPOINT_PERFECT", "HUD_MINI_GAME_SOUNDSET" } },
+ { localization("Checkpoint Under Bridge", true), { "CHECKPOINT_UNDER_THE_BRIDGE", "HUD_MINI_GAME_SOUNDSET" } },
+
+ { localization("Menu Select", true), { "Apt_Style_Purchase", "DLC_APT_Apartment_SoundSet" } },
+ { localization("Menu Select 2", true), { "SELECT", "HUD_MINI_GAME_SOUNDSET" } },
+
+ { localization("Hack Failed", true), { "Hack_Failed", "DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS" } },
+ { localization("Hack Success", true), { "Hack_Success", "DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS" } },
+
+ { localization("Pin Bad", true), { "Pin_Bad", "DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS" } },
+ { localization("Pin Button", true), { "PIN_BUTTON", "ATM_SOUNDS" } },
+ { localization("Pin Good", true), { "Pin_Good", "DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS" } },
+
+ { localization("Tennis Match Point", true), { "TENNIS_MATCH_POINT", "HUD_AWARDS" } },
+ { localization("Tennis Point Won", true), { "TENNIS_POINT_WON", "HUD_AWARDS" } },
+
+ { localization("Start Squelch", true), { "Start_Squelch", "CB_RADIO_SFX" } },
+ { localization("End Squelch", true), { "End_Squelch", "CB_RADIO_SFX" } },
+
+ { localization("Garage Door Open", true), { "RAMP_UP", "TRUCK_RAMP_DOWN" } },
+ { localization("1st Person Transition", true), { "1st_Person_Transition", "PLAYER_SWITCH_CUSTOM_SOUNDSET" } },
+ { localization("Emphasis", true), { "3_2_1", "HUD_MINI_GAME_SOUNDSET" } },
+ { localization("5s Warning", true), { "5_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET" } },
+ { localization("Notification", true), { "ATM_WINDOW", "HUD_FRONTEND_DEFAULT_SOUNDSET" } },
+ { localization("Challenge Unlocked", true), { "CHALLENGE_UNLOCKED", "HUD_AWARDS" } },
+ { localization("Mission Success", true), { "BASE_JUMP_PASSED", "HUD_AWARDS" } },
+ { localization("Wasted", true), { "Bed", "WastedSounds" } },
+ { localization("Bus Pickup", true), { "Bus_Schedule_Pickup", "DLC_PRISON_BREAK_HEIST_SOUNDS" } },
+ { localization("Taken Photo", true), { "Camera_Shoot", "Phone_Soundset_Franklin" } },
+ { localization("Switching Characters", true), { "CHARACTER_SELECT", "HUD_FRONTEND_DEFAULT_SOUNDSET" } },
+ { localization("Close Window", true), { "CLOSE_WINDOW", "LESTER1A_SOUNDS" } },
+ { localization("Crash", true), { "Crash", "DLC_HEIST_HACKING_SNAKE_SOUNDS" } },
+ { localization("Delete", true), { "DELETE", "HUD_DEATHMATCH_SOUNDSET" } },
+ { localization("Truck Rev", true), { "DiggerRevOneShot", "BulldozerDefault" } },
+ { localization("Drill Pin Break", true), { "Drill_Pin_Break", "DLC_HEIST_FLEECA_SOUNDSET" } },
+ { localization("Edit", true), { "EDIT", "HUD_DEATHMATCH_SOUNDSET" } },
+ { localization("Error", true), { "ERROR", "HUD_AMMO_SHOP_SOUNDSET" } },
+ { localization("Failure", true), { "Failure", "DLC_HEIST_HACKING_SNAKE_SOUNDS" } },
+ { localization("Falling Crates", true), { "Falling_Crates", "EXILE_1" } },
+ { localization("Car Breakdown", true), { "FAMILY_1_CAR_BREAKDOWN", "FAMILY1_BOAT" } },
+ { localization("First Place", true), { "FIRST_PLACE", "HUD_MINI_GAME_SOUNDSET" } },
+ { localization("Flight School Passed", true), { "FLIGHT_SCHOOL_LESSON_PASSED", "HUD_AWARDS" } },
+ { localization("Focus In", true), { "FocusIn", "HintCamSounds" } },
+ { localization("Go", true), { "GO", "HUD_MINI_GAME_SOUNDSET" } },
+ { localization("Goal", true), { "Goal", "DLC_HEIST_HACKING_SNAKE_SOUNDS" } },
+ { localization("Grab Parachute", true), { "Grab_Parachute", "BASEJUMPS_SOUNDS" } },
+ { localization("Hang Up", true), { "Hang_Up", "Phone_SoundSet_Michael" } },
+ { localization("Highlight Error", true), { "Highlight_Error", "DLC_HEIST_PLANNING_BOARD_SOUNDS" } },
+ { localization("Hit", true), { "Hit", "RESPAWN_SOUNDSET" } },
+ { localization("Hit 2", true), { "Hit_1", "LONG_PLAYER_SWITCH_SOUNDS" } },
+ { localization("Hit Out", true), { "Hit_Out", "PLAYER_SWITCH_CUSTOM_SOUNDSET" } },
+ { localization("Cash Counter Complete", true), { "LOCAL_PLYR_CASH_COUNTER_COMPLETE", "DLC_HEISTS_GENERAL_FRONTEND_SOUNDS" } },
+ { localization("Lose Match", true), { "LOOSE_MATCH", "HUD_MINI_GAME_SOUNDSET" } },
+ { localization("Loser", true), { "LOSER", "HUD_AWARDS" } },
+ { localization("Menu Accept", true), { "Menu_Accept", "Phone_SoundSet_Default" } },
+ { localization("Mission Pass Notify", true), { "Mission_Pass_Notify", "DLC_HEISTS_GENERAL_FRONTEND_SOUNDS" } },
+ { localization("Award", true), { "MP_AWARD", "HUD_FRONTEND_DEFAULT_SOUNDSET" } },
+ { localization("Idle Kick", true), { "MP_IDLE_KICK", "HUD_FRONTEND_DEFAULT_SOUNDSET" } },
+ { localization("Rank Up", true), { "MP_RANK_UP", "HUD_FRONTEND_DEFAULT_SOUNDSET" } },
+ { localization("Wave Complete", true), { "MP_WAVE_COMPLETE", "HUD_FRONTEND_DEFAULT_SOUNDSET" } },
+ { localization("On", true), { "ON", "NOIR_FILTER_SOUNDS" } },
+ { localization("On Call Player Join", true), { "On_Call_Player_Join", "DLC_HEISTS_GENERAL_FRONTEND_SOUNDS" } },
+ { localization("Open Window", true), { "OPEN_WINDOW", "LESTER1A_SOUNDS" } },
+ { localization("Other Text", true), { "OTHER_TEXT", "HUD_AWARDS" } },
+ { localization("Player Collect", true), { "Player_Collect", "DLC_PILOT_MP_HUD_SOUNDS" } },
+ { localization("Power Down", true), { "Power_Down", "DLC_HEIST_HACKING_SNAKE_SOUNDS" } },
+ { localization("Pre Screen Stinger", true), { "Pre_Screen_Stinger", "DLC_HEISTS_FAILED_SCREEN_SOUNDS" } },
+ { localization("Property Purchase", true), { "PROPERTY_PURCHASE", "HUD_AWARDS" } },
+ { localization("Money Lost", true), { "PS2A_MONEY_LOST", "PALETO_SCORE_2A_BANK_SS" } },
+ { localization("Put Away", true), { "Put_Away", "Phone_SoundSet_Michael" } },
+ { localization("Round Ending", true), { "ROUND_ENDING_STINGER_CUSTOM", "CELEBRATION_SOUNDSET" } },
+ { localization("Heartbeat", true), { "Short_Transition_In", "PLAYER_SWITCH_CUSTOM_SOUNDSET" } },
+ { localization("Bomb Loading", true), { "STUN_COLLECT", "MINUTE_MAN_01_SOUNDSET" } },
+ };
+
+ scroll_struct g_markers[] = {
+ { localization("Upside Down Cone", true), 0 },
+ { localization("Vertical Cylinder", true), 0 },
+ { localization("Thick Chevron Up", true), 0 },
+ { localization("Thin Chevron Up", true), 0 },
+ { localization("Checkered Flag Rect", true), 0 },
+ { localization("Checkered Flag Circle", true), 0 },
+ { localization("Verticle Circle", true), 0 },
+ { localization("Plane Model", true), 0 },
+ { localization("Lost MC Transparent", true), 0 },
+ { localization("Lost MC", true), 0 },
+ { localization("Number 0", true), 0 },
+ { localization("Number 1", true), 0 },
+ { localization("Number 2", true), 0 },
+ { localization("Number 3", true), 0 },
+ { localization("Number 4", true), 0 },
+ { localization("Number 5", true), 0 },
+ { localization("Number 6", true), 0 },
+ { localization("Number 7", true), 0 },
+ { localization("Number 8", true), 0 },
+ { localization("Number 9", true), 0 },
+ { localization("Chevron Up X1", true), 0 },
+ { localization("Chevron Up X2", true), 0 },
+ { localization("Chevron Up X3", true), 0 },
+ { localization("Horizontal Circle Fat", true), 0 },
+ { localization("Replay Icon", true), 0 },
+ { localization("Horizontal Circle Skinny", true), 0 },
+ { localization("Horizontal Circle Skinny Arrow", true), 0 },
+ { localization("Horizontal Split Arrow Circle", true), 0 },
+ { localization("Debug Sphere", true), 0 },
+ { localization("Dollar Sign", true), 0 },
+ { localization("Horizontal Bars", true), 0 },
+ { localization("Wolf Head", true), 0 },
+ { localization("Question Mark", true), 0 },
+ { localization("Plane Symbol", true), 0 },
+ { localization("Helicopter Symbol", true), 0 },
+ { localization("Boat Symbol", true), 0 },
+ { localization("Car Symbol", true), 0 },
+ { localization("Motorcycle Symbol", true), 0 },
+ { localization("Bike Symbol", true), 0 },
+ { localization("Truck Symbol", true), 0 },
+ { localization("Parachute Symbol", true), 0 },
+ { localization("Jetpack Symbol", true), 0 },
+ { localization("Sawblade Symbol", true), 0 },
+ };
+}
\ No newline at end of file
diff --git a/GTAV/src/global/lists.h b/GTAV/src/global/lists.h
new file mode 100644
index 0000000..52ed2ca
--- /dev/null
+++ b/GTAV/src/global/lists.h
@@ -0,0 +1,43 @@
+#pragma once
+#include "stdafx.h"
+#include "menu/base/options/scroll.h"
+#include "util/math.h"
+#include "rage/types/base_types.h"
+
+namespace global::lists {
+ struct particle {
+ const char* m_dict;
+ const char* m_texture;
+ bool m_looped;
+
+ particle(const char* a = "", const char* b = "", bool c = false)
+ : m_dict(a), m_texture(b), m_looped(c) {}
+ };
+
+ extern scroll_struct g_timers[10];
+ extern scroll_struct g_distances[8];
+ extern scroll_struct g_ped_model_popular[9];
+ extern scroll_struct g_ped_model_story[25];
+ extern scroll_struct g_ped_model_animal[20];
+ extern scroll_struct g_ped_model_emergency[16];
+ extern scroll_struct g_ped_model_role[14];
+ extern scroll_struct g_ped_model_ambient[6];
+ extern scroll_struct g_ped_model_misc[5];
+ extern scroll_struct g_particles[29];
+ extern scroll_struct g_ped_bones[13];
+ extern scroll_struct g_vehicle_bones[10];
+ extern scroll_struct g_weapons[98];
+ extern scroll_struct g_explosions[36];
+ extern scroll_struct g_gravity[9];
+ extern scroll_struct g_opacity[6];
+ extern scroll_struct g_vehicle_weapons[9];
+ extern scroll_struct, math::vector3_>> g_acrobatics[10];
+ extern scroll_struct> g_popular_locations[35];
+ extern scroll_struct g_object_model_small[39];
+ extern scroll_struct g_object_model_medium[27];
+ extern scroll_struct g_object_model_large[17];
+ extern scroll_struct g_object_model_flags[17];
+ extern scroll_struct g_precisions[10];
+ extern scroll_struct> g_sounds[109];
+ extern scroll_struct g_markers[43];
+}
\ No newline at end of file
diff --git a/GTAV/src/global/ui_vars.cpp b/GTAV/src/global/ui_vars.cpp
new file mode 100644
index 0000000..53dc211
--- /dev/null
+++ b/GTAV/src/global/ui_vars.cpp
@@ -0,0 +1,94 @@
+#include "ui_vars.h"
+
+namespace global::ui {
+ float g_option_scale = 0.0315f;
+ float g_option_height = g_option_scale * 10.f;
+
+ std::string g_render_queue[100];
+ std::string g_rendering_tooltip;
+ line_2d* m_line_2d;
+ int g_line_2d_index = 0;
+
+ int g_render_queue_index = 0;
+ bool g_stop_rendering;
+ bool g_rendering_color;
+ bool g_render_tooltip = true;
+ bool g_render_globe = true;
+ bool g_disable_title = false;
+ bool g_scroll_lerp = true;
+ bool g_input_open;
+
+ float g_wrap = 0.063f;
+ float g_delta = 0.f;
+ float g_scroll_lerp_speed = 25.f;
+
+ int g_header_font = 0;
+ int g_sub_header_font = 4;
+ int g_option_font = 4;
+ int g_open_tooltip_font = 4;
+ int g_tooltip_font = 4;
+ int g_stacked_display_font = 0;
+ int g_notify_title_font = 0;
+ int g_notify_body_font = 0;
+ int g_panel_font = 4;
+
+ math::vector2 g_position = { 0.70f, 0.3f };
+ math::vector2 g_scale = { 0.22f, 0.f };
+ math::vector2 g_submenu_arrow_position = { 0.218f, 0.010f };
+ math::vector2 g_submenu_arrow_scale = { 0.007f, 0.013f };
+ math::vector2 g_toggle_position = { 0.221f, 0.016f };
+ math::vector2 g_toggle_scale = { 0.007f, 0.011f };
+ math::vector2 g_globe_position = { 0.4405f, 0.328f };
+ math::vector2 g_globe_scale = { 0.978f, 0.906f };
+ math::vector2 g_stacked_display_scale = { 0.15f, 0.015f };
+ math::vector2 g_stacked_display_position = { 0.845f, 0.01f };
+
+ // 76, 37, 219
+
+ color_rgba g_success = color_rgba(70, 219, 37, 255);
+ color_rgba g_error = color_rgba(219, 37, 37, 255);
+ color_rgba g_main_header = color_rgba(220, 76, 81, 255);
+ color_rgba g_sub_header = color_rgba(0, 0, 0, 220);
+ color_rgba g_sub_header_text = color_rgba(255, 255, 255, 255);
+ color_rgba g_background = color_rgba(0, 0, 0, 255);
+ color_rgba g_scroller = color_rgba(186, 65, 69, 255);
+ color_rgba g_footer = color_rgba(220, 76, 81, 220);
+ color_rgba g_title = color_rgba(255, 255, 255, 255);
+ color_rgba g_open_tooltip = color_rgba(220, 76, 81, 255);
+ color_rgba g_tooltip = color_rgba(220, 76, 81, 255);
+ color_rgba g_option = color_rgba(255, 255, 255, 255);
+ color_rgba g_option_selected = color_rgba(255, 255, 255, 255);
+ color_rgba g_toggle_on = color_rgba(130, 214, 157, 255);
+ color_rgba g_toggle_off = color_rgba(200, 55, 80, 255);
+ color_rgba g_break = color_rgba(255, 255, 255, 255);
+ color_rgba g_submenu_bar = color_rgba(255, 255, 255, 255);
+ color_rgba g_clear_area_range = color_rgba(220, 76, 81, 255);
+ color_rgba g_hotkey_bar = color_rgba(220, 76, 81, 255);
+ color_rgba g_color_grid_bar = color_rgba(220, 76, 81, 255);
+ color_rgba g_notify_bar = color_rgba(220, 76, 81, 255);
+ color_rgba g_notify_background = color_rgba(40, 40, 40, 255);
+ color_rgba g_panel_bar = color_rgba(220, 76, 81, 255);
+ color_rgba g_stacked_display_bar = color_rgba(220, 76, 81, 255);
+ color_rgba g_stacked_display_background = color_rgba(0, 0, 0, 180);
+ color_rgba g_panel_background = color_rgba(0, 0, 0, 180);
+ color_rgba g_hotkey_background = color_rgba(0, 0, 0, 180);
+ color_rgba g_color_grid_background = color_rgba(0, 0, 0, 180);
+ color_rgba g_hotkey_input = color_rgba(40, 40, 40, 200);
+ color_rgba g_instructional_background = color_rgba(0, 0, 0, 255);
+ color_rgba g_globe = color_rgba(255, 255, 255, 255);
+
+ menu_texture m_header = menu_texture(&g_main_header);
+ menu_texture m_background = menu_texture(&g_background);
+ menu_texture m_scroller = menu_texture(&g_scroller);
+ menu_texture m_footer = menu_texture(&g_footer);
+ menu_texture m_tooltip_background;
+ menu_texture m_tooltip_bar;
+ menu_texture m_stacked_display_background;
+ menu_texture m_stacked_display_bar;
+ menu_texture m_panel_background;
+ menu_texture m_panel_bar;
+ menu_texture m_notify_background;
+ menu_texture m_notify_bar;
+ menu_texture m_vehicle_stats_background;
+ menu_texture m_vehicle_stats_bar;
+}
\ No newline at end of file
diff --git a/GTAV/src/global/ui_vars.h b/GTAV/src/global/ui_vars.h
new file mode 100644
index 0000000..6dd11c1
--- /dev/null
+++ b/GTAV/src/global/ui_vars.h
@@ -0,0 +1,181 @@
+#pragma once
+#include "stdafx.h"
+#include "util/math.h"
+#include "util/localization.h"
+#include
+
+struct color_rgba {
+ int r;
+ int g;
+ int b;
+ int a = 255;
+
+ color_rgba()
+ : r(0), g(0), b(0), a(0) {}
+
+ color_rgba(int red, int green, int blue, int alpha = 255)
+ : r(red), g(green), b(blue), a(alpha) {}
+
+ color_rgba(uint32_t hex)
+ : r(hex >> 24), g(((hex >> 16) & 0x00FF)), b(((hex >> 8) & 0x0000FF)), a(hex & 0xFF) {}
+
+ color_rgba opacity(int opacity) {
+ return color_rgba(r, g, b, opacity);
+ }
+
+ math::vector3_ as_vector() {
+ return { r, g, b };
+ }
+
+ std::initializer_list as_initializer_list() {
+ return std::initializer_list { r, g, b, a };
+ }
+
+ uint32_t to_argb() {
+ uint8_t val[4];
+ val[0] = a;
+ val[1] = r;
+ val[2] = g;
+ val[3] = b;
+
+ return *(uint32_t*)&val;
+ }
+};
+
+struct color_hsv {
+ float h;
+ float s;
+ float v;
+};
+
+struct radio_context {
+ std::unordered_map m_toggles;
+ int m_selected = 0;
+ int m_count = 0;
+ std::pair m_sprite = { "", "" };
+
+ radio_context(const char* dict, const char* texture) {
+ m_sprite = std::make_pair(dict, texture);
+ m_selected = 0;
+ m_count = 0;
+ }
+
+ void reset() {
+ m_count = 0;
+
+ for (auto& it : m_toggles) {
+ it.second = false;
+ }
+ }
+};
+
+struct menu_texture {
+ bool m_enabled;
+ radio_context m_context = { "commonmenu", "shop_art_icon" };
+ std::string m_texture;
+ localization m_submenu_name;
+ color_rgba* m_color = nullptr;
+
+ menu_texture() {}
+
+ menu_texture(color_rgba* color) {
+ m_color = color;
+ }
+};
+
+struct line_2d {
+ math::vector2 m_from;
+ math::vector2 m_to;
+ color_rgba m_color;
+};
+
+namespace global::ui {
+ extern float g_option_scale;
+ extern float g_option_height;
+
+ extern std::string g_render_queue[100];
+ extern std::string g_rendering_tooltip;
+ extern line_2d* m_line_2d;
+ extern int g_line_2d_index;
+
+ extern int g_render_queue_index;
+ extern bool g_stop_rendering;
+ extern bool g_render_tooltip;
+ extern bool g_rendering_color;
+ extern bool g_render_globe;
+ extern bool g_disable_title;
+ extern bool g_scroll_lerp;
+ extern bool g_input_open;
+
+ extern float g_wrap;
+ extern float g_delta;
+ extern float g_scroll_lerp_speed;
+
+ extern int g_header_font;
+ extern int g_sub_header_font;
+ extern int g_option_font;
+ extern int g_open_tooltip_font;
+ extern int g_tooltip_font; //
+ extern int g_stacked_display_font;
+ extern int g_notify_title_font;
+ extern int g_notify_body_font;
+ extern int g_panel_font;
+
+ extern math::vector2 g_position;
+ extern math::vector2 g_scale;
+ extern math::vector2 g_submenu_arrow_position;
+ extern math::vector2 g_submenu_arrow_scale;
+ extern math::vector2 g_toggle_position;
+ extern math::vector2 g_toggle_scale;
+ extern math::vector2 g_globe_position;
+ extern math::vector2 g_globe_scale;
+ extern math::vector2 g_stacked_display_scale;
+ extern math::vector2 g_stacked_display_position;
+
+ extern color_rgba g_success;
+ extern color_rgba g_error;
+ extern color_rgba g_main_header;
+ extern color_rgba g_sub_header;
+ extern color_rgba g_sub_header_text;
+ extern color_rgba g_background;
+ extern color_rgba g_scroller;
+ extern color_rgba g_footer;
+ extern color_rgba g_title;
+ extern color_rgba g_open_tooltip;
+ extern color_rgba g_tooltip;
+ extern color_rgba g_option;
+ extern color_rgba g_option_selected;
+ extern color_rgba g_toggle_on;
+ extern color_rgba g_toggle_off;
+ extern color_rgba g_break;
+ extern color_rgba g_submenu_bar;
+ extern color_rgba g_clear_area_range;
+ extern color_rgba g_hotkey_bar;
+ extern color_rgba g_notify_bar;
+ extern color_rgba g_notify_background;
+ extern color_rgba g_panel_bar;
+ extern color_rgba g_stacked_display_bar;
+ extern color_rgba g_stacked_display_background;
+ extern color_rgba g_panel_background;
+ extern color_rgba g_hotkey_background;
+ extern color_rgba g_hotkey_input;
+ extern color_rgba g_instructional_background;
+ extern color_rgba g_globe;
+ extern color_rgba g_color_grid_background;
+ extern color_rgba g_color_grid_bar;
+
+ extern menu_texture m_header;
+ extern menu_texture m_background;
+ extern menu_texture m_scroller;
+ extern menu_texture m_footer;
+ extern menu_texture m_tooltip_background;
+ extern menu_texture m_tooltip_bar;
+ extern menu_texture m_stacked_display_background;
+ extern menu_texture m_stacked_display_bar;
+ extern menu_texture m_panel_background;
+ extern menu_texture m_panel_bar;
+ extern menu_texture m_notify_background;
+ extern menu_texture m_notify_bar;
+ extern menu_texture m_vehicle_stats_background;
+ extern menu_texture m_vehicle_stats_bar;
+}
\ No newline at end of file
diff --git a/GTAV/src/global/vars.cpp b/GTAV/src/global/vars.cpp
new file mode 100644
index 0000000..3ab2f35
--- /dev/null
+++ b/GTAV/src/global/vars.cpp
@@ -0,0 +1,322 @@
+#include "vars.h"
+
+namespace global::vars {
+ uint64_t g_ros_init_crypto;
+ uint64_t g_ros_read_stats_by_gamer;
+ uint64_t g_ros_download_player_image;
+
+ bool g_arxan_called[10];
+ bool g_chinese;
+ bool g_unloading = false;
+ bool g_unloading_queue = false;
+ bool g_freemode_terminated = false;
+ bool g_reapply_weapons = false;
+ HMODULE g_module_handle;
+ std::pair g_cheat_address;
+ std::pair g_game_address;
+ HWND g_window;
+ std::vector g_localization_table;
+ bool g_steam = false;
+ bool g_reload_weapons;
+ std::pair g_selected_metric_system = { 2.236936f, "MPH" };
+ std::unordered_map> g_online_rockstar_ids;
+ std::vector g_online_rockstar_ids_queue;
+ std::vector g_relay_usage;
+ std::queue g_geo_queue;
+ std::unordered_map g_geo;
+ rage::types::dictionary* g_custom_dictionary;
+ rage::types::dictionary* g_player_img_dictionary;
+ math::vector2 g_resolution;
+ math::vector2 g_desktop_resolution;
+ uint64_t g_texture_bypass;
+ uint64_t g_marker_bypass;
+ std::unordered_map g_alignment_tests;
+ std::vector g_patches;
+ std::unordered_map < std::string, patches> g_hack_patches;
+ std::vector> g_return_address_node_iterations;
+ std::unordered_map g_desyncs_host;
+ std::unordered_map g_desyncs;
+ std::vector g_join_timeout_fix;
+ std::vector> g_host_desync_logs;
+ std::unordered_map g_last_synced_player_models;
+ std::vector g_gs_info_requests;
+ std::unordered_map g_spoofed_data_join_requests;
+ std::unordered_map> g_raw_buffer_translations;
+ std::unordered_map g_sync_real_ip;
+ std::unordered_map g_sync_peer_corruption;
+ uint8_t g_arxan_restore_bytes[2][2][25];
+ uint64_t g_arxan_restore_addresses[2];
+ std::unordered_map g_read_stats_by_gamer_results;
+ std::vector> g_player_image_queue;
+ PlayerMenuType g_network_menu_type;
+ bool g_change_peer;
+
+ // game structures
+ game_state* g_game_state;
+ rage::invoker::native_registration** g_native_registration;
+ rage::network::rs_info* g_rs_info;
+ rage::types::ped_factory* g_ped_factory;
+ rage::network::game_camera_angles* g_game_camera_angles;
+ rage::types::waypoint_data* g_waypoint_data;
+ rage::network::net_shop_queue* g_net_shop_queue;
+ rage::types::ui_visual_settings* g_ui_visual_settings;
+ rage::types::vfx_liquid* g_vfx_liquid;
+ rage::network::friends* g_friends;
+ rage::types::texture_store* g_texture_store;
+ rage::types::store_manager* g_store_manager;
+ rage::types::memory_heap_pt* g_memory_heap;
+ //rage::types::replay_interface* g_replay_interface;
+ rage::types::explosion_data* g_explosion_data;
+ rage::types::explosion_fx* g_explosion_fx;
+ rage::network::network_base_config* g_network_base_config;
+ rage::types::ocean_quads g_ocean_quads;
+ rage::types::water_tune* g_water_tune;
+ rage::types::ui_weather* g_ui_weather;
+ rage::types::ui_puddle* g_ui_puddle;
+ rage::types::blip_list* g_blip_list;
+
+ // game pools
+ guid_pool* g_object_pool;
+ guid_pool* g_ped_pool;
+ vehicle_pool* g_vehicle_pool;
+ guid_pool* g_pickup_pool;
+
+ // game lists
+ hash_list g_weapon_components;
+ hash_list g_weapon_info;
+ hash_list g_script_handlers;
+ std::pair g_vfx_wheel;
+
+ // game addresses
+ uint64_t g_d3d11_device;
+ uint64_t g_process_transaction_id;
+ uint64_t g_sync_data_reader_vtable;
+ uint64_t** g_global_cache;
+ uint64_t g_nullsub;
+ uint64_t g_read_bool_from_bit_buffer;
+ uint64_t g_read_int_from_bit_buffer;
+ uint64_t g_read_uint_from_bit_buffer;
+ uint64_t g_read_byte_from_bit_buffer;
+ uint64_t g_read_ulonglong_from_bit_Buffer;
+ uint64_t g_read_short_from_bit_buffer;
+ uint64_t g_read_vector3_from_bit_buffer;
+ uint64_t g_read_array_from_bit_buffer;
+ uint64_t g_read_msg_header_from_bit_buffer;
+ uint64_t g_read_pickup_from_bit_buffer;
+ uint64_t g_write_uint_to_bit_buffer;
+ uint64_t g_sc_game_info_table;
+ uint64_t g_sc_get_game_info_table;
+ uint64_t g_game_streamed_scripts;
+ uint64_t g_get_streamed_script;
+ uint64_t g_get_third_person_camera;
+ uint64_t g_third_person_camera;
+ uint64_t g_get_entity_address;
+ uint64_t g_get_entity_handle_from_address;
+ uint64_t g_get_net_game_player_from_index;
+ uint64_t g_get_model_info;
+ uint64_t g_set_vehicle_gravity;
+ uint64_t g_get_vehicle_paint_array;
+ uint64_t g_draw_origin_index;
+ uint64_t g_add_to_clock_time;
+ uint64_t g_dispatch_service_table;
+ uint64_t g_sync_clock_time;
+ uint64_t g_send_weather_update;
+ uint64_t g_get_host_net_game_player;
+ uint64_t g_send_increment_stat_event;
+ uint64_t g_update_net_object_owner;
+ uint64_t g_network_object_manager;
+ uint64_t g_network_player_manager;
+ uint64_t g_handle_rotation_values_from_order;
+ uint64_t g_get_net_game_player_from_handle;
+ uint64_t g_get_sprite_texture;
+ uint64_t g_send_text_message_net_msg;
+ uint64_t g_set_traffic_lights;
+ uint64_t g_update_traffic_lights;
+ uint64_t g_set_traffic_light_colors;
+ uint64_t g_set_vehicle_lights;
+ uint64_t g_get_sync_tree_from_clone_type;
+ uint64_t g_get_network_object_from_network_id;
+ uint64_t g_get_network_config_from_peer;
+ uint64_t g_network_event_registration;
+ uint64_t g_update_ui_values;
+ uint64_t g_update_ui_values_2;
+ uint64_t g_set_vehicle_neon_ui;
+ uint64_t g_set_seethrough;
+ uint64_t g_add_basket_to_queue;
+ uint64_t g_add_item_to_basket;
+ uint64_t g_send_session_info_request;
+ uint64_t g_get_session_info_from_gs;
+ uint64_t g_send_network_event_reply;
+ uint64_t g_send_network_event_ack;
+ uint64_t g_setup_give_control_event;
+ uint64_t g_send_friend_request;
+ uint64_t g_get_client_player_key;
+ uint64_t g_render_water_on_map_intensity;
+ uint64_t g_map_fog_intensity;
+ uint64_t g_send_presence_event;
+ uint64_t g_migrate_script_host;
+ uint64_t g_is_reported_for_reason;
+ uint64_t g_chat_info;
+ uint64_t g_send_matchmaking_request;
+ uint64_t g_read_xml_string;
+ uint64_t g_read_xml_node_string;
+ uint64_t g_register_streaming_file;
+ uint64_t g_create_game_invite_presence;
+ uint64_t g_send_game_invite_presence;
+ uint64_t g_send_game_invite_presence_table;
+ uint64_t g_send_ragdoll_event;
+ uint64_t g_grc_texture_factory_dx11;
+ uint64_t g_thread_alloc;
+ uint64_t g_setup_dictionary;
+ uint64_t g_setup_store_item;
+ uint64_t g_is_valid_pool_slot;
+ uint64_t g_add_dictionary_to_pool;
+ uint64_t g_add_grc_texture_to_dictionary;
+ uint64_t g_get_weather_id;
+ uint64_t g_weather_table;
+ uint64_t g_get_font_id_table;
+ uint64_t g_get_store_module_extension;
+ uint64_t g_request_streaming_file;
+ uint64_t g_construct_gfx_font;
+ uint64_t g_destruct;
+ uint64_t g_create_id_for_font;
+ uint64_t g_add_font_lib;
+ uint64_t g_vertex_begin;
+ uint64_t g_vertex_end;
+ uint64_t g_vertex_add;
+ uint64_t g_render_script_texture;
+ uint64_t g_font_table;
+ uint64_t g_font_memory_helper;
+ uint64_t g_parse_nodes;
+ uint64_t g_read_new_script_host_message;
+ uint64_t g_write_gs_item;
+ uint64_t g_game_script_handler_manager;
+ uint64_t g_translate_native;
+ uint64_t g_global_chat_ptr;
+ uint64_t g_send_global_chat_message;
+ uint64_t g_add_chat_message;
+ uint64_t g_chat_config;
+ uint64_t g_ped_orientation_writer;
+ uint64_t g_entity_orientation_writer;
+ uint64_t g_social_club_game_info_table;
+ uint64_t g_social_club_get_game_info_table;
+ uint64_t g_reset_script_render_params[2];
+ uint64_t g_get_player_info_from_net_msg;
+ uint64_t g_drop_shaders;
+ uint64_t g_drop_shader_count;
+ uint64_t g_get_net_msg_net_player;
+ uint64_t g_ui_3d_draw_manager;
+ uint64_t g_push_scene_preset_to_manager;
+ uint64_t g_add_element_to_scene;
+ uint64_t g_set_scene_element_lighting;
+ uint64_t g_invalid_string_address;
+ uint64_t g_construct_read_session_join_request_msg;
+ uint64_t g_read_session_join_request_msg;
+ uint64_t g_read_token_from_bit_buffer;
+ uint64_t g_read_string_from_bit_buffer;
+ uint64_t g_invite_player;
+ uint64_t g_sync_data_writer_vtable;
+
+ uint32_t g_ozark_detections[] = {
+ 0x22ae9ef7,
+ 0xd5c31f7a,
+ 0xf807b7e0,
+ 0x3895afe2,
+ 0x4ee4092c,
+ 0x8c16a626,
+ 0x3039cd1b,
+ 0xfe2d7811,
+ 0xff1816e5,
+ 0xf7badafb,
+ 0xb9d09512,
+ 0xfb2a0138,
+ 0x1c1fe653,
+ 0xcc50aa5a,
+ 0x4c0a1f3c,
+ 0x01397d8e,
+ 0x1cca797b,
+ 0xa3c78808,
+ 0xe0e0d4ae,
+ 0x80f00989,
+ 0xcc450cbb,
+ 0xc7dc381,
+ 0x3640ac4d,
+ 0xae6d9427,
+ 0x6613ba47,
+ 0xbd9b0ece,
+ 0x7989c8ef,
+ 0x6c0df033,
+ 0x2c826d8c,
+ 0x4d4a2dbf,
+ 0xcc1a895a,
+ 0x1097331,
+ 0xdf577ec3,
+ 0x62c5565,
+ 0xfe7b45da,
+ 0xd268409b,
+ 0x200bfa48,
+ 0xc3851eef,
+ 0x7d973e49,
+ 0x9e20d29,
+ 0x203ac304,
+ 0x35d0430d,
+ 0x0d1c850a,
+ 0x095436c0,
+ 0x68a29afa,
+ 0x753ec6fd,
+ 0x7cd15134,
+ 0xcb41f199,
+ 0xebbe7348,
+ 0xceba5a71,
+ 0xb4ad9f12,
+ 0x00b8b574,
+ 0xb5f0b06d,
+ 0xa4daa011,
+ 0x74be9134,
+ 0xc61f6ed7,
+ 0x92e195f9,
+ 0xe0732c89,
+ 0xcee496c4,
+ 0x048cd47d,
+ 0xd23d2d64,
+ 0xd2229f24,
+ 0xf0a8b10a,
+ 0x69a48342,
+ 0x6c548c90,
+ 0x94b993ab,
+ 0x2876763d,
+ 0xc300d11c,
+ 0x3aeb8203,
+ 0xcf4ac36e,
+ 0xfd0fc06b,
+ 0x551b54a5,
+ 0x4cc1c54b,
+ 0x03774cdb,
+ 0x379ce628,
+ 0xe8490ddd,
+ 0xd9352f6b,
+ 0xf47c081e,
+ 0xc765d720,
+ 0xfcca2774,
+ 0x114dee50,
+ 0xcb29360b,
+ 0x983162a9,
+ 0xbb98b280,
+ 0xb1fac843,
+ 0xae08ab79,
+ 0x646f1d41,
+ 0x8fc23a82,
+ 0x3543f2bd,
+ 0x8701d0e0,
+ 0x677a359f,
+ 0xa4ea31f,
+ 0x97c34e43,
+ 0x5b396fbb,
+ 0xf7080942,
+ 0x278946b1,
+ 0x6518b45a,
+ 0x6325d30f,
+ 0xa19b464,
+ 0x63794f98
+ };
+}
\ No newline at end of file
diff --git a/GTAV/src/global/vars.h b/GTAV/src/global/vars.h
new file mode 100644
index 0000000..31deffa
--- /dev/null
+++ b/GTAV/src/global/vars.h
@@ -0,0 +1,269 @@
+#pragma once
+#include "stdafx.h"
+#include "rage/types/base_types.h"
+#include "rage/types/generic_types.h"
+#include "rage/types/network_types.h"
+#include "rage/types/invoker_types.h"
+#include "rage/types/script_types.h"
+#include "rage/types/ros_types.h"
+#include "util/localization.h"
+#include
+#include
+
+#pragma pack(push)
+#pragma pack(1)
+struct protection_context {
+ int m_var = 0;
+ localization m_tooltip;
+
+ bool block() {
+ return m_var == 2 || m_var == 3 || m_var == 5 || m_var == 7;
+ }
+
+ bool notify() {
+ return m_var == 1 || m_var == 3 || m_var == 6 || m_var == 7;
+ }
+
+ bool redirect() {
+ return m_var >= 4;
+ }
+
+ bool enabled() {
+ return m_var > 0;
+ }
+};
+
+struct join_timeout_fix {
+ Player m_id;
+ uint32_t m_script_hash;
+ int m_retry_count;
+};
+
+struct gs_info_request {
+ bool m_finished = false;
+ int m_type; // 1 = join blocking, 2 = rid joiner, 69 = ozark
+ uint64_t m_rockstar_id;
+ uint32_t m_expiry;
+ std::function m_callback;
+};
+
+namespace global::vars {
+ extern uint64_t g_ros_init_crypto;
+ extern uint64_t g_ros_read_stats_by_gamer;
+ extern uint64_t g_ros_download_player_image;
+
+ extern bool g_arxan_called[10];
+ extern bool g_chinese;
+ extern bool g_unloading;
+ extern bool g_unloading_queue;
+ extern bool g_freemode_terminated;
+ extern bool g_reapply_weapons;
+ extern HMODULE g_module_handle;
+ extern std::pair g_cheat_address;
+ extern std::pair g_game_address;
+ extern HWND g_window;
+ extern std::vector g_localization_table;
+ extern bool g_steam;
+ extern bool g_reload_weapons;
+ extern std::pair g_selected_metric_system;
+ extern std::unordered_map> g_online_rockstar_ids;
+ extern std::vector g_online_rockstar_ids_queue;
+ extern std::vector g_relay_usage;
+ extern std::queue g_geo_queue;
+ extern std::unordered_map g_geo;
+ extern rage::types::dictionary* g_custom_dictionary;
+ extern rage::types::dictionary* g_player_img_dictionary;
+ extern math::vector2 g_resolution;
+ extern math::vector2 g_desktop_resolution;
+ extern uint64_t g_texture_bypass;
+ extern uint64_t g_marker_bypass;
+ extern std::unordered_map g_alignment_tests;
+ extern std::vector g_patches;
+ extern std::unordered_map g_hack_patches;
+ extern std::vector> g_return_address_node_iterations;
+ extern std::unordered_map g_desyncs_host;
+ extern std::unordered_map g_desyncs;
+ extern std::vector g_join_timeout_fix;
+ extern std::vector> g_host_desync_logs;
+ extern std::unordered_map g_last_synced_player_models;
+ extern std::vector g_gs_info_requests;
+ extern std::unordered_map g_spoofed_data_join_requests;
+ extern std::unordered_map> g_raw_buffer_translations;
+ extern std::unordered_map g_sync_real_ip;
+ extern std::unordered_map g_sync_peer_corruption;
+ extern uint8_t g_arxan_restore_bytes[2][2][25];
+ extern uint64_t g_arxan_restore_addresses[2];
+ extern std::unordered_map g_read_stats_by_gamer_results;
+ extern std::vector> g_player_image_queue;
+ extern PlayerMenuType g_network_menu_type;
+ extern bool g_change_peer;
+
+ // game structures
+ extern game_state* g_game_state;
+ extern rage::invoker::native_registration** g_native_registration;
+ extern rage::network::rs_info* g_rs_info;
+ extern rage::types::ped_factory* g_ped_factory;
+ extern rage::network::game_camera_angles* g_game_camera_angles;
+ extern rage::types::waypoint_data* g_waypoint_data;
+ extern rage::network::net_shop_queue* g_net_shop_queue;
+ extern rage::types::ui_visual_settings* g_ui_visual_settings;
+ extern rage::types::vfx_liquid* g_vfx_liquid;
+ extern rage::network::friends* g_friends;
+ extern rage::types::texture_store* g_texture_store;
+ extern rage::types::store_manager* g_store_manager;
+ extern rage::types::memory_heap_pt* g_memory_heap;
+ //extern rage::types::replay_interface* g_replay_interface;
+ extern rage::types::explosion_data* g_explosion_data;
+ extern rage::types::explosion_fx* g_explosion_fx;
+ extern rage::network::network_base_config* g_network_base_config;
+ extern rage::types::ocean_quads g_ocean_quads;
+ extern rage::types::water_tune* g_water_tune;
+ extern rage::types::ui_weather* g_ui_weather;
+ extern rage::types::ui_puddle* g_ui_puddle;
+ extern rage::types::blip_list* g_blip_list;
+
+ // game pools
+ extern guid_pool* g_object_pool;
+ extern guid_pool* g_ped_pool;
+ extern vehicle_pool* g_vehicle_pool;
+ extern guid_pool* g_pickup_pool;
+
+ // game lists
+ extern hash_list g_weapon_components;
+ extern hash_list g_weapon_info;
+ extern hash_list g_script_handlers;
+ extern std::pair g_vfx_wheel;
+
+ // game addresses
+ extern uint64_t g_d3d11_device;
+ extern uint64_t g_process_transaction_id;
+ extern uint64_t g_sync_data_reader_vtable;
+ extern uint64_t g_nullsub;
+ extern uint64_t** g_global_cache;
+ extern uint64_t g_read_bool_from_bit_buffer;
+ extern uint64_t g_read_int_from_bit_buffer;
+ extern uint64_t g_read_uint_from_bit_buffer;
+ extern uint64_t g_read_byte_from_bit_buffer;
+ extern uint64_t g_read_ulonglong_from_bit_Buffer;
+ extern uint64_t g_read_short_from_bit_buffer;
+ extern uint64_t g_read_vector3_from_bit_buffer;
+ extern uint64_t g_read_array_from_bit_buffer;
+ extern uint64_t g_read_msg_header_from_bit_buffer;
+ extern uint64_t g_read_pickup_from_bit_buffer;
+ extern uint64_t g_write_uint_to_bit_buffer;
+ extern uint64_t g_sc_game_info_table;
+ extern uint64_t g_sc_get_game_info_table;
+ extern uint64_t g_game_streamed_scripts;
+ extern uint64_t g_get_streamed_script;
+ extern uint64_t g_get_third_person_camera;
+ extern uint64_t g_third_person_camera;
+ extern uint64_t g_get_entity_address;
+ extern uint64_t g_get_entity_handle_from_address;
+ extern uint64_t g_get_net_game_player_from_index;
+ extern uint64_t g_get_model_info;
+ extern uint64_t g_set_vehicle_gravity;
+ extern uint64_t g_get_vehicle_paint_array;
+ extern uint64_t g_draw_origin_index;
+ extern uint64_t g_add_to_clock_time;
+ extern uint64_t g_dispatch_service_table;
+ extern uint64_t g_sync_clock_time;
+ extern uint64_t g_send_weather_update;
+ extern uint64_t g_get_host_net_game_player;
+ extern uint64_t g_send_increment_stat_event;
+ extern uint64_t g_update_net_object_owner;
+ extern uint64_t g_network_object_manager;
+ extern uint64_t g_network_player_manager;
+ extern uint64_t g_handle_rotation_values_from_order;
+ extern uint64_t g_get_net_game_player_from_handle;
+ extern uint64_t g_get_sprite_texture;
+ extern uint64_t g_send_text_message_net_msg;
+ extern uint64_t g_set_traffic_lights;
+ extern uint64_t g_update_traffic_lights;
+ extern uint64_t g_set_traffic_light_colors;
+ extern uint64_t g_set_vehicle_lights;
+ extern uint64_t g_get_sync_tree_from_clone_type;
+ extern uint64_t g_get_network_object_from_network_id;
+ extern uint64_t g_get_network_config_from_peer;
+ extern uint64_t g_network_event_registration;
+ extern uint64_t g_update_ui_values;
+ extern uint64_t g_update_ui_values_2;
+ extern uint64_t g_set_vehicle_neon_ui;
+ extern uint64_t g_set_seethrough;
+ extern uint64_t g_add_basket_to_queue;
+ extern uint64_t g_add_item_to_basket;
+ extern uint64_t g_send_session_info_request;
+ extern uint64_t g_get_session_info_from_gs;
+ extern uint64_t g_send_network_event_reply;
+ extern uint64_t g_send_network_event_ack;
+ extern uint64_t g_setup_give_control_event;
+ extern uint64_t g_send_friend_request;
+ extern uint64_t g_get_client_player_key;
+ extern uint64_t g_render_water_on_map_intensity;
+ extern uint64_t g_map_fog_intensity;
+ extern uint64_t g_send_presence_event;
+ extern uint64_t g_migrate_script_host;
+ extern uint64_t g_is_reported_for_reason;
+ extern uint64_t g_chat_info;
+ extern uint64_t g_send_matchmaking_request;
+ extern uint64_t g_read_xml_string;
+ extern uint64_t g_read_xml_node_string;
+ extern uint64_t g_register_streaming_file;
+ extern uint64_t g_create_game_invite_presence;
+ extern uint64_t g_send_game_invite_presence;
+ extern uint64_t g_send_game_invite_presence_table;
+ extern uint64_t g_send_ragdoll_event;
+ extern uint64_t g_grc_texture_factory_dx11;
+ extern uint64_t g_thread_alloc;
+ extern uint64_t g_setup_dictionary;
+ extern uint64_t g_setup_store_item;
+ extern uint64_t g_is_valid_pool_slot;
+ extern uint64_t g_add_dictionary_to_pool;
+ extern uint64_t g_add_grc_texture_to_dictionary;
+ extern uint64_t g_get_weather_id;
+ extern uint64_t g_weather_table;
+ extern uint64_t g_get_font_id_table;
+ extern uint64_t g_get_store_module_extension;
+ extern uint64_t g_request_streaming_file;
+ extern uint64_t g_construct_gfx_font;
+ extern uint64_t g_destruct;
+ extern uint64_t g_create_id_for_font;
+ extern uint64_t g_add_font_lib;
+ extern uint64_t g_vertex_begin;
+ extern uint64_t g_vertex_end;
+ extern uint64_t g_vertex_add;
+ extern uint64_t g_render_script_texture;
+ extern uint64_t g_font_table;
+ extern uint64_t g_font_memory_helper;
+ extern uint64_t g_parse_nodes;
+ extern uint64_t g_read_new_script_host_message;
+ extern uint64_t g_write_gs_item;
+ extern uint64_t g_game_script_handler_manager;
+ extern uint64_t g_translate_native;
+ extern uint64_t g_global_chat_ptr;
+ extern uint64_t g_send_global_chat_message;
+ extern uint64_t g_add_chat_message;
+ extern uint64_t g_chat_config;
+ extern uint64_t g_ped_orientation_writer;
+ extern uint64_t g_entity_orientation_writer;
+ extern uint64_t g_social_club_game_info_table;
+ extern uint64_t g_social_club_get_game_info_table;
+ extern uint64_t g_reset_script_render_params[2];
+ extern uint64_t g_get_player_info_from_net_msg;
+ extern uint64_t g_drop_shaders;
+ extern uint64_t g_drop_shader_count;
+ extern uint64_t g_get_net_msg_net_player;
+ extern uint64_t g_ui_3d_draw_manager;
+ extern uint64_t g_push_scene_preset_to_manager;
+ extern uint64_t g_add_element_to_scene;
+ extern uint64_t g_set_scene_element_lighting;
+ extern uint64_t g_invalid_string_address;
+ extern uint64_t g_construct_read_session_join_request_msg;
+ extern uint64_t g_read_session_join_request_msg;
+ extern uint64_t g_read_token_from_bit_buffer;
+ extern uint64_t g_read_string_from_bit_buffer;
+ extern uint64_t g_invite_player;
+ extern uint64_t g_sync_data_writer_vtable;
+
+ extern uint32_t g_ozark_detections[100];
+}
+#pragma pack(pop)
\ No newline at end of file
diff --git a/GTAV/src/menu/base/base.cpp b/GTAV/src/menu/base/base.cpp
new file mode 100644
index 0000000..76f3bed
--- /dev/null
+++ b/GTAV/src/menu/base/base.cpp
@@ -0,0 +1,71 @@
+#include "base.h"
+#include "renderer.h"
+#include "rage/invoker/natives.h"
+#include "submenu_handler.h"
+
+namespace menu::base {
+ void base::update() {
+ if (m_disable_input_this_frame) {
+ m_disable_input_this_frame = false;
+ m_input_disabled = true;
+ } else m_input_disabled = false;
+
+ if (m_open) {
+ native::set_input_exclusive(2, INPUT_FRONTEND_ACCEPT);
+ native::set_input_exclusive(2, INPUT_FRONTEND_CANCEL);
+ native::set_input_exclusive(2, INPUT_FRONTEND_DOWN);
+ native::set_input_exclusive(2, INPUT_FRONTEND_UP);
+ native::set_input_exclusive(2, INPUT_FRONTEND_LEFT);
+ native::set_input_exclusive(2, INPUT_FRONTEND_RIGHT);
+ // native::disable_control_action(0, INPUT_NEXT_CAMERA, true);
+ native::disable_control_action(0, INPUT_VEH_SELECT_NEXT_WEAPON, true);
+ native::disable_control_action(0, INPUT_FRONTEND_RIGHT, true);
+ native::disable_control_action(0, INPUT_FRONTEND_DOWN, true);
+ native::disable_control_action(0, INPUT_FRONTEND_LEFT, true);
+ native::disable_control_action(0, INPUT_FRONTEND_UP, true);
+ native::disable_control_action(0, INPUT_ARREST, true);
+ native::disable_control_action(0, INPUT_CONTEXT, true);
+ native::disable_control_action(0, INPUT_MELEE_BLOCK, true);
+ native::disable_control_action(2, INPUT_FRONTEND_UP, true);
+ native::disable_control_action(0, INPUT_HUD_SPECIAL, true);
+ native::disable_control_action(0, INPUT_VEH_CIN_CAM, true);
+ native::disable_control_action(2, INPUT_VEH_CIN_CAM, true);
+ native::disable_control_action(0, INPUT_VEH_HEADLIGHT, true);
+ native::disable_control_action(2, INPUT_FRONTEND_LEFT, true);
+ native::disable_control_action(2, INPUT_FRONTEND_DOWN, true);
+ native::disable_control_action(2, INPUT_FRONTEND_RDOWN, true);
+ native::disable_control_action(2, INPUT_FRONTEND_RIGHT, true);
+ native::disable_control_action(0, INPUT_CHARACTER_WHEEL, true);
+ native::disable_control_action(0, INPUT_VEH_RADIO_WHEEL, true);
+ native::disable_control_action(2, INPUT_FRONTEND_CANCEL, true);
+ native::disable_control_action(0, INPUT_MELEE_ATTACK_LIGHT, true);
+ native::disable_control_action(0, INPUT_MELEE_ATTACK_HEAVY, true);
+ native::disable_control_action(0, INPUT_SELECT_CHARACTER_TREVOR, true);
+ native::disable_control_action(0, INPUT_SELECT_CHARACTER_MICHAEL, true);
+ native::disable_control_action(0, INPUT_SELECT_CHARACTER_FRANKLIN, true);
+ native::disable_control_action(0, INPUT_SELECT_CHARACTER_MULTIPLAYER, true);
+
+ menu::renderer::render();
+ menu::submenu::handler::update();
+ } else {
+ if (global::ui::g_render_tooltip) {
+ menu::renderer::render_open_tooltip();
+ }
+ }
+ }
+
+ bool base::is_option_selected(int option) {
+ if (global::ui::g_scroll_lerp) {
+ float expected = global::ui::g_position.y + (option * global::ui::g_option_scale);
+ float current = menu::renderer::get_smooth_scroll();
+ float buffer = (global::ui::g_option_scale * 0.5f);
+
+ return current >= expected - buffer && current <= expected + buffer;
+ } else return menu::renderer::get_render_count() == option + 1;
+ }
+
+ base* get_base() {
+ static base instance;
+ return &instance;
+ }
+}
\ No newline at end of file
diff --git a/GTAV/src/menu/base/base.h b/GTAV/src/menu/base/base.h
new file mode 100644
index 0000000..d416e69
--- /dev/null
+++ b/GTAV/src/menu/base/base.h
@@ -0,0 +1,166 @@
+#pragma once
+#include "stdafx.h"
+
+typedef enum {
+ SCROLL,
+ TOGGLE,
+ SCROLLSELECT
+} scroll_option_type;
+
+namespace menu::base {
+ class base {
+ public:
+ void update();
+ bool is_option_selected(int option);
+
+ void set_max_options(int val) {
+ m_max_options = val;
+ }
+
+ void set_current_option(int val) {
+ m_current_option = val;
+ }
+
+ void set_scroll_offset(int val) {
+ m_scroll_offset = val;
+ }
+
+ void set_break_scroll(int val) {
+ m_break_scroll = val;
+ }
+
+ void set_open(bool open) {
+ m_open = open;
+ }
+
+ void set_disable_input_this_frame() {
+ m_disable_input_this_frame = true;
+ }
+
+ void set_keyboard_title(std::string title) {
+ m_keyboard_title = title;
+ }
+
+ int get_max_options() {
+ return m_max_options;
+ }
+
+ int get_current_option() {
+ return m_current_option;
+ }
+
+ int get_scroll_offset() {
+ return m_scroll_offset;
+ }
+
+ int get_break_scroll() {
+ return m_break_scroll;
+ }
+
+ bool is_input_disabled() {
+ return m_input_disabled;
+ }
+
+ bool is_open() {
+ return m_open;
+ }
+
+ std::string get_keyboard_title() {
+ return m_keyboard_title;
+ }
+
+ void set_open_key(int key) {
+ m_open_key = key;
+ }
+
+ int get_open_key() {
+ return m_open_key;
+ }
+ private:
+ bool m_open;
+ int m_open_key = VK_F4;
+ bool m_disable_input_this_frame;
+ bool m_input_disabled;
+
+ int m_max_options = 13;
+ int m_current_option;
+ int m_scroll_offset;
+ int m_break_scroll;
+
+ std::string m_keyboard_title = "";
+ };
+
+ base* get_base();
+
+ inline void update() {
+ get_base()->update();
+ }
+
+ inline bool is_option_selected(int option) {
+ return get_base()->is_option_selected(option);
+ }
+
+ inline int get_max_options() {
+ return get_base()->get_max_options();
+ }
+
+ inline int get_current_option() {
+ return get_base()->get_current_option();
+ }
+
+ inline int get_scroll_offset() {
+ return get_base()->get_scroll_offset();
+ }
+
+ inline int get_break_scroll() {
+ return get_base()->get_break_scroll();
+ }
+
+ inline std::string get_keyboard_title() {
+ return get_base()->get_keyboard_title();
+ }
+
+ inline bool is_open() {
+ return get_base()->is_open();
+ }
+
+ inline bool is_input_disabled() {
+ return get_base()->is_input_disabled();
+ }
+
+ inline void set_max_options(int val) {
+ get_base()->set_max_options(val);
+ }
+
+ inline void set_current_option(int val) {
+ get_base()->set_current_option(val);
+ }
+
+ inline void set_scroll_offset(int val) {
+ get_base()->set_scroll_offset(val);
+ }
+
+ inline void set_break_scroll(int val) {
+ get_base()->set_break_scroll(val);
+ }
+
+ inline void set_open(bool open) {
+ get_base()->set_open(open);
+ }
+
+ inline void set_keyboard_title(std::string title) {
+ get_base()->set_keyboard_title(title);
+ }
+
+ inline void set_disable_input_this_frame() {
+ get_base()->set_disable_input_this_frame();
+ }
+
+ inline void set_open_key(int key) {
+ get_base()->set_open_key(key);
+ }
+
+ inline int get_open_key() {
+ return get_base()->get_open_key();
+ }
+}
\ No newline at end of file
diff --git a/GTAV/src/menu/base/options/break.cpp b/GTAV/src/menu/base/options/break.cpp
new file mode 100644
index 0000000..010592c
--- /dev/null
+++ b/GTAV/src/menu/base/options/break.cpp
@@ -0,0 +1,57 @@
+#include "break.h"
+#include "menu/base/renderer.h"
+#include "menu/base/submenu_handler.h"
+#include "menu/base/util/input.h"
+
+void break_option::render(int position) {
+ m_on_update(this);
+
+ menu::renderer::draw_text("~italic~" + m_name.get(), { global::ui::g_position.x + 0.004f + ((global::ui::g_scale.x - (0.004f * 2.f)) / 2.f), global::ui::g_position.y + (position * global::ui::g_option_scale) + 0.004f }, menu::renderer::get_normalized_font_scale(global::ui::g_option_font, global::ui::g_option_height), global::ui::g_option_font, global::ui::g_break, JUSTIFY_CENTER);
+}
+
+void break_option::render_selected(int position, std::stack submenu_name_stack) {
+ switch (menu::base::get_break_scroll()) {
+ case 1: // up
+ if (menu::base::get_scroll_offset() > 0 && menu::base::get_current_option() - menu::base::get_scroll_offset() == 0) {
+ menu::base::set_scroll_offset(menu::base::get_scroll_offset() - 1);
+ }
+
+ if (menu::base::get_current_option() - 1 < 0) {
+ menu::input::scroll_bottom();
+ } else {
+ menu::base::set_current_option(menu::base::get_current_option() - 1);
+ }
+
+ break;
+
+ case 2: // down
+ if (menu::base::get_scroll_offset() < menu::submenu::handler::get_total_options() - menu::base::get_max_options() && menu::base::get_current_option() + 1 - menu::base::get_scroll_offset() == menu::base::get_max_options()) {
+ menu::base::set_scroll_offset(menu::base::get_scroll_offset() + 1);
+ }
+
+ if (menu::base::get_current_option() + 1 >= menu::submenu::handler::get_total_options()) {
+ menu::input::scroll_top();
+ } else {
+ menu::base::set_current_option(menu::base::get_current_option() + 1);
+ }
+
+ break;
+
+ case 3: // bottom
+ if (menu::base::get_scroll_offset() > 0 && menu::base::get_current_option() - menu::base::get_scroll_offset() == 1) {
+ menu::base::set_scroll_offset(menu::base::get_scroll_offset() - 1);
+ }
+
+ menu::base::set_current_option(menu::base::get_current_option() - 1);
+ break;
+
+ case 4: // top
+ if (menu::base::get_scroll_offset() < menu::submenu::handler::get_total_options() - menu::base::get_max_options() && menu::submenu::handler::get_total_options() >= menu::base::get_max_options() && menu::base::get_current_option() - menu::base::get_scroll_offset() == menu::base::get_max_options()) {
+ menu::base::set_scroll_offset(menu::base::get_scroll_offset() + 1);
+ }
+
+ menu::base::set_current_option(menu::base::get_current_option() + 1);
+ break;
+
+ }
+}
\ No newline at end of file
diff --git a/GTAV/src/menu/base/options/break.h b/GTAV/src/menu/base/options/break.h
new file mode 100644
index 0000000..0ab2666
--- /dev/null
+++ b/GTAV/src/menu/base/options/break.h
@@ -0,0 +1,36 @@
+#pragma once
+#include "option.h"
+#include "menu/base/base.h"
+#include "rage/types/base_types.h"
+
+class break_option : public base_option {
+public:
+ break_option(std::string name)
+ : base_option(name) {}
+
+ break_option& add_requirement(std::function function) {
+ m_requirement = function;
+ return *this;
+ }
+
+ break_option& add_update(std::function function) {
+ m_on_update = function;
+ return *this;
+ }
+
+ break_option& add_translate() {
+ m_name.set_translate(true);
+ m_tooltip.set_translate(true);
+ return *this;
+ }
+
+ void render(int position);
+ void render_selected(int position, std::stack submenu_name_stack);
+ void invoke_save(std::stack submenu_name_stack) {}
+ void invoke_hotkey() {}
+ void write_translation(nlohmann::json& object) {}
+ void read_translation(nlohmann::json& object) {}
+ void reset_translation() {}
+private:
+ std::function m_on_update = [](break_option*) {};
+};
\ No newline at end of file
diff --git a/GTAV/src/menu/base/options/button.cpp b/GTAV/src/menu/base/options/button.cpp
new file mode 100644
index 0000000..49c11e0
--- /dev/null
+++ b/GTAV/src/menu/base/options/button.cpp
@@ -0,0 +1,149 @@
+#include "button.h"
+#include "menu/base/renderer.h"
+#include "menu/base/util/instructionals.h"
+#include "menu/base/util/input.h"
+#include "menu/base/util/menu_input.h"
+#include "menu/base/util/hotkeys.h"
+#include "menu/base/util/notify.h"
+#include "rage/invoker/natives.h"
+#include "util/fiber_pool.h"
+#include "util/fiber.h"
+#include "util/va.h"
+
+void button_option::render(int position) {
+ bool selected = menu::base::is_option_selected(position);
+ color_rgba color = selected ? global::ui::g_option_selected : global::ui::g_option;
+
+ m_on_update(this);
+ m_on_update_this(this, position);
+
+ menu::renderer::draw_text(m_name.get(), { global::ui::g_position.x + 0.004f + m_offset, global::ui::g_position.y + (position * global::ui::g_option_scale) + 0.004f }, menu::renderer::get_normalized_font_scale(global::ui::g_option_font, global::ui::g_option_height), global::ui::g_option_font, color);
+
+ if (m_keyboard.m_enabled) {
+ menu::renderer::draw_sprite({ "ozarktextures", "keyboard.png" }, { global::ui::g_position.x + 0.209f - (0.22f - global::ui::g_scale.x), global::ui::g_position.y + 0.016f + (position * global::ui::g_option_scale) }, { 0.015f * 0.9f, 0.022f * 0.9f }, 0.f, { 255, 255, 255, 255 });
+ } else if (m_sprite.m_enabled && m_sprite.m_requirement()) {
+ color_rgba _color = color;
+ std::string sprite_name = m_sprite.m_asset.second;
+ if (strstr(sprite_name.c_str(), "shop_") && sprite_name.compare("shop_tick_icon")) {
+ sprite_name += "_a";
+ _color = { 255, 255, 255, 255 };
+ }
+
+ if (m_sprite.m_rotate) {
+ m_sprite.m_rotation++;
+ if (m_sprite.m_rotation > 360.f) {
+ m_sprite.m_rotation = 0.f;
+ }
+ }
+
+ menu::renderer::draw_sprite({ m_sprite.m_asset.first, sprite_name }, { global::ui::g_position.x + 0.2195f - (0.23f - global::ui::g_scale.x), global::ui::g_position.y + 0.016f + (position * global::ui::g_option_scale) }, m_sprite.m_scale, m_sprite.m_rotation, _color);
+ }
+
+ if (m_side_text.m_enabled) {
+ float mod = 0.f;
+ if (m_keyboard.m_enabled) {
+ mod = 0.0135f + 0.002f;
+ } else if (m_sprite.m_enabled && m_sprite.m_requirement()) {
+ mod = m_sprite.m_scale.x + 0.002f;
+ }
+
+ menu::renderer::draw_text(m_side_text.m_text, { global::ui::g_position.x + 0.004f, global::ui::g_position.y + (position * global::ui::g_option_scale) + 0.004f }, menu::renderer::get_normalized_font_scale(global::ui::g_option_font, global::ui::g_option_height), global::ui::g_option_font, color, JUSTIFY_RIGHT, { 0.f, (1.0f - (1.0f - (global::ui::g_position.x + (0.315f / 2.f)) - global::ui::g_wrap)) - 0.005f - mod });
+ }
+}
+
+void button_option::render_selected(int position, std::stack submenu_name_stack) {
+ m_on_hover();
+
+ if (m_instructionals.size()) {
+ instructionals::setup();
+
+ for (std::tuple& instructional : m_instructionals) {
+ if (std::get<2>(instructional)) {
+ instructionals::add_instructional(std::get<0>(instructional), (eControls)std::get<1>(instructional));
+ } else {
+ instructionals::add_instructional(std::get<0>(instructional), (eScaleformButtons)std::get<1>(instructional));
+ }
+ }
+
+ instructionals::close();
+ }
+
+ if (m_requirement() && menu::input::is_option_pressed()) {
+ m_on_click();
+ m_on_click_this(this);
+
+ if (m_keyboard.m_enabled) {
+ m_keyboard.m_is_active = true;
+ menu::base::set_keyboard_title(m_keyboard.m_title);
+ native::display_onscreen_keyboard(0, "Ozark", "", m_keyboard.m_default_text.c_str(), "", "", "", m_keyboard.m_max_chars);
+ }
+ }
+
+ if (m_has_hotkey && m_requirement()) {
+ if (menu::input::is_just_released(true, VK_F12)) {
+ native::play_sound_frontend(-1, "ATM_WINDOW", "HUD_FRONTEND_DEFAULT_SOUNDSET", 0);
+
+ menu::input::push([this] {
+ menu::input::hotkey(m_name.get(), this);
+ });
+ }
+ }
+
+ if (m_keyboard.m_enabled) {
+ if (m_keyboard.m_is_active) {
+ int status = native::update_onscreen_keyboard();
+ if (status == 0) {
+ menu::base::set_disable_input_this_frame();
+ } else if (status == 1) {
+ if (m_keyboard.m_callback) {
+ m_keyboard.m_callback(this, native::get_onscreen_keyboard_result());
+ }
+
+ m_keyboard.m_is_active = false;
+ } else if (status > 1) {
+ m_keyboard.m_is_active = false;
+ }
+ }
+ }
+}
+
+void button_option::invoke_hotkey() {
+ if (!m_requirement()) return;
+
+ m_on_click();
+ m_on_click_this(this);
+
+ if (m_keyboard.m_enabled) {
+ if (!m_keyboard.m_is_active) {
+ m_keyboard.m_is_active = true;
+ menu::base::set_keyboard_title(m_keyboard.m_title);
+
+ util::fiber::pool::add([this] {
+ native::display_onscreen_keyboard(0, "Ozark", "", "", "", "", "", m_keyboard.m_max_chars);
+
+ while (m_keyboard.m_is_active) {
+ util::fiber::go_to_main();
+
+ int status = native::update_onscreen_keyboard();
+ if (status == 0) {
+ menu::base::set_disable_input_this_frame();
+ } else if (status == 1) {
+ if (m_keyboard.m_callback) {
+ m_keyboard.m_callback(this, native::get_onscreen_keyboard_result());
+ }
+
+ m_keyboard.m_is_active = false;
+ } else if (status > 1) {
+ m_keyboard.m_is_active = false;
+ }
+ }
+ });
+ }
+ }
+
+ static std::unordered_map notifies;
+ if (notifies[native::get_hash_key(m_name.get_original().c_str())] > GetTickCount()) return;
+
+ notifies[native::get_hash_key(m_name.get_original().c_str())] = GetTickCount() + 5000;
+ menu::notify::stacked(TRANSLATE(t_hotkey), util::va::va("%s %s", TRANSLATE(t_used_hotkey_for), m_name.get().c_str()));
+}
\ No newline at end of file
diff --git a/GTAV/src/menu/base/options/button.h b/GTAV/src/menu/base/options/button.h
new file mode 100644
index 0000000..6a01a3c
--- /dev/null
+++ b/GTAV/src/menu/base/options/button.h
@@ -0,0 +1,153 @@
+#pragma once
+#include "option.h"
+#include "menu/base/base.h"
+#include "rage/types/base_types.h"
+#include "util/math.h"
+
+class button_option : public base_option {
+public:
+ button_option(std::string name)
+ : base_option(name) {}
+
+ button_option& ref() {
+ return *this;
+ }
+
+ button_option& add_click(std::function function) {
+ m_on_click = function;
+ return *this;
+ }
+
+ button_option& add_click_this(std::function function) {
+ m_on_click_this = function;
+ return *this;
+ }
+
+ button_option& add_requirement(std::function function) {
+ m_requirement = function;
+ return *this;
+ }
+
+ button_option& add_update(std::function function) {
+ m_on_update = function;
+ return *this;
+ }
+
+ button_option& add_update_this(std::function function) {
+ m_on_update_this = function;
+ return *this;
+ }
+
+ button_option& add_hover(std::function function) {
+ m_on_hover = function;
+ return *this;
+ }
+
+ button_option& add_tooltip(std::string tooltip) {
+ m_tooltip.set(tooltip.c_str());
+ return *this;
+ }
+
+ button_option& add_keyboard(std::string title, int max_chars, std::function function) {
+ m_keyboard = { true, false, max_chars, function, title };
+ return *this;
+ }
+
+ button_option& add_translate() {
+ m_name.set_translate(true);
+ m_tooltip.set_translate(true);
+ return *this;
+ }
+
+ button_option& remove_sprite() {
+ m_sprite.m_enabled = false;
+ return *this;
+ }
+
+ button_option& add_sprite(std::pair asset, std::function requirement = [] { return true; }) {
+ m_sprite = { true, asset, requirement };
+ return *this;
+ }
+
+ button_option& add_sprite_scale(math::vector2 scale) {
+ m_sprite.m_scale = scale;
+ return *this;
+ }
+
+ button_option& add_sprite_rotation() {
+ m_sprite.m_rotate = true;
+ return *this;
+ }
+
+ button_option& add_instructional(std::string text, eScaleformButtons button_option) {
+ m_instructionals.push_back({ text, button_option, false });
+ return *this;
+ }
+
+ button_option& add_instructional(std::string text, eControls button_option) {
+ m_instructionals.push_back({ text, button_option, true });
+ return *this;
+ }
+
+ button_option& add_side_text(std::string text) {
+ m_side_text = { true, text };
+ return *this;
+ }
+
+ button_option& add_hotkey() {
+ m_has_hotkey = true;
+ return *this;
+ }
+
+ button_option& add_offset(float offset) {
+ m_offset = offset;
+ return *this;
+ }
+
+ button_option& add_keyboard_default(std::string de) {
+ m_keyboard.m_default_text = de;
+ return *this;
+ }
+
+ void render(int position);
+ void render_selected(int position, std::stack submenu_name_stack);
+ void invoke_save(std::stack submenu_name_stack) {}
+ void invoke_hotkey();
+ void write_translation(nlohmann::json& object) {}
+ void read_translation(nlohmann::json& object) {}
+ void reset_translation() {}
+private:
+ struct Keyboard {
+ bool m_enabled = false;
+ bool m_is_active = false;
+ int m_max_chars = 0;
+ std::function m_callback = {};
+ std::string m_title = "";
+ std::string m_default_text = "";
+ };
+
+ struct Sprite {
+ bool m_enabled = false;
+ std::pair m_asset = {};
+ std::function m_requirement = {};
+ math::vector2 m_scale = { 0.f, 0.f };
+ bool m_rotate = false;
+ float m_rotation = 0.f;
+ };
+
+ struct SideText {
+ bool m_enabled = false;
+ std::string m_text = "";
+ };
+
+ Keyboard m_keyboard;
+ Sprite m_sprite;
+ SideText m_side_text;
+ float m_offset = 0.f;
+
+ std::function m_on_click = []() {};
+ std::function m_on_click_this = [](button_option*) {};
+ std::function m_on_hover = []() {};
+ std::function m_on_update = [](button_option*) {};
+ std::function m_on_update_this = [](button_option*, int) {};
+};
\ No newline at end of file
diff --git a/GTAV/src/menu/base/options/color_option.cpp b/GTAV/src/menu/base/options/color_option.cpp
new file mode 100644
index 0000000..93b37ba
--- /dev/null
+++ b/GTAV/src/menu/base/options/color_option.cpp
@@ -0,0 +1,52 @@
+#include "color_option.h"
+#include "menu/base/renderer.h"
+#include "menu/base/util/instructionals.h"
+#include "menu/base/util/input.h"
+#include "menu/base/util/menu_input.h"
+
+void color_option::render(int position) {
+ bool selected = menu::base::is_option_selected(position);
+ color_rgba color = selected ? global::ui::g_option_selected : global::ui::g_option;
+
+ m_on_update(this);
+ m_on_update_this(this, position);
+
+ menu::renderer::draw_text(m_name.get(), { global::ui::g_position.x + 0.004f, global::ui::g_position.y + (position * global::ui::g_option_scale) + 0.004f }, menu::renderer::get_normalized_font_scale(global::ui::g_option_font, global::ui::g_option_height), global::ui::g_option_font, color);
+ menu::renderer::draw_rect({ global::ui::g_position.x + 0.2145f - (0.23f - global::ui::g_scale.x), global::ui::g_position.y + (position * global::ui::g_option_scale) + 0.0055f }, { 0.01f, 0.02f }, *m_color);
+}
+
+void color_option::render_selected(int position, std::stack submenu_name_stack) {
+ m_on_hover();
+
+ if (m_instructionals.size()) {
+ instructionals::setup();
+
+ for (std::tuple& instructional : m_instructionals) {
+ if (std::get<2>(instructional)) {
+ instructionals::add_instructional(std::get<0>(instructional), (eControls)std::get<1>(instructional));
+ } else {
+ instructionals::add_instructional(std::get<0>(instructional), (eScaleformButtons)std::get<1>(instructional));
+ }
+ }
+
+ instructionals::close();
+ }
+
+ if (m_requirement() && menu::input::is_option_pressed()) {
+ m_on_click();
+ m_on_click_this(this);
+
+ menu::input::push([this] {
+ menu::input::color(m_color);
+ });
+ }
+
+ if (m_savable) {
+ if (m_color) {
+ if (m_color->r != m_color_cache.r || m_color->g != m_color_cache.g || m_color->b != m_color_cache.b || m_color->a != m_color_cache.a) {
+ m_color_cache = *m_color;
+ util::config::write_color(submenu_name_stack, m_name.get_original(), m_color_cache, { "Color" });
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/GTAV/src/menu/base/options/color_option.h b/GTAV/src/menu/base/options/color_option.h
new file mode 100644
index 0000000..1ce9952
--- /dev/null
+++ b/GTAV/src/menu/base/options/color_option.h
@@ -0,0 +1,102 @@
+#pragma once
+#include "option.h"
+#include "menu/base/base.h"
+#include "rage/types/base_types.h"
+#include "util/math.h"
+#include "util/config.h"
+
+class color_option : public base_option {
+public:
+ color_option(std::string name)
+ : base_option(name) {}
+
+ color_option& add_color(color_rgba& color) {
+ m_color = &color;
+ m_color_cache = color;
+ return *this;
+ }
+
+ color_option& add_click(std::function function) {
+ m_on_click = function;
+ return *this;
+ }
+
+ color_option& add_click_this(std::function function) {
+ m_on_click_this = function;
+ return *this;
+ }
+
+ color_option& add_requirement(std::function function) {
+ m_requirement = function;
+ return *this;
+ }
+
+ color_option& add_update(std::function function) {
+ m_on_update = function;
+ return *this;
+ }
+
+ color_option& add_update_this(std::function function) {
+ m_on_update_this = function;
+ return *this;
+ }
+
+ color_option& add_hover(std::function function) {
+ m_on_hover = function;
+ return *this;
+ }
+
+ color_option& add_tooltip(std::string tooltip) {
+ m_tooltip.set(tooltip.c_str());
+ return *this;
+ }
+
+ color_option& add_translate() {
+ m_name.set_translate(true);
+ m_tooltip.set_translate(true);
+ return *this;
+ }
+
+ color_option& add_instructional(std::string text, eScaleformButtons color_option) {
+ m_instructionals.push_back({ text, color_option, false });
+ return *this;
+ }
+
+ color_option& add_instructional(std::string text, eControls color_option) {
+ m_instructionals.push_back({ text, color_option, true });
+ return *this;
+ }
+
+ color_option& add_savable(std::stack menu_stack) {
+ if (menu_stack.size() <= 0) return *this;
+
+ m_savable = true;
+ if (m_color && m_requirement()) {
+ util::config::read_color(menu_stack, m_name.get_original(), m_color, { "Color" });
+ m_color_cache = *m_color;
+ }
+
+ return *this;
+ }
+
+ color_rgba* get_color() {
+ return m_color;
+ }
+
+ void render(int position);
+ void render_selected(int position, std::stack submenu_name_stack);
+ void invoke_save(std::stack submenu_name_stack) {}
+ void invoke_hotkey() {}
+ void write_translation(nlohmann::json& object) {}
+ void read_translation(nlohmann::json& object) {}
+ void reset_translation() {}
+private:
+ color_rgba* m_color;
+ color_rgba m_color_cache;
+
+ std::function m_on_click = []() {};
+ std::function m_on_click_this = [](color_option*) {};
+ std::function m_on_hover = []() {};
+ std::function m_on_update = [](color_option*) {};
+ std::function m_on_update_this = [](color_option*, int) {};
+};
\ No newline at end of file
diff --git a/GTAV/src/menu/base/options/number.cpp b/GTAV/src/menu/base/options/number.cpp
new file mode 100644
index 0000000..e855a51
--- /dev/null
+++ b/GTAV/src/menu/base/options/number.cpp
@@ -0,0 +1,297 @@
+#include "number.h"
+#include "menu/base/renderer.h"
+#include "menu/base/util/instructionals.h"
+#include "menu/base/util/input.h"
+#include "menu/base/util/menu_input.h"
+#include "menu/base/util/hotkeys.h"
+#include "menu/base/util/notify.h"
+#include "rage/invoker/natives.h"
+#include "util/fiber_pool.h"
+#include "util/fiber.h"
+#include "util/va.h"
+#include
+
+template
+void number_option::render(int position) {
+ bool selected = menu::base::is_option_selected(position);
+ color_rgba color = selected ? global::ui::g_option_selected : global::ui::g_option;
+
+ m_on_update(this, position);
+
+ menu::renderer::draw_text(m_name.get(), { global::ui::g_position.x + 0.004f + m_offset, global::ui::g_position.y + (position * global::ui::g_option_scale) + 0.004f }, menu::renderer::get_normalized_font_scale(global::ui::g_option_font, global::ui::g_option_height), global::ui::g_option_font, color);
+
+ int size = 26;
+ if (global::vars::g_desktop_resolution.x == 5120) {
+ size = 20;
+ }
+
+ char name_buffer[512];
+ /*if (selected) {
+ if (m_show_max) {
+ sprintf_s(name_buffer, ("~s~← " + m_format + " / " + m_format + " →").c_str(), *m_number, m_max);
+ } else {
+ sprintf_s(name_buffer, ("~s~← " + m_format + " →").c_str(), *m_number);
+ }
+ } else {
+ if (m_show_max) {
+ sprintf_s(name_buffer, (m_format + " / " + m_format).c_str(), *m_number, m_max);
+ } else {
+ sprintf_s(name_buffer, m_format.c_str(), *m_number);
+ }
+ }*/
+
+ if (m_show_max) {
+ sprintf_s(name_buffer, (m_format + " / " + m_format).c_str(), *m_number, m_max);
+ } else {
+ sprintf_s(name_buffer, m_format.c_str(), *m_number);
+ }
+
+ switch (m_type) {
+ case TOGGLE:
+ menu::renderer::draw_sprite({ "ozarktextures", "toggle_circle.png" }, { global::ui::g_position.x + global::ui::g_toggle_position.x - (0.23f - global::ui::g_scale.x), (global::ui::g_position.y + global::ui::g_toggle_position.y) + (position * global::ui::g_option_scale) }, global::ui::g_toggle_scale, 0.f, *m_toggle ? global::ui::g_toggle_on : global::ui::g_toggle_off);
+ menu::renderer::draw_text(name_buffer, { global::ui::g_position.x + 0.004f, global::ui::g_position.y + (position * global::ui::g_option_scale) + 0.004f }, menu::renderer::get_normalized_font_scale(global::ui::g_option_font, global::ui::g_option_height), global::ui::g_option_font, color, JUSTIFY_RIGHT, { 0.f, (1.0f - (1.0f - (global::ui::g_position.x + (0.315f / 2.f)) - global::ui::g_wrap + (0.22f - global::ui::g_scale.x))) - 0.016f });
+ break;
+
+ case SCROLL:
+ case SCROLLSELECT:
+ menu::renderer::draw_text(name_buffer, { global::ui::g_position.x + 0.004f, global::ui::g_position.y + (position * global::ui::g_option_scale) + 0.004f }, menu::renderer::get_normalized_font_scale(global::ui::g_option_font, global::ui::g_option_height), global::ui::g_option_font, color, JUSTIFY_RIGHT, { 0.f, (1.0f - (1.0f - (global::ui::g_position.x + (0.315f / 2.f)) - global::ui::g_wrap + (0.22f - global::ui::g_scale.x))) - 0.005f });
+ break;
+ }
+}
+
+template
+void number_option::render_selected(int position, std::stack submenu_name_stack) {
+ m_on_hover();
+
+ if (m_requirement() && menu::input::is_option_pressed()) {
+ bool dont_process = false;
+
+ switch (m_type) {
+ case TOGGLE:
+ *m_toggle = !*m_toggle;
+ break;
+
+ case SCROLL:
+ m_keyboard_active = true;
+ dont_process = true;
+ menu::base::set_keyboard_title("Enter input");
+ native::display_onscreen_keyboard(0, "Ozark", "", "", "", "", "", 10);
+ break;
+ }
+
+ if (!dont_process) {
+ m_on_click();
+ }
+ }
+
+ if (m_has_hotkey && m_requirement()) {
+ if (menu::input::is_just_released(true, VK_F12)) {
+ native::play_sound_frontend(-1, "ATM_WINDOW", "HUD_FRONTEND_DEFAULT_SOUNDSET", 0);
+
+ menu::input::push([this] {
+ menu::input::hotkey(m_name.get(), this);
+ });
+ }
+ }
+
+ if (m_keyboard_active) {
+ int status = native::update_onscreen_keyboard();
+ if (status == 0) {
+ menu::base::set_disable_input_this_frame();
+ } else if (status == 1) {
+ std::string name(native::get_onscreen_keyboard_result());
+
+ if (!name.empty()) {
+ bool bad = false;
+ static char valid_chars[] = {
+ '0', '1', '2', '3', '4',
+ '5', '6', '7', '8', '9',
+ '.', '-'
+ };
+
+ for (char c : name) {
+ bad = true;
+
+ for (char v : valid_chars) {
+ if (v == c) {
+ bad = false;
+ break;
+ }
+ }
+
+ if (bad) break;
+ }
+
+ if (!bad) {
+ Type out = 0;
+
+ if (std::is_same::value) {
+ out = (Type)std::stof(name);
+ } else if (std::is_same::value) {
+ out = (Type)std::stoll(name);
+ } else {
+ out = (Type)std::stoi(name);
+ }
+
+ if (m_has_min && out < m_min) {
+ *m_number = m_min;
+ } else if (m_has_max && out > m_max) {
+ *m_number = m_max;
+ } else {
+ *m_number = out;
+ }
+
+ m_on_click();
+ }
+ }
+
+ m_keyboard_active = false;
+ } else if (status > 1) {
+ m_keyboard_active = false;
+ }
+ }
+
+ if (m_savable) {
+ if (m_number_cache != *m_number) {
+ m_number_cache = *m_number;
+
+ if (std::is_same::value || std::is_same::value || std::is_same::value) {
+ util::config::write_int(submenu_name_stack, m_name.get_original(), (int)*m_number, { "Values" });
+ } else if (std::is_same::value) {
+ util::config::write_float(submenu_name_stack, m_name.get_original(), (float)*m_number, { "Values" });
+ }
+ }
+
+ if (m_type == TOGGLE) {
+ if (m_toggle_cache != *m_toggle) {
+ m_toggle_cache = *m_toggle;
+ util::config::write_bool(submenu_name_stack, m_name.get_original(), *m_toggle);
+ }
+ }
+ }
+
+ static uint32_t timer = 0;
+
+ if (menu::input::is_left_just_pressed()) {
+ if (!m_left_disabled) {
+ *m_number -= m_step;
+ if (m_loop) {
+ if (*m_number < m_min) *m_number = m_max;
+ } else if (*m_number < m_min && m_has_min) *m_number = m_min;
+
+ if (m_type == SCROLL || m_type == TOGGLE) {
+ m_on_click();
+ }
+
+ native::play_sound_frontend(-1, "NAV_LEFT_RIGHT", "HUD_FRONTEND_DEFAULT_SOUNDSET", FALSE);
+ }
+
+ m_left_disabled = false;
+ m_left_timer = 0;
+ }
+
+ if (menu::input::is_right_just_pressed()) {
+ if (!m_right_disabled) {
+ *m_number += m_step;
+ if (m_loop) {
+ if (*m_number > m_max) *m_number = m_min;
+ } else if (*m_number > m_max && m_has_max) *m_number = m_max;
+
+ if (m_type == SCROLL || m_type == TOGGLE) {
+ m_on_click();
+ }
+
+ native::play_sound_frontend(-1, "NAV_LEFT_RIGHT", "HUD_FRONTEND_DEFAULT_SOUNDSET", FALSE);
+ }
+
+ m_right_disabled = false;
+ m_right_timer = 0;
+ }
+
+ if (menu::input::is_left_pressed()) {
+ if (++m_left_timer > 20) {
+ m_left_disabled = true;
+ if ((timeGetTime() - timer) > m_scroll_speed) {
+ *m_number -= m_step;
+ if (m_loop) {
+ if (*m_number < m_min) *m_number = m_max;
+ } else if (*m_number < m_min && m_has_min) *m_number = m_min;
+
+ if (m_type == SCROLL || m_type == TOGGLE) {
+ m_on_click();
+ }
+
+ timer = timeGetTime();
+ native::play_sound_frontend(-1, "NAV_LEFT_RIGHT", "HUD_FRONTEND_DEFAULT_SOUNDSET", FALSE);
+ }
+ }
+ }
+
+ if (menu::input::is_right_pressed()) {
+ if (++m_right_timer > 20) {
+ m_right_disabled = true;
+ if ((timeGetTime() - timer) > m_scroll_speed) {
+ *m_number += m_step;
+ if (m_loop) {
+ if (*m_number > m_max) *m_number = m_min;
+ } else if (*m_number > m_max && m_has_max) *m_number = m_max;
+
+ if (m_type == SCROLL || m_type == TOGGLE) {
+ m_on_click();
+ }
+
+ timer = timeGetTime();
+ native::play_sound_frontend(-1, "NAV_LEFT_RIGHT", "HUD_FRONTEND_DEFAULT_SOUNDSET", FALSE);
+ }
+ }
+ }
+}
+
+template
+void number_option::invoke_save(std::stack submenu_name_stack) {
+ if (m_savable) {
+ if (std::is_same::value || std::is_same::value || std::is_same::value) {
+ util::config::write_int(submenu_name_stack, m_name.get_original(), (int)*m_number, { "Values" });
+ } else if (std::is_same::value) {
+ util::config::write_float(submenu_name_stack, m_name.get_original(), (float)*m_number, { "Values" });
+ }
+
+ if (m_type == TOGGLE) {
+ util::config::write_bool(submenu_name_stack, m_name.get_original(), *m_toggle);
+ }
+ }
+}
+
+template
+void number_option::invoke_hotkey() {
+ if (!m_requirement()) return;
+
+ bool dont_process = false;
+ switch (m_type) {
+ case TOGGLE:
+ *m_toggle = !*m_toggle;
+ break;
+
+ case SCROLL:
+ m_keyboard_active = true;
+ dont_process = true;
+ menu::base::set_keyboard_title("Enter input");
+ native::display_onscreen_keyboard(0, "Ozark", "", "", "", "", "", 10);
+ break;
+ }
+
+ if (!dont_process) {
+ m_on_click();
+ }
+
+ static std::unordered_map notifies;
+ if (notifies[native::get_hash_key(m_name.get_original().c_str())] > GetTickCount()) return;
+
+ notifies[native::get_hash_key(m_name.get_original().c_str())] = GetTickCount() + 5000;
+ menu::notify::stacked(TRANSLATE(t_hotkey), util::va::va("%s %s", TRANSLATE(t_used_hotkey_for), m_name.get().c_str()));
+}
+
+template class number_option;
+template class number_option;
+template class number_option;
+template class number_option;
\ No newline at end of file
diff --git a/GTAV/src/menu/base/options/number.h b/GTAV/src/menu/base/options/number.h
new file mode 100644
index 0000000..a8d8018
--- /dev/null
+++ b/GTAV/src/menu/base/options/number.h
@@ -0,0 +1,163 @@
+#pragma once
+#include "stdafx.h"
+#include "option.h"
+#include "menu/base/base.h"
+#include "util/config.h"
+
+template
+class number_option : public base_option {
+public:
+ number_option(scroll_option_type type, std::string name)
+ : base_option(name, false, type, type == SCROLL), m_type(type)
+ {}
+
+ number_option& add_toggle(bool& t) {
+ m_toggle = &t;
+ m_toggle_cache = t;
+ return *this;
+ }
+
+ number_option& add_number(Type& num, std::string fmt, Type step) {
+ m_number = #
+ m_number_cache = num;
+ m_format = fmt;
+ m_step = step;
+ return *this;
+ }
+
+ number_option& add_min(Type m) {
+ m_min = m;
+ m_has_min = true;
+ return *this;
+ }
+
+ number_option& add_max(Type m) {
+ m_max = m;
+ m_has_max = true;
+ return *this;
+ }
+
+ number_option& add_click(std::function func) {
+ m_on_click = func;
+ return *this;
+ }
+
+ number_option& add_hover(std::function func) {
+ m_on_hover = func;
+ return *this;
+ }
+
+ number_option& add_update(std::function func) {
+ m_on_update = func;
+ return *this;
+ }
+
+ number_option& add_requirement(std::function func) {
+ m_requirement = func;
+ return *this;
+ }
+
+ number_option& show_max() {
+ m_show_max = true;
+ return *this;
+ }
+
+ number_option& add_tooltip(std::string tip) {
+ m_tooltip.set(tip);
+ return *this;
+ }
+
+ number_option& set_scroll_speed(uint32_t speed) {
+ m_scroll_speed = speed;
+ return *this;
+ }
+
+ number_option& can_loop() {
+ m_loop = true;
+ return *this;
+ }
+
+ number_option& add_translate() {
+ m_name.set_translate(true);
+ m_tooltip.set_translate(true);
+ return *this;
+ }
+
+ number_option& add_hotkey() {
+ m_has_hotkey = true;
+ return *this;
+ }
+
+ number_option& add_savable(std::stack menu_stack) {
+ if (menu_stack.size() <= 0) return *this;
+
+ m_savable = true;
+ if (m_number && m_requirement()) {
+ if (std::is_same::value || std::is_same::value || std::is_same::value) {
+ *m_number = (Type)util::config::read_int(menu_stack, m_name.get_original(), (int)*m_number, { "Values" });
+ } else if (std::is_same::value) {
+ *m_number = (Type)util::config::read_float(menu_stack, m_name.get_original(), (float)*m_number, { "Values" });
+ }
+
+ if (m_type == TOGGLE) {
+ *m_toggle = util::config::read_bool(menu_stack, m_name.get_original(), *m_toggle);
+ m_toggle_cache = *m_toggle;
+
+ if (*m_toggle) {
+ m_on_click();
+ }
+ }
+
+ if (m_has_min && *m_number < m_min) {
+ *m_number = m_min;
+ }
+
+ if (m_has_max && *m_number > m_max) {
+ *m_number = m_max;
+ }
+ }
+
+ return *this;
+ }
+
+ number_option& add_offset(float offset) {
+ m_offset = offset;
+ return *this;
+ }
+
+ void render(int position);
+ void render_selected(int position, std::stack submenu_name_stack);
+ void invoke_save(std::stack submenu_name_stack);
+ void invoke_hotkey();
+ void write_translation(nlohmann::json& object) {}
+ void read_translation(nlohmann::json& object) {}
+ void reset_translation() {}
+private:
+ std::function m_on_click = []() {};
+ std::function m_on_hover = []() {};
+ std::function*, int)> m_on_update = [](number_option*, int) {};
+
+ bool* m_toggle = nullptr;
+ bool m_has_min = false;
+ bool m_has_max = false;
+ bool m_loop = false;
+ bool m_show_max = false;
+ bool m_keyboard_active = false;
+
+ scroll_option_type m_type = SCROLL;
+ std::string m_format = "";
+ Type* m_number = nullptr;
+ Type m_step = (Type)0;
+ Type m_min = (Type)0;
+ Type m_max = (Type)0;
+ uint32_t m_scroll_speed = 100;
+
+ int m_left_timer = 0;
+ int m_right_timer = 0;
+ bool m_left_disabled = false;
+ bool m_right_disabled = false;
+ float m_offset = 0.f;
+
+ bool m_toggle_cache = false;
+ Type m_number_cache;
+};
\ No newline at end of file
diff --git a/GTAV/src/menu/base/options/option.cpp b/GTAV/src/menu/base/options/option.cpp
new file mode 100644
index 0000000..8f43894
--- /dev/null
+++ b/GTAV/src/menu/base/options/option.cpp
@@ -0,0 +1,18 @@
+#include "option.h"
+
+base_option::base_option() { }
+
+base_option::base_option(std::string name, bool breaker, bool slider, bool input) {
+ m_name = localization(name);
+ m_break_option = breaker;
+ m_slider = slider;
+ m_input = input;
+}
+
+void base_option::render(int position) {}
+void base_option::render_selected(int position, std::stack submenu_name_stack) {}
+void base_option::invoke_save(std::stack submenu_name_stack) {}
+void base_option::invoke_hotkey() {}
+void base_option::write_translation(nlohmann::json& object) {}
+void base_option::read_translation(nlohmann::json& object) {}
+void base_option::reset_translation() {}
\ No newline at end of file
diff --git a/GTAV/src/menu/base/options/option.h b/GTAV/src/menu/base/options/option.h
new file mode 100644
index 0000000..43d4721
--- /dev/null
+++ b/GTAV/src/menu/base/options/option.h
@@ -0,0 +1,55 @@
+#pragma once
+#include "stdafx.h"
+#include "util/localization.h"
+#include "util/json.h"
+#include "global/ui_vars.h"
+#include
+
+static localization t_used_hotkey_for("Used hotkey for", true, true);
+static localization t_hotkey("Hotkey", true, true);
+
+class base_option {
+public:
+ base_option();
+ base_option(std::string name, bool breaker = false, bool slider = false, bool input = false);
+
+ virtual void render(int position);
+ virtual void render_selected(int position, std::stack submenu_name_stack);
+ virtual void invoke_save(std::stack submenu_name_stack);
+ virtual void invoke_hotkey();
+ virtual void write_translation(nlohmann::json& object);
+ virtual void read_translation(nlohmann::json& object);
+ virtual void reset_translation();
+
+ bool is_visible() { return m_visible && m_requirement(); }
+ bool is_break() { return m_break_option; }
+ bool is_slider() { return m_slider; }
+ bool is_input() { return m_input; }
+ bool is_savable() { return m_savable; }
+ bool has_hotkey() { return m_has_hotkey; }
+ int get_hotkey() { return m_hotkey; }
+
+ localization& get_name() { return m_name; }
+ localization& get_tooltip() { return m_tooltip; }
+ std::stack* get_submenu_name_stack() { return m_submenu_name_stack; }
+
+ void set_hotkey(int key) { m_hotkey = key; };
+ void set_name(std::string name) { m_name.set(name); };
+ void set_submenu_name_stack(std::stack* stack) { m_submenu_name_stack = stack; }
+ void set_tooltip(std::string tooltip) { m_tooltip.set(tooltip); }
+protected:
+ localization m_name;
+ localization m_tooltip;
+
+ bool m_break_option = false;
+ bool m_visible = true;
+ bool m_savable = false;
+ bool m_slider = false;
+ bool m_input = false;
+ bool m_has_hotkey = false;
+ int m_hotkey = -1;
+
+ std::function m_requirement = []() { return true; };
+ std::vector> m_instructionals = {};
+ std::stack* m_submenu_name_stack = nullptr;
+};
\ No newline at end of file
diff --git a/GTAV/src/menu/base/options/radio.cpp b/GTAV/src/menu/base/options/radio.cpp
new file mode 100644
index 0000000..24eaaa1
--- /dev/null
+++ b/GTAV/src/menu/base/options/radio.cpp
@@ -0,0 +1,36 @@
+#include "radio.h"
+#include "menu/base/util/input.h"
+#include "menu/base/renderer.h"
+
+void radio_option::render(int position) {
+ bool selected = menu::base::is_option_selected(position);
+ color_rgba color = selected ? global::ui::g_option_selected : global::ui::g_option;
+
+ m_on_update(this);
+
+ menu::renderer::draw_text(m_name.get(), { global::ui::g_position.x + 0.004f, global::ui::g_position.y + (position * global::ui::g_option_scale) + 0.004f }, menu::renderer::get_normalized_font_scale(global::ui::g_option_font, global::ui::g_option_height), global::ui::g_option_font, color);
+
+ if (m_context->m_toggles[m_index]) {
+ std::string sprite = m_context->m_sprite.second;
+ if (strstr(sprite.c_str(), "shop_") && !strstr(sprite.c_str(), "shop_tick_icon")) {
+ sprite += "_a";
+ color = { 255, 255, 255, 255 };
+ }
+
+ menu::renderer::draw_sprite({ m_context->m_sprite.first, sprite }, { global::ui::g_position.x + 0.2195f - (0.23f - global::ui::g_scale.x), (global::ui::g_position.y + 0.016f) + (position * global::ui::g_option_scale) }, { 0.02112f * 0.8f, 0.03744f * 0.8f }, 0.f, color);
+ }
+}
+
+void radio_option::render_selected(int position, std::stack submenu_name_stack) {
+ m_on_hover();
+
+ if (m_requirement() && menu::input::is_option_pressed()) {
+ if (!m_context->m_toggles[m_index]) {
+ m_context->m_toggles[m_index] = true;
+ m_context->m_toggles[m_context->m_selected] = false;
+ m_context->m_selected = m_id;
+ }
+
+ m_on_click();
+ }
+}
\ No newline at end of file
diff --git a/GTAV/src/menu/base/options/radio.h b/GTAV/src/menu/base/options/radio.h
new file mode 100644
index 0000000..1cd2902
--- /dev/null
+++ b/GTAV/src/menu/base/options/radio.h
@@ -0,0 +1,80 @@
+#pragma once
+#include "stdafx.h"
+#include "option.h"
+#include "menu/base/base.h"
+
+class radio_option : public base_option {
+public:
+ radio_option(std::string name)
+ : base_option(name) {}
+
+ radio_option& add_radio(radio_context& radio) {
+ m_context = &radio;
+ m_index = m_context->m_count;
+ m_id = m_context->m_count;
+ m_context->m_count++;
+
+ if (m_id == 0) {
+ m_context->m_toggles[m_index] = true;
+ }
+
+ return *this;
+ }
+
+ radio_option& add_click(std::function function) {
+ m_on_click = function;
+ return *this;
+ }
+
+ radio_option& add_requirement(std::function function) {
+ m_requirement = function;
+ return *this;
+ }
+
+ radio_option& add_update(std::function function) {
+ m_on_update = function;
+ return *this;
+ }
+
+ radio_option& add_hover(std::function function) {
+ m_on_hover = function;
+ return *this;
+ }
+
+ radio_option& add_tooltip(std::string tooltip) {
+ m_tooltip.set(tooltip.c_str());
+ return *this;
+ }
+
+ radio_option& add_translate() {
+ m_name.set_translate(true);
+ m_tooltip.set_translate(true);
+ return *this;
+ }
+
+ void update_selected() {
+ m_context->m_toggles[m_index] = true;
+ m_context->m_toggles[m_context->m_selected] = false;
+ m_context->m_selected = m_id;
+ }
+
+ bool is_selected() {
+ return m_context->m_selected == m_id;
+ }
+
+ void render(int position);
+ void render_selected(int position, std::stack submenu_name_stack);
+ void invoke_save(std::stack submenu_name_stack) {}
+ void invoke_hotkey() {}
+ void write_translation(nlohmann::json& object) {}
+ void read_translation(nlohmann::json& object) {}
+ void reset_translation() {}
+private:
+ std::function m_on_click = []() {};
+ std::function m_on_hover = []() {};
+ std::function m_on_update = [](radio_option*) {};
+
+ int m_id = 0;
+ int m_index = 0;
+ radio_context* m_context = nullptr;
+};
\ No newline at end of file
diff --git a/GTAV/src/menu/base/options/scroll.h b/GTAV/src/menu/base/options/scroll.h
new file mode 100644
index 0000000..ccb534e
--- /dev/null
+++ b/GTAV/src/menu/base/options/scroll.h
@@ -0,0 +1,338 @@
+#pragma once
+#include "stdafx.h"
+#include "option.h"
+#include "util/localization.h"
+#include "util/va.h"
+#include "menu/base/base.h"
+#include "menu/base/renderer.h"
+#include "menu/base/util/input.h"
+#include "menu/base/util/menu_input.h"
+#include "menu/base/util/notify.h"
+#include "global/vars.h"
+#include "rage/invoker/natives.h"
+#include
+
+template
+struct scroll_struct {
+ localization m_name;
+ Type m_result;
+};
+
+template
+class scroll_option : public base_option {
+public:
+ scroll_option(scroll_option_type type, std::string name)
+ : base_option(name, false, true), m_type(type)
+ {}
+
+ scroll_option& add_scroll(int& num, int min_, int max_, scroll_struct* structure) {
+ m_has_min = true;
+ m_has_max = true;
+ m_min = min_;
+ m_max = max_ - 1;
+ m_number = #
+
+ if (*m_number < m_min) *m_number = m_min;
+ if (*m_number > m_max) *m_number = m_max;
+
+ m_number_cache = *m_number;
+ m_scroll = structure;
+ return *this;
+ }
+
+ scroll_option& add_toggle(bool& t) {
+ m_toggle = &t;
+ m_toggle_cache = t;
+ return *this;
+ }
+
+ scroll_option& add_click(std::function function) {
+ m_on_click = function;
+ return *this;
+ }
+
+ scroll_option& add_requirement(std::function