Recovered from the archived server. This was never posted on the forum, so there is no thread behind it and no author post to quote — the attribution below comes from the plugin's own register_plugin() call where it has one.
dod_admin_spec_esp
by Unknown · 2006-02-19
recovered from the server
From the first post
Files
| dod_admin_spec_esp_147.amxx | Compiled Plugin | 18 KB | Download | |
| dod_admin_spec_esp_176.amxx | Compiled Plugin | 20 KB | Download | |
| dod_admin_spec_esp_604.amxx | Compiled Plugin | 17 KB | Download | |
| dod_admin_spec_esp_836.amxx | Compiled Plugin | 18 KB | Download |
Decompiled source reconstructed
dod_admin_spec_esp_147.amxx was published compiled only. This Pawn was recovered from the
bytecode with Lysis — 772 lines. Strings, cvars and the plugin registration
survive; local variable names do not. It is an approximation, not the author's file.
// Decompiled from dod_admin_spec_esp_147.amxx by Lysis.n// This is RECONSTRUCTED source, not the author's original: withoutn// debug symbols the variable names are lost and control flow isn// rebuilt from bytecode. Treat it as a readable approximation.nnnew String:AUTH[76] = "AMXX DoD Community";nnew String:PLUGIN_NAME[96] = "DoD Admin Spectator ESP";nnew String:VERSION[16] = "0.3";nnew bool:g_is_spectating[33];nnew bool:ducking[33];nnew g_esp_box[33];nnew g_esp_line[33];nnew g_esp_aim[33];nnew g_esp_info[33];nnew g_who_viewing[33];nnew laser;nnew weapons[38][32] =n{n {n 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 75, 45, 66, 97, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 71, 114, 97, 118, 45, 75, 110, 105, 102, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 67, 111, 108, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 76, 117, 103, 101, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 71, 97, 114, 97, 110, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 99, 111, 112, 101, 100, 32, 75, 45, 57, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 84, 104, 111, 109, 112, 115, 111, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 84, 71, 45, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 112, 114, 105, 110, 103, 102, 105, 101, 108, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 75, 45, 57, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 66, 65, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 80, 45, 52, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 80, 105, 110, 97, 112, 112, 108, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 97, 115, 104, 101, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 71, 45, 52, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 51, 48, 45, 67, 97, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 104, 111, 118, 101, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 49, 45, 67, 97, 114, 98, 105, 110, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 71, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 71, 114, 101, 97, 115, 101, 103, 117, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 70, 71, 45, 52, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 75, 45, 52, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 69, 110, 102, 105, 101, 108, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 116, 101, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 66, 114, 101, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 87, 101, 98, 108, 101, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 66, 97, 122, 111, 111, 107, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 80, 97, 110, 122, 101, 114, 115, 99, 104, 114, 101, 99, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 80, 73, 65, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 99, 111, 112, 101, 100, 32, 70, 71, 45, 52, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 49, 45, 67, 97, 114, 98, 105, 110, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 99, 111, 112, 101, 100, 32, 69, 110, 102, 105, 101, 108, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 105, 108, 108, 115, 32, 66, 111, 109, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 121, 107, 101, 115, 32, 70, 97, 105, 114, 98, 97, 105, 114, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n }n};nFloat:operator*(Float:,_:)(Float:oper1, oper2)n{n return floatmul(oper1, float(oper2));n}nnbool:operator>(Float:,Float:)(Float:oper1, Float:oper2)n{n return 0 < floatcmp(oper1, oper2);n}nnbool:operator>=(Float:,Float:)(Float:oper1, Float:oper2)n{n return 0 <= floatcmp(oper1, oper2);n}nnbool:operator<(Float:,Float:)(Float:oper1, Float:oper2)n{n return 0 > floatcmp(oper1, oper2);n}nnbool:operator<(_:,Float:)(oper1, Float:oper2)n{n return 0 > floatcmp(float(oper1), oper2);n}nnbool:operator<=(Float:,Float:)(Float:oper1, Float:oper2)n{n return 0 >= floatcmp(oper1, oper2);n}nnIVecFVec(IVec[3], Float:FVec[3])n{n FVec[0] = float(IVec[0]);n FVec[1] = float(IVec[1]);n FVec[2] = float(IVec[2]);n return 1;n}nnget_user_button(id)n{n return entity_get_int(id, 34);n}nnVelocityByAim(iIndex, iVelocity, Float:vRetValue[3])n{n return velocity_by_aim(iIndex, iVelocity, vRetValue);n}nnpublic plugin_precache()n{n laser = precache_model("sprites/zbeam4.spr");n return 0;n}nnpublic plugin_init()n{n register_plugin(PLUGIN_NAME, VERSION, AUTH);n register_concmd("esp_start", "esp_start", 524288, "Starts the ESP For this User");n register_concmd("esp_stop", "esp_stop", 524288, "Stops the ESP For this User");n register_clcmd("esp_menu", "show_use_menu", 524288, "Shows admins ESP for Detecting Hackers");n register_menucmd(register_menuid("yESP Menu:", AUTH), 1023, "esp_menu_cmd");n register_event("TextMsg", "hook_spec_mode", "bd", "2&#Spec_Mode");n register_event("StatusValue", "hook_statusvalue", 7208, {0});n register_event("PTeam", "hook_team", 7284, "2=1", "2=2");n register_cvar("esp_active", 7368, AUTH, AUTH);n register_cvar("esp_repeat", "0.3", AUTH, AUTH);n return 0;n}nnpublic client_PreThink(id)n{n if (!is_user_connected(id))n {n return 0;n }n new button = get_user_button(id);n if (button)n {n if (button & 4)n {n ducking[id] = 1;n }n elsen {n ducking[id] = 0;n }n return 0;n }n return 0;n}nnpublic esp_start(id)n{n new var1;n if (!get_cvar_num("esp_active") || !get_user_flags(id, AUTH) & 524288)n {n return 1;n }n new param[1];n param[0] = id;n set_task(get_cvar_float("esp_repeat"), "draw_esp", id + 263548, param, 1, 7560, AUTH);n client_print(id, 4, "ESP Started");n return 0;n}nnpublic esp_stop(id)n{n new var1;n if (!get_cvar_num("esp_active") || !get_user_flags(id, AUTH) & 524288)n {n return 1;n }n remove_task(id + 263548, AUTH);n client_print(id, 4, "ESP Stopped");n return 0;n}nnpublic show_use_menu(id)n{n new var1;n if (!get_cvar_num("esp_active") || !get_user_flags(id, AUTH) & 524288)n {n return 1;n }n new szMenuBody[256];n new len = format(szMenuBody, 255, "yESP Menu:n");n len = format(szMenuBody[len], 255 - len, "nr1. wStart") + len;n len = format(szMenuBody[len], 255 - len, "nr2. wStop") + len;n new var2;n if (g_esp_box[id])n {n var2 = 7992;n }n elsen {n var2 = 8004;n }n len = format(szMenuBody[len], 255 - len, "nr3. wDraw Box %s", var2) + len;n new var3;n if (g_esp_line[id])n {n var3 = 8104;n }n elsen {n var3 = 8116;n }n len = format(szMenuBody[len], 255 - len, "nr4. wDraw Line %s", var3) + len;n new var4;n if (g_esp_aim[id])n {n var4 = 8212;n }n elsen {n var4 = 8224;n }n len = format(szMenuBody[len], 255 - len, "nr5. wAim Info %s", var4) + len;n new var5;n if (g_esp_info[id])n {n var5 = 8324;n }n elsen {n var5 = 8336;n }n len = format(szMenuBody[len], 255 - len, "nr6. wDraw Info %s", var5) + len;n len = format(szMenuBody[len], 255 - len, "nr0. wExit") + len;n show_menu(id, 575, szMenuBody, -1, {0});n return 1;n}nnpublic esp_menu_cmd(id, key)n{n switch (key)n {n case 0:n {n client_cmd(id, "esp_start");n }n case 1:n {n client_cmd(id, "esp_stop");n }n case 2:n {n g_esp_box[id] = 1 - g_esp_box[id];n }n case 3:n {n g_esp_line[id] = 1 - g_esp_line[id];n }n case 4:n {n g_esp_aim[id] = 1 - g_esp_aim[id];n }n case 5:n {n g_esp_info[id] = 1 - g_esp_info[id];n }n case 9:n {n return 1;n }n default:n {n }n }n client_cmd(id, "esp_menu");n return 1;n}nnpublic hook_spec_mode(id)n{n new string[32];n read_data(2, string, 31);n new var1;n if (equal(string, "#Spec_Mode2", AUTH) || equal(string, "#Spec_Mode4", AUTH))n {n g_is_spectating[id] = 1;n }n elsen {n g_is_spectating[id] = 0;n }n return 0;n}nnpublic hook_statusvalue(id)n{n g_who_viewing[id] = entity_get_int(id, 4);n return 0;n}nnpublic hook_team(id)n{n g_is_spectating[id] = 0;n remove_task(id + 263548, AUTH);n return 0;n}nnpublic client_putinserver(id)n{n g_is_spectating[id] = 0;n g_esp_box[id] = 1;n g_esp_line[id] = 1;n g_esp_aim[id] = 1;n g_esp_info[id] = 1;n g_who_viewing[id] = 0;n return 0;n}nnpublic client_disconnect(id)n{n g_is_spectating[id] = 0;n g_esp_box[id] = 1;n g_esp_line[id] = 1;n g_esp_aim[id] = 1;n g_esp_info[id] = 1;n g_who_viewing[id] = 0;n return 0;n}nnpublic draw_esp(param[])n{n new id = param[0];n new var1;n if (!get_cvar_num("esp_active") || is_user_alive(id) || !get_user_flags(id, AUTH) & 524288 || !g_is_spectating[id])n {n return 0;n }n new who_watching = g_who_viewing[id];n if (!is_user_connected(who_watching))n {n return 0;n }n new Float:viewed_origin[3] = 0.0;n new players[32];n new count;n get_players(players, count, 8660, 8668);n new x;n while (x < count)n {n if (!is_user_connected(who_watching))n {n return 0;n }n entity_get_vector(who_watching, AUTH, viewed_origin);n if (who_watching != players[x])n {n new target_team = get_user_team(players[x], {0}, AUTH);n new Float:target_origin[3] = 0.0;n entity_get_vector(players[x], AUTH, target_origin);n new Float:distance = vector_distance(viewed_origin, target_origin);n if (g_esp_line[id] == 1)n {n new width;n if (distance < 2040.0)n {n width = 255 - floatround(floatdiv(distance, 1090519040), AUTH) / 3;n }n elsen {n width = 1;n }n make_TE_BEAMENTPOINT(id, target_origin, width, target_team);n }n new Float:v_middle[3] = 0.0;n subVec(target_origin, viewed_origin, v_middle);n if (g_esp_box[id] == 1)n {n new Float:v_hitpoint[3] = 0.0;n trace_line(-1, viewed_origin, target_origin, v_hitpoint);n new Float:distance_to_hitpoint = vector_distance(viewed_origin, v_hitpoint);n new Float:scaled_bone_len = 0.0;n new Float:scaled_bone_width = 0.0;n if (ducking[players[x]])n {n scaled_bone_len = floatmul(floatdiv(distance_to_hitpoint, distance), floatsub(1112014848, 1099956224));n scaled_bone_width = floatmul(floatdiv(distance_to_hitpoint, distance), floatadd(1125515264, 1084227584));n }n elsen {n scaled_bone_len = floatmul(1112014848, floatdiv(distance_to_hitpoint, distance));n scaled_bone_width = floatmul(1125515264, floatdiv(distance_to_hitpoint, distance));n }n new Float:v_bone_start[3] = 0.0;n new Float:v_bone_end[3] = 0.0;n new Float:offset_vector[3] = 0.0;n normalize(v_middle, offset_vector, floatsub(distance_to_hitpoint, 1092616192));n new Float:eye_level[3] = 0.0;n copyVec(viewed_origin, eye_level);n if (ducking[players[x]])n {n new var2 = eye_level[2];n var2 = floatadd(1095027917, var2);n }n elsen {n new var3 = eye_level[2];n var3 = floatadd(1099694080, var3);n }n addVec(offset_vector, eye_level);n copyVec(offset_vector, v_bone_start);n copyVec(offset_vector, v_bone_end);n new var4 = v_bone_end[2];n var4 = floatsub(var4, scaled_bone_len);n new Float:distance_target_hitpoint = floatsub(distance, distance_to_hitpoint);n new actual_bright = 255;n if (distance_target_hitpoint < 2040.0)n {n actual_bright = 255 - floatround(floatdiv(distance_target_hitpoint, 1094713344), AUTH);n }n elsen {n actual_bright = 85;n }n make_TE_BEAMPOINTS(id, v_bone_start, v_bone_end, floatround(scaled_bone_width, AUTH), actual_bright);n }n if (g_esp_info[id] == 1)n {n if (is_in_viewcone(who_watching, target_origin))n {n new Float:xp = 2.0;n new Float:yp = 2.0;n get_screen_pos(id, v_middle, xp, yp);n draw_info(id, players[x], distance, xp, yp);n }n }n }n x++;n }n if (g_esp_aim[id] == 1)n {n new tmp[3];n new Float:start[3] = 0.0;n new Float:end[3] = 0.0;n get_user_origin(who_watching, tmp, 1);n IVecFVec(tmp, start);n get_user_origin(who_watching, tmp, "");n IVecFVec(tmp, end);n make_TE_AIMPOINTS(id, start, end);n }n return 0;n}nnFloat:get_screen_pos(target_id, Float:v_me_to_target[3], &Float:xp, &Float:yp)n{n new Float:v_aim[3] = 0.0;n VelocityByAim(target_id, 1, v_aim);n new Float:aim[3] = 0.0;n copyVec(v_aim, aim);n v_aim[2] = 0.0;n new Float:v_target[3] = 0.0;n copyVec(v_me_to_target, v_target);n v_target[2] = 0.0;n new Float:x_angle = 0.0;n xp = get_screen_pos_x(v_target, v_aim, x_angle);n yp = get_screen_pos_y(v_me_to_target, aim);n return x_angle;n}nnFloat:get_screen_pos_x(Float:target[3], Float:aim[3], &Float:xangle)n{n new Float:x_angle = floatacos(floatdiv(vectorProduct(aim, target), floatmul(getVecLen(aim), getVecLen(target))), 1);n new Float:x_pos = 0.0;n if (scalar_triple_product(aim, target) < 0)n {n x_angle *= -1;n }n new var1;n if (x_angle >= -45.0 && x_angle <= 45.0)n {n x_pos = floatsub(1065353216, floatdiv(floatadd(1065353216, floattan(x_angle, 1)), 1073741824));n xangle = x_angle;n return x_pos;n }n xangle = 0;n return -2.0;n}nnFloat:get_screen_pos_y(Float:v_target[3], Float:aim[3])n{n new Float:target[3] = 0.0;n rotateVectorZ(v_target, aim, target);n new Float:y_angle = floatacos(floatdiv(vectorProduct(aim, target), floatmul(getVecLen(aim), getVecLen(target))), 1);n new Float:y_pos = 0.0;n new Float:norm_target[3] = 0.0;n new Float:norm_aim[3] = 0.0;n normalize(v_target, norm_target, 1.0);n normalize(aim, norm_aim, 1.0);n if (norm_target[2] < norm_aim[2])n {n y_angle *= -1;n }n new var1;n if (y_angle >= -45.0 && y_angle <= 45.0)n {n y_pos = floatsub(1065353216, floatdiv(floatadd(1065353216, floattan(y_angle, 1)), 1073741824));n new var2;n if (y_pos >= 0.0 && y_pos <= 1.0)n {n return y_pos;n }n }n return -2.0;n}nndraw_info(id, target_id, Float:distance, Float:xp, Float:yp)n{n new var1;n if (xp > 0.0 && xp <= 1.0 && yp > 0.0 && yp <= 1.0)n {n set_hudmessage(255, 255, AUTH, floatabs(floatsub(xp, 1025758986)), floatabs(yp), AUTH, AUTH, get_cvar_float("esp_repeat"), 1036831949, 1045220557, 4);n new name[33];n get_user_name(target_id, name, 32);n new health = get_user_health(target_id);n new clip;n new ammo;n new weapon_id = dod_get_user_weapon(target_id, clip, ammo);n new var2;n if (weapon_id < 0 || weapon_id > 38)n {n weapon_id = 0;n }n show_hudmessage(id, "[%s]nHealth: %d Distance: %dn%snclip: %d ammo: %d", name, health, floatround(distance, AUTH), weapons[weapon_id], clip, ammo);n }n return 0;n}nnFloat:getVecLen(Float:Vec[3])n{n new Float:VecNull[3] = 0.0;n new Float:len = vector_distance(Vec, VecNull);n return len;n}nnFloat:scalar_triple_product(Float:a[3], Float:b[3])n{n new Float:up[3] = {0.0,0.0,4.6006E-41};n new Float:Ret[3] = 0.0;n Ret[0] = floatsub(floatmul(a[1], b[2]), floatmul(a[2], b[1]));n Ret[1] = floatsub(floatmul(a[2], b[0]), floatmul(a[0], b[2]));n Ret[2] = floatsub(floatmul(a[0], b[1]), floatmul(a[1], b[0]));n return vectorProduct(Ret, up);n}nnnormalize(Float:Vec[3], Float:Ret[3], Float:multiplier)n{n new Float:len = getVecLen(Vec);n copyVec(Vec, Ret);n new var1 = Ret;n var1[0] = floatdiv(var1[0], len);n new var2 = Ret[1];n var2 = floatdiv(var2, len);n new var3 = Ret[2];n var3 = floatdiv(var3, len);n new var4 = Ret;n var4[0] = floatmul(var4[0], multiplier);n new var5 = Ret[1];n var5 = floatmul(var5, multiplier);n new var6 = Ret[2];n var6 = floatmul(var6, multiplier);n return 0;n}nnrotateVectorZ(Float:Vec[3], Float:direction[3], Float:Ret[3])n{n new Float:tmp[3] = 0.0;n copyVec(Vec, tmp);n tmp[2] = 0.0;n new Float:dest_len = getVecLen(tmp);n copyVec(direction, tmp);n tmp[2] = 0.0;n new Float:tmp2[3] = 0.0;n normalize(tmp, tmp2, dest_len);n tmp2[2] = Vec[2];n copyVec(tmp2, Ret);n return 0;n}nnFloat:vectorProduct(Float:Vec1[3], Float:Vec2[3])n{n return floatadd(floatadd(floatmul(Vec1[0], Vec2[0]), floatmul(Vec1[1], Vec2[1])), floatmul(Vec1[2], Vec2[2]));n}nncopyVec(Float:Vec[3], Float:Ret[3])n{n Ret[0] = Vec[0];n Ret[1] = Vec[1];n Ret[2] = Vec[2];n return 0;n}nnsubVec(Float:Vec1[3], Float:Vec2[3], Float:Ret[3])n{n Ret[0] = floatsub(Vec1[0], Vec2[0]);n Ret[1] = floatsub(Vec1[1], Vec2[1]);n Ret[2] = floatsub(Vec1[2], Vec2[2]);n return 0;n}nnaddVec(Float:Vec1[3], Float:Vec2[3])n{n new var1 = Vec1;n var1[0] = floatadd(var1[0], Vec2[0]);n new var2 = Vec1[1];n var2 = floatadd(var2, Vec2[1]);n new var3 = Vec1[2];n var3 = floatadd(var3, Vec2[2]);n return 0;n}nnmake_TE_BEAMPOINTS(id, Float:Vec1[3], Float:Vec2[3], width, brightness)n{n message_begin(8, 23, 8932, id);n write_byte(AUTH);n write_coord(floatround(Vec1[0], AUTH));n write_coord(floatround(Vec1[1], AUTH));n write_coord(floatround(Vec1[2], AUTH));n write_coord(floatround(Vec2[0], AUTH));n write_coord(floatround(Vec2[1], AUTH));n write_coord(floatround(Vec2[2], AUTH));n write_short(laser);n write_byte("");n write_byte(AUTH);n write_byte(floatround(floatmul(1092616192, get_cvar_float("esp_repeat")), AUTH));n write_byte(width);n write_byte(AUTH);n write_byte(AUTH);n write_byte(255);n write_byte(AUTH);n write_byte(brightness);n write_byte(AUTH);n message_end();n return 0;n}nnmake_TE_BEAMENTPOINT(id, Float:target_origin[3], width, target_team)n{n message_begin(8, 23, 8988, id);n write_byte(1);n write_short(id);n write_coord(floatround(target_origin[0], AUTH));n write_coord(floatround(target_origin[1], AUTH));n write_coord(floatround(target_origin[2], AUTH));n write_short(laser);n write_byte(1);n write_byte(1000);n write_byte(floatround(floatmul(1092616192, get_cvar_float("esp_repeat")), AUTH));n write_byte(width);n write_byte(AUTH);n if (target_team == 1)n {n write_byte(50);n write_byte(AUTH);n write_byte(255);n }n elsen {n if (target_team == 2)n {n write_byte(255);n write_byte(AUTH);n write_byte(50);n }n }n write_byte(255);n write_byte(AUTH);n message_end();n return 0;n}nnmake_TE_AIMPOINTS(id, Float:Vec1[3], Float:Vec2[3])n{n message_begin(8, 23, 9044, id);n write_byte(AUTH);n write_coord(floatround(Vec1[0], AUTH));n write_coord(floatround(Vec1[1], AUTH));n write_coord(floatround(Vec1[2], AUTH));n write_coord(floatround(Vec2[0], AUTH));n write_coord(floatround(Vec2[1], AUTH));n write_coord(floatround(Vec2[2], AUTH));n write_short(laser);n write_byte("");n write_byte(AUTH);n write_byte(floatround(floatmul(1092616192, get_cvar_float("esp_repeat")), AUTH));n write_byte(1);n write_byte(AUTH);n write_byte(AUTH);n write_byte(255);n write_byte(AUTH);n write_byte(255);n write_byte(AUTH);n message_end();n return 0;n}nn
Decompiled source reconstructed
dod_admin_spec_esp_176.amxx was published compiled only. This Pawn was recovered from the
bytecode with Lysis — 764 lines. Strings, cvars and the plugin registration
survive; local variable names do not. It is an approximation, not the author's file.
// Decompiled from dod_admin_spec_esp_176.amxx by Lysis.n// This is RECONSTRUCTED source, not the author's original: withoutn// debug symbols the variable names are lost and control flow isn// rebuilt from bytecode. Treat it as a readable approximation.nnnew String:AUTH[76] = "AMXX DoD Community";nnew String:PLUGIN_NAME[96] = "DoD Admin Spectator ESP";nnew String:VERSION[16] = "0.3";nnew bool:g_is_spectating[33];nnew bool:ducking[33];nnew g_esp_box[33];nnew g_esp_line[33];nnew g_esp_aim[33];nnew g_esp_info[33];nnew laser;nnew weapons[38][32] =n{n {n 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 75, 45, 66, 97, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 71, 114, 97, 118, 45, 75, 110, 105, 102, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 67, 111, 108, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 76, 117, 103, 101, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 71, 97, 114, 97, 110, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 99, 111, 112, 101, 100, 32, 75, 45, 57, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 84, 104, 111, 109, 112, 115, 111, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 84, 71, 45, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 112, 114, 105, 110, 103, 102, 105, 101, 108, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 75, 45, 57, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 66, 65, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 80, 45, 52, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 80, 105, 110, 97, 112, 112, 108, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 97, 115, 104, 101, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 71, 45, 52, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 51, 48, 45, 67, 97, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 104, 111, 118, 101, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 49, 45, 67, 97, 114, 98, 105, 110, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 71, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 71, 114, 101, 97, 115, 101, 103, 117, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 70, 71, 45, 52, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 75, 45, 52, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 69, 110, 102, 105, 101, 108, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 116, 101, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 66, 114, 101, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 87, 101, 98, 108, 101, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 66, 97, 122, 111, 111, 107, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 80, 97, 110, 122, 101, 114, 115, 99, 104, 114, 101, 99, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 80, 73, 65, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 99, 111, 112, 101, 100, 32, 70, 71, 45, 52, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 49, 45, 67, 97, 114, 98, 105, 110, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 99, 111, 112, 101, 100, 32, 69, 110, 102, 105, 101, 108, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 105, 108, 108, 115, 32, 66, 111, 109, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 121, 107, 101, 115, 32, 70, 97, 105, 114, 98, 97, 105, 114, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n }n};nFloat:operator*(Float:,_:)(Float:oper1, oper2)n{n return floatmul(oper1, float(oper2));n}nnbool:operator>(Float:,Float:)(Float:oper1, Float:oper2)n{n return 0 < floatcmp(oper1, oper2);n}nnbool:operator>=(Float:,Float:)(Float:oper1, Float:oper2)n{n return 0 <= floatcmp(oper1, oper2);n}nnbool:operator<(Float:,Float:)(Float:oper1, Float:oper2)n{n return 0 > floatcmp(oper1, oper2);n}nnbool:operator<(_:,Float:)(oper1, Float:oper2)n{n return 0 > floatcmp(float(oper1), oper2);n}nnbool:operator<=(Float:,Float:)(Float:oper1, Float:oper2)n{n return 0 >= floatcmp(oper1, oper2);n}nnIVecFVec(IVec[3], Float:FVec[3])n{n FVec[0] = float(IVec[0]);n FVec[1] = float(IVec[1]);n FVec[2] = float(IVec[2]);n return 1;n}nnget_user_button(id)n{n return entity_get_int(id, 34);n}nnVelocityByAim(iIndex, iVelocity, Float:vRetValue[3])n{n return velocity_by_aim(iIndex, iVelocity, vRetValue);n}nnpublic plugin_precache()n{n laser = precache_model("sprites/zbeam4.spr");n return 0;n}nnpublic plugin_init()n{n register_plugin(PLUGIN_NAME, VERSION, AUTH);n register_concmd("esp_start", "esp_start", 524288, "Starts the ESP For this User");n register_concmd("esp_stop", "esp_stop", 524288, "Stops the ESP For this User");n register_clcmd("esp_menu", "show_use_menu", 524288, "Shows admins ESP for Detecting Hackers");n register_menucmd(register_menuid("yESP Menu:", AUTH), 1023, "esp_menu_cmd");n register_event("TextMsg", "hook_spec_mode", "bd", "2&#Spec_Mode");n register_event("PTeam", "hook_team", 7024, "2=1", "2=2");n register_cvar("esp_active", 7108, AUTH, AUTH);n register_cvar("esp_repeat", "0.3", AUTH, AUTH);n return 0;n}nnpublic client_PreThink(id)n{n if (!is_user_connected(id))n {n return 0;n }n new button = get_user_button(id);n if (button)n {n if (button & 4)n {n ducking[id] = 1;n }n elsen {n ducking[id] = 0;n }n return 0;n }n return 0;n}nnpublic esp_start(id)n{n new var1;n if (!get_cvar_num("esp_active") || !get_user_flags(id, AUTH) & 524288)n {n return 1;n }n new param[1];n param[0] = id;n set_task(get_cvar_float("esp_repeat"), "draw_esp", id + 263548, param, 1, 7300, AUTH);n client_print(id, 4, "ESP Started");n return 0;n}nnpublic esp_stop(id)n{n new var1;n if (!get_cvar_num("esp_active") || !get_user_flags(id, AUTH) & 524288)n {n return 1;n }n remove_task(id + 263548, AUTH);n client_print(id, 4, "ESP Stopped");n return 0;n}nnpublic show_use_menu(id)n{n new var1;n if (!get_cvar_num("esp_active") || !get_user_flags(id, AUTH) & 524288)n {n return 1;n }n new szMenuBody[256];n new len = format(szMenuBody, 255, "yESP Menu:n");n len = format(szMenuBody[len], 255 - len, "nr1. wStart") + len;n len = format(szMenuBody[len], 255 - len, "nr2. wStop") + len;n new var2;n if (g_esp_box[id])n {n var2 = 7732;n }n elsen {n var2 = 7744;n }n len = format(szMenuBody[len], 255 - len, "nr3. wDraw Box %s", var2) + len;n new var3;n if (g_esp_line[id])n {n var3 = 7844;n }n elsen {n var3 = 7856;n }n len = format(szMenuBody[len], 255 - len, "nr4. wDraw Line %s", var3) + len;n new var4;n if (g_esp_aim[id])n {n var4 = 7952;n }n elsen {n var4 = 7964;n }n len = format(szMenuBody[len], 255 - len, "nr5. wAim Info %s", var4) + len;n new var5;n if (g_esp_info[id])n {n var5 = 8064;n }n elsen {n var5 = 8076;n }n len = format(szMenuBody[len], 255 - len, "nr6. wDraw Info %s", var5) + len;n len = format(szMenuBody[len], 255 - len, "nr0. wExit") + len;n show_menu(id, 575, szMenuBody, -1, {0});n return 1;n}nnpublic esp_menu_cmd(id, key)n{n switch (key)n {n case 0:n {n client_cmd(id, "esp_start");n }n case 1:n {n client_cmd(id, "esp_stop");n }n case 2:n {n g_esp_box[id] = 1 - g_esp_box[id];n }n case 3:n {n g_esp_line[id] = 1 - g_esp_line[id];n }n case 4:n {n g_esp_aim[id] = 1 - g_esp_aim[id];n }n case 5:n {n g_esp_info[id] = 1 - g_esp_info[id];n }n case 9:n {n return 1;n }n default:n {n }n }n client_cmd(id, "esp_menu");n return 1;n}nnpublic hook_spec_mode(id)n{n new string[32];n read_data(2, string, 31);n new var1;n if (equal(string, "#Spec_Mode2", AUTH) || equal(string, "#Spec_Mode4", AUTH))n {n g_is_spectating[id] = 1;n }n elsen {n g_is_spectating[id] = 0;n }n return 0;n}nnpublic hook_team(id)n{n g_is_spectating[id] = 0;n remove_task(id + 263548, AUTH);n return 0;n}nnpublic client_putinserver(id)n{n g_is_spectating[id] = 0;n g_esp_box[id] = 1;n g_esp_line[id] = 1;n g_esp_aim[id] = 1;n g_esp_info[id] = 1;n return 0;n}nnpublic client_disconnect(id)n{n g_is_spectating[id] = 0;n g_esp_box[id] = 1;n g_esp_line[id] = 1;n g_esp_aim[id] = 1;n g_esp_info[id] = 1;n return 0;n}nnpublic draw_esp(param[])n{n new id = param[0];n new var1;n if (!get_cvar_num("esp_active") || is_user_alive(id) || !get_user_flags(id, AUTH) & 524288 || !g_is_spectating[id])n {n return 0;n }n new who_watching;n new body;n get_user_aiming(id, who_watching, body, 9999);n if (!is_user_connected(who_watching))n {n return 0;n }n new Float:viewed_origin[3] = 0.0;n new players[32];n new count;n get_players(players, count, 8400, 8408);n new x;n while (x < count)n {n if (!is_user_connected(who_watching))n {n return 0;n }n entity_get_vector(who_watching, AUTH, viewed_origin);n if (who_watching != players[x])n {n new target_team = get_user_team(players[x], {0}, AUTH);n new Float:target_origin[3] = 0.0;n entity_get_vector(players[x], AUTH, target_origin);n new Float:distance = vector_distance(viewed_origin, target_origin);n if (g_esp_line[id] == 1)n {n new width;n if (distance < 2040.0)n {n width = 255 - floatround(floatdiv(distance, 1090519040), AUTH) / 3;n }n elsen {n width = 1;n }n make_TE_BEAMENTPOINT(id, target_origin, width, target_team);n }n new Float:v_middle[3] = 0.0;n subVec(target_origin, viewed_origin, v_middle);n if (g_esp_box[id] == 1)n {n new Float:v_hitpoint[3] = 0.0;n trace_line(-1, viewed_origin, target_origin, v_hitpoint);n new Float:distance_to_hitpoint = vector_distance(viewed_origin, v_hitpoint);n new Float:scaled_bone_len = 0.0;n new Float:scaled_bone_width = 0.0;n if (ducking[players[x]])n {n scaled_bone_len = floatmul(floatdiv(distance_to_hitpoint, distance), floatsub(1112014848, 1099956224));n scaled_bone_width = floatmul(floatdiv(distance_to_hitpoint, distance), floatadd(1125515264, 1084227584));n }n elsen {n scaled_bone_len = floatmul(1112014848, floatdiv(distance_to_hitpoint, distance));n scaled_bone_width = floatmul(1125515264, floatdiv(distance_to_hitpoint, distance));n }n new Float:v_bone_start[3] = 0.0;n new Float:v_bone_end[3] = 0.0;n new Float:offset_vector[3] = 0.0;n normalize(v_middle, offset_vector, floatsub(distance_to_hitpoint, 1092616192));n new Float:eye_level[3] = 0.0;n copyVec(viewed_origin, eye_level);n if (ducking[players[x]])n {n new var2 = eye_level[2];n var2 = floatadd(1095027917, var2);n }n elsen {n new var3 = eye_level[2];n var3 = floatadd(1099694080, var3);n }n addVec(offset_vector, eye_level);n copyVec(offset_vector, v_bone_start);n copyVec(offset_vector, v_bone_end);n new var4 = v_bone_end[2];n var4 = floatsub(var4, scaled_bone_len);n new Float:distance_target_hitpoint = floatsub(distance, distance_to_hitpoint);n new actual_bright = 255;n if (distance_target_hitpoint < 2040.0)n {n actual_bright = 255 - floatround(floatdiv(distance_target_hitpoint, 1094713344), AUTH);n }n elsen {n actual_bright = 85;n }n make_TE_BEAMPOINTS(id, v_bone_start, v_bone_end, floatround(scaled_bone_width, AUTH), actual_bright);n }n if (g_esp_info[id] == 1)n {n if (is_in_viewcone(who_watching, target_origin))n {n new Float:xp = 2.0;n new Float:yp = 2.0;n get_screen_pos(id, v_middle, xp, yp);n draw_info(id, players[x], distance, xp, yp);n }n }n }n x++;n }n if (g_esp_aim[id] == 1)n {n new tmp[3];n new Float:start[3] = 0.0;n new Float:end[3] = 0.0;n get_user_origin(who_watching, tmp, 1);n IVecFVec(tmp, start);n get_user_origin(who_watching, tmp, "");n IVecFVec(tmp, end);n make_TE_AIMPOINTS(id, start, end);n }n return 0;n}nnFloat:get_screen_pos(target_id, Float:v_me_to_target[3], &Float:xp, &Float:yp)n{n new Float:v_aim[3] = 0.0;n VelocityByAim(target_id, 1, v_aim);n new Float:aim[3] = 0.0;n copyVec(v_aim, aim);n v_aim[2] = 0.0;n new Float:v_target[3] = 0.0;n copyVec(v_me_to_target, v_target);n v_target[2] = 0.0;n new Float:x_angle = 0.0;n xp = get_screen_pos_x(v_target, v_aim, x_angle);n yp = get_screen_pos_y(v_me_to_target, aim);n return x_angle;n}nnFloat:get_screen_pos_x(Float:target[3], Float:aim[3], &Float:xangle)n{n new Float:x_angle = floatacos(floatdiv(vectorProduct(aim, target), floatmul(getVecLen(aim), getVecLen(target))), 1);n new Float:x_pos = 0.0;n if (scalar_triple_product(aim, target) < 0)n {n x_angle *= -1;n }n new var1;n if (x_angle >= -45.0 && x_angle <= 45.0)n {n x_pos = floatsub(1065353216, floatdiv(floatadd(1065353216, floattan(x_angle, 1)), 1073741824));n xangle = x_angle;n return x_pos;n }n xangle = 0;n return -2.0;n}nnFloat:get_screen_pos_y(Float:v_target[3], Float:aim[3])n{n new Float:target[3] = 0.0;n rotateVectorZ(v_target, aim, target);n new Float:y_angle = floatacos(floatdiv(vectorProduct(aim, target), floatmul(getVecLen(aim), getVecLen(target))), 1);n new Float:y_pos = 0.0;n new Float:norm_target[3] = 0.0;n new Float:norm_aim[3] = 0.0;n normalize(v_target, norm_target, 1.0);n normalize(aim, norm_aim, 1.0);n if (norm_target[2] < norm_aim[2])n {n y_angle *= -1;n }n new var1;n if (y_angle >= -45.0 && y_angle <= 45.0)n {n y_pos = floatsub(1065353216, floatdiv(floatadd(1065353216, floattan(y_angle, 1)), 1073741824));n new var2;n if (y_pos >= 0.0 && y_pos <= 1.0)n {n return y_pos;n }n }n return -2.0;n}nndraw_info(id, target_id, Float:distance, Float:xp, Float:yp)n{n new var1;n if (xp > 0.0 && xp <= 1.0 && yp > 0.0 && yp <= 1.0)n {n set_hudmessage(255, 255, AUTH, floatabs(floatsub(xp, 1025758986)), floatabs(yp), AUTH, AUTH, get_cvar_float("esp_repeat"), 1036831949, 1045220557, 4);n new name[33];n get_user_name(target_id, name, 32);n new health = get_user_health(target_id);n new clip;n new ammo;n new weapon_id = dod_get_user_weapon(target_id, clip, ammo);n new var2;n if (weapon_id < 0 || weapon_id > 38)n {n weapon_id = 0;n }n show_hudmessage(id, "[%s]nHealth: %d Distance: %dn%snclip: %d ammo: %d", name, health, floatround(distance, AUTH), weapons[weapon_id], clip, ammo);n }n return 0;n}nnFloat:getVecLen(Float:Vec[3])n{n new Float:VecNull[3] = 0.0;n new Float:len = vector_distance(Vec, VecNull);n return len;n}nnFloat:scalar_triple_product(Float:a[3], Float:b[3])n{n new Float:up[3] = {0.0,0.0,4.6006E-41};n new Float:Ret[3] = 0.0;n Ret[0] = floatsub(floatmul(a[1], b[2]), floatmul(a[2], b[1]));n Ret[1] = floatsub(floatmul(a[2], b[0]), floatmul(a[0], b[2]));n Ret[2] = floatsub(floatmul(a[0], b[1]), floatmul(a[1], b[0]));n return vectorProduct(Ret, up);n}nnnormalize(Float:Vec[3], Float:Ret[3], Float:multiplier)n{n new Float:len = getVecLen(Vec);n copyVec(Vec, Ret);n new var1 = Ret;n var1[0] = floatdiv(var1[0], len);n new var2 = Ret[1];n var2 = floatdiv(var2, len);n new var3 = Ret[2];n var3 = floatdiv(var3, len);n new var4 = Ret;n var4[0] = floatmul(var4[0], multiplier);n new var5 = Ret[1];n var5 = floatmul(var5, multiplier);n new var6 = Ret[2];n var6 = floatmul(var6, multiplier);n return 0;n}nnrotateVectorZ(Float:Vec[3], Float:direction[3], Float:Ret[3])n{n new Float:tmp[3] = 0.0;n copyVec(Vec, tmp);n tmp[2] = 0.0;n new Float:dest_len = getVecLen(tmp);n copyVec(direction, tmp);n tmp[2] = 0.0;n new Float:tmp2[3] = 0.0;n normalize(tmp, tmp2, dest_len);n tmp2[2] = Vec[2];n copyVec(tmp2, Ret);n return 0;n}nnFloat:vectorProduct(Float:Vec1[3], Float:Vec2[3])n{n return floatadd(floatadd(floatmul(Vec1[0], Vec2[0]), floatmul(Vec1[1], Vec2[1])), floatmul(Vec1[2], Vec2[2]));n}nncopyVec(Float:Vec[3], Float:Ret[3])n{n Ret[0] = Vec[0];n Ret[1] = Vec[1];n Ret[2] = Vec[2];n return 0;n}nnsubVec(Float:Vec1[3], Float:Vec2[3], Float:Ret[3])n{n Ret[0] = floatsub(Vec1[0], Vec2[0]);n Ret[1] = floatsub(Vec1[1], Vec2[1]);n Ret[2] = floatsub(Vec1[2], Vec2[2]);n return 0;n}nnaddVec(Float:Vec1[3], Float:Vec2[3])n{n new var1 = Vec1;n var1[0] = floatadd(var1[0], Vec2[0]);n new var2 = Vec1[1];n var2 = floatadd(var2, Vec2[1]);n new var3 = Vec1[2];n var3 = floatadd(var3, Vec2[2]);n return 0;n}nnmake_TE_BEAMPOINTS(id, Float:Vec1[3], Float:Vec2[3], width, brightness)n{n message_begin(8, 23, 8672, id);n write_byte(AUTH);n write_coord(floatround(Vec1[0], AUTH));n write_coord(floatround(Vec1[1], AUTH));n write_coord(floatround(Vec1[2], AUTH));n write_coord(floatround(Vec2[0], AUTH));n write_coord(floatround(Vec2[1], AUTH));n write_coord(floatround(Vec2[2], AUTH));n write_short(laser);n write_byte("");n write_byte(AUTH);n write_byte(floatround(floatmul(1092616192, get_cvar_float("esp_repeat")), AUTH));n write_byte(width);n write_byte(AUTH);n write_byte(AUTH);n write_byte(255);n write_byte(AUTH);n write_byte(brightness);n write_byte(AUTH);n message_end();n return 0;n}nnmake_TE_BEAMENTPOINT(id, Float:target_origin[3], width, target_team)n{n message_begin(8, 23, 8728, id);n write_byte(1);n write_short(id);n write_coord(floatround(target_origin[0], AUTH));n write_coord(floatround(target_origin[1], AUTH));n write_coord(floatround(target_origin[2], AUTH));n write_short(laser);n write_byte(1);n write_byte(1000);n write_byte(floatround(floatmul(1092616192, get_cvar_float("esp_repeat")), AUTH));n write_byte(width);n write_byte(AUTH);n if (target_team == 1)n {n write_byte(50);n write_byte(AUTH);n write_byte(255);n }n elsen {n if (target_team == 2)n {n write_byte(255);n write_byte(AUTH);n write_byte(50);n }n }n write_byte(255);n write_byte(AUTH);n message_end();n return 0;n}nnmake_TE_AIMPOINTS(id, Float:Vec1[3], Float:Vec2[3])n{n message_begin(8, 23, 8784, id);n write_byte(AUTH);n write_coord(floatround(Vec1[0], AUTH));n write_coord(floatround(Vec1[1], AUTH));n write_coord(floatround(Vec1[2], AUTH));n write_coord(floatround(Vec2[0], AUTH));n write_coord(floatround(Vec2[1], AUTH));n write_coord(floatround(Vec2[2], AUTH));n write_short(laser);n write_byte("");n write_byte(AUTH);n write_byte(floatround(floatmul(1092616192, get_cvar_float("esp_repeat")), AUTH));n write_byte(1);n write_byte(AUTH);n write_byte(AUTH);n write_byte(255);n write_byte(AUTH);n write_byte(255);n write_byte(AUTH);n message_end();n return 0;n}nn
Decompiled source reconstructed
dod_admin_spec_esp_604.amxx was published compiled only. This Pawn was recovered from the
bytecode with Lysis — 764 lines. Strings, cvars and the plugin registration
survive; local variable names do not. It is an approximation, not the author's file.
// Decompiled from dod_admin_spec_esp_604.amxx by Lysis.n// This is RECONSTRUCTED source, not the author's original: withoutn// debug symbols the variable names are lost and control flow isn// rebuilt from bytecode. Treat it as a readable approximation.nnnew String:AUTH[76] = "AMXX DoD Community";nnew String:PLUGIN_NAME[96] = "DoD Admin Spectator ESP";nnew String:VERSION[16] = "0.3";nnew bool:g_is_spectating[33];nnew bool:ducking[33];nnew g_esp_box[33];nnew g_esp_line[33];nnew g_esp_aim[33];nnew g_esp_info[33];nnew laser;nnew weapons[38][32] =n{n {n 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 75, 45, 66, 97, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 71, 114, 97, 118, 45, 75, 110, 105, 102, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 67, 111, 108, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 76, 117, 103, 101, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 71, 97, 114, 97, 110, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 99, 111, 112, 101, 100, 32, 75, 45, 57, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 84, 104, 111, 109, 112, 115, 111, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 84, 71, 45, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 112, 114, 105, 110, 103, 102, 105, 101, 108, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 75, 45, 57, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 66, 65, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 80, 45, 52, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 80, 105, 110, 97, 112, 112, 108, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 97, 115, 104, 101, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 71, 45, 52, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 51, 48, 45, 67, 97, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 104, 111, 118, 101, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 49, 45, 67, 97, 114, 98, 105, 110, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 71, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 71, 114, 101, 97, 115, 101, 103, 117, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 70, 71, 45, 52, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 75, 45, 52, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 69, 110, 102, 105, 101, 108, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 116, 101, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 66, 114, 101, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 87, 101, 98, 108, 101, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 66, 97, 122, 111, 111, 107, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 80, 97, 110, 122, 101, 114, 115, 99, 104, 114, 101, 99, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 80, 73, 65, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 99, 111, 112, 101, 100, 32, 70, 71, 45, 52, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 49, 45, 67, 97, 114, 98, 105, 110, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 99, 111, 112, 101, 100, 32, 69, 110, 102, 105, 101, 108, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 105, 108, 108, 115, 32, 66, 111, 109, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 121, 107, 101, 115, 32, 70, 97, 105, 114, 98, 97, 105, 114, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n }n};nFloat:operator*(Float:,_:)(Float:oper1, oper2)n{n return floatmul(oper1, float(oper2));n}nnbool:operator>(Float:,Float:)(Float:oper1, Float:oper2)n{n return 0 < floatcmp(oper1, oper2);n}nnbool:operator>=(Float:,Float:)(Float:oper1, Float:oper2)n{n return 0 <= floatcmp(oper1, oper2);n}nnbool:operator<(Float:,Float:)(Float:oper1, Float:oper2)n{n return 0 > floatcmp(oper1, oper2);n}nnbool:operator<(_:,Float:)(oper1, Float:oper2)n{n return 0 > floatcmp(float(oper1), oper2);n}nnbool:operator<=(Float:,Float:)(Float:oper1, Float:oper2)n{n return 0 >= floatcmp(oper1, oper2);n}nnIVecFVec(IVec[3], Float:FVec[3])n{n FVec[0] = float(IVec[0]);n FVec[1] = float(IVec[1]);n FVec[2] = float(IVec[2]);n return 1;n}nnget_user_button(id)n{n return entity_get_int(id, 34);n}nnVelocityByAim(iIndex, iVelocity, Float:vRetValue[3])n{n return velocity_by_aim(iIndex, iVelocity, vRetValue);n}nnpublic plugin_precache()n{n laser = precache_model("sprites/zbeam4.spr");n return 0;n}nnpublic plugin_init()n{n register_plugin(PLUGIN_NAME, VERSION, AUTH);n register_concmd("esp_start", "esp_start", 524288, "Starts the ESP For this User");n register_concmd("esp_stop", "esp_stop", 524288, "Stops the ESP For this User");n register_clcmd("esp_menu", "show_use_menu", 524288, "Shows admins ESP for Detecting Hackers");n register_menucmd(register_menuid("yESP Menu:", AUTH), 1023, "esp_menu_cmd");n register_event("TextMsg", "hook_spec_mode", "bd", "2&#Spec_Mode");n register_event("PTeam", "hook_team", 7024, "2=1", "2=2");n register_cvar("esp_active", 7108, AUTH, AUTH);n register_cvar("esp_repeat", "0.3", AUTH, AUTH);n return 0;n}nnpublic client_PreThink(id)n{n if (!is_user_connected(id))n {n return 0;n }n new button = get_user_button(id);n if (button)n {n if (button & 4)n {n ducking[id] = 1;n }n elsen {n ducking[id] = 0;n }n return 0;n }n return 0;n}nnpublic esp_start(id)n{n new var1;n if (!get_cvar_num("esp_active") || !get_user_flags(id, AUTH) & 524288)n {n return 1;n }n new param[1];n param[0] = id;n set_task(get_cvar_float("esp_repeat"), "draw_esp", id + 263548, param, 1, 7300, AUTH);n client_print(id, 4, "ESP Started");n return 0;n}nnpublic esp_stop(id)n{n new var1;n if (!get_cvar_num("esp_active") || !get_user_flags(id, AUTH) & 524288)n {n return 1;n }n remove_task(id + 263548, AUTH);n client_print(id, 4, "ESP Stopped");n return 0;n}nnpublic show_use_menu(id)n{n new var1;n if (!get_cvar_num("esp_active") || !get_user_flags(id, AUTH) & 524288)n {n return 1;n }n new szMenuBody[256];n new len = format(szMenuBody, 255, "yESP Menu:n");n len = format(szMenuBody[len], 255 - len, "nr1. wStart") + len;n len = format(szMenuBody[len], 255 - len, "nr2. wStop") + len;n new var2;n if (g_esp_box[id])n {n var2 = 7732;n }n elsen {n var2 = 7744;n }n len = format(szMenuBody[len], 255 - len, "nr3. wDraw Box %s", var2) + len;n new var3;n if (g_esp_line[id])n {n var3 = 7844;n }n elsen {n var3 = 7856;n }n len = format(szMenuBody[len], 255 - len, "nr4. wDraw Line %s", var3) + len;n new var4;n if (g_esp_aim[id])n {n var4 = 7952;n }n elsen {n var4 = 7964;n }n len = format(szMenuBody[len], 255 - len, "nr5. wAim Info %s", var4) + len;n new var5;n if (g_esp_info[id])n {n var5 = 8064;n }n elsen {n var5 = 8076;n }n len = format(szMenuBody[len], 255 - len, "nr6. wDraw Info %s", var5) + len;n len = format(szMenuBody[len], 255 - len, "nr0. wExit") + len;n show_menu(id, 575, szMenuBody, -1, {0});n return 1;n}nnpublic esp_menu_cmd(id, key)n{n switch (key)n {n case 0:n {n client_cmd(id, "esp_start");n }n case 1:n {n client_cmd(id, "esp_stop");n }n case 2:n {n g_esp_box[id] = 1 - g_esp_box[id];n }n case 3:n {n g_esp_line[id] = 1 - g_esp_line[id];n }n case 4:n {n g_esp_aim[id] = 1 - g_esp_aim[id];n }n case 5:n {n g_esp_info[id] = 1 - g_esp_info[id];n }n case 9:n {n return 1;n }n default:n {n }n }n client_cmd(id, "esp_menu");n return 1;n}nnpublic hook_spec_mode(id)n{n new string[32];n read_data(2, string, 31);n new var1;n if (equal(string, "#Spec_Mode2", AUTH) || equal(string, "#Spec_Mode4", AUTH))n {n g_is_spectating[id] = 1;n }n elsen {n g_is_spectating[id] = 0;n }n return 0;n}nnpublic hook_team(id)n{n g_is_spectating[id] = 0;n remove_task(id + 263548, AUTH);n return 0;n}nnpublic client_putinserver(id)n{n g_is_spectating[id] = 0;n g_esp_box[id] = 1;n g_esp_line[id] = 1;n g_esp_aim[id] = 1;n g_esp_info[id] = 1;n return 0;n}nnpublic client_disconnect(id)n{n g_is_spectating[id] = 0;n g_esp_box[id] = 1;n g_esp_line[id] = 1;n g_esp_aim[id] = 1;n g_esp_info[id] = 1;n return 0;n}nnpublic draw_esp(param[])n{n new id = param[0];n new var1;n if (!get_cvar_num("esp_active") || is_user_alive(id) || !get_user_flags(id, AUTH) & 524288 || !g_is_spectating[id])n {n return 0;n }n new who_watching;n new body;n get_user_aiming(id, who_watching, body, 9999);n if (!is_user_connected(who_watching))n {n return 0;n }n new Float:viewed_origin[3] = 0.0;n new players[32];n new count;n get_players(players, count, 8400, 8408);n new x;n while (x < count)n {n if (!is_user_connected(who_watching))n {n return 0;n }n entity_get_vector(who_watching, AUTH, viewed_origin);n if (who_watching != players[x])n {n new target_team = get_user_team(players[x], {0}, AUTH);n new Float:target_origin[3] = 0.0;n entity_get_vector(players[x], AUTH, target_origin);n new Float:distance = vector_distance(viewed_origin, target_origin);n if (g_esp_line[id] == 1)n {n new width;n if (distance < 2040.0)n {n width = 255 - floatround(floatdiv(distance, 1090519040), AUTH) / 3;n }n elsen {n width = 1;n }n make_TE_BEAMENTPOINT(id, target_origin, width, target_team);n }n new Float:v_middle[3] = 0.0;n subVec(target_origin, viewed_origin, v_middle);n if (g_esp_box[id] == 1)n {n new Float:v_hitpoint[3] = 0.0;n trace_line(-1, viewed_origin, target_origin, v_hitpoint);n new Float:distance_to_hitpoint = vector_distance(viewed_origin, v_hitpoint);n new Float:scaled_bone_len = 0.0;n new Float:scaled_bone_width = 0.0;n if (ducking[players[x]])n {n scaled_bone_len = floatmul(floatdiv(distance_to_hitpoint, distance), floatsub(1112014848, 1099956224));n scaled_bone_width = floatmul(floatdiv(distance_to_hitpoint, distance), floatadd(1125515264, 1084227584));n }n elsen {n scaled_bone_len = floatmul(1112014848, floatdiv(distance_to_hitpoint, distance));n scaled_bone_width = floatmul(1125515264, floatdiv(distance_to_hitpoint, distance));n }n new Float:v_bone_start[3] = 0.0;n new Float:v_bone_end[3] = 0.0;n new Float:offset_vector[3] = 0.0;n normalize(v_middle, offset_vector, floatsub(distance_to_hitpoint, 1092616192));n new Float:eye_level[3] = 0.0;n copyVec(viewed_origin, eye_level);n if (ducking[players[x]])n {n new var2 = eye_level[2];n var2 = floatadd(1095027917, var2);n }n elsen {n new var3 = eye_level[2];n var3 = floatadd(1099694080, var3);n }n addVec(offset_vector, eye_level);n copyVec(offset_vector, v_bone_start);n copyVec(offset_vector, v_bone_end);n new var4 = v_bone_end[2];n var4 = floatsub(var4, scaled_bone_len);n new Float:distance_target_hitpoint = floatsub(distance, distance_to_hitpoint);n new actual_bright = 255;n if (distance_target_hitpoint < 2040.0)n {n actual_bright = 255 - floatround(floatdiv(distance_target_hitpoint, 1094713344), AUTH);n }n elsen {n actual_bright = 85;n }n make_TE_BEAMPOINTS(id, v_bone_start, v_bone_end, floatround(scaled_bone_width, AUTH), actual_bright);n }n if (g_esp_info[id] == 1)n {n if (is_in_viewcone(who_watching, target_origin))n {n new Float:xp = 2.0;n new Float:yp = 2.0;n get_screen_pos(id, v_middle, xp, yp);n draw_info(id, players[x], distance, xp, yp);n }n }n }n x++;n }n if (g_esp_aim[id] == 1)n {n new tmp[3];n new Float:start[3] = 0.0;n new Float:end[3] = 0.0;n get_user_origin(who_watching, tmp, 1);n IVecFVec(tmp, start);n get_user_origin(who_watching, tmp, "");n IVecFVec(tmp, end);n make_TE_AIMPOINTS(id, start, end);n }n return 0;n}nnFloat:get_screen_pos(target_id, Float:v_me_to_target[3], &Float:xp, &Float:yp)n{n new Float:v_aim[3] = 0.0;n VelocityByAim(target_id, 1, v_aim);n new Float:aim[3] = 0.0;n copyVec(v_aim, aim);n v_aim[2] = 0.0;n new Float:v_target[3] = 0.0;n copyVec(v_me_to_target, v_target);n v_target[2] = 0.0;n new Float:x_angle = 0.0;n xp = get_screen_pos_x(v_target, v_aim, x_angle);n yp = get_screen_pos_y(v_me_to_target, aim);n return x_angle;n}nnFloat:get_screen_pos_x(Float:target[3], Float:aim[3], &Float:xangle)n{n new Float:x_angle = floatacos(floatdiv(vectorProduct(aim, target), floatmul(getVecLen(aim), getVecLen(target))), 1);n new Float:x_pos = 0.0;n if (scalar_triple_product(aim, target) < 0)n {n x_angle *= -1;n }n new var1;n if (x_angle >= -45.0 && x_angle <= 45.0)n {n x_pos = floatsub(1065353216, floatdiv(floatadd(1065353216, floattan(x_angle, 1)), 1073741824));n xangle = x_angle;n return x_pos;n }n xangle = 0;n return -2.0;n}nnFloat:get_screen_pos_y(Float:v_target[3], Float:aim[3])n{n new Float:target[3] = 0.0;n rotateVectorZ(v_target, aim, target);n new Float:y_angle = floatacos(floatdiv(vectorProduct(aim, target), floatmul(getVecLen(aim), getVecLen(target))), 1);n new Float:y_pos = 0.0;n new Float:norm_target[3] = 0.0;n new Float:norm_aim[3] = 0.0;n normalize(v_target, norm_target, 1.0);n normalize(aim, norm_aim, 1.0);n if (norm_target[2] < norm_aim[2])n {n y_angle *= -1;n }n new var1;n if (y_angle >= -45.0 && y_angle <= 45.0)n {n y_pos = floatsub(1065353216, floatdiv(floatadd(1065353216, floattan(y_angle, 1)), 1073741824));n new var2;n if (y_pos >= 0.0 && y_pos <= 1.0)n {n return y_pos;n }n }n return -2.0;n}nndraw_info(id, target_id, Float:distance, Float:xp, Float:yp)n{n new var1;n if (xp > 0.0 && xp <= 1.0 && yp > 0.0 && yp <= 1.0)n {n set_hudmessage(255, 255, AUTH, floatabs(floatsub(xp, 1025758986)), floatabs(yp), AUTH, AUTH, get_cvar_float("esp_repeat"), 1036831949, 1045220557, 4);n new name[33];n get_user_name(target_id, name, 32);n new health = get_user_health(target_id);n new clip;n new ammo;n new weapon_id = dod_get_user_weapon(target_id, clip, ammo);n new var2;n if (weapon_id < 0 || weapon_id > 38)n {n weapon_id = 0;n }n show_hudmessage(id, "[%s]nHealth: %d Distance: %dn%snclip: %d ammo: %d", name, health, floatround(distance, AUTH), weapons[weapon_id], clip, ammo);n }n return 0;n}nnFloat:getVecLen(Float:Vec[3])n{n new Float:VecNull[3] = 0.0;n new Float:len = vector_distance(Vec, VecNull);n return len;n}nnFloat:scalar_triple_product(Float:a[3], Float:b[3])n{n new Float:up[3] = {0.0,0.0,4.6006E-41};n new Float:Ret[3] = 0.0;n Ret[0] = floatsub(floatmul(a[1], b[2]), floatmul(a[2], b[1]));n Ret[1] = floatsub(floatmul(a[2], b[0]), floatmul(a[0], b[2]));n Ret[2] = floatsub(floatmul(a[0], b[1]), floatmul(a[1], b[0]));n return vectorProduct(Ret, up);n}nnnormalize(Float:Vec[3], Float:Ret[3], Float:multiplier)n{n new Float:len = getVecLen(Vec);n copyVec(Vec, Ret);n new var1 = Ret;n var1[0] = floatdiv(var1[0], len);n new var2 = Ret[1];n var2 = floatdiv(var2, len);n new var3 = Ret[2];n var3 = floatdiv(var3, len);n new var4 = Ret;n var4[0] = floatmul(var4[0], multiplier);n new var5 = Ret[1];n var5 = floatmul(var5, multiplier);n new var6 = Ret[2];n var6 = floatmul(var6, multiplier);n return 0;n}nnrotateVectorZ(Float:Vec[3], Float:direction[3], Float:Ret[3])n{n new Float:tmp[3] = 0.0;n copyVec(Vec, tmp);n tmp[2] = 0.0;n new Float:dest_len = getVecLen(tmp);n copyVec(direction, tmp);n tmp[2] = 0.0;n new Float:tmp2[3] = 0.0;n normalize(tmp, tmp2, dest_len);n tmp2[2] = Vec[2];n copyVec(tmp2, Ret);n return 0;n}nnFloat:vectorProduct(Float:Vec1[3], Float:Vec2[3])n{n return floatadd(floatadd(floatmul(Vec1[0], Vec2[0]), floatmul(Vec1[1], Vec2[1])), floatmul(Vec1[2], Vec2[2]));n}nncopyVec(Float:Vec[3], Float:Ret[3])n{n Ret[0] = Vec[0];n Ret[1] = Vec[1];n Ret[2] = Vec[2];n return 0;n}nnsubVec(Float:Vec1[3], Float:Vec2[3], Float:Ret[3])n{n Ret[0] = floatsub(Vec1[0], Vec2[0]);n Ret[1] = floatsub(Vec1[1], Vec2[1]);n Ret[2] = floatsub(Vec1[2], Vec2[2]);n return 0;n}nnaddVec(Float:Vec1[3], Float:Vec2[3])n{n new var1 = Vec1;n var1[0] = floatadd(var1[0], Vec2[0]);n new var2 = Vec1[1];n var2 = floatadd(var2, Vec2[1]);n new var3 = Vec1[2];n var3 = floatadd(var3, Vec2[2]);n return 0;n}nnmake_TE_BEAMPOINTS(id, Float:Vec1[3], Float:Vec2[3], width, brightness)n{n message_begin(8, 23, 8672, id);n write_byte(AUTH);n write_coord(floatround(Vec1[0], AUTH));n write_coord(floatround(Vec1[1], AUTH));n write_coord(floatround(Vec1[2], AUTH));n write_coord(floatround(Vec2[0], AUTH));n write_coord(floatround(Vec2[1], AUTH));n write_coord(floatround(Vec2[2], AUTH));n write_short(laser);n write_byte("");n write_byte(AUTH);n write_byte(floatround(floatmul(1092616192, get_cvar_float("esp_repeat")), AUTH));n write_byte(width);n write_byte(AUTH);n write_byte(AUTH);n write_byte(255);n write_byte(AUTH);n write_byte(brightness);n write_byte(AUTH);n message_end();n return 0;n}nnmake_TE_BEAMENTPOINT(id, Float:target_origin[3], width, target_team)n{n message_begin(8, 23, 8728, id);n write_byte(1);n write_short(id);n write_coord(floatround(target_origin[0], AUTH));n write_coord(floatround(target_origin[1], AUTH));n write_coord(floatround(target_origin[2], AUTH));n write_short(laser);n write_byte(1);n write_byte(1000);n write_byte(floatround(floatmul(1092616192, get_cvar_float("esp_repeat")), AUTH));n write_byte(width);n write_byte(AUTH);n if (target_team == 1)n {n write_byte(50);n write_byte(AUTH);n write_byte(255);n }n elsen {n if (target_team == 2)n {n write_byte(255);n write_byte(AUTH);n write_byte(50);n }n }n write_byte(255);n write_byte(AUTH);n message_end();n return 0;n}nnmake_TE_AIMPOINTS(id, Float:Vec1[3], Float:Vec2[3])n{n message_begin(8, 23, 8784, id);n write_byte(AUTH);n write_coord(floatround(Vec1[0], AUTH));n write_coord(floatround(Vec1[1], AUTH));n write_coord(floatround(Vec1[2], AUTH));n write_coord(floatround(Vec2[0], AUTH));n write_coord(floatround(Vec2[1], AUTH));n write_coord(floatround(Vec2[2], AUTH));n write_short(laser);n write_byte("");n write_byte(AUTH);n write_byte(floatround(floatmul(1092616192, get_cvar_float("esp_repeat")), AUTH));n write_byte(1);n write_byte(AUTH);n write_byte(AUTH);n write_byte(255);n write_byte(AUTH);n write_byte(255);n write_byte(AUTH);n message_end();n return 0;n}nn
Decompiled source reconstructed
dod_admin_spec_esp_836.amxx was published compiled only. This Pawn was recovered from the
bytecode with Lysis — 772 lines. Strings, cvars and the plugin registration
survive; local variable names do not. It is an approximation, not the author's file.
// Decompiled from dod_admin_spec_esp_836.amxx by Lysis.n// This is RECONSTRUCTED source, not the author's original: withoutn// debug symbols the variable names are lost and control flow isn// rebuilt from bytecode. Treat it as a readable approximation.nnnew String:AUTH[76] = "AMXX DoD Community";nnew String:PLUGIN_NAME[96] = "DoD Admin Spectator ESP";nnew String:VERSION[16] = "0.3";nnew bool:g_is_spectating[33];nnew bool:ducking[33];nnew g_esp_box[33];nnew g_esp_line[33];nnew g_esp_aim[33];nnew g_esp_info[33];nnew g_who_viewing[33];nnew laser;nnew weapons[38][32] =n{n {n 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 75, 45, 66, 97, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 71, 114, 97, 118, 45, 75, 110, 105, 102, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 67, 111, 108, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 76, 117, 103, 101, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 71, 97, 114, 97, 110, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 99, 111, 112, 101, 100, 32, 75, 45, 57, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 84, 104, 111, 109, 112, 115, 111, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 84, 71, 45, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 112, 114, 105, 110, 103, 102, 105, 101, 108, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 75, 45, 57, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 66, 65, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 80, 45, 52, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 80, 105, 110, 97, 112, 112, 108, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 97, 115, 104, 101, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 71, 45, 52, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 51, 48, 45, 67, 97, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 104, 111, 118, 101, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 49, 45, 67, 97, 114, 98, 105, 110, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 71, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 71, 114, 101, 97, 115, 101, 103, 117, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 70, 71, 45, 52, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 75, 45, 52, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 69, 110, 102, 105, 101, 108, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 116, 101, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 66, 114, 101, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 87, 101, 98, 108, 101, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 66, 97, 122, 111, 111, 107, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 80, 97, 110, 122, 101, 114, 115, 99, 104, 114, 101, 99, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 80, 73, 65, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 99, 111, 112, 101, 100, 32, 70, 71, 45, 52, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 49, 45, 67, 97, 114, 98, 105, 110, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 99, 111, 112, 101, 100, 32, 69, 110, 102, 105, 101, 108, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 77, 105, 108, 108, 115, 32, 66, 111, 109, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n },n {n 83, 121, 107, 101, 115, 32, 70, 97, 105, 114, 98, 97, 105, 114, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0n }n};nFloat:operator*(Float:,_:)(Float:oper1, oper2)n{n return floatmul(oper1, float(oper2));n}nnbool:operator>(Float:,Float:)(Float:oper1, Float:oper2)n{n return 0 < floatcmp(oper1, oper2);n}nnbool:operator>=(Float:,Float:)(Float:oper1, Float:oper2)n{n return 0 <= floatcmp(oper1, oper2);n}nnbool:operator<(Float:,Float:)(Float:oper1, Float:oper2)n{n return 0 > floatcmp(oper1, oper2);n}nnbool:operator<(_:,Float:)(oper1, Float:oper2)n{n return 0 > floatcmp(float(oper1), oper2);n}nnbool:operator<=(Float:,Float:)(Float:oper1, Float:oper2)n{n return 0 >= floatcmp(oper1, oper2);n}nnIVecFVec(IVec[3], Float:FVec[3])n{n FVec[0] = float(IVec[0]);n FVec[1] = float(IVec[1]);n FVec[2] = float(IVec[2]);n return 1;n}nnget_user_button(id)n{n return entity_get_int(id, 34);n}nnVelocityByAim(iIndex, iVelocity, Float:vRetValue[3])n{n return velocity_by_aim(iIndex, iVelocity, vRetValue);n}nnpublic plugin_precache()n{n laser = precache_model("sprites/zbeam4.spr");n return 0;n}nnpublic plugin_init()n{n register_plugin(PLUGIN_NAME, VERSION, AUTH);n register_concmd("esp_start", "esp_start", 524288, "Starts the ESP For this User");n register_concmd("esp_stop", "esp_stop", 524288, "Stops the ESP For this User");n register_clcmd("esp_menu", "show_use_menu", 524288, "Shows admins ESP for Detecting Hackers");n register_menucmd(register_menuid("yESP Menu:", AUTH), 1023, "esp_menu_cmd");n register_event("TextMsg", "hook_spec_mode", "bd", "2&#Spec_Mode");n register_event("StatusValue", "hook_statusvalue", 7208, {0});n register_event("PTeam", "hook_team", 7284, "2=1", "2=2");n register_cvar("esp_active", 7368, AUTH, AUTH);n register_cvar("esp_repeat", "0.3", AUTH, AUTH);n return 0;n}nnpublic client_PreThink(id)n{n if (!is_user_connected(id))n {n return 0;n }n new button = get_user_button(id);n if (button)n {n if (button & 4)n {n ducking[id] = 1;n }n elsen {n ducking[id] = 0;n }n return 0;n }n return 0;n}nnpublic esp_start(id)n{n new var1;n if (!get_cvar_num("esp_active") || !get_user_flags(id, AUTH) & 524288)n {n return 1;n }n new param[1];n param[0] = id;n set_task(get_cvar_float("esp_repeat"), "draw_esp", id + 263548, param, 1, 7560, AUTH);n client_print(id, 4, "ESP Started");n return 0;n}nnpublic esp_stop(id)n{n new var1;n if (!get_cvar_num("esp_active") || !get_user_flags(id, AUTH) & 524288)n {n return 1;n }n remove_task(id + 263548, AUTH);n client_print(id, 4, "ESP Stopped");n return 0;n}nnpublic show_use_menu(id)n{n new var1;n if (!get_cvar_num("esp_active") || !get_user_flags(id, AUTH) & 524288)n {n return 1;n }n new szMenuBody[256];n new len = format(szMenuBody, 255, "yESP Menu:n");n len = format(szMenuBody[len], 255 - len, "nr1. wStart") + len;n len = format(szMenuBody[len], 255 - len, "nr2. wStop") + len;n new var2;n if (g_esp_box[id])n {n var2 = 7992;n }n elsen {n var2 = 8004;n }n len = format(szMenuBody[len], 255 - len, "nr3. wDraw Box %s", var2) + len;n new var3;n if (g_esp_line[id])n {n var3 = 8104;n }n elsen {n var3 = 8116;n }n len = format(szMenuBody[len], 255 - len, "nr4. wDraw Line %s", var3) + len;n new var4;n if (g_esp_aim[id])n {n var4 = 8212;n }n elsen {n var4 = 8224;n }n len = format(szMenuBody[len], 255 - len, "nr5. wAim Info %s", var4) + len;n new var5;n if (g_esp_info[id])n {n var5 = 8324;n }n elsen {n var5 = 8336;n }n len = format(szMenuBody[len], 255 - len, "nr6. wDraw Info %s", var5) + len;n len = format(szMenuBody[len], 255 - len, "nr0. wExit") + len;n show_menu(id, 575, szMenuBody, -1, {0});n return 1;n}nnpublic esp_menu_cmd(id, key)n{n switch (key)n {n case 0:n {n client_cmd(id, "esp_start");n }n case 1:n {n client_cmd(id, "esp_stop");n }n case 2:n {n g_esp_box[id] = 1 - g_esp_box[id];n }n case 3:n {n g_esp_line[id] = 1 - g_esp_line[id];n }n case 4:n {n g_esp_aim[id] = 1 - g_esp_aim[id];n }n case 5:n {n g_esp_info[id] = 1 - g_esp_info[id];n }n case 9:n {n return 1;n }n default:n {n }n }n client_cmd(id, "esp_menu");n return 1;n}nnpublic hook_spec_mode(id)n{n new string[32];n read_data(2, string, 31);n new var1;n if (equal(string, "#Spec_Mode2", AUTH) || equal(string, "#Spec_Mode4", AUTH))n {n g_is_spectating[id] = 1;n }n elsen {n g_is_spectating[id] = 0;n }n return 0;n}nnpublic hook_statusvalue(id)n{n g_who_viewing[id] = entity_get_int(id, 4);n return 0;n}nnpublic hook_team(id)n{n g_is_spectating[id] = 0;n remove_task(id + 263548, AUTH);n return 0;n}nnpublic client_putinserver(id)n{n g_is_spectating[id] = 0;n g_esp_box[id] = 1;n g_esp_line[id] = 1;n g_esp_aim[id] = 1;n g_esp_info[id] = 1;n g_who_viewing[id] = 0;n return 0;n}nnpublic client_disconnect(id)n{n g_is_spectating[id] = 0;n g_esp_box[id] = 1;n g_esp_line[id] = 1;n g_esp_aim[id] = 1;n g_esp_info[id] = 1;n g_who_viewing[id] = 0;n return 0;n}nnpublic draw_esp(param[])n{n new id = param[0];n new var1;n if (!get_cvar_num("esp_active") || is_user_alive(id) || !get_user_flags(id, AUTH) & 524288 || !g_is_spectating[id])n {n return 0;n }n new who_watching = g_who_viewing[id];n if (!is_user_connected(who_watching))n {n return 0;n }n new Float:viewed_origin[3] = 0.0;n new players[32];n new count;n get_players(players, count, 8660, 8668);n new x;n while (x < count)n {n if (!is_user_connected(who_watching))n {n return 0;n }n entity_get_vector(who_watching, AUTH, viewed_origin);n if (who_watching != players[x])n {n new target_team = get_user_team(players[x], {0}, AUTH);n new Float:target_origin[3] = 0.0;n entity_get_vector(players[x], AUTH, target_origin);n new Float:distance = vector_distance(viewed_origin, target_origin);n if (g_esp_line[id] == 1)n {n new width;n if (distance < 2040.0)n {n width = 255 - floatround(floatdiv(distance, 1090519040), AUTH) / 3;n }n elsen {n width = 1;n }n make_TE_BEAMENTPOINT(id, target_origin, width, target_team);n }n new Float:v_middle[3] = 0.0;n subVec(target_origin, viewed_origin, v_middle);n if (g_esp_box[id] == 1)n {n new Float:v_hitpoint[3] = 0.0;n trace_line(-1, viewed_origin, target_origin, v_hitpoint);n new Float:distance_to_hitpoint = vector_distance(viewed_origin, v_hitpoint);n new Float:scaled_bone_len = 0.0;n new Float:scaled_bone_width = 0.0;n if (ducking[players[x]])n {n scaled_bone_len = floatmul(floatdiv(distance_to_hitpoint, distance), floatsub(1112014848, 1099956224));n scaled_bone_width = floatmul(floatdiv(distance_to_hitpoint, distance), floatadd(1125515264, 1084227584));n }n elsen {n scaled_bone_len = floatmul(1112014848, floatdiv(distance_to_hitpoint, distance));n scaled_bone_width = floatmul(1125515264, floatdiv(distance_to_hitpoint, distance));n }n new Float:v_bone_start[3] = 0.0;n new Float:v_bone_end[3] = 0.0;n new Float:offset_vector[3] = 0.0;n normalize(v_middle, offset_vector, floatsub(distance_to_hitpoint, 1092616192));n new Float:eye_level[3] = 0.0;n copyVec(viewed_origin, eye_level);n if (ducking[players[x]])n {n new var2 = eye_level[2];n var2 = floatadd(1095027917, var2);n }n elsen {n new var3 = eye_level[2];n var3 = floatadd(1099694080, var3);n }n addVec(offset_vector, eye_level);n copyVec(offset_vector, v_bone_start);n copyVec(offset_vector, v_bone_end);n new var4 = v_bone_end[2];n var4 = floatsub(var4, scaled_bone_len);n new Float:distance_target_hitpoint = floatsub(distance, distance_to_hitpoint);n new actual_bright = 255;n if (distance_target_hitpoint < 2040.0)n {n actual_bright = 255 - floatround(floatdiv(distance_target_hitpoint, 1094713344), AUTH);n }n elsen {n actual_bright = 85;n }n make_TE_BEAMPOINTS(id, v_bone_start, v_bone_end, floatround(scaled_bone_width, AUTH), actual_bright);n }n if (g_esp_info[id] == 1)n {n if (is_in_viewcone(who_watching, target_origin))n {n new Float:xp = 2.0;n new Float:yp = 2.0;n get_screen_pos(id, v_middle, xp, yp);n draw_info(id, players[x], distance, xp, yp);n }n }n }n x++;n }n if (g_esp_aim[id] == 1)n {n new tmp[3];n new Float:start[3] = 0.0;n new Float:end[3] = 0.0;n get_user_origin(who_watching, tmp, 1);n IVecFVec(tmp, start);n get_user_origin(who_watching, tmp, "");n IVecFVec(tmp, end);n make_TE_AIMPOINTS(id, start, end);n }n return 0;n}nnFloat:get_screen_pos(target_id, Float:v_me_to_target[3], &Float:xp, &Float:yp)n{n new Float:v_aim[3] = 0.0;n VelocityByAim(target_id, 1, v_aim);n new Float:aim[3] = 0.0;n copyVec(v_aim, aim);n v_aim[2] = 0.0;n new Float:v_target[3] = 0.0;n copyVec(v_me_to_target, v_target);n v_target[2] = 0.0;n new Float:x_angle = 0.0;n xp = get_screen_pos_x(v_target, v_aim, x_angle);n yp = get_screen_pos_y(v_me_to_target, aim);n return x_angle;n}nnFloat:get_screen_pos_x(Float:target[3], Float:aim[3], &Float:xangle)n{n new Float:x_angle = floatacos(floatdiv(vectorProduct(aim, target), floatmul(getVecLen(aim), getVecLen(target))), 1);n new Float:x_pos = 0.0;n if (scalar_triple_product(aim, target) < 0)n {n x_angle *= -1;n }n new var1;n if (x_angle >= -45.0 && x_angle <= 45.0)n {n x_pos = floatsub(1065353216, floatdiv(floatadd(1065353216, floattan(x_angle, 1)), 1073741824));n xangle = x_angle;n return x_pos;n }n xangle = 0;n return -2.0;n}nnFloat:get_screen_pos_y(Float:v_target[3], Float:aim[3])n{n new Float:target[3] = 0.0;n rotateVectorZ(v_target, aim, target);n new Float:y_angle = floatacos(floatdiv(vectorProduct(aim, target), floatmul(getVecLen(aim), getVecLen(target))), 1);n new Float:y_pos = 0.0;n new Float:norm_target[3] = 0.0;n new Float:norm_aim[3] = 0.0;n normalize(v_target, norm_target, 1.0);n normalize(aim, norm_aim, 1.0);n if (norm_target[2] < norm_aim[2])n {n y_angle *= -1;n }n new var1;n if (y_angle >= -45.0 && y_angle <= 45.0)n {n y_pos = floatsub(1065353216, floatdiv(floatadd(1065353216, floattan(y_angle, 1)), 1073741824));n new var2;n if (y_pos >= 0.0 && y_pos <= 1.0)n {n return y_pos;n }n }n return -2.0;n}nndraw_info(id, target_id, Float:distance, Float:xp, Float:yp)n{n new var1;n if (xp > 0.0 && xp <= 1.0 && yp > 0.0 && yp <= 1.0)n {n set_hudmessage(255, 255, AUTH, floatabs(floatsub(xp, 1025758986)), floatabs(yp), AUTH, AUTH, get_cvar_float("esp_repeat"), 1036831949, 1045220557, 4);n new name[33];n get_user_name(target_id, name, 32);n new health = get_user_health(target_id);n new clip;n new ammo;n new weapon_id = dod_get_user_weapon(target_id, clip, ammo);n new var2;n if (weapon_id < 0 || weapon_id > 38)n {n weapon_id = 0;n }n show_hudmessage(id, "[%s]nHealth: %d Distance: %dn%snclip: %d ammo: %d", name, health, floatround(distance, AUTH), weapons[weapon_id], clip, ammo);n }n return 0;n}nnFloat:getVecLen(Float:Vec[3])n{n new Float:VecNull[3] = 0.0;n new Float:len = vector_distance(Vec, VecNull);n return len;n}nnFloat:scalar_triple_product(Float:a[3], Float:b[3])n{n new Float:up[3] = {0.0,0.0,4.6006E-41};n new Float:Ret[3] = 0.0;n Ret[0] = floatsub(floatmul(a[1], b[2]), floatmul(a[2], b[1]));n Ret[1] = floatsub(floatmul(a[2], b[0]), floatmul(a[0], b[2]));n Ret[2] = floatsub(floatmul(a[0], b[1]), floatmul(a[1], b[0]));n return vectorProduct(Ret, up);n}nnnormalize(Float:Vec[3], Float:Ret[3], Float:multiplier)n{n new Float:len = getVecLen(Vec);n copyVec(Vec, Ret);n new var1 = Ret;n var1[0] = floatdiv(var1[0], len);n new var2 = Ret[1];n var2 = floatdiv(var2, len);n new var3 = Ret[2];n var3 = floatdiv(var3, len);n new var4 = Ret;n var4[0] = floatmul(var4[0], multiplier);n new var5 = Ret[1];n var5 = floatmul(var5, multiplier);n new var6 = Ret[2];n var6 = floatmul(var6, multiplier);n return 0;n}nnrotateVectorZ(Float:Vec[3], Float:direction[3], Float:Ret[3])n{n new Float:tmp[3] = 0.0;n copyVec(Vec, tmp);n tmp[2] = 0.0;n new Float:dest_len = getVecLen(tmp);n copyVec(direction, tmp);n tmp[2] = 0.0;n new Float:tmp2[3] = 0.0;n normalize(tmp, tmp2, dest_len);n tmp2[2] = Vec[2];n copyVec(tmp2, Ret);n return 0;n}nnFloat:vectorProduct(Float:Vec1[3], Float:Vec2[3])n{n return floatadd(floatadd(floatmul(Vec1[0], Vec2[0]), floatmul(Vec1[1], Vec2[1])), floatmul(Vec1[2], Vec2[2]));n}nncopyVec(Float:Vec[3], Float:Ret[3])n{n Ret[0] = Vec[0];n Ret[1] = Vec[1];n Ret[2] = Vec[2];n return 0;n}nnsubVec(Float:Vec1[3], Float:Vec2[3], Float:Ret[3])n{n Ret[0] = floatsub(Vec1[0], Vec2[0]);n Ret[1] = floatsub(Vec1[1], Vec2[1]);n Ret[2] = floatsub(Vec1[2], Vec2[2]);n return 0;n}nnaddVec(Float:Vec1[3], Float:Vec2[3])n{n new var1 = Vec1;n var1[0] = floatadd(var1[0], Vec2[0]);n new var2 = Vec1[1];n var2 = floatadd(var2, Vec2[1]);n new var3 = Vec1[2];n var3 = floatadd(var3, Vec2[2]);n return 0;n}nnmake_TE_BEAMPOINTS(id, Float:Vec1[3], Float:Vec2[3], width, brightness)n{n message_begin(8, 23, 8932, id);n write_byte(AUTH);n write_coord(floatround(Vec1[0], AUTH));n write_coord(floatround(Vec1[1], AUTH));n write_coord(floatround(Vec1[2], AUTH));n write_coord(floatround(Vec2[0], AUTH));n write_coord(floatround(Vec2[1], AUTH));n write_coord(floatround(Vec2[2], AUTH));n write_short(laser);n write_byte("");n write_byte(AUTH);n write_byte(floatround(floatmul(1092616192, get_cvar_float("esp_repeat")), AUTH));n write_byte(width);n write_byte(AUTH);n write_byte(AUTH);n write_byte(255);n write_byte(AUTH);n write_byte(brightness);n write_byte(AUTH);n message_end();n return 0;n}nnmake_TE_BEAMENTPOINT(id, Float:target_origin[3], width, target_team)n{n message_begin(8, 23, 8988, id);n write_byte(1);n write_short(id);n write_coord(floatround(target_origin[0], AUTH));n write_coord(floatround(target_origin[1], AUTH));n write_coord(floatround(target_origin[2], AUTH));n write_short(laser);n write_byte(1);n write_byte(1000);n write_byte(floatround(floatmul(1092616192, get_cvar_float("esp_repeat")), AUTH));n write_byte(width);n write_byte(AUTH);n if (target_team == 1)n {n write_byte(50);n write_byte(AUTH);n write_byte(255);n }n elsen {n if (target_team == 2)n {n write_byte(255);n write_byte(AUTH);n write_byte(50);n }n }n write_byte(255);n write_byte(AUTH);n message_end();n return 0;n}nnmake_TE_AIMPOINTS(id, Float:Vec1[3], Float:Vec2[3])n{n message_begin(8, 23, 9044, id);n write_byte(AUTH);n write_coord(floatround(Vec1[0], AUTH));n write_coord(floatround(Vec1[1], AUTH));n write_coord(floatround(Vec1[2], AUTH));n write_coord(floatround(Vec2[0], AUTH));n write_coord(floatround(Vec2[1], AUTH));n write_coord(floatround(Vec2[2], AUTH));n write_short(laser);n write_byte("");n write_byte(AUTH);n write_byte(floatround(floatmul(1092616192, get_cvar_float("esp_repeat")), AUTH));n write_byte(1);n write_byte(AUTH);n write_byte(AUTH);n write_byte(255);n write_byte(AUTH);n write_byte(255);n write_byte(AUTH);n message_end();n return 0;n}nn

