diff options
Diffstat (limited to 'src/menu.cpp')
| -rw-r--r-- | src/menu.cpp | 108 |
1 files changed, 83 insertions, 25 deletions
diff --git a/src/menu.cpp b/src/menu.cpp index 6a3c607..bdb9531 100644 --- a/src/menu.cpp +++ b/src/menu.cpp | |||
| @@ -63,11 +63,13 @@ FeatureState g_skybox{false, 0}; // skybox.png image override | |||
| 63 | FeatureState g_projectiles{true, 0}; // grenade / rocket ESP | 63 | FeatureState g_projectiles{true, 0}; // grenade / rocket ESP |
| 64 | bool g_proj_fuse = true; | 64 | bool g_proj_fuse = true; |
| 65 | bool g_proj_radius = true; | 65 | bool g_proj_radius = true; |
| 66 | FeatureState g_chams{false, 0}; // flat model material, optional through walls | 66 | FeatureState g_chams{false, 0}; |
| 67 | bool g_chams_walls = true; | 67 | ChamsGroup g_chams_hostile{true, 3, {255, 60, 60}, true, 3, {255, 60, 60}}; |
| 68 | ChamsGroup g_chams_neutral{true, 3, {220, 220, 220}, false, 3, {220, 220, 220}}; | ||
| 69 | ChamsGroup g_chams_friendly{true, 3, {60, 255, 60}, false, 3, {60, 255, 60}}; | ||
| 68 | bool g_chams_viewmodel = false; | 70 | bool g_chams_viewmodel = false; |
| 69 | int g_chams_mat_index = 0; | 71 | int g_chams_vm_mat = 3; |
| 70 | int g_chams_rgb[3] = {255, 60, 60}; | 72 | int g_chams_vm_rgb[3] = {200, 200, 255}; |
| 71 | bool g_item_health = true; | 73 | bool g_item_health = true; |
| 72 | bool g_item_ammo = true; | 74 | bool g_item_ammo = true; |
| 73 | bool g_item_armor = true; | 75 | bool g_item_armor = true; |
| @@ -239,11 +241,20 @@ void config_save() { | |||
| 239 | fprintf(f, "[projectiles]\nactive=%d\nbind=%d\nfuse=%d\nradius=%d\n", | 241 | fprintf(f, "[projectiles]\nactive=%d\nbind=%d\nfuse=%d\nradius=%d\n", |
| 240 | g_projectiles.active, g_projectiles.bind, (int)g_proj_fuse, | 242 | g_projectiles.active, g_projectiles.bind, (int)g_proj_fuse, |
| 241 | (int)g_proj_radius); | 243 | (int)g_proj_radius); |
| 242 | fprintf(f, "[chams]\nactive=%d\nbind=%d\nwalls=%d\nviewmodel=%d\n" | 244 | fprintf(f, "[chams]\nactive=%d\nbind=%d\n", g_chams.active, g_chams.bind); |
| 243 | "material=%d\nr=%d\ng=%d\nb=%d\n", | 245 | auto save_chams = [&](const char *name, const ChamsGroup &g) { |
| 244 | g_chams.active, g_chams.bind, (int)g_chams_walls, | 246 | fprintf(f, "[%s]\nvis=%d\nvis_mat=%d\nvis_r=%d\nvis_g=%d\nvis_b=%d\n" |
| 245 | (int)g_chams_viewmodel, g_chams_mat_index, g_chams_rgb[0], | 247 | "inv=%d\ninv_mat=%d\ninv_r=%d\ninv_g=%d\ninv_b=%d\n", |
| 246 | g_chams_rgb[1], g_chams_rgb[2]); | 248 | name, (int)g.vis_on, g.vis_mat, g.vis_rgb[0], g.vis_rgb[1], |
| 249 | g.vis_rgb[2], (int)g.inv_on, g.inv_mat, g.inv_rgb[0], | ||
| 250 | g.inv_rgb[1], g.inv_rgb[2]); | ||
| 251 | }; | ||
| 252 | save_chams("chams_hostile", g_chams_hostile); | ||
| 253 | save_chams("chams_neutral", g_chams_neutral); | ||
| 254 | save_chams("chams_friendly", g_chams_friendly); | ||
| 255 | fprintf(f, "[chams_vm]\non=%d\nmat=%d\nr=%d\ng=%d\nb=%d\n", | ||
| 256 | (int)g_chams_viewmodel, g_chams_vm_mat, g_chams_vm_rgb[0], | ||
| 257 | g_chams_vm_rgb[1], g_chams_vm_rgb[2]); | ||
| 247 | fprintf(f, "[items]\nactive=%d\nbind=%d\nhealth=%d\nammo=%d\n" | 258 | fprintf(f, "[items]\nactive=%d\nbind=%d\nhealth=%d\nammo=%d\n" |
| 248 | "armor=%d\nweapons=%d\ncrates=%d\ndistance=%d\nmax_dist=%d\n" | 259 | "armor=%d\nweapons=%d\ncrates=%d\ndistance=%d\nmax_dist=%d\n" |
| 249 | "usable=%d\n", | 260 | "usable=%d\n", |
| @@ -294,10 +305,14 @@ static bool config_load() { | |||
| 294 | bool in_esp = false, in_bhop = false, in_aim = false, | 305 | bool in_esp = false, in_bhop = false, in_aim = false, |
| 295 | in_jumpbug = false, in_spread = false, in_items = false, | 306 | in_jumpbug = false, in_spread = false, in_items = false, |
| 296 | in_tint = false, in_fog = false, in_view = false, in_movement = false, | 307 | in_tint = false, in_fog = false, in_view = false, in_movement = false, |
| 297 | in_proj = false, in_chams = false; | 308 | in_proj = false; |
| 309 | ChamsGroup *chams_grp = nullptr; | ||
| 310 | bool in_chams_vm = false; | ||
| 298 | while (fgets(line, sizeof(line), f)) { | 311 | while (fgets(line, sizeof(line), f)) { |
| 299 | line[strcspn(line, "\r\n")] = 0; | 312 | line[strcspn(line, "\r\n")] = 0; |
| 300 | if (line[0] == '[') { | 313 | if (line[0] == '[') { |
| 314 | chams_grp = nullptr; | ||
| 315 | in_chams_vm = false; | ||
| 301 | if (strstr(line, "[bhop]")) | 316 | if (strstr(line, "[bhop]")) |
| 302 | cur = &g_bhop; | 317 | cur = &g_bhop; |
| 303 | else if (strstr(line, "[abh]")) | 318 | else if (strstr(line, "[abh]")) |
| @@ -324,6 +339,19 @@ static bool config_load() { | |||
| 324 | cur = &g_projectiles; | 339 | cur = &g_projectiles; |
| 325 | else if (strstr(line, "[chams]")) | 340 | else if (strstr(line, "[chams]")) |
| 326 | cur = &g_chams; | 341 | cur = &g_chams; |
| 342 | else if (strstr(line, "[chams_hostile]")) { | ||
| 343 | cur = nullptr; | ||
| 344 | chams_grp = &g_chams_hostile; | ||
| 345 | } else if (strstr(line, "[chams_neutral]")) { | ||
| 346 | cur = nullptr; | ||
| 347 | chams_grp = &g_chams_neutral; | ||
| 348 | } else if (strstr(line, "[chams_friendly]")) { | ||
| 349 | cur = nullptr; | ||
| 350 | chams_grp = &g_chams_friendly; | ||
| 351 | } else if (strstr(line, "[chams_vm]")) { | ||
| 352 | cur = nullptr; | ||
| 353 | in_chams_vm = true; | ||
| 354 | } | ||
| 327 | else if (strstr(line, "[aimbot]")) | 355 | else if (strstr(line, "[aimbot]")) |
| 328 | cur = &g_aimbot; | 356 | cur = &g_aimbot; |
| 329 | else if (strstr(line, "[triggerbot]")) | 357 | else if (strstr(line, "[triggerbot]")) |
| @@ -347,8 +375,8 @@ static bool config_load() { | |||
| 347 | in_view = strstr(line, "[view]") != nullptr; | 375 | in_view = strstr(line, "[view]") != nullptr; |
| 348 | in_movement = strstr(line, "[movement]") != nullptr; | 376 | in_movement = strstr(line, "[movement]") != nullptr; |
| 349 | in_proj = (cur == &g_projectiles); | 377 | in_proj = (cur == &g_projectiles); |
| 350 | in_chams = (cur == &g_chams); | 378 | } else if (cur || in_view || in_movement || chams_grp || |
| 351 | } else if (cur || in_view || in_movement) { | 379 | in_chams_vm) { |
| 352 | char *eq = strchr(line, '='); | 380 | char *eq = strchr(line, '='); |
| 353 | if (!eq) | 381 | if (!eq) |
| 354 | continue; | 382 | continue; |
| @@ -394,22 +422,50 @@ static bool config_load() { | |||
| 394 | else if (strcmp(key, "radius") == 0) | 422 | else if (strcmp(key, "radius") == 0) |
| 395 | g_proj_radius = atoi(val) != 0; | 423 | g_proj_radius = atoi(val) != 0; |
| 396 | } | 424 | } |
| 397 | if (in_chams) { | 425 | if (chams_grp) { |
| 398 | if (strcmp(key, "walls") == 0) | 426 | ChamsGroup &g = *chams_grp; |
| 399 | g_chams_walls = atoi(val) != 0; | 427 | if (strcmp(key, "vis") == 0) |
| 400 | else if (strcmp(key, "viewmodel") == 0) | 428 | g.vis_on = atoi(val) != 0; |
| 429 | else if (strcmp(key, "vis_mat") == 0) { | ||
| 430 | int v = atoi(val); | ||
| 431 | if (v < 0) v = 0; | ||
| 432 | if (v > 6) v = 6; | ||
| 433 | g.vis_mat = v; | ||
| 434 | } else if (strcmp(key, "vis_r") == 0 || strcmp(key, "vis_g") == 0 || | ||
| 435 | strcmp(key, "vis_b") == 0) { | ||
| 436 | int v = atoi(val); | ||
| 437 | if (v < 0) v = 0; | ||
| 438 | if (v > 255) v = 255; | ||
| 439 | g.vis_rgb[key[4] == 'r' ? 0 : key[4] == 'g' ? 1 : 2] = v; | ||
| 440 | } else if (strcmp(key, "inv") == 0) | ||
| 441 | g.inv_on = atoi(val) != 0; | ||
| 442 | else if (strcmp(key, "inv_mat") == 0) { | ||
| 443 | int v = atoi(val); | ||
| 444 | if (v < 0) v = 0; | ||
| 445 | if (v > 6) v = 6; | ||
| 446 | g.inv_mat = v; | ||
| 447 | } else if (strcmp(key, "inv_r") == 0 || strcmp(key, "inv_g") == 0 || | ||
| 448 | strcmp(key, "inv_b") == 0) { | ||
| 449 | int v = atoi(val); | ||
| 450 | if (v < 0) v = 0; | ||
| 451 | if (v > 255) v = 255; | ||
| 452 | g.inv_rgb[key[4] == 'r' ? 0 : key[4] == 'g' ? 1 : 2] = v; | ||
| 453 | } | ||
| 454 | } | ||
| 455 | if (in_chams_vm) { | ||
| 456 | if (strcmp(key, "on") == 0) | ||
| 401 | g_chams_viewmodel = atoi(val) != 0; | 457 | g_chams_viewmodel = atoi(val) != 0; |
| 402 | else if (strcmp(key, "material") == 0) { | 458 | else if (strcmp(key, "mat") == 0) { |
| 403 | int v = atoi(val); | 459 | int v = atoi(val); |
| 404 | if (v < 0) v = 0; | 460 | if (v < 0) v = 0; |
| 405 | if (v > 5) v = 5; | 461 | if (v > 6) v = 6; |
| 406 | g_chams_mat_index = v; | 462 | g_chams_vm_mat = v; |
| 407 | } else if (strcmp(key, "r") == 0 || strcmp(key, "g") == 0 || | 463 | } else if (strcmp(key, "r") == 0 || strcmp(key, "g") == 0 || |
| 408 | strcmp(key, "b") == 0) { | 464 | strcmp(key, "b") == 0) { |
| 409 | int v = atoi(val); | 465 | int v = atoi(val); |
| 410 | if (v < 0) v = 0; | 466 | if (v < 0) v = 0; |
| 411 | if (v > 255) v = 255; | 467 | if (v > 255) v = 255; |
| 412 | g_chams_rgb[key[0] == 'r' ? 0 : key[0] == 'g' ? 1 : 2] = v; | 468 | g_chams_vm_rgb[key[0] == 'r' ? 0 : key[0] == 'g' ? 1 : 2] = v; |
| 413 | } | 469 | } |
| 414 | } | 470 | } |
| 415 | if (in_aim) { | 471 | if (in_aim) { |
| @@ -637,12 +693,14 @@ void config_reset_defaults() { | |||
| 637 | g_proj_fuse = true; | 693 | g_proj_fuse = true; |
| 638 | g_proj_radius = true; | 694 | g_proj_radius = true; |
| 639 | g_chams = {false, 0}; | 695 | g_chams = {false, 0}; |
| 640 | g_chams_walls = true; | 696 | g_chams_hostile = {true, 3, {255, 60, 60}, true, 3, {255, 60, 60}}; |
| 697 | g_chams_neutral = {true, 3, {220, 220, 220}, false, 3, {220, 220, 220}}; | ||
| 698 | g_chams_friendly = {true, 3, {60, 255, 60}, false, 3, {60, 255, 60}}; | ||
| 641 | g_chams_viewmodel = false; | 699 | g_chams_viewmodel = false; |
| 642 | g_chams_mat_index = 0; | 700 | g_chams_vm_mat = 3; |
| 643 | g_chams_rgb[0] = 255; | 701 | g_chams_vm_rgb[0] = 200; |
| 644 | g_chams_rgb[1] = 60; | 702 | g_chams_vm_rgb[1] = 200; |
| 645 | g_chams_rgb[2] = 60; | 703 | g_chams_vm_rgb[2] = 255; |
| 646 | g_item_health = true; | 704 | g_item_health = true; |
| 647 | g_item_ammo = true; | 705 | g_item_ammo = true; |
| 648 | g_item_armor = true; | 706 | g_item_armor = true; |
