/
Random.hpp
235 lines (220 loc) · 9.81 KB
/
Random.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
#pragma once
class Random
{
private:
ConfigLoader* m_configLoader;
MyDisplay* m_display;
Level* m_level;
LocalPlayer* m_localPlayer;
std::vector<Player*>* m_players;
public:
Random(ConfigLoader* configLoader,
MyDisplay* display,
Level* level,
LocalPlayer* localPlayer,
std::vector<Player*>* players
)
{
m_configLoader = configLoader;
m_display = display;
m_level = level;
m_localPlayer = localPlayer;
m_players = players;
}
//==========---------[SUPERGLIDE]-------------==================
void superGlide(){
while (m_display->keyDown(XK_space))
{
static float startjumpTime = 0;
static bool startSg = false;
static float traversalProgressTmp = 0.0;
float worldtime = mem::Read<float>(m_localPlayer->base + OFFSET_TIME_BASE); // Current time
float traversalStartTime = mem::Read<float>(m_localPlayer->base + OFFSET_TRAVERSAL_START_TIME); // Time to start wall climbing
float traversalProgress = mem::Read<float>(m_localPlayer->base + OFFSET_TRAVERSAL_PROGRESS); // Wall climbing, if > 0.87 it is almost over.
auto HangOnWall = -(traversalStartTime - worldtime);
if (HangOnWall > 0.1 && HangOnWall < 0.12)
{
mem::Write<int>(OFF_REGION + OFF_IN_JUMP + 0x8, 4);
}
if (traversalProgress > 0.87f && !startSg && HangOnWall > 0.1f && HangOnWall < 1.5f)
{
//start SG
startjumpTime = worldtime;
startSg = true;
}
if (startSg)
{
//printf ("sg Press jump\n");
mem::Write<int>(OFF_REGION + OFF_IN_JUMP + 0x8, 5);
while (mem::Read<float>(m_localPlayer->base + OFFSET_TIME_BASE) - startjumpTime < 0.011);
{
mem::Write<int>(OFF_REGION + OFF_IN_DUCK + 0x8, 6);
std::this_thread::sleep_for(std::chrono::milliseconds(30));
mem::Write<int>(OFF_REGION + OFF_IN_JUMP + 0x8, 4);
std::this_thread::sleep_for(std::chrono::milliseconds(600));
}
startSg = false;
break;
}
}
// Automatic wall jump
int wallJumpNow = 0;
static float onWallTmp = 0;
float onWall = mem::Read<float>(m_localPlayer->base + OFFSET_WALL_RUN_START_TIME);
if (onWall > onWallTmp + 0.1) // 0.1
{
if (mem::Read<int>(OFF_REGION + OFFSET_IN_FORWARD) == 0)
{
wallJumpNow = 1;
//printf("wall jump Press jump\n");
mem::Write<int>(OFF_REGION + OFF_IN_JUMP + 0x8, 5);
std::this_thread::sleep_for(std::chrono::milliseconds(300));
mem::Write<int>(OFF_REGION + OFF_IN_JUMP + 0x8, 4);
}
}
onWallTmp = onWall;
static float onEdgeTmp = 0;
float onEdge = mem::Read<float>(m_localPlayer->base + OFFSET_TRAVERSAL_PROGRESS);
if (onEdge > onEdgeTmp + 0.1) // 0.1
{
if (mem::Read<int>(OFF_REGION + OFFSET_IN_FORWARD) == 0)
{
wallJumpNow = 2;
//printf("wall jump onEdge Press jump\n");
mem::Write<int>(OFF_REGION + OFF_IN_JUMP + 0x8, 5);
std::this_thread::sleep_for(std::chrono::milliseconds(300));
mem::Write<int>(OFF_REGION + OFF_IN_JUMP + 0x8, 4);
}
}
onEdgeTmp = onEdge;
}
//==========---------[QUICKTURN]-------------==================
void quickTurn()
{
Vector2D localYawtoClamp = m_localPlayer->viewAngles;
localYawtoClamp.Clamp();
float localYaw = localYawtoClamp.y;
// quickTurn
if(m_configLoader->FEATURE_QUICKTURN_ON){
if(m_display->keyDown(m_configLoader->FEATURE_QUICKTURN_BUTTON)){
m_localPlayer->setYaw((localYaw + 180));
std::this_thread::sleep_for(std::chrono::milliseconds(200));
}
}
}
//====================---------[PRINTLEVELS]-------------------------==================
void printLevels()
{
if(m_configLoader->FEATURE_PRINT_LEVELS_ON){
if(m_display->keyDown(m_configLoader->FEATURE_PRINT_LEVELS_BUTTON)){
printf("[N]=[NAME]-[LEVEL]-[LEGEND]\n\n");
for (auto i = 0; i < m_players->size(); i++)
{
Player *p = m_players->at(i);
if(!p->dead && p->isPlayer()){
int playerLvl = p->GetPlayerLevel();
std::string namePlayer = p->getPlayerName();
std::string modelName = p->getPlayerModelName();
if(p->friendly){
printf("\033[91m[%i]=[%s]-[%i]-[%s]\033[0m\n",
(i+1), namePlayer.c_str(), playerLvl, modelName.c_str());
}else{
printf("[%i]=[%s]-[%i]-[%s]\n",
(i+1), namePlayer.c_str(), playerLvl, modelName.c_str());
}
}
}
printf("\n");
}
}
}
//==================---------------[SPECTATORVIEW]-------------------==================
void spectatorView()
{
if(!m_level->playable) return;
int spectatorcount = 0;
std::vector<std::string> spectatorlist;
if(m_configLoader->FEATURE_SPECTATOR_ON){
for (int i = 0; i < m_players->size(); i++)
{
Player *p = m_players->at(i);
float targetyaw = p->view_yaw; // get Yaw player
float localyaw= m_localPlayer->local_yaw; // get Yaw LocalPlayer
//printf("LocalViewYaw: %f == PlayerViewYaw: %f \n", localyaw, targetyaw);
if (targetyaw == localyaw && p->currentHealth == 0){
spectatorcount++;
std::string namePlayer = p->getPlayerName();
spectatorlist.push_back(namePlayer);
}
}
const auto spectatorlist_size = static_cast<int>(spectatorlist.size());
if (spectatorcount > 0){
{
printf("\n-[%d]-- SPECTATORS -- \n", spectatorcount);
for (int i = 0; i < spectatorlist_size; i++) //show list of spectators by name
{
printf("---[%s]---\n", spectatorlist.at(i).c_str());
}
}
}
}
}
//==================---------[SKINCHANGER]-------------==========================================
void SkinChange()
{
if(!m_level->playable) return;
if(m_localPlayer->dead) return;
long wephandle = mem::Read<long>(m_localPlayer->base + OFF_WEAPON_HANDLE);
wephandle &= 0xffff;
long wep_entity = m_localPlayer->weaponEntity;
float curTime = mem::Read<float>(m_localPlayer->base + OFFSET_TIME_BASE);
float endTime = curTime +5.5;
std::map<int, std::vector<int>> weaponSkinMap;
//Light ammo weapons
weaponSkinMap[104] = { 6 }; //WEAPON_P2020
weaponSkinMap[80] = { 6 }; //WEAPON_RE45
weaponSkinMap[79] = { 11 }; //WEAPON_ALTERNATOR
weaponSkinMap[103] = { 2 }; //WEAPON_R99
weaponSkinMap[0] = { 10 }; //WEAPON_R301
weaponSkinMap[105] = { 2 }; //WEAPON_SPITFIRE
weaponSkinMap[88] = { 5 }; //WEAPON_G7
//Heavy ammo weapons
weaponSkinMap[111] = { 10}; // Car-SMG
weaponSkinMap[20] = { 6 }; // Rampage
weaponSkinMap[110] = { 9 }; //3030
weaponSkinMap[89] = {10 }; //WEAPON_HEMLOCK
weaponSkinMap[87] = { 8 }; //FlatLine
//Energy ammo weapons
weaponSkinMap[112] = { 8 }; //WEAPON_NEMESIS
weaponSkinMap[109] = { 9 }; //WEAPON_VOLT
weaponSkinMap[106] = { 7 }; //WEAPON_TRIPLE_TAKE
weaponSkinMap[92] = { 3 }; //WEAPON_LSTAR
weaponSkinMap[83] = { 5 }; //WEAPON_DEVOTION
weaponSkinMap[85] = { 8 }; //WEAPON_HAVOC
//Sniper ammo weapons
weaponSkinMap[1] = { 5 }; //WEAPON_SENTINEL
weaponSkinMap[82] = { 8 }; //WEAPON_CHARGE_RIFLE
weaponSkinMap[84] = { 7 }; //WEAPON_LONGBOW
//Shotgun ammo weapons
weaponSkinMap[95] = { 5 }; //WEAPON_MOZAMBIQUE
weaponSkinMap[86] = { 8 }; //WEAPON_EVA8
weaponSkinMap[102] = { 7 }; //WEAPON_PEACEKEEPER
weaponSkinMap[94] = { 5 }; //WEAPON_MASTIFF
//Legendary ammo weapons
weaponSkinMap[108] = { 5 }; //WEAPON_WINGMAN
weaponSkinMap[101] = { 7 }; //WEAPON_PROWLER
weaponSkinMap[2] = { 3 }; //WEAPON_BOCEK
weaponSkinMap[91] = { 6 }; //WEAPON_KRABER
weaponSkinMap[158] = { 3 }; //WEAPON_THROWING_KNIFE
weaponSkinMap[212] = { 2 }; //WEAPON_THERMITE_GRENADE
if (m_configLoader->FEATURE_SKINCHANGER_ON){
int waponIndex = mem::Read<int>(wep_entity + OFF_WEAPON_INDEX);
if (weaponSkinMap.count(waponIndex) == 0) return;
int skinID = weaponSkinMap[waponIndex][0];
//printf("Weapon: %s Activated Skin ID: %d \n", WeaponName(waponIndex).c_str(), skinID);
mem::Write<int>(m_localPlayer->base + OFF_SKIN, skinID+1);
mem::Write<int>(wep_entity + OFF_SKIN, skinID);
curTime = mem::Read<float>(m_localPlayer->base + OFFSET_TIME_BASE);
}
}
};