ASTExtraPlayerCharacter *g_LocalPlayer = 0; ASTExtraPlayerController *g_LocalController = 0; // ================= 语言设置和记忆功能 ================= enum class Language { CHINESE, ENGLISH }; static Language currentLanguage = Language::CHINESE; static const char* LANGUAGE_FILE = "/sdcard/pubg_menu_language.conf"; // 保存语言设置到文件 void SaveLanguageSetting() { std::ofstream file(LANGUAGE_FILE); if (file.is_open()) { file << static_cast(currentLanguage); file.close(); } } // 从文件加载语言设置 void LoadLanguageSetting() { std::ifstream file(LANGUAGE_FILE); if (file.is_open()) { int lang; file >> lang; currentLanguage = static_cast(lang); file.close(); } } // 切换语言 void ToggleLanguage() { currentLanguage = (currentLanguage == Language::CHINESE) ? Language::ENGLISH : Language::CHINESE; SaveLanguageSetting(); } // 多语言文本函数 const char* T(const char* chinese, const char* english) { return (currentLanguage == Language::CHINESE) ? chinese : english; } #define IM_PI 3.14159265358979323846f #define RAD2DEG(x) ((float)(x) * (float)(180.f / IM_PI)) #define DEG2RAD(x) ((float)(x) * (float)(IM_PI / 180.f)) ImColor 紫色2 = ImColor(46,46,177); ImColor 粉色=ImColor(226,145,163,255); ImColor 浅蓝 = ImColor(ImVec4(36/255.f, 249/255.f, 217/255.f, 255/255.f)); ImColor 蓝色 = ImColor(ImVec4(170/255.f, 203/255.f, 244/255.f, 0.95f)); ImColor 白色 = ImColor(ImVec4(255/255.f, 255/255.f, 258/255.f, 0.95f)); ImColor 浅粉 = ImColor(ImVec4(255/255.f, 200/255.f, 250/255.f, 0.95f)); ImColor 黑色 = ImColor(ImVec4(0/255.f, 0/255.f, 0/255.f, 0.7f)); ImColor 半黑 = ImColor(ImVec4(0/255.f, 0/255.f, 0/255.f, 0.18f)); ImColor 血色 = ImColor(ImVec4(0/255.f, 249/255.f, 0/255.f, 0.35f)); ImColor 红色 = ImColor(ImVec4(233/255.f, 55/255.f, 51/255.f, 0.95f)); ImColor 绿色 = ImColor(ImVec4(50/255.f, 222/215.f, 50/255.f, 0.95f)); ImColor 黄色 = ImColor(ImVec4(255/255.f, 255/255.f, 0/255.f, 0.95f)); ImColor 橘黄 = ImColor(ImVec4(255/255.f, 150/255.f, 30/255.f, 0.95f)); ImColor 粉红 = ImColor(ImVec4(220/255.f, 108/255.f, 1202/255.f, 0.95f)); ImColor 紫色 = ImColor(ImVec4(169/255.f, 120/255.f, 223/255.f, 0.95f)); ImColor 空白 = ImColor(ImVec4(1.0/255.f, 1.0/255.f, 1.0/255.f, 0.0f)); namespace Settings { static int Tab = 1; } std::string getClipboardTextt() { if (!g_App) return ""; auto activity = g_App->activity; if (!activity) return ""; auto vm = activity->vm; if (!vm) return ""; auto object = activity->clazz; if (!object) return ""; std::string result; JNIEnv *env; vm->AttachCurrentThread(&env, 0); { auto ContextClass = env->FindClass("android/content/Context"); auto getSystemServiceMethod = env->GetMethodID(ContextClass, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;"); auto str = env->NewStringUTF("clipboard"); auto clipboardManager = env->CallObjectMethod(object, getSystemServiceMethod, str); env->DeleteLocalRef(str); auto ClipboardManagerClass = env->FindClass("android/content/ClipboardManager"); auto getText = env->GetMethodID(ClipboardManagerClass, "getText", "()Ljava/lang/CharSequence;"); auto CharSequenceClass = env->FindClass("java/lang/CharSequence"); auto toStringMethod = env->GetMethodID(CharSequenceClass, "toString", "()Ljava/lang/String;"); auto text = env->CallObjectMethod(clipboardManager, getText); if (text) { str = (jstring) env->CallObjectMethod(text, toStringMethod); result = env->GetStringUTFChars(str, 0); env->DeleteLocalRef(str); env->DeleteLocalRef(text); } env->DeleteLocalRef(CharSequenceClass); env->DeleteLocalRef(ClipboardManagerClass); env->DeleteLocalRef(clipboardManager); env->DeleteLocalRef(ContextClass); } vm->DetachCurrentThread(); return result; } // 安全写入D内存 void safeWritedword(uintptr_t addr, int value) { long pageSize = sysconf(_SC_PAGESIZE); // = 4096 uintptr_t pageStart = addr & ~(pageSize - 1); if (mprotect((void*)(pageStart), pageSize * 2, PROT_READ | PROT_WRITE | PROT_EXEC) != 0) { perror("mprotect failed"); return; } *((int*)addr) = value; } FVector WorldToRadar(float Yaw, FVector Origin, FVector LocalOrigin, float PosX, float PosY, Vector3 Size, bool &outbuff) { bool flag = false; double num = (double)Yaw; double num2 = num * 0.017453292519943295; float num3 = (float)std::cos(num2); float num4 = (float)std::sin(num2); float num5 = Origin.X - LocalOrigin.X; float num6 = Origin.Y - LocalOrigin.Y; struct FVector Xector; Xector.X = (num6 * num3 - num5 * num4) / 150.f; Xector.Y = (num5 * num3 + num6 * num4) / 150.f; struct FVector Xector2; Xector2.X = Xector.X + PosX + Size.X / 2.f; Xector2.Y = -Xector.Y + PosY + Size.Y / 2.f; bool flag2 = Xector2.X > PosX + Size.X; if (flag2) { Xector2.X = PosX + Size.X; }else{ bool flag3 = Xector2.X < PosX; if (flag3) { Xector2.X = PosX; } } bool flag4 = Xector2.Y > PosY + Size.Y; if (flag4) { Xector2.Y = PosY + Size.Y; }else{ bool flag5 = Xector2.Y < PosY; if (flag5){ Xector2.Y = PosY; } } bool flag6 = Xector2.Y == PosY || Xector2.X == PosX; if (flag6){ flag = true; } outbuff = flag; return Xector2; } void VectorAnglesRadar(Vector3 & forward, FVector & angles) { if (forward.X == 0.f && forward.Y == 0.f) { angles.X = forward.Z > 0.f ? -90.f : 90.f; angles.Y = 0.f; } else { angles.X = RAD2DEG(atan2(-forward.Z, forward.Magnitude(forward))); angles.Y = RAD2DEG(atan2(forward.Y, forward.X)); } angles.Z = 0.f; } void Box4Line(ImDrawList *draw, float thicc, int x, int y, int w, int h, int color) { int iw = w / 4; int ih = h / 4; // top draw->AddRect(ImVec2(x, y),ImVec2(x + iw, y), color, thicc); draw->AddRect(ImVec2(x + w - iw, y),ImVec2(x + w, y), color, thicc); draw->AddRect(ImVec2(x, y),ImVec2(x, y + ih), color, thicc); draw->AddRect(ImVec2(x + w - 1, y),ImVec2(x + w - 1, y + ih), color, thicc);; // bottom draw->AddRect(ImVec2(x, y + h),ImVec2(x + iw, y + h), color, thicc); draw->AddRect(ImVec2(x + w - iw, y + h),ImVec2(x + w, y + h), color, thicc); draw->AddRect(ImVec2(x, y + h - ih), ImVec2(x, y + h), color, thicc); draw->AddRect(ImVec2(x + w - 1, y + h - ih), ImVec2(x + w - 1, y + h), color, thicc); } void 绘制加粗文本(float size, float x, float y, ImColor color, ImColor color1, const char* str) { ImGui::GetBackgroundDrawList()->AddText(NULL, size, {x-0.8, y-0.8}, color1, str); ImGui::GetBackgroundDrawList()->AddText(NULL, size, {x+0.8, y+0.8}, color1, str); ImGui::GetBackgroundDrawList()->AddText(NULL, size, {x, y}, color, str); } void RotateTriangle(std::array & points, float rotation) { const auto points_center = (points.at(0) + points.at(1) + points.at(2)) / 3; for (auto & point : points) { point = point - points_center; const auto temp_x = point.X; const auto temp_y = point.Y; const auto theta = DEG2RAD(rotation); const auto c = cosf(theta); const auto s = sinf(theta); point.X = temp_x * c - temp_y * s; point.Y = temp_x * s + temp_y * c; point = point + points_center; } }