1
0
forked from gcdsfh/PMDT
Files
PMDT/structures/functions/common_funcs.h
T
2026-05-03 14:19:19 +08:00

216 lines
7.1 KiB
C++
Executable File

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<int>(currentLanguage);
file.close();
}
}
// 从文件加载语言设置
void LoadLanguageSetting() {
std::ifstream file(LANGUAGE_FILE);
if (file.is_open()) {
int lang;
file >> lang;
currentLanguage = static_cast<Language>(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<Vector3, 3> & 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;
}
}