Initial Commit
This commit is contained in:
commit
25f07857ff
241
CHEAT_1_SIGS.txt
Normal file
241
CHEAT_1_SIGS.txt
Normal file
@ -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
|
922
GTAV/GTAV.vcxproj
Normal file
922
GTAV/GTAV.vcxproj
Normal file
@ -0,0 +1,922 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<ProjectGuid>{d7fd141f-81b7-45af-89d4-9e45c1887955}</ProjectGuid>
|
||||||
|
<RootNamespace>GTAV</RootNamespace>
|
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="Shared">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<OutDir>$(SolutionDir)Build\$(Configuration)\$(ProjectName)\</OutDir>
|
||||||
|
<IntDir>$(SolutionDir)Build\Intermediate\$(Configuration)\$(ProjectName)\</IntDir>
|
||||||
|
<LibraryPath>$(SolutionDir)Dependencies;$(LibraryPath)</LibraryPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;GTAV_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<ConformanceMode>true</ConformanceMode>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableUAC>false</EnableUAC>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;GTAV_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<ConformanceMode>true</ConformanceMode>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableUAC>false</EnableUAC>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;GTAV_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<ConformanceMode>true</ConformanceMode>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableUAC>false</EnableUAC>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;GTAV_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<ConformanceMode>false</ConformanceMode>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||||
|
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||||
|
<AdditionalIncludeDirectories>$(ProjectDir)/src;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<DebugInformationFormat>None</DebugInformationFormat>
|
||||||
|
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<StringPooling>true</StringPooling>
|
||||||
|
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||||
|
<AdditionalOptions>/MP64 %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
<UseFullPaths>false</UseFullPaths>
|
||||||
|
<LanguageStandard_C>stdc17</LanguageStandard_C>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<GenerateMapFile>true</GenerateMapFile>
|
||||||
|
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||||
|
<EnableUAC>false</EnableUAC>
|
||||||
|
<AdditionalDependencies>$(SolutionDir)Dependencies\cryptopp\lib\cryptlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="src\auth\http\curl.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\options\color_option.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\helper\color\helper_color_preset.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\helper\esp\helper_esp_settings.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\helper\esp\helper_esp_settings_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\helper\helper_color.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\helper\helper_esp.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\helper\helper_rainbow.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\helper\rainbow\helper_rainbow_load.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\dispatch.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\misc_disables.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\misc_swaps.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\panels\panels_edit.cpp" />
|
||||||
|
<ClCompile Include="src\auth\crypto\crypto.cpp" />
|
||||||
|
<ClCompile Include="src\auth\server\auth_packets.cpp" />
|
||||||
|
<ClCompile Include="src\auth\sockets.cpp" />
|
||||||
|
<ClCompile Include="src\dllmain.cpp" />
|
||||||
|
<ClCompile Include="src\global\auth_vars.cpp" />
|
||||||
|
<ClCompile Include="src\global\lists.cpp" />
|
||||||
|
<ClCompile Include="src\global\ui_vars.cpp" />
|
||||||
|
<ClCompile Include="src\global\vars.cpp" />
|
||||||
|
<ClCompile Include="src\menu\auth.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\base.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\options\break.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\options\button.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\options\number.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\options\option.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\options\radio.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\options\submenu_option.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\options\toggle.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\renderer.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenu.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\camera\aerial_camera.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\display.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\hud.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\misc_camera.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\misc_panels.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\misc_radio.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\panels\panels_parent.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\scripthook.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\swaps\model_swaps.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\swaps\model_swaps_add.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\swaps\model_swaps_presets.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\swaps\texture_swaps.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\swaps\texture_swaps_add.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\misc\visions.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\account\network_account_kd.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\account\network_account_level.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\account\network_account_outfits.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\account\network_account_times.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\account\network_account_unlocks.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\account\network_account_wins_losses.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\account\outfits\network_account_outfits_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\account\outfits\network_account_outfits_edit_name.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\account\wins\network_account_wins_losses_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\chat\network_global_chat_ozark.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\chat\network_global_chat_presets.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\chat\network_global_chat_targets.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\finder\network_session_finder_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\friends\network_friends_selected.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\network_account.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\network_friends.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\network_global_chat.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\network_host_toolkit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\network_join_bypass.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\network_players.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\network_player_search_join.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\network_recent_players.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\network_session.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\network_session_finder.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\network_spoofing.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\abusive\network_players_abusive_attackers.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\abusive\network_players_abusive_explosions.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\friendly\network_players_friendly_drops.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\network_players_abusive.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\network_players_commands.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\network_players_friendly.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\network_players_removals.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\network_players_selected.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\network_players_spawn_blocking.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\network_players_teleport.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\network_players_text.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\network_players_trolling.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\network_players_vehicle.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\teleport\network_players_teleport_apartments.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\text\network_players_text_presets.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\text\network_players_text_save.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\trolling\attachments\network_players_trolling_attachments_presets.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\trolling\network_players_trolling_attachments.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\players\trolling\network_players_trolling_sounds.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\recent\network_recent_players_permanent.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\recent\network_recent_players_selected.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\search\network_player_search_selected.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\session\network_session_excludes.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\session\network_session_overseer.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\session\overseer\network_session_overseer_selected.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\spoofing\crew\network_spoofing_crew_icon.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\spoofing\crew\network_spoofing_crew_motto.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\spoofing\crew\network_spoofing_crew_name.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\spoofing\crew\network_spoofing_crew_presets.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\spoofing\crew\network_spoofing_crew_rank.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\spoofing\crew\network_spoofing_crew_tag.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\spoofing\network_spoofing_crew.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\spoofing\network_spoofing_intervals.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\spoofing\network_spoofing_ip.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\spoofing\network_spoofing_name.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\spoofing\network_spoofing_player_rotation.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\spoofing\network_spoofing_profiles.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\spoofing\network_spoofing_rid.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\spoofing\network_spoofing_vehicle_rotation.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\spoofing\profiles\network_spoofing_profiles_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\toolkit\blocking\network_join_blocking_add.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\toolkit\blocking\network_join_blocking_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\toolkit\blocking\network_join_blocking_manual.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\toolkit\blocking\network_join_blocking_manual_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\toolkit\blocking\network_join_blocking_manual_load.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\toolkit\blocking\network_join_blocking_manual_save.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\toolkit\network_blacklisted_players.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\toolkit\network_desync_kick.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\network\toolkit\network_join_blocking.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\player.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\player\animation.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\player\animation\animations.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\player\animation\clipsets.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\player\animation\scenario.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\player\appearance.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\player\model.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\player\movement.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\player\particles.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\player\ptfx\hand_trails.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\player\ptfx\particle_manager.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\player\wardrobe.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\player\wardrobe_save_load.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protections.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protection\entity\protection_entity_blocking.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protection\entity\protection_entity_ghosting.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protection\entity\protection_entity_ghosting_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protection\limits\entity\protection_spawn_rate_limit_add.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protection\limits\entity\protection_spawn_rate_limit_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protection\limits\protection_message_limit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protection\limits\protection_spawn_rate_limit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protection\protection_anti_detection.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protection\protection_entity_events.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protection\protection_events.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protection\protection_join_blocking.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protection\protection_limits.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protection\protection_net_events.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protection\protection_presence_events.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protection\protection_reactions.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\protection\reactions\protection_reactions_selected.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\settings.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\settings\color\color_sync.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\settings\hide_info.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\settings\hk\hotkey_selected.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\settings\position_scale.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\settings\pos\position_scale_selected.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\settings\settings_color.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\settings\settings_fonts.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\settings\settings_hotkey.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\settings\settings_texture.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\settings\settings_textures.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\settings\themes.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\settings\themes\themes_selected.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\settings\translation.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\settings\translation\translation_selected.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner\object\edit\spawner_object_manage_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner\object\spawner_object_building.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner\object\spawner_object_manage.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner\object\spawner_object_select.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner\object\spawner_object_settings.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner\ped\spawner_ped_manage.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner\ped\edit\spawner_ped_manage_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner\ped\spawner_ped_settings.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner\vehicle\edit\spawner_vehicle_manage_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner\vehicle\garage\spawner_vehicle_garage_selected.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner\vehicle\spawner_vehicle_manage.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner\vehicle\spawner_vehicle_garage.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner\vehicle\spawner_vehicle_modded.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner\vehicle\spawner_vehicle_save.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner\vehicle\spawner_vehicle_selected.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\spawner\vehicle\spawner_vehicle_settings.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\teleport.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\teleport\stores\teleport_stores_selected.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\teleport\teleport_directional.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\teleport\teleport_ipl.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\teleport\teleport_save_load.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\teleport\teleport_selected.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\teleport\teleport_settings.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\teleport\teleport_stores.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\lights\neon\vehicle_customs_neon_color.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\lights\vehicle_customs_neon.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\respray\vehicle_customs_respray_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\respray\vehicle_customs_respray_type.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\vehicle_customs_bumpers.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\vehicle_customs_fender.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\vehicle_customs_horn.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\vehicle_customs_interior.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\vehicle_customs_lights.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\vehicle_customs_lsc.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\vehicle_customs_respray.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\vehicle_customs_wheels.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\wheels\vehicle_customs_wheels_color.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\wheels\vehicle_customs_wheels_tires.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\wheels\vehicle_customs_wheels_tires_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\wheels\vehicle_customs_wheels_type.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\customs\wheels\vehicle_customs_wheels_type_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\modifiers\handling\vehicle_modifiers_handling_attr.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\modifiers\handling\vehicle_modifiers_handling_bike.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\modifiers\handling\vehicle_modifiers_handling_boat.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\modifiers\handling\vehicle_modifiers_handling_flying.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\modifiers\handling\vehicle_modifiers_handling_load.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\modifiers\handling\vehicle_modifiers_handling_main.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\modifiers\vehicle_modifiers_handling.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\movement\vehicle_movement_acrobatics.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\movement\vehicle_movement_parachute.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\seats\vehicle_seats_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_autopilot.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_boost.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_collision.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_customs.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_doors.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_gravity.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_health.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_modifiers.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_movement.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_multipliers.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_particles.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_ramps.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_randomization.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_seats.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_speedometer.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_tyre_tracks.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\vehicle\vehicle_weapons.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\aimbot.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\entity_gun.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\explosions\explosion_editor.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\explosions\explosion_gun.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\give\give_attachment.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\give\give_attachment_selected.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\give\give_tint.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\give\give_tint_selected.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\give\give_weapon.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\give\give_weapons.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\give_weapons_ammo.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\gravity_gun.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\modifiers\ammo\ammo_modifier.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\modifiers\ammo\ammo_modifier_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\modifiers\ammo\ammo_modifier_load.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\modifiers\ammo\ammo_modifier_swap.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\modifiers\weapon_matrix.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\particle_gun.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\weapon_disables.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\weapon_modifiers.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\modifiers\weapon_multipliers.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\purchase\purchase_attachment.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\purchase\purchase_weapon.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\purchase\purchase_weapons.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\triggerbot.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\weapon\weapon_mods.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\bullet_tracers.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\clear_area.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\fx\fx_color.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\fx\fx_cross_multiplier.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\fx\fx_liquid.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\fx\fx_load.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\fx\fx_puddles.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\fx\fx_sky.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\fx\fx_traffic.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\fx\fx_ui_color.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\fx\fx_vehicle.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\fx\fx_vehicle_neons.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\game_fx.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\local_entities.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\ocean.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\ocean\ocean_quads.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\ocean\ocean_quads_edit.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\ocean\ocean_tuning.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\time\time_preset.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\trains.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\weather\fx\weather_fx.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\weather\weather_select.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\world_time.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\world_waypoint.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenus\main\world\world_weather.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\submenu_handler.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\camera.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\control.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\fonts.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\helpers.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\hotkeys.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\input.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\instructionals.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\menu_input.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\notify.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\on_screen_ped.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\panels.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\player_manager.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\rainbow.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\raycast.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\stacked_display.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\stats.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\textures.cpp" />
|
||||||
|
<ClCompile Include="src\menu\base\util\timers.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\apply_player_physical_index.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\apply_weather_meta.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\arxan_integrity.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\bit_buffer_loot.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\bypass.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\compress_data_node.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\crash.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\format_engine_string.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\game_chat.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\get_font_id.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\get_gxt_label.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\get_peer_address.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\get_proc_address.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\handle_desync_negotiation.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\has_ros_privilege.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\hooks.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\matchmaking.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\pack_clone_create.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\pack_clone_sync.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\process_game_event.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\process_relay_usage.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\profanity.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\read_blacklist_message.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\read_kick_player_message.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\read_new_script_host_message.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\receive_broadcast.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\receive_clone_create.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\receive_clone_remove.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\receive_clone_sync.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\receive_network_event.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\receive_presence_event.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\receive_session_info.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\receive_session_join_request.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\render_script_texture.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\scripts.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\send_add_gamer_to_session.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\send_join_request_message.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\shoot_bullet.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\stat_get_int.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\update_player_script_status.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\write_gs_item.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\write_ped_health_data_node.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\write_player_gamer_data_node.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\write_player_game_state_data_node.cpp" />
|
||||||
|
<ClCompile Include="src\menu\hooks\write_rid.cpp" />
|
||||||
|
<ClCompile Include="src\menu\init.cpp" />
|
||||||
|
<ClCompile Include="src\rage\api\api.cpp" />
|
||||||
|
<ClCompile Include="src\rage\engine.cpp" />
|
||||||
|
<ClCompile Include="src\rage\invoker\invoker.cpp" />
|
||||||
|
<ClCompile Include="src\rage\ros.cpp" />
|
||||||
|
<ClCompile Include="src\rage\ros_dll.cpp" />
|
||||||
|
<ClCompile Include="src\rage\types\base_types.cpp" />
|
||||||
|
<ClCompile Include="src\rage\types\bit_buffer.cpp" />
|
||||||
|
<ClCompile Include="src\rage\types\generic_types.cpp" />
|
||||||
|
<ClCompile Include="src\rage\types\invoker_types.cpp" />
|
||||||
|
<ClCompile Include="src\rage\types\network_types.cpp" />
|
||||||
|
<ClCompile Include="src\security\PPCVM\virtual_machine.cpp" />
|
||||||
|
<ClCompile Include="src\security\security.cpp" />
|
||||||
|
<ClCompile Include="src\security\syscalls\syscall.cpp" />
|
||||||
|
<ClCompile Include="src\security\syscalls\wrapper.cpp" />
|
||||||
|
<ClCompile Include="src\util\config.cpp" />
|
||||||
|
<ClCompile Include="src\util\dirs.cpp" />
|
||||||
|
<ClCompile Include="src\util\fiber.cpp" />
|
||||||
|
<ClCompile Include="src\util\fiber_pool.cpp" />
|
||||||
|
<ClCompile Include="src\util\hooking\hooking.cpp" />
|
||||||
|
<ClCompile Include="src\util\localization.cpp" />
|
||||||
|
<ClCompile Include="src\util\log.cpp" />
|
||||||
|
<ClCompile Include="src\util\memory\memory.cpp" />
|
||||||
|
<ClCompile Include="src\util\memory\pattern.cpp" />
|
||||||
|
<ClCompile Include="src\util\threads.cpp" />
|
||||||
|
<ClCompile Include="src\util\util.cpp" />
|
||||||
|
<ClCompile Include="src\util\va.cpp" />
|
||||||
|
<ClCompile Include="src\util\wic\wic_texture_loader.cpp" />
|
||||||
|
<ClCompile Include="src\util\wmi.cpp" />
|
||||||
|
<ClCompile Include="src\util\xml\pugixml.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="src\auth\http\atlrx.h" />
|
||||||
|
<ClInclude Include="src\auth\http\curl.h" />
|
||||||
|
<ClInclude Include="src\auth\http\regex.h" />
|
||||||
|
<ClInclude Include="src\auth\http\string_process.h" />
|
||||||
|
<ClInclude Include="src\auth\http\win_http_client.h" />
|
||||||
|
<ClInclude Include="src\menu\base\options\color_option.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\fiber.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\helper\color\helper_color_preset.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\helper\esp\helper_esp_settings.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\helper\esp\helper_esp_settings_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\helper\helper_color.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\helper\helper_esp.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\helper\helper_rainbow.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\helper\rainbow\helper_rainbow_load.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\dispatch.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\settings\hide_info.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\misc_disables.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\misc_swaps.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\panels\panels_edit.h" />
|
||||||
|
<ClInclude Include="src\auth\crypto\crypto.h" />
|
||||||
|
<ClInclude Include="src\auth\server\auth_packets.h" />
|
||||||
|
<ClInclude Include="src\auth\server\auth_types.h" />
|
||||||
|
<ClInclude Include="src\auth\sockets.h" />
|
||||||
|
<ClInclude Include="src\global\auth_vars.h" />
|
||||||
|
<ClInclude Include="src\global\lists.h" />
|
||||||
|
<ClInclude Include="src\global\ui_vars.h" />
|
||||||
|
<ClInclude Include="src\global\vars.h" />
|
||||||
|
<ClInclude Include="src\menu\auth.h" />
|
||||||
|
<ClInclude Include="src\menu\base\base.h" />
|
||||||
|
<ClInclude Include="src\menu\base\options\break.h" />
|
||||||
|
<ClInclude Include="src\menu\base\options\button.h" />
|
||||||
|
<ClInclude Include="src\menu\base\options\number.h" />
|
||||||
|
<ClInclude Include="src\menu\base\options\option.h" />
|
||||||
|
<ClInclude Include="src\menu\base\options\radio.h" />
|
||||||
|
<ClInclude Include="src\menu\base\options\scroll.h" />
|
||||||
|
<ClInclude Include="src\menu\base\options\submenu_option.h" />
|
||||||
|
<ClInclude Include="src\menu\base\options\toggle.h" />
|
||||||
|
<ClInclude Include="src\menu\base\renderer.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenu.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\camera\aerial_camera.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\display.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\hud.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\misc_camera.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\misc_panels.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\misc_radio.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\panels\panels_parent.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\scripthook.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\swaps\model_swaps.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\swaps\model_swaps_add.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\swaps\model_swaps_presets.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\swaps\texture_swaps.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\swaps\texture_swaps_add.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\misc\visions.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\account\network_account_kd.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\account\network_account_level.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\account\network_account_outfits.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\account\network_account_times.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\account\network_account_unlocks.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\account\network_account_wins_losses.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\account\outfits\network_account_outfits_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\account\outfits\network_account_outfits_edit_name.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\account\wins\network_account_wins_losses_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\chat\network_global_chat_ozark.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\chat\network_global_chat_presets.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\chat\network_global_chat_targets.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\finder\network_session_finder_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\friends\network_friends_selected.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\network_account.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\network_friends.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\network_global_chat.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\network_host_toolkit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\network_join_bypass.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\network_players.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\network_player_search_join.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\network_recent_players.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\network_session.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\network_session_finder.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\network_spoofing.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\abusive\network_players_abusive_attackers.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\abusive\network_players_abusive_explosions.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\friendly\network_players_friendly_drops.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\network_players_abusive.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\network_players_commands.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\network_players_friendly.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\network_players_removals.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\network_players_selected.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\network_players_spawn_blocking.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\network_players_teleport.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\network_players_text.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\network_players_trolling.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\network_players_vehicle.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\teleport\network_players_teleport_apartments.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\text\network_players_text_presets.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\text\network_players_text_save.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\trolling\attachments\network_players_trolling_attachments_presets.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\trolling\network_players_trolling_attachments.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\players\trolling\network_players_trolling_sounds.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\session\network_session_excludes.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\session\network_session_overseer.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\session\overseer\network_session_overseer_selected.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\spoofing\crew\network_spoofing_crew_icon.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\spoofing\crew\network_spoofing_crew_motto.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\spoofing\crew\network_spoofing_crew_name.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\spoofing\crew\network_spoofing_crew_presets.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\spoofing\crew\network_spoofing_crew_rank.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\spoofing\crew\network_spoofing_crew_tag.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\spoofing\network_spoofing_crew.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\recent\network_recent_players_permanent.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\recent\network_recent_players_selected.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\search\network_player_search_selected.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\spoofing\network_spoofing_intervals.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\spoofing\network_spoofing_ip.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\spoofing\network_spoofing_name.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\spoofing\network_spoofing_player_rotation.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\spoofing\network_spoofing_profiles.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\spoofing\network_spoofing_rid.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\spoofing\network_spoofing_vehicle_rotation.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\spoofing\profiles\network_spoofing_profiles_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\toolkit\blocking\network_join_blocking_add.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\toolkit\blocking\network_join_blocking_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\toolkit\blocking\network_join_blocking_manual.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\toolkit\blocking\network_join_blocking_manual_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\toolkit\blocking\network_join_blocking_manual_load.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\toolkit\blocking\network_join_blocking_manual_save.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\toolkit\network_blacklisted_players.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\toolkit\network_desync_kick.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\network\toolkit\network_join_blocking.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\player.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\player\animation.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\player\animation\animations.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\player\animation\clipsets.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\player\animation\scenario.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\player\appearance.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\player\model.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\player\movement.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\player\particles.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\player\ptfx\hand_trails.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\player\ptfx\particle_manager.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\player\wardrobe.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\player\wardrobe_save_load.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protections.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protection\entity\protection_entity_blocking.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protection\entity\protection_entity_ghosting.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protection\entity\protection_entity_ghosting_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protection\limits\entity\protection_spawn_rate_limit_add.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protection\limits\entity\protection_spawn_rate_limit_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protection\limits\protection_message_limit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protection\limits\protection_spawn_rate_limit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protection\protection_anti_detection.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protection\protection_entity_events.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protection\protection_events.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protection\protection_join_blocking.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protection\protection_limits.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protection\protection_net_events.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protection\protection_presence_events.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protection\protection_reactions.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\protection\reactions\protection_reactions_selected.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\settings.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\settings\color\color_sync.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\settings\hk\hotkey_selected.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\settings\position_scale.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\settings\pos\position_scale_selected.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\settings\settings_color.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\settings\settings_fonts.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\settings\settings_hotkey.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\settings\settings_texture.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\settings\settings_textures.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\settings\themes.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\settings\themes\themes_selected.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\settings\translation.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\settings\translation\translation_selected.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner\object\edit\spawner_object_manage_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner\object\spawner_object_building.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner\object\spawner_object_manage.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner\object\spawner_object_select.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner\object\spawner_object_settings.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner\ped\spawner_ped_manage.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner\ped\edit\spawner_ped_manage_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner\ped\spawner_ped_settings.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner\vehicle\edit\spawner_vehicle_manage_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner\vehicle\garage\spawner_vehicle_garage_selected.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner\vehicle\spawner_vehicle_manage.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner\vehicle\spawner_vehicle_garage.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner\vehicle\spawner_vehicle_modded.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner\vehicle\spawner_vehicle_save.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner\vehicle\spawner_vehicle_selected.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\spawner\vehicle\spawner_vehicle_settings.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\teleport.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\teleport\stores\teleport_stores_selected.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\teleport\teleport_directional.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\teleport\teleport_ipl.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\teleport\teleport_save_load.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\teleport\teleport_selected.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\teleport\teleport_settings.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\teleport\teleport_stores.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\lights\neon\vehicle_customs_neon_color.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\lights\vehicle_customs_neon.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\respray\vehicle_customs_respray_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\respray\vehicle_customs_respray_type.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\vehicle_customs_bumpers.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\vehicle_customs_fender.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\vehicle_customs_horn.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\vehicle_customs_interior.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\vehicle_customs_lights.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\vehicle_customs_lsc.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\vehicle_customs_respray.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\vehicle_customs_wheels.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\wheels\vehicle_customs_wheels_color.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\wheels\vehicle_customs_wheels_tires.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\wheels\vehicle_customs_wheels_tires_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\wheels\vehicle_customs_wheels_type.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\customs\wheels\vehicle_customs_wheels_type_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\modifiers\handling\vehicle_modifiers_handling_attr.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\modifiers\handling\vehicle_modifiers_handling_bike.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\modifiers\handling\vehicle_modifiers_handling_boat.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\modifiers\handling\vehicle_modifiers_handling_flying.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\modifiers\handling\vehicle_modifiers_handling_load.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\modifiers\handling\vehicle_modifiers_handling_main.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\modifiers\vehicle_modifiers_handling.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\movement\vehicle_movement_acrobatics.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\movement\vehicle_movement_parachute.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\seats\vehicle_seats_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_autopilot.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_boost.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_collision.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_customs.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_doors.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_gravity.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_health.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_modifiers.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_movement.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_multipliers.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_particles.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_ramps.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_randomization.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_seats.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_speedometer.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_weapons.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\vehicle\vehicle_tyre_tracks.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\aimbot.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\entity_gun.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\explosions\explosion_editor.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\explosions\explosion_gun.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\give\give_attachment.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\give\give_attachment_selected.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\give\give_tint.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\give\give_tint_selected.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\give\give_weapon.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\give\give_weapons.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\give_weapons_ammo.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\gravity_gun.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\modifiers\ammo\ammo_modifier.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\modifiers\ammo\ammo_modifier_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\modifiers\ammo\ammo_modifier_load.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\modifiers\ammo\ammo_modifier_swap.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\modifiers\weapon_matrix.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\particle_gun.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\weapon_disables.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\weapon_modifiers.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\modifiers\weapon_multipliers.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\purchase\purchase_attachment.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\purchase\purchase_weapon.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\purchase\purchase_weapons.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\triggerbot.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\weapon\weapon_mods.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\bullet_tracers.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\clear_area.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\fx\fx_color.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\fx\fx_cross_multiplier.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\fx\fx_liquid.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\fx\fx_load.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\fx\fx_puddles.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\fx\fx_sky.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\fx\fx_traffic.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\fx\fx_ui_color.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\fx\fx_vehicle.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\fx\fx_vehicle_neons.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\game_fx.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\local_entities.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\ocean.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\ocean\ocean_quads.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\ocean\ocean_quads_edit.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\ocean\ocean_tuning.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\time\time_preset.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\trains.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\weather\fx\weather_fx.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\weather\weather_select.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\world_time.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\world_waypoint.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenus\main\world\world_weather.h" />
|
||||||
|
<ClInclude Include="src\menu\base\submenu_handler.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\camera.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\control.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\fonts.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\global.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\helpers.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\hotkeys.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\input.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\instructionals.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\menu_input.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\notify.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\on_screen_ped.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\panels.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\player_manager.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\rainbow.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\raycast.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\stacked_display.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\stats.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\textures.h" />
|
||||||
|
<ClInclude Include="src\menu\base\util\timers.h" />
|
||||||
|
<ClInclude Include="src\menu\hooks\hooks.h" />
|
||||||
|
<ClInclude Include="src\menu\init.h" />
|
||||||
|
<ClInclude Include="src\rage\api\api.h" />
|
||||||
|
<ClInclude Include="src\rage\engine.h" />
|
||||||
|
<ClInclude Include="src\rage\invoker\invoker.h" />
|
||||||
|
<ClInclude Include="src\rage\invoker\natives.h" />
|
||||||
|
<ClInclude Include="src\rage\ros.h" />
|
||||||
|
<ClInclude Include="src\rage\ros_dll.h" />
|
||||||
|
<ClInclude Include="src\rage\types\base_types.h" />
|
||||||
|
<ClInclude Include="src\rage\types\bit_buffer.h" />
|
||||||
|
<ClInclude Include="src\rage\types\generic_types.h" />
|
||||||
|
<ClInclude Include="src\rage\types\global_types.h" />
|
||||||
|
<ClInclude Include="src\rage\types\invoker_types.h" />
|
||||||
|
<ClInclude Include="src\rage\types\network_types.h" />
|
||||||
|
<ClInclude Include="src\rage\types\ros_types.h" />
|
||||||
|
<ClInclude Include="src\rage\types\script_types.h" />
|
||||||
|
<ClInclude Include="src\security\PPCVM\instructions.h" />
|
||||||
|
<ClInclude Include="src\security\PPCVM\payloads.h" />
|
||||||
|
<ClInclude Include="src\security\PPCVM\registers.h" />
|
||||||
|
<ClInclude Include="src\security\PPCVM\virtual_machine.h" />
|
||||||
|
<ClInclude Include="src\security\security.h" />
|
||||||
|
<ClInclude Include="src\security\syscalls\syscall.h" />
|
||||||
|
<ClInclude Include="src\security\syscalls\wrapper.h" />
|
||||||
|
<ClInclude Include="src\stdafx.h" />
|
||||||
|
<ClInclude Include="src\util\caller.h" />
|
||||||
|
<ClInclude Include="src\util\config.h" />
|
||||||
|
<ClInclude Include="src\util\dirs.h" />
|
||||||
|
<ClInclude Include="src\util\fiber.h" />
|
||||||
|
<ClInclude Include="src\util\fiber_pool.h" />
|
||||||
|
<ClInclude Include="src\util\hooking\hooking.h" />
|
||||||
|
<ClInclude Include="src\util\hooking\minhook.h" />
|
||||||
|
<ClInclude Include="src\util\json.h" />
|
||||||
|
<ClInclude Include="src\util\localization.h" />
|
||||||
|
<ClInclude Include="src\util\log.h" />
|
||||||
|
<ClInclude Include="src\util\math.h" />
|
||||||
|
<ClInclude Include="src\util\memory\memory.h" />
|
||||||
|
<ClInclude Include="src\util\memory\pattern.h" />
|
||||||
|
<ClInclude Include="src\util\threads.h" />
|
||||||
|
<ClInclude Include="src\util\util.h" />
|
||||||
|
<ClInclude Include="src\util\va.h" />
|
||||||
|
<ClInclude Include="src\util\wic\wic_texture_loader.h" />
|
||||||
|
<ClInclude Include="src\util\wmi.h" />
|
||||||
|
<ClInclude Include="src\util\xml\pugiconfig.h" />
|
||||||
|
<ClInclude Include="src\util\xml\pugixml.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
2155
GTAV/GTAV.vcxproj.filters
Normal file
2155
GTAV/GTAV.vcxproj.filters
Normal file
File diff suppressed because it is too large
Load Diff
6
GTAV/GTAV.vcxproj.user
Normal file
6
GTAV/GTAV.vcxproj.user
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ShowAllFiles>true</ShowAllFiles>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
31
GTAV/src/dllmain.cpp
Normal file
31
GTAV/src/dllmain.cpp
Normal file
@ -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 <Psapi.h>
|
||||||
|
#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;
|
||||||
|
}
|
737
GTAV/src/global/lists.cpp
Normal file
737
GTAV/src/global/lists.cpp
Normal file
@ -0,0 +1,737 @@
|
|||||||
|
#include "lists.h"
|
||||||
|
|
||||||
|
namespace global::lists {
|
||||||
|
scroll_struct<uint32_t> 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<float> 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<uint32_t> 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<uint32_t> 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<uint32_t> 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<uint32_t> 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<uint32_t> 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<uint32_t> 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<uint32_t> 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<int> 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<const char*> 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<particle> 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<uint32_t> 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<ExplosionTypes> 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<float> 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<int> 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<uint32_t> 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<std::pair<math::vector3_<float>, math::vector3_<float>>> 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<math::vector3<float>> 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<uint32_t> 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<uint32_t> 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<uint32_t> 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<uint32_t> 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<float> 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<std::pair<const char*, const char*>> 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<int> 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 },
|
||||||
|
};
|
||||||
|
}
|
43
GTAV/src/global/lists.h
Normal file
43
GTAV/src/global/lists.h
Normal file
@ -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<uint32_t> g_timers[10];
|
||||||
|
extern scroll_struct<float> g_distances[8];
|
||||||
|
extern scroll_struct<uint32_t> g_ped_model_popular[9];
|
||||||
|
extern scroll_struct<uint32_t> g_ped_model_story[25];
|
||||||
|
extern scroll_struct<uint32_t> g_ped_model_animal[20];
|
||||||
|
extern scroll_struct<uint32_t> g_ped_model_emergency[16];
|
||||||
|
extern scroll_struct<uint32_t> g_ped_model_role[14];
|
||||||
|
extern scroll_struct<uint32_t> g_ped_model_ambient[6];
|
||||||
|
extern scroll_struct<uint32_t> g_ped_model_misc[5];
|
||||||
|
extern scroll_struct<particle> g_particles[29];
|
||||||
|
extern scroll_struct<int> g_ped_bones[13];
|
||||||
|
extern scroll_struct<const char*> g_vehicle_bones[10];
|
||||||
|
extern scroll_struct<uint32_t> g_weapons[98];
|
||||||
|
extern scroll_struct<ExplosionTypes> g_explosions[36];
|
||||||
|
extern scroll_struct<float> g_gravity[9];
|
||||||
|
extern scroll_struct<int> g_opacity[6];
|
||||||
|
extern scroll_struct<uint32_t> g_vehicle_weapons[9];
|
||||||
|
extern scroll_struct<std::pair<math::vector3_<float>, math::vector3_<float>>> g_acrobatics[10];
|
||||||
|
extern scroll_struct<math::vector3<float>> g_popular_locations[35];
|
||||||
|
extern scroll_struct<uint32_t> g_object_model_small[39];
|
||||||
|
extern scroll_struct<uint32_t> g_object_model_medium[27];
|
||||||
|
extern scroll_struct<uint32_t> g_object_model_large[17];
|
||||||
|
extern scroll_struct<uint32_t> g_object_model_flags[17];
|
||||||
|
extern scroll_struct<float> g_precisions[10];
|
||||||
|
extern scroll_struct<std::pair<const char*, const char*>> g_sounds[109];
|
||||||
|
extern scroll_struct<int> g_markers[43];
|
||||||
|
}
|
94
GTAV/src/global/ui_vars.cpp
Normal file
94
GTAV/src/global/ui_vars.cpp
Normal file
@ -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<float> g_position = { 0.70f, 0.3f };
|
||||||
|
math::vector2<float> g_scale = { 0.22f, 0.f };
|
||||||
|
math::vector2<float> g_submenu_arrow_position = { 0.218f, 0.010f };
|
||||||
|
math::vector2<float> g_submenu_arrow_scale = { 0.007f, 0.013f };
|
||||||
|
math::vector2<float> g_toggle_position = { 0.221f, 0.016f };
|
||||||
|
math::vector2<float> g_toggle_scale = { 0.007f, 0.011f };
|
||||||
|
math::vector2<float> g_globe_position = { 0.4405f, 0.328f };
|
||||||
|
math::vector2<float> g_globe_scale = { 0.978f, 0.906f };
|
||||||
|
math::vector2<float> g_stacked_display_scale = { 0.15f, 0.015f };
|
||||||
|
math::vector2<float> 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;
|
||||||
|
}
|
181
GTAV/src/global/ui_vars.h
Normal file
181
GTAV/src/global/ui_vars.h
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "util/math.h"
|
||||||
|
#include "util/localization.h"
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
|
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_<int> as_vector() {
|
||||||
|
return { r, g, b };
|
||||||
|
}
|
||||||
|
|
||||||
|
std::initializer_list<int> as_initializer_list() {
|
||||||
|
return std::initializer_list<int> { 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<int, bool> m_toggles;
|
||||||
|
int m_selected = 0;
|
||||||
|
int m_count = 0;
|
||||||
|
std::pair<const char*, const char*> 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<float> m_from;
|
||||||
|
math::vector2<float> 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<float> g_position;
|
||||||
|
extern math::vector2<float> g_scale;
|
||||||
|
extern math::vector2<float> g_submenu_arrow_position;
|
||||||
|
extern math::vector2<float> g_submenu_arrow_scale;
|
||||||
|
extern math::vector2<float> g_toggle_position;
|
||||||
|
extern math::vector2<float> g_toggle_scale;
|
||||||
|
extern math::vector2<float> g_globe_position;
|
||||||
|
extern math::vector2<float> g_globe_scale;
|
||||||
|
extern math::vector2<float> g_stacked_display_scale;
|
||||||
|
extern math::vector2<float> 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;
|
||||||
|
}
|
322
GTAV/src/global/vars.cpp
Normal file
322
GTAV/src/global/vars.cpp
Normal file
@ -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<uint64_t, uint32_t> g_cheat_address;
|
||||||
|
std::pair<uint64_t, uint32_t> g_game_address;
|
||||||
|
HWND g_window;
|
||||||
|
std::vector<localization*> g_localization_table;
|
||||||
|
bool g_steam = false;
|
||||||
|
bool g_reload_weapons;
|
||||||
|
std::pair<float, std::string> g_selected_metric_system = { 2.236936f, "MPH" };
|
||||||
|
std::unordered_map<uint64_t, std::pair<bool, int>> g_online_rockstar_ids;
|
||||||
|
std::vector<uint64_t> g_online_rockstar_ids_queue;
|
||||||
|
std::vector<relay_usage> g_relay_usage;
|
||||||
|
std::queue<uint32_t> g_geo_queue;
|
||||||
|
std::unordered_map<uint32_t, geo_ip> g_geo;
|
||||||
|
rage::types::dictionary* g_custom_dictionary;
|
||||||
|
rage::types::dictionary* g_player_img_dictionary;
|
||||||
|
math::vector2<int> g_resolution;
|
||||||
|
math::vector2<int> g_desktop_resolution;
|
||||||
|
uint64_t g_texture_bypass;
|
||||||
|
uint64_t g_marker_bypass;
|
||||||
|
std::unordered_map<std::string, alignment_test> g_alignment_tests;
|
||||||
|
std::vector<patches> g_patches;
|
||||||
|
std::unordered_map < std::string, patches> g_hack_patches;
|
||||||
|
std::vector<std::pair<uint64_t, int>> g_return_address_node_iterations;
|
||||||
|
std::unordered_map<uint64_t, uint64_t> g_desyncs_host;
|
||||||
|
std::unordered_map<Player, desyncs> g_desyncs;
|
||||||
|
std::vector<join_timeout_fix> g_join_timeout_fix;
|
||||||
|
std::vector<std::pair<uint64_t, uint64_t>> g_host_desync_logs;
|
||||||
|
std::unordered_map<int, uint32_t> g_last_synced_player_models;
|
||||||
|
std::vector<gs_info_request> g_gs_info_requests;
|
||||||
|
std::unordered_map<uint64_t, uint32_t> g_spoofed_data_join_requests;
|
||||||
|
std::unordered_map<uint64_t, std::pair<uint32_t, uint32_t>> g_raw_buffer_translations;
|
||||||
|
std::unordered_map<uint64_t, uint32_t> g_sync_real_ip;
|
||||||
|
std::unordered_map<uint64_t, uint64_t> g_sync_peer_corruption;
|
||||||
|
uint8_t g_arxan_restore_bytes[2][2][25];
|
||||||
|
uint64_t g_arxan_restore_addresses[2];
|
||||||
|
std::unordered_map<uint64_t, rage::network::read_stats_by_gamer> g_read_stats_by_gamer_results;
|
||||||
|
std::vector<std::pair<uint32_t, uint8_t*>> 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<rage::types::vfx_wheel*, uint8_t> 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
|
||||||
|
};
|
||||||
|
}
|
269
GTAV/src/global/vars.h
Normal file
269
GTAV/src/global/vars.h
Normal file
@ -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 <vector>
|
||||||
|
#include <queue>
|
||||||
|
|
||||||
|
#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<void(std::string, uint64_t)> 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<uint64_t, uint32_t> g_cheat_address;
|
||||||
|
extern std::pair<uint64_t, uint32_t> g_game_address;
|
||||||
|
extern HWND g_window;
|
||||||
|
extern std::vector<localization*> g_localization_table;
|
||||||
|
extern bool g_steam;
|
||||||
|
extern bool g_reload_weapons;
|
||||||
|
extern std::pair<float, std::string> g_selected_metric_system;
|
||||||
|
extern std::unordered_map<uint64_t, std::pair<bool, int>> g_online_rockstar_ids;
|
||||||
|
extern std::vector<uint64_t> g_online_rockstar_ids_queue;
|
||||||
|
extern std::vector<relay_usage> g_relay_usage;
|
||||||
|
extern std::queue<uint32_t> g_geo_queue;
|
||||||
|
extern std::unordered_map<uint32_t, geo_ip> g_geo;
|
||||||
|
extern rage::types::dictionary* g_custom_dictionary;
|
||||||
|
extern rage::types::dictionary* g_player_img_dictionary;
|
||||||
|
extern math::vector2<int> g_resolution;
|
||||||
|
extern math::vector2<int> g_desktop_resolution;
|
||||||
|
extern uint64_t g_texture_bypass;
|
||||||
|
extern uint64_t g_marker_bypass;
|
||||||
|
extern std::unordered_map<std::string, alignment_test> g_alignment_tests;
|
||||||
|
extern std::vector<patches> g_patches;
|
||||||
|
extern std::unordered_map<std::string, patches> g_hack_patches;
|
||||||
|
extern std::vector<std::pair<uint64_t, int>> g_return_address_node_iterations;
|
||||||
|
extern std::unordered_map<uint64_t, uint64_t> g_desyncs_host;
|
||||||
|
extern std::unordered_map<Player, desyncs> g_desyncs;
|
||||||
|
extern std::vector<join_timeout_fix> g_join_timeout_fix;
|
||||||
|
extern std::vector<std::pair<uint64_t, uint64_t>> g_host_desync_logs;
|
||||||
|
extern std::unordered_map<int, uint32_t> g_last_synced_player_models;
|
||||||
|
extern std::vector<gs_info_request> g_gs_info_requests;
|
||||||
|
extern std::unordered_map<uint64_t, uint32_t> g_spoofed_data_join_requests;
|
||||||
|
extern std::unordered_map<uint64_t, std::pair<uint32_t, uint32_t>> g_raw_buffer_translations;
|
||||||
|
extern std::unordered_map<uint64_t, uint32_t> g_sync_real_ip;
|
||||||
|
extern std::unordered_map<uint64_t, uint64_t> 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<uint64_t, rage::network::read_stats_by_gamer> g_read_stats_by_gamer_results;
|
||||||
|
extern std::vector<std::pair<uint32_t, uint8_t*>> 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<rage::types::vfx_wheel*, uint8_t> 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)
|
71
GTAV/src/menu/base/base.cpp
Normal file
71
GTAV/src/menu/base/base.cpp
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
166
GTAV/src/menu/base/base.h
Normal file
166
GTAV/src/menu/base/base.h
Normal file
@ -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();
|
||||||
|
}
|
||||||
|
}
|
57
GTAV/src/menu/base/options/break.cpp
Normal file
57
GTAV/src/menu/base/options/break.cpp
Normal file
@ -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<std::string> 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;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
36
GTAV/src/menu/base/options/break.h
Normal file
36
GTAV/src/menu/base/options/break.h
Normal file
@ -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<bool()> function) {
|
||||||
|
m_requirement = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
break_option& add_update(std::function<void(break_option*)> 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<std::string> submenu_name_stack);
|
||||||
|
void invoke_save(std::stack<std::string> submenu_name_stack) {}
|
||||||
|
void invoke_hotkey() {}
|
||||||
|
void write_translation(nlohmann::json& object) {}
|
||||||
|
void read_translation(nlohmann::json& object) {}
|
||||||
|
void reset_translation() {}
|
||||||
|
private:
|
||||||
|
std::function<void(break_option*)> m_on_update = [](break_option*) {};
|
||||||
|
};
|
149
GTAV/src/menu/base/options/button.cpp
Normal file
149
GTAV/src/menu/base/options/button.cpp
Normal file
@ -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<std::string> submenu_name_stack) {
|
||||||
|
m_on_hover();
|
||||||
|
|
||||||
|
if (m_instructionals.size()) {
|
||||||
|
instructionals::setup();
|
||||||
|
|
||||||
|
for (std::tuple<std::string, int, bool>& 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<uint32_t, uint32_t> 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()));
|
||||||
|
}
|
153
GTAV/src/menu/base/options/button.h
Normal file
153
GTAV/src/menu/base/options/button.h
Normal file
@ -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<void()> function) {
|
||||||
|
m_on_click = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
button_option& add_click_this(std::function<void(button_option*)> function) {
|
||||||
|
m_on_click_this = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
button_option& add_requirement(std::function<bool()> function) {
|
||||||
|
m_requirement = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
button_option& add_update(std::function<void(button_option*)> function) {
|
||||||
|
m_on_update = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
button_option& add_update_this(std::function<void(button_option*, int)> function) {
|
||||||
|
m_on_update_this = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
button_option& add_hover(std::function<void()> 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<void(button_option*, const char*)> 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<std::string, std::string> asset, std::function<bool()> requirement = [] { return true; }) {
|
||||||
|
m_sprite = { true, asset, requirement };
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
button_option& add_sprite_scale(math::vector2<float> 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<std::string> submenu_name_stack);
|
||||||
|
void invoke_save(std::stack<std::string> 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<void(button_option*, const char*)> m_callback = {};
|
||||||
|
std::string m_title = "";
|
||||||
|
std::string m_default_text = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Sprite {
|
||||||
|
bool m_enabled = false;
|
||||||
|
std::pair<std::string, std::string> m_asset = {};
|
||||||
|
std::function<bool()> m_requirement = {};
|
||||||
|
math::vector2<float> 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<void()> m_on_click = []() {};
|
||||||
|
std::function<void(button_option*)> m_on_click_this = [](button_option*) {};
|
||||||
|
std::function<void()> m_on_hover = []() {};
|
||||||
|
std::function<void(button_option*)> m_on_update = [](button_option*) {};
|
||||||
|
std::function<void(button_option*, int)> m_on_update_this = [](button_option*, int) {};
|
||||||
|
};
|
52
GTAV/src/menu/base/options/color_option.cpp
Normal file
52
GTAV/src/menu/base/options/color_option.cpp
Normal file
@ -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<std::string> submenu_name_stack) {
|
||||||
|
m_on_hover();
|
||||||
|
|
||||||
|
if (m_instructionals.size()) {
|
||||||
|
instructionals::setup();
|
||||||
|
|
||||||
|
for (std::tuple<std::string, int, bool>& 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" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
102
GTAV/src/menu/base/options/color_option.h
Normal file
102
GTAV/src/menu/base/options/color_option.h
Normal file
@ -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<void()> function) {
|
||||||
|
m_on_click = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
color_option& add_click_this(std::function<void(color_option*)> function) {
|
||||||
|
m_on_click_this = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
color_option& add_requirement(std::function<bool()> function) {
|
||||||
|
m_requirement = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
color_option& add_update(std::function<void(color_option*)> function) {
|
||||||
|
m_on_update = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
color_option& add_update_this(std::function<void(color_option*, int)> function) {
|
||||||
|
m_on_update_this = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
color_option& add_hover(std::function<void()> 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<std::string> 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<std::string> submenu_name_stack);
|
||||||
|
void invoke_save(std::stack<std::string> 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<void()> m_on_click = []() {};
|
||||||
|
std::function<void(color_option*)> m_on_click_this = [](color_option*) {};
|
||||||
|
std::function<void()> m_on_hover = []() {};
|
||||||
|
std::function<void(color_option*)> m_on_update = [](color_option*) {};
|
||||||
|
std::function<void(color_option*, int)> m_on_update_this = [](color_option*, int) {};
|
||||||
|
};
|
297
GTAV/src/menu/base/options/number.cpp
Normal file
297
GTAV/src/menu/base/options/number.cpp
Normal file
@ -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 <timeapi.h>
|
||||||
|
|
||||||
|
template<typename Type>
|
||||||
|
void number_option<Type>::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~<font face='$Font2' size='" + std::to_string(size) + "'>←</font> " + m_format + " / " + m_format + " <font face='$Font2' size='" + std::to_string(size) + "'>→</font>").c_str(), *m_number, m_max);
|
||||||
|
} else {
|
||||||
|
sprintf_s(name_buffer, ("~s~<font face='$Font2' size='" + std::to_string(size) + "'>←</font> " + m_format + " <font face='$Font2' size='" + std::to_string(size) + "'>→</font>").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<typename Type>
|
||||||
|
void number_option<Type>::render_selected(int position, std::stack<std::string> 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<Type, float>::value) {
|
||||||
|
out = (Type)std::stof(name);
|
||||||
|
} else if (std::is_same<Type, int64_t>::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<Type, int>::value || std::is_same<Type, short>::value || std::is_same<Type, uint8_t>::value) {
|
||||||
|
util::config::write_int(submenu_name_stack, m_name.get_original(), (int)*m_number, { "Values" });
|
||||||
|
} else if (std::is_same<Type, float>::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<typename Type>
|
||||||
|
void number_option<Type>::invoke_save(std::stack<std::string> submenu_name_stack) {
|
||||||
|
if (m_savable) {
|
||||||
|
if (std::is_same<Type, int>::value || std::is_same<Type, short>::value || std::is_same<Type, uint8_t>::value) {
|
||||||
|
util::config::write_int(submenu_name_stack, m_name.get_original(), (int)*m_number, { "Values" });
|
||||||
|
} else if (std::is_same<Type, float>::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<typename Type>
|
||||||
|
void number_option<Type>::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<uint32_t, uint32_t> 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<int>;
|
||||||
|
template class number_option<float>;
|
||||||
|
template class number_option<short>;
|
||||||
|
template class number_option<uint8_t>;
|
163
GTAV/src/menu/base/options/number.h
Normal file
163
GTAV/src/menu/base/options/number.h
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "option.h"
|
||||||
|
#include "menu/base/base.h"
|
||||||
|
#include "util/config.h"
|
||||||
|
|
||||||
|
template<typename Type>
|
||||||
|
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<void()> func) {
|
||||||
|
m_on_click = func;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
number_option& add_hover(std::function<void()> func) {
|
||||||
|
m_on_hover = func;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
number_option& add_update(std::function<void(number_option*, int)> func) {
|
||||||
|
m_on_update = func;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
number_option& add_requirement(std::function<bool()> 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<std::string> menu_stack) {
|
||||||
|
if (menu_stack.size() <= 0) return *this;
|
||||||
|
|
||||||
|
m_savable = true;
|
||||||
|
if (m_number && m_requirement()) {
|
||||||
|
if (std::is_same<Type, int>::value || std::is_same<Type, short>::value || std::is_same<Type, uint8_t>::value) {
|
||||||
|
*m_number = (Type)util::config::read_int(menu_stack, m_name.get_original(), (int)*m_number, { "Values" });
|
||||||
|
} else if (std::is_same<Type, float>::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<std::string> submenu_name_stack);
|
||||||
|
void invoke_save(std::stack<std::string> submenu_name_stack);
|
||||||
|
void invoke_hotkey();
|
||||||
|
void write_translation(nlohmann::json& object) {}
|
||||||
|
void read_translation(nlohmann::json& object) {}
|
||||||
|
void reset_translation() {}
|
||||||
|
private:
|
||||||
|
std::function<void()> m_on_click = []() {};
|
||||||
|
std::function<void()> m_on_hover = []() {};
|
||||||
|
std::function<void(number_option<Type>*, int)> m_on_update = [](number_option<Type>*, 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;
|
||||||
|
};
|
18
GTAV/src/menu/base/options/option.cpp
Normal file
18
GTAV/src/menu/base/options/option.cpp
Normal file
@ -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<std::string> submenu_name_stack) {}
|
||||||
|
void base_option::invoke_save(std::stack<std::string> 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() {}
|
55
GTAV/src/menu/base/options/option.h
Normal file
55
GTAV/src/menu/base/options/option.h
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "util/localization.h"
|
||||||
|
#include "util/json.h"
|
||||||
|
#include "global/ui_vars.h"
|
||||||
|
#include <stack>
|
||||||
|
|
||||||
|
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<std::string> submenu_name_stack);
|
||||||
|
virtual void invoke_save(std::stack<std::string> 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<std::string>* 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<std::string>* 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<bool()> m_requirement = []() { return true; };
|
||||||
|
std::vector<std::tuple<std::string, int, bool>> m_instructionals = {};
|
||||||
|
std::stack<std::string>* m_submenu_name_stack = nullptr;
|
||||||
|
};
|
36
GTAV/src/menu/base/options/radio.cpp
Normal file
36
GTAV/src/menu/base/options/radio.cpp
Normal file
@ -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<std::string> 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();
|
||||||
|
}
|
||||||
|
}
|
80
GTAV/src/menu/base/options/radio.h
Normal file
80
GTAV/src/menu/base/options/radio.h
Normal file
@ -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<void()> function) {
|
||||||
|
m_on_click = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
radio_option& add_requirement(std::function<bool()> function) {
|
||||||
|
m_requirement = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
radio_option& add_update(std::function<void(radio_option*)> function) {
|
||||||
|
m_on_update = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
radio_option& add_hover(std::function<void()> 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<std::string> submenu_name_stack);
|
||||||
|
void invoke_save(std::stack<std::string> submenu_name_stack) {}
|
||||||
|
void invoke_hotkey() {}
|
||||||
|
void write_translation(nlohmann::json& object) {}
|
||||||
|
void read_translation(nlohmann::json& object) {}
|
||||||
|
void reset_translation() {}
|
||||||
|
private:
|
||||||
|
std::function<void()> m_on_click = []() {};
|
||||||
|
std::function<void()> m_on_hover = []() {};
|
||||||
|
std::function<void(radio_option*)> m_on_update = [](radio_option*) {};
|
||||||
|
|
||||||
|
int m_id = 0;
|
||||||
|
int m_index = 0;
|
||||||
|
radio_context* m_context = nullptr;
|
||||||
|
};
|
338
GTAV/src/menu/base/options/scroll.h
Normal file
338
GTAV/src/menu/base/options/scroll.h
Normal file
@ -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 <timeapi.h>
|
||||||
|
|
||||||
|
template<typename Type>
|
||||||
|
struct scroll_struct {
|
||||||
|
localization m_name;
|
||||||
|
Type m_result;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename Type>
|
||||||
|
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<Type>* 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<void()> function) {
|
||||||
|
m_on_click = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
scroll_option& add_requirement(std::function<bool()> function) {
|
||||||
|
m_requirement = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
scroll_option& add_update(std::function<void(scroll_option*, int)> function) {
|
||||||
|
m_on_update = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
scroll_option& add_hover(std::function<void()> function) {
|
||||||
|
m_on_hover = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
scroll_option& add_tooltip(std::string tooltip) {
|
||||||
|
m_tooltip.set(tooltip.c_str());
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
scroll_option& add_translate() {
|
||||||
|
m_name.set_translate(true);
|
||||||
|
m_tooltip.set_translate(true);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
scroll_option& add_hotkey() {
|
||||||
|
m_has_hotkey = true;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
scroll_option& set_scroll_speed(uint32_t speed) {
|
||||||
|
m_scroll_speed = speed;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
scroll_option& loop() {
|
||||||
|
m_loop = true;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
scroll_option& add_offset(float offset) {
|
||||||
|
m_offset = offset;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
scroll_option& add_savable(std::stack<std::string> menu_stack) {
|
||||||
|
if (menu_stack.size() <= 0) return *this;
|
||||||
|
|
||||||
|
m_savable = true;
|
||||||
|
if (m_toggle && m_requirement()) {
|
||||||
|
*m_number = util::config::read_int(menu_stack, m_name.get_original().c_str(), (int)*m_number, { "Values" });
|
||||||
|
m_number_cache = *m_number;
|
||||||
|
|
||||||
|
if (m_type == TOGGLE && m_toggle) {
|
||||||
|
*m_toggle = util::config::read_bool(menu_stack, m_name.get_original().c_str(), *m_toggle);
|
||||||
|
m_toggle_cache = *m_toggle;
|
||||||
|
|
||||||
|
if (*m_toggle) {
|
||||||
|
m_on_click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
void 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) {
|
||||||
|
sprintf_s(name_buffer, ("~s~<font face='$Font2' size='" + std::to_string(size) + "'>←</font> %s ~s~<font face='$Font2' size='" + std::to_string(size) + "'>→</font> ~m~[%i/%i]").c_str(), m_scroll[*m_number].m_name.get().c_str(), (*m_number) + 1, m_max + 1);
|
||||||
|
} else {
|
||||||
|
sprintf_s(name_buffer, "%s ~m~[%i/%i]", m_scroll[*m_number].m_name.get().c_str(), (*m_number) + 1, m_max + 1);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
sprintf_s(name_buffer, "%s ~m~[%i/%i]", m_scroll[*m_number].m_name.get().c_str(), (*m_number) + 1, m_max + 1);
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void render_selected(int position, std::stack<std::string> submenu_name_stack) {
|
||||||
|
m_on_hover();
|
||||||
|
|
||||||
|
if (m_requirement() && menu::input::is_option_pressed()) {
|
||||||
|
if (m_type == TOGGLE) {
|
||||||
|
*m_toggle = !*m_toggle;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_on_click();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_savable) {
|
||||||
|
if (m_number_cache != *m_number) {
|
||||||
|
m_number_cache = *m_number;
|
||||||
|
|
||||||
|
util::config::write_int(submenu_name_stack, m_name.get_original().c_str(), *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().c_str(), *m_toggle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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 (menu::input::is_left_just_pressed()) {
|
||||||
|
if (!m_left_disabled) {
|
||||||
|
*m_number -= 1;
|
||||||
|
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 += 1;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint32_t 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 -= 1;
|
||||||
|
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 += 1;
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void invoke_save(std::stack<std::string> submenu_name_stack) {}
|
||||||
|
|
||||||
|
void invoke_hotkey() {
|
||||||
|
if (!m_requirement()) return;
|
||||||
|
|
||||||
|
if (m_type == TOGGLE) {
|
||||||
|
*m_toggle = !*m_toggle;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_on_click();
|
||||||
|
|
||||||
|
static std::unordered_map<uint32_t, uint32_t> 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()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void write_translation(nlohmann::json& object) {
|
||||||
|
for (int i = 0; i < m_max + 1; i++) {
|
||||||
|
if (m_scroll[i].m_name.has_translation()) {
|
||||||
|
if (object["scrollables"][m_scroll[i].m_name.get_original()].empty()) {
|
||||||
|
object["scrollables"][m_scroll[i].m_name.get_original()] = m_scroll[i].m_name.get_original();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void read_translation(nlohmann::json& object) {
|
||||||
|
for (int i = 0; i < m_max + 1; i++) {
|
||||||
|
if (m_scroll[i].m_name.has_translation()) {
|
||||||
|
std::string name = m_scroll[i].m_name.get_original();
|
||||||
|
m_scroll[i].m_name.set_mapped(JsonGet<std::string>(object["scrollables"], name, name).c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void reset_translation() {
|
||||||
|
for (int i = 0; i < m_max + 1; i++) {
|
||||||
|
if (m_scroll[i].m_name.has_translation()) {
|
||||||
|
m_scroll[i].m_name.reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
std::function<void()> m_on_click = []() {};
|
||||||
|
std::function<void()> m_on_hover = []() {};
|
||||||
|
std::function<void(scroll_option*, int)> m_on_update = [](scroll_option*, int) {};
|
||||||
|
|
||||||
|
scroll_option_type m_type = SCROLL;
|
||||||
|
int* m_number = nullptr;
|
||||||
|
int m_min = 0;
|
||||||
|
int m_max = 0;
|
||||||
|
int m_left_timer = 0;
|
||||||
|
int m_right_timer = 0;
|
||||||
|
|
||||||
|
bool* m_toggle = nullptr;
|
||||||
|
bool m_has_min = false;
|
||||||
|
bool m_has_max = false;
|
||||||
|
bool m_loop = false;
|
||||||
|
bool m_left_disabled = false;
|
||||||
|
bool m_right_disabled = false;
|
||||||
|
|
||||||
|
scroll_struct<Type>* m_scroll = nullptr;
|
||||||
|
uint32_t m_scroll_speed = 200;
|
||||||
|
float m_offset = 0.f;
|
||||||
|
|
||||||
|
int m_number_cache = 0;
|
||||||
|
bool m_toggle_cache = false;
|
||||||
|
};
|
64
GTAV/src/menu/base/options/submenu_option.cpp
Normal file
64
GTAV/src/menu/base/options/submenu_option.cpp
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
#include "submenu_option.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 "menu/base/submenu_handler.h"
|
||||||
|
#include "rage/invoker/natives.h"
|
||||||
|
#include "util/va.h"
|
||||||
|
|
||||||
|
void submenu_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;
|
||||||
|
color_rgba bar_color = global::ui::g_submenu_bar;
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
if (!m_disable_icon) {
|
||||||
|
if (m_override.m_enabled) {
|
||||||
|
menu::renderer::draw_sprite_aligned(m_override.m_asset, { global::ui::g_position.x + m_override.m_offset.x - (0.23f - global::ui::g_scale.x), global::ui::g_position.y + (position * global::ui::g_option_scale) + m_override.m_offset.y }, m_override.m_scale, 0.f, *m_override.m_color);
|
||||||
|
} else {
|
||||||
|
menu::renderer::draw_sprite_aligned({ "ozarktextures", "arrow.png" }, { global::ui::g_position.x + global::ui::g_submenu_arrow_position.x - (0.23f - global::ui::g_scale.x), global::ui::g_position.y + (position * global::ui::g_option_scale) + global::ui::g_submenu_arrow_position.y }, global::ui::g_submenu_arrow_scale, 0.f, bar_color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_side_text.m_enabled) {
|
||||||
|
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 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void submenu_option::render_selected(int position, std::stack<std::string> submenu_name_stack) {
|
||||||
|
m_on_hover(this);
|
||||||
|
|
||||||
|
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_requirement() && menu::input::is_option_pressed()) {
|
||||||
|
m_on_click();
|
||||||
|
m_on_click_this(this);
|
||||||
|
menu::submenu::handler::set_submenu(m_submenu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void submenu_option::invoke_hotkey() {
|
||||||
|
if (!m_requirement()) return;
|
||||||
|
m_on_click();
|
||||||
|
|
||||||
|
if (!menu::base::is_open()) menu::base::set_open(true);
|
||||||
|
menu::submenu::handler::set_submenu(m_submenu);
|
||||||
|
|
||||||
|
static std::unordered_map<uint32_t, uint32_t> 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()));
|
||||||
|
}
|
121
GTAV/src/menu/base/options/submenu_option.h
Normal file
121
GTAV/src/menu/base/options/submenu_option.h
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "option.h"
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
#include "menu/base/base.h"
|
||||||
|
|
||||||
|
class submenu_option : public base_option {
|
||||||
|
public:
|
||||||
|
submenu_option(std::string name)
|
||||||
|
: base_option(name) {}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
submenu_option& add_submenu() {
|
||||||
|
m_submenu = T::get();
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu_option& add_click(std::function<void()> function) {
|
||||||
|
m_on_click = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu_option& add_click_this(std::function<void(submenu_option*)> function) {
|
||||||
|
m_on_click_this = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu_option& add_requirement(std::function<bool()> function) {
|
||||||
|
m_requirement = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu_option& add_update(std::function<void(submenu_option*, int)> function) {
|
||||||
|
m_on_update = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu_option& add_hover(std::function<void(submenu_option*)> function) {
|
||||||
|
m_on_hover = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu_option& add_tooltip(std::string tooltip) {
|
||||||
|
m_tooltip.set(tooltip.c_str());
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu_option& add_translate() {
|
||||||
|
m_name.set_translate(true);
|
||||||
|
m_tooltip.set_translate(true);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu_option& add_hotkey() {
|
||||||
|
m_has_hotkey = true;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu_option& add_side_text(std::string text) {
|
||||||
|
m_side_text = { true, text };
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu_option& add_offset(float offset) {
|
||||||
|
m_offset = offset;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu_option& add_icon_override(std::pair<std::string, std::string> asset, math::vector2<float> offset, math::vector2<float> scale, color_rgba* color) {
|
||||||
|
m_override = { true, asset, offset, scale, color };
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu_option& add_custom_data(uint8_t* data) {
|
||||||
|
memcpy(m_custom_data, data, 0x10);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu_option& disable_icon() {
|
||||||
|
m_disable_icon = true;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t* get_custom_data() {
|
||||||
|
return m_custom_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
void render(int position);
|
||||||
|
void render_selected(int position, std::stack<std::string> submenu_name_stack);
|
||||||
|
void invoke_save(std::stack<std::string> submenu_name_stack) {}
|
||||||
|
void invoke_hotkey();
|
||||||
|
void write_translation(nlohmann::json& object) {}
|
||||||
|
void read_translation(nlohmann::json& object) {}
|
||||||
|
void reset_translation() {}
|
||||||
|
private:
|
||||||
|
struct side_text {
|
||||||
|
bool m_enabled = false;
|
||||||
|
std::string m_text = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
struct icon_override {
|
||||||
|
bool m_enabled = false;
|
||||||
|
std::pair<std::string, std::string> m_asset = {};
|
||||||
|
math::vector2<float> m_offset;
|
||||||
|
math::vector2<float> m_scale;
|
||||||
|
color_rgba* m_color;
|
||||||
|
};
|
||||||
|
|
||||||
|
side_text m_side_text;
|
||||||
|
icon_override m_override;
|
||||||
|
float m_offset = 0.f;
|
||||||
|
uint8_t m_custom_data[0x10];
|
||||||
|
bool m_disable_icon = false;
|
||||||
|
|
||||||
|
menu::submenu::submenu* m_submenu = nullptr;
|
||||||
|
|
||||||
|
std::function<void()> m_on_click = []() {};
|
||||||
|
std::function<void(submenu_option*)> m_on_click_this = [](submenu_option*) {};
|
||||||
|
std::function<void(submenu_option*)> m_on_hover = [](submenu_option*) {};
|
||||||
|
std::function<void(submenu_option*, int)> m_on_update = [](submenu_option*, int) {};
|
||||||
|
};
|
58
GTAV/src/menu/base/options/toggle.cpp
Normal file
58
GTAV/src/menu/base/options/toggle.cpp
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#include "toggle.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 toggle_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;
|
||||||
|
color_rgba toggle_color = *m_toggle ? global::ui::g_toggle_on : global::ui::g_toggle_off;
|
||||||
|
|
||||||
|
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);
|
||||||
|
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, toggle_color);
|
||||||
|
}
|
||||||
|
|
||||||
|
void toggle_option::render_selected(int position, std::stack<std::string> submenu_name_stack) {
|
||||||
|
m_on_hover();
|
||||||
|
|
||||||
|
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_toggle && m_requirement() && menu::input::is_option_pressed()) {
|
||||||
|
*m_toggle = !*m_toggle;
|
||||||
|
m_on_click();
|
||||||
|
|
||||||
|
if (m_savable) {
|
||||||
|
util::config::write_bool(submenu_name_stack, m_name.get_original(), *m_toggle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void toggle_option::invoke_hotkey() {
|
||||||
|
if (!m_requirement()) return;
|
||||||
|
|
||||||
|
*m_toggle = !*m_toggle;
|
||||||
|
m_on_click();
|
||||||
|
|
||||||
|
static std::unordered_map<uint32_t, uint32_t> 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()));
|
||||||
|
}
|
87
GTAV/src/menu/base/options/toggle.h
Normal file
87
GTAV/src/menu/base/options/toggle.h
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "option.h"
|
||||||
|
#include "menu/base/base.h"
|
||||||
|
#include "util/config.h"
|
||||||
|
|
||||||
|
class toggle_option : public base_option {
|
||||||
|
public:
|
||||||
|
toggle_option(std::string name)
|
||||||
|
: base_option(name)
|
||||||
|
{}
|
||||||
|
|
||||||
|
toggle_option& add_click(std::function<void()> function) {
|
||||||
|
m_on_click = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle_option& add_requirement(std::function<bool()> function) {
|
||||||
|
m_requirement = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle_option& add_update(std::function<void(toggle_option*, int)> function) {
|
||||||
|
m_on_update = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle_option& add_hover(std::function<void()> function) {
|
||||||
|
m_on_hover = function;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle_option& add_tooltip(std::string tooltip) {
|
||||||
|
m_tooltip.set(tooltip.c_str());
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle_option& add_translate() {
|
||||||
|
m_name.set_translate(true);
|
||||||
|
m_tooltip.set_translate(true);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle_option& add_hotkey() {
|
||||||
|
m_has_hotkey = true;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle_option& add_toggle(bool& tog) {
|
||||||
|
m_toggle = &tog;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle_option& add_savable(std::stack<std::string> menu_stack) {
|
||||||
|
if (menu_stack.size() <= 0) return *this;
|
||||||
|
|
||||||
|
m_savable = true;
|
||||||
|
if (m_toggle && m_requirement()) {
|
||||||
|
*m_toggle = util::config::read_bool(menu_stack, m_name.get_original().c_str(), *m_toggle);
|
||||||
|
if (*m_toggle) {
|
||||||
|
m_on_click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle_option& add_offset(float offset) {
|
||||||
|
m_offset = offset;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
void render(int position);
|
||||||
|
void render_selected(int position, std::stack<std::string> submenu_name_stack);
|
||||||
|
void invoke_save(std::stack<std::string> submenu_name_stack) {}
|
||||||
|
void invoke_hotkey();
|
||||||
|
void write_translation(nlohmann::json& object) {}
|
||||||
|
void read_translation(nlohmann::json& object) {}
|
||||||
|
void reset_translation() {}
|
||||||
|
private:
|
||||||
|
float m_offset = 0.f;
|
||||||
|
bool* m_toggle = nullptr;
|
||||||
|
|
||||||
|
std::function<void()> m_on_click = []() {};
|
||||||
|
std::function<void()> m_on_hover = []() {};
|
||||||
|
std::function<void(toggle_option*, int)> m_on_update = [](toggle_option*, int) {};
|
||||||
|
};
|
444
GTAV/src/menu/base/renderer.cpp
Normal file
444
GTAV/src/menu/base/renderer.cpp
Normal file
@ -0,0 +1,444 @@
|
|||||||
|
#include "renderer.h"
|
||||||
|
#include "base.h"
|
||||||
|
#include "submenu_handler.h"
|
||||||
|
#include "rage/invoker/natives.h"
|
||||||
|
#include "menu/base/util/textures.h"
|
||||||
|
#include "menu/base/util/fonts.h"
|
||||||
|
#include "menu/base/submenus/main.h"
|
||||||
|
#include <random>
|
||||||
|
|
||||||
|
static localization t_tooltip_1("put me in coach", true, true);
|
||||||
|
static localization t_tooltip_2("i've made a severe and continuous lapse in my judgment", true, true);
|
||||||
|
static localization t_tooltip_3("nothing. you get nothing here today. fuck you.", true, true);
|
||||||
|
static localization t_tooltip_4("I'll have you know I graduated top of my class in the Navy Seals", true, true);
|
||||||
|
static localization t_tooltip_5("penis size should be a volumetric measurement, let me explain...", true, true);
|
||||||
|
static localization t_tooltip_6("there's no such thing as a \"simp\"", true, true);
|
||||||
|
static localization t_tooltip_7("ligma", true, true);
|
||||||
|
static localization t_tooltip_8("sugma", true, true);
|
||||||
|
static localization t_tooltip_9("hi sisters", true, true);
|
||||||
|
static localization t_tooltip_10("one does not simply walk into mordor", true, true);
|
||||||
|
static localization t_tooltip_11("if you spill cleaning product, did you make a mess?", true, true);
|
||||||
|
static localization t_tooltip_13("bro where the fuck am i?", true, true);
|
||||||
|
static localization t_tooltip_14("welcome to pogzark :tm:", true, true);
|
||||||
|
static localization t_tooltip_15("see, the wait paid off didn't it? no??? fuck you then", true, true);
|
||||||
|
static localization t_tooltip_16("i aint ever gonna stop loving you, bitch", true, true);
|
||||||
|
static localization t_tooltip_17("ozark update when?", true, true);
|
||||||
|
static localization t_tooltip_19("sudo rm -f / -no-preserve-root", true, true);
|
||||||
|
static localization t_tooltip_20("bro that's cap", true, true);
|
||||||
|
static localization t_tooltip_21("dude, where's my car?", true, true);
|
||||||
|
static localization t_tooltip_22("rate the ozark exit scam 1 thru 10", true, true);
|
||||||
|
static localization t_tooltip_23("fuck you", true, true);
|
||||||
|
static localization t_tooltip_24("sponsored by cheatengine", true, true);
|
||||||
|
static localization t_tooltip_25("lets play a game; what has pink hair... wait, nevermind", true, true);
|
||||||
|
static localization t_tooltip_26("\"Such an obvious exit scam\" - DoneWithDegeneracy", true, true);
|
||||||
|
static localization t_tooltip_27("wow we can edit the weather color, we're so cool", true, true);
|
||||||
|
|
||||||
|
namespace menu::renderer {
|
||||||
|
std::pair<std::string, std::string> renderer::get_texture(menu_texture texture) {
|
||||||
|
if (texture.m_texture != "sa7anisafaggot") {
|
||||||
|
if (texture.m_enabled) {
|
||||||
|
std::vector<menu::textures::texture_context> list = menu::textures::get_list();
|
||||||
|
|
||||||
|
int texture_index = texture.m_context.m_selected;
|
||||||
|
if (texture_index < list.size()) {
|
||||||
|
auto vit = std::find_if(begin(list), end(list), [=](menu::textures::texture_context& context) { return context.m_name == texture.m_texture; });
|
||||||
|
if (vit != end(list)) {
|
||||||
|
return { "ozarktextures", vit->m_name };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return { "randomha", "yesyesyesyes" };
|
||||||
|
}
|
||||||
|
|
||||||
|
void renderer::render() {
|
||||||
|
int current_option = base::get_current_option();
|
||||||
|
int max_options = base::get_max_options();
|
||||||
|
int scroll_offset = base::get_scroll_offset();
|
||||||
|
int total_options = menu::submenu::handler::get_total_options();
|
||||||
|
|
||||||
|
m_render_count = math::clamp(current_option - scroll_offset > max_options ? max_options : (current_option - scroll_offset + 1), 0, max_options);
|
||||||
|
|
||||||
|
int option_count = total_options > max_options ? max_options : total_options;
|
||||||
|
int scroller_position = math::clamp(current_option - scroll_offset > max_options ? max_options : current_option - scroll_offset, 0, max_options);
|
||||||
|
|
||||||
|
// main header
|
||||||
|
std::pair<std::string, std::string> texture = get_texture(global::ui::m_header);
|
||||||
|
draw_sprite_aligned(texture, { global::ui::g_position.x, global::ui::g_position.y - 0.08f }, { global::ui::g_scale.x, 0.08f }, 0.f, global::ui::g_main_header);
|
||||||
|
|
||||||
|
// globe
|
||||||
|
if (global::ui::g_render_globe) {
|
||||||
|
if (!native::has_scaleform_movie_loaded(m_globe_handle)) {
|
||||||
|
m_globe_handle = native::request_scaleform_movie("MP_MENU_GLARE");
|
||||||
|
} else {
|
||||||
|
float rotation = native::get_gameplay_cam_rot(2).z;
|
||||||
|
rotation -= round(rotation / 360.0f) * 360.0f;
|
||||||
|
if (rotation < 0.f) {
|
||||||
|
rotation += 360.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
native::push_scaleform_movie_function(m_globe_handle, "SET_DATA_SLOT");
|
||||||
|
native::push_scaleform_movie_function_parameter_float(rotation);
|
||||||
|
native::pop_scaleform_movie_function_void();
|
||||||
|
}
|
||||||
|
|
||||||
|
native::draw_scaleform_movie(m_globe_handle, global::ui::g_position.x + global::ui::g_globe_position.x, global::ui::g_position.y + global::ui::g_globe_position.y, global::ui::g_globe_scale.x, global::ui::g_globe_scale.y, global::ui::g_globe.r, global::ui::g_globe.g, global::ui::g_globe.b, global::ui::g_globe.a, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// background
|
||||||
|
texture = get_texture(global::ui::m_background);
|
||||||
|
if (texture.first == "randomha") texture = { "commonmenu", "gradient_bgd" };
|
||||||
|
draw_sprite_aligned(texture, global::ui::g_position, { global::ui::g_scale.x, option_count * global::ui::g_option_scale }, 0.f, global::ui::g_background);
|
||||||
|
|
||||||
|
// scroller
|
||||||
|
if (global::ui::g_scroll_lerp) {
|
||||||
|
m_smooth_scroll = math::lerp(m_smooth_scroll, global::ui::g_position.y + (scroller_position * global::ui::g_option_scale), global::ui::g_delta * global::ui::g_scroll_lerp_speed);
|
||||||
|
} else m_smooth_scroll = global::ui::g_position.y + (scroller_position * global::ui::g_option_scale);
|
||||||
|
|
||||||
|
texture = get_texture(global::ui::m_scroller);
|
||||||
|
draw_sprite_aligned(texture, { global::ui::g_position.x, m_smooth_scroll }, { global::ui::g_scale.x, global::ui::g_option_scale }, 0.f, global::ui::g_scroller);
|
||||||
|
|
||||||
|
std::vector<std::shared_ptr<base_option>> options = menu::submenu::handler::get_current()->get_options();
|
||||||
|
int count = (int)std::count_if(begin(options), end(options), [](std::shared_ptr<base_option> option) { return option->is_visible(); });
|
||||||
|
int render_count = count;
|
||||||
|
|
||||||
|
if (render_count > max_options) {
|
||||||
|
render_count = max_options;
|
||||||
|
}
|
||||||
|
|
||||||
|
// footer
|
||||||
|
texture = get_texture(global::ui::m_footer);
|
||||||
|
draw_sprite_aligned(texture, { global::ui::g_position.x, global::ui::g_position.y + (render_count * global::ui::g_option_scale) }, { global::ui::g_scale.x, global::ui::g_option_scale }, 0.f, global::ui::g_footer);
|
||||||
|
|
||||||
|
draw_sprite({ "commonmenu", "shop_arrows_upanddown" }, { global::ui::g_position.x + ((global::ui::g_scale.x) * 0.5f), global::ui::g_position.y + (render_count * global::ui::g_option_scale) + (global::ui::g_option_scale * 0.5f) }, { 0.015f, 0.027f }, 0.f, { 255, 255, 255, 255 });
|
||||||
|
|
||||||
|
// option counter
|
||||||
|
char counter[50];
|
||||||
|
sprintf_s(counter, "%i ~s~• %i", current_option + 1, count);
|
||||||
|
draw_text(counter, { global::ui::g_position.x + 0.004f, global::ui::g_position.y + (render_count * global::ui::g_option_scale) + 0.004f }, get_normalized_font_scale(global::ui::g_sub_header_font, 0.30f), global::ui::g_sub_header_font, global::ui::g_sub_header_text, JUSTIFY_RIGHT, { 0.f, (1.0f - (1.0f - (global::ui::g_position.x + (0.315f / 2.f) - (0.23f - global::ui::g_scale.x)) - .068f)) });
|
||||||
|
}
|
||||||
|
|
||||||
|
void renderer::render_title(std::string title) {
|
||||||
|
if (global::ui::g_disable_title) return;
|
||||||
|
std::transform(begin(title), end(title), begin(title), ::toupper);
|
||||||
|
|
||||||
|
if (menu::submenu::handler::get_current() == main_menu::get()) {
|
||||||
|
draw_text("~s~øZARK " VERSION_TYPE, { global::ui::g_position.x + 0.005f, global::ui::g_position.y - 0.061f }, 0.77f, global::ui::g_header_font, global::ui::g_title, JUSTIFY_LEFT);
|
||||||
|
} else {
|
||||||
|
std::string input_string = title;
|
||||||
|
std::string final_string = title;
|
||||||
|
|
||||||
|
float width = calculate_string_width(input_string, global::ui::g_header_font, 0.77f);
|
||||||
|
while (width > global::ui::g_scale.x + (global::ui::g_header_font == menu::fonts::get_font_id("RDR") ? 0.055f : 0.f)) {
|
||||||
|
if (input_string.length() > 0) {
|
||||||
|
input_string.pop_back();
|
||||||
|
|
||||||
|
while (input_string[input_string.size() - 1] == ' ') {
|
||||||
|
input_string.pop_back();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final_string = input_string + "...";
|
||||||
|
width = calculate_string_width(final_string, global::ui::g_header_font, 0.77f);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
draw_text(final_string, { global::ui::g_position.x + 0.005f, global::ui::g_position.y - 0.061f }, 0.77f, global::ui::g_header_font, global::ui::g_title, JUSTIFY_LEFT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void renderer::render_tooltip(std::string tooltip) {
|
||||||
|
if (!tooltip.empty()) {
|
||||||
|
global::ui::g_rendering_tooltip = tooltip;
|
||||||
|
float y = 0.f;
|
||||||
|
|
||||||
|
std::vector<std::shared_ptr<base_option>> options = menu::submenu::handler::get_current()->get_options();
|
||||||
|
int count = (int)std::count_if(begin(options), end(options), [](std::shared_ptr<base_option> option) { return option->is_visible(); });
|
||||||
|
|
||||||
|
if (count > base::get_max_options()) {
|
||||||
|
y = global::ui::g_position.y + ((base::get_max_options() + 1) * global::ui::g_option_scale) + 0.0025f;
|
||||||
|
} else {
|
||||||
|
y = global::ui::g_position.y + ((count + 1) * global::ui::g_option_scale) + 0.0025f;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (global::ui::g_rendering_color) {
|
||||||
|
y += 0.032f;
|
||||||
|
}
|
||||||
|
|
||||||
|
float scaled_body_height = menu::renderer::get_normalized_font_scale(global::ui::g_tooltip_font, global::ui::g_option_height);
|
||||||
|
native::set_text_font(global::ui::g_tooltip_font);
|
||||||
|
native::set_text_scale(0.f, scaled_body_height);
|
||||||
|
native::set_text_wrap(global::ui::g_position.x + 0.004f, (1.0f - (1.0f - (global::ui::g_position.x + 0.1575f - (0.23f - global::ui::g_scale.x)) - global::ui::g_wrap)));
|
||||||
|
native::begin_text_command_line_count("STRING");
|
||||||
|
native::add_text_component_substring_player_name(tooltip.c_str());
|
||||||
|
|
||||||
|
float height = global::ui::g_option_scale;
|
||||||
|
|
||||||
|
int lines = native::end_text_command_get_line_count(global::ui::g_position.x + 0.004f, y + 0.005f);
|
||||||
|
if (lines > 1) {
|
||||||
|
height = (lines * native::get_text_scale_height(scaled_body_height, global::ui::g_tooltip_font)) + (0.005f * lines) + 0.005f;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::pair<std::string, std::string> texture = get_texture(global::ui::m_tooltip_background);
|
||||||
|
draw_sprite_aligned(texture, { global::ui::g_position.x, y }, { global::ui::g_scale.x, height }, 0.f, global::ui::g_tooltip);
|
||||||
|
draw_text(tooltip.c_str(), { global::ui::g_position.x + 0.004f, y + 0.005f }, scaled_body_height, global::ui::g_tooltip_font, { 255, 255, 255, 255 }, JUSTIFY_LEFT, { global::ui::g_position.x + 0.004f, (1.0f - (1.0f - (global::ui::g_position.x + 0.1575f - (0.23f - global::ui::g_scale.x)) - global::ui::g_wrap)) });
|
||||||
|
}
|
||||||
|
|
||||||
|
global::ui::g_rendering_color = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void renderer::render_open_tooltip() {
|
||||||
|
if (!global::ui::g_render_tooltip) return;
|
||||||
|
|
||||||
|
static localization* names[] = {
|
||||||
|
&t_tooltip_1,
|
||||||
|
&t_tooltip_2,
|
||||||
|
&t_tooltip_3,
|
||||||
|
&t_tooltip_4,
|
||||||
|
&t_tooltip_5,
|
||||||
|
&t_tooltip_6,
|
||||||
|
&t_tooltip_7,
|
||||||
|
&t_tooltip_8,
|
||||||
|
&t_tooltip_9,
|
||||||
|
&t_tooltip_10,
|
||||||
|
&t_tooltip_11,
|
||||||
|
&t_tooltip_13,
|
||||||
|
&t_tooltip_14,
|
||||||
|
&t_tooltip_15,
|
||||||
|
&t_tooltip_16,
|
||||||
|
&t_tooltip_17,
|
||||||
|
&t_tooltip_19,
|
||||||
|
&t_tooltip_20,
|
||||||
|
&t_tooltip_21,
|
||||||
|
&t_tooltip_22,
|
||||||
|
&t_tooltip_23,
|
||||||
|
&t_tooltip_24,
|
||||||
|
&t_tooltip_25,
|
||||||
|
&t_tooltip_26,
|
||||||
|
&t_tooltip_27,
|
||||||
|
};
|
||||||
|
|
||||||
|
char text[200];
|
||||||
|
|
||||||
|
std::random_device r;
|
||||||
|
std::seed_seq seed2 { r(), r(), r(), r(), r(), r(), r(), r() };
|
||||||
|
std::mt19937 rng(seed2);
|
||||||
|
std::uniform_int_distribution<int> val(0, NUMOF(names) - 1);
|
||||||
|
static const int value = val(rng);
|
||||||
|
|
||||||
|
native::set_text_outline();
|
||||||
|
|
||||||
|
if (native::is_input_disabled(2)) {
|
||||||
|
sprintf_s(text, "%s\n~c~%s", names[value]->get().c_str(), menu::input::g_key_names[menu::base::get_open_key()]);
|
||||||
|
draw_text(text, { 0.5f, 0.09f }, get_normalized_font_scale(global::ui::g_open_tooltip_font, 0.40f), global::ui::g_open_tooltip_font, global::ui::g_open_tooltip, JUSTIFY_CENTER);
|
||||||
|
} else {
|
||||||
|
sprintf_s(text, "%s\n~c~RB + RIGHT", names[value]->get().c_str());
|
||||||
|
draw_text(text, { 0.5f, 0.09f }, get_normalized_font_scale(global::ui::g_open_tooltip_font, 0.40f), global::ui::g_open_tooltip_font, global::ui::g_open_tooltip, JUSTIFY_CENTER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void renderer::render_color_preview(color_rgba color) {
|
||||||
|
global::ui::g_rendering_color = true;
|
||||||
|
|
||||||
|
std::vector<std::shared_ptr<base_option>> options = menu::submenu::handler::get_current()->get_options();
|
||||||
|
int count = (int)std::count_if(begin(options), end(options), [](std::shared_ptr<base_option> option) { return option->is_visible(); });
|
||||||
|
|
||||||
|
if (count > base::get_max_options()) {
|
||||||
|
count = base::get_max_options();
|
||||||
|
}
|
||||||
|
|
||||||
|
draw_rect({ global::ui::g_position.x, global::ui::g_position.y + ((count + 1) * global::ui::g_option_scale) + 0.0025f }, { global::ui::g_scale.x, global::ui::g_option_scale }, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
float renderer::calculate_string_width(std::string string, int font, float scale) {
|
||||||
|
native::begin_text_command_width("STRING");
|
||||||
|
native::add_text_component_substring_player_name(string.c_str());
|
||||||
|
native::set_text_scale(0.f, scale);
|
||||||
|
return native::end_text_command_get_width(font);
|
||||||
|
}
|
||||||
|
|
||||||
|
float renderer::get_normalized_font_scale(int font, float scale) {
|
||||||
|
switch (font) {
|
||||||
|
case 0: return (scale * 1.0f);
|
||||||
|
case 1: return (scale * 1.3f);
|
||||||
|
case 2: return (scale * 1.11f);
|
||||||
|
case 4: return (scale * 1.11f);
|
||||||
|
case 7: return (scale * 1.29f);
|
||||||
|
}
|
||||||
|
|
||||||
|
return scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
void renderer::draw_rect(math::vector2<float> position, math::vector2<float> scale, color_rgba color) {
|
||||||
|
if (global::ui::g_stop_rendering) return;
|
||||||
|
native::draw_rect(position.x + (scale.x * 0.5f), position.y + (scale.y * 0.5f), scale.x, scale.y, color.r, color.g, color.b, color.a, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void renderer::draw_rect_unaligned(math::vector2<float> position, math::vector2<float> scale, color_rgba color) {
|
||||||
|
if (global::ui::g_stop_rendering) return;
|
||||||
|
native::draw_rect(position.x, position.y, scale.x, scale.y, color.r, color.g, color.b, color.a, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void renderer::draw_outlined_rect(math::vector2<float> position, math::vector2<float> scale, float thickness, color_rgba box_color, color_rgba border_color) {
|
||||||
|
if (global::ui::g_stop_rendering) return;
|
||||||
|
|
||||||
|
draw_rect({ position.x, position.y }, { scale.x, scale.y }, box_color); // bg
|
||||||
|
draw_rect({ position.x, position.y - thickness }, { scale.x, thickness }, border_color); // top
|
||||||
|
draw_rect({ position.x, position.y + scale.y }, { scale.x, thickness }, border_color); // bottom
|
||||||
|
|
||||||
|
draw_rect({ position.x - (thickness * 0.60f), position.y - thickness }, { (thickness * 0.60f), scale.y + (thickness * 2.f) }, border_color); // left
|
||||||
|
draw_rect({ position.x + scale.x, position.y - thickness }, { (thickness * 0.60f), scale.y + (thickness * 2.f) }, border_color); // right
|
||||||
|
}
|
||||||
|
|
||||||
|
void renderer::draw_text(std::string text, math::vector2<float> position, float scale, int font, color_rgba color, eJustify justification, math::vector2<float> wrap) {
|
||||||
|
if (global::ui::g_stop_rendering) return;
|
||||||
|
native::set_text_wrap(wrap.x, wrap.y);
|
||||||
|
|
||||||
|
if (justification != JUSTIFY_LEFT) {
|
||||||
|
native::set_text_justification(justification == JUSTIFY_CENTER ? 0 : 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
native::set_text_centre(justification == JUSTIFY_CENTER);
|
||||||
|
native::set_text_scale(0.f, scale);
|
||||||
|
native::set_text_colour(color.r, color.g, color.b, color.a);
|
||||||
|
native::set_text_font(font);
|
||||||
|
|
||||||
|
if (text.length() >= 98) {
|
||||||
|
global::ui::g_render_queue[global::ui::g_render_queue_index] = text;
|
||||||
|
global::ui::g_render_queue_index++;
|
||||||
|
global::ui::g_render_queue_index %= 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
native::begin_text_command_display_text("STRING");
|
||||||
|
native::add_text_component_substring_player_name(text.c_str());
|
||||||
|
native::end_text_command_display_text(position.x, position.y, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void renderer::draw_sprite(std::pair<std::string, std::string> asset, math::vector2<float> position, math::vector2<float> scale, float rotation, color_rgba color) {
|
||||||
|
if (global::ui::g_stop_rendering) return;
|
||||||
|
|
||||||
|
if (!native::has_streamed_texture_dict_loaded(asset.first.c_str()) && asset.first != "ozarktextures") {
|
||||||
|
native::request_streamed_texture_dict(asset.first.c_str(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
native::draw_sprite(asset.first.c_str(), asset.second.c_str(), position.x, position.y, scale.x, scale.y, rotation, color.r, color.g, color.b, color.a, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void renderer::draw_sprite_aligned(std::pair<std::string, std::string> asset, math::vector2<float> position, math::vector2<float> scale, float rotation, color_rgba color) {
|
||||||
|
if (global::ui::g_stop_rendering) return;
|
||||||
|
|
||||||
|
if (!native::has_streamed_texture_dict_loaded(asset.first.c_str()) && asset.first != "ozarktextures") {
|
||||||
|
native::request_streamed_texture_dict(asset.first.c_str(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
native::draw_sprite(asset.first.c_str(), asset.second.c_str(), position.x + (scale.x * 0.5f), position.y + (scale.y * 0.5f), scale.x, scale.y, rotation, color.r, color.g, color.b, color.a, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void renderer::draw_line(math::vector3<float> from, math::vector3<float> to, color_rgba color) {
|
||||||
|
if (global::ui::g_stop_rendering) return;
|
||||||
|
|
||||||
|
native::draw_line(from.x, from.y, from.z, to.x, to.y, to.z, color.r, color.g, color.b, color.a);
|
||||||
|
}
|
||||||
|
|
||||||
|
void renderer::draw_line_2d(math::vector3<float> from, math::vector3<float> to, color_rgba color) {
|
||||||
|
if (global::ui::g_stop_rendering) return;
|
||||||
|
|
||||||
|
if (global::ui::g_line_2d_index < 5000) {
|
||||||
|
line_2d& line = global::ui::m_line_2d[global::ui::g_line_2d_index++];
|
||||||
|
line.m_from.x = from.x;
|
||||||
|
line.m_from.y = from.y;
|
||||||
|
line.m_to.x = to.x;
|
||||||
|
line.m_to.y = to.y;
|
||||||
|
line.m_color = color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int renderer::get_render_count() {
|
||||||
|
return m_render_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
color_rgba renderer::hsv_to_rgb(float h, float s, float v, int original_alpha) {
|
||||||
|
double r = 0.f, g = 0.f, b = 0.f;
|
||||||
|
|
||||||
|
if (s == 0.f) {
|
||||||
|
r = v;
|
||||||
|
g = v;
|
||||||
|
b = v;
|
||||||
|
} else {
|
||||||
|
int i;
|
||||||
|
double f, p, q, t;
|
||||||
|
|
||||||
|
if (h == 360.f) {
|
||||||
|
h = 0.f;
|
||||||
|
} else h = h / 60.f;
|
||||||
|
|
||||||
|
i = (int)trunc(h);
|
||||||
|
f = h - i;
|
||||||
|
|
||||||
|
p = v * (1.f - s);
|
||||||
|
q = v * (1.f - (s * f));
|
||||||
|
t = v * (1.f - (s * (1.f - f)));
|
||||||
|
|
||||||
|
switch (i) {
|
||||||
|
case 0: r = v; g = t; b = p; break;
|
||||||
|
case 1: r = q; g = v; b = p; break;
|
||||||
|
case 2: r = p; g = v; b = t; break;
|
||||||
|
case 3: r = p; g = q; b = v; break;
|
||||||
|
case 4: r = t; g = p; b = v; break;
|
||||||
|
default: r = v; g = p; b = q; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return color_rgba((int)(r * 255.f), (int)(g * 255.f), (int)(b * 255.f), original_alpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
color_hsv renderer::rgb_to_hsv(color_rgba in) {
|
||||||
|
color_hsv out;
|
||||||
|
|
||||||
|
#define min_f(a, b, c) (fminf(a, fminf(b, c)))
|
||||||
|
#define max_f(a, b, c) (fmaxf(a, fmaxf(b, c)))
|
||||||
|
|
||||||
|
float r = in.r / 255.0f;
|
||||||
|
float g = in.g / 255.0f;
|
||||||
|
float b = in.b / 255.0f;
|
||||||
|
|
||||||
|
float h, s, v; // h:0-360.0, s:0.0-1.0, v:0.0-1.0
|
||||||
|
|
||||||
|
float max = max_f(r, g, b);
|
||||||
|
float min = min_f(r, g, b);
|
||||||
|
|
||||||
|
v = max;
|
||||||
|
|
||||||
|
if (max == 0.0f) {
|
||||||
|
s = 0;
|
||||||
|
h = 0;
|
||||||
|
} else if (max - min == 0.0f) {
|
||||||
|
s = 0;
|
||||||
|
h = 0;
|
||||||
|
} else {
|
||||||
|
s = (max - min) / max;
|
||||||
|
|
||||||
|
if (max == r) {
|
||||||
|
h = 60 * ((g - b) / (max - min)) + 0;
|
||||||
|
} else if (max == g) {
|
||||||
|
h = 60 * ((b - r) / (max - min)) + 120;
|
||||||
|
} else {
|
||||||
|
h = 60 * ((r - g) / (max - min)) + 240;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (h < 0) h += 360.0f;
|
||||||
|
|
||||||
|
out.h = h;
|
||||||
|
out.s = s;
|
||||||
|
out.v = v;
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
renderer* get_renderer() {
|
||||||
|
static renderer instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
|
}
|
133
GTAV/src/menu/base/renderer.h
Normal file
133
GTAV/src/menu/base/renderer.h
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "global/ui_vars.h"
|
||||||
|
#include "util/math.h"
|
||||||
|
|
||||||
|
enum eJustify {
|
||||||
|
JUSTIFY_LEFT,
|
||||||
|
JUSTIFY_RIGHT,
|
||||||
|
JUSTIFY_CENTER,
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace menu::renderer {
|
||||||
|
#undef DrawText
|
||||||
|
class renderer {
|
||||||
|
public:
|
||||||
|
void render();
|
||||||
|
|
||||||
|
void render_title(std::string title);
|
||||||
|
void render_tooltip(std::string tooltip);
|
||||||
|
void render_open_tooltip();
|
||||||
|
void render_color_preview(color_rgba color);
|
||||||
|
|
||||||
|
float calculate_string_width(std::string string, int font, float scale);
|
||||||
|
float get_normalized_font_scale(int font, float scale);
|
||||||
|
std::pair<std::string, std::string> get_texture(menu_texture texture);
|
||||||
|
|
||||||
|
void draw_rect(math::vector2<float> position, math::vector2<float> scale, color_rgba color);
|
||||||
|
void draw_rect_unaligned(math::vector2<float> position, math::vector2<float> scale, color_rgba color);
|
||||||
|
void draw_outlined_rect(math::vector2<float> position, math::vector2<float> scale, float thickness, color_rgba box_color, color_rgba border_color);
|
||||||
|
void draw_text(std::string text, math::vector2<float> position, float scale, int font, color_rgba color, eJustify justification, math::vector2<float> wrap = { 0.f, 5.f });
|
||||||
|
void draw_sprite(std::pair<std::string, std::string> asset, math::vector2<float> position, math::vector2<float> scale, float rotation, color_rgba color);
|
||||||
|
void draw_sprite_aligned(std::pair<std::string, std::string> asset, math::vector2<float> position, math::vector2<float> scale, float rotation, color_rgba color);
|
||||||
|
void draw_line(math::vector3<float> from, math::vector3<float> to, color_rgba color);
|
||||||
|
void draw_line_2d(math::vector3<float> from, math::vector3<float> to, color_rgba color);
|
||||||
|
|
||||||
|
color_hsv rgb_to_hsv(color_rgba in);
|
||||||
|
color_rgba hsv_to_rgb(float h, float s, float v, int original_alpha = 255);
|
||||||
|
|
||||||
|
int get_render_count();
|
||||||
|
void set_smooth_scroll(float val) { m_smooth_scroll = val; }
|
||||||
|
float get_smooth_scroll() { return m_smooth_scroll; }
|
||||||
|
private:
|
||||||
|
float m_smooth_scroll = global::ui::g_position.y;
|
||||||
|
int m_render_count;
|
||||||
|
int m_globe_handle;
|
||||||
|
};
|
||||||
|
|
||||||
|
renderer* get_renderer();
|
||||||
|
|
||||||
|
inline void render() {
|
||||||
|
get_renderer()->render();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void render_open_tooltip() {
|
||||||
|
get_renderer()->render_open_tooltip();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline int get_render_count() {
|
||||||
|
return get_renderer()->get_render_count();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void render_title(std::string title) {
|
||||||
|
get_renderer()->render_title(title);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void render_tooltip(std::string tooltip) {
|
||||||
|
get_renderer()->render_tooltip(tooltip);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void render_color_preview(color_rgba color) {
|
||||||
|
get_renderer()->render_color_preview(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float calculate_string_width(std::string string, int font, float scale) {
|
||||||
|
return get_renderer()->calculate_string_width(string, font, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float get_normalized_font_scale(int font, float scale) {
|
||||||
|
return get_renderer()->get_normalized_font_scale(font, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void draw_rect(math::vector2<float> position, math::vector2<float> scale, color_rgba color) {
|
||||||
|
get_renderer()->draw_rect(position, scale, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void draw_rect_unaligned(math::vector2<float> position, math::vector2<float> scale, color_rgba color) {
|
||||||
|
get_renderer()->draw_rect_unaligned(position, scale, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void draw_outlined_rect(math::vector2<float> position, math::vector2<float> scale, float thickness, color_rgba box_color, color_rgba border_color) {
|
||||||
|
get_renderer()->draw_outlined_rect(position, scale, thickness, box_color, border_color);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void draw_text(std::string text, math::vector2<float> position, float scale, int font, color_rgba color, eJustify justification = JUSTIFY_LEFT, math::vector2<float> wrap = { 0.f, 5.f }) {
|
||||||
|
get_renderer()->draw_text(text, position, scale, font, color, justification, wrap);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void draw_sprite(std::pair<std::string, std::string> asset, math::vector2<float> position, math::vector2<float> scale, float rotation, color_rgba color) {
|
||||||
|
get_renderer()->draw_sprite(asset, position, scale, rotation, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void draw_sprite_aligned(std::pair<std::string, std::string> asset, math::vector2<float> position, math::vector2<float> scale, float rotation, color_rgba color) {
|
||||||
|
get_renderer()->draw_sprite_aligned(asset, position, scale, rotation, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void draw_line(math::vector3<float> from, math::vector3<float> to, color_rgba color) {
|
||||||
|
get_renderer()->draw_line(from, to, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void draw_line_2d(math::vector3<float> from, math::vector3<float> to, color_rgba color) {
|
||||||
|
get_renderer()->draw_line_2d(from, to, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline std::pair<std::string, std::string> get_texture(menu_texture texture) {
|
||||||
|
return get_renderer()->get_texture(texture);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void set_smooth_scroll(float val) {
|
||||||
|
get_renderer()->set_smooth_scroll(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float get_smooth_scroll() {
|
||||||
|
return get_renderer()->get_smooth_scroll();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline color_hsv rgb_to_hsv(color_rgba in) {
|
||||||
|
return get_renderer()->rgb_to_hsv(in);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline color_rgba hsv_to_rgb(float h, float s, float v, int original_alpha = 255) {
|
||||||
|
return get_renderer()->hsv_to_rgb(h, s, v, original_alpha);
|
||||||
|
}
|
||||||
|
}
|
106
GTAV/src/menu/base/submenu.cpp
Normal file
106
GTAV/src/menu/base/submenu.cpp
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
#include "submenu.h"
|
||||||
|
#include "renderer.h"
|
||||||
|
#include "submenu_handler.h"
|
||||||
|
#include "base.h"
|
||||||
|
#include "util/instructionals.h"
|
||||||
|
#include "util/hotkeys.h"
|
||||||
|
|
||||||
|
namespace menu::submenu {
|
||||||
|
void submenu::update_menu() {
|
||||||
|
update();
|
||||||
|
|
||||||
|
renderer::render_title(m_name.get());
|
||||||
|
|
||||||
|
handler::set_total_options(0);
|
||||||
|
handler::set_current_options_without_breaks(0);
|
||||||
|
handler::set_total_options_without_breaks(0);
|
||||||
|
|
||||||
|
bool slider = false;
|
||||||
|
bool input = false;
|
||||||
|
bool hotkey = false;
|
||||||
|
|
||||||
|
if (m_options.size() > 0) {
|
||||||
|
std::vector<std::shared_ptr<base_option>> options;
|
||||||
|
options.reserve(m_options.size());
|
||||||
|
|
||||||
|
int relative_position = 0;
|
||||||
|
int visibility_offset = 0;
|
||||||
|
|
||||||
|
for (std::shared_ptr<base_option> option : m_options) {
|
||||||
|
if (option->is_visible()) {
|
||||||
|
visibility_offset++;
|
||||||
|
options.push_back(option);
|
||||||
|
|
||||||
|
handler::set_total_options(handler::get_total_options() + 1);
|
||||||
|
if (!option->is_break()) {
|
||||||
|
if (visibility_offset <= base::get_current_option()) {
|
||||||
|
handler::set_current_options_without_breaks(handler::get_current_options_without_breaks() + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
handler::set_total_options_without_breaks(handler::get_total_options_without_breaks() + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = base::get_scroll_offset(); i < base::get_scroll_offset() + base::get_max_options(); i++) {
|
||||||
|
if (i >= 0 && i < options.size()) {
|
||||||
|
if (relative_position >= base::get_max_options()) break;
|
||||||
|
|
||||||
|
options.at(i).get()->render(relative_position);
|
||||||
|
|
||||||
|
if (relative_position == base::get_current_option() - base::get_scroll_offset()) {
|
||||||
|
if (base::is_open()) {
|
||||||
|
renderer::render_tooltip(options.at(i).get()->get_tooltip().get());
|
||||||
|
options.at(i).get()->render_selected(relative_position, m_submenu_name_stack);
|
||||||
|
|
||||||
|
slider = options.at(i).get()->is_slider();
|
||||||
|
input = options.at(i).get()->is_input();
|
||||||
|
hotkey = options.at(i).get()->has_hotkey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
relative_position++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_default_instructionals) {
|
||||||
|
instructionals::standard(slider, input, hotkey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void submenu::clear_options(int offset) {
|
||||||
|
if (offset > m_options.size()) return;
|
||||||
|
|
||||||
|
for (std::shared_ptr<base_option>& option : m_options) {
|
||||||
|
if (option->has_hotkey()) {
|
||||||
|
hotkey::unregister_hotkey(&*option);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_options.resize(offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string submenu::get_string(std::string str) {
|
||||||
|
for (localization local : m_strings) {
|
||||||
|
if (!local.get_original().compare(str)) {
|
||||||
|
return local.get();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
void submenu::set_name(std::string str, bool translation, bool searchable) {
|
||||||
|
if (!str.empty() && str.length() > 0) {
|
||||||
|
m_name.set(str);
|
||||||
|
m_name.set_translate(true);
|
||||||
|
m_can_be_searched = searchable;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void submenu::load() {}
|
||||||
|
void submenu::update_once() {}
|
||||||
|
void submenu::update() {}
|
||||||
|
void submenu::feature_update() {}
|
||||||
|
}
|
99
GTAV/src/menu/base/submenu.h
Normal file
99
GTAV/src/menu/base/submenu.h
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "options/option.h"
|
||||||
|
#include "options/button.h"
|
||||||
|
#include "options/toggle.h"
|
||||||
|
#include "options/scroll.h"
|
||||||
|
#include "options/number.h"
|
||||||
|
#include "options/break.h"
|
||||||
|
#include "options/radio.h"
|
||||||
|
#include "options/color_option.h"
|
||||||
|
#include "util/hotkeys.h"
|
||||||
|
#include "rage/invoker/natives.h"
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace menu::submenu {
|
||||||
|
class submenu {
|
||||||
|
public:
|
||||||
|
void update_menu();
|
||||||
|
void clear_options(int offset);
|
||||||
|
|
||||||
|
virtual void load();
|
||||||
|
virtual void update_once();
|
||||||
|
virtual void update();
|
||||||
|
virtual void feature_update();
|
||||||
|
|
||||||
|
void set_parent(submenu* submenu) { m_parent = submenu; }
|
||||||
|
void set_can_be_searched(bool searchable) { m_can_be_searched = searchable; }
|
||||||
|
void set_default_instructionals(bool def) { m_default_instructionals = def; }
|
||||||
|
void set_old_current_option(int val) { m_old_current_option = val; }
|
||||||
|
void set_old_scroll_offset(int val) { m_old_scroll_offset = val; }
|
||||||
|
void set_name(std::string str, bool translation = true, bool searchable = true);
|
||||||
|
|
||||||
|
submenu* get_parent() { return m_parent; }
|
||||||
|
bool can_be_searched() { return m_can_be_searched; }
|
||||||
|
bool get_default_instructionals() { return m_default_instructionals; }
|
||||||
|
int get_old_current_option() { return m_old_current_option; }
|
||||||
|
int get_old_scroll_offset() { return m_old_scroll_offset; }
|
||||||
|
std::vector<std::shared_ptr<base_option>>& get_options() { return m_options; }
|
||||||
|
std::vector<localization>& get_strings() { return m_strings; }
|
||||||
|
std::stack<std::string>& get_submenu_name_stack() { return m_submenu_name_stack; }
|
||||||
|
std::string get_string(std::string str);
|
||||||
|
|
||||||
|
void add_string(std::string str) { m_strings.push_back(localization(str, true)); }
|
||||||
|
localization& get_name() { return m_name; }
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
std::shared_ptr<T> add_option(T& option) {
|
||||||
|
std::shared_ptr<T> ptr = std::make_shared<T>(option);
|
||||||
|
m_options.push_back(ptr);
|
||||||
|
|
||||||
|
ptr.get()->set_submenu_name_stack(&m_submenu_name_stack);
|
||||||
|
|
||||||
|
if (ptr.get()->has_hotkey()) {
|
||||||
|
hotkey::read_hotkey(ptr.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
std::shared_ptr<T>& add_option(std::shared_ptr<T>& option) {
|
||||||
|
m_options.push_back(option);
|
||||||
|
|
||||||
|
option.get()->set_submenu_name_stack(&m_submenu_name_stack);
|
||||||
|
|
||||||
|
if (option.get()->has_hotkey()) {
|
||||||
|
hotkey::read_hotkey(option.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
return option;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
void set_parent() {
|
||||||
|
m_parent = T::get();
|
||||||
|
m_submenu_name_stack = {};
|
||||||
|
|
||||||
|
m_submenu_name_stack.push(m_name.get_original());
|
||||||
|
|
||||||
|
submenu* submenu = m_parent;
|
||||||
|
while (submenu) {
|
||||||
|
m_submenu_name_stack.push(submenu->m_name.get_original());
|
||||||
|
submenu = submenu->get_parent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
localization m_name;
|
||||||
|
submenu* m_parent = nullptr;
|
||||||
|
|
||||||
|
bool m_can_be_searched = true;
|
||||||
|
bool m_default_instructionals = true;
|
||||||
|
int m_old_current_option = 0;
|
||||||
|
int m_old_scroll_offset = 0;
|
||||||
|
|
||||||
|
std::vector<std::shared_ptr<base_option>> m_options = {};
|
||||||
|
std::vector<localization> m_strings = {};
|
||||||
|
std::stack<std::string> m_submenu_name_stack = {};
|
||||||
|
};
|
||||||
|
}
|
89
GTAV/src/menu/base/submenu_handler.cpp
Normal file
89
GTAV/src/menu/base/submenu_handler.cpp
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
#include "submenu_handler.h"
|
||||||
|
#include "base.h"
|
||||||
|
#include "rage/invoker/natives.h"
|
||||||
|
#include "global/ui_vars.h"
|
||||||
|
#include "submenus/main.h"
|
||||||
|
|
||||||
|
namespace menu::submenu::handler {
|
||||||
|
void submenu_handler::load() {
|
||||||
|
m_main = m_current = main_menu::get();
|
||||||
|
}
|
||||||
|
|
||||||
|
void submenu_handler::update() {
|
||||||
|
if (m_current) {
|
||||||
|
m_current->update_menu();
|
||||||
|
|
||||||
|
if (m_next) {
|
||||||
|
menu::base::set_current_option(m_next_current_option);
|
||||||
|
menu::base::set_scroll_offset(m_next_scroll_offset);
|
||||||
|
|
||||||
|
m_current = m_next;
|
||||||
|
m_next = nullptr;
|
||||||
|
m_current->update_once();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void submenu_handler::feature_update() {
|
||||||
|
if (native::network_is_player_connected(native::player_id())) {
|
||||||
|
for (submenu* submenu : m_submenus) {
|
||||||
|
submenu->feature_update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void submenu_handler::cleanup() {
|
||||||
|
for (submenu* submenu : m_submenus) {
|
||||||
|
delete submenu;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void submenu_handler::add_submenu(submenu* submenu) {
|
||||||
|
m_submenus.push_back(submenu);
|
||||||
|
}
|
||||||
|
|
||||||
|
void submenu_handler::set_submenu(submenu* submenu) {
|
||||||
|
menu::renderer::set_smooth_scroll(global::ui::g_position.y);
|
||||||
|
|
||||||
|
m_current->set_old_current_option(menu::base::get_current_option());
|
||||||
|
m_current->set_old_scroll_offset(menu::base::get_scroll_offset());
|
||||||
|
|
||||||
|
m_next_current_option = 0;
|
||||||
|
m_next_scroll_offset = 0;
|
||||||
|
|
||||||
|
m_previous = m_current;
|
||||||
|
m_next = submenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
void submenu_handler::set_submenu_previous(bool reset) {
|
||||||
|
m_previous = m_current;
|
||||||
|
if (m_current->get_parent() == nullptr) {
|
||||||
|
m_next = m_main;
|
||||||
|
m_next_current_option = 0;
|
||||||
|
m_next_scroll_offset = 0;
|
||||||
|
menu::base::set_open(false);
|
||||||
|
} else {
|
||||||
|
m_next = m_current->get_parent();
|
||||||
|
|
||||||
|
if (reset) {
|
||||||
|
m_next_current_option = 0;
|
||||||
|
m_next_scroll_offset = 0;
|
||||||
|
menu::renderer::set_smooth_scroll(global::ui::g_position.y);
|
||||||
|
} else {
|
||||||
|
m_next_current_option = m_next->get_old_current_option();
|
||||||
|
m_next_scroll_offset = m_next->get_old_scroll_offset();
|
||||||
|
|
||||||
|
int max_options = base::get_max_options();
|
||||||
|
int scroller_position = math::clamp(m_next_current_option - m_next_scroll_offset > max_options ? max_options : m_next_current_option - m_next_scroll_offset, 0, max_options);
|
||||||
|
menu::renderer::set_smooth_scroll(global::ui::g_position.y + (scroller_position * global::ui::g_option_scale));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
global::ui::g_rendering_tooltip.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu_handler* get_submenu_handler() {
|
||||||
|
static submenu_handler instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
|
}
|
116
GTAV/src/menu/base/submenu_handler.h
Normal file
116
GTAV/src/menu/base/submenu_handler.h
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "submenu.h"
|
||||||
|
#include "menu/base/options/submenu_option.h"
|
||||||
|
#include "menu/base/util/player_manager.h"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace menu::submenu::handler {
|
||||||
|
class submenu_handler {
|
||||||
|
public:
|
||||||
|
void load();
|
||||||
|
void update();
|
||||||
|
void feature_update();
|
||||||
|
void cleanup();
|
||||||
|
|
||||||
|
void add_submenu(submenu* submenu);
|
||||||
|
void set_submenu(submenu* submenu);
|
||||||
|
void set_submenu_previous(bool reset = false);
|
||||||
|
|
||||||
|
int get_total_options() { return m_total_options; }
|
||||||
|
int get_current_options_without_breaks() { return m_current_options_without_breaks; }
|
||||||
|
int get_total_options_without_breaks() { return m_total_options_without_breaks; }
|
||||||
|
|
||||||
|
void set_total_options(int val) { m_total_options = val; }
|
||||||
|
void set_current_options_without_breaks(int val) { m_current_options_without_breaks = val; }
|
||||||
|
void set_total_options_without_breaks(int val) { m_total_options_without_breaks = val; }
|
||||||
|
|
||||||
|
submenu* get_current() { return m_current; }
|
||||||
|
submenu* get_previous() { return m_previous; }
|
||||||
|
|
||||||
|
void set_previous(submenu* submenu) { m_previous = submenu; }
|
||||||
|
std::vector<submenu*>& get_submenus() { return m_submenus; }
|
||||||
|
private:
|
||||||
|
submenu* m_main = nullptr;
|
||||||
|
submenu* m_current = nullptr;
|
||||||
|
submenu* m_next = nullptr;
|
||||||
|
submenu* m_previous = nullptr;
|
||||||
|
std::vector<submenu*> m_submenus = {};
|
||||||
|
|
||||||
|
int m_total_options = 0;
|
||||||
|
int m_current_options_without_breaks = 0;
|
||||||
|
int m_total_options_without_breaks = 0;
|
||||||
|
int m_next_current_option = 0;
|
||||||
|
int m_next_scroll_offset = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
submenu_handler* get_submenu_handler();
|
||||||
|
|
||||||
|
inline void load() {
|
||||||
|
get_submenu_handler()->load();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void update() {
|
||||||
|
get_submenu_handler()->update();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void feature_update() {
|
||||||
|
get_submenu_handler()->feature_update();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void cleanup() {
|
||||||
|
get_submenu_handler()->cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void add_submenu(submenu* submenu) {
|
||||||
|
get_submenu_handler()->add_submenu(submenu);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void set_submenu(submenu* submenu) {
|
||||||
|
get_submenu_handler()->set_submenu(submenu);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void set_submenu_previous(bool reset = false) {
|
||||||
|
get_submenu_handler()->set_submenu_previous(reset);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline int get_total_options() {
|
||||||
|
return get_submenu_handler()->get_total_options();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline int get_current_options_without_breaks() {
|
||||||
|
return get_submenu_handler()->get_current_options_without_breaks();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline int get_total_options_without_breaks() {
|
||||||
|
return get_submenu_handler()->get_total_options_without_breaks();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void set_total_options(int val) {
|
||||||
|
get_submenu_handler()->set_total_options(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void set_current_options_without_breaks(int val) {
|
||||||
|
get_submenu_handler()->set_current_options_without_breaks(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void set_total_options_without_breaks(int val) {
|
||||||
|
get_submenu_handler()->set_total_options_without_breaks(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline submenu* get_current() {
|
||||||
|
return get_submenu_handler()->get_current();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline submenu* get_previous() {
|
||||||
|
return get_submenu_handler()->get_previous();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void set_previous(submenu* submenu) {
|
||||||
|
get_submenu_handler()->set_previous(submenu);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline std::vector<submenu*>& get_submenus() {
|
||||||
|
return get_submenu_handler()->get_submenus();
|
||||||
|
}
|
||||||
|
}
|
289
GTAV/src/menu/base/submenus/main.cpp
Normal file
289
GTAV/src/menu/base/submenus/main.cpp
Normal file
@ -0,0 +1,289 @@
|
|||||||
|
#include "main.h"
|
||||||
|
#include "util/fiber.h"
|
||||||
|
#include "util/fiber_pool.h"
|
||||||
|
#include "global/ui_vars.h"
|
||||||
|
#include "rage/invoker/natives.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "menu/base/util/instructionals.h"
|
||||||
|
#include "menu/base/util/notify.h"
|
||||||
|
#include "menu/base/util/panels.h"
|
||||||
|
#include "main/player.h"
|
||||||
|
#include "main/weapon/weapon_mods.h"
|
||||||
|
#include "main/misc.h"
|
||||||
|
#include "main/world.h"
|
||||||
|
#include "main/settings.h"
|
||||||
|
#include "main/teleport.h"
|
||||||
|
#include "main/spawner.h"
|
||||||
|
#include "main/vehicle.h"
|
||||||
|
#include "main/protections.h"
|
||||||
|
#include "main/network.h"
|
||||||
|
#include "main/helper/helper_color.h"
|
||||||
|
#include "main/helper/helper_esp.h"
|
||||||
|
#include "main/helper/helper_rainbow.h"
|
||||||
|
#include "rage/engine.h"
|
||||||
|
#include "util/caller.h"
|
||||||
|
#include "util/log.h"
|
||||||
|
#include "util/dirs.h"
|
||||||
|
#include "util/util.h"
|
||||||
|
#include "util/memory/memory.h"
|
||||||
|
#include "menu/base/util/global.h"
|
||||||
|
#include "menu/base/util/control.h"
|
||||||
|
#include "rage/types/global_types.h"
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
using namespace main::vars;
|
||||||
|
|
||||||
|
namespace main::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
void scaleform_fade_out_time(const char* sParam0, float fParam1) {
|
||||||
|
native::push_scaleform_movie_function(m_vars.m_scaleform_handle, "HIDE");
|
||||||
|
native::begin_text_command_scaleform_string("STRING");
|
||||||
|
native::add_text_component_substring_player_name(sParam0);
|
||||||
|
native::end_text_command_scaleform_string();
|
||||||
|
native::push_scaleform_movie_function_parameter_float(fParam1);
|
||||||
|
native::pop_scaleform_movie_function_void();
|
||||||
|
}
|
||||||
|
|
||||||
|
void scaleform_fade_in_time(const char* sParam0, float fParam1) {
|
||||||
|
native::push_scaleform_movie_function(m_vars.m_scaleform_handle, "SHOW_SINGLE_LINE");
|
||||||
|
native::begin_text_command_scaleform_string("STRING");
|
||||||
|
native::add_text_component_substring_player_name(sParam0);
|
||||||
|
native::end_text_command_scaleform_string();
|
||||||
|
native::push_scaleform_movie_function_parameter_float(fParam1);
|
||||||
|
native::pop_scaleform_movie_function_void();
|
||||||
|
}
|
||||||
|
|
||||||
|
void scaleform_render_line(const char* sParam0, const char* sParam1, const char* sParam2, const char* sParam3, bool bParam4) {
|
||||||
|
native::push_scaleform_movie_function(m_vars.m_scaleform_handle, "ADD_TEXT_TO_SINGLE_LINE");
|
||||||
|
native::begin_text_command_scaleform_string("STRING");
|
||||||
|
native::add_text_component_substring_player_name(sParam0);
|
||||||
|
native::end_text_command_scaleform_string();
|
||||||
|
native::begin_text_command_scaleform_string("STRING");
|
||||||
|
native::add_text_component_substring_player_name(sParam1);
|
||||||
|
native::end_text_command_scaleform_string();
|
||||||
|
native::begin_text_command_scaleform_string("STRING");
|
||||||
|
native::add_text_component_substring_player_name(sParam2);
|
||||||
|
native::end_text_command_scaleform_string();
|
||||||
|
native::begin_text_command_scaleform_string("STRING");
|
||||||
|
native::add_text_component_substring_player_name(sParam3);
|
||||||
|
native::end_text_command_scaleform_string();
|
||||||
|
native::push_scaleform_movie_function_parameter_bool(bParam4);
|
||||||
|
native::pop_scaleform_movie_function_void();
|
||||||
|
}
|
||||||
|
|
||||||
|
void scaleform_setup_single_line(const char* sParam0, float fParam1, float fParam2, float fParam3, float fParam4, const char* sParam5) {
|
||||||
|
native::push_scaleform_movie_function(m_vars.m_scaleform_handle, "SETUP_SINGLE_LINE");
|
||||||
|
native::begin_text_command_scaleform_string("STRING");
|
||||||
|
native::add_text_component_substring_player_name(sParam0);
|
||||||
|
native::end_text_command_scaleform_string();
|
||||||
|
native::push_scaleform_movie_function_parameter_float(fParam1);
|
||||||
|
native::push_scaleform_movie_function_parameter_float(fParam2);
|
||||||
|
native::push_scaleform_movie_function_parameter_float(fParam3);
|
||||||
|
native::push_scaleform_movie_function_parameter_float(fParam4);
|
||||||
|
native::begin_text_command_scaleform_string("STRING");
|
||||||
|
native::add_text_component_substring_player_name(sParam5);
|
||||||
|
native::end_text_command_scaleform_string();
|
||||||
|
native::pop_scaleform_movie_function_void();
|
||||||
|
}
|
||||||
|
|
||||||
|
void scaleform_render() {
|
||||||
|
if (!m_vars.m_has_initialized) {
|
||||||
|
native::transition_to_blurred(1000);
|
||||||
|
m_vars.m_scaleform_handle = native::request_scaleform_movie("OPENING_CREDITS");
|
||||||
|
m_vars.m_has_initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (native::has_scaleform_movie_loaded(m_vars.m_scaleform_handle)) {
|
||||||
|
static const DWORD TIMER = GetTickCount();
|
||||||
|
switch (m_vars.m_current_index) {
|
||||||
|
case -1:
|
||||||
|
if (GetTickCount() - TIMER > 750) {
|
||||||
|
m_vars.m_current_index++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
scaleform_setup_single_line("presents", 1.5f, 1.5f, 20.f, 20.f, "left");
|
||||||
|
scaleform_render_line("presents", "OZARK CHEATS", "$font2", "HUD_COLOUR_WHITE", 1);
|
||||||
|
scaleform_render_line("presents", "presents", "$font5", "HUD_COLOUR_FREEMODE", 1);
|
||||||
|
scaleform_fade_in_time("presents", 0.166f);
|
||||||
|
m_vars.m_cached_time = GetTickCount();
|
||||||
|
m_vars.m_current_index++;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (GetTickCount() - m_vars.m_cached_time > 3250) {
|
||||||
|
scaleform_fade_out_time("presents", 0.166f);
|
||||||
|
m_vars.m_current_index++;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (GetTickCount() - m_vars.m_cached_time > 5750) { // 70
|
||||||
|
scaleform_setup_single_line("presents", 1.5f, 1.5f, 0.f, 190.f, "left");
|
||||||
|
scaleform_render_line("presents", "a", "$font5", "HUD_COLOUR_MICHAEL", 1);
|
||||||
|
scaleform_render_line("presents", "NEW ERA", "$font2", "HUD_COLOUR_WHITE", 1);
|
||||||
|
scaleform_render_line("presents", "of modding", "$font5", "HUD_COLOUR_MICHAEL", 1);
|
||||||
|
scaleform_fade_in_time("presents", 0.166f);
|
||||||
|
m_vars.m_current_index++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
if (GetTickCount() - m_vars.m_cached_time > 5750 + 3250) {
|
||||||
|
scaleform_fade_out_time("presents", 0.166f);
|
||||||
|
m_vars.m_current_index++;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
if (GetTickCount() - m_vars.m_cached_time > 5750 + 3250 + 3250) {
|
||||||
|
native::set_scaleform_movie_as_no_longer_needed(&m_vars.m_scaleform_handle);
|
||||||
|
m_vars.m_scaleform_handle = -1;
|
||||||
|
m_vars.m_shown_welcome = true;
|
||||||
|
native::transition_from_blurred(1000);
|
||||||
|
|
||||||
|
util::fiber::pool::add([=] {
|
||||||
|
util::fiber::sleep(1500);
|
||||||
|
global::ui::g_stop_rendering = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_scaleform_handle != -1) {
|
||||||
|
native::draw_scaleform_movie_fullscreen(m_vars.m_scaleform_handle, 255, 255, 255, 255, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void log_player_globals(Player player, int base, int size) {
|
||||||
|
LOG("--- Global_%i[%i <%i>] -------------------------", base, player, size);
|
||||||
|
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
int _int = *menu::script_global(base).at(player, size).at(i).get<int>();
|
||||||
|
uint32_t _uint = *menu::script_global(base).at(player, size).at(i).get<uint32_t>();
|
||||||
|
float _float = *menu::script_global(base).at(player, size).at(i).get<float>();
|
||||||
|
|
||||||
|
LOG("Global_%i[%i <%i>].f_%i = %i (%u %.3f)", base, player, size, i, _int, _uint, _float);
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG("----------------------------------------------------------");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void main_menu::load() {
|
||||||
|
set_name("Ozark", false, false);
|
||||||
|
|
||||||
|
get_submenu_name_stack().push("Ozark");
|
||||||
|
set_default_instructionals(false);
|
||||||
|
|
||||||
|
m_vars.m_shown_welcome = util::config::read_bool(get_submenu_name_stack(), "Shown Welcome", false, { "Main" });
|
||||||
|
if (!m_vars.m_shown_welcome) {
|
||||||
|
global::ui::g_stop_rendering = true;
|
||||||
|
util::config::write_bool(get_submenu_name_stack(), "Shown Welcome", true, { "Main" });
|
||||||
|
}
|
||||||
|
|
||||||
|
menu::panels::load();
|
||||||
|
|
||||||
|
add_option(submenu_option("Player")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<player_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Network")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<network_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Protections")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<protection_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Teleport")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<teleport_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Weapon")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<weapon_mods_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Vehicle")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<vehicle_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Spawner")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<spawner_menu>()
|
||||||
|
.add_click([] { spawner::vars::m_vars.m_flag = spawner::vars::SPAWNER_SELF; }));
|
||||||
|
|
||||||
|
add_option(submenu_option("World")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<world_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Miscellaneous")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<misc_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Settings")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<settings_menu>());
|
||||||
|
|
||||||
|
helper_color_menu::get();
|
||||||
|
helper_esp_menu::get();
|
||||||
|
helper_rainbow_menu::get();
|
||||||
|
|
||||||
|
int language = native::get_current_language_id();
|
||||||
|
if (language == 9 || language == 12) {
|
||||||
|
global::vars::g_chinese = true;
|
||||||
|
|
||||||
|
global::ui::g_option_font = 0;
|
||||||
|
global::ui::g_header_font = 0;
|
||||||
|
global::ui::g_sub_header_font = 0;
|
||||||
|
global::ui::g_open_tooltip_font = 0;
|
||||||
|
global::ui::g_tooltip_font = 0;
|
||||||
|
global::ui::g_stacked_display_font = 0;
|
||||||
|
global::ui::g_notify_title_font = 0;
|
||||||
|
global::ui::g_notify_body_font = 0;
|
||||||
|
global::ui::g_panel_font = 0;
|
||||||
|
global::ui::g_option_height = 0.30f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void main_menu::update() {
|
||||||
|
instructionals::main_menu();
|
||||||
|
}
|
||||||
|
|
||||||
|
void main_menu::update_once() {}
|
||||||
|
|
||||||
|
void main_menu::feature_update() {
|
||||||
|
if (!m_vars.m_shown_welcome) {
|
||||||
|
scaleform_render();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (global::vars::g_network_base_config) {
|
||||||
|
rage::network::network_base_config* real_config = global::vars::g_network_base_config;
|
||||||
|
if (global::vars::g_steam) {
|
||||||
|
real_config = (rage::network::network_base_config*)((uint64_t)global::vars::g_network_base_config + 0x70);
|
||||||
|
}
|
||||||
|
|
||||||
|
real_config->set_network_session_was_invited(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
if (global::vars::g_arxan_called[i]) {
|
||||||
|
global::vars::g_arxan_called[i] = false;
|
||||||
|
LOG_DEV("[ARXAN] Called %i", i + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
menu::script_global(rage::global::_155_spawn_dlc_in_sp).as<bool>() = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
main_menu* g_instance;
|
||||||
|
main_menu* main_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new main_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
31
GTAV/src/menu/base/submenus/main.h
Normal file
31
GTAV/src/menu/base/submenus/main.h
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class main_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static main_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
main_menu()
|
||||||
|
: menu::submenu::submenu()
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace main::vars {
|
||||||
|
struct variables {
|
||||||
|
int m_scaleform_handle;
|
||||||
|
int m_current_index;
|
||||||
|
bool m_has_initialized;
|
||||||
|
bool m_shown_welcome;
|
||||||
|
uint32_t m_cached_time;
|
||||||
|
|
||||||
|
|
||||||
|
std::unordered_map<uint64_t, int> callers;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
@ -0,0 +1,95 @@
|
|||||||
|
#include "helper_color_preset.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../helper_color.h"
|
||||||
|
|
||||||
|
using namespace helper::color::preset::vars;
|
||||||
|
|
||||||
|
namespace helper::color::preset::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
scroll_struct<color_rgba> presets[] = {
|
||||||
|
{ localization("Ozark Blue", true), color_rgba(0x0095ffff) },
|
||||||
|
{ localization("Emerald", true), color_rgba(0, 155, 119, 200) },
|
||||||
|
{ localization("Tangerine Tango", true), color_rgba(221, 65, 36, 200) },
|
||||||
|
{ localization("Honeysucle", true), color_rgba(214, 80, 118, 200) },
|
||||||
|
{ localization("Turquoise", true), color_rgba(68, 184, 172, 200) },
|
||||||
|
{ localization("Mimosa", true), color_rgba(239, 192, 80, 200) },
|
||||||
|
{ localization("Blue Izis", true), color_rgba(91, 94, 166, 200) },
|
||||||
|
{ localization("Chili Pepper", true), color_rgba(155, 35, 53, 200) },
|
||||||
|
{ localization("Sand Dollar", true), color_rgba(223, 207, 190, 200) },
|
||||||
|
{ localization("Blue Turquoise", true), color_rgba(85, 180, 176, 200) },
|
||||||
|
{ localization("Tigerlily", true), color_rgba(225, 93, 68, 200) },
|
||||||
|
{ localization("Aqua Sky", true), color_rgba(127, 205, 205, 200) },
|
||||||
|
{ localization("True Red", true), color_rgba(188, 36, 60, 200) },
|
||||||
|
{ localization("Fuchsia Rose", true), color_rgba(195, 68, 122, 200) },
|
||||||
|
{ localization("Cerulean Blue", true), color_rgba(152, 180, 212, 200) },
|
||||||
|
{ localization("Galaxy Blue", true), color_rgba(0x2A, 0x4B, 0x7C, 200) },
|
||||||
|
{ localization("Dark Cheddar", true), color_rgba(0xE0, 0x81, 0x19, 200) },
|
||||||
|
{ localization("Orange Tiger", true), color_rgba(0xF9, 0x67, 0x14, 200) },
|
||||||
|
{ localization("Turmeric", true), color_rgba(0xFE, 0x84, 0x0E, 200) },
|
||||||
|
{ localization("Pink Peacock", true), color_rgba(0xC6, 0x21, 0x68, 200) },
|
||||||
|
{ localization("Aspen Gold", true), color_rgba(0xFF, 0xD6, 0x62, 200) },
|
||||||
|
{ localization("Eclipse", true), color_rgba(0x34, 0x31, 0x48, 200) },
|
||||||
|
{ localization("Valiant Poppy", true), color_rgba(0xBD, 0x3D, 0x3A, 200) },
|
||||||
|
{ localization("Nebulas Blue", true), color_rgba(0x3F, 0x69, 0xAA, 200) },
|
||||||
|
{ localization("Ceylon Yellow", true), color_rgba(0xD5, 0xAE, 0x41, 200) },
|
||||||
|
{ localization("Russet Orange", true), color_rgba(0xE4, 0x7A, 0x2E, 200) },
|
||||||
|
{ localization("Quetzal Green", true), color_rgba(0x00, 0x6E, 0x6D, 200) },
|
||||||
|
{ localization("Cherry Tomato", true), color_rgba(0xE9, 0x4B, 0x3C, 200) },
|
||||||
|
{ localization("Meadowlark", true), color_rgba(0xEC, 0xDB, 0x54, 200) },
|
||||||
|
{ localization("Baby Blue", true), color_rgba(0x6F, 0x9F, 0xD8, 200) },
|
||||||
|
{ localization("Arcadia", true), color_rgba(0x00, 0xA5, 0x91, 200) },
|
||||||
|
{ localization("Ultra Violet", true), color_rgba(0x6B, 0x5B, 0x95, 200) },
|
||||||
|
{ localization("Lime Punch", true), color_rgba(0xBF, 0xD6, 0x41, 200) },
|
||||||
|
{ localization("Harbor Mist", true), color_rgba(0xB4, 0xB7, 0xBA, 200) },
|
||||||
|
{ localization("Grenadine", true), color_rgba(0xDC, 0x4C, 0x46, 200) },
|
||||||
|
{ localization("Navy Peony", true), color_rgba(0x22, 0x3A, 0x5E, 200) },
|
||||||
|
{ localization("Marina", true), color_rgba(0x4F, 0x84, 0xC4, 200) },
|
||||||
|
{ localization("Autumn Maple", true), color_rgba(0xD2, 0x69, 0x1E, 200) },
|
||||||
|
{ localization("Niagara", true), color_rgba(0x57, 0x8C, 0xA9, 200) },
|
||||||
|
{ localization("Primrose Yellow", true), color_rgba(0xF6, 0xD1, 0x55, 200) },
|
||||||
|
{ localization("Flame", true), color_rgba(0xF2, 0x55, 0x2C, 200) },
|
||||||
|
{ localization("Lapis Blue", true), color_rgba(0x00, 0x4B, 0x8D, 200) },
|
||||||
|
{ localization("Island Paradise", true), color_rgba(0x95, 0xDE, 0xE3, 200) },
|
||||||
|
{ localization("Pink Yarrow", true), color_rgba(0xCE, 0x31, 0x75, 200) },
|
||||||
|
{ localization("Riverside", true), color_rgba(0x4C, 0x6A, 0x92, 200) },
|
||||||
|
{ localization("Aurora Red", true), color_rgba(0xB9, 0x3A, 0x32, 200) },
|
||||||
|
{ localization("Serenity", true), color_rgba(0x91, 0xA8, 0xD0, 200) },
|
||||||
|
{ localization("Green Flash", true), color_rgba(0x79, 0xC7, 0x53, 200) },
|
||||||
|
{ localization("Buttercup", true), color_rgba(0xFA, 0xE0, 0x3C, 200) },
|
||||||
|
{ localization("Limpet Shell", true), color_rgba(0x98, 0xDD, 0xDE, 200) }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_color_preset_menu::load() {
|
||||||
|
set_name("Presets");
|
||||||
|
set_parent<helper_color_menu>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_color_preset_menu::update() {}
|
||||||
|
|
||||||
|
void helper_color_preset_menu::update_once() {
|
||||||
|
clear_options(0);
|
||||||
|
|
||||||
|
for (scroll_struct<color_rgba>& preset : presets) {
|
||||||
|
add_option(button_option(preset.m_name.get())
|
||||||
|
.add_click([=] {
|
||||||
|
*m_vars.m_color = preset.m_result;
|
||||||
|
helper::color::vars::m_vars.m_callback();
|
||||||
|
})
|
||||||
|
.add_hover([=] { menu::renderer::render_color_preview(preset.m_result); }));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_color_preset_menu::feature_update() {}
|
||||||
|
|
||||||
|
helper_color_preset_menu* g_instance;
|
||||||
|
helper_color_preset_menu* helper_color_preset_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new helper_color_preset_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class helper_color_preset_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static helper_color_preset_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
helper_color_preset_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace helper::color::preset::vars {
|
||||||
|
struct variables {
|
||||||
|
color_rgba* m_color;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
@ -0,0 +1,122 @@
|
|||||||
|
#include "helper_esp_settings.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../helper_esp.h"
|
||||||
|
#include "helper_esp_settings_edit.h"
|
||||||
|
|
||||||
|
using namespace helper::esp::settings::vars;
|
||||||
|
|
||||||
|
namespace helper::esp::settings::vars {
|
||||||
|
variables m_vars;
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_esp_settings_menu::load() {
|
||||||
|
set_name("Settings");
|
||||||
|
set_parent<helper_esp_menu>();
|
||||||
|
|
||||||
|
add_option(submenu_option("Name")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<helper_esp_settings_edit_menu>()
|
||||||
|
.add_click_this([] (submenu_option* option) {
|
||||||
|
helper_esp_settings_edit_menu::get()->set_name(option->get_name().get(), false, false);
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_color = &helper::esp::vars::m_vars.m_current->m_name_text_color;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow = &helper::esp::vars::m_vars.m_current->m_name_text_rainbow.m_rainbow;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow_toggle = &helper::esp::vars::m_vars.m_current->m_name_text_rainbow.m_rainbow_toggle;
|
||||||
|
}));
|
||||||
|
|
||||||
|
add_option(submenu_option("Name - Background")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<helper_esp_settings_edit_menu>()
|
||||||
|
.add_click_this([] (submenu_option* option) {
|
||||||
|
helper_esp_settings_edit_menu::get()->set_name(option->get_name().get(), false, false);
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_color = &helper::esp::vars::m_vars.m_current->m_name_bg_color;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow = &helper::esp::vars::m_vars.m_current->m_name_bg_rainbow.m_rainbow;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow_toggle = &helper::esp::vars::m_vars.m_current->m_name_bg_rainbow.m_rainbow_toggle;
|
||||||
|
}));
|
||||||
|
|
||||||
|
/*add_option(submenu_option("2D - Box")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<helper_esp_settings_edit_menu>()
|
||||||
|
.add_click_this([] (submenu_option* option) {
|
||||||
|
helper_esp_settings_edit_menu::get()->set_name(option->get_name().get(), false, false);
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_color = &helper::esp::vars::m_vars.m_current->m_2d_box_color;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow = &helper::esp::vars::m_vars.m_current->m_2d_box_rainbow.m_rainbow;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow_toggle = &helper::esp::vars::m_vars.m_current->m_2d_box_rainbow.m_rainbow_toggle;
|
||||||
|
}));
|
||||||
|
|
||||||
|
add_option(submenu_option("2D - Corners")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<helper_esp_settings_edit_menu>()
|
||||||
|
.add_click_this([] (submenu_option* option) {
|
||||||
|
helper_esp_settings_edit_menu::get()->set_name(option->get_name().get(), false, false);
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_color = &helper::esp::vars::m_vars.m_current->m_2d_corners_color;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow = &helper::esp::vars::m_vars.m_current->m_2d_corners_rainbow.m_rainbow;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow_toggle = &helper::esp::vars::m_vars.m_current->m_2d_corners_rainbow.m_rainbow_toggle;
|
||||||
|
}));*/
|
||||||
|
|
||||||
|
add_option(submenu_option("3D - Box")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<helper_esp_settings_edit_menu>()
|
||||||
|
.add_click_this([] (submenu_option* option) {
|
||||||
|
helper_esp_settings_edit_menu::get()->set_name(option->get_name().get(), false, false);
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_color = &helper::esp::vars::m_vars.m_current->m_3d_box_color;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow = &helper::esp::vars::m_vars.m_current->m_3d_box_rainbow.m_rainbow;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow_toggle = &helper::esp::vars::m_vars.m_current->m_3d_box_rainbow.m_rainbow_toggle;
|
||||||
|
}));
|
||||||
|
|
||||||
|
add_option(submenu_option("Skeleton - Bones")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<helper_esp_settings_edit_menu>()
|
||||||
|
.add_click_this([] (submenu_option* option) {
|
||||||
|
helper_esp_settings_edit_menu::get()->set_name(option->get_name().get(), false, false);
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_color = &helper::esp::vars::m_vars.m_current->m_skeleton_bones_color;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow = &helper::esp::vars::m_vars.m_current->m_skeleton_bones_rainbow.m_rainbow;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow_toggle = &helper::esp::vars::m_vars.m_current->m_skeleton_bones_rainbow.m_rainbow_toggle;
|
||||||
|
}).add_requirement([] { return helper::esp::vars::m_vars.m_current->m_ped; }));
|
||||||
|
|
||||||
|
add_option(submenu_option("Skeleton - Joints")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<helper_esp_settings_edit_menu>()
|
||||||
|
.add_click_this([] (submenu_option* option) {
|
||||||
|
helper_esp_settings_edit_menu::get()->set_name(option->get_name().get(), false, false);
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_color = &helper::esp::vars::m_vars.m_current->m_skeleton_joints_color;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow = &helper::esp::vars::m_vars.m_current->m_skeleton_joints_rainbow.m_rainbow;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow_toggle = &helper::esp::vars::m_vars.m_current->m_skeleton_joints_rainbow.m_rainbow_toggle;
|
||||||
|
}).add_requirement([] { return helper::esp::vars::m_vars.m_current->m_ped; }));
|
||||||
|
|
||||||
|
/*add_option(submenu_option("Weapon")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<helper_esp_settings_edit_menu>()
|
||||||
|
.add_click_this([] (submenu_option* option) {
|
||||||
|
helper_esp_settings_edit_menu::get()->set_name(option->get_name().get(), false, false);
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_color = &helper::esp::vars::m_vars.m_current->m_weapon_color;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow = &helper::esp::vars::m_vars.m_current->m_weapon_rainbow.m_rainbow;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow_toggle = &helper::esp::vars::m_vars.m_current->m_weapon_rainbow.m_rainbow_toggle;
|
||||||
|
}).add_requirement([] { return helper::esp::vars::m_vars.m_current->m_ped; }));*/
|
||||||
|
|
||||||
|
add_option(submenu_option("Snapline")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<helper_esp_settings_edit_menu>()
|
||||||
|
.add_click_this([] (submenu_option* option) {
|
||||||
|
helper_esp_settings_edit_menu::get()->set_name(option->get_name().get(), false, false);
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_color = &helper::esp::vars::m_vars.m_current->m_snapline_color;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow = &helper::esp::vars::m_vars.m_current->m_snapline_rainbow.m_rainbow;
|
||||||
|
helper::esp::settings::edit::vars::m_vars.m_rainbow_toggle = &helper::esp::vars::m_vars.m_current->m_snapline_rainbow.m_rainbow_toggle;
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_esp_settings_menu::update() {}
|
||||||
|
|
||||||
|
void helper_esp_settings_menu::update_once() {}
|
||||||
|
|
||||||
|
void helper_esp_settings_menu::feature_update() {}
|
||||||
|
|
||||||
|
helper_esp_settings_menu* g_instance;
|
||||||
|
helper_esp_settings_menu* helper_esp_settings_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new helper_esp_settings_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class helper_esp_settings_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static helper_esp_settings_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
helper_esp_settings_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace helper::esp::settings::vars {
|
||||||
|
struct variables {
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
@ -0,0 +1,72 @@
|
|||||||
|
#include "helper_esp_settings_edit.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "helper_esp_settings.h"
|
||||||
|
#include "../../helper/helper_color.h"
|
||||||
|
#include "menu/base/util/instructionals.h"
|
||||||
|
#include "../helper_rainbow.h"
|
||||||
|
|
||||||
|
using namespace helper::esp::settings::edit::vars;
|
||||||
|
|
||||||
|
namespace helper::esp::settings::edit::vars {
|
||||||
|
variables m_vars;
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_esp_settings_edit_menu::load() {
|
||||||
|
set_parent<helper_esp_settings_menu>();
|
||||||
|
set_default_instructionals(false);
|
||||||
|
|
||||||
|
add_string("Edit Color");
|
||||||
|
add_string("Toggle Rainbow");
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_esp_settings_edit_menu::update() {
|
||||||
|
if (menu::base::get_current_option() == 0) {
|
||||||
|
instructionals::standard(false, false, false);
|
||||||
|
} else {
|
||||||
|
instructionals::rainbow();
|
||||||
|
|
||||||
|
if (menu::input::is_just_pressed(false, ControlFrontendX)) {
|
||||||
|
helper::rainbow::vars::m_vars.m_rainbow = m_vars.m_rainbow;
|
||||||
|
helper_rainbow_menu::get()->set_parent<helper_esp_settings_edit_menu>();
|
||||||
|
menu::submenu::handler::set_submenu(helper_rainbow_menu::get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_esp_settings_edit_menu::update_once() {
|
||||||
|
clear_options(0);
|
||||||
|
|
||||||
|
add_option(submenu_option(get_string("Edit Color"))
|
||||||
|
.add_submenu<helper_color_menu>()
|
||||||
|
.add_click([=] {
|
||||||
|
helper_color_menu::get()->set_name(get_name().get(), false, false);
|
||||||
|
helper_color_menu::get()->set_parent<helper_esp_settings_edit_menu>();
|
||||||
|
helper::color::vars::m_vars.m_color = m_vars.m_color;
|
||||||
|
helper::color::vars::m_vars.m_callback = [] {};
|
||||||
|
})
|
||||||
|
.add_icon_override({ "randomha", "lol" }, { 0.2145f, 0.0055f }, { 0.011f, 0.02f }, m_vars.m_color));
|
||||||
|
|
||||||
|
add_option(toggle_option(get_string("Toggle Rainbow"))
|
||||||
|
.add_toggle(*m_vars.m_rainbow_toggle)
|
||||||
|
.add_click([] {
|
||||||
|
m_vars.m_rainbow->toggle(*m_vars.m_rainbow_toggle);
|
||||||
|
if (*m_vars.m_rainbow_toggle) {
|
||||||
|
m_vars.m_rainbow->add(m_vars.m_color);
|
||||||
|
} else {
|
||||||
|
m_vars.m_rainbow->remove(m_vars.m_color);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_esp_settings_edit_menu::feature_update() {}
|
||||||
|
|
||||||
|
helper_esp_settings_edit_menu* g_instance;
|
||||||
|
helper_esp_settings_edit_menu* helper_esp_settings_edit_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new helper_esp_settings_edit_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
#include "menu/base/util/rainbow.h"
|
||||||
|
|
||||||
|
class helper_esp_settings_edit_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static helper_esp_settings_edit_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
helper_esp_settings_edit_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace helper::esp::settings::edit::vars {
|
||||||
|
struct variables {
|
||||||
|
color_rgba* m_color;
|
||||||
|
bool* m_rainbow_toggle;
|
||||||
|
menu::rainbow* m_rainbow;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
143
GTAV/src/menu/base/submenus/main/helper/helper_color.cpp
Normal file
143
GTAV/src/menu/base/submenus/main/helper/helper_color.cpp
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
#include "helper_color.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../../main.h"
|
||||||
|
#include "../settings/color/color_sync.h"
|
||||||
|
#include "color/helper_color_preset.h"
|
||||||
|
|
||||||
|
using namespace helper::color::vars;
|
||||||
|
|
||||||
|
namespace helper::color::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
scroll_struct<int> type[] = {
|
||||||
|
{ localization("RGBA", true), 0 },
|
||||||
|
{ localization("HSVA", true), 0 },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_color_menu::load() {
|
||||||
|
set_name("Color", false, false);
|
||||||
|
set_parent<main_menu>();
|
||||||
|
|
||||||
|
// [s] Presets
|
||||||
|
// [s] Sync With...
|
||||||
|
// Open Color Picker
|
||||||
|
// ~ Custom Editor ~
|
||||||
|
// Type <RGBA, HSVA>
|
||||||
|
// ...
|
||||||
|
//
|
||||||
|
|
||||||
|
add_option(submenu_option("Presets")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<helper_color_preset_menu>()
|
||||||
|
.add_click([] { helper::color::preset::vars::m_vars.m_color = m_vars.m_color; }));
|
||||||
|
|
||||||
|
add_option(submenu_option("Sync With...")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<color_selected_sync_menu>()
|
||||||
|
.add_click([] { settings::color::sync::vars::m_vars.m_color = m_vars.m_color; }));
|
||||||
|
|
||||||
|
add_option(button_option("Open Color Picker")
|
||||||
|
.add_translate()
|
||||||
|
.add_click([this] {
|
||||||
|
menu::input::push([this] {
|
||||||
|
menu::input::color(m_vars.m_color);
|
||||||
|
m_vars.m_callback();
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
|
||||||
|
add_option(break_option("Custom Editor")
|
||||||
|
.add_translate());
|
||||||
|
|
||||||
|
add_option(scroll_option<int>(SCROLL, "Color Format")
|
||||||
|
.add_translate()
|
||||||
|
.add_scroll(m_vars.m_type, 0, NUMOF(type), type)
|
||||||
|
.add_click([this] { update_once(); })
|
||||||
|
.add_hover([] { menu::renderer::render_color_preview(*m_vars.m_color); }));
|
||||||
|
|
||||||
|
add_string("[R]ed");
|
||||||
|
add_string("[G]reen");
|
||||||
|
add_string("[B]lue");
|
||||||
|
add_string("[A]lpha");
|
||||||
|
add_string("[H]ue");
|
||||||
|
add_string("[S]aturation");
|
||||||
|
add_string("[V]alue");
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_color_menu::update() {}
|
||||||
|
|
||||||
|
void helper_color_menu::update_once() {
|
||||||
|
clear_options(5);
|
||||||
|
|
||||||
|
// RGBA
|
||||||
|
if (m_vars.m_type == 0) {
|
||||||
|
add_option(number_option<int>(SCROLL, get_string("[R]ed"))
|
||||||
|
.add_number(m_vars.m_color->r, "%i", 1).add_min(0).add_max(255).can_loop()
|
||||||
|
.add_hover([] { menu::renderer::render_color_preview(*m_vars.m_color); })
|
||||||
|
.add_click(m_vars.m_callback));
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, get_string("[G]reen"))
|
||||||
|
.add_number(m_vars.m_color->g, "%i", 1).add_min(0).add_max(255).can_loop()
|
||||||
|
.add_hover([] { menu::renderer::render_color_preview(*m_vars.m_color); })
|
||||||
|
.add_click(m_vars.m_callback));
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, get_string("[B]lue"))
|
||||||
|
.add_number(m_vars.m_color->b, "%i", 1).add_min(0).add_max(255).can_loop()
|
||||||
|
.add_hover([] { menu::renderer::render_color_preview(*m_vars.m_color); })
|
||||||
|
.add_click(m_vars.m_callback));
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, get_string("[A]lpha"))
|
||||||
|
.add_number(m_vars.m_color->a, "%i", 1).add_min(0).add_max(255).can_loop()
|
||||||
|
.add_hover([] { menu::renderer::render_color_preview(*m_vars.m_color); })
|
||||||
|
.add_click(m_vars.m_callback));
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_vars.m_hsv = menu::renderer::rgb_to_hsv(*m_vars.m_color);
|
||||||
|
|
||||||
|
m_vars.m_hsv.s *= 100.f;
|
||||||
|
m_vars.m_hsv.v *= 100.f;
|
||||||
|
|
||||||
|
add_option(number_option<float>(SCROLL, get_string("[H]ue"))
|
||||||
|
.add_number(m_vars.m_hsv.h, "%.2f", 0.01f).add_min(0.f).add_max(360.f).set_scroll_speed(0)
|
||||||
|
.add_click([] {
|
||||||
|
*m_vars.m_color = menu::renderer::hsv_to_rgb(m_vars.m_hsv.h, m_vars.m_hsv.s / 100.f, m_vars.m_hsv.v / 100.f, m_vars.m_color->a);
|
||||||
|
m_vars.m_callback();
|
||||||
|
})
|
||||||
|
.add_hover([] { menu::renderer::render_color_preview(*m_vars.m_color); }));
|
||||||
|
|
||||||
|
add_option(number_option<float>(SCROLL, get_string("[S]aturation"))
|
||||||
|
.add_number(m_vars.m_hsv.s, "%.2f", 0.01f).add_min(0.f).add_max(100.f).set_scroll_speed(0)
|
||||||
|
.add_click([] {
|
||||||
|
*m_vars.m_color = menu::renderer::hsv_to_rgb(m_vars.m_hsv.h, m_vars.m_hsv.s / 100.f, m_vars.m_hsv.v / 100.f, m_vars.m_color->a);
|
||||||
|
m_vars.m_callback();
|
||||||
|
})
|
||||||
|
.add_hover([] { menu::renderer::render_color_preview(*m_vars.m_color); }));
|
||||||
|
|
||||||
|
add_option(number_option<float>(SCROLL, get_string("[V]alue"))
|
||||||
|
.add_number(m_vars.m_hsv.v, "%.2f", 0.01f).add_min(0.f).add_max(100.f).set_scroll_speed(0)
|
||||||
|
.add_click([] {
|
||||||
|
*m_vars.m_color = menu::renderer::hsv_to_rgb(m_vars.m_hsv.h, m_vars.m_hsv.s / 100.f, m_vars.m_hsv.v / 100.f, m_vars.m_color->a);
|
||||||
|
m_vars.m_callback();
|
||||||
|
})
|
||||||
|
.add_hover([] { menu::renderer::render_color_preview(*m_vars.m_color); }));
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, get_string("[A]lpha"))
|
||||||
|
.add_number(m_vars.m_color->a, "%i", 1).add_min(0).add_max(255).can_loop()
|
||||||
|
.add_hover([] { menu::renderer::render_color_preview(*m_vars.m_color); })
|
||||||
|
.add_click(m_vars.m_callback));
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_color_menu::feature_update() {}
|
||||||
|
|
||||||
|
helper_color_menu* g_instance;
|
||||||
|
helper_color_menu* helper_color_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new helper_color_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
28
GTAV/src/menu/base/submenus/main/helper/helper_color.h
Normal file
28
GTAV/src/menu/base/submenus/main/helper/helper_color.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
|
class helper_color_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static helper_color_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
helper_color_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace helper::color::vars {
|
||||||
|
struct variables {
|
||||||
|
int m_type;
|
||||||
|
color_rgba* m_color;
|
||||||
|
color_hsv m_hsv;
|
||||||
|
|
||||||
|
std::function<void()> m_callback = []() {};
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
297
GTAV/src/menu/base/submenus/main/helper/helper_esp.cpp
Normal file
297
GTAV/src/menu/base/submenus/main/helper/helper_esp.cpp
Normal file
@ -0,0 +1,297 @@
|
|||||||
|
#include "helper_esp.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "esp/helper_esp_settings.h"
|
||||||
|
#include "util/caller.h"
|
||||||
|
#include "rage/engine.h"
|
||||||
|
|
||||||
|
using namespace helper::esp::vars;
|
||||||
|
|
||||||
|
namespace helper::esp::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
scroll_struct<int> name_types[] = {
|
||||||
|
{ localization("Without Distance", true), 0 },
|
||||||
|
{ localization("With Distance", true), 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
void name_esp(esp_context context, Entity entity, std::string name_override) {
|
||||||
|
math::vector3<float> coords = native::get_entity_coords(entity, false);
|
||||||
|
if (!coords.is_null()) {
|
||||||
|
math::vector2<float> screen_coords;
|
||||||
|
if (native::get_screen_coord_from_world_coord(coords.x, coords.y, coords.z, &screen_coords.x, &screen_coords.y)) {
|
||||||
|
native::set_draw_origin(coords.x, coords.y, coords.z, false);
|
||||||
|
|
||||||
|
if (*(uint32_t*)(global::vars::g_draw_origin_index) != 0xFFFFFFFF) {
|
||||||
|
screen_coords = { 0.f, 0.f };
|
||||||
|
}
|
||||||
|
|
||||||
|
float x_offset = 0.002f;
|
||||||
|
float text_height = 0.2f;
|
||||||
|
float height = (text_height / 10.f);
|
||||||
|
|
||||||
|
std::string text = "";
|
||||||
|
|
||||||
|
if (name_override.empty()) {
|
||||||
|
text = util::va::va("%X", native::get_entity_model(entity));
|
||||||
|
} else {
|
||||||
|
text = name_override;
|
||||||
|
}
|
||||||
|
|
||||||
|
float width = menu::renderer::calculate_string_width(text, 0, text_height) + (x_offset * 2.f);
|
||||||
|
menu::renderer::draw_rect({ screen_coords.x - (width * 0.5f), screen_coords.y }, { width, height }, context.m_name_bg_color);
|
||||||
|
menu::renderer::draw_text(text, { screen_coords.x, screen_coords.y + 0.002f }, text_height, 0, context.m_name_text_color, JUSTIFY_CENTER);
|
||||||
|
|
||||||
|
// distance
|
||||||
|
if (context.m_name_type == 1) {
|
||||||
|
text = util::va::va("%.0fm", coords.get_distance(menu::player::get_local_player().m_coords));
|
||||||
|
|
||||||
|
width = menu::renderer::calculate_string_width(text, 0, text_height) + (x_offset * 2.f);
|
||||||
|
float new_y = screen_coords.y + height;
|
||||||
|
menu::renderer::draw_rect({ screen_coords.x - (width * 0.5f), new_y }, { width, height }, context.m_name_bg_color);
|
||||||
|
menu::renderer::draw_text(text, { screen_coords.x, new_y + 0.002f }, text_height, 0, context.m_name_text_color, JUSTIFY_CENTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
native::clear_draw_origin();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void snapline_esp(esp_context context, Entity entity) {
|
||||||
|
math::vector3<float> coords = native::get_entity_coords(entity, false);
|
||||||
|
if (!coords.is_null()) {
|
||||||
|
menu::renderer::draw_line(menu::player::get_local_player().m_coords, coords, context.m_snapline_color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _2d_esp(esp_context context, Entity entity, int type) {
|
||||||
|
// 0 = box, 1 = corners
|
||||||
|
}
|
||||||
|
|
||||||
|
void _3d_esp(esp_context context, Entity entity, int type) {
|
||||||
|
// 0 = box, 1= axis
|
||||||
|
math::vector3<float> coords = native::get_entity_coords(entity, false);
|
||||||
|
if (!coords.is_null()) {
|
||||||
|
math::vector3<float> min_dimensions;
|
||||||
|
math::vector3<float> max_dimensions;
|
||||||
|
native::get_model_dimensions(native::get_entity_model(entity), &min_dimensions, &max_dimensions);
|
||||||
|
|
||||||
|
math::vector3<float> diameter = { max_dimensions.x - min_dimensions.x, max_dimensions.y - min_dimensions.y, max_dimensions.z - min_dimensions.z };
|
||||||
|
math::vector3<float> radius = { diameter.x / 2.f, diameter.y / 2.f, diameter.z / 2.f };
|
||||||
|
|
||||||
|
if (type == 0) {
|
||||||
|
math::vector3<float> FACE_UL = native::get_offset_from_entity_in_world_coords(entity, radius.x * -1, radius.y, radius.z);
|
||||||
|
math::vector3<float> FACE_UR = native::get_offset_from_entity_in_world_coords(entity, radius.x, radius.y, radius.z);
|
||||||
|
math::vector3<float> FACE_BL = native::get_offset_from_entity_in_world_coords(entity, radius.x * -1, radius.y, radius.z * -1);
|
||||||
|
math::vector3<float> FACE_BR = native::get_offset_from_entity_in_world_coords(entity, radius.x, radius.y, radius.z * -1);
|
||||||
|
|
||||||
|
math::vector3<float> BACK_UL = native::get_offset_from_entity_in_world_coords(entity, radius.x * -1, radius.y * -1, radius.z);
|
||||||
|
math::vector3<float> BACK_UR = native::get_offset_from_entity_in_world_coords(entity, radius.x, radius.y * -1, radius.z);
|
||||||
|
math::vector3<float> BACK_BL = native::get_offset_from_entity_in_world_coords(entity, radius.x * -1, radius.y * -1, radius.z * -1);
|
||||||
|
math::vector3<float> BACK_BR = native::get_offset_from_entity_in_world_coords(entity, radius.x, radius.y * -1, radius.z * -1);
|
||||||
|
|
||||||
|
// Poles
|
||||||
|
menu::renderer::draw_line(FACE_BL, FACE_UL, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(FACE_BR, FACE_UR, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(BACK_BL, BACK_UL, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(BACK_BR, BACK_UR, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(FACE_UL, FACE_UR, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(FACE_BL, FACE_BR, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(BACK_UL, BACK_UR, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(BACK_BL, BACK_BR, context.m_3d_box_color);
|
||||||
|
|
||||||
|
// Bridges
|
||||||
|
menu::renderer::draw_line(FACE_UL, BACK_UL, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(FACE_UR, BACK_UR, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(FACE_BL, BACK_BL, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(FACE_BR, BACK_BR, context.m_3d_box_color);
|
||||||
|
|
||||||
|
// Inner Bridges
|
||||||
|
menu::renderer::draw_line(coords, FACE_UL, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(coords, FACE_UR, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(coords, FACE_BL, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(coords, FACE_BR, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(coords, BACK_UL, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(coords, BACK_UR, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(coords, BACK_BL, context.m_3d_box_color);
|
||||||
|
menu::renderer::draw_line(coords, BACK_BR, context.m_3d_box_color);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == 1) {
|
||||||
|
math::vector3<float> X_L = native::get_offset_from_entity_in_world_coords(entity, (diameter.x * 2.f) * -1, 0, 0);
|
||||||
|
math::vector3<float> X_R = native::get_offset_from_entity_in_world_coords(entity, (diameter.x * 2.f), 0, 0);
|
||||||
|
math::vector3<float> Y_F = native::get_offset_from_entity_in_world_coords(entity, 0, (diameter.y * 2.f), 0);
|
||||||
|
math::vector3<float> Y_B = native::get_offset_from_entity_in_world_coords(entity, 0, (diameter.y * 2.f) * -1, 0);
|
||||||
|
math::vector3<float> Z_U = native::get_offset_from_entity_in_world_coords(entity, 0, 0, 500);
|
||||||
|
math::vector3<float> Z_D = native::get_offset_from_entity_in_world_coords(entity, 0, 0, -500);
|
||||||
|
|
||||||
|
menu::renderer::draw_line(X_L, X_R, { 255, 0, 0, 255 });
|
||||||
|
menu::renderer::draw_line(Y_F, Y_B, { 0, 255, 0, 255 });
|
||||||
|
menu::renderer::draw_line(Z_U, Z_D, { 0, 0, 255, 255 });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_bone(Entity entity, int first, int second, color_rgba color) {
|
||||||
|
math::vector3<float> first_bone = native::get_ped_bone_coords(entity, first, 0.f, 0.f, 0.f);
|
||||||
|
math::vector3<float> second_bone = native::get_ped_bone_coords(entity, second, 0.f, 0.f, 0.f);
|
||||||
|
|
||||||
|
if (!first_bone.is_null() && !second_bone.is_null()) {
|
||||||
|
float fx, fy, sx, sy;
|
||||||
|
if (native::get_screen_coord_from_world_coord(first_bone.x, first_bone.y, first_bone.z, &fx, &fy)
|
||||||
|
&& native::get_screen_coord_from_world_coord(second_bone.x, second_bone.y, second_bone.z, &sx, &sy)) {
|
||||||
|
menu::renderer::draw_line_2d({ fx, fy, 0.f }, { sx, sy, 0.f }, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_joint(Entity entity, int bone, color_rgba color) {
|
||||||
|
math::vector3<float> coords = native::get_ped_bone_coords(entity, bone, 0.f, 0.f, 0.f);
|
||||||
|
if (!coords.is_null()) {
|
||||||
|
float x, y;
|
||||||
|
if (native::get_screen_coord_from_world_coord(coords.x, coords.y, coords.z, &x, &y)) {
|
||||||
|
native::draw_marker(28, coords.x, coords.y, coords.z, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.03f, 0.03f, 0.03f, color.r, color.g, color.b, color.a, 0, 0, 0, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_joint2(Entity entity, int first, int second, color_rgba color, bool skip_first = false, bool skip_second = false) {
|
||||||
|
math::vector3<float> first_bone = native::get_ped_bone_coords(entity, first, 0.f, 0.f, 0.f);
|
||||||
|
math::vector3<float> second_bone = native::get_ped_bone_coords(entity, second, 0.f, 0.f, 0.f);
|
||||||
|
|
||||||
|
if (!first_bone.is_null() && !second_bone.is_null()) {
|
||||||
|
float x, y;
|
||||||
|
if (native::get_screen_coord_from_world_coord(first_bone.x, first_bone.y, first_bone.z, &x, &y)) {
|
||||||
|
math::vector3<float> mid;
|
||||||
|
mid.x = (first_bone.x + second_bone.x) / 2.f;
|
||||||
|
mid.y = (first_bone.y + second_bone.y) / 2.f;
|
||||||
|
mid.z = (first_bone.z + second_bone.z) / 2.f;
|
||||||
|
|
||||||
|
if (!skip_first) native::draw_marker(28, first_bone.x, first_bone.y, first_bone.z, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.03f, 0.03f, 0.03f, color.r, color.g, color.b, color.a, 0, 0, 0, 0, 0, 0, 0);
|
||||||
|
if (!skip_second) native::draw_marker(28, second_bone.x, second_bone.y, second_bone.z, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.03f, 0.03f, 0.03f, color.r, color.g, color.b, color.a, 0, 0, 0, 0, 0, 0, 0);
|
||||||
|
native::draw_marker(28, mid.x, mid.y, mid.z, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.03f, 0.03f, 0.03f, color.r, color.g, color.b, color.a, 0, 0, 0, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void skeleton_esp(esp_context context, Entity entity, int type) {
|
||||||
|
// 0 = bones, 1 = joints
|
||||||
|
math::vector3<float> coords = native::get_entity_coords(entity, false);
|
||||||
|
if (!coords.is_null()) {
|
||||||
|
if (native::is_entity_a_ped(entity) || native::is_ped_a_player(entity)) {
|
||||||
|
if (type == 0) {
|
||||||
|
// bones
|
||||||
|
draw_bone(entity, SKEL_R_Foot, MH_R_Knee, context.m_skeleton_bones_color);
|
||||||
|
draw_bone(entity, SKEL_R_Toe0, SKEL_R_Foot, context.m_skeleton_bones_color);
|
||||||
|
draw_bone(entity, SKEL_L_Toe0, SKEL_L_Foot, context.m_skeleton_bones_color);
|
||||||
|
draw_bone(entity, SKEL_L_Foot, MH_L_Knee, context.m_skeleton_bones_color);
|
||||||
|
draw_bone(entity, MH_R_Knee, SKEL_Pelvis, context.m_skeleton_bones_color);
|
||||||
|
draw_bone(entity, MH_L_Knee, SKEL_Pelvis, context.m_skeleton_bones_color);
|
||||||
|
draw_bone(entity, SKEL_Pelvis, SKEL_Neck_1, context.m_skeleton_bones_color);
|
||||||
|
draw_bone(entity, SKEL_Neck_1, SKEL_R_UpperArm, context.m_skeleton_bones_color);
|
||||||
|
draw_bone(entity, SKEL_Neck_1, SKEL_L_UpperArm, context.m_skeleton_bones_color);
|
||||||
|
draw_bone(entity, SKEL_R_UpperArm, SKEL_R_Forearm, context.m_skeleton_bones_color);
|
||||||
|
draw_bone(entity, SKEL_L_UpperArm, SKEL_L_Forearm, context.m_skeleton_bones_color);
|
||||||
|
draw_bone(entity, SKEL_R_Forearm, SKEL_R_Hand, context.m_skeleton_bones_color);
|
||||||
|
draw_bone(entity, SKEL_L_Forearm, SKEL_L_Hand, context.m_skeleton_bones_color);
|
||||||
|
draw_bone(entity, SKEL_Neck_1, SKEL_Head, context.m_skeleton_bones_color);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == 1) {
|
||||||
|
// joints
|
||||||
|
draw_joint2(entity, SKEL_R_Foot, MH_R_Knee, context.m_skeleton_bones_color);
|
||||||
|
draw_joint2(entity, SKEL_R_Toe0, SKEL_R_Foot, context.m_skeleton_bones_color, false, true);
|
||||||
|
draw_joint2(entity, SKEL_L_Toe0, SKEL_L_Foot, context.m_skeleton_bones_color);
|
||||||
|
draw_joint2(entity, SKEL_L_Foot, MH_L_Knee, context.m_skeleton_bones_color, true, false);
|
||||||
|
draw_joint2(entity, MH_R_Knee, SKEL_Pelvis, context.m_skeleton_bones_color, true, false);
|
||||||
|
draw_joint2(entity, MH_L_Knee, SKEL_Pelvis, context.m_skeleton_bones_color, true, true);
|
||||||
|
draw_joint2(entity, SKEL_Pelvis, SKEL_Neck_1, context.m_skeleton_bones_color, true, false);
|
||||||
|
draw_joint2(entity, SKEL_Neck_1, SKEL_R_UpperArm, context.m_skeleton_bones_color, true, false);
|
||||||
|
draw_joint2(entity, SKEL_Neck_1, SKEL_L_UpperArm, context.m_skeleton_bones_color, true, false);
|
||||||
|
draw_joint2(entity, SKEL_R_UpperArm, SKEL_R_Forearm, context.m_skeleton_bones_color, true, false);
|
||||||
|
draw_joint2(entity, SKEL_L_UpperArm, SKEL_L_Forearm, context.m_skeleton_bones_color, true, false);
|
||||||
|
draw_joint2(entity, SKEL_R_Forearm, SKEL_R_Hand, context.m_skeleton_bones_color, true, false);
|
||||||
|
draw_joint2(entity, SKEL_L_Forearm, SKEL_L_Hand, context.m_skeleton_bones_color, true, false);
|
||||||
|
draw_joint2(entity, SKEL_Neck_1, SKEL_Head, context.m_skeleton_bones_color, true, false);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_esp_menu::load() {
|
||||||
|
set_name("ESP");
|
||||||
|
|
||||||
|
add_option(submenu_option("Settings")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<helper_esp_settings_menu>());
|
||||||
|
|
||||||
|
add_string("Toggle Name");
|
||||||
|
//add_string("Toggle 2D - Box");
|
||||||
|
//add_string("Toggle 2D - Corners");
|
||||||
|
add_string("Toggle 3D - Box");
|
||||||
|
add_string("Toggle 3D - Axis");
|
||||||
|
add_string("Toggle Skeleton - Bones");
|
||||||
|
add_string("Toggle Skeleton - Joints");
|
||||||
|
//add_string("Toggle Weapon");
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_esp_menu::update() {}
|
||||||
|
|
||||||
|
void helper_esp_menu::update_once() {
|
||||||
|
clear_options(1);
|
||||||
|
|
||||||
|
if (!m_vars.m_current) {
|
||||||
|
menu::submenu::handler::set_submenu_previous(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
add_option(scroll_option<int>(TOGGLE, get_string("Toggle Name"))
|
||||||
|
.add_toggle(m_vars.m_current->m_name)
|
||||||
|
.add_scroll(m_vars.m_current->m_name_type, 0, NUMOF(name_types), name_types));
|
||||||
|
|
||||||
|
add_option(toggle_option(get_string("Toggle Snapline"))
|
||||||
|
.add_toggle(m_vars.m_current->m_snapline));
|
||||||
|
|
||||||
|
/*add_option(toggle_option(get_string("Toggle 2D - Box"))
|
||||||
|
.add_toggle(m_vars.m_current->m_2d_box));
|
||||||
|
|
||||||
|
add_option(toggle_option(get_string("Toggle 2D - Corners"))
|
||||||
|
.add_toggle(m_vars.m_current->m_2d_corners));*/
|
||||||
|
|
||||||
|
add_option(toggle_option(get_string("Toggle 3D - Box"))
|
||||||
|
.add_toggle(m_vars.m_current->m_3d_box));
|
||||||
|
|
||||||
|
add_option(toggle_option(get_string("Toggle 3D - Axis"))
|
||||||
|
.add_toggle(m_vars.m_current->m_3d_axis));
|
||||||
|
|
||||||
|
add_option(toggle_option(get_string("Toggle Skeleton - Bones"))
|
||||||
|
.add_toggle(m_vars.m_current->m_skeleton_bones)
|
||||||
|
.add_requirement([] { return m_vars.m_current->m_ped; }));
|
||||||
|
|
||||||
|
add_option(toggle_option(get_string("Toggle Skeleton - Joints"))
|
||||||
|
.add_toggle(m_vars.m_current->m_skeleton_joints)
|
||||||
|
.add_requirement([] { return m_vars.m_current->m_ped; }));
|
||||||
|
|
||||||
|
/*add_option(toggle_option(get_string("Toggle Weapon"))
|
||||||
|
.add_toggle(m_vars.m_current->m_weapon)
|
||||||
|
.add_requirement([] { return m_vars.m_current->m_ped; }));*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_esp_menu::feature_update() {}
|
||||||
|
|
||||||
|
helper_esp_menu* g_instance;
|
||||||
|
helper_esp_menu* helper_esp_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new helper_esp_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
70
GTAV/src/menu/base/submenus/main/helper/helper_esp.h
Normal file
70
GTAV/src/menu/base/submenus/main/helper/helper_esp.h
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
#include "menu/base/util/rainbow.h"
|
||||||
|
|
||||||
|
class helper_esp_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static helper_esp_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
helper_esp_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace helper::esp::vars {
|
||||||
|
struct esp_rainbow {
|
||||||
|
menu::rainbow m_rainbow;
|
||||||
|
bool m_rainbow_toggle;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct esp_context {
|
||||||
|
bool m_ped; // enables skeleton>weapon
|
||||||
|
|
||||||
|
bool m_name;
|
||||||
|
bool m_snapline;
|
||||||
|
bool m_2d_box;
|
||||||
|
bool m_2d_corners;
|
||||||
|
bool m_3d_box;
|
||||||
|
bool m_3d_axis;
|
||||||
|
bool m_skeleton_bones;
|
||||||
|
bool m_skeleton_joints;
|
||||||
|
bool m_weapon;
|
||||||
|
|
||||||
|
int m_name_type;
|
||||||
|
|
||||||
|
color_rgba m_name_text_color = color_rgba(255, 255, 255, 255);
|
||||||
|
color_rgba m_name_bg_color = color_rgba(0, 0, 0, 180);
|
||||||
|
color_rgba m_snapline_color = color_rgba(255, 0, 255, 255);
|
||||||
|
color_rgba m_2d_box_color = color_rgba(255, 0, 255, 255);
|
||||||
|
color_rgba m_2d_corners_color = color_rgba(255, 0, 255, 255);
|
||||||
|
color_rgba m_3d_box_color = color_rgba(255, 0, 255, 255);
|
||||||
|
color_rgba m_skeleton_bones_color = color_rgba(255, 0, 255, 255);
|
||||||
|
color_rgba m_skeleton_joints_color = color_rgba(255, 0, 255, 255);
|
||||||
|
color_rgba m_weapon_color = color_rgba(255, 255, 255, 255);
|
||||||
|
|
||||||
|
esp_rainbow m_name_text_rainbow;
|
||||||
|
esp_rainbow m_name_bg_rainbow;
|
||||||
|
esp_rainbow m_snapline_rainbow;
|
||||||
|
esp_rainbow m_2d_box_rainbow;
|
||||||
|
esp_rainbow m_2d_corners_rainbow;
|
||||||
|
esp_rainbow m_3d_box_rainbow;
|
||||||
|
esp_rainbow m_skeleton_bones_rainbow;
|
||||||
|
esp_rainbow m_skeleton_joints_rainbow;
|
||||||
|
esp_rainbow m_weapon_rainbow;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct variables {
|
||||||
|
esp_context* m_current;
|
||||||
|
};
|
||||||
|
|
||||||
|
void name_esp(esp_context context, Entity entity, std::string name_override = "");
|
||||||
|
void snapline_esp(esp_context context, Entity entity);
|
||||||
|
void _2d_esp(esp_context context, Entity entity, int type);
|
||||||
|
void _3d_esp(esp_context context, Entity entity, int type);
|
||||||
|
void skeleton_esp(esp_context context, Entity entity, int type);
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
77
GTAV/src/menu/base/submenus/main/helper/helper_rainbow.cpp
Normal file
77
GTAV/src/menu/base/submenus/main/helper/helper_rainbow.cpp
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
#include "helper_rainbow.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "rainbow/helper_rainbow_load.h"
|
||||||
|
|
||||||
|
using namespace helper::rainbow::vars;
|
||||||
|
|
||||||
|
namespace helper::rainbow::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
void set_color() {
|
||||||
|
if (m_vars.m_rainbow) {
|
||||||
|
m_vars.m_rainbow->m_min = m_vars.m_local_rainbow.m_min;
|
||||||
|
m_vars.m_rainbow->m_max = m_vars.m_local_rainbow.m_max;
|
||||||
|
m_vars.m_rainbow->m_steps = m_vars.m_local_rainbow.m_steps;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_rainbow_menu::load() {
|
||||||
|
set_name("Rainbow Config");
|
||||||
|
|
||||||
|
add_option(submenu_option("Save and Load")
|
||||||
|
.add_translate()
|
||||||
|
.add_click([] { helper::rainbow::config::vars::m_vars.m_rainbow = m_vars.m_rainbow; })
|
||||||
|
.add_submenu<helper_rainbow_config_menu>());
|
||||||
|
|
||||||
|
m_vars.m_local_rainbow.add(&m_vars.m_local_color);
|
||||||
|
m_vars.m_local_rainbow.toggle(true);
|
||||||
|
|
||||||
|
helper_rainbow_config_menu::get();
|
||||||
|
|
||||||
|
add_string("Minimum");
|
||||||
|
add_string("Maximum");
|
||||||
|
add_string("Steps");
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_rainbow_menu::update() {
|
||||||
|
if (m_vars.m_rainbow) {
|
||||||
|
m_vars.m_local_color = m_vars.m_rainbow->m_color;
|
||||||
|
m_vars.m_local_rainbow.m_min = m_vars.m_rainbow->m_min;
|
||||||
|
m_vars.m_local_rainbow.m_max = m_vars.m_rainbow->m_max;
|
||||||
|
m_vars.m_local_rainbow.m_steps = m_vars.m_rainbow->m_steps;
|
||||||
|
m_vars.m_local_rainbow.run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_rainbow_menu::update_once() {
|
||||||
|
clear_options(1);
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, get_string("Minimum"))
|
||||||
|
.add_number(m_vars.m_local_rainbow.m_min, "%i", 1).add_min(0).add_max(255).can_loop()
|
||||||
|
.add_hover([] { menu::renderer::render_color_preview(m_vars.m_local_color.opacity(255)); })
|
||||||
|
.add_click(set_color));
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, get_string("Maximum"))
|
||||||
|
.add_number(m_vars.m_local_rainbow.m_max, "%i", 1).add_min(0).add_max(255).can_loop()
|
||||||
|
.add_hover([] { menu::renderer::render_color_preview(m_vars.m_local_color.opacity(255)); })
|
||||||
|
.add_click(set_color));
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, get_string("Steps"))
|
||||||
|
.add_number(m_vars.m_local_rainbow.m_steps, "%i", 1).add_min(1).add_max(255).can_loop()
|
||||||
|
.add_hover([] { menu::renderer::render_color_preview(m_vars.m_local_color.opacity(255)); })
|
||||||
|
.add_click(set_color));
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_rainbow_menu::feature_update() {}
|
||||||
|
|
||||||
|
helper_rainbow_menu* g_instance;
|
||||||
|
helper_rainbow_menu* helper_rainbow_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new helper_rainbow_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
26
GTAV/src/menu/base/submenus/main/helper/helper_rainbow.h
Normal file
26
GTAV/src/menu/base/submenus/main/helper/helper_rainbow.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
#include "menu/base/util/rainbow.h"
|
||||||
|
|
||||||
|
class helper_rainbow_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static helper_rainbow_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
helper_rainbow_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace helper::rainbow::vars {
|
||||||
|
struct variables {
|
||||||
|
color_rgba m_local_color;
|
||||||
|
menu::rainbow m_local_rainbow;
|
||||||
|
menu::rainbow* m_rainbow;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
@ -0,0 +1,115 @@
|
|||||||
|
#include "helper_rainbow_load.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../helper_rainbow.h"
|
||||||
|
#include "util/log.h"
|
||||||
|
#include "util/dirs.h"
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
using namespace helper::rainbow::config::vars;
|
||||||
|
|
||||||
|
namespace helper::rainbow::config::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
void save_config(std::string name) {
|
||||||
|
try {
|
||||||
|
nlohmann::json json;
|
||||||
|
|
||||||
|
std::ifstream input(util::dirs::get_path(rainbow));
|
||||||
|
if (input.good()) {
|
||||||
|
input >> json;
|
||||||
|
input.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ofstream output(util::dirs::get_path(rainbow));
|
||||||
|
if (output.good()) {
|
||||||
|
json[name] = nlohmann::json::array({ m_vars.m_rainbow->m_min, m_vars.m_rainbow->m_max, m_vars.m_rainbow->m_steps });
|
||||||
|
output << json.dump(4);
|
||||||
|
output.close();
|
||||||
|
}
|
||||||
|
} catch (std::exception& E) {
|
||||||
|
LOG_WARN("[Json] %s", E.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void load_config(std::string name) {
|
||||||
|
try {
|
||||||
|
std::ifstream input(util::dirs::get_path(rainbow));
|
||||||
|
if (input.good()) {
|
||||||
|
nlohmann::json json;
|
||||||
|
input >> json;
|
||||||
|
input.close();
|
||||||
|
|
||||||
|
if (!json[name].is_null()) {
|
||||||
|
m_vars.m_rainbow->m_min = json[name][0].get<int>();
|
||||||
|
m_vars.m_rainbow->m_max = json[name][1].get<int>();
|
||||||
|
m_vars.m_rainbow->m_steps = json[name][2].get<int>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (std::exception& E) {
|
||||||
|
LOG_WARN("[Json] %s", E.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_rainbow_config_menu::load() {
|
||||||
|
set_name("Rainbow Config");
|
||||||
|
set_parent<helper_rainbow_menu>();
|
||||||
|
|
||||||
|
add_option(button_option("Save Rainbow Config")
|
||||||
|
.add_translate()
|
||||||
|
.add_keyboard("Enter rainbow config name", 30, [](button_option* option, const char* result) {
|
||||||
|
save_config(result);
|
||||||
|
}));
|
||||||
|
|
||||||
|
add_option(break_option("Rainbows")
|
||||||
|
.add_translate());
|
||||||
|
|
||||||
|
add_string("~m~None");
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_rainbow_config_menu::update() {}
|
||||||
|
|
||||||
|
void helper_rainbow_config_menu::update_once() {
|
||||||
|
clear_options(2);
|
||||||
|
|
||||||
|
try {
|
||||||
|
std::ifstream input(util::dirs::get_path(rainbow));
|
||||||
|
if (input.good()) {
|
||||||
|
nlohmann::json json;
|
||||||
|
input >> json;
|
||||||
|
input.close();
|
||||||
|
|
||||||
|
if (json.size() > 0) {
|
||||||
|
std::vector<std::string> names;
|
||||||
|
|
||||||
|
for (auto& it = json.begin(); it != json.end(); ++it) {
|
||||||
|
names.push_back(it.key());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (std::string name : names) {
|
||||||
|
add_option(button_option(name)
|
||||||
|
.add_click([=] { load_config(name); }));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
add_option(button_option(get_string("~m~None")).ref());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
add_option(button_option(get_string("~m~None")).ref());
|
||||||
|
}
|
||||||
|
} catch (std::exception& e) {
|
||||||
|
LOG_WARN("[Json] %s", e.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void helper_rainbow_config_menu::feature_update() {}
|
||||||
|
|
||||||
|
helper_rainbow_config_menu* g_instance;
|
||||||
|
helper_rainbow_config_menu* helper_rainbow_config_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new helper_rainbow_config_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
#include "menu/base/util/rainbow.h"
|
||||||
|
|
||||||
|
class helper_rainbow_config_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static helper_rainbow_config_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
helper_rainbow_config_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace helper::rainbow::config::vars {
|
||||||
|
struct variables {
|
||||||
|
menu::rainbow* m_rainbow;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
127
GTAV/src/menu/base/submenus/main/misc.cpp
Normal file
127
GTAV/src/menu/base/submenus/main/misc.cpp
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
#include "misc.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../main.h"
|
||||||
|
#include "misc/scripthook.h"
|
||||||
|
#include "misc/misc_camera.h"
|
||||||
|
#include "menu/base/util/panels.h"
|
||||||
|
#include "misc/misc_radio.h"
|
||||||
|
#include "misc/hud.h"
|
||||||
|
#include "misc/visions.h"
|
||||||
|
#include "misc/display.h"
|
||||||
|
#include "misc/misc_panels.h"
|
||||||
|
#include "misc/misc_disables.h"
|
||||||
|
#include "misc/misc_swaps.h"
|
||||||
|
#include "misc/dispatch.h"
|
||||||
|
|
||||||
|
using namespace misc::vars;
|
||||||
|
|
||||||
|
namespace misc::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
scroll_struct<int> metric[] = {
|
||||||
|
{ localization("Metric", true), 0 },
|
||||||
|
{ localization("Imperial", true), 1 }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void misc_menu::load() {
|
||||||
|
set_name("Miscellaneous");
|
||||||
|
set_parent<main_menu>();
|
||||||
|
|
||||||
|
add_option(submenu_option("ScriptHook")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<scripthook_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Camera")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<camera_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Radio")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<radio_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("HUD")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<hud_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Visions")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<visions_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Stacked Display")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<display_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Panels")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<panels_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Disables")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<misc_disables_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Swaps")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<misc_swaps_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Dispatch")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<dispatch_menu>());
|
||||||
|
|
||||||
|
add_option(scroll_option<int>(SCROLL, "Speed Calculations")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_scroll(m_vars.m_metric_system, 0, NUMOF(metric), metric)
|
||||||
|
.add_click([] {
|
||||||
|
global::vars::g_selected_metric_system = { m_vars.m_metric_system == 0 ? 2.236936f : 3.6f, m_vars.m_metric_system == 0 ? "MPH" : "KPH" };
|
||||||
|
})
|
||||||
|
.add_savable(get_submenu_name_stack())
|
||||||
|
.add_tooltip("Metric to be used in features such as Speedometer"));
|
||||||
|
|
||||||
|
add_option(toggle_option("Rockstar Developer Perks")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_rockstar_developer_perks)
|
||||||
|
.add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Decreased Graphics")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_decreased_graphics)
|
||||||
|
.add_click([] {
|
||||||
|
if (!m_vars.m_decreased_graphics) {
|
||||||
|
native::set_focus_entity(menu::player::get_local_player().m_ped);
|
||||||
|
}
|
||||||
|
}).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(button_option("Bail")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_click([] {
|
||||||
|
if (is_valid_ptr(*(uint64_t*)(global::vars::g_network_player_manager))) {
|
||||||
|
native::network_bail(0, 0, 0);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.add_tooltip("Bail to singleplayer"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void misc_menu::update() {}
|
||||||
|
|
||||||
|
void misc_menu::update_once() {
|
||||||
|
for (menu::panels::panel_parent* panel : menu::panels::get_panel_manager()->get_panels()) {
|
||||||
|
panel->m_render = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void misc_menu::feature_update() {
|
||||||
|
if (m_vars.m_decreased_graphics) {
|
||||||
|
native::set_focus_area(9999.f, 9999.f, 9999.f, 0.f, 0.f, 0.f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
misc_menu* g_instance;
|
||||||
|
misc_menu* misc_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new misc_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
26
GTAV/src/menu/base/submenus/main/misc.h
Normal file
26
GTAV/src/menu/base/submenus/main/misc.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class misc_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static misc_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
misc_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::vars {
|
||||||
|
struct variables {
|
||||||
|
bool m_rockstar_developer_perks;
|
||||||
|
bool m_decreased_graphics;
|
||||||
|
|
||||||
|
int m_metric_system;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
#include "aerial_camera.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../misc_camera.h"
|
||||||
|
|
||||||
|
using namespace misc::camera::aerial::vars;
|
||||||
|
|
||||||
|
namespace misc::camera::aerial::vars {
|
||||||
|
variables m_vars;
|
||||||
|
}
|
||||||
|
|
||||||
|
void aerial_camera_menu::load() {
|
||||||
|
set_name("Aerial Camera");
|
||||||
|
set_parent<camera_menu>();
|
||||||
|
|
||||||
|
add_option(toggle_option("Toggle Aerial Camera")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_toggle_camera)
|
||||||
|
.add_click([] {
|
||||||
|
if (!native::does_cam_exist(m_vars.m_aerial_cam)) {
|
||||||
|
m_vars.m_aerial_cam = native::create_camera(26379945, true);
|
||||||
|
native::set_cam_active(m_vars.m_aerial_cam, true);
|
||||||
|
native::render_script_cams(true, true, 1000, true, false, 0);
|
||||||
|
} else {
|
||||||
|
native::destroy_cam(m_vars.m_aerial_cam, true);
|
||||||
|
native::render_script_cams(false, true, 1000, true, false, 0);
|
||||||
|
}
|
||||||
|
}).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, "Camera Distance")
|
||||||
|
.add_translate()
|
||||||
|
.add_number(m_vars.m_distance, "%i", 1).add_min(0).add_max(300).set_scroll_speed(10)
|
||||||
|
.add_savable(get_submenu_name_stack()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void aerial_camera_menu::update() {}
|
||||||
|
|
||||||
|
void aerial_camera_menu::update_once() {}
|
||||||
|
|
||||||
|
void aerial_camera_menu::feature_update() {
|
||||||
|
if (m_vars.m_toggle_camera) {
|
||||||
|
if (native::does_cam_exist(m_vars.m_aerial_cam)) {
|
||||||
|
math::vector3<float> coords = native::get_offset_from_entity_in_world_coords(menu::player::get_local_player().m_entity, 0, (float)(m_vars.m_distance / 2) * -1, (float)m_vars.m_distance);
|
||||||
|
coords.z = menu::player::get_local_player().m_coords.z + m_vars.m_distance;
|
||||||
|
native::set_cam_coord(m_vars.m_aerial_cam, coords.x, coords.y, coords.z);
|
||||||
|
native::point_cam_at_entity(m_vars.m_aerial_cam, menu::player::get_local_player().m_entity, 0, 0, 0, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
aerial_camera_menu* g_instance;
|
||||||
|
aerial_camera_menu* aerial_camera_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new aerial_camera_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
25
GTAV/src/menu/base/submenus/main/misc/camera/aerial_camera.h
Normal file
25
GTAV/src/menu/base/submenus/main/misc/camera/aerial_camera.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class aerial_camera_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static aerial_camera_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
aerial_camera_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::camera::aerial::vars {
|
||||||
|
struct variables {
|
||||||
|
bool m_toggle_camera;
|
||||||
|
int m_distance = 100;
|
||||||
|
Cam m_aerial_cam;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
143
GTAV/src/menu/base/submenus/main/misc/dispatch.cpp
Normal file
143
GTAV/src/menu/base/submenus/main/misc/dispatch.cpp
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
#include "dispatch.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../misc.h"
|
||||||
|
|
||||||
|
using namespace misc::dispatch::vars;
|
||||||
|
|
||||||
|
namespace misc::dispatch::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
bool is_toggled(eDispatchType service) {
|
||||||
|
if (global::vars::g_dispatch_service_table) {
|
||||||
|
auto Table = *(uint64_t*)(global::vars::g_dispatch_service_table + (service * 8));
|
||||||
|
if (Table) {
|
||||||
|
return *(bool*)(Table + 0x20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_toggle(eDispatchType service, bool toggle) {
|
||||||
|
if (global::vars::g_dispatch_service_table) {
|
||||||
|
uint64_t table = *(uint64_t*)(global::vars::g_dispatch_service_table + (service * 8));
|
||||||
|
if (table) {
|
||||||
|
*(bool*)(table + 0x20) = !toggle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void dispatch_menu::load() {
|
||||||
|
set_name("Dispatch");
|
||||||
|
set_parent<misc_menu>();
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Police Automobile")
|
||||||
|
.add_translate()
|
||||||
|
.add_toggle(m_vars.m_disable_police_automobile)
|
||||||
|
.add_click([] { set_toggle(DT_PoliceAutomobile, m_vars.m_disable_police_automobile); })
|
||||||
|
.add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Police Helicopter")
|
||||||
|
.add_translate()
|
||||||
|
.add_toggle(m_vars.m_disable_police_helicopter)
|
||||||
|
.add_click([] { set_toggle(DT_PoliceHelicopter, m_vars.m_disable_police_helicopter); })
|
||||||
|
.add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Police Riders")
|
||||||
|
.add_translate()
|
||||||
|
.add_toggle(m_vars.m_disable_police_riders)
|
||||||
|
.add_click([] { set_toggle(DT_PoliceRiders, m_vars.m_disable_police_riders); })
|
||||||
|
.add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Police Vehicle Request")
|
||||||
|
.add_translate()
|
||||||
|
.add_toggle(m_vars.m_disable_police_vehicle_request)
|
||||||
|
.add_click([] { set_toggle(DT_PoliceVehicleRequest, m_vars.m_disable_police_vehicle_request); })
|
||||||
|
.add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Police Road Block")
|
||||||
|
.add_translate()
|
||||||
|
.add_toggle(m_vars.m_disable_police_roadblock)
|
||||||
|
.add_click([] { set_toggle(DT_PoliceRoadBlock, m_vars.m_disable_police_roadblock); })
|
||||||
|
.add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Police Boat")
|
||||||
|
.add_translate()
|
||||||
|
.add_toggle(m_vars.m_disable_police_boat)
|
||||||
|
.add_click([] { set_toggle(DT_PoliceBoat, m_vars.m_disable_police_boat); })
|
||||||
|
.add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Swat Automobile")
|
||||||
|
.add_translate()
|
||||||
|
.add_toggle(m_vars.m_disable_swat_automobile)
|
||||||
|
.add_click([] { set_toggle(DT_SwatAutomobile, m_vars.m_disable_swat_automobile); })
|
||||||
|
.add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Swat Helicopter")
|
||||||
|
.add_translate()
|
||||||
|
.add_toggle(m_vars.m_disable_swat_helicopter)
|
||||||
|
.add_click([] { set_toggle(DT_SwatHelicopter, m_vars.m_disable_swat_helicopter); })
|
||||||
|
.add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Fire Department")
|
||||||
|
.add_translate()
|
||||||
|
.add_toggle(m_vars.m_disable_fire_department)
|
||||||
|
.add_click([] { set_toggle(DT_FireDepartment, m_vars.m_disable_fire_department); })
|
||||||
|
.add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Ambulance Department")
|
||||||
|
.add_translate()
|
||||||
|
.add_toggle(m_vars.m_disable_ambulance_department)
|
||||||
|
.add_click([] { set_toggle(DT_AmbulanceDepartment, m_vars.m_disable_ambulance_department); })
|
||||||
|
.add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Gangs")
|
||||||
|
.add_translate()
|
||||||
|
.add_toggle(m_vars.m_disable_gangs)
|
||||||
|
.add_click([] { set_toggle(DT_Gangs, m_vars.m_disable_gangs); })
|
||||||
|
.add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Army Vehicle")
|
||||||
|
.add_translate()
|
||||||
|
.add_toggle(m_vars.m_disable_army_vehicle)
|
||||||
|
.add_click([] { set_toggle(DT_ArmyVehicle, m_vars.m_disable_army_vehicle); })
|
||||||
|
.add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Bikers")
|
||||||
|
.add_translate()
|
||||||
|
.add_toggle(m_vars.m_disable_bikers)
|
||||||
|
.add_click([] { set_toggle(DT_BikerBackup, m_vars.m_disable_bikers); })
|
||||||
|
.add_savable(get_submenu_name_stack()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void dispatch_menu::update() {}
|
||||||
|
|
||||||
|
void dispatch_menu::update_once() {
|
||||||
|
m_vars.m_disable_police_automobile = !is_toggled(DT_PoliceAutomobile);
|
||||||
|
m_vars.m_disable_police_helicopter = !is_toggled(DT_PoliceHelicopter);
|
||||||
|
m_vars.m_disable_police_riders = !is_toggled(DT_PoliceRiders);
|
||||||
|
m_vars.m_disable_police_vehicle_request = !is_toggled(DT_PoliceVehicleRequest);
|
||||||
|
m_vars.m_disable_police_roadblock = !is_toggled(DT_PoliceRoadBlock);
|
||||||
|
m_vars.m_disable_police_boat = !is_toggled(DT_PoliceBoat);
|
||||||
|
m_vars.m_disable_swat_automobile = !is_toggled(DT_SwatAutomobile);
|
||||||
|
m_vars.m_disable_swat_helicopter = !is_toggled(DT_SwatHelicopter);
|
||||||
|
m_vars.m_disable_fire_department = !is_toggled(DT_FireDepartment);
|
||||||
|
m_vars.m_disable_ambulance_department = !is_toggled(DT_AmbulanceDepartment);
|
||||||
|
m_vars.m_disable_gangs = !is_toggled(DT_Gangs);
|
||||||
|
m_vars.m_disable_army_vehicle = !is_toggled(DT_ArmyVehicle);
|
||||||
|
m_vars.m_disable_bikers = !is_toggled(DT_BikerBackup);
|
||||||
|
}
|
||||||
|
|
||||||
|
void dispatch_menu::feature_update() {}
|
||||||
|
|
||||||
|
dispatch_menu* g_instance;
|
||||||
|
dispatch_menu* dispatch_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new dispatch_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
35
GTAV/src/menu/base/submenus/main/misc/dispatch.h
Normal file
35
GTAV/src/menu/base/submenus/main/misc/dispatch.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class dispatch_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static dispatch_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
dispatch_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::dispatch::vars {
|
||||||
|
struct variables {
|
||||||
|
bool m_disable_police_automobile;
|
||||||
|
bool m_disable_police_helicopter;
|
||||||
|
bool m_disable_police_riders;
|
||||||
|
bool m_disable_police_vehicle_request;
|
||||||
|
bool m_disable_police_roadblock;
|
||||||
|
bool m_disable_police_boat;
|
||||||
|
bool m_disable_swat_automobile;
|
||||||
|
bool m_disable_swat_helicopter;
|
||||||
|
bool m_disable_fire_department;
|
||||||
|
bool m_disable_ambulance_department;
|
||||||
|
bool m_disable_gangs;
|
||||||
|
bool m_disable_army_vehicle;
|
||||||
|
bool m_disable_bikers;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
232
GTAV/src/menu/base/submenus/main/misc/display.cpp
Normal file
232
GTAV/src/menu/base/submenus/main/misc/display.cpp
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
#include "display.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../misc.h"
|
||||||
|
#include "menu/base/util/stacked_display.h"
|
||||||
|
#include "menu/base/util/timers.h"
|
||||||
|
#include "util/va.h"
|
||||||
|
#include "rage/engine.h"
|
||||||
|
|
||||||
|
using namespace misc::display::vars;
|
||||||
|
|
||||||
|
namespace misc::display::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
scroll_struct<int> fps[] = {
|
||||||
|
{ localization("FPS", true), 0, },
|
||||||
|
{ localization("Average", true), 1, },
|
||||||
|
{ localization("Both", true), 2 },
|
||||||
|
};
|
||||||
|
|
||||||
|
std::string get_next_host() {
|
||||||
|
std::vector<std::pair<std::string, uint64_t>> players;
|
||||||
|
|
||||||
|
menu::player::for_each([&](menu::player::player_context& player) {
|
||||||
|
if (is_valid_ptr(player.m_net_player)) {
|
||||||
|
if (is_valid_ptr(player.m_net_player->m_player_info)) {
|
||||||
|
if (player.m_net_player == rage::engine::get_host_net_game_player()) return;
|
||||||
|
players.push_back({ player.m_name, player.m_net_player->m_player_info->m_host_token });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, true, true);
|
||||||
|
|
||||||
|
std::sort(begin(players), end(players), [](std::pair<std::string, uint64_t> first, std::pair<std::string, uint64_t> second) {
|
||||||
|
return first.second < second.second;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (players.empty()) return "N/A";
|
||||||
|
return players[0].first;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void display_menu::load() {
|
||||||
|
set_name("Stacked Display");
|
||||||
|
set_parent<misc_menu>();
|
||||||
|
|
||||||
|
add_option(scroll_option<int>(TOGGLE, "FPS")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_fps)
|
||||||
|
.add_scroll(m_vars.m_fps_var, 0, NUMOF(fps), fps)
|
||||||
|
.add_click([] {
|
||||||
|
if (!m_vars.m_fps) {
|
||||||
|
menu::display::disable("SR_FPS");
|
||||||
|
}
|
||||||
|
}).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Position")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_position)
|
||||||
|
.add_click([] {
|
||||||
|
if (!m_vars.m_position) {
|
||||||
|
menu::display::disable("SR_POS");
|
||||||
|
}
|
||||||
|
}).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Free Slots")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_free_slots)
|
||||||
|
.add_click([] {
|
||||||
|
if (!m_vars.m_free_slots) {
|
||||||
|
menu::display::disable("SR_FREESLOTS");
|
||||||
|
}
|
||||||
|
}).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Modder Count")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_modder_count)
|
||||||
|
.add_click([] {
|
||||||
|
if (!m_vars.m_modder_count) {
|
||||||
|
menu::display::disable("SR_MODDERS");
|
||||||
|
}
|
||||||
|
}).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Host")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_host)
|
||||||
|
.add_click([] {
|
||||||
|
if (!m_vars.m_host) {
|
||||||
|
menu::display::disable("SR_HOST");
|
||||||
|
}
|
||||||
|
}).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Next Host")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_next_host)
|
||||||
|
.add_click([] {
|
||||||
|
if (!m_vars.m_next_host) {
|
||||||
|
menu::display::disable("SR_NHOST");
|
||||||
|
}
|
||||||
|
}).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Pools")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_entity_pools)
|
||||||
|
.add_click([] {
|
||||||
|
if (!m_vars.m_entity_pools) {
|
||||||
|
menu::display::disable("SR_AttachmentPool");
|
||||||
|
menu::display::disable("SR_ObjectPool");
|
||||||
|
menu::display::disable("SR_PedPool");
|
||||||
|
menu::display::disable("SR_PickupPool");
|
||||||
|
menu::display::disable("SR_VehiclePool");
|
||||||
|
}
|
||||||
|
}).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_string("Modders");
|
||||||
|
add_string("Free Slots");
|
||||||
|
add_string("Position");
|
||||||
|
add_string("Average FPS");
|
||||||
|
add_string("Avg");
|
||||||
|
add_string("FPS");
|
||||||
|
add_string("Object Pool");
|
||||||
|
add_string("Ped Pool");
|
||||||
|
add_string("Pickup Pool");
|
||||||
|
add_string("Vehicle Pool");
|
||||||
|
add_string("Camera Pool");
|
||||||
|
add_string("Frame Count");
|
||||||
|
add_string("Next Host");
|
||||||
|
add_string("Host");
|
||||||
|
}
|
||||||
|
|
||||||
|
void display_menu::update() {}
|
||||||
|
|
||||||
|
void display_menu::update_once() {}
|
||||||
|
|
||||||
|
void display_menu::feature_update() {
|
||||||
|
static int timer = 0;
|
||||||
|
menu::timers::run_timed(&timer, 1000, [] {
|
||||||
|
m_vars.m_draw_fps_cache[1] = m_vars.m_draw_fps_cache[0];
|
||||||
|
m_vars.m_draw_fps_cache[0] = native::get_frame_count();
|
||||||
|
});
|
||||||
|
|
||||||
|
if (m_vars.m_fps) {
|
||||||
|
int frames = m_vars.m_draw_fps_cache[0] - m_vars.m_draw_fps_cache[1] - 1;
|
||||||
|
|
||||||
|
if (m_vars.m_draw_fps_average_count < 900) {
|
||||||
|
m_vars.m_draw_fps_average_total += frames;
|
||||||
|
m_vars.m_draw_fps_average_count++;
|
||||||
|
} else {
|
||||||
|
m_vars.m_draw_fps_average_total = m_vars.m_draw_fps_average_count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_draw_fps_average_total != 0 && m_vars.m_draw_fps_average_count != 0) {
|
||||||
|
m_vars.m_draw_fps_average = m_vars.m_draw_fps_average_total / m_vars.m_draw_fps_average_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
char buffer[50];
|
||||||
|
if (m_vars.m_fps_var == 0) {
|
||||||
|
sprintf_s(buffer, "%s%i", frames < 60 ? "~r~" : frames > 100 ? "~g~" : "", frames);
|
||||||
|
} else if (m_vars.m_fps_var == 1) {
|
||||||
|
sprintf_s(buffer, "%s%i", m_vars.m_draw_fps_average < 60 ? "~r~" : m_vars.m_draw_fps_average > 100 ? "~g~" : "", m_vars.m_draw_fps_average);
|
||||||
|
menu::display::update("SR_FPS", get_string("Average FPS"), buffer);
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
sprintf_s(buffer, "%s%i~w~ (%s. %s%i~w~)", frames < 60 ? "~r~" : frames > 100 ? "~g~" : "", frames, get_string("Avg").c_str(), m_vars.m_draw_fps_average < 60 ? "~r~" : m_vars.m_draw_fps_average > 100 ? "~g~" : "", m_vars.m_draw_fps_average);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu::display::update("SR_FPS", get_string("FPS"), buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_position) {
|
||||||
|
math::vector3<float> coords = menu::player::get_local_player().m_coords;
|
||||||
|
menu::display::update("SR_POS", get_string("Position"), util::va::va("[%.2f, %.2f, %.2f]", coords.x, coords.y, coords.z));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_free_slots) {
|
||||||
|
menu::display::update("SR_FREESLOTS", get_string("Free Slots"), std::to_string(32 - native::network_get_num_connected_players()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_modder_count) {
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
menu::player::for_each([&](menu::player::player_context& player) {
|
||||||
|
if (player.m_is_modder) count++;
|
||||||
|
}, true);
|
||||||
|
|
||||||
|
menu::display::update("SR_MODDERS", get_string("Modders"), std::to_string(count));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_entity_pools) {
|
||||||
|
std::vector<std::pair<std::string, std::pair<int, int>>> pool_info;
|
||||||
|
|
||||||
|
pool_info.push_back(std::make_pair(get_string("Object Pool"), std::make_pair(global::vars::g_object_pool->m_count, global::vars::g_object_pool->m_max)));
|
||||||
|
pool_info.push_back(std::make_pair(get_string("Ped Pool"), std::make_pair(global::vars::g_ped_pool->m_count, global::vars::g_ped_pool->m_max)));
|
||||||
|
pool_info.push_back(std::make_pair(get_string("Pickup Pool"), std::make_pair(global::vars::g_pickup_pool->m_count, global::vars::g_pickup_pool->m_max)));
|
||||||
|
pool_info.push_back(std::make_pair(get_string("Vehicle Pool"), std::make_pair(global::vars::g_vehicle_pool->m_count, global::vars::g_vehicle_pool->m_max)));
|
||||||
|
|
||||||
|
for (std::size_t i = 0; i < pool_info.size(); i++) {
|
||||||
|
std::string name = pool_info[i].first;
|
||||||
|
name.erase(remove(name.begin(), name.end(), ' '), name.end());
|
||||||
|
menu::display::update(("SR_" + name), pool_info[i].first.c_str(), util::va::va("%i/%i", pool_info[i].second.first, pool_info[i].second.second));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_frame_count) {
|
||||||
|
menu::display::update("SR_FRAMECOUNT", get_string("Frame Count"), std::to_string(native::get_frame_count()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_host) {
|
||||||
|
if (rage::engine::get_host_net_game_player() && rage::engine::get_host_net_game_player()->m_player_info) {
|
||||||
|
menu::display::update("SR_HOST", get_string("Host"), rage::engine::get_host_net_game_player()->m_player_info->m_name);
|
||||||
|
} else {
|
||||||
|
menu::display::disable("SR_HOST");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_next_host) {
|
||||||
|
if (native::network_get_num_connected_players() > 1) {
|
||||||
|
menu::display::update("SR_NHOST", get_string("Next Host"), get_next_host());
|
||||||
|
} else {
|
||||||
|
menu::display::disable("SR_NHOST");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
display_menu* g_instance;
|
||||||
|
display_menu* display_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new display_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
36
GTAV/src/menu/base/submenus/main/misc/display.h
Normal file
36
GTAV/src/menu/base/submenus/main/misc/display.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class display_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static display_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
display_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::display::vars {
|
||||||
|
struct variables {
|
||||||
|
bool m_fps;
|
||||||
|
bool m_position;
|
||||||
|
bool m_free_slots;
|
||||||
|
bool m_modder_count;
|
||||||
|
bool m_entity_pools;
|
||||||
|
bool m_host;
|
||||||
|
bool m_next_host;
|
||||||
|
bool m_frame_count;
|
||||||
|
|
||||||
|
int m_fps_var;
|
||||||
|
int m_draw_fps_cache[2];
|
||||||
|
int m_draw_fps_average = 0;
|
||||||
|
int m_draw_fps_average_total = 0;
|
||||||
|
int m_draw_fps_average_count = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
292
GTAV/src/menu/base/submenus/main/misc/hud.cpp
Normal file
292
GTAV/src/menu/base/submenus/main/misc/hud.cpp
Normal file
@ -0,0 +1,292 @@
|
|||||||
|
#include "hud.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../misc.h"
|
||||||
|
#include "../helper/helper_color.h"
|
||||||
|
|
||||||
|
using namespace misc::hud::vars;
|
||||||
|
|
||||||
|
namespace misc::hud::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
scroll_struct<int> hud_color_labels[] = {
|
||||||
|
{ localization("Pure White", true), 0 },
|
||||||
|
{ localization("White", true), 0 },
|
||||||
|
{ localization("Black", true), 0 },
|
||||||
|
{ localization("Grey", true), 0 },
|
||||||
|
{ localization("Grey Light", true), 0 },
|
||||||
|
{ localization("Grey Dark", true), 0 },
|
||||||
|
{ localization("Red", true), 0 },
|
||||||
|
{ localization("Red Light", true), 0 },
|
||||||
|
{ localization("Red Dark", true), 0 },
|
||||||
|
{ localization("Blue", true), 0 },
|
||||||
|
{ localization("Blue Light", true), 0 },
|
||||||
|
{ localization("Blue Dark", true), 0 },
|
||||||
|
{ localization("Yellow", true), 0 },
|
||||||
|
{ localization("Yellow Light", true), 0 },
|
||||||
|
{ localization("Yellow Dark", true), 0 },
|
||||||
|
{ localization("Orange", true), 0 },
|
||||||
|
{ localization("Orange Light", true), 0 },
|
||||||
|
{ localization("Orange Dark", true), 0 },
|
||||||
|
{ localization("Green", true), 0 },
|
||||||
|
{ localization("Green Light", true), 0 },
|
||||||
|
{ localization("Green Dark", true), 0 },
|
||||||
|
{ localization("Purple", true), 0 },
|
||||||
|
{ localization("Purple Light", true), 0 },
|
||||||
|
{ localization("Purple Dark", true), 0 },
|
||||||
|
{ localization("Pink", true), 0 },
|
||||||
|
{ localization("Radar Health", true), 0 },
|
||||||
|
{ localization("Radar Armour", true), 0 },
|
||||||
|
{ localization("Radar Damage", true), 0 },
|
||||||
|
{ localization("Player 1", true), 0 },
|
||||||
|
{ localization("Player 2", true), 0 },
|
||||||
|
{ localization("Player 3", true), 0 },
|
||||||
|
{ localization("Player 4", true), 0 },
|
||||||
|
{ localization("Player 5", true), 0 },
|
||||||
|
{ localization("Player 6", true), 0 },
|
||||||
|
{ localization("Player 7", true), 0 },
|
||||||
|
{ localization("Player 8", true), 0 },
|
||||||
|
{ localization("Player 9", true), 0 },
|
||||||
|
{ localization("Player 10", true), 0 },
|
||||||
|
{ localization("Player 11", true), 0 },
|
||||||
|
{ localization("Player 12", true), 0 },
|
||||||
|
{ localization("Player 13", true), 0 },
|
||||||
|
{ localization("Player 14", true), 0 },
|
||||||
|
{ localization("Player 15", true), 0 },
|
||||||
|
{ localization("Player 16", true), 0 },
|
||||||
|
{ localization("Player 17", true), 0 },
|
||||||
|
{ localization("Player 18", true), 0 },
|
||||||
|
{ localization("Player 19", true), 0 },
|
||||||
|
{ localization("Player 20", true), 0 },
|
||||||
|
{ localization("Player 21", true), 0 },
|
||||||
|
{ localization("Player 22", true), 0 },
|
||||||
|
{ localization("Player 23", true), 0 },
|
||||||
|
{ localization("Player 24", true), 0 },
|
||||||
|
{ localization("Player 25", true), 0 },
|
||||||
|
{ localization("Player 26", true), 0 },
|
||||||
|
{ localization("Player 27", true), 0 },
|
||||||
|
{ localization("Player 28", true), 0 },
|
||||||
|
{ localization("Player 29", true), 0 },
|
||||||
|
{ localization("Player 30", true), 0 },
|
||||||
|
{ localization("Player 31", true), 0 },
|
||||||
|
{ localization("Player 32", true), 0 },
|
||||||
|
{ localization("Simple Blip Default", true), 0 },
|
||||||
|
{ localization("Menu Blue", true), 0 },
|
||||||
|
{ localization("Menu Grey Light", true), 0 },
|
||||||
|
{ localization("Menu Blue Extra Dark", true), 0 },
|
||||||
|
{ localization("Menu Yellow", true), 0 },
|
||||||
|
{ localization("Menu Yellow Dark", true), 0 },
|
||||||
|
{ localization("Menu Green", true), 0 },
|
||||||
|
{ localization("Menu Grey", true), 0 },
|
||||||
|
{ localization("Menu Grey Dark", true), 0 },
|
||||||
|
{ localization("Menu Highlight", true), 0 },
|
||||||
|
{ localization("Menu Standard", true), 0 },
|
||||||
|
{ localization("Menu Dimmed", true), 0 },
|
||||||
|
{ localization("Menu Extra Dimmed", true), 0 },
|
||||||
|
{ localization("Brief Title", true), 0 },
|
||||||
|
{ localization("Mid Grey MP", true), 0 },
|
||||||
|
{ localization("Player 1 Dark", true), 0 },
|
||||||
|
{ localization("Player 2 Dark", true), 0 },
|
||||||
|
{ localization("Player 3 Dark", true), 0 },
|
||||||
|
{ localization("Player 4 Dark", true), 0 },
|
||||||
|
{ localization("Player 5 Dark", true), 0 },
|
||||||
|
{ localization("Player 6 Dark", true), 0 },
|
||||||
|
{ localization("Player 7 Dark", true), 0 },
|
||||||
|
{ localization("Player 8 Dark", true), 0 },
|
||||||
|
{ localization("Player 9 Dark", true), 0 },
|
||||||
|
{ localization("Player 10 Dark", true), 0 },
|
||||||
|
{ localization("Player 11 Dark", true), 0 },
|
||||||
|
{ localization("Player 12 Dark", true), 0 },
|
||||||
|
{ localization("Player 13 Dark", true), 0 },
|
||||||
|
{ localization("Player 14 Dark", true), 0 },
|
||||||
|
{ localization("Player 15 Dark", true), 0 },
|
||||||
|
{ localization("Player 16 Dark", true), 0 },
|
||||||
|
{ localization("Player 17 Dark", true), 0 },
|
||||||
|
{ localization("Player 18 Dark", true), 0 },
|
||||||
|
{ localization("Player 19 Dark", true), 0 },
|
||||||
|
{ localization("Player 20 Dark", true), 0 },
|
||||||
|
{ localization("Player 21 Dark", true), 0 },
|
||||||
|
{ localization("Player 22 Dark", true), 0 },
|
||||||
|
{ localization("Player 23 Dark", true), 0 },
|
||||||
|
{ localization("Player 24 Dark", true), 0 },
|
||||||
|
{ localization("Player 25 Dark", true), 0 },
|
||||||
|
{ localization("Player 26 Dark", true), 0 },
|
||||||
|
{ localization("Player 27 Dark", true), 0 },
|
||||||
|
{ localization("Player 28 Dark", true), 0 },
|
||||||
|
{ localization("Player 29 Dark", true), 0 },
|
||||||
|
{ localization("Player 30 Dark", true), 0 },
|
||||||
|
{ localization("Player 31 Dark", true), 0 },
|
||||||
|
{ localization("Player 32 Dark", true), 0 },
|
||||||
|
{ localization("Bronze", true), 0 },
|
||||||
|
{ localization("Silver", true), 0 },
|
||||||
|
{ localization("Gold", true), 0 },
|
||||||
|
{ localization("Platinum", true), 0 },
|
||||||
|
{ localization("Gang 1", true), 0 },
|
||||||
|
{ localization("Gang 2", true), 0 },
|
||||||
|
{ localization("Gang 3", true), 0 },
|
||||||
|
{ localization("Gang 4", true), 0 },
|
||||||
|
{ localization("Same Crew", true), 0 },
|
||||||
|
{ localization("Freemode", true), 0 },
|
||||||
|
{ localization("Pause BG", true), 0 },
|
||||||
|
{ localization("Friendly", true), 0 },
|
||||||
|
{ localization("Enemy", true), 0 },
|
||||||
|
{ localization("Location", true), 0 },
|
||||||
|
{ localization("Pickup", true), 0 },
|
||||||
|
{ localization("Pause Singleplayer", true), 0 },
|
||||||
|
{ localization("Freemode Dark", true), 0 },
|
||||||
|
{ localization("Inactive Mission", true), 0 },
|
||||||
|
{ localization("Damage", true), 0 },
|
||||||
|
{ localization("Pink Light", true), 0 },
|
||||||
|
{ localization("PM Item Highlight", true), 0 },
|
||||||
|
{ localization("Script Variable", true), 0 },
|
||||||
|
{ localization("Yoga", true), 0 },
|
||||||
|
{ localization("Tennis", true), 0 },
|
||||||
|
{ localization("Golf", true), 0 },
|
||||||
|
{ localization("Shooting Range", true), 0 },
|
||||||
|
{ localization("Flight School", true), 0 },
|
||||||
|
{ localization("North Blue", true), 0 },
|
||||||
|
{ localization("Social Club", true), 0 },
|
||||||
|
{ localization("Platform Blue", true), 0 },
|
||||||
|
{ localization("Platform Green", true), 0 },
|
||||||
|
{ localization("Platform Grey", true), 0 },
|
||||||
|
{ localization("Facebook Blue", true), 0 },
|
||||||
|
{ localization("In-Game BG", true), 0 },
|
||||||
|
{ localization("Darts", true), 0 },
|
||||||
|
{ localization("Waypoint", true), 0 },
|
||||||
|
{ localization("Michael", true), 0 },
|
||||||
|
{ localization("Franklin", true), 0 },
|
||||||
|
{ localization("Trevor", true), 0 },
|
||||||
|
{ localization("Golf P1", true), 0 },
|
||||||
|
{ localization("Golf P2", true), 0 },
|
||||||
|
{ localization("Golf P3", true), 0 },
|
||||||
|
{ localization("Golf P4", true), 0 },
|
||||||
|
{ localization("Waypoint Light", true), 0 },
|
||||||
|
{ localization("Waypoint Dark", true), 0 },
|
||||||
|
{ localization("panel Light", true), 0 },
|
||||||
|
{ localization("Michael Dark", true), 0 },
|
||||||
|
{ localization("Franklin Dark", true), 0 },
|
||||||
|
{ localization("Trevor Dark", true), 0 },
|
||||||
|
{ localization("Objective Route", true), 0 },
|
||||||
|
{ localization("Pause Map Tint", true), 0 },
|
||||||
|
{ localization("Pause Deselect", true), 0 },
|
||||||
|
{ localization("PM Weapons Purchasable", true), 0 },
|
||||||
|
{ localization("PM Weapons Locked", true), 0 },
|
||||||
|
{ localization("End Screen BG", true), 0 },
|
||||||
|
{ localization("Chop", true), 0 },
|
||||||
|
{ localization("Pausemap Tint Half", true), 0 },
|
||||||
|
{ localization("North Blue Official", true), 0 },
|
||||||
|
{ localization("Script Variable 2", true), 0 },
|
||||||
|
{ localization("H", true), 0 },
|
||||||
|
{ localization("H Dark", true), 0 },
|
||||||
|
{ localization("T", true), 0 },
|
||||||
|
{ localization("T Dark", true), 0 },
|
||||||
|
{ localization("HS Hard", true), 0 },
|
||||||
|
{ localization("Controller Michael", true), 0 },
|
||||||
|
{ localization("Controller Franklin", true), 0 },
|
||||||
|
{ localization("Controller Trevor", true), 0 },
|
||||||
|
{ localization("Controller Chop", true), 0 },
|
||||||
|
{ localization("Video Editor Video", true), 0 },
|
||||||
|
{ localization("Video Editor Audio", true), 0 },
|
||||||
|
{ localization("Video Editor Text", true), 0 },
|
||||||
|
{ localization("HB Blue", true), 0 },
|
||||||
|
{ localization("HB Yellow", true), 0 },
|
||||||
|
{ localization("Video Editor Score", true), 0 },
|
||||||
|
{ localization("Video Editor Audio Fadeout", true), 0 },
|
||||||
|
{ localization("Video Editor Text Fadeout", true), 0 },
|
||||||
|
{ localization("Video Editor Score Fadeout", true), 0 },
|
||||||
|
{ localization("Heist Background", true), 0 },
|
||||||
|
{ localization("Video Editor Ambient", true), 0 },
|
||||||
|
{ localization("Video Editor Ambient Fadeout", true), 0 },
|
||||||
|
{ localization("GB", true), 0 },
|
||||||
|
{ localization("G", true), 0 },
|
||||||
|
{ localization("B", true), 0 },
|
||||||
|
{ localization("Low Flow", true), 0 },
|
||||||
|
{ localization("Low Flow Dark", true), 0 },
|
||||||
|
{ localization("G1", true), 0 },
|
||||||
|
{ localization("G2", true), 0 },
|
||||||
|
{ localization("G3", true), 0 },
|
||||||
|
{ localization("G4", true), 0 },
|
||||||
|
{ localization("G5", true), 0 },
|
||||||
|
{ localization("G6", true), 0 },
|
||||||
|
{ localization("G7", true), 0 },
|
||||||
|
{ localization("G8", true), 0 },
|
||||||
|
{ localization("G9", true), 0 },
|
||||||
|
{ localization("G10", true), 0 },
|
||||||
|
{ localization("G11", true), 0 },
|
||||||
|
{ localization("G12", true), 0 },
|
||||||
|
{ localization("G13", true), 0 },
|
||||||
|
{ localization("G14", true), 0 },
|
||||||
|
{ localization("G15", true), 0 },
|
||||||
|
{ localization("Adversary", true), 0 },
|
||||||
|
{ localization("Degen Red", true), 0 },
|
||||||
|
{ localization("Degen Yellow", true), 0 },
|
||||||
|
{ localization("Degen Green", true), 0 },
|
||||||
|
{ localization("Degen Cyan", true), 0 },
|
||||||
|
{ localization("Degen Blue", true), 0 },
|
||||||
|
{ localization("Degen Magenta", true), 0 },
|
||||||
|
{ localization("Stunt 1", true), 0 },
|
||||||
|
{ localization("Stunt 2", true), 0 },
|
||||||
|
{ localization("Special Race Series", true), 0 },
|
||||||
|
{ localization("Special Race Series Dark", true), 0 },
|
||||||
|
{ localization("CS", true), 0 },
|
||||||
|
{ localization("CS Dark", true), 0 },
|
||||||
|
{ localization("Tech Green", true), 0 },
|
||||||
|
{ localization("Tech Green Dark", true), 0 },
|
||||||
|
{ localization("Tech Red", true), 0 },
|
||||||
|
{ localization("Tech Green Very Dark", true), 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
void set_color(hud_menu* _this) {
|
||||||
|
native::set_hud_colour(m_vars.m_hud, m_vars.m_color.r, m_vars.m_color.g, m_vars.m_color.b, m_vars.m_color.a);
|
||||||
|
|
||||||
|
// Save color
|
||||||
|
util::config::write_color(_this->get_submenu_name_stack(), hud_color_labels[m_vars.m_hud].m_name.get_original(), m_vars.m_color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void hud_menu::load() {
|
||||||
|
set_name("HUD");
|
||||||
|
set_parent<misc_menu>();
|
||||||
|
|
||||||
|
native::get_hud_colour(m_vars.m_hud, &m_vars.m_color.r, &m_vars.m_color.g, &m_vars.m_color.b, &m_vars.m_color.a);
|
||||||
|
|
||||||
|
add_option(scroll_option<int>(SCROLL, "HUD")
|
||||||
|
.add_translate()
|
||||||
|
.add_scroll(m_vars.m_hud, 0, NUMOF(hud_color_labels), hud_color_labels)
|
||||||
|
.add_click([] { native::get_hud_colour(m_vars.m_hud, &m_vars.m_color.r, &m_vars.m_color.g, &m_vars.m_color.b, &m_vars.m_color.a); }));
|
||||||
|
|
||||||
|
add_option(submenu_option("Edit Color")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<helper_color_menu>()
|
||||||
|
.add_click([this] {
|
||||||
|
helper_color_menu::get()->set_name(hud_color_labels[m_vars.m_hud].m_name.get(), false, false);
|
||||||
|
helper_color_menu::get()->set_parent<hud_menu>();
|
||||||
|
helper::color::vars::m_vars.m_color = &m_vars.m_color;
|
||||||
|
helper::color::vars::m_vars.m_callback = [this] { set_color(this); };
|
||||||
|
})
|
||||||
|
.add_icon_override({ "randomha", "lol" }, { 0.2145f, 0.0055f }, { 0.011f, 0.02f }, &m_vars.m_color));
|
||||||
|
|
||||||
|
// Load colors
|
||||||
|
for (int i = 0; i < NUMOF(hud_color_labels); i++) {
|
||||||
|
color_rgba color;
|
||||||
|
if (util::config::read_color(get_submenu_name_stack(), hud_color_labels[i].m_name.get_original(), &color)) {
|
||||||
|
native::set_hud_colour(m_vars.m_hud, color.r, color.g, color.b, color.a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void hud_menu::update() {}
|
||||||
|
|
||||||
|
void hud_menu::update_once() {}
|
||||||
|
|
||||||
|
void hud_menu::feature_update() {}
|
||||||
|
|
||||||
|
hud_menu* g_instance;
|
||||||
|
hud_menu* hud_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new hud_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
24
GTAV/src/menu/base/submenus/main/misc/hud.h
Normal file
24
GTAV/src/menu/base/submenus/main/misc/hud.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class hud_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static hud_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
hud_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::hud::vars {
|
||||||
|
struct variables {
|
||||||
|
int m_hud;
|
||||||
|
color_rgba m_color;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
127
GTAV/src/menu/base/submenus/main/misc/misc_camera.cpp
Normal file
127
GTAV/src/menu/base/submenus/main/misc/misc_camera.cpp
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
#include "misc_camera.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../misc.h"
|
||||||
|
#include "menu/base/util/camera.h"
|
||||||
|
#include "menu/base/util/timers.h"
|
||||||
|
#include "camera/aerial_camera.h"
|
||||||
|
|
||||||
|
using namespace misc::camera::vars;
|
||||||
|
|
||||||
|
namespace misc::camera::vars {
|
||||||
|
variables m_vars;
|
||||||
|
}
|
||||||
|
|
||||||
|
void camera_menu::load() {
|
||||||
|
set_name("Camera");
|
||||||
|
set_parent<misc_menu>();
|
||||||
|
|
||||||
|
add_option(submenu_option("Aerial Camera")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<aerial_camera_menu>());
|
||||||
|
|
||||||
|
add_option(toggle_option("Freecam")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_freecam)
|
||||||
|
.add_click([] {
|
||||||
|
if (!m_vars.m_freecam) {
|
||||||
|
if (native::does_cam_exist(m_vars.m_freecam_handle)) {
|
||||||
|
native::set_cam_active(m_vars.m_freecam_handle, false);
|
||||||
|
native::render_script_cams(false, true, 1000, true, false, 1);
|
||||||
|
native::destroy_cam(m_vars.m_freecam_handle, false);
|
||||||
|
native::set_focus_entity(menu::player::get_local_player().m_ped);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
add_option(number_option<float>(TOGGLE, "Camera Zoom")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_camera_zoom)
|
||||||
|
.add_number(m_vars.m_camera_zoom_val, "%.0f", 1.f).add_min(0).add_max(1000.f).set_scroll_speed(10)
|
||||||
|
.add_savable(get_submenu_name_stack()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void camera_menu::update() {}
|
||||||
|
|
||||||
|
void camera_menu::update_once() {}
|
||||||
|
|
||||||
|
void camera_menu::feature_update() {
|
||||||
|
if (m_vars.m_camera_zoom) {
|
||||||
|
native::animate_gameplay_cam_zoom(1.f, m_vars.m_camera_zoom_val);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_freecam) {
|
||||||
|
if (!native::does_cam_exist(m_vars.m_freecam_handle)) {
|
||||||
|
math::vector3<float> coords = menu::player::get_local_player().m_coords;
|
||||||
|
m_vars.m_freecam_handle = native::create_cam("DEFAULT_SCRIPTED_CAMERA", 0);
|
||||||
|
native::set_cam_active(m_vars.m_freecam_handle, true);
|
||||||
|
native::render_script_cams(true, true, 1000, true, false, 1);
|
||||||
|
native::set_cam_coord(m_vars.m_freecam_handle, coords.x, coords.y, coords.z + 7.0f);
|
||||||
|
} else {
|
||||||
|
math::vector3<float> cam_coords = native::get_cam_coord(m_vars.m_freecam_handle);
|
||||||
|
math::vector3<float> gameplay_cam_rot = native::get_gameplay_cam_rot(0);
|
||||||
|
native::set_cam_rot(m_vars.m_freecam_handle, gameplay_cam_rot.x, gameplay_cam_rot.y, gameplay_cam_rot.z, 2);
|
||||||
|
|
||||||
|
if (menu::player::get_local_player().m_in_vehicle) {
|
||||||
|
native::set_vehicle_forward_speed(menu::player::get_local_player().m_vehicle, 0.0f);
|
||||||
|
} else {
|
||||||
|
native::task_stand_still(menu::player::get_local_player().m_ped, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
math::vector3<float> infront = menu::camera::get_direction();
|
||||||
|
|
||||||
|
int left_right = native::get_control_value(2, 188);
|
||||||
|
int up_down = native::get_control_value(2, 189);
|
||||||
|
|
||||||
|
auto w_down = GetKeyState('W') & 0x8000 || up_down == 0;
|
||||||
|
auto s_down = GetKeyState('S') & 0x8000 || up_down == 254;
|
||||||
|
auto d_down = GetKeyState('D') & 0x8000 || left_right == 254;
|
||||||
|
auto a_down = GetKeyState('A') & 0x8000 || left_right == 0;
|
||||||
|
|
||||||
|
if (w_down) {
|
||||||
|
native::set_cam_coord(m_vars.m_freecam_handle, cam_coords.x + infront.x * 2.f, cam_coords.y + infront.y * 2.f, cam_coords.z + infront.z * 2.f);
|
||||||
|
} else if (s_down) {
|
||||||
|
native::set_cam_coord(m_vars.m_freecam_handle, cam_coords.x - infront.x * 2.f, cam_coords.y - infront.y * 2.f, cam_coords.z - infront.z * 2.f);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a_down) {
|
||||||
|
math::vector3<float> gameplay_cam_rot_new = gameplay_cam_rot;
|
||||||
|
|
||||||
|
gameplay_cam_rot_new.x = 0.f;
|
||||||
|
gameplay_cam_rot_new.y = 0.f;
|
||||||
|
gameplay_cam_rot_new.z += 90.f;
|
||||||
|
|
||||||
|
math::vector3<float> new_coords = cam_coords + (menu::camera::get_direction(gameplay_cam_rot_new) * 2.f);
|
||||||
|
native::set_cam_coord(m_vars.m_freecam_handle, new_coords.x, new_coords.y, new_coords.z);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d_down) {
|
||||||
|
math::vector3<float> gameplay_cam_rot_new = gameplay_cam_rot;
|
||||||
|
|
||||||
|
gameplay_cam_rot_new.x = 0.f;
|
||||||
|
gameplay_cam_rot_new.y = 0.f;
|
||||||
|
gameplay_cam_rot_new.z -= 90.f;
|
||||||
|
|
||||||
|
math::vector3<float> new_coords = cam_coords + (menu::camera::get_direction(gameplay_cam_rot_new) * 2.f);
|
||||||
|
native::set_cam_coord(m_vars.m_freecam_handle, new_coords.x, new_coords.y, new_coords.z);
|
||||||
|
}
|
||||||
|
|
||||||
|
cam_coords = native::get_cam_coord(m_vars.m_freecam_handle);
|
||||||
|
|
||||||
|
static int timer = 0;
|
||||||
|
menu::timers::run_timed(&timer, 1000, [&] {
|
||||||
|
native::set_focus_area(cam_coords.x, cam_coords.y, cam_coords.z, 0, 0, 0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
camera_menu* g_instance;
|
||||||
|
camera_menu* camera_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new camera_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
27
GTAV/src/menu/base/submenus/main/misc/misc_camera.h
Normal file
27
GTAV/src/menu/base/submenus/main/misc/misc_camera.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class camera_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static camera_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
camera_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::camera::vars {
|
||||||
|
struct variables {
|
||||||
|
bool m_freecam;
|
||||||
|
Cam m_freecam_handle;
|
||||||
|
|
||||||
|
bool m_camera_zoom;
|
||||||
|
float m_camera_zoom_val = 1.f;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
234
GTAV/src/menu/base/submenus/main/misc/misc_disables.cpp
Normal file
234
GTAV/src/menu/base/submenus/main/misc/misc_disables.cpp
Normal file
@ -0,0 +1,234 @@
|
|||||||
|
#include "misc_disables.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../misc.h"
|
||||||
|
#include "menu/base/util/global.h"
|
||||||
|
#include "rage/types/global_types.h"
|
||||||
|
|
||||||
|
using namespace misc::disables::vars;
|
||||||
|
|
||||||
|
namespace misc::disables::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
template <typename TYPE>
|
||||||
|
void set_tunable(int Tunable, TYPE Value) {
|
||||||
|
menu::script_global(rage::global::_155_tunables).at(Tunable).as<TYPE>() = Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void disable_phone() {
|
||||||
|
int type = rage::global::_155_disable_phone_type;
|
||||||
|
int bool_1 = rage::global::_155_disable_phone_bool_1;
|
||||||
|
int phone_pos_set = rage::global::_155_disable_phone_phone_pos_set;
|
||||||
|
int phone_pos_get = rage::global::_155_disable_phone_phone_pos_get;
|
||||||
|
int bitset_1 = rage::global::_155_disable_phone_bitset_1;
|
||||||
|
int bitset_2 = rage::global::_155_disable_phone_bitset_2;
|
||||||
|
int unk_1 = rage::global::_155_disable_phone_unk_1;
|
||||||
|
|
||||||
|
if (*menu::script_global(type).at(1).get<bool>() != 1) {
|
||||||
|
if (native::get_number_of_instances_of_script_with_name_hash(joaat("cellphone_flashhand")) > 0 ||
|
||||||
|
*menu::script_global(type).at(1).get<int>() > 3) {
|
||||||
|
if (*menu::script_global(bool_1).get<bool>()) {
|
||||||
|
menu::script_global(bool_1).as<int>() = 0;
|
||||||
|
menu::script_global(phone_pos_set).as<int>() = *menu::script_global(phone_pos_get).get<int>();
|
||||||
|
menu::script_global(phone_pos_set).at(1).as<int>() = *menu::script_global(phone_pos_get).at(1).get<int>();
|
||||||
|
menu::script_global(phone_pos_set).at(2).as<int>() = *menu::script_global(phone_pos_get).at(2).get<int>();
|
||||||
|
|
||||||
|
native::set_mobile_phone_position(*menu::script_global(phone_pos_set).get<float>(), *menu::script_global(phone_pos_set).at(1).get<float>(), *menu::script_global(phone_pos_set).at(2).get<float>());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*menu::script_global(type).at(1).get<int>() == 10 || *menu::script_global(type).at(1).get<int>() == 9) {
|
||||||
|
native::set_bit((int*)menu::script_global(bitset_1).get<int>(), 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (native::is_mobile_phone_call_ongoing()) {
|
||||||
|
native::stop_scripted_conversation(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu::script_global(unk_1).as<int>() = 5;
|
||||||
|
native::clear_bit(menu::script_global(bitset_2).get<int>(), 30);
|
||||||
|
|
||||||
|
if (*menu::script_global(type).at(1).get<int>() != 1 && *menu::script_global(type).at(1).get<int>() != 0) {
|
||||||
|
menu::script_global(type).at(1).as<int>() = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
native::set_bit((int*)menu::script_global(bitset_1).get<int>(), 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void misc_disables_menu::load() {
|
||||||
|
set_name("Disables");
|
||||||
|
set_parent<misc_menu>();
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Idle Kick")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_disable_idle_kick).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Profanity Filter")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_disable_profanity_filter).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Phone")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_disable_phone).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Calls")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_disable_calls).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Stunt Jumps")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_disable_stunt_jumps).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Cinematic Camera")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_disable_cinematic_camera).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Minimap")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_click([] { native::display_radar(true); })
|
||||||
|
.add_toggle(m_vars.m_disable_minimap).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable HUD")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_click([] { native::display_hud(true); })
|
||||||
|
.add_toggle(m_vars.m_disable_hud).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Chat on Open")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_disable_chat_on_open).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Restricted Areas")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_disable_restricted_areas).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Notifications")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_disable_notifications).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Loading Prompts")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_disable_loading_prompts).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Cutscenes")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_disable_cutscenes).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Boundary Limit")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_disable_boundry_limit).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Easy Way Out Limit")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_disable_easy_way_out_limit).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Disable Passive Mode Limit")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_disable_passive_mode_limit).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(button_option("Disable Mission Circles")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_click([] { native::terminate_all_scripts_with_this_name("fmmc_launcher"); }));
|
||||||
|
}
|
||||||
|
|
||||||
|
void misc_disables_menu::update() {}
|
||||||
|
|
||||||
|
void misc_disables_menu::update_once() {}
|
||||||
|
|
||||||
|
void misc_disables_menu::feature_update() {
|
||||||
|
if (m_vars.m_disable_easy_way_out_limit) {
|
||||||
|
set_tunable(27907, 0);
|
||||||
|
set_tunable(27908, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_disable_passive_mode_limit) {
|
||||||
|
set_tunable(26681, 0);
|
||||||
|
set_tunable(26682, 0);
|
||||||
|
set_tunable(26683, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_disable_idle_kick) {
|
||||||
|
#undef max
|
||||||
|
set_tunable(87, std::numeric_limits<int>::max());
|
||||||
|
set_tunable(88, std::numeric_limits<int>::max());
|
||||||
|
set_tunable(89, std::numeric_limits<int>::max());
|
||||||
|
set_tunable(90, std::numeric_limits<int>::max());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_disable_boundry_limit) {
|
||||||
|
native::expand_world_limits(-9000.f, -11000.f, 30.f);
|
||||||
|
native::expand_world_limits(10000.f, 12000.f, 30.f);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_disable_cutscenes) {
|
||||||
|
if (native::is_cutscene_active() || native::is_cutscene_playing()) {
|
||||||
|
native::stop_cutscene_immediately();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_disable_loading_prompts) {
|
||||||
|
if (native::is_loading_prompt_being_displayed()) {
|
||||||
|
native::remove_loading_prompt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_disable_notifications) {
|
||||||
|
native::clear_all_help_messages();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_disable_minimap) {
|
||||||
|
native::display_radar(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_disable_hud) {
|
||||||
|
native::display_hud(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_disable_calls) {
|
||||||
|
if (native::is_mobile_phone_call_ongoing()) {
|
||||||
|
native::stop_scripted_conversation(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_disable_stunt_jumps) {
|
||||||
|
if (native::is_stunt_jump_in_progress()) {
|
||||||
|
native::cancel_stunt_jump();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_disable_cinematic_camera) {
|
||||||
|
native::disable_control_action(0, ControlVehicleCinCam, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_disable_phone) {
|
||||||
|
disable_phone();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_disable_restricted_areas) {
|
||||||
|
std::string scripts[] = {
|
||||||
|
"am_armybase",
|
||||||
|
"restrictedareas",
|
||||||
|
"re_armybase",
|
||||||
|
"re_lossantosintl",
|
||||||
|
"re_prison",
|
||||||
|
"re_prisonvanbreak"
|
||||||
|
};
|
||||||
|
|
||||||
|
for (std::string area : scripts) {
|
||||||
|
if (native::does_script_exist(area.c_str())) {
|
||||||
|
native::terminate_all_scripts_with_this_name(area.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
misc_disables_menu* g_instance;
|
||||||
|
misc_disables_menu* misc_disables_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new misc_disables_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
38
GTAV/src/menu/base/submenus/main/misc/misc_disables.h
Normal file
38
GTAV/src/menu/base/submenus/main/misc/misc_disables.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class misc_disables_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static misc_disables_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
misc_disables_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::disables::vars {
|
||||||
|
struct variables {
|
||||||
|
bool m_disable_phone;
|
||||||
|
bool m_disable_calls;
|
||||||
|
bool m_disable_stunt_jumps;
|
||||||
|
bool m_disable_cinematic_camera;
|
||||||
|
bool m_disable_profanity_filter;
|
||||||
|
bool m_disable_minimap;
|
||||||
|
bool m_disable_hud;
|
||||||
|
bool m_disable_chat_on_open;
|
||||||
|
bool m_disable_restricted_areas;
|
||||||
|
bool m_disable_notifications;
|
||||||
|
bool m_disable_loading_prompts;
|
||||||
|
bool m_disable_cutscenes;
|
||||||
|
bool m_disable_boundry_limit;
|
||||||
|
bool m_disable_idle_kick;
|
||||||
|
bool m_disable_easy_way_out_limit;
|
||||||
|
bool m_disable_passive_mode_limit;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
63
GTAV/src/menu/base/submenus/main/misc/misc_panels.cpp
Normal file
63
GTAV/src/menu/base/submenus/main/misc/misc_panels.cpp
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
#include "misc_panels.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../misc.h"
|
||||||
|
#include "panels/panels_parent.h"
|
||||||
|
#include "menu/base/submenus/main/network/network_players.h"
|
||||||
|
|
||||||
|
void panels_menu::load() {
|
||||||
|
set_name("Panels");
|
||||||
|
set_parent<misc_menu>();
|
||||||
|
|
||||||
|
for (menu::panels::panel_parent* parent : menu::panels::get_panels()) {
|
||||||
|
for (menu::panels::panel_child& child : parent->m_children_panels) {
|
||||||
|
int index = util::config::read_int(get_submenu_name_stack(), "Index", child.m_index, { parent->m_name, child.m_name });
|
||||||
|
int column = util::config::read_int(get_submenu_name_stack(), "Column", child.m_column, { parent->m_name, child.m_name });
|
||||||
|
child.m_render = util::config::read_bool(get_submenu_name_stack(), "Render", child.m_render, { parent->m_name, child.m_name });
|
||||||
|
|
||||||
|
menu::panels::rearrange(parent, child.m_id, column, index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void panels_menu::update() {}
|
||||||
|
|
||||||
|
void panels_menu::update_once() {
|
||||||
|
clear_options(0);
|
||||||
|
|
||||||
|
for (menu::panels::panel_parent* parent : menu::panels::get_panels()) {
|
||||||
|
add_option(submenu_option(parent->m_name)
|
||||||
|
.add_click([=] {
|
||||||
|
misc::panel::parent::vars::m_vars.m_parent = parent;
|
||||||
|
panels_parent_menu::get()->set_name(parent->m_name, false, false);
|
||||||
|
})
|
||||||
|
.add_hover([=](submenu_option*) {
|
||||||
|
for (menu::panels::panel_parent* p : menu::panels::get_panels()) {
|
||||||
|
if (p != parent) {
|
||||||
|
p->m_render = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
network::players::vars::m_vars.m_selected_player = menu::player::get_local_player().m_id; // for panel preview
|
||||||
|
|
||||||
|
for (menu::panels::panel_child& child : parent->m_children_panels) {
|
||||||
|
menu::panels::null_structure(child);
|
||||||
|
}
|
||||||
|
|
||||||
|
parent->m_render = true;
|
||||||
|
})
|
||||||
|
.add_submenu<panels_parent_menu>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void panels_menu::feature_update() {}
|
||||||
|
|
||||||
|
panels_menu* g_instance;
|
||||||
|
panels_menu* panels_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new panels_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
15
GTAV/src/menu/base/submenus/main/misc/misc_panels.h
Normal file
15
GTAV/src/menu/base/submenus/main/misc/misc_panels.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class panels_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static panels_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
panels_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
73
GTAV/src/menu/base/submenus/main/misc/misc_radio.cpp
Normal file
73
GTAV/src/menu/base/submenus/main/misc/misc_radio.cpp
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
#include "misc_radio.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../misc.h"
|
||||||
|
#include "menu/base/util/panels.h"
|
||||||
|
|
||||||
|
using namespace misc::radio::vars;
|
||||||
|
|
||||||
|
namespace misc::radio::vars {
|
||||||
|
variables m_vars;
|
||||||
|
}
|
||||||
|
|
||||||
|
void radio_menu::load() {
|
||||||
|
set_name("Radio");
|
||||||
|
set_parent<misc_menu>();
|
||||||
|
|
||||||
|
add_option(toggle_option("Mobile Radio")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_mobile_radio)
|
||||||
|
.add_click([] {
|
||||||
|
native::set_mobile_radio_enabled_during_gameplay(m_vars.m_mobile_radio);
|
||||||
|
native::set_mobile_phone_radio_state(m_vars.m_mobile_radio);
|
||||||
|
}).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(button_option("Skip Radio Track")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_click([] { native::skip_radio_forward(); }));
|
||||||
|
|
||||||
|
add_option(break_option("Radio Stations")
|
||||||
|
.add_translate());
|
||||||
|
|
||||||
|
add_string("Change to");
|
||||||
|
}
|
||||||
|
|
||||||
|
void radio_menu::update() {}
|
||||||
|
|
||||||
|
void radio_menu::update_once() {
|
||||||
|
menu::panels::toggle_panel_render("PANEL_RADIO", true);
|
||||||
|
|
||||||
|
clear_options(3);
|
||||||
|
|
||||||
|
m_vars.m_context.reset();
|
||||||
|
m_vars.m_context.m_selected = 0;
|
||||||
|
|
||||||
|
std::vector<std::shared_ptr<radio_option>> temp_options;
|
||||||
|
|
||||||
|
for (int i = 0; i < native::max_radio_station_index(); i++) {
|
||||||
|
temp_options.push_back(add_option(radio_option(util::va::va("%s %s", get_string("Change to").c_str(), native::get_label_text(native::get_radio_station_name(i))))
|
||||||
|
.add_radio(m_vars.m_context)
|
||||||
|
.add_click([=] { native::set_radio_to_station_index(i); })));
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = native::get_player_radio_station_index();
|
||||||
|
if (index >= 0 && index < native::max_radio_station_index()) {
|
||||||
|
temp_options[index]->update_selected();
|
||||||
|
} else {
|
||||||
|
m_vars.m_context.m_toggles[m_vars.m_context.m_selected] = false;
|
||||||
|
m_vars.m_context.m_selected = 99;
|
||||||
|
m_vars.m_context.m_toggles[99] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void radio_menu::feature_update() {}
|
||||||
|
|
||||||
|
radio_menu* g_instance;
|
||||||
|
radio_menu* radio_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new radio_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
25
GTAV/src/menu/base/submenus/main/misc/misc_radio.h
Normal file
25
GTAV/src/menu/base/submenus/main/misc/misc_radio.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class radio_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static radio_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
radio_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::radio::vars {
|
||||||
|
struct variables {
|
||||||
|
bool m_mobile_radio;
|
||||||
|
|
||||||
|
radio_context m_context = { "commonmenu", "shop_garage_icon" };
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
41
GTAV/src/menu/base/submenus/main/misc/misc_swaps.cpp
Normal file
41
GTAV/src/menu/base/submenus/main/misc/misc_swaps.cpp
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
#include "misc_swaps.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../misc.h"
|
||||||
|
#include "swaps/model_swaps.h"
|
||||||
|
#include "swaps/texture_swaps.h"
|
||||||
|
|
||||||
|
using namespace misc::swaps::vars;
|
||||||
|
|
||||||
|
namespace misc::swaps::vars {
|
||||||
|
variables m_vars;
|
||||||
|
}
|
||||||
|
|
||||||
|
void misc_swaps_menu::load() {
|
||||||
|
set_name("Swaps");
|
||||||
|
set_parent<misc_menu>();
|
||||||
|
|
||||||
|
add_option(submenu_option("Model Swaps")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<model_swaps_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Texture Swaps")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<texture_swaps_menu>());
|
||||||
|
}
|
||||||
|
|
||||||
|
void misc_swaps_menu::update() {}
|
||||||
|
|
||||||
|
void misc_swaps_menu::update_once() {}
|
||||||
|
|
||||||
|
void misc_swaps_menu::feature_update() {}
|
||||||
|
|
||||||
|
misc_swaps_menu* g_instance;
|
||||||
|
misc_swaps_menu* misc_swaps_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new misc_swaps_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
23
GTAV/src/menu/base/submenus/main/misc/misc_swaps.h
Normal file
23
GTAV/src/menu/base/submenus/main/misc/misc_swaps.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class misc_swaps_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static misc_swaps_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
misc_swaps_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::swaps::vars {
|
||||||
|
struct variables {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
86
GTAV/src/menu/base/submenus/main/misc/panels/panels_edit.cpp
Normal file
86
GTAV/src/menu/base/submenus/main/misc/panels/panels_edit.cpp
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
#include "panels_edit.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "panels_parent.h"
|
||||||
|
#include "menu/base/util/timers.h"
|
||||||
|
#include "../misc_panels.h"
|
||||||
|
|
||||||
|
using namespace misc::panel::edit::vars;
|
||||||
|
|
||||||
|
namespace misc::panel::edit::vars {
|
||||||
|
variables m_vars;
|
||||||
|
}
|
||||||
|
|
||||||
|
void panels_edit_menu::load() {
|
||||||
|
set_name("Edit");
|
||||||
|
set_parent<panels_parent_menu>();
|
||||||
|
|
||||||
|
add_string("Toggle");
|
||||||
|
add_string("Column");
|
||||||
|
add_string("Index");
|
||||||
|
}
|
||||||
|
|
||||||
|
void panels_edit_menu::update() {
|
||||||
|
static bool update_cache = true;
|
||||||
|
static int timer_1 = 0;
|
||||||
|
|
||||||
|
static bool write_config = true;
|
||||||
|
static int timer_2 = 0;
|
||||||
|
|
||||||
|
menu::timers::run_timed(&timer_1, 100, [&] { update_cache = true; });
|
||||||
|
menu::timers::run_timed(&timer_2, 500, [&] { write_config = true; });
|
||||||
|
|
||||||
|
if (update_cache) {
|
||||||
|
update_cache = false;
|
||||||
|
|
||||||
|
clear_options(0);
|
||||||
|
menu::panels::panel_child& child = menu::panels::get_child(misc::panel::parent::vars::m_vars.m_parent, m_vars.m_id); // account for sorting
|
||||||
|
|
||||||
|
if (write_config) {
|
||||||
|
util::config::write_int(panels_menu::get()->get_submenu_name_stack(), "Index", child.m_index, { child.m_parent->m_name, child.m_name });
|
||||||
|
util::config::write_int(panels_menu::get()->get_submenu_name_stack(), "Column", child.m_column, { child.m_parent->m_name, child.m_name });
|
||||||
|
util::config::write_bool(panels_menu::get()->get_submenu_name_stack(), "Render", child.m_render, { child.m_parent->m_name, child.m_name });
|
||||||
|
}
|
||||||
|
|
||||||
|
add_option(toggle_option(get_string("Toggle"))
|
||||||
|
.add_toggle(child.m_render));
|
||||||
|
|
||||||
|
if (child.m_parent->m_children_panels.size() == 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int max_column = 0;
|
||||||
|
for (menu::panels::panel_child& it : child.m_parent->m_children_panels) {
|
||||||
|
if (it.m_column > max_column) {
|
||||||
|
max_column = it.m_column;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, get_string("Column"))
|
||||||
|
.add_number(m_vars.m_local_column, "%i", 1).add_min(0).add_max(max_column + 1)
|
||||||
|
.add_click([=] { menu::panels::rearrange(child.m_parent, child.m_id, m_vars.m_local_column, m_vars.m_local_index); }));
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, get_string("Index"))
|
||||||
|
.add_number(m_vars.m_local_index, "%i", 1).add_min(0).add_max(1000)
|
||||||
|
.add_click([=] { menu::panels::rearrange(child.m_parent, child.m_id, m_vars.m_local_column, m_vars.m_local_index); }));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void panels_edit_menu::update_once() {
|
||||||
|
menu::panels::panel_child& child = misc::panel::parent::vars::m_vars.m_parent->m_children_panels[m_vars.m_index] ;
|
||||||
|
m_vars.m_id = child.m_id;
|
||||||
|
m_vars.m_local_column = child.m_column;
|
||||||
|
m_vars.m_local_index = child.m_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
void panels_edit_menu::feature_update() {}
|
||||||
|
|
||||||
|
panels_edit_menu* g_instance;
|
||||||
|
panels_edit_menu* panels_edit_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new panels_edit_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
26
GTAV/src/menu/base/submenus/main/misc/panels/panels_edit.h
Normal file
26
GTAV/src/menu/base/submenus/main/misc/panels/panels_edit.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class panels_edit_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static panels_edit_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
panels_edit_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::panel::edit::vars {
|
||||||
|
struct variables {
|
||||||
|
std::size_t m_index;
|
||||||
|
std::string m_id;
|
||||||
|
int m_local_column;
|
||||||
|
int m_local_index;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
#include "panels_parent.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../misc_panels.h"
|
||||||
|
#include "panels_edit.h"
|
||||||
|
|
||||||
|
using namespace misc::panel::parent::vars;
|
||||||
|
|
||||||
|
namespace misc::panel::parent::vars {
|
||||||
|
variables m_vars;
|
||||||
|
}
|
||||||
|
|
||||||
|
void panels_parent_menu::load() {
|
||||||
|
set_name("Parent");
|
||||||
|
set_parent<panels_menu>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void panels_parent_menu::update() {}
|
||||||
|
|
||||||
|
void panels_parent_menu::update_once() {
|
||||||
|
clear_options(0);
|
||||||
|
|
||||||
|
if (!m_vars.m_parent || m_vars.m_parent->m_children_panels.size() <= 0) {
|
||||||
|
menu::submenu::handler::set_submenu_previous();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (std::size_t i = 0; i < m_vars.m_parent->m_children_panels.size(); i++) {
|
||||||
|
menu::panels::panel_child& child = m_vars.m_parent->m_children_panels[i];
|
||||||
|
|
||||||
|
add_option(submenu_option(child.m_name)
|
||||||
|
.add_click([=] {
|
||||||
|
misc::panel::edit::vars::m_vars.m_index = i;
|
||||||
|
panels_edit_menu::get()->set_name(child.m_name, false, false);
|
||||||
|
})
|
||||||
|
.add_submenu<panels_edit_menu>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void panels_parent_menu::feature_update() {}
|
||||||
|
|
||||||
|
panels_parent_menu* g_instance;
|
||||||
|
panels_parent_menu* panels_parent_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new panels_parent_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
24
GTAV/src/menu/base/submenus/main/misc/panels/panels_parent.h
Normal file
24
GTAV/src/menu/base/submenus/main/misc/panels/panels_parent.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
#include "menu/base/util/panels.h"
|
||||||
|
|
||||||
|
class panels_parent_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static panels_parent_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
panels_parent_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::panel::parent::vars {
|
||||||
|
struct variables {
|
||||||
|
menu::panels::panel_parent* m_parent;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
1339
GTAV/src/menu/base/submenus/main/misc/scripthook.cpp
Normal file
1339
GTAV/src/menu/base/submenus/main/misc/scripthook.cpp
Normal file
File diff suppressed because it is too large
Load Diff
56
GTAV/src/menu/base/submenus/main/misc/scripthook.h
Normal file
56
GTAV/src/menu/base/submenus/main/misc/scripthook.h
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class scripthook_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static scripthook_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
scripthook_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::scripthook::vars {
|
||||||
|
struct ScriptHookScript {
|
||||||
|
bool m_initialized;
|
||||||
|
bool m_loaded;
|
||||||
|
HMODULE m_module;
|
||||||
|
|
||||||
|
ScriptHookScript()
|
||||||
|
: m_initialized(false), m_loaded(false), m_module(0) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct variables {
|
||||||
|
rage::invoker::native_setup m_context;
|
||||||
|
uint64_t m_native_hash = 0;
|
||||||
|
std::unordered_map<HMODULE, std::pair<uint64_t, uint64_t>> m_modules;
|
||||||
|
std::vector<void(*)(uint32_t, int16_t, uint8_t, int, int, int, int)> m_keyboards;
|
||||||
|
std::unordered_map<std::string, ScriptHookScript> m_script_state;
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace proxy {
|
||||||
|
void script_register(HMODULE mod, void(*callback)());
|
||||||
|
void script_register_additional_thread(HMODULE mod, void(*callback)());
|
||||||
|
void script_unregister(HMODULE mod);
|
||||||
|
void native_init(uint64_t hash);
|
||||||
|
void native_push_64(uint64_t val);
|
||||||
|
uint64_t* native_call();
|
||||||
|
uint64_t* get_global_ptr(int index);
|
||||||
|
void script_wait(uint32_t wait_time);
|
||||||
|
void keyboard_handler_register(void(*callback)(uint32_t, int16_t, uint8_t, int, int, int, int));
|
||||||
|
void keyboard_handler_unregister(void(*callback)(uint32_t, int16_t, uint8_t, int, int, int, int));
|
||||||
|
uint8_t* get_script_handle_base_address(int handle);
|
||||||
|
void present_callback_register(void(*callback)());
|
||||||
|
void present_callback_unregister(void(*callback)());
|
||||||
|
int world_get_all_vehicles(int* arr, int arr_size);
|
||||||
|
int world_get_all_peds(int* arr, int arr_size);
|
||||||
|
int world_get_all_objects(int* arr, int arr_size);
|
||||||
|
int world_get_all_pickups(int* arr, int arr_size);
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
246
GTAV/src/menu/base/submenus/main/misc/swaps/model_swaps.cpp
Normal file
246
GTAV/src/menu/base/submenus/main/misc/swaps/model_swaps.cpp
Normal file
@ -0,0 +1,246 @@
|
|||||||
|
#include "model_swaps.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../misc_swaps.h"
|
||||||
|
#include "util/memory/memory.h"
|
||||||
|
#include "menu/base/util/control.h"
|
||||||
|
#include "util/log.h"
|
||||||
|
#include "util/dirs.h"
|
||||||
|
#include "model_swaps_presets.h"
|
||||||
|
#include "model_swaps_add.h"
|
||||||
|
#include <fstream>
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
|
using namespace misc::swaps::model::vars;
|
||||||
|
|
||||||
|
namespace misc::swaps::model::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
struct HashNode {
|
||||||
|
uint32_t m_hash;
|
||||||
|
uint16_t m_data;
|
||||||
|
uint16_t m_padding;
|
||||||
|
HashNode* m_next;
|
||||||
|
};
|
||||||
|
|
||||||
|
HashNode* find_model_in_map(uint32_t model) {
|
||||||
|
uint16_t count = *(uint16_t*)memory::read_instruction(global::vars::g_get_model_info);
|
||||||
|
HashNode** map = *(HashNode***)memory::read_instruction(global::vars::g_get_model_info + 0x21);
|
||||||
|
|
||||||
|
for (uint16_t i = 0; i < count; i++) {
|
||||||
|
for (HashNode* Current = map[i]; Current; Current = Current->m_next) {
|
||||||
|
if (Current->m_hash == model) {
|
||||||
|
return Current;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void remove_swap(uint32_t original_model) {
|
||||||
|
auto vit = std::find_if(begin(m_vars.m_swaps), end(m_vars.m_swaps), [=](model_swap& element) { return element.m_original_model == original_model; });
|
||||||
|
if (vit != end(m_vars.m_swaps)) {
|
||||||
|
HashNode* node = find_model_in_map(original_model);
|
||||||
|
if (node) {
|
||||||
|
node->m_data = vit->m_original_offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_vars.m_swaps.erase(vit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool add_swap(const char* original_model, const char* new_model, model_swap* out) {
|
||||||
|
if (!strcmp(original_model, new_model)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (model_swap& swap : m_vars.m_swaps) {
|
||||||
|
if (!strcmp(swap.m_original_name.c_str(), original_model)) {
|
||||||
|
remove_swap(swap.m_original_model);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t original_hash = 0;
|
||||||
|
uint32_t new_hash = 0;
|
||||||
|
|
||||||
|
if (original_model[0] == '0' && (original_model[1] == 'x' || original_model[1] == 'X')) {
|
||||||
|
original_hash = (uint32_t)_strtoui64(original_model, 0, 0);
|
||||||
|
} else {
|
||||||
|
std::string string_name(original_model);
|
||||||
|
if (std::find_if(string_name.begin(), string_name.end(), [](unsigned char c) { return !std::isdigit(c); }) == string_name.end()) {
|
||||||
|
original_hash = (uint32_t)std::stoul(original_model);
|
||||||
|
} else {
|
||||||
|
original_hash = native::get_hash_key(original_model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (new_model[0] == '0' && (new_model[1] == 'x' || new_model[1] == 'X')) {
|
||||||
|
new_hash = (uint32_t)_strtoui64(new_model, 0, 0);
|
||||||
|
} else {
|
||||||
|
std::string string_name(new_model);
|
||||||
|
if (std::find_if(string_name.begin(), string_name.end(), [](unsigned char c) { return !std::isdigit(c); }) == string_name.end()) {
|
||||||
|
new_hash = (uint32_t)std::stoul(new_model);
|
||||||
|
} else {
|
||||||
|
new_hash = native::get_hash_key(new_model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
menu::control::simple_request_model(original_hash);
|
||||||
|
menu::control::simple_request_model(new_hash);
|
||||||
|
|
||||||
|
if (!native::is_model_valid(original_hash) || !native::is_model_valid(new_hash)
|
||||||
|
|| !native::is_model_in_cdimage(original_hash) || !native::is_model_in_cdimage(new_hash)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
HashNode* node = find_model_in_map(original_hash);
|
||||||
|
if (node) {
|
||||||
|
HashNode* new_node = find_model_in_map(new_hash);
|
||||||
|
if (new_node) {
|
||||||
|
model_swap swap;
|
||||||
|
swap.m_original_model = original_hash;
|
||||||
|
swap.m_new_model = new_hash;
|
||||||
|
swap.m_original_name = original_model;
|
||||||
|
swap.m_new_name = new_model;
|
||||||
|
swap.m_original_offset = node->m_data;
|
||||||
|
node->m_data = new_node->m_data;
|
||||||
|
|
||||||
|
if (out) *out = swap;
|
||||||
|
m_vars.m_swaps.push_back(swap);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void add_json(model_swap swap) {
|
||||||
|
nlohmann::json json;
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (std::filesystem::exists(util::dirs::get_path(model_swap))) {
|
||||||
|
std::ifstream input(util::dirs::get_path(model_swap));
|
||||||
|
if (input.good()) {
|
||||||
|
input >> json;
|
||||||
|
input.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
json = json["models"];
|
||||||
|
json[std::to_string(swap.m_original_model)]["model"] = swap.m_new_model;
|
||||||
|
json[std::to_string(swap.m_original_model)]["enabled"] = true;
|
||||||
|
|
||||||
|
std::ofstream output(util::dirs::get_path(model_swap));
|
||||||
|
if (output.good()) {
|
||||||
|
output << json.dump(4);
|
||||||
|
output.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (std::exception& e) {
|
||||||
|
LOG_WARN("[Json] %s", e.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void swap_existing(model_swap& instance) {
|
||||||
|
add_json(instance);
|
||||||
|
|
||||||
|
if (instance.m_toggled) {
|
||||||
|
HashNode* node = find_model_in_map(instance.m_original_model);
|
||||||
|
if (node) {
|
||||||
|
HashNode* new_node = find_model_in_map(instance.m_new_model);
|
||||||
|
if (new_node) {
|
||||||
|
instance.m_original_offset = node->m_data;
|
||||||
|
node->m_data = new_node->m_data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
HashNode* node = find_model_in_map(instance.m_original_model);
|
||||||
|
if (node) {
|
||||||
|
node->m_data = instance.m_original_offset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void load_swaps(model_swaps_menu* _this) {
|
||||||
|
try {
|
||||||
|
std::ifstream input(util::dirs::get_path(model_swap));
|
||||||
|
if (input.good()) {
|
||||||
|
nlohmann::json json;
|
||||||
|
input >> json;
|
||||||
|
input.close();
|
||||||
|
|
||||||
|
if (json.size() > 0) {
|
||||||
|
json = json["models"];
|
||||||
|
|
||||||
|
for (auto& it = json.begin(); it != json.end(); ++it) {
|
||||||
|
nlohmann::json& element = *it;
|
||||||
|
|
||||||
|
if (std::find_if(begin(m_vars.m_swaps), end(m_vars.m_swaps), [=](model_swap& swap) { return !strcmp(swap.m_original_name.c_str(), it.key().c_str()); }) == end(m_vars.m_swaps)) {
|
||||||
|
model_swap swap;
|
||||||
|
swap.m_original_name = it.key();
|
||||||
|
swap.m_original_model = std::stoul(it.key());
|
||||||
|
swap.m_new_model = element["model"].get<uint32_t>();
|
||||||
|
swap.m_toggled = element["enabled"].get<bool>();
|
||||||
|
|
||||||
|
if (swap.m_toggled) {
|
||||||
|
add_swap(it.key().c_str(), std::to_string(element["model"].get<uint32_t>()).c_str());
|
||||||
|
} else m_vars.m_swaps.push_back(swap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (std::exception& e) {
|
||||||
|
LOG_WARN("[Json] %s", e.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void model_swaps_menu::load() {
|
||||||
|
set_name("Model Swaps");
|
||||||
|
set_parent<misc_swaps_menu>();
|
||||||
|
|
||||||
|
add_option(submenu_option("Add Swap")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<model_swaps_add_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Presets")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<model_swaps_presets_menu>());
|
||||||
|
|
||||||
|
add_option(break_option("Swaps")
|
||||||
|
.add_translate());
|
||||||
|
|
||||||
|
add_string("~m~None");
|
||||||
|
add_string("Swapped with");
|
||||||
|
load_swaps(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void model_swaps_menu::update() {}
|
||||||
|
|
||||||
|
void model_swaps_menu::update_once() {
|
||||||
|
clear_options(3);
|
||||||
|
|
||||||
|
for (model_swap& swap : m_vars.m_swaps) {
|
||||||
|
add_option(toggle_option(swap.m_original_name)
|
||||||
|
.add_toggle(swap.m_toggled)
|
||||||
|
.add_click([&] { swap_existing(swap); })
|
||||||
|
.add_tooltip(util::va::va("%s %s", get_string("Swapped with").c_str(), swap.m_new_name.c_str())));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_swaps.size() == 0) {
|
||||||
|
add_option(button_option(get_string("~m~None")).ref());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void model_swaps_menu::feature_update() {}
|
||||||
|
|
||||||
|
model_swaps_menu* g_instance;
|
||||||
|
model_swaps_menu* model_swaps_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new model_swaps_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
38
GTAV/src/menu/base/submenus/main/misc/swaps/model_swaps.h
Normal file
38
GTAV/src/menu/base/submenus/main/misc/swaps/model_swaps.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class model_swaps_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static model_swaps_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
model_swaps_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::swaps::model::vars {
|
||||||
|
struct model_swap {
|
||||||
|
uint32_t m_original_model = 0;
|
||||||
|
uint32_t m_new_model = 0;
|
||||||
|
|
||||||
|
uint16_t m_original_offset = 0;
|
||||||
|
|
||||||
|
// UI
|
||||||
|
std::string m_original_name = "";
|
||||||
|
std::string m_new_name = "";
|
||||||
|
bool m_toggled = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct variables {
|
||||||
|
std::vector<model_swap> m_swaps;
|
||||||
|
};
|
||||||
|
|
||||||
|
void add_json(model_swap swap);
|
||||||
|
bool add_swap(const char* original_model, const char* new_model, model_swap* out = nullptr);
|
||||||
|
void remove_swap(uint32_t original_model);
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
@ -0,0 +1,73 @@
|
|||||||
|
#include "model_swaps_add.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "model_swaps.h"
|
||||||
|
#include "util/fiber_pool.h"
|
||||||
|
|
||||||
|
using namespace misc::swaps::model::add::vars;
|
||||||
|
|
||||||
|
namespace misc::swaps::model::add::vars {
|
||||||
|
variables m_vars;
|
||||||
|
}
|
||||||
|
|
||||||
|
void model_swaps_add_menu::load() {
|
||||||
|
set_name("Add Swap");
|
||||||
|
set_parent<model_swaps_menu>();
|
||||||
|
|
||||||
|
m_vars.m_options.push_back(add_option(button_option("Input Original Model")
|
||||||
|
.add_translate()
|
||||||
|
.add_keyboard("Input the model! (Hint: name, hash or numeric)", 100, [](button_option* option, const char* model) {
|
||||||
|
m_vars.m_original = model;
|
||||||
|
})));
|
||||||
|
|
||||||
|
m_vars.m_options.push_back(add_option(button_option("Input New Model")
|
||||||
|
.add_translate()
|
||||||
|
.add_keyboard("Input the model! (Hint: name, hash or numeric)", 100, [](button_option* option, const char* model) { m_vars.m_new = model; })));
|
||||||
|
|
||||||
|
m_vars.m_options.push_back(add_option(button_option("Add Swap")
|
||||||
|
.add_translate()
|
||||||
|
.add_click([] {
|
||||||
|
if (!m_vars.m_original.empty() && !m_vars.m_new.empty()) {
|
||||||
|
util::fiber::pool::add([] {
|
||||||
|
misc::swaps::model::vars::model_swap output;
|
||||||
|
if (misc::swaps::model::vars::add_swap(m_vars.m_original.c_str(), m_vars.m_new.c_str(), &output)) {
|
||||||
|
misc::swaps::model::vars::add_json(output);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu::submenu::handler::set_submenu_previous(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})));
|
||||||
|
|
||||||
|
add_string("Current");
|
||||||
|
add_string("New");
|
||||||
|
}
|
||||||
|
|
||||||
|
void model_swaps_add_menu::update() {
|
||||||
|
char tooltip[100];
|
||||||
|
sprintf_s(tooltip, "%s=%s %s=%s", get_string("Current").c_str(),
|
||||||
|
m_vars.m_original.empty() ? "~italic~unset~s~" : m_vars.m_original.c_str(),
|
||||||
|
get_string("New").c_str(),
|
||||||
|
m_vars.m_new.empty() ? "~italic~unset~s~" : m_vars.m_new.c_str());
|
||||||
|
|
||||||
|
for (std::shared_ptr<button_option>& option : m_vars.m_options) {
|
||||||
|
option->set_tooltip(tooltip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void model_swaps_add_menu::update_once() {
|
||||||
|
m_vars.m_original.clear();
|
||||||
|
m_vars.m_new.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void model_swaps_add_menu::feature_update() {}
|
||||||
|
|
||||||
|
model_swaps_add_menu* g_instance;
|
||||||
|
model_swaps_add_menu* model_swaps_add_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new model_swaps_add_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class model_swaps_add_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static model_swaps_add_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
model_swaps_add_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::swaps::model::add::vars {
|
||||||
|
struct variables {
|
||||||
|
std::string m_original;
|
||||||
|
std::string m_new;
|
||||||
|
|
||||||
|
std::vector<std::shared_ptr<button_option>> m_options;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
@ -0,0 +1,101 @@
|
|||||||
|
#include "model_swaps_presets.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "model_swaps.h"
|
||||||
|
#include "model_swaps.h"
|
||||||
|
#include "util/fiber_pool.h"
|
||||||
|
#include "util/fiber.h"
|
||||||
|
|
||||||
|
using namespace misc::swaps::model::presets::vars;
|
||||||
|
|
||||||
|
namespace misc::swaps::model::presets::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
std::string police_vehicles[] = {
|
||||||
|
"PBUS",
|
||||||
|
"PRANGER",
|
||||||
|
"POLICE",
|
||||||
|
"POLICE2",
|
||||||
|
"POLICE3",
|
||||||
|
"POLICE4",
|
||||||
|
"POLICEB",
|
||||||
|
"POLICEOLD1",
|
||||||
|
"POLICEOLD2",
|
||||||
|
"POLICET",
|
||||||
|
"SHERIFF",
|
||||||
|
"SHERIFF2",
|
||||||
|
"RIOT",
|
||||||
|
"RIOT2"
|
||||||
|
};
|
||||||
|
|
||||||
|
std::string police_peds[] = {
|
||||||
|
"CSB_COP",
|
||||||
|
"S_F_Y_COP_01",
|
||||||
|
"S_F_Y_COP_01_P",
|
||||||
|
"S_F_Y_HWAYCOP_01",
|
||||||
|
"S_F_Y_HWAYCOP_01_P",
|
||||||
|
"S_F_M_SNOWCOP_01",
|
||||||
|
"S_F_M_SNOWCOP_01_P",
|
||||||
|
"S_F_Y_SHERIFF_01",
|
||||||
|
"S_F_Y_BLACKOPS_01",
|
||||||
|
"S_F_Y_BLACKOPS_02",
|
||||||
|
"S_F_Y_BLACKOPS_03",
|
||||||
|
"S_M_Y_COP_01",
|
||||||
|
"S_M_Y_COP_01_P",
|
||||||
|
"S_M_Y_HWAYCOP_01",
|
||||||
|
"S_M_Y_HWAYCOP_01_P",
|
||||||
|
"S_M_M_SNOWCOP_01",
|
||||||
|
"S_M_M_SNOWCOP_01_P",
|
||||||
|
"S_M_Y_SHERIFF_01",
|
||||||
|
"S_M_Y_BLACKOPS_01",
|
||||||
|
"S_M_Y_BLACKOPS_02",
|
||||||
|
"S_M_Y_BLACKOPS_03",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void model_swaps_presets_menu::load() {
|
||||||
|
set_name("Presets");
|
||||||
|
set_parent<model_swaps_menu>();
|
||||||
|
|
||||||
|
add_option(toggle_option("Monster Truck Police Vehicles")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_monster_truck_police)
|
||||||
|
.add_click([] {
|
||||||
|
util::fiber::pool::add([] {
|
||||||
|
for (std::string str : police_vehicles) {
|
||||||
|
if (m_vars.m_monster_truck_police) {
|
||||||
|
misc::swaps::model::vars::add_swap(str.c_str(), "marshall");
|
||||||
|
} else misc::swaps::model::vars::remove_swap(native::get_hash_key(str.c_str()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(toggle_option("Astronaut Police Peds")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_astronaut_police_peds)
|
||||||
|
.add_click([] {
|
||||||
|
util::fiber::pool::add([] {
|
||||||
|
for (std::string str : police_peds) {
|
||||||
|
if (m_vars.m_astronaut_police_peds) {
|
||||||
|
misc::swaps::model::vars::add_swap(str.c_str(), "S_M_M_MovSpace_01");
|
||||||
|
} else misc::swaps::model::vars::remove_swap(native::get_hash_key(str.c_str()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).add_savable(get_submenu_name_stack()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void model_swaps_presets_menu::update() {}
|
||||||
|
|
||||||
|
void model_swaps_presets_menu::update_once() {}
|
||||||
|
|
||||||
|
void model_swaps_presets_menu::feature_update() {}
|
||||||
|
|
||||||
|
model_swaps_presets_menu* g_instance;
|
||||||
|
model_swaps_presets_menu* model_swaps_presets_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new model_swaps_presets_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class model_swaps_presets_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static model_swaps_presets_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
model_swaps_presets_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::swaps::model::presets::vars {
|
||||||
|
struct variables {
|
||||||
|
bool m_monster_truck_police;
|
||||||
|
bool m_astronaut_police_peds;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
316
GTAV/src/menu/base/submenus/main/misc/swaps/texture_swaps.cpp
Normal file
316
GTAV/src/menu/base/submenus/main/misc/swaps/texture_swaps.cpp
Normal file
@ -0,0 +1,316 @@
|
|||||||
|
#include "texture_swaps.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../misc_swaps.h"
|
||||||
|
#include "util/dirs.h"
|
||||||
|
#include "util/log.h"
|
||||||
|
#include "util/fiber_pool.h"
|
||||||
|
#include "util/memory/memory.h"
|
||||||
|
#include "rage/engine.h"
|
||||||
|
#include "menu/base/util/textures.h"
|
||||||
|
#include "menu/base/util/notify.h"
|
||||||
|
#include "menu/base/util/control.h"
|
||||||
|
#include "texture_swaps_add.h"
|
||||||
|
#include <fstream>
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
|
using namespace misc::swaps::texture::vars;
|
||||||
|
|
||||||
|
namespace misc::swaps::texture::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
rage::types::dictionary_pool* find_dictionary(std::string dict) {
|
||||||
|
uint32_t hash = native::get_hash_key(dict.c_str());
|
||||||
|
uint32_t texture_hash = native::get_hash_key(("platform:/textures/" + dict).c_str());
|
||||||
|
|
||||||
|
rage::types::texture_store* txd = global::vars::g_texture_store;
|
||||||
|
if (is_valid_ptr(txd) && is_valid_ptr(txd->m_pool) && is_valid_ptr(txd->m_mask)) {
|
||||||
|
rage::types::dictionary_pool* pool = txd->m_pool;
|
||||||
|
for (uint32_t i = 0; i < txd->m_count; i++) {
|
||||||
|
if (~(txd->m_mask[i] >> 7) & 1) {
|
||||||
|
rage::types::dictionary_pool element = pool[i];
|
||||||
|
if (is_valid_ptr(element.m_pool)) {
|
||||||
|
if (element.m_dictionary_hash == hash || element.m_dictionary_hash == texture_hash) {
|
||||||
|
return &pool[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
rage::types::grc_texture_dx11* find_texture(std::string dict, std::string name) {
|
||||||
|
uint32_t hash = native::get_hash_key(dict.c_str());
|
||||||
|
uint32_t texture_hash = native::get_hash_key(("platform:/textures/" + dict).c_str());
|
||||||
|
|
||||||
|
rage::types::texture_store* txd = global::vars::g_texture_store;
|
||||||
|
if (is_valid_ptr(txd) && is_valid_ptr(txd->m_pool) && is_valid_ptr(txd->m_mask)) {
|
||||||
|
rage::types::dictionary_pool* pool = txd->m_pool;
|
||||||
|
for (uint32_t i = 0; i < txd->m_count; i++) {
|
||||||
|
if (~(txd->m_mask[i] >> 7) & 1) {
|
||||||
|
rage::types::dictionary_pool element = pool[i];
|
||||||
|
if (is_valid_ptr(element.m_pool)) {
|
||||||
|
if (element.m_dictionary_hash == hash || element.m_dictionary_hash == texture_hash) {
|
||||||
|
for (short j = 0; j < element.m_pool->m_count; j++) {
|
||||||
|
rage::types::grc_texture_dx11* item = element.m_pool->m_items[j];
|
||||||
|
if (is_valid_ptr(item)) {
|
||||||
|
if (is_valid_ptr(item->m_name)) {
|
||||||
|
if (!strcmp(item->m_name, name.c_str())) {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void add_json(texture_swap* swap) {
|
||||||
|
nlohmann::json json;
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (std::filesystem::exists(util::dirs::get_path(texture_swap))) {
|
||||||
|
std::ifstream input(util::dirs::get_path(texture_swap));
|
||||||
|
if (input.good()) {
|
||||||
|
input >> json;
|
||||||
|
input.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
nlohmann::json& arr = json["textures"][swap->m_asset.first][swap->m_asset.second];
|
||||||
|
|
||||||
|
bool add = true;
|
||||||
|
for (nlohmann::json& item : arr) {
|
||||||
|
if (item["texture"].get<std::string>() == swap->m_texture) {
|
||||||
|
add = false;
|
||||||
|
|
||||||
|
item["texture"] = swap->m_texture;
|
||||||
|
item["enabled"] = swap->m_toggled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (add) {
|
||||||
|
nlohmann::json& array = nlohmann::json::object();
|
||||||
|
array["texture"] = swap->m_texture;
|
||||||
|
array["enabled"] = swap->m_toggled;
|
||||||
|
|
||||||
|
json["textures"][swap->m_asset.first][swap->m_asset.second].push_back(array);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ofstream output(util::dirs::get_path(texture_swap));
|
||||||
|
if (output.good()) {
|
||||||
|
output << json.dump(4);
|
||||||
|
output.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (std::exception& e) {
|
||||||
|
LOG_WARN("[Json] %s", e.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void remove_swap(texture_swap* swap);
|
||||||
|
|
||||||
|
bool add_swap(texture_swap* swap) {
|
||||||
|
texture_swaps_menu* instance = texture_swaps_menu::get();
|
||||||
|
|
||||||
|
std::vector<menu::textures::texture_context> textures = menu::textures::get_list();
|
||||||
|
rage::types::grc_texture_dx11* asset = find_texture(swap->m_asset.first.c_str(), swap->m_asset.second.c_str());
|
||||||
|
|
||||||
|
// disable active ones for this texture
|
||||||
|
for (texture_swap* texture : m_vars.m_swaps) {
|
||||||
|
if (texture->m_asset.first == swap->m_asset.first
|
||||||
|
&& texture->m_asset.second == swap->m_asset.second
|
||||||
|
&& texture->m_toggled
|
||||||
|
&& texture != swap) {
|
||||||
|
remove_swap(texture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!swap->m_initialized) {
|
||||||
|
if (std::find_if(begin(textures), end(textures), [=](menu::textures::texture_context& element) { return !element.m_name.compare(swap->m_texture); }) == end(textures)) {
|
||||||
|
menu::notify::stacked(instance->get_string("Texture"), util::va::va("%s %s %s %s, %s %s %s", instance->get_string("Failed to swap texture").c_str(), swap->m_asset.second.c_str(), instance->get_string("in").c_str(), swap->m_asset.first.c_str(), instance->get_string("couldn't find").c_str(), swap->m_texture.c_str(), instance->get_string("in textures folder").c_str()), global::ui::g_error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (asset) {
|
||||||
|
swap->m_initialized = true;
|
||||||
|
swap->m_original.m_width = asset->m_width;
|
||||||
|
swap->m_original.m_height = asset->m_height;
|
||||||
|
swap->m_original.m_texture = asset->m_texture;
|
||||||
|
swap->m_original.m_shader = asset->m_shader;
|
||||||
|
goto start;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
start:
|
||||||
|
auto vit = std::find_if(begin(textures), end(textures), [=](menu::textures::texture_context& element) { return !element.m_name.compare(swap->m_texture); });
|
||||||
|
if (vit != end(textures)) {
|
||||||
|
asset->m_width = vit->m_texture->m_width;
|
||||||
|
asset->m_height = vit->m_texture->m_height;
|
||||||
|
asset->m_texture = vit->m_texture->m_texture;
|
||||||
|
asset->m_shader = vit->m_texture->m_shader;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void remove_swap(texture_swap* swap) {
|
||||||
|
swap->m_toggled = false;
|
||||||
|
|
||||||
|
if (swap->m_initialized) {
|
||||||
|
rage::types::grc_texture_dx11* asset = find_texture(swap->m_asset.first.c_str(), swap->m_asset.second.c_str());
|
||||||
|
if (asset) {
|
||||||
|
asset->m_width = swap->m_original.m_width;
|
||||||
|
asset->m_height = swap->m_original.m_height;
|
||||||
|
asset->m_texture = swap->m_original.m_texture;
|
||||||
|
asset->m_shader = swap->m_original.m_shader;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void load_swaps(texture_swaps_menu* _this) {
|
||||||
|
texture_swaps_menu* instance = texture_swaps_menu::get();
|
||||||
|
|
||||||
|
try {
|
||||||
|
std::ifstream input(util::dirs::get_path(texture_swap));
|
||||||
|
if (input.good()) {
|
||||||
|
nlohmann::json json;
|
||||||
|
input >> json;
|
||||||
|
input.close();
|
||||||
|
|
||||||
|
if (json["textures"].size() > 0) {
|
||||||
|
for (auto& it = json["textures"].begin(); it != json["textures"].end(); ++it) {
|
||||||
|
nlohmann::json& dictionary = *it;
|
||||||
|
|
||||||
|
for (auto& it2 = dictionary.begin(); it2 != dictionary.end(); ++it2) {
|
||||||
|
nlohmann::json& assets = *it2;
|
||||||
|
|
||||||
|
for (nlohmann::json& asset : assets) {
|
||||||
|
texture_swap* swap = new texture_swap();
|
||||||
|
swap->m_asset = { it.key(), it2.key() };
|
||||||
|
swap->m_texture = asset["texture"].get<std::string>();
|
||||||
|
swap->m_toggled = asset["enabled"].get<bool>();
|
||||||
|
|
||||||
|
// if not exist
|
||||||
|
std::vector<menu::textures::texture_context> textures = menu::textures::get_list();
|
||||||
|
if (std::find_if(begin(textures), end(textures), [=](menu::textures::texture_context& element) { return !element.m_name.compare(swap->m_texture); }) == end(textures)) {
|
||||||
|
menu::notify::stacked(instance->get_string("Texture"), util::va::va("%s %s %s %s, %s %s %s", instance->get_string("Failed to swap texture").c_str(), swap->m_asset.second.c_str(), instance->get_string("in").c_str(), swap->m_asset.first.c_str(), instance->get_string("couldn't find").c_str(), swap->m_texture.c_str(), instance->get_string("in textures folder").c_str()), global::ui::g_error);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// disable active ones for this texture
|
||||||
|
for (texture_swap* texture : m_vars.m_swaps) {
|
||||||
|
if (texture->m_asset.first == swap->m_asset.first
|
||||||
|
&& texture->m_asset.second == swap->m_asset.second
|
||||||
|
&& texture->m_toggled
|
||||||
|
&& texture != swap) {
|
||||||
|
swap->m_toggled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (swap->m_toggled) {
|
||||||
|
util::fiber::pool::add([=] {
|
||||||
|
menu::control::simple_request_dictionary(swap->m_asset.first);
|
||||||
|
|
||||||
|
rage::types::grc_texture_dx11* asset = find_texture(swap->m_asset.first.c_str(), swap->m_asset.second.c_str());
|
||||||
|
if (asset) {
|
||||||
|
add_swap(swap);
|
||||||
|
} else {
|
||||||
|
menu::notify::stacked(instance->get_string("Texture"), util::va::va("%s %s %s %s, %s", instance->get_string("Failed to swap texture").c_str(), swap->m_asset.second.c_str(), instance->get_string("in").c_str(), swap->m_asset.first.c_str(), instance->get_string("couldn't find texture in memory").c_str()), global::ui::g_error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
m_vars.m_swaps.push_back(swap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (std::exception& e) {
|
||||||
|
LOG_WARN("[Json] %s", e.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void swap_existing(texture_swap* swap) {
|
||||||
|
texture_swaps_menu* instance = texture_swaps_menu::get();
|
||||||
|
|
||||||
|
add_json(swap);
|
||||||
|
|
||||||
|
if (swap->m_toggled) {
|
||||||
|
util::fiber::pool::add([=] {
|
||||||
|
menu::control::simple_request_dictionary(swap->m_asset.first);
|
||||||
|
|
||||||
|
rage::types::grc_texture_dx11* asset = find_texture(swap->m_asset.first.c_str(), swap->m_asset.second.c_str());
|
||||||
|
if (asset) {
|
||||||
|
add_swap(swap);
|
||||||
|
} else {
|
||||||
|
menu::notify::stacked(instance->get_string("Texture"), util::va::va("%s %s %s %s, %s", instance->get_string("Failed to swap texture").c_str(), swap->m_asset.second.c_str(), instance->get_string("in").c_str(), swap->m_asset.first.c_str(), instance->get_string("couldn't find texture in memory").c_str()), global::ui::g_error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
remove_swap(swap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void texture_swaps_menu::load() {
|
||||||
|
set_name("Texture Swaps");
|
||||||
|
set_parent<misc_swaps_menu>();
|
||||||
|
|
||||||
|
add_option(submenu_option("Add Swap")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_submenu<texture_swaps_add_menu>());
|
||||||
|
|
||||||
|
add_option(break_option("Swaps")
|
||||||
|
.add_translate());
|
||||||
|
|
||||||
|
add_string("~m~None");
|
||||||
|
add_string("Texture");
|
||||||
|
add_string("Failed to swap texture");
|
||||||
|
add_string("in");
|
||||||
|
add_string("couldn't find texture in memory");
|
||||||
|
add_string("couldn't find");
|
||||||
|
add_string("in textures folder");
|
||||||
|
load_swaps(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void texture_swaps_menu::update() {}
|
||||||
|
|
||||||
|
void texture_swaps_menu::update_once() {
|
||||||
|
menu::textures::update();
|
||||||
|
|
||||||
|
clear_options(2);
|
||||||
|
|
||||||
|
for (texture_swap* swap : m_vars.m_swaps) {
|
||||||
|
add_option(toggle_option(swap->m_asset.first + ":" + swap->m_asset.second)
|
||||||
|
.add_toggle(swap->m_toggled)
|
||||||
|
.add_click([=] { swap_existing(swap); })
|
||||||
|
.add_tooltip(util::va::va("%s %s", get_string("Swapped with").c_str(), swap->m_texture.c_str())));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_vars.m_swaps.size() == 0) {
|
||||||
|
add_option(button_option(get_string("~m~None")).ref());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void texture_swaps_menu::feature_update() {}
|
||||||
|
|
||||||
|
texture_swaps_menu* g_instance;
|
||||||
|
texture_swaps_menu* texture_swaps_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new texture_swaps_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
33
GTAV/src/menu/base/submenus/main/misc/swaps/texture_swaps.h
Normal file
33
GTAV/src/menu/base/submenus/main/misc/swaps/texture_swaps.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class texture_swaps_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static texture_swaps_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
texture_swaps_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::swaps::texture::vars {
|
||||||
|
struct texture_swap {
|
||||||
|
std::pair<std::string, std::string> m_asset = {};
|
||||||
|
std::string m_texture = "";
|
||||||
|
bool m_toggled = false;
|
||||||
|
bool m_initialized = false;
|
||||||
|
rage::types::grc_texture_dx11 m_original;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct variables {
|
||||||
|
std::vector<texture_swap*> m_swaps;
|
||||||
|
};
|
||||||
|
|
||||||
|
void add_json(texture_swap* swap);
|
||||||
|
bool add_swap(texture_swap* swap);
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
@ -0,0 +1,95 @@
|
|||||||
|
#include "texture_swaps_add.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "texture_swaps.h"
|
||||||
|
#include "util/fiber_pool.h"
|
||||||
|
#include "menu/base/util/textures.h"
|
||||||
|
|
||||||
|
using namespace misc::swaps::texture::add::vars;
|
||||||
|
|
||||||
|
namespace misc::swaps::texture::add::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
scroll_struct<int> textures[200];
|
||||||
|
}
|
||||||
|
|
||||||
|
void texture_swaps_add_menu::load() {
|
||||||
|
set_name("Add Swap");
|
||||||
|
set_parent<texture_swaps_menu>();
|
||||||
|
|
||||||
|
m_vars.m_options.push_back(add_option(button_option("Input Dictionary")
|
||||||
|
.add_translate()
|
||||||
|
.add_keyboard("Input the dictionary! (Hint: name, hash or numeric)", 100, [](button_option* option, const char* dictionary) { m_vars.m_asset.first = dictionary; })));
|
||||||
|
|
||||||
|
m_vars.m_options.push_back(add_option(button_option("Input Texture")
|
||||||
|
.add_translate()
|
||||||
|
.add_keyboard("Input the texture! (Hint: name, hash or numeric)", 100, [](button_option* option, const char* texture) { m_vars.m_asset.second = texture; })));
|
||||||
|
|
||||||
|
m_vars.m_options.push_back(add_option(scroll_option<int>(SCROLL, "Image")
|
||||||
|
.add_translate()
|
||||||
|
.add_scroll(m_vars.m_image, 0, NUMOF(textures), textures)
|
||||||
|
.add_update([](scroll_option<int>* option, int position) {
|
||||||
|
option->add_scroll(m_vars.m_image, 0, (int)menu::textures::get_list().size(), textures);
|
||||||
|
})));
|
||||||
|
|
||||||
|
m_vars.m_options.push_back(add_option(button_option("Add Swap")
|
||||||
|
.add_translate()
|
||||||
|
.add_click([] {
|
||||||
|
if (!m_vars.m_asset.first.empty() && !m_vars.m_asset.second.empty()) {
|
||||||
|
util::fiber::pool::add([] {
|
||||||
|
misc::swaps::texture::vars::texture_swap* swap = new misc::swaps::texture::vars::texture_swap();
|
||||||
|
swap->m_asset = m_vars.m_asset;
|
||||||
|
swap->m_texture = menu::textures::get_list()[m_vars.m_image].m_name;
|
||||||
|
swap->m_toggled = true;
|
||||||
|
|
||||||
|
if (misc::swaps::texture::vars::add_swap(swap)) {
|
||||||
|
misc::swaps::texture::vars::add_json(swap);
|
||||||
|
misc::swaps::texture::vars::m_vars.m_swaps.push_back(swap);
|
||||||
|
|
||||||
|
menu::submenu::handler::set_submenu_previous(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})));
|
||||||
|
|
||||||
|
add_string("Dictionary");
|
||||||
|
add_string("Texture");
|
||||||
|
}
|
||||||
|
|
||||||
|
void texture_swaps_add_menu::update() {
|
||||||
|
char tooltip[100];
|
||||||
|
sprintf_s(tooltip, "%s=%s %s=%s", get_string("Dictionary").c_str(),
|
||||||
|
m_vars.m_asset.first.empty() ? "~italic~unset~s~" : m_vars.m_asset.first.c_str(),
|
||||||
|
get_string("Texture").c_str(),
|
||||||
|
m_vars.m_asset.second.empty() ? "~italic~unset~s~" : m_vars.m_asset.second.c_str());
|
||||||
|
|
||||||
|
for (std::shared_ptr<base_option>& option : m_vars.m_options) {
|
||||||
|
option->set_tooltip(tooltip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void texture_swaps_add_menu::update_once() {
|
||||||
|
menu::textures::update();
|
||||||
|
|
||||||
|
m_vars.m_image = 0;
|
||||||
|
m_vars.m_asset.first.clear();
|
||||||
|
m_vars.m_asset.second.clear();
|
||||||
|
|
||||||
|
for (std::size_t i = 0; i < menu::textures::get_list().size(); i++) {
|
||||||
|
if (i == 200) break;
|
||||||
|
textures[i].m_name = menu::textures::get_list()[i].m_name;
|
||||||
|
textures[i].m_result = (int)i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void texture_swaps_add_menu::feature_update() {}
|
||||||
|
|
||||||
|
texture_swaps_add_menu* g_instance;
|
||||||
|
texture_swaps_add_menu* texture_swaps_add_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new texture_swaps_add_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class texture_swaps_add_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static texture_swaps_add_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
texture_swaps_add_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::swaps::texture::add::vars {
|
||||||
|
struct variables {
|
||||||
|
int m_image;
|
||||||
|
std::pair<std::string, std::string> m_asset;
|
||||||
|
std::vector<std::shared_ptr<base_option>> m_options;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
84
GTAV/src/menu/base/submenus/main/misc/visions.cpp
Normal file
84
GTAV/src/menu/base/submenus/main/misc/visions.cpp
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#include "visions.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../misc.h"
|
||||||
|
#include "util/memory/memory.h"
|
||||||
|
|
||||||
|
using namespace misc::visions::vars;
|
||||||
|
|
||||||
|
namespace misc::visions::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
scroll_struct<const char*> visions[]{
|
||||||
|
{ localization("None", true), "" },
|
||||||
|
{ localization("Sunglasses", true), "sunglasses" },
|
||||||
|
{ localization("Camera BW", true), "CAMERA_BW" },
|
||||||
|
{ localization("Hint Cam", true), "Hint_cam" },
|
||||||
|
{ localization("UFO", true), "ufo" },
|
||||||
|
{ localization("UFO Deathray", true), "ufo_deathray" },
|
||||||
|
{ localization("Dying", true), "dying" },
|
||||||
|
{ localization("Underwater", true), "underwater" },
|
||||||
|
{ localization("Spectator", true), "spectator1" },
|
||||||
|
{ localization("Cops Splash", true), "CopsSPLASH" },
|
||||||
|
{ localization("Crane Cam", true), "crane_cam" },
|
||||||
|
{ localization("Secret Camera", true), "secret_camera" },
|
||||||
|
{ localization("Graveyard Shootout", true), "graveyard_shootout" },
|
||||||
|
{ localization("Cops", true), "cops" },
|
||||||
|
{ localization("Damage", true), "damage" },
|
||||||
|
{ localization("Bikers Splash", true), "BikersSPLASH" },
|
||||||
|
{ localization("Bikers", true), "Bikers" },
|
||||||
|
{ localization("Prologue Shootout", true), "prologue_shootout" },
|
||||||
|
{ localization("Vagos", true), "vagos" },
|
||||||
|
{ localization("Sniper", true), "sniper" },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void visions_menu::load() {
|
||||||
|
set_name("Visions");
|
||||||
|
set_parent<misc_menu>();
|
||||||
|
|
||||||
|
memcpy(m_vars.m_backup, (void*)(global::vars::g_set_seethrough + 0x14), 5);
|
||||||
|
|
||||||
|
add_option(toggle_option("Thermal Vision")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_click([] {
|
||||||
|
if (m_vars.m_thermal_vision) {
|
||||||
|
memory::write_vector(global::vars::g_set_seethrough + 0x14, { 0xB3, 0x01, 0x90, 0x90, 0x90 });
|
||||||
|
native::set_seethrough(true);
|
||||||
|
} else {
|
||||||
|
memory::write(global::vars::g_set_seethrough + 0x14, m_vars.m_backup, 5);
|
||||||
|
native::set_seethrough(false);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.add_toggle(m_vars.m_thermal_vision).add_savable(get_submenu_name_stack()));
|
||||||
|
|
||||||
|
add_option(break_option("Visions")
|
||||||
|
.add_translate());
|
||||||
|
|
||||||
|
for (int i = 0; i < NUMOF(visions); i++) {
|
||||||
|
add_option(radio_option(visions[i].m_name.get())
|
||||||
|
.add_translate()
|
||||||
|
.add_radio(m_vars.m_context)
|
||||||
|
.add_click([=] { if (i == 0) native::clear_timecycle_modifier(); }));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void visions_menu::update() {}
|
||||||
|
|
||||||
|
void visions_menu::update_once() {}
|
||||||
|
|
||||||
|
void visions_menu::feature_update() {
|
||||||
|
if (m_vars.m_context.m_selected != 0) {
|
||||||
|
native::set_timecycle_modifier(visions[m_vars.m_context.m_selected].m_result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
visions_menu* g_instance;
|
||||||
|
visions_menu* visions_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new visions_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
26
GTAV/src/menu/base/submenus/main/misc/visions.h
Normal file
26
GTAV/src/menu/base/submenus/main/misc/visions.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class visions_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static visions_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
visions_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace misc::visions::vars {
|
||||||
|
struct variables {
|
||||||
|
bool m_thermal_vision;
|
||||||
|
uint8_t m_backup[5];
|
||||||
|
|
||||||
|
radio_context m_context = { "commonmenu", "shop_mask_icon" };
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
133
GTAV/src/menu/base/submenus/main/network.cpp
Normal file
133
GTAV/src/menu/base/submenus/main/network.cpp
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
#include "network.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../main.h"
|
||||||
|
#include "util/fiber_pool.h"
|
||||||
|
#include "util/fiber.h"
|
||||||
|
#include "menu/base/util/global.h"
|
||||||
|
#include "rage/types/global_types.h"
|
||||||
|
#include "menu/base/util/panels.h"
|
||||||
|
#include "network/network_session_finder.h"
|
||||||
|
#include "network/network_host_toolkit.h"
|
||||||
|
#include "network/network_global_chat.h"
|
||||||
|
#include "network/network_recent_players.h"
|
||||||
|
#include "network/network_friends.h"
|
||||||
|
#include "network/network_player_search_join.h"
|
||||||
|
#include "network/network_spoofing.h"
|
||||||
|
#include "network/network_account.h"
|
||||||
|
#include "network/network_join_bypass.h"
|
||||||
|
#include "network/network_players.h"
|
||||||
|
#include "network/network_session.h"
|
||||||
|
|
||||||
|
using namespace network::vars;
|
||||||
|
|
||||||
|
namespace network::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
scroll_struct<int> transitions[] = {
|
||||||
|
{ localization("Public", true), 0 },
|
||||||
|
{ localization("Crew", true), 12 },
|
||||||
|
{ localization("Friend", true), 9 },
|
||||||
|
{ localization("Leave Online", true), -1 }
|
||||||
|
};
|
||||||
|
|
||||||
|
void find_new_session(int id) {
|
||||||
|
util::fiber::pool::add([=] {
|
||||||
|
if (id == -1) {
|
||||||
|
menu::script_global(rage::global::transition_session_flag + 2).as<int>() = id;
|
||||||
|
} else {
|
||||||
|
menu::script_global(rage::global::transition_session).as<int>() = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
menu::script_global(rage::global::transition_session_flag).as<int>() = 1;
|
||||||
|
util::fiber::sleep(200);
|
||||||
|
menu::script_global(rage::global::transition_session_flag).as<int>() = 0;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void network_menu::load() {
|
||||||
|
set_name("Network");
|
||||||
|
set_parent<main_menu>();
|
||||||
|
|
||||||
|
add_option(submenu_option("Players")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<network_players_menu>()
|
||||||
|
.add_click([] { global::vars::g_network_menu_type = SELECTED_PLAYER; }));
|
||||||
|
|
||||||
|
add_option(submenu_option("Session")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<network_session_menu>()
|
||||||
|
.add_click([] { global::vars::g_network_menu_type = ALL_PLAYERS; }));
|
||||||
|
|
||||||
|
add_option(submenu_option("Spoofing")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<network_spoofing_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Account")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<network_account_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Friends")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<network_friends_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Player Search")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<network_player_search_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Recent Players")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<network_recent_players_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Global Chat")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<network_global_chat_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option(XOR("Host Toolkit"))
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<network_host_toolkit_menu>());
|
||||||
|
|
||||||
|
add_option(submenu_option("Session Finder")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<network_session_finder_menu>());
|
||||||
|
|
||||||
|
/*add_option(submenu_option("Join Bypass")
|
||||||
|
.add_translate()
|
||||||
|
.add_submenu<network_join_bypass_menu>());*/
|
||||||
|
|
||||||
|
add_option(toggle_option("Join Notifications")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_toggle(m_vars.m_join_notifications).add_savable(get_submenu_name_stack())
|
||||||
|
.add_tooltip("Show when players are leaving and joining"));
|
||||||
|
|
||||||
|
add_option(scroll_option<int>(SCROLLSELECT, "Find New Session")
|
||||||
|
.add_translate().add_hotkey()
|
||||||
|
.add_scroll(m_vars.m_transition, 0, NUMOF(transitions), transitions)
|
||||||
|
.add_click([] { find_new_session(transitions[m_vars.m_transition].m_result); }));
|
||||||
|
}
|
||||||
|
|
||||||
|
void network_menu::update() {}
|
||||||
|
|
||||||
|
void network_menu::update_once() {
|
||||||
|
rage::api::get_social_club()->m_clear_queue = true;
|
||||||
|
menu::panels::toggle_panel_render("PANEL_PLAYER_INFO", false);
|
||||||
|
menu::panels::toggle_panel_render("PANEL_RECENT_PLAYER", false);
|
||||||
|
menu::panels::toggle_panel_render("PANEL_FRIEND", false);
|
||||||
|
menu::panels::toggle_panel_render("PANEL_OVERSEER", false);
|
||||||
|
menu::panels::toggle_panel_render("PANEL_SESSION", false);
|
||||||
|
menu::panels::toggle_panel_render("PANEL_SESSION_BROWSER", false);
|
||||||
|
menu::panels::toggle_panel_render("PANEL_PLAYER_SEARCH", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void network_menu::feature_update() {}
|
||||||
|
|
||||||
|
network_menu* g_instance;
|
||||||
|
network_menu* network_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new network_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
25
GTAV/src/menu/base/submenus/main/network.h
Normal file
25
GTAV/src/menu/base/submenus/main/network.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class network_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static network_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
network_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace network::vars {
|
||||||
|
struct variables {
|
||||||
|
int m_transition;
|
||||||
|
bool m_join_notifications = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
void find_new_session(int id);
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
#include "network_account_kd.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../network_account.h"
|
||||||
|
#include "menu/base/util/stats.h"
|
||||||
|
|
||||||
|
using namespace network::account::kd::vars;
|
||||||
|
|
||||||
|
namespace network::account::kd::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
float calculate() {
|
||||||
|
float calculated = 0.f;
|
||||||
|
if (m_vars.m_deaths == 0) {
|
||||||
|
calculated = (float)m_vars.m_kills;
|
||||||
|
} else calculated = (float)((float)m_vars.m_kills / (float)m_vars.m_deaths);
|
||||||
|
|
||||||
|
return calculated;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_kd() {
|
||||||
|
stats<int>::set("MPPLY_KILLS_PLAYERS", m_vars.m_kills);
|
||||||
|
stats<int>::set("MPPLY_DEATHS_PLAYER", m_vars.m_deaths);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void network_account_kd_menu::load() {
|
||||||
|
set_name("K/D");
|
||||||
|
set_parent<network_account_menu>();
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, "Set Kills")
|
||||||
|
.add_translate()
|
||||||
|
.add_number(m_vars.m_kills, "%i", 1).add_min(0).set_scroll_speed(0));
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, "Set Deaths")
|
||||||
|
.add_translate()
|
||||||
|
.add_number(m_vars.m_deaths, "%i", 1).add_min(0).set_scroll_speed(0));
|
||||||
|
|
||||||
|
m_vars.m_button = add_option(button_option("")
|
||||||
|
.add_click(set_kd));
|
||||||
|
|
||||||
|
add_string("Set K/D:");
|
||||||
|
}
|
||||||
|
|
||||||
|
void network_account_kd_menu::update() {
|
||||||
|
m_vars.m_calculated = calculate();
|
||||||
|
m_vars.m_button->set_name(std::string(util::va::va("%s %.2f", get_string("Set K/D:").c_str(), m_vars.m_calculated)).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void network_account_kd_menu::update_once() {
|
||||||
|
m_vars.m_kills = stats<int>::get("MPPLY_KILLS_PLAYERS");
|
||||||
|
m_vars.m_deaths = stats<int>::get("MPPLY_DEATHS_PLAYER");
|
||||||
|
}
|
||||||
|
|
||||||
|
void network_account_kd_menu::feature_update() {}
|
||||||
|
|
||||||
|
network_account_kd_menu* g_instance;
|
||||||
|
network_account_kd_menu* network_account_kd_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new network_account_kd_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class network_account_kd_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static network_account_kd_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
network_account_kd_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace network::account::kd::vars {
|
||||||
|
struct variables {
|
||||||
|
int m_kills;
|
||||||
|
int m_deaths;
|
||||||
|
float m_calculated;
|
||||||
|
std::shared_ptr<base_option> m_button;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
@ -0,0 +1,98 @@
|
|||||||
|
#include "network_account_level.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../network_account.h"
|
||||||
|
#include "menu/base/util/stats.h"
|
||||||
|
#include "menu/base/util/global.h"
|
||||||
|
#include "rage/types/global_types.h"
|
||||||
|
|
||||||
|
using namespace network::account::level::vars;
|
||||||
|
|
||||||
|
namespace network::account::level::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
scroll_struct<int> types[] = {
|
||||||
|
{ localization("RP", true), 0 },
|
||||||
|
{ localization("Crew", true), 1 }
|
||||||
|
};
|
||||||
|
|
||||||
|
int levels[] = { 1, 25, 50, 69, 75, 100, 120, 250, 420, 500, 666, 1000, 1234, 1337, 2000, 4000, 6969, 8000 };
|
||||||
|
|
||||||
|
int level_to_rp(int level) {
|
||||||
|
return menu::script_global(rage::global::_155_convert_rp_to_level).at(level + 1).as<int>();
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_rp_level() {
|
||||||
|
return stats<int>::get("CHAR_SET_RP_GIFT_ADMIN");
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_crew_level() {
|
||||||
|
return stats<int>::get("MPPLY_CREW_LOCAL_XP_0");
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_rp_level(int level) {
|
||||||
|
if (level > 8000) level = 8000;
|
||||||
|
|
||||||
|
stats<int>::set("CHAR_SET_RP_GIFT_ADMIN", level_to_rp(level));
|
||||||
|
menu::notify::stacked(network_account_level_menu::get()->get_name().get(), network_account_level_menu::get()->get_string("Rank set! Change lobbies for it to take effect :)"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_crew_level(int level) {
|
||||||
|
if (level > 8000) level = 8000;
|
||||||
|
stats<int>::set("MPPLY_CREW_LOCAL_XP_0", level_to_rp(level));
|
||||||
|
stats<int>::set("MPPLY_CREW_LOCAL_XP_1", level_to_rp(level));
|
||||||
|
stats<int>::set("MPPLY_CREW_LOCAL_XP_2", level_to_rp(level));
|
||||||
|
stats<int>::set("MPPLY_CREW_LOCAL_XP_3", level_to_rp(level));
|
||||||
|
stats<int>::set("MPPLY_CREW_LOCAL_XP_4", level_to_rp(level));
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_level(int level) {
|
||||||
|
if (m_vars.m_type == 0) set_rp_level(level);
|
||||||
|
else set_crew_level(level);
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_level() {
|
||||||
|
if (m_vars.m_type == 0) return get_rp_level();
|
||||||
|
else return get_crew_level();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void network_account_level_menu::load() {
|
||||||
|
set_name("Level");
|
||||||
|
set_parent<network_account_menu>();
|
||||||
|
|
||||||
|
add_option(scroll_option<int>(SCROLL, "Type")
|
||||||
|
.add_translate()
|
||||||
|
.add_scroll(m_vars.m_type, 0, NUMOF(types), types));
|
||||||
|
|
||||||
|
add_option(button_option("Input Level")
|
||||||
|
.add_translate()
|
||||||
|
.add_keyboard("Enter level", 4, [](button_option* option, const char* level) { set_level(std::stoi(level)); }));
|
||||||
|
|
||||||
|
add_option(break_option("Levels")
|
||||||
|
.add_translate());
|
||||||
|
|
||||||
|
for (int level : levels) {
|
||||||
|
add_option(button_option("Level " + std::to_string(level))
|
||||||
|
.add_translate()
|
||||||
|
.add_click([=] { set_level(level); }));
|
||||||
|
}
|
||||||
|
|
||||||
|
add_string("Rank set! Change lobbies for it to take effect :)");
|
||||||
|
}
|
||||||
|
|
||||||
|
void network_account_level_menu::update() {}
|
||||||
|
|
||||||
|
void network_account_level_menu::update_once() {}
|
||||||
|
|
||||||
|
void network_account_level_menu::feature_update() {}
|
||||||
|
|
||||||
|
network_account_level_menu* g_instance;
|
||||||
|
network_account_level_menu* network_account_level_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new network_account_level_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class network_account_level_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static network_account_level_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
network_account_level_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace network::account::level::vars {
|
||||||
|
struct variables {
|
||||||
|
int m_type;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
@ -0,0 +1,124 @@
|
|||||||
|
#include "network_account_outfits.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../network_account.h"
|
||||||
|
#include "menu/base/util/global.h"
|
||||||
|
#include "outfits/network_account_outfits_edit.h"
|
||||||
|
#include "rage/types/global_types.h"
|
||||||
|
|
||||||
|
using namespace network::account::outfits::vars;
|
||||||
|
|
||||||
|
namespace network::account::outfits::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
bool does_outfit_slot_exist(int outfit_index) {
|
||||||
|
return menu::script_global(rage::global::_155_outfit_editor_base).at(rage::global::_155_outfit_editor_base_offset).at(rage::global::_155_outfit_editor_offset_5).at(outfit_index).at(2).as<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
char* get_outfit_slot_name_ptr(int outfit_index) {
|
||||||
|
return menu::script_global(rage::global::_155_outfit_editor_base).at(rage::global::_155_outfit_editor_base_offset).at(rage::global::_155_outfit_editor_offset_6).at(outfit_index, 8).at(1).get<char>();
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_max_slots() {
|
||||||
|
return menu::script_global(rage::global::_155_outfit_editor_base2).at(rage::global::_155_outfit_editor_base2_offset).as<int>();
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_free_slots() {
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < get_max_slots(); i++) {
|
||||||
|
if (does_outfit_slot_exist(i)) {
|
||||||
|
if (!native::is_string_null_or_empty(get_outfit_slot_name_ptr(i))) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_free_slot_index() {
|
||||||
|
for (int i = 0; i < get_max_slots(); i++) {
|
||||||
|
if (native::is_string_null_or_empty(get_outfit_slot_name_ptr(i))) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void delete_slot(int slot) {
|
||||||
|
menu::script_global(rage::global::_155_outfit_editor_base).at(rage::global::_155_outfit_editor_base_offset).at(rage::global::_155_outfit_editor_offset_5).at(slot).at(2).as<int>() = 0;
|
||||||
|
*get_outfit_slot_name_ptr(slot) = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void save_outfit_edit() {
|
||||||
|
native::stat_save(0, false, 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void network_account_outfits_menu::load() {
|
||||||
|
set_name("Outfits");
|
||||||
|
set_parent<network_account_menu>();
|
||||||
|
|
||||||
|
add_string("Create Outfit");
|
||||||
|
add_string("Outfits");
|
||||||
|
add_string("New Outfit");
|
||||||
|
add_string("~m~None");
|
||||||
|
|
||||||
|
network_account_outfits_edit_menu::get();
|
||||||
|
}
|
||||||
|
|
||||||
|
void network_account_outfits_menu::update() {}
|
||||||
|
|
||||||
|
void network_account_outfits_menu::update_once() {
|
||||||
|
clear_options(0);
|
||||||
|
|
||||||
|
if (get_free_slots()) {
|
||||||
|
add_option(submenu_option(get_string("Create Outfit"))
|
||||||
|
.add_click([this] {
|
||||||
|
network_account_outfits_edit_menu::get()->set_name(get_string("New Outfit"), false, false);
|
||||||
|
network::account::outfits::edit::vars::m_vars.m_slot = get_free_slot_index();
|
||||||
|
})
|
||||||
|
.add_submenu<network_account_outfits_edit_menu>());
|
||||||
|
|
||||||
|
add_option(break_option(get_string("Outfits")));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool valid = false;
|
||||||
|
for (int i = 0; i < get_max_slots(); i++) {
|
||||||
|
if (does_outfit_slot_exist(i)) {
|
||||||
|
char* name = get_outfit_slot_name_ptr(i);
|
||||||
|
if (name) {
|
||||||
|
if (!native::is_string_null_or_empty(name)) {
|
||||||
|
valid = true;
|
||||||
|
|
||||||
|
add_option(submenu_option(name)
|
||||||
|
.add_submenu<network_account_outfits_edit_menu>()
|
||||||
|
.add_click([=] {
|
||||||
|
network_account_outfits_edit_menu::get()->set_name(name, false, false);
|
||||||
|
network::account::outfits::edit::vars::m_vars.m_slot = i;
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!valid) {
|
||||||
|
add_option(button_option(get_string("~m~None")).ref());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void network_account_outfits_menu::feature_update() {}
|
||||||
|
|
||||||
|
network_account_outfits_menu* g_instance;
|
||||||
|
network_account_outfits_menu* network_account_outfits_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new network_account_outfits_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class network_account_outfits_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static network_account_outfits_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
network_account_outfits_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace network::account::outfits::vars {
|
||||||
|
struct variables {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
bool does_outfit_slot_exist(int outfit_index);
|
||||||
|
char* get_outfit_slot_name_ptr(int outfit_index);
|
||||||
|
int get_max_slots();
|
||||||
|
int get_free_slots();
|
||||||
|
int get_free_slot_index();
|
||||||
|
void delete_slot(int slot);
|
||||||
|
void save_outfit_edit();
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
@ -0,0 +1,109 @@
|
|||||||
|
#include "network_account_times.h"
|
||||||
|
#include "menu/base/submenu_handler.h"
|
||||||
|
#include "../network_account.h"
|
||||||
|
#include "menu/base/util/stats.h"
|
||||||
|
|
||||||
|
using namespace network::account::times::vars;
|
||||||
|
|
||||||
|
namespace network::account::times::vars {
|
||||||
|
variables m_vars;
|
||||||
|
|
||||||
|
scroll_struct<const char*> stat_names[] = {
|
||||||
|
{ localization("In Multiplayer", true), "MP_PLAYING_TIME" },
|
||||||
|
{ localization("In Car", true), "TIME_IN_CAR" },
|
||||||
|
{ localization("In Cover", true), "TIME_IN_COVER" },
|
||||||
|
{ localization("In Water", true), "TIME_IN_WATER" },
|
||||||
|
{ localization("As a Passenger", true), "TIME_AS_A_PASSENGER" },
|
||||||
|
{ localization("As a Driver", true), "TIME_AS_A_DRIVER" },
|
||||||
|
{ localization("Flying", true), "TIME_SPENT_FLYING" },
|
||||||
|
{ localization("Swimming", true), "TIME_SWIMMING" },
|
||||||
|
{ localization("Underwater", true), "TIME_UNDERWATER" },
|
||||||
|
{ localization("Walking", true), "TIME_WALKING" },
|
||||||
|
{ localization("On Lost Bike", true), "TIME_ON_LOST_BIKE" },
|
||||||
|
{ localization("Riding a Bicycle", true), "TIME_DRIVING_BICYCLE" },
|
||||||
|
{ localization("Riding a Bike", true), "TIME_DRIVING_BIKE" },
|
||||||
|
{ localization("Driving a Boat", true), "TIME_DRIVING_BOAT" },
|
||||||
|
{ localization("Driving a Car", true), "TIME_DRIVING_CAR" },
|
||||||
|
{ localization("Flying a Helicopter", true), "TIME_DRIVING_HELI" },
|
||||||
|
{ localization("Flying a Plane", true), "TIME_DRIVING_PLANE" },
|
||||||
|
{ localization("Driving a Quad Bike", true), "TIME_DRIVING_QUADBIKE" },
|
||||||
|
{ localization("Driving a Submarine", true), "TIME_DRIVING_SUBMARINE" },
|
||||||
|
{ localization("Specating Crew Members", true), "TIME_SPECT_CREW_MEMBERS" },
|
||||||
|
{ localization("Spectating Freeroam", true), "TIME_SPECT_FREEROAM" },
|
||||||
|
{ localization("Spectating Friends", true), "TIME_SPECT_FRIENDS" },
|
||||||
|
{ localization("Spectating Friends (Non Crew)", true), "TIME_SPECT_FRIEND_NOT_CREW" },
|
||||||
|
{ localization("Spectating Jobs", true), "TIME_SPECT_JOBS" },
|
||||||
|
{ localization("Spectating Strangers", true), "TIME_SPECT_STRANGERS" },
|
||||||
|
};
|
||||||
|
|
||||||
|
void set_time() {
|
||||||
|
int math = (m_vars.m_days * 86400000) + (m_vars.m_hours * 3600000) + (m_vars.m_minutes * 60000) + (m_vars.m_seconds * 1000) + m_vars.m_milliseconds;
|
||||||
|
stats<int>::set(stat_names[m_vars.m_type].m_result, math);
|
||||||
|
}
|
||||||
|
|
||||||
|
void initialize() {
|
||||||
|
int total = stats<int>::get(stat_names[m_vars.m_type].m_result);
|
||||||
|
m_vars.m_days = total / 86400000;
|
||||||
|
total = total % 86400000;
|
||||||
|
m_vars.m_hours = total / 3600000;
|
||||||
|
total = total % 3600000;
|
||||||
|
m_vars.m_minutes = total / 60000;
|
||||||
|
total = total % 60000;
|
||||||
|
m_vars.m_seconds = total / 1000;
|
||||||
|
m_vars.m_milliseconds = total % 1000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void network_account_times_menu::load() {
|
||||||
|
set_name("Times");
|
||||||
|
set_parent<network_account_menu>();
|
||||||
|
|
||||||
|
add_option(scroll_option<const char*>(SCROLL, "Type")
|
||||||
|
.add_translate()
|
||||||
|
.add_scroll(m_vars.m_type, 0, NUMOF(stat_names), stat_names)
|
||||||
|
.add_click(initialize));
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, "Days")
|
||||||
|
.add_translate()
|
||||||
|
.add_number(m_vars.m_days, "%i", 1).add_min(0).add_max(std::numeric_limits<int>::max())
|
||||||
|
.add_click(set_time));
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, "Hours")
|
||||||
|
.add_translate()
|
||||||
|
.add_number(m_vars.m_hours, "%i", 1).add_min(0).add_max(24)
|
||||||
|
.add_click(set_time));
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, "Minutes")
|
||||||
|
.add_translate()
|
||||||
|
.add_number(m_vars.m_minutes, "%i", 1).add_min(0).add_max(60)
|
||||||
|
.add_click(set_time));
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, "Seconds")
|
||||||
|
.add_translate()
|
||||||
|
.add_number(m_vars.m_seconds, "%i", 1).add_min(0).add_max(60)
|
||||||
|
.add_click(set_time));
|
||||||
|
|
||||||
|
add_option(number_option<int>(SCROLL, "Milliseconds")
|
||||||
|
.add_translate()
|
||||||
|
.add_number(m_vars.m_milliseconds, "%i", 1).add_min(0).add_max(1000)
|
||||||
|
.add_click(set_time));
|
||||||
|
}
|
||||||
|
|
||||||
|
void network_account_times_menu::update() {}
|
||||||
|
|
||||||
|
void network_account_times_menu::update_once() {
|
||||||
|
initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
void network_account_times_menu::feature_update() {}
|
||||||
|
|
||||||
|
network_account_times_menu* g_instance;
|
||||||
|
network_account_times_menu* network_account_times_menu::get() {
|
||||||
|
if (g_instance == nullptr) {
|
||||||
|
g_instance = new network_account_times_menu();
|
||||||
|
g_instance->load();
|
||||||
|
menu::submenu::handler::add_submenu(g_instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_instance;
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "menu/base/submenu.h"
|
||||||
|
|
||||||
|
class network_account_times_menu : public menu::submenu::submenu {
|
||||||
|
public:
|
||||||
|
static network_account_times_menu* get();
|
||||||
|
|
||||||
|
void load() override;
|
||||||
|
void update_once() override;
|
||||||
|
void update() override;
|
||||||
|
void feature_update() override;
|
||||||
|
|
||||||
|
network_account_times_menu()
|
||||||
|
: menu::submenu::submenu() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace network::account::times::vars {
|
||||||
|
struct variables {
|
||||||
|
int m_type;
|
||||||
|
int m_days;
|
||||||
|
int m_hours;
|
||||||
|
int m_minutes;
|
||||||
|
int m_seconds;
|
||||||
|
int m_milliseconds;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern variables m_vars;
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user